In telegrambot skriuwe yn R (diel 1): in bot oanmeitsje en it brûke om berjochten yn telegram te ferstjoeren

It Telegram-publyk groeit elke dei eksponentiell, dit wurdt fasilitearre troch it gemak fan 'e messenger, de oanwêzigens fan kanalen, petearen, en fansels de mooglikheid om bots te meitsjen.

Bots kinne brûkt wurde foar folslein oare doelen, fan automatisearjen fan kommunikaasje mei jo klanten oant it behearen fan jo eigen taken.

Yn essinsje kinne jo telegram brûke om alle operaasjes út te fieren fia in bot: gegevens ferstjoere of oanfreegje, taken útfiere op 'e tsjinner, ynformaasje sammelje yn in database, e-post ferstjoere, ensfh.

Ik bin fan plan in searje artikels te skriuwen oer hoe't ik mei wurkje telegram bot API, en skriuw bots foar jo behoeften.

In telegrambot skriuwe yn R (diel 1): in bot oanmeitsje en it brûke om berjochten yn telegram te ferstjoeren

Yn dit earste artikel sille wy útfine hoe't jo in telegrambot oanmeitsje en it brûke om notifikaasjes yn telegram te stjoeren.

As resultaat sille wy in bot hawwe dy't de status fan 'e lêste útfiering fan alle taken yn' e Windows Task Scheduler sil kontrolearje, en jo notifikaasjes stjoere as ien fan har mislearre.

Mar it doel fan dizze searje artikels is net om jo te learen hoe't jo in bot skriuwe kinne foar in spesifike, smelle taak, mar om jo yn 't algemien foar te stellen oan' e syntaksis fan it pakket telegram.bot, en koadefoarbylden wêrmei jo bots kinne skriuwe om jo eigen problemen op te lossen.

Ynhâld

As jo ​​​​ynteressearre binne yn gegevensanalyse, kinne jo miskien wêze ynteressearre yn myn telegram и youtube kanalen. It grutste part fan de ynhâld is wijd oan de R-taal.

  1. It meitsjen fan in telegram bot
  2. It ynstallearjen fan in pakket foar wurkjen mei in telegram bot yn R
  3. Berjochten ferstjoere fan R nei Telegram
  4. In skema ynstelle foar it útfieren fan taakscans
  5. konklúzje

It meitsjen fan in telegram bot

Earst moatte wy in bot meitsje. Dit wurdt dien mei in spesjale bot BotFather, gean nei link en skriuw nei de bot /start.

Dêrnei krije jo in berjocht mei in list mei kommando's:

Berjocht fan 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

Om in nije bot te meitsjen, stjoer it kommando /newbot.

BotFather sil jo freegje om de namme en oanmelding fan 'e bot yn te fieren.

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

Jo kinne elke namme ynfiere, mar de oanmelding moat einigje mei bot.

As jo ​​​​alles goed dien hawwe, krije jo it folgjende berjocht:

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

Folgjende sille jo it ûntfongen API-token nedich hawwe, yn myn foarbyld is it 123456789:abcdefghijklmnopqrstuvwxyz.

Op dizze stap is it tariedende wurk foar it meitsjen fan de bot foltôge.

It ynstallearjen fan in pakket foar wurkjen mei in telegram bot yn R

Ik nim oan dat jo de R-taal en de RStudio-ûntwikkelingsomjouwing al ynstalleare hawwe. As dit net it gefal is, dan kinne jo hjir nei sjen fideo tutorial oer hoe te ynstallearjen se.

Om te wurkjen mei de Telegram Bot API sille wy it R-pakket brûke telegram.bot.

It ynstallearjen fan pakketten yn R wurdt dien mei de funksje install.packages(), dus om it pakket te ynstallearjen dat wy nedich binne, brûk it kommando install.packages("telegram.bot").

Jo kinne mear leare oer it ynstallearjen fan ferskate pakketten fan dizze fideo.

Nei it ynstallearjen fan it pakket moatte jo it ferbine:

library(telegram.bot)

Berjochten ferstjoere fan R nei Telegram

