Il-kitba ta' bot tat-telegramma f'R (parti 1): Il-ħolqien ta' bot u l-użu tiegħu biex tibgħat messaġġi f'telegramma

L-udjenza tat-Telegram qed tikber b'mod esponenzjali kuljum, dan huwa ffaċilitat mill-konvenjenza tal-messaġġier, il-preżenza ta 'kanali, chats, u naturalment il-kapaċità li jinħolqu bots.

Il-bots jistgħu jintużaw għal skopijiet kompletament differenti, mill-awtomatizzazzjoni tal-komunikazzjonijiet mal-klijenti tiegħek għall-ġestjoni tal-kompiti tiegħek stess.

Essenzjalment, tista 'tuża telegramma biex twettaq kwalunkwe operazzjoni permezz ta' bot: tibgħat jew titlob dejta, tmexxi kompiti fuq is-server, tiġbor informazzjoni f'database, tibgħat emails, eċċ.

Nippjana li nikteb serje ta 'artikli dwar kif taħdem magħhom telegram bot API, u ikteb bots biex taqdi l-bżonnijiet tiegħek.

Il-kitba ta' bot tat-telegramma f'R (parti 1): Il-ħolqien ta' bot u l-użu tiegħu biex tibgħat messaġġi f'telegramma

F'dan l-ewwel artiklu ser insemmu kif noħolqu bot tat-telegramma u nużawh biex nibagħtu notifiki f'telegramma.

Bħala riżultat, ikollna bot li se jiċċekkja l-istatus tal-aħħar eżekuzzjoni tal-kompiti kollha fil-Windows Task Scheduler, u jibgħatlek notifiki jekk xi waħda minnhom falliet.

Iżda l-iskop ta’ din is-serje ta’ artikli mhuwiex li jgħallmu kif tikteb bot għal biċċa xogħol speċifika u dejqa, iżda li ġeneralment tintroduċik fis-sintassi tal-pakkett telegram.bot, u eżempji ta' kodiċi li bihom tista' tikteb bots biex issolvi l-problemi tiegħek.

Kontenut

Jekk inti interessat fl-analiżi tad-dejta, tista' tkun interessat f'tiegħi telegramma и YouTube kanali. Ħafna mill-kontenut huwa ddedikat għal-lingwa R.

  1. Ħolqien ta' bot tat-telegramma
  2. L-installazzjoni ta 'pakkett biex taħdem ma' telegram bot f'R
  3. Tibgħat messaġġi minn R għal Telegram
  4. Twaqqif ta 'skeda għat-tmexxija ta' skans tal-kompiti
  5. Konklużjoni

Ħolqien ta' bot tat-telegramma

L-ewwel, irridu noħolqu bot. Dan isir bl-użu ta 'bot speċjali BotFather, mur fuq rabta u ikteb lill-bot /start.

Wara dan tirċievi messaġġ b'lista ta' kmandi:

Messaġġ minn 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

Biex toħloq bot ġdid, ibgħat il-kmand /newbot.

BotFather se jgħidlek biex iddaħħal l-isem tal-bot u l-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

Tista' ddaħħal kwalunkwe isem, iżda l-login għandu jispiċċa bi bot.

Jekk għamilt kollox sew, tirċievi l-messaġġ li ġej:

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

Sussegwentement ser ikollok bżonn it-token API riċevut, fl-eżempju tiegħi huwa 123456789:abcdefghijklmnopqrstuvwxyz.

F'dan il-pass, ix-xogħol preparatorju għall-ħolqien tal-bot jitlesta.

L-installazzjoni ta 'pakkett biex taħdem ma' telegram bot f'R

Nassumi li diġà għandek il-lingwa R u l-ambjent ta 'żvilupp RStudio installati. Jekk dan ma jkunx il-każ, allura tista 'tħares lejn dan video tutorja dwar kif tinstallahom.

Biex naħdmu mat-Telegram Bot API se nużaw il-pakkett R telegramma.bot.

L-installazzjoni tal-pakketti f'R issir bl-użu tal-funzjoni install.packages(), għalhekk biex tinstalla l-pakkett li għandna bżonn, uża l-kmand install.packages("telegram.bot").

Tista 'titgħallem aktar dwar l-installazzjoni ta' pakketti varji minn dan il-video.

Wara li tinstalla l-pakkett, għandek bżonn tikkonnettjah:

library(telegram.bot)

Tibgħat messaġġi minn R għal Telegram

Il-bot li ħloqt jista' jinstab f'Telegram billi tuża l-login speċifikat waqt il-ħolqien, fil-każ tiegħi huwa @my_test_bot.

Ibgħat lill-bot kwalunkwe messaġġ, bħal "Ħej bot." Bħalissa, għandna bżonn dan sabiex niksbu l-id taċ-chat tiegħek mal-bot.

Issa niktbu l-kodiċi li ġej f'R.

library(telegram.bot)

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

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

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

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

Inizjalment, noħolqu eżempju tal-bot tagħna bil-funzjoni Bot(), it-token riċevut qabel għandu jiġi mgħoddi fih bħala argument.

Mhux ikkunsidrat l-aħjar prattika li taħżen it-token fil-kodiċi, sabiex tkun tista 'taħżen f'varjabbli ambjentali u taqrah minnha. B'mod awtomatiku fil-pakkett telegram.bot Ġie implimentat appoġġ għall-varjabbli ambjentali tal-ismijiet li ġejjin: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Minflok ИМЯ_ВАШЕГО_БОТА jissostitwixxi l-isem li speċifikajt meta ħoloq, fil-każ tiegħi se jkun varjabbli R_TELEGRAM_BOT_My Test Bot.

Hemm diversi modi kif toħloq varjabbli ambjentali; Jien ngħidlek dwar l-aktar waħda universali u multi-pjattaforma. Oħloq fid-direttorju tad-dar tiegħek (tista 'ssibha billi tuża l-kmand path.expand("~")) fajl test bl-isem .Renviron. Tista 'wkoll tagħmel dan billi tuża l-kmand file.edit(path.expand(file.path("~", ".Renviron"))).

U żid il-linja li ġejja magħha.

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

Sussegwentement, tista 'tuża t-token salvat fil-varjabbli ambjentali billi tuża l-funzjoni bot_token(), i.e. bħal dan:

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

Metodu getUpdates()jippermettilna niksbu aġġornamenti tal-bot, i.e. messaġġi li ntbagħtu lilu. Metodu from_chat_id(), jippermettilek tikseb l-ID taċ-chat minn fejn intbagħat il-messaġġ. Għandna bżonn din l-ID biex nibagħtu messaġġi mill-bot.

Minbarra l-id taċ-chat mill-oġġett miksub bil-metodu getUpdates() tirċievi wkoll xi informazzjoni utli oħra. Pereżempju, informazzjoni dwar l-utent li bagħat il-messaġġ.

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"

Għalhekk, f'dan l-istadju diġà għandna dak kollu li neħtieġu biex nibagħtu messaġġ minn bot għal Telegram. Ejja nużaw il-metodu sendMessage(), li fiha għandek bżonn tgħaddi l-ID taċ-chat, it-test tal-messaġġ, u t-tip ta 'markup tat-test tal-messaġġ. It-tip ta 'markup jista' jkun Markdown jew HTML u huwa stabbilit mill-argument parse_mode.

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

Bażi tal-ifformattjar tal-markdown:

  • It-tipa grassa hija enfasizzata b'*:
    • eżempju: *жирный шритф*
    • riżultat: font grassa
  • Il-korsiv huma indikati permezz ta’ enfasi:
    • eżempju: _курсив_
    • riżultat: korsiv
  • It-tipa monospace, li normalment tintuża biex tenfasizza l-kodiċi tal-programm, hija speċifikata bl-użu ta' appostrofi - `:
    • eżempju: `font monospace`
    • riżultat: моноширинный шрифт

Bażi tal-ifformattjar tal-markup HTML:
Fl-HTML, inti wrap il-parti tat-test li jeħtieġ li tiġi enfasizzata fit-tikketti, eżempju <тег>текст</тег>.

  • <tag> - tag tal-ftuħ
  • - tag tal-għeluq

Tikketti tal-markup HTML

  • <b> - tipa grassa
    • eżempju: <b>жирный шрифт</b>
    • riżultat font grassa
  • <i> - korsiv
    • eżempju: <i>курсив</i>
    • riżultat: korsiv
  • — моноширинный шрифт
    • eżempju: моноширинный шрифт
    • riżultat: моноширинный шрифт

Minbarra t-test, tista' tibgħat kontenut ieħor billi tuża metodi speċjali:

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

Dawk. pereżempju bl-użu tal-metodu sendPhoto() tista' tibgħat graff issejvjat bħala immaġini li ħloqt bl-użu tal-pakkett ggplot2.

Iċċekkja l-Windows Task Scheduler u tibgħat notifiki dwar kompiti li jkunu tterminaw b'mod anormali

Biex taħdem mal-Windows Task Scheduler għandek bżonn tinstalla l-pakkett taskscheduleR, u għall-konvenjenza li taħdem bid-dejta, installa l-pakkett dplyr.

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

Sussegwentement, bl-użu tal-funzjoni taskscheduler_ls() aħna nitolbu informazzjoni dwar il-kompiti mill-iskedar tagħna. Bl-użu tal-funzjoni filter() mill-pakkett dplyr Inneħħu mil-lista ta' kompiti dawk li tlestew b'suċċess u għandhom status tal-aħħar riżultat ta' 0, u dawk li qatt ma ġew imnedija u għandhom status ta' 267011, kompiti b'diżabbiltà, u kompiti li qed jaħdmu bħalissa.

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

Fl-oġġett task Issa għandna lista ta 'kompiti li fallew, irridu nibagħtu din il-lista lil Telegram.

Jekk inħarsu lejn kull kmand f'aktar dettall, allura:

  • filter() — tiffiltra l-lista tal-kompiti skont il-kundizzjonijiet deskritti hawn fuq
  • select() — iħalli qasam wieħed biss fit-tabella bl-isem tal-kompiti
  • unique() - tneħħi ismijiet duplikati
  • unlist() — tikkonverti l-kolonna tat-tabella magħżula f'vettur
  • paste0() — jgħaqqad l-ismijiet tal-kompiti f’linja waħda, u tpoġġi line feed bħala separatur, i.e. n.

Kulma jibqa’ għalina hu li nibagħtu dan ir-riżultat permezz ta’ telegramma.

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

Għalhekk, bħalissa l-kodiċi tal-bot jidher bħal dan:

Kodiċi tal-bot tar-reviżjoni tal-kompitu

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

}

Meta tuża l-eżempju ta 'hawn fuq, issostitwixxi t-token tal-bot tiegħek u l-ID taċ-chat tiegħek fil-kodiċi.

Tista 'żżid kundizzjonijiet għall-iffiltrar tal-kompiti, pereżempju, tivverifika biss dawk il-kompiti li ħloqt, esklużi dawk tas-sistema.

Tista 'wkoll tpoġġi diversi settings f'fajl ta' konfigurazzjoni separat, u taħżen fiha l-id taċ-chat u t-token. Tista 'taqra l-konfigurazzjoni, pereżempju, billi tuża l-pakkett configr.

Eżempju ini konfig

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

Eżempju ta 'qari ta' varjabbli minn konfigurazzjoni f'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

Twaqqif ta 'skeda għat-tmexxija ta' skans tal-kompiti

Il-proċess tat-twaqqif tat-tnedija ta 'skripts fuq skeda huwa deskritt f'aktar dettall f'dan artikolu. Hawnhekk ser niddeskrivi biss il-passi li jeħtieġ li jiġu segwiti għal dan. Jekk xi wieħed mill-passi ma jkunx ċar għalik, imbagħad irreferi għall-artiklu li għalih ipprovdejt link.

Ejja nassumu li ssejvjajna l-kodiċi bot tagħna f'fajl check_bot.R. Biex tiskeda li dan il-fajl jaħdem regolarment, segwi dawn il-passi:

  1. Ikteb il-mogħdija għall-folder li fih R huwa installat fil-varjabbli tas-sistema Path; fil-Windows, il-mogħdija tkun xi ħaġa bħal din: C:Program FilesRR-4.0.2bin.
  2. Oħloq fajl BAT eżekutibbli b'linja waħda biss R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ibdel C:rscriptscheck_botcheck_bot.R għall-mogħdija sħiħa għall-fajl R tiegħek.
  3. Sussegwentement, uża Windows Task Scheduler biex twaqqaf skeda tat-tnedija, pereżempju, kull nofs siegħa.

Konklużjoni

F'dan l-artikolu, sibna kif noħolqu bot u nużawh biex tibgħat diversi notifiki f'telegramma.

Iddeskrivejt il-kompitu tal-monitoraġġ tal-Windows Task Scheduler, iżda tista' tuża l-materjal f'dan l-artikolu biex tibgħat kwalunkwe notifika, mit-tbassir tat-temp għal kwotazzjonijiet tal-istokk fil-borża, minħabba li R jippermettilek tikkonnettja ma 'numru kbir ta' sorsi tad-dejta.

Fl-artiklu li jmiss, aħna ser insemmu kif iżżid kmandi u tastiera mal-bot sabiex ma tkunx tista' biss tibgħat notifiki, iżda wkoll twettaq azzjonijiet aktar kumplessi.

Sors: www.habr.com

Żid kumment