Mir schreiwen en Telegramm Bot an der R Sprooch (Deel 1): Erstellt e Bot a schéckt Messagen op Telegramm mat der Hëllef

D'Telegram Publikum wiisst all Dag exponentiell, dëst gëtt erliichtert duerch d'Bequemlechkeet vum Messenger, d'Präsenz vu Kanäl, Chats, an natierlech d'Fäegkeet Bots ze kreéieren.

Bots kënne fir komplett verschidden Zwecker benotzt ginn, vun der Automatiséierung vu Kommunikatiounen mat Äre Clienten fir Är eegen Aufgaben ze managen.

Wesentlech kënnt Dir Telegramm benotze fir all Operatiounen duerch e Bot auszeféieren: Daten schécken oder froen, Aufgaben um Server lafen, Informatioun an eng Datebank sammelen, E-Mail schécken, asw.

Ech plangen eng Serie vun Artikelen op ze schreiwen wéi mat ze schaffen telegram bot API, a schreift Bots fir Äre Besoinen ze passen.

Mir schreiwen en Telegramm Bot an der R Sprooch (Deel 1): Erstellt e Bot a schéckt Messagen op Telegramm mat der Hëllef

An dësem éischten Artikel wäerte mir erausfannen wéi een en Telegram Bot erstellt an et benotzt fir Notifikatiounen am Telegram ze schécken.

Als Resultat wäerte mir e Bot hunn, deen de Status vun der leschter Ausféierung vun all Aufgaben am Windows Task Scheduler iwwerpréift, an Iech Notifikatiounen schéckt wann ee vun hinnen gescheitert ass.

Awer den Zweck vun dëser Serie vun Artikelen ass net Iech ze léieren wéi Dir e Bot fir eng spezifesch, schmuel Aufgab schreift, mee fir Iech allgemeng d'Syntax vum Package virzestellen telegram.bot, a Code Beispiller mat deenen Dir Bots schreift fir Är eege Problemer ze léisen.

Inhalt

Wann Dir un Donnéeën Analyse interesséiert sidd, kënnt Dir interesséiert meng Hëllefe profitéieren и YouTube Channels. De gréissten Deel vum Inhalt ass der R Sprooch gewidmet.

  1. Erstellt en Telegram Bot
  2. Installéiere vun engem Package fir mat engem Telegram Bot am R
  3. Schéckt Messagen vum R op Telegram
  4. Astellung vun engem Zäitplang fir Lafen Task Scans
  5. Konklusioun

Erstellt en Telegram Bot

Als éischt musse mir e Bot erstellen. Dëst gëtt mat engem speziellen Bot gemaach BotPater, géi op Link a schreift dem Bot /start.

Duerno kritt Dir e Message mat enger Lëscht vun Kommandoen:

Message vum 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

Fir en neie Bot ze kreéieren, schéckt de Kommando /newbot.

BotFather wäert Iech froen den Numm vum Bot a Login anzeginn.

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

Dir kënnt all Numm aginn, mä de Login muss Enn mat bot.

Wann Dir alles richteg gemaach hutt, kritt Dir de folgende Message:

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

Als nächst braucht Dir de kritt API Token, a mengem Beispill ass et 123456789:abcdefghijklmnopqrstuvwxyz.

Op dësem Schrëtt sinn d'Virbereedungsaarbechte fir de Bot ze kreéieren ofgeschloss.

Installéiere vun engem Package fir mat engem Telegram Bot am R

Ech huelen un datt Dir schonn d'R Sprooch an d'RStudio Entwécklungsëmfeld installéiert hutt. Wann dat net de Fall ass, da kënnt Dir dëst kucken Video Tutorial op wéi se ze installéieren.

Fir mat der Telegram Bot API ze schaffen benotze mir de R Package telegram.bot.

D'Installatioun vu Packagen am R gëtt mat der Funktioun gemaach install.packages(), also fir de Package ze installéieren dee mir brauchen, benotzt de Kommando install.packages("telegram.bot").

Dir kënnt méi léieren iwwer d'Installatioun vu verschidde Packagen aus dësem Video.

Nodeems Dir de Package installéiert hutt, musst Dir et verbannen:

library(telegram.bot)

Schéckt Messagen vum R op Telegram

