Ons skryf 'n telegrambot in die R-taal (deel 1): Skep 'n bot en stuur boodskappe na telegram deur dit te gebruik

Die telegramgehoor groei elke dag eksponensieel, dit word vergemaklik deur die gerief van die boodskapper, die beskikbaarheid van kanale, kletse en natuurlik die vermoë om bots te skep.

Bots kan vir 'n wye verskeidenheid doeleindes gebruik word, van die outomatisering van kommunikasie met jou kliënte tot die bestuur van jou eie take.

Trouens, deur die bot kan jy telegram gebruik om enige bewerking uit te voer: data stuur of aanvra, take op die bediener uitvoer, inligting in 'n databasis versamel, e-posse stuur, ensovoorts.

Ek beplan om 'n reeks artikels te skryf oor hoe om met R in R te werk. telegram bot API, en skryf bots vir jou behoeftes.

Ons skryf 'n telegrambot in die R-taal (deel 1): Skep 'n bot en stuur boodskappe na telegram deur dit te gebruik

In hierdie eerste artikel sal ons uitvind hoe om 'n telegram-bot te skep en kennisgewings na telegram te stuur deur dit te gebruik.

Gevolglik sal ons 'n bot hê wat die status van die laaste uitvoering van alle take in die Windows-taakskeduleerder sal kontroleer, en vir jou kennisgewings sal stuur indien enige misluk.

Maar die doel van hierdie reeks artikels is nie om jou te leer hoe om 'n bot vir 'n spesifieke, eng taak te skryf nie, maar om jou bekend te stel aan die sintaksis van die pakket in die algemeen. telegram.bot, en kode voorbeelde waarmee jy bots kan skryf om jou eie probleme op te los.

inhoud

As jy belangstel in data-analise, sal jy dalk belangstel in my telegram и YouTube kanale. Die meeste van die inhoud daarvan word aan die R-taal gewy.

  1. Skep van 'n telegram-bot
  2. Installeer 'n pakket om met 'n telegrambot op R te werk
  3. Stuur boodskappe van R na Telegram
  4. Konfigureer die taakskandering-beginskedule
  5. Gevolgtrekking

Skep van 'n telegram-bot

Eerstens moet ons 'n bot skep. Dit word gedoen met behulp van 'n spesiale bot BotVader, gaan na skakel en skryf aan die bot /start.

Dan sal jy 'n boodskap met 'n lys van opdragte ontvang:

Boodskap van 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 'n nuwe bot te skep, stuur die opdrag /newbot.

BotFather sal jou vra om die naam en login van die bot in te voer.

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

Jy kan 'n arbitrêre naam invoer, en die aanmelding moet eindig met bot.

As jy alles reg gedoen het, sal jy die volgende boodskap ontvang:

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

Vervolgens sal jy die ontvangde API-token nodig hê, in my voorbeeld is dit 123456789:abcdefghijklmnopqrstuvwxyz.

By hierdie stap is die voorbereidingswerk vir die skep van die bot voltooi.

Installeer 'n pakket om met 'n telegrambot op R te werk

Ek neem aan jy het reeds die R-taal geïnstalleer en die RStudio-ontwikkelingsomgewing. As dit nie die geval is nie, dan kan jy hierna kyk video handleiding oor hoe om hulle te installeer.

Om met die Telegram Bot API te werk, sal ons die R-pakket gebruik telegram.bot.

Die installering van pakkette in R word deur die funksie gedoen install.packages(), gebruik dus die opdrag om die pakket wat ons benodig te installeer install.packages("telegram.bot").

Vir meer inligting oor die installering van verskeie pakkette, sien hierdie video.

Nadat u die pakket geïnstalleer het, moet u dit koppel:

library(telegram.bot)

Stuur boodskappe van R na Telegram

Die bot wat jy geskep het, kan in Telegram gevind word met die aanmelding wat tydens die skepping gespesifiseer is, in my geval is dit @my_test_bot.