De bot dy't jo makke hawwe is te finen yn Telegram mei de oanmelding dy't jo oanjûn hawwe tidens oanmeitsjen, yn myn gefal is it it @my_test_bot.

Stjoer de bot elk berjocht, lykas "Hey bot." Op it stuit hawwe wy dit nedich om de id fan jo petear mei de bot te krijen.

No skriuwe wy de folgjende koade yn R.

library(telegram.bot)

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

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

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

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

Yn it earstoan meitsje wy in eksimplaar fan ús bot mei de funksje Bot(), moat it earder ûntfongen token dêryn wurde trochjûn as argumint.

It wurdt net beskôge as bêste praktyk om it token yn koade op te slaan, sadat jo it opslaan kinne yn in omjouwingsfariabele en it derfan lêze. Standert yn pakket telegram.bot Stipe foar omjouwingsfariabelen fan 'e folgjende nammen is ymplementearre: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Ynstee ИМЯ_ВАШЕГО_БОТА ferfange de namme dy't jo opjûn hawwe by it meitsjen, yn myn gefal sil it in fariabele wêze R_TELEGRAM_BOT_My Test Bot.

D'r binne ferskate manieren om in omjouwingsfariabele te meitsjen; Ik sil jo fertelle oer de meast universele en cross-platform. Meitsje yn jo thúsmap (jo kinne it fine mei it kommando path.expand("~")) tekstbestân mei de namme .Renviron. Jo kinne dit ek dwaan mei it kommando file.edit(path.expand(file.path("~", ".Renviron"))).

En foegje de folgjende rigel ta.

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

Dêrnei kinne jo it token brûke dat is bewarre yn 'e omjouwingsfariabele mei de funksje bot_token(), d.w.s. lykas dit:

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

Metoade getUpdates()lit ús bot-updates krije, d.w.s. berjochten dy't nei him stjoerd binne. Metoade from_chat_id(), lit jo de ID krije fan it petear wêrfan it berjocht ferstjoerd is. Wy hawwe dizze ID nedich om berjochten fan 'e bot te stjoeren.

Neist it petear id fan it objekt krigen troch de metoade getUpdates() jo krije ek wat oare nuttige ynformaasje. Bygelyks ynformaasje oer de brûker dy't it berjocht ferstjoerd hat.

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"

Dat, op dit stadium hawwe wy al alles wat wy nedich binne om in berjocht fan in bot nei Telegram te stjoeren. Litte wy de metoade brûke sendMessage(), wêryn jo de petear-ID, berjochttekst en markearringstype foar berjochttekst moatte trochjaan. It markuptype kin Markdown of HTML wêze en wurdt ynsteld troch it argumint parse_mode.

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