De Bot, deen Dir erstallt hutt, kann am Telegram fonnt ginn mat dem Login, dee während der Schafung uginn ass, a mengem Fall ass et @my_test_bot.

Schéckt dem Bot all Message, wéi "Hey Bot." Am Moment brauche mir dat fir d'Id vun Ärem Chat mam Bot ze kréien.

Elo schreiwen mir de folgende Code am R.

library(telegram.bot)

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

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

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

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

Am Ufank kreéiere mir eng Instanz vun eisem Bot mat der Funktioun Bot(), muss de virdru empfaangenen Token als Argument derbäi ginn.

Et gëtt net als bescht Praxis ugesinn fir den Token am Code ze späicheren, sou datt Dir et an enger Ëmfeldvariabel späichere kënnt an et dovun liest. Par défaut am Package telegram.bot Ënnerstëtzung fir Ëmfeldvariablen vun de folgenden Nimm gouf implementéiert: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Amplaz vun ИМЯ_ВАШЕГО_БОТА ersetzt den Numm deen Dir uginn hutt beim Schafen, a mengem Fall wäert et eng Variabel sinn R_TELEGRAM_BOT_My Test Bot.

Et gi verschidde Weeër fir eng Ëmfeldvariabel ze kreéieren; Ech soen Iech iwwer déi universellst a Cross-Plattform. Erstellt an Ärem Heemverzeichnis (Dir kënnt et mam Kommando fannen path.expand("~")) Textdatei mam Numm .Renviron. Dir kënnt dat och mat dem Kommando maachen file.edit(path.expand(file.path("~", ".Renviron"))).

A füügt déi folgend Linn derbäi.

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

Als nächst kënnt Dir den Token benotzen, deen an der Ëmfeldvariabel gespäichert ass mat der Funktioun bot_token(), d.h. esou:

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

Methode getUpdates()erlaabt eis Bot Updates ze kréien, d.h. Messagen, déi him geschéckt goufen. Method from_chat_id(), erlaabt Iech d'ID vum Chat ze kréien, aus deem de Message geschéckt gouf. Mir brauchen dës ID fir Messagen vum Bot ze schécken.

Zousätzlech zu der Chat-ID vum Objet kritt vun der Method getUpdates() Dir kritt och aner nëtzlech Informatiounen. Zum Beispill Informatioun iwwer de Benotzer deen de Message geschéckt huet.

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"

Also, op dëser Etapp hu mir schonn alles wat mir brauchen fir e Message vun engem Bot op Telegram ze schécken. Loosst eis d'Method benotzen sendMessage(), an déi Dir d'Chat ID, Message Text, an Message Text Markup Typ passéiere musst. De Markup-Typ kann Markdown oder HTML sinn a gëtt vum Argument festgeluecht parse_mode.

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

Markdown Formatéierung Basics:

  • Fett Schrëft ass markéiert mat *:
    • Beispill: *жирный шритф*
    • Resultat: fett Schrëft
  • Kursiv ginn duerch Ënnersträicher ugewisen:
    • Beispill: _курсив_
    • Resultat: Kursiv
  • D'Monospace Schrëft, déi normalerweis benotzt gëtt fir de Programmcode ze markéieren, gëtt mat Apostrophen spezifizéiert - `:
    • Beispill: `monospace Schrëft`
    • Resultat: моноширинный шрифт

D'Basis vun der Formatéierung vun HTML Markup:
An HTML wéckelt Dir den Deel vum Text deen an Tags markéiert muss ginn, zum Beispill <тег>текст</тег>.

  • <tag> - Ouverture Tag
  • - Ofschloss Tag

HTML Markup Tags

  • <b> - fett Schrëft
    • Beispill: <b>жирный шрифт</b>
    • Effekt fett Schrëft
  • <i> - kursiv
    • Beispill: <i>курсив</i>
    • Resultat: Kursiv
  • — моноширинный шрифт
    • Beispill: моноширинный шрифт
    • Resultat: моноширинный шрифт

Zousätzlech zum Text kënnt Dir aner Inhalter mat spezielle Methoden schécken:

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

Déi. zum Beispill mat der Method sendPhoto() Dir kënnt eng Grafik schécken, déi als Bild gespäichert ass, dat Dir mam Package erstallt hutt ggplot2.

Iwwerpréift de Windows Task Scheduler a schéckt Notifikatiounen iwwer Aufgaben déi abnormal ofgeschloss sinn

