Pagsulat og telegram bot sa R ​​(bahin 1): Paghimo og bot ug paggamit niini sa pagpadala og mga mensahe sa telegrama

Ang mga tumatan-aw sa Telegram nagkadaghan matag adlaw, gipadali kini sa kasayon ​​​​sa messenger, ang presensya sa mga channel, chat, ug siyempre ang abilidad sa paghimo og mga bot.

Ang mga bot mahimong magamit alang sa hingpit nga lainlaing katuyoan, gikan sa pag-automate sa mga komunikasyon sa imong mga kustomer hangtod sa pagdumala sa imong kaugalingon nga mga buluhaton.

Sa tinuud, mahimo nimong gamiton ang telegrama aron mahimo ang bisan unsang mga operasyon pinaagi sa usa ka bot: magpadala o mangayo og datos, magpadagan sa mga buluhaton sa server, mangolekta og kasayuran sa usa ka database, magpadala mga email, ug uban pa.

Nagplano ko nga magsulat ug serye sa mga artikulo kon unsaon pagtrabaho telegram bot API, ug pagsulat og mga bot aron mohaum sa imong mga panginahanglan.

Pagsulat og telegram bot sa R ​​(bahin 1): Paghimo og bot ug paggamit niini sa pagpadala og mga mensahe sa telegrama

Niining una nga artikulo atong mahibal-an kung giunsa paghimo ang usa ka bot sa telegrama ug gamiton kini aron magpadala mga pahibalo sa telegrama.

Ingon usa ka sangputanan, kami adunay usa ka bot nga magsusi sa kahimtang sa katapusan nga pagpatuman sa tanan nga mga buluhaton sa Windows Task Scheduler, ug magpadala kanimo mga pahibalo kung adunay bisan kinsa nga napakyas.

Apan ang katuyoan sa kini nga serye sa mga artikulo dili aron itudlo kanimo kung giunsa pagsulat ang usa ka bot alang sa usa ka piho, pig-ot nga buluhaton, apan sa kasagaran ipaila kanimo ang syntax sa package. telegram.bot, ug mga pananglitan sa code diin mahimo nimong isulat ang mga bot aron masulbad ang imong kaugalingon nga mga problema.

Mga sulod

Kung interesado ka sa pagtuki sa datos, mahimong interesado ka sa akong telegram и youtube mga kanal. Kadaghanan sa sulod niini gipahinungod sa R ​​nga pinulongan.

  1. Paghimo og telegram bot
  2. Pag-instalar sa usa ka pakete alang sa pagtrabaho sa usa ka telegrama bot sa R
  3. Pagpadala og mga mensahe gikan sa R ​​ngadto sa Telegram
  4. Paghimo og eskedyul alang sa pagpadagan sa mga pag-scan sa buluhaton
  5. konklusyon

Paghimo og telegram bot

Una, kinahanglan naton maghimo usa ka bot. Gihimo kini gamit ang usa ka espesyal nga bot BotAmahan, adto sa link ug pagsulat sa bot /start.

Pagkahuman makadawat ka usa ka mensahe nga adunay lista sa mga mando:

Mensahe gikan sa BotFather

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

Aron makahimo og bag-ong bot, ipadala ang sugo /newbot.

Ang BotFather mohangyo kanimo sa pagsulod sa ngalan sa bot ug pag-login.

BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Alexey Seleznev, [25.07.20 09:40]
My Test Bot

BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

Alexey Seleznev, [25.07.20 09:40]
@my_test_bot

Mahimo nimong isulod ang bisan unsang ngalan, apan ang pag-login kinahanglan matapos sa bot.

Kung gibuhat nimo ang tanan sa husto, makadawat ka sa mosunod nga mensahe:

Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Sunod kinahanglan nimo ang nadawat nga token sa API, sa akong pananglitan kini 123456789:abcdefghijklmnopqrstuvwxyz.

Niini nga lakang, ang buluhaton sa pagpangandam alang sa paghimo sa bot nahuman.