Markdown opmaak basics:

  • Fet lettertype wurdt markearre mei *:
    • foarbyld: *жирный шритф*
    • resultaat: fet lettertype
  • Kursyf wurde oanjûn troch ûnderstreken:
    • foarbyld: _курсив_
    • resultaat: kursyf
  • It monospace-lettertype, dat normaal brûkt wurdt om programmakoade te markearjen, wurdt oanjûn mei apostrofen - `:
    • foarbyld: `monospace lettertype`
    • resultaat: моноширинный шрифт

Basisfoarmen fan HTML-opmaak:
Yn HTML ferpakke jo it diel fan 'e tekst dat markearre wurde moat yn tags, bygelyks <тег>текст</тег>.

  • <tag> - iepeningstag
  • - sluten tag

HTML markup tags

  • <b> - fet lettertype
    • foarbyld: <b>жирный шрифт</b>
    • effekt fet lettertype
  • <i> - kursyf
    • foarbyld: <i>курсив</i>
    • resultaat: kursyf
  • — моноширинный шрифт
    • foarbyld: моноширинный шрифт
    • resultaat: моноширинный шрифт

Neist tekst kinne jo oare ynhâld ferstjoere mei spesjale metoaden:

# Отправить изображение
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"
)

Dy. bygelyks mei help fan de metoade sendPhoto() Jo kinne de grafyk stjoere dy't jo makke hawwe mei it pakket, bewarre as in ôfbylding ggplot2.

Kontrolearje de Windows Task Scheduler en ferstjoeren fan notifikaasjes oer taken dy't abnormaal binne beëinige

Om te wurkjen mei Windows Task Scheduler moatte jo it pakket ynstallearje taskscheduleR, en foar it gemak fan wurkjen mei gegevens, ynstallearje it pakket dplyr.

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

Folgjende, mei help fan de funksje taskscheduler_ls() wy freegje ynformaasje oer taken fan ús planner. Mei help fan de funksje filter() út it pakket dplyr Wy fuortsmite út 'e list mei taken dy't mei sukses foltôge binne en in lêste resultaatstatus hawwe fan 0, en dyjingen dy't noait binne lansearre en hawwe in status fan 267011, útskeakele taken, en taken dy't op it stuit rinne.

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

Yn it objekt task Wy hawwe no in list mei taken dy't mislearre, wy moatte dizze list stjoere nei Telegram.

As wy elk kommando yn mear detail besjen, dan:

  • filter() - filtert de list mei taken neffens de hjirboppe beskreaune betingsten
  • select() - lit mar ien fjild yn 'e tabel litte mei de namme fan 'e taken
  • unique() - ferwideret dûbele nammen
  • unlist() - konvertearret de selektearre tabelkolom nei in fektor
  • paste0() - ferbynt de nammen fan taken yn ien rigel, en set in line feed as skieding, d.w.s. n.

Alles wat foar ús bliuwt is dit resultaat fia telegram te stjoeren.

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

Dat, op it stuit sjocht de botkoade der sa út:

Task review bot koade

# Подключение пакета
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"
  )

}

As jo ​​​​it foarbyld hjirboppe brûke, ferfange jo bot-token en jo petear-ID yn 'e koade.

Jo kinne betingsten tafoegje foar it filterjen fan taken, bygelyks kontrolearje allinich de taken dy't jo makke hawwe, útsein systeem.

Jo kinne ek ferskate ynstellings yn in apart konfiguraasjetriem pleatse, en de petear-id en token dêryn opslaan. Jo kinne de konfiguraasje lêze, bygelyks mei it pakket configr.

Foarbyld ini config

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

In foarbyld fan it lêzen fan fariabelen fan in konfiguraasje yn 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

In skema ynstelle foar it útfieren fan taakscans

It proses fan it opsetten fan de lansearring fan skripts op in skema wurdt yn mear detail beskreaun yn dit artikel. Hjir sil ik allinich de stappen beskriuwe dy't hjirfoar moatte wurde folge. As ien fan 'e stappen foar jo net dúdlik is, ferwize dan nei it artikel wêr't ik in keppeling joech.

Litte wy oannimme dat wy ús botkoade opslein hawwe yn in bestân check_bot.R. Om dit bestân te plannen om regelmjittich te rinnen, folgje dizze stappen:

  1. Skriuw it paad nei de map wêryn R is ynstalleare yn 'e Path-systeemfariabele; yn Windows sil it paad sa wêze: C:Program FilesRR-4.0.2bin.
  2. Meitsje in útfierber batbestân mei mar ien rigel R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ferfange C:rscriptscheck_botcheck_bot.R nei it folsleine paad nei jo R-bestân.
  3. Brûk dan Windows Task Scheduler om in lansearskema yn te stellen, bygelyks elk heal oere.

konklúzje

Yn dit artikel hawwe wy útfûn hoe't jo in bot kinne meitsje en it brûke om ferskate notifikaasjes yn telegram te stjoeren.

Ik beskreau de taak fan it kontrolearjen fan de Windows Task Scheduler, mar jo kinne it materiaal yn dit artikel brûke om alle notifikaasjes te stjoeren, fan 'e waarberjocht oant oandielen op' e beurs, om't R kinne jo ferbine mei in grut oantal gegevens boarnen.

Yn it folgjende artikel sille wy útfine hoe't jo kommando's en in toetseboerd tafoegje kinne oan 'e bot, sadat it net allinich notifikaasjes kin stjoere, mar ek kompleksere aksjes útfiere.

Boarne: www.habr.com

Add a comment