Telegrammas robota rakstīšana R (1. daļa): Bota izveide un izmantošana ziņojumu sūtīšanai telegrammā

Telegram auditorija katru dienu pieaug eksponenciāli, to veicina kurjera ērtības, kanālu klātbūtne, tērzēšana un, protams, iespēja izveidot robotprogrammatūras.

Botus var izmantot pilnīgi dažādiem mērķiem, sākot no saziņas ar klientiem automatizēšanas līdz savu uzdevumu pārvaldīšanai.

Būtībā jūs varat izmantot telegrammu, lai veiktu jebkādas darbības, izmantojot robotprogrammatūru: nosūtītu vai pieprasītu datus, izpildītu uzdevumus serverī, apkopotu informāciju datu bāzē, nosūtītu e-pastus utt.

Es plānoju uzrakstīt rakstu sēriju par to, kā strādāt ar telegrammas robota API, un rakstiet robotprogrammatūras atbilstoši savām vajadzībām.

Telegrammas robota rakstīšana R (1. daļa): Bota izveide un izmantošana ziņojumu sūtīšanai telegrammā

Šajā pirmajā rakstā mēs izdomāsim, kā izveidot telegrammas robotu un izmantot to paziņojumu nosūtīšanai telegrammā.

Rezultātā mums būs robotprogrammatūra, kas pārbaudīs visu uzdevumu pēdējās izpildes statusu Windows uzdevumu plānotājā un nosūtīs jums paziņojumus, ja kāds no tiem neizdodas.

Bet šīs rakstu sērijas mērķis nav iemācīt jums uzrakstīt robotu konkrētam, šauram uzdevumam, bet gan vispārīgi iepazīstināt jūs ar pakotnes sintaksi. telegram.bot, un kodu piemēri, ar kuriem varat rakstīt robotprogrammatūras, lai atrisinātu savas problēmas.

saturs

Ja jūs interesē datu analīze, jūs varētu interesēt mana telegramma и youtube kanāliem. Lielākā daļa satura ir veltīta R valodai.

  1. Telegrammas robota izveide
  2. Pakotnes instalēšana darbam ar telegrammas robotu R
  3. Ziņu sūtīšana no R uz Telegram
  4. Uzdevumu skenēšanas grafika iestatīšana
  5. Secinājums

Telegrammas robota izveide

Pirmkārt, mums ir jāizveido robots. Tas tiek darīts, izmantojot īpašu robotprogrammu BotFather, iet uz saite un rakstiet botam /start.

Pēc tam jūs saņemsit ziņojumu ar komandu sarakstu:

Ziņa no 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

Lai izveidotu jaunu robotprogrammatūru, nosūtiet komandu /newbot.

BotFather lūgs ievadīt robota nosaukumu un pieteikšanos.

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

Jūs varat ievadīt jebkuru vārdu, taču pieteikšanās jābeidzas ar bot.

Ja visu izdarījāt pareizi, jūs saņemsit šādu ziņojumu:

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

Tālāk jums būs nepieciešams saņemtais API marķieris, manā piemērā tas ir 123456789:abcdefghijklmnopqrstuvwxyz.

Šajā posmā ir pabeigts sagatavošanās darbs bota izveidei.

Pakotnes instalēšana darbam ar telegrammas robotu R

Pieņemu, ka jums jau ir instalēta R valoda un RStudio izstrādes vide. Ja tas tā nav, varat apskatīt šo video pamācība par to, kā tos instalēt.

Lai strādātu ar Telegram Bot API, mēs izmantosim R pakotni telegramma.bot.

Pakešu instalēšana R tiek veikta, izmantojot funkciju install.packages(), tāpēc, lai instalētu mums nepieciešamo pakotni, izmantojiet komandu install.packages("telegram.bot").

Jūs varat uzzināt vairāk par dažādu pakotņu instalēšanu no šis video.

Pēc pakotnes instalēšanas jums tas jāpievieno:

library(telegram.bot)

Ziņu sūtīšana no R uz Telegram

Jūsu izveidoto robotu var atrast Telegram, izmantojot izveides laikā norādīto pieteikumvārdu, manā gadījumā tas ir @my_test_bot.