Stuur enige boodskap aan die bot, soos "Hallo bot". Op die oomblik het ons dit nodig om die ID van jou klets met die bot te kry.

Nou in R skryf ons die volgende kode.

library(telegram.bot)

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

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

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

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

Aanvanklik skep ons 'n instansie van ons bot met die funksie Bot(), as 'n argument, moet jy die voorheen ontvang teken aan dit deurgee.

Om die teken in kode te stoor, word as slegte praktyk beskou, so jy kan dit in 'n omgewingsveranderlike stoor en dit daaruit lees. By verstek in die pakket telegram.bot geïmplementeer ondersteuning vir omgewingsveranderlikes met die volgende naam: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... In plaas daarvan ИМЯ_ВАШЕГО_БОТА vervang die naam wat u ingestel het tydens die skep, in my geval sal dit 'n veranderlike wees R_TELEGRAM_BOT_My Test Bot.

U kan 'n omgewingsveranderlike op verskeie maniere skep, ek sal praat oor die mees universele en kruisplatform. Skep in jou tuisgids (jy kan dit vind met die opdrag path.expand("~")) tekslêer met die naam .Omgewing. Jy kan dit ook doen met die opdrag file.edit(path.expand(file.path("~", ".Renviron"))).

En voeg die volgende reël daarby.

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

Jy kan dan die token wat in die omgewingsveranderlike gestoor is met die funksie gebruik bot_token(), d.w.s. soos hierdie:

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

metode getUpdates()laat ons toe om botopdaterings te kry, d.w.s. boodskappe aan hom gestuur. Metode from_chat_id(), laat jou toe om die ID van die klets te kry waaruit die boodskap gestuur is. Ons het hierdie identifiseerder nodig om boodskappe van die bot af te stuur.

Benewens die klets-ID van die voorwerp wat deur die metode ontvang is getUpdates() jy kry ook ander nuttige inligting. Byvoorbeeld, inligting oor die gebruiker wat die boodskap gestuur het.

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"

So, op hierdie stadium het ons reeds alles wat nodig is om 'n boodskap van die bot na telegram te stuur. Kom ons gebruik die metode sendMessage(), waarheen jy die klets-ID, boodskapteks en opmaaktipe van die boodskapteks moet deurgee. Die opmerktipe kan Markdown of HTML wees en word deur die argument gestel parse_mode.

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