Pag-instalar sa usa ka pakete alang sa pagtrabaho sa usa ka telegrama bot sa R

Nagtuo ko nga naa na nimo ang R nga pinulongan ug ang RStudio development environment nga na-install. Kung dili kini ang kahimtang, nan mahimo nimong tan-awon kini panudlo sa video sa unsa nga paagi sa pag-instalar kanila.

Aron magtrabaho kauban ang Telegram Bot API among gamiton ang R package telegrama.bot.

Ang pag-instalar sa mga pakete sa R ​​gihimo gamit ang function install.packages(), aron ma-install ang package nga kinahanglan namon, gamita ang command install.packages("telegram.bot").

Mahibal-an nimo ang dugang bahin sa pag-install sa lainlaing mga pakete gikan sa kini nga video.

Human ma-install ang package, kinahanglan nimo nga ikonektar kini:

library(telegram.bot)

Pagpadala og mga mensahe gikan sa R ​​ngadto sa Telegram

Ang bot nga imong gibuhat makit-an sa Telegram gamit ang pag-login nga gitakda sa panahon sa paglalang, sa akong kaso kini @my_test_bot.

Ipadala sa bot ang bisan unsang mensahe, sama sa "Hey bot." Sa pagkakaron, gikinahanglan namo kini aron makuha ang id sa imong chat sa bot.

Karon atong isulat ang mosunod nga code sa R.

library(telegram.bot)

# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Запрашиваем информацию о боте
print(bot$getMe())

# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()

# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()

Sa sinugdan, naghimo kami usa ka pananglitan sa among bot nga adunay function Bot(), ang nadawat na nga timaan kinahanglang ipasa niini isip argumento.

Wala kini giisip nga labing maayong praktis sa pagtipig sa token sa code, aron mahimo nimo kini tipigan sa usa ka variable sa palibot ug basahon kini gikan niini. Pinaagi sa default sa package telegram.bot Gipatuman ang suporta alang sa environment variables sa mosunod nga mga ngalan: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Sa baylo ИМЯ_ВАШЕГО_БОТА ilisan ang ngalan nga imong gipiho sa paghimo, sa akong kaso kini mahimong usa ka variable R_TELEGRAM_BOT_My Test Bot.

Adunay daghang mga paagi aron makahimo usa ka variable sa palibot; Isulti ko kanimo ang bahin sa labing unibersal ug cross-platform nga usa. Paghimo sa imong home directory (makita nimo kini gamit ang command path.expand("~")) text file nga adunay ngalan .Renviron. Mahimo usab nimo kini gamit ang command file.edit(path.expand(file.path("~", ".Renviron"))).

Ug idugang ang mosunod nga linya niini.

R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

Sunod, mahimo nimong gamiton ang token nga gitipig sa variable sa palibot gamit ang function bot_token(), i.e. sama niini:

bot <- Bot(token = bot_token("My Test Bot"))

Paagi getUpdates()nagtugot kanamo nga makakuha og mga update sa bot, i.e. mga mensahe nga gipadala kaniya. Pamaagi from_chat_id(), nagtugot kanimo sa pagkuha sa ID sa chat diin gipadala ang mensahe. Kinahanglan namon kini nga ID aron magpadala mga mensahe gikan sa bot.

Dugang pa sa chat id gikan sa butang nga nakuha pinaagi sa pamaagi getUpdates() makadawat ka usab ug ubang mapuslanong impormasyon. Pananglitan, ang impormasyon bahin sa tiggamit nga nagpadala sa mensahe.

updates[[1L]]$message$from

$id
[1] 000000000

$is_bot
[1] FALSE

$first_name
[1] "Alexey"

$last_name
[1] "Seleznev"

$username
[1] "AlexeySeleznev"

$language_code
[1] "ru"

Mao nga, sa kini nga yugto naa na namon ang tanan nga kinahanglan namon nga magpadala usa ka mensahe gikan sa usa ka bot hangtod sa Telegram. Gamiton nato ang pamaagi sendMessage(), diin kinahanglan nimong ipasa ang chat ID, text sa mensahe, ug tipo sa markup sa text sa mensahe. Ang tipo sa markup mahimong Markdown o HTML ug gitakda sa argumento parse_mode.

# Отправка сообщения
bot$sendMessage(chat_id,
                text = "Привет, *жирный текст* _курсив_",
                parse_mode = "Markdown"
)

Mga sukaranan sa pag-format sa markdown:

  • Ang bold nga font gi-highlight sa *:
    • pananglitan: *жирный шритф*
    • resulta: bold nga font
  • Ang mga italiko gipakita pinaagi sa mga underscore:
    • pananglitan: _курсив_
    • resulta: italiko
  • Ang monospace nga font, nga sagad gigamit sa pagpasiugda sa code sa programa, gipiho gamit ang mga apostrophe - `:
    • pananglitan: `monospace font`
    • resulta: моноширинный шрифт

Mga sukaranan sa pag-format sa HTML markup:
Sa HTML, imong giputos ang bahin sa teksto nga kinahanglan i-highlight sa mga tag, pananglitan <тег>текст</тег>.

  • <tag> - pangbukas nga tag
  • - panapos nga tag

HTML markup tags

  • <b> - bold nga font
    • pananglitan: <b>жирный шрифт</b>
    • epekto bold nga font
  • <i> - italiko
    • pananglitan: <i>курсив</i>
    • resulta: italiko
  • — моноширинный шрифт
    • pananglitan: моноширинный шрифт
    • resulta: моноширинный шрифт

Dugang sa teksto, mahimo nimong ipadala ang ubang mga sulud gamit ang mga espesyal nga pamaagi:

# Отправить изображение
bot$sendPhoto(chat_id,
  photo = "https://telegram.org/img/t_logo.png"
)

# Отправка голосового сообщения
bot$sendAudio(chat_id,
  audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3"
)

# Отправить документ
bot$sendDocument(chat_id,
  document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf"
)

# Отправить стикер
bot$sendSticker(chat_id,
  sticker = "https://www.gstatic.com/webp/gallery/1.webp"
)

# Отправить видео
bot$sendVideo(chat_id,
  video = "http://techslides.com/demos/sample-videos/small.mp4"
)

# Отправить gif анимацию
bot$sendAnimation(chat_id,
  animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif"
)

# Отправить локацию
bot$sendLocation(chat_id,
  latitude = 51.521727,
  longitude = -0.117255
)

# Имитация действия в чате
bot$sendChatAction(chat_id,
  action = "typing"
)

Mga. pananglitan gamit ang pamaagi sendPhoto() mahimo ka magpadala usa ka graph nga gitipig ingon usa ka imahe nga imong gibuhat gamit ang package ggplot2.

Pagsusi sa Windows Task Scheduler ug pagpadala sa mga pahibalo bahin sa mga buluhaton nga dili normal nga natapos

Aron magtrabaho sa Windows Task Scheduler kinahanglan nimo nga i-install ang package taskscheduleR, ug alang sa kasayon ​​​​sa pagtrabaho uban sa datos, i-install ang package dplyr.

# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)

Sunod, gamita ang function taskscheduler_ls() nangayo kami og impormasyon bahin sa mga buluhaton gikan sa among scheduler. Paggamit sa function filter() gikan sa package dplyr Among tangtangon gikan sa lista sa mga buluhaton kadtong malampusong nahuman ug adunay kataposang resulta nga status nga 0, ug kadtong wala pa malunsad ug adunay status nga 267011, disabled nga mga buluhaton, ug mga buluhaton nga kasamtangang nagdagan.

# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Sa butang task Kami karon adunay usa ka lista sa mga buluhaton nga napakyas, kinahanglan namon ipadala kini nga lista sa Telegram.

Kung atong tan-awon ang matag sugo sa mas detalyado, nan:

  • filter() - nagsala sa listahan sa mga buluhaton sumala sa mga kondisyon nga gihulagway sa ibabaw
  • select() - nagbilin lamang sa usa ka uma sa lamesa nga adunay ngalan sa mga buluhaton
  • unique() - nagtangtang sa mga duplicate nga ngalan
  • unlist() - nag-convert sa pinili nga kolum sa lamesa ngadto sa usa ka vector
  • paste0() - nagkonektar sa mga ngalan sa mga buluhaton sa usa ka linya, ug nagbutang sa usa ka linya nga feed ingon usa ka separator, i.e. n.

Ang nahabilin lamang alang kanamo mao ang pagpadala niini nga resulta pinaagi sa telegrama.

bot$sendMessage(chat_id,
                text = task,
                parse_mode = "Markdown"
)

Busa, sa pagkakaron ang bot code ingon niini:

Pagrepaso sa bot code

# Подключение пакета
library(telegram.bot)
library(taskscheduleR)
library(dplyr)

# инициализируем бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# идентификатор чата
chat_id <- 123456789

# запрашиваем список задач
task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011")  &
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

# если есть проблемные задачи отправляем сообщение
if ( task != "" ) {

  bot$sendMessage(chat_id,
                  text = task,
                  parse_mode = "Markdown"
  )

}

Kung gamiton ang pananglitan sa ibabaw, ilisan ang imong bot token ug imong chat ID sa code.

Mahimo nimong idugang ang mga kondisyon alang sa pagsala sa mga buluhaton, pananglitan, pagsusi lamang sa mga buluhaton nga imong gibuhat, dili apil ang mga sistema.

Mahimo usab nimo ibutang ang lainlaing mga setting sa usa ka lahi nga file sa pag-configure, ug tipigan ang chat id ug token niini. Mahimo nimong basahon ang config, pananglitan, gamit ang package configr.

Pananglitan niini nga config

[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Usa ka pananglitan sa pagbasa sa mga variable gikan sa usa ka config sa R

library(configr)

# чтение конфина
config <- read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE)

bot_token <- config$telegram_bot$bot_token
chat_id     <- config$telegram_bot$chat_id

Pag-set up og eskedyul para sa pagpadagan sa mga task scan

Ang proseso sa pag-set up sa paglunsad sa mga script sa usa ka eskedyul gihulagway sa mas detalyado niini artikulo. Dinhi ihulagway ko lang ang mga lakang nga kinahanglan sundon alang niini. Kung ang bisan unsang mga lakang dili klaro kanimo, unya tan-awa ang artikulo nga akong gihatag usa ka link.

Ibutang nato nga gitipigan nato ang atong bot code sa usa ka file check_bot.R. Aron ma-iskedyul kini nga file nga modagan kanunay, sunda kini nga mga lakang:

  1. Isulat ang dalan sa folder diin ang R na-install sa Path system variable; sa Windows, ang agianan mahimong sama niini: C:Program FilesRR-4.0.2bin.
  2. Paghimo og executable bat file nga adunay usa lang ka linya R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ilisan C:rscriptscheck_botcheck_bot.R sa bug-os nga dalan sa imong R file.
  3. Sunod, gamita ang Windows Task Scheduler aron mag-set up og iskedyul sa paglusad, pananglitan, matag tunga sa oras.

konklusyon

Niini nga artikulo, nahibal-an namon kung giunsa paghimo ang usa ka bot ug gamiton kini aron magpadala lainlaing mga pahibalo sa telegrama.

Gihubit nako ang tahas sa pag-monitor sa Windows Task Scheduler, apan mahimo nimong gamiton ang materyal sa kini nga artikulo aron ipadala ang bisan unsang mga pahibalo, gikan sa forecast sa panahon hangtod sa mga kinutlo sa stock sa stock exchange, tungod kay Gitugotan ka sa R ​​nga magkonektar sa daghang mga gigikanan sa datos.

Sa sunod nga artikulo, mahibal-an namon kung giunsa ang pagdugang mga mando ug usa ka keyboard sa bot aron dili lamang kini magpadala mga pahibalo, apan maghimo usab nga labi ka komplikado nga mga aksyon.

Source: www.habr.com

Idugang sa usa ka comment