Nosūtiet robotam jebkuru ziņojumu, piemēram, "Hey bot". Šobrīd mums tas ir nepieciešams, lai iegūtu ID jūsu tērzēšanai ar robotu.

Tagad mēs rakstām šādu kodu R.

library(telegram.bot)

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

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

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

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

Sākotnēji mēs izveidojam sava robota eksemplāru ar funkciju Bot(), iepriekš saņemtais marķieris jāievada tajā kā arguments.

Marķiera glabāšana kodā netiek uzskatīta par labāko praksi, tāpēc varat to saglabāt vides mainīgajā un nolasīt no tā. Pēc noklusējuma iepakojumā telegram.bot Ir ieviests atbalsts vides mainīgajiem ar šādiem nosaukumiem: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Tā vietā, lai ИМЯ_ВАШЕГО_БОТА aizstājiet ar nosaukumu, kuru norādījāt veidojot, manā gadījumā tas būs mainīgais R_TELEGRAM_BOT_My Test Bot.

Ir vairāki veidi, kā izveidot vides mainīgo; es jums pastāstīšu par universālāko un starpplatformu. Izveidojiet savā mājas direktorijā (to var atrast, izmantojot komandu path.expand("~")) teksta fails ar nosaukumu .Renviron. To var izdarīt arī, izmantojot komandu file.edit(path.expand(file.path("~", ".Renviron"))).

Un pievienojiet tam šādu rindu.

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

Tālāk varat izmantot vides mainīgajā saglabāto marķieri, izmantojot funkciju bot_token(), t.i. kā šis:

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

Metode getUpdates()ļauj mums iegūt bot atjauninājumus, t.i. ziņas, kas viņam tika nosūtītas. Metode from_chat_id(), ļauj iegūt tās tērzēšanas ID, no kuras tika nosūtīts ziņojums. Šis ID mums ir nepieciešams, lai nosūtītu ziņojumus no robotprogrammatūras.

Papildus tērzēšanas id no objekta, kas iegūts ar metodi getUpdates() jūs saņemat arī citu noderīgu informāciju. Piemēram, informācija par lietotāju, kurš nosūtījis ziņojumu.

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"

Tātad, šajā posmā mums jau ir viss nepieciešamais, lai nosūtītu ziņojumu no bota uz Telegram. Izmantosim metodi sendMessage(), kurā jānodod tērzēšanas ID, ziņojuma teksts un ziņojuma teksta marķējuma veids. Marķējuma veids var būt Markdown vai HTML, un to nosaka arguments parse_mode.

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

Markdown formatēšanas pamati:

  • Treknraksts ir iezīmēts ar *:
    • piemērs: *жирный шритф*
    • rezultāts: treknraksts
  • Slīpraksts ir norādīts ar pasvītrojumu:
    • piemērs: _курсив_
    • rezultāts: slīpraksts
  • Vientelpas fonts, ko parasti izmanto, lai izceltu programmas kodu, tiek norādīts, izmantojot apostrofus - `:
    • piemērs: "monospace font".
    • rezultāts: моноширинный шрифт

HTML marķējuma formatēšanas pamati:
HTML formātā teksta daļu, kas ir jāizceļ, iesaiņojat tagos, piemēram <тег>текст</тег>.

  • <tag> — sākuma tags
  • - noslēdzošais tags

HTML iezīmēšanas tagi

  • <b> - treknraksts
    • piemērs: <b>жирный шрифт</b>
    • rezultāts treknraksts
  • <i> - slīpraksts
    • piemērs: <i>курсив</i>
    • rezultāts: slīpraksts
  • — моноширинный шрифт
    • piemērs: моноширинный шрифт
    • rezultāts: моноширинный шрифт

Papildus tekstam varat nosūtīt citu saturu, izmantojot īpašas 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"
)

Tie. piemēram, izmantojot metodi sendPhoto() varat nosūtīt grafiku, kas saglabāts kā attēls, kuru izveidojāt, izmantojot pakotni ggplot2.

Windows uzdevumu plānotāja pārbaude un paziņojumu nosūtīšana par uzdevumiem, kas ir neparasti beigušies

Lai strādātu ar Windows Task Scheduler, jums ir jāinstalē pakotne taskscheduleR, un, lai ērtāk strādātu ar datiem, instalējiet pakotni dplyr.

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

Tālāk, izmantojot funkciju taskscheduler_ls() mēs pieprasām informāciju par uzdevumiem no mūsu plānotāja. Izmantojot funkciju filter() no iepakojuma dplyr Mēs noņemam no uzdevumu saraksta tos, kas tika veiksmīgi izpildīti un kuru pēdējā rezultāta statuss ir 0, un tos, kas nekad nav palaisti un kuru statuss ir 267011, atspējoti uzdevumi un uzdevumi, kas pašlaik darbojas.

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

Objektā task Tagad mums ir neizdevušos uzdevumu saraksts, šis saraksts ir jānosūta uz Telegram.

Ja mēs aplūkojam katru komandu sīkāk, tad:

  • filter() — filtrē uzdevumu sarakstu atbilstoši iepriekš aprakstītajiem nosacījumiem
  • select() — tabulā atstāj tikai vienu lauku ar uzdevumu nosaukumiem
  • unique() - noņem dublētos nosaukumus
  • unlist() — pārvērš atlasīto tabulas kolonnu par vektoru
  • paste0() — vienā rindā savieno uzdevumu nosaukumus, kā atdalītāju liek rindas padevi, t.i. n.

Mums atliek tikai nosūtīt šo rezultātu telegrammā.

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

Tātad šobrīd robota kods izskatās šādi:

Uzdevuma pārskatīšanas robota kods

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

}

Izmantojot iepriekš minēto piemēru, kodā aizstājiet savu robota pilnvaru un tērzēšanas ID.

Varat pievienot nosacījumus uzdevumu filtrēšanai, piemēram, pārbaudīt tikai tos uzdevumus, kurus izveidojāt, izņemot sistēmas uzdevumus.

Varat arī ievietot dažādus iestatījumus atsevišķā konfigurācijas failā un saglabāt tajā tērzēšanas ID un marķieri. Varat izlasīt konfigurāciju, piemēram, izmantojot pakotni configr.

Piemērs ini config

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

Piemērs mainīgo lasīšanai no konfigurācijas 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

Uzdevumu skenēšanas grafika iestatīšana

Šajā rakstā ir sīkāk aprakstīts skriptu palaišanas iestatīšanas process pēc grafika raksts. Šeit es aprakstīšu tikai darbības, kas jāveic šim nolūkam. Ja kāda no darbībām jums nav skaidra, skatiet rakstu, uz kuru es sniedzu saiti.

Pieņemsim, ka esam saglabājuši mūsu robota kodu failā check_bot.R. Lai ieplānotu šī faila regulāru izpildi, veiciet šīs darbības:

  1. Sistēmas mainīgajā Path ierakstiet ceļu uz mapi, kurā R ir instalēts; sistēmā Windows ceļš būs aptuveni šāds: C:Program FilesRR-4.0.2bin.
  2. Izveidojiet izpildāmu bat failu tikai ar vienu rindiņu R CMD BATCH C:rscriptscheck_botcheck_bot.R. Aizvietot C:rscriptscheck_botcheck_bot.R uz pilnu ceļu uz jūsu R failu.
  3. Pēc tam izmantojiet Windows uzdevumu plānotāju, lai iestatītu palaišanas grafiku, piemēram, ik pēc pusstundas.

Secinājums

Šajā rakstā mēs izdomājām, kā izveidot robotu un izmantot to dažādu paziņojumu sūtīšanai telegrammā.

Es aprakstīju Windows uzdevumu plānotāja pārraudzīšanas uzdevumu, taču jūs varat izmantot šī raksta materiālu, lai nosūtītu jebkādus paziņojumus, sākot no laika prognozes līdz biržas kotācijām, jo R ļauj izveidot savienojumu ar lielu skaitu datu avotu.

Nākamajā rakstā mēs izdomāsim, kā robotam pievienot komandas un tastatūru, lai tas varētu ne tikai nosūtīt paziņojumus, bet arī veikt sarežģītākas darbības.

Avots: www.habr.com

Pievieno komentāru