Markdown Formatering Basiese beginsels:

  • Vet lettertipe is gemerk met *:
    • byvoorbeeld: *жирный шритф*
    • gevolg: vet skrif
  • Kursief word gegee deur onderstrepings:
    • byvoorbeeld: _курсив_
    • gevolg: kursivering
  • Die font met vaste spasie, wat gewoonlik gebruik word om programkode uit te lig, word gespesifiseer met apostrofe - `:
    • voorbeeld: `monospace font`
    • gevolg: моноширинный шрифт

HTML-opmerkformatering basiese beginsels:
In HTML, draai jy die deel van die teks wat jy wil uitlig in etikette, byvoorbeeld <тег>текст</тег>.

  • <tag> — opening tag
  • - sluiting tag

HTML-opmerketikette

  • <b> - vet lettertipe
    • byvoorbeeld: <b>жирный шрифт</b>
    • lei vet lettertipe
  • <i> - kursief
    • byvoorbeeld: <i>курсив</i>
    • gevolg: kursivering
  • — моноширинный шрифт
    • voorbeeld: моноширинный шрифт
    • gevolg: моноширинный шрифт

Benewens teks, kan jy ander inhoud stuur met spesiale metodes:

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

Dié. byvoorbeeld deur die metode te gebruik sendPhoto() jy kan 'n plot stuur wat gestoor is as 'n beeld wat jy saam met die pakket gebou het ggplot2.

Gaan die Windows-taakskeduleerder na en stuur kennisgewing van take wat neergestort het

Om met die Windows-taakskeduleerder te werk, moet jy die pakket installeer taskscheduleR, en installeer die pakket vir die gerief om met data te werk dplyr.

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

Gebruik dan die funksie taskscheduler_ls() ons versoek inligting oor take van ons skeduleerder. Gebruik die funksie filter() uit die pakkie dplyr ons verwyder uit die lys take die wat suksesvol voltooi is en 'n laaste resultaatstatus van 0 het, en diegene wat nog nooit uitgevoer is nie en 'n status van 267011 het, gedeaktiveerde take en take wat tans loop.

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

In die voorwerp task ons het nou 'n lys take waarvan die werk met 'n fout geëindig het, ons moet hierdie lys na Telegram stuur.

As ons elke opdrag in meer besonderhede oorweeg, dan:

  • filter() - filter die lys take volgens die voorwaardes hierbo beskryf
  • select() - laat slegs een veld met die naam van die take in die tabel
  • unique() - verwyder duplikaatname
  • unlist() - vertaal die geselekteerde tabelkolom in 'n vektor
  • paste0() - verbind die name van take in een reël, en plaas 'n nuwelynkarakter as 'n skeiding, d.w.s. n.

Al wat vir ons oorbly, is om hierdie resultaat na telegram te stuur.

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

So, op die oomblik lyk die bot-kode soos volg:

Bot-kode wat die taak nagaan

# Подключение пакета
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 u die voorbeeld hierbo gebruik, vervang u bottoken en u klets-ID in die kode.

Jy kan taakfiltreringsvoorwaardes byvoeg, byvoorbeeld om net daardie take te kontroleer wat deur jou geskep is, uitgesluit stelsels.

Jy kan ook verskeie instellings in 'n aparte konfigurasielêer plaas, en die klets-ID en teken daarin stoor. Jy kan byvoorbeeld die konfigurasie lees deur die pakket te gebruik configr.

Voorbeeld ini config

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

Voorbeeld van leesveranderlikes vanaf config in 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

Stel 'n taakskanderingskedule op

Die proses om geskeduleerde skrifbekendstelling op te stel, word in meer besonderhede hierin beskryf Artikel. Hier sal ek slegs die stappe beskryf wat hiervoor gevolg moet word. As enige van die stappe nie vir jou duidelik is nie, verwys dan na die artikel waarna ek 'n skakel verskaf het.

Kom ons sê ons stoor ons bot-kode in 'n lêer check_bot.R. Volg hierdie stappe om hierdie lêer te skeduleer om gereeld te loop:

  1. Skryf die pad na die gids waarin R geïnstalleer is in die Path-stelselveranderlike, op Windows sal die pad iets soos volg wees: C:Program FilesRR-4.0.2bin.
  2. Skep 'n uitvoerbare vlermuislêer met slegs een reël R CMD BATCH C:rscriptscheck_botcheck_bot.R. Vervang C:rscriptscheck_botcheck_bot.R na die volle pad na jou R-lêer.
  3. Gebruik dan die Windows-taakskeduleerder om 'n opstartskedule op te stel, byvoorbeeld elke halfuur.

Gevolgtrekking

In hierdie artikel het ons uitgevind hoe om 'n bot te skep en dit te gebruik om verskeie kennisgewings na telegram te stuur.

Ek het die taak beskryf om die Windows-taakskeduleerder te monitor, maar jy kan die materiaal in hierdie artikel gebruik om enige kennisgewing te stuur, van die weervoorspelling tot aandelekwotasies op die aandelebeurs, want. R laat jou toe om aan 'n groot aantal databronne te koppel.

In die volgende artikel sal ons uitvind hoe om opdragte en 'n sleutelbord by die bot te voeg sodat dit nie net kennisgewings kan stuur nie, maar ook meer komplekse aksies kan uitvoer.

Bron: will.com

Voeg 'n opmerking