Fir mat Windows Task Scheduler ze schaffen, musst Dir de Package installéieren taskscheduleR, a fir d'Bequemlechkeet fir mat Daten ze schaffen, installéiert de Package dplyr.

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

Als nächst, benotzt d'Funktioun taskscheduler_ls() mir froen Informatiounen iwwer Aufgaben aus eisem Scheduler. Benotzt d'Funktioun filter() aus Package dplyr Mir läschen aus der Lëscht vun Aufgaben déi erfollegräich ofgeschloss an hunn e leschte Resultat Status vun 0, an déi, déi ni lancéiert goufen an hunn e Status vun 267011, behënnert Aufgaben, an Aufgaben déi am Moment lafen.

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

Am Objet task Mir hunn elo eng Lëscht vun Aufgaben déi gescheitert sinn, mir mussen dës Lëscht op Telegram schécken.

Wa mir all Kommando méi detailléiert kucken, dann:

  • filter() - filtert d'Lëscht vun den Aufgaben no de Konditioune uewen beschriwwen
  • select() - léisst nëmmen ee Feld an der Tabell mam Numm vun den Aufgaben
  • unique() - läscht duplizéiert Nimm
  • unlist() - konvertéiert déi gewielte Tabellkolonne an e Vektor
  • paste0() - verbënnt d'Nimm vun den Aufgaben an eng Zeil, a setzt eng Zeilfeed als Separator, d.h. n.

Alles wat fir eis bleift ass dëst Resultat iwwer Telegramm ze schécken.

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

Also, am Moment gesäit de Bot Code esou aus:

Aufgab iwwerpréiwen 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"
  )

}

Wann Dir d'Beispill hei uewen benotzt, ersetzt Äre Bot Token an Är Chat ID an de Code.

Dir kënnt Konditioune addéieren fir Aufgaben ze filteren, zum Beispill nëmmen déi Aufgaben ze kontrolléieren déi Dir erstallt hutt, ausser System.

Dir kënnt och verschidde Astellungen an eng separat Konfiguratiounsdatei setzen, an d'Chat-ID an d'Token dran späicheren. Dir kënnt d'Konfiguratioun liesen, zum Beispill, mat dem Package configr.

Beispill ini config

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

E Beispill fir Variabelen aus enger Configuratioun an 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

Astellung vun engem Zäitplang fir Lafen Task Scans

De Prozess fir de Start vun Scripten op engem Zäitplang opzestellen ass méi detailléiert an dësem beschriwwen Artikel. Hei wäert ech nëmmen d'Schrëtt beschreiwen, déi dofir gefollegt musse ginn. Wann ee vun de Schrëtt fir Iech net kloer ass, da kuckt op den Artikel op deen ech e Link uginn hunn.

Loosst eis unhuelen datt mir eise Botcode an eng Datei gespäichert hunn check_bot.R. Fir dës Datei regelméisseg ze lafen, befollegt dës Schrëtt:

  1. Schreift de Wee an den Dossier an deem R an der Path System Variabel installéiert ass; a Windows wäert de Wee sou eppes sinn: C:Program FilesRR-4.0.2bin.
  2. Erstellt eng ausführbar Fliedermausdatei mat just enger Zeil R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ersetzen C:rscriptscheck_botcheck_bot.R op de ganze Wee op Är R Datei.
  3. Als nächst benotzt Windows Task Scheduler fir e Startplang opzestellen, zum Beispill all hallef Stonn.

Konklusioun

An dësem Artikel hu mir erausfonnt wéi een e Bot erstellt an et benotzt fir verschidde Notifikatiounen am Telegramm ze schécken.

Ech hunn d'Aufgab beschriwwen fir de Windows Task Scheduler ze iwwerwaachen, awer Dir kënnt d'Material an dësem Artikel benotze fir all Notifikatiounen ze schécken, vun der Wiederprevisioun bis op Aktien op der Bourse, well R erlaabt Iech mat enger grousser Zuel vun Datenquellen ze verbannen.

Am nächsten Artikel wäerte mir erausfannen, wéi Dir Kommandoen an eng Tastatur op de Bot addéiere kënnt, fir datt et net nëmmen Notifikatiounen schécken kann, awer och méi komplex Aktiounen ausféieren.

Source: will.com

Setzt e Commentaire