Ukubhala i-telegram bot ku-R (ingxenye 1): Ukudala i-bot futhi uyisebenzise ukuthumela imilayezo ngocingo

Izithameli zeTelegram zikhula ngokuqhubekayo nsuku zonke, lokhu kuqhutshwa lula kwesithunywa, ukuba khona kweziteshi, izingxoxo, kanye nekhono lokudala ama-bots.

Amabhothi angasetshenziselwa izinjongo ezihluke ngokuphelele, kusukela ekuxhumaneni okuzenzakalelayo namakhasimende akho kuya ekulawuleni imisebenzi yakho.

Empeleni, ungasebenzisa ithelegramu ukwenza noma yimiphi imisebenzi nge-bot: ukuthumela noma ukucela idatha, qhuba imisebenzi kuseva, uqoqe imininingwane kusizindalwazi, uthumele ama-imeyili, njalo njalo.

Ngihlela ukubhala uchungechunge lwezihloko mayelana nendlela yokusebenzisana telegram bot API, bese ubhala ama-bots ukuze ahambisane nezidingo zakho.

Ukubhala i-telegram bot ku-R (ingxenye 1): Ukudala i-bot futhi uyisebenzise ukuthumela imilayezo ngocingo

Kulesi sihloko sokuqala sizobona ukuthi singayakha kanjani i-telegraph bot futhi siyisebenzise ukuthumela izaziso ngocingo.

Ngenxa yalokho, sizoba ne-bot ezohlola isimo sokwenziwa kokugcina kwayo yonke imisebenzi ku-Windows Task Scheduler, futhi ikuthumelele izaziso uma enye yazo yehlulekile.

Kodwa inhloso yalolu chungechunge lwezihloko akukhona ukukufundisa ukuthi ungayibhala kanjani i-bot yomsebenzi othile, omncane, kodwa ukukwazisa ngokujwayelekile ku-syntax yephakheji. telegram.bot, kanye nezibonelo zekhodi ongabhala ngazo ama-bots ukuze uxazulule izinkinga zakho.

Okuqukethwe

Uma uthanda ukuhlaziya idatha, ungase ube nentshisekelo yami telegram ΠΈ youtube iziteshi. Iningi lokuqukethwe linikezelwe olimini lwe-R.

  1. Ukudala i-telegram bot
  2. Ukufaka iphakheji yokusebenza nge-telegraph bot ku-R
  3. Ithumela imilayezo isuka ku-R iye kuTelegram
  4. Ukusetha ishejuli yokusebenzisa ukuskena komsebenzi
  5. isiphetho

Ukudala i-telegram bot

Okokuqala, sidinga ukudala i-bot. Lokhu kwenziwa kusetshenziswa i-bot ekhethekile I-BotFather, Iya ku isixhumanisi bese ubhalela i-bot /start.

Ngemuva kwalokho uzothola umlayezo onohlu lwemiyalo:

Umlayezo ovela ku-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

Ukuze udale i-bot entsha, thumela umyalo /newbot.

I-BotFather izokucela ukuthi ufake igama le-bot bese ungena ngemvume.

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

Ungafaka noma yiliphi igama, kodwa ukungena ngemvume kufanele kuphele ngokuthi bot.

Uma wenze konke ngendlela efanele, uzothola umyalezo olandelayo:

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

Okulandelayo uzodinga ithokheni ye-API etholiwe, kusibonelo sami 123456789:abcdefghijklmnopqrstuvwxyz.

Kulesi sinyathelo, umsebenzi wokulungiselela wokudala i-bot usuqediwe.

Ukufaka iphakheji yokusebenza nge-telegraph bot ku-R

Ngicabanga ukuthi usuvele unolimi lwe-R nendawo yokuthuthukisa i-RStudio efakiwe. Uma kungenjalo, ungabheka lokhu isifundo sevidiyo kanjani ukuzifaka.

Ukuze sisebenze neTelegram Bot API sizosebenzisa iphakethe le-R telegram.bot.

Ukufaka amaphakheji ku-R kwenziwa kusetshenziswa umsebenzi install.packages(), ngakho-ke ukufaka iphakheji esiyidingayo, sebenzisa umyalo install.packages("telegram.bot").

Ungafunda kabanzi mayelana nokufaka amaphakheji ahlukahlukene kusuka le vidiyo.

Ngemva kokufaka iphakheji, udinga ukuyixhuma:

library(telegram.bot)

Ithumela imilayezo isuka ku-R iye kuTelegram

I-bot oyidalile ingatholakala kuTelegram usebenzisa ukungena ngemvume okushiwo ngesikhathi sokudala, kimina kunjalo @my_test_bot.

Thumela i-bot noma yimuphi umlayezo, njengokuthi "Hey bot." Okwamanje, sidinga lokhu ukuze sithole i-id yengxoxo yakho ne-bot.

Manje sibhala ikhodi elandelayo ku-R.

library(telegram.bot)

# создаём экзСмпляр Π±ΠΎΡ‚Π°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΎΡ‚Π΅
print(bot$getMe())

# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ обновлСния Π±ΠΎΡ‚Π°, Ρ‚.Π΅. список ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ сообщСний
updates <- bot$getUpdates()

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π°Ρ‚Π°
# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄ запросом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΡ‚Ρƒ сообщСниС
chat_id <- updates[[1L]]$from_chat_id()

Ekuqaleni, sakha isibonelo se-bot yethu ngomsebenzi Bot(), ithokheni eyamukelwe ngaphambilini kufanele idluliselwe kuyo njengengxabano.

Akubhekwa njengomkhuba ongcono kakhulu ukugcina ithokheni kukhodi, ukuze ukwazi ukuyigcina endaweni eguquguqukayo futhi uyifunde kuyo. Ngokuzenzakalelayo kuphakheji telegram.bot Ukusekela okuguquguqukayo kwemvelo kwamagama alandelayo kwenziwe: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... Esikhundleni se ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π shintsha igama olicacisile ngenkathi udala, kimi kuzoba okuguquguqukayo R_TELEGRAM_BOT_My Test Bot.

Kunezindlela ezimbalwa zokwenza imvelo eguquguqukayo; ngizokutshela mayelana nengxenye yonke kanye ne-cross-platform eyodwa. Dala ohlwini lwakho lwasekhaya (ungaluthola usebenzisa umyalo path.expand("~")) ifayela lombhalo elinegama .Renviron. Ungakwenza futhi lokhu usebenzisa umyalo file.edit(path.expand(file.path("~", ".Renviron"))).

Bese wengeza umugqa olandelayo kuwo.

R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π=123456789:abcdefghijklmnopqrstuvwxyz

Okulandelayo, ungasebenzisa ithokheni egcinwe endaweni eguquguqukayo usebenzisa umsebenzi bot_token(), i.e. kanje:

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

Indlela getUpdates()kusivumela ukuthi sithole izibuyekezo ze-bot, i.e. imiyalezo eyathunyelwa kuye. Indlela from_chat_id(), ikuvumela ukuthi uthole i-ID yengxoxo umlayezo othunyelwe kuyo. Sidinga le ID ukuze sithumele imilayezo ukusuka ku-bot.

Ngaphezu kwe-id yengxoxo evela entweni etholwe indlela getUpdates() uthola nolunye ulwazi oluwusizo. Isibonelo, ulwazi mayelana nomsebenzisi othumele umlayezo.

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"

Ngakho-ke, kulesi sigaba sesivele sinakho konke esikudingayo ukuthumela umlayezo kusuka ku-bot kuya kuTelegram. Masisebenzise indlela sendMessage(), lapho udinga ukudlulisa khona i-ID yengxoxo, umbhalo womlayezo, kanye nohlobo lombhalo wombhalo. Uhlobo lwemakhaphu kungaba yi-Markdown noma i-HTML futhi lusethwa ukuphikisana parse_mode.

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния
bot$sendMessage(chat_id,
                text = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, *ΠΆΠΈΡ€Π½Ρ‹ΠΉ тСкст* _курсив_",
                parse_mode = "Markdown"
)

Okuyisisekelo kokufometha kwe-Markdown:

  • Ifonti egqamile igqanyiswe ngokuthi *:
    • isibonelo: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • umphumela: ifonti egqamile
  • Omalukeke baboniswa ngama-underscore:
    • isibonelo: _курсив_
    • umphumela: omalukeke
  • Ifonti ye-monospace, evame ukusetshenziselwa ukugqamisa ikhodi yohlelo, icaciswa kusetshenziswa ama-aphostrophe - `:
    • isibonelo: `ifonti ye-monospace`
    • umphumela: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Okuyisisekelo kokufometha kwemakhaphu ye-HTML:
Ku-HTML, ugoqa ingxenye yombhalo odinga ukugqanyiswa kumathegi, isibonelo <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - umaka wokuvula
  • - umaka wokuvala

Omaka bemakhaphu be-HTML

  • <b> - ifonti egqamile
    • isibonelo: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • umphumela ifonti egqamile
  • <i> - omalukeke
    • isibonelo: <i>курсив</i>
    • umphumela: omalukeke
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • isibonelo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • umphumela: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Ngokungeziwe kumbhalo, ungathumela okunye okuqukethwe usebenzisa izindlela ezikhethekile:

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
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"
)

Labo. isibonelo usebenzisa indlela sendPhoto() ungathumela igrafu egcinwe njengesithombe osidalile usebenzisa iphakheji ggplot2.

Ukuhlola i-Windows Task Scheduler nokuthumela izaziso mayelana nemisebenzi epheliswe ngendlela engavamile

Ukuze usebenze ne-Windows Task Scheduler udinga ukufaka iphakheji taskscheduleR, futhi ukuze kube lula ukusebenza ngedatha, faka iphakheji dplyr.

# Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
library(taskscheduleR)
library(dplyr)

Okulandelayo, sebenzisa umsebenzi taskscheduler_ls() sicela ulwazi mayelana nemisebenzi kumhleli wethu. Ukusebenzisa umsebenzi filter() kusuka kuphakheji dplyr Sikhipha ohlwini lwemisebenzi leyo eqedwe ngempumelelo futhi enomphumela wokugcina ongu-0, naleyo engakaze yethulwe futhi enesimo sika-267011, imisebenzi ekhubazekile, kanye nemisebenzi esebenzayo njengamanje.

# Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список Π·Π°Π΄Π°Ρ‡
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Entweni task Manje sinohlu lwemisebenzi ehlulekile, sidinga ukuthumela lolu hlu kuTelegram.

Uma sibheka umyalo ngamunye ngemininingwane eyengeziwe, khona-ke:

  • filter() β€” ihlunga uhlu lwemisebenzi ngokwemibandela echazwe ngenhla
  • select() - kushiya inkambu eyodwa kuphela etafuleni enegama lemisebenzi
  • unique() - isusa amagama ayimpinda
  • unlist() β€” guqula ikholomu yethebula ekhethiwe ibe ivekhtha
  • paste0() β€” uxhuma amagama emisebenzi emugqeni owodwa, bese ebeka umugqa wokuphakelayo njengesihlukanisi, i.e. n.

Osekusele kithi wukuthumela lo mphumela nge-telegram.

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

Ngakho-ke, okwamanje ikhodi ye-bot ibukeka kanje:

Ikhodi ye-bot yokubuyekeza umsebenzi

# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
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"
  )

}

Uma usebenzisa isibonelo esingenhla, faka ithokheni yakho ye-bot kanye ne-ID yakho yengxoxo kukhodi.

Ungengeza izimo zokuhlunga imisebenzi, isibonelo, ukuhlola kuphela leyo misebenzi oyidalile, ngaphandle kweyohlelo.

Ungakwazi futhi ukubeka izilungiselelo ezihlukahlukene efayeleni elihlukile lokumisa, futhi ugcine i-id yengxoxo kanye nethokheni kuyo. Ungafunda ukumisa, isibonelo, usebenzisa iphakheji configr.

Isibonelo i-config

[telegram_bot]
;настройки Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚Π° ΠΈ Ρ‡Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ увСдомлСния
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Isibonelo sokufunda okuguquguqukayo kusuka ku-config ku-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

Ukusetha ishejuli yokusebenzisa ukuskena komsebenzi

Inqubo yokumisa ukwethulwa kwemibhalo ohlelweni ichazwe kabanzi kulokhu isihloko. Lapha ngizochaza kuphela izinyathelo okumele zilandelwe kulokhu. Uma ngabe esinye sezinyathelo singacacile kuwe, bheka isihloko enginikeze isixhumanisi kuso.

Ake sicabange ukuthi silondoloze ikhodi yethu ye-bot efayeleni check_bot.R. Ukuze uhlele leli fayela ukuthi lisebenze njalo, landela lezi zinyathelo:

  1. Bhala indlela eya kufolda lapho u-R efakwe khona ku-variable ye-Path system; ku-Windows, indlela izoba into enjengale: C:Program FilesRR-4.0.2bin.
  2. Dala ifayela le-bat elisebenzisekayo ngomugqa owodwa nje R CMD BATCH C:rscriptscheck_botcheck_bot.R. Faka esikhundleni C:rscriptscheck_botcheck_bot.R endleleni egcwele yefayela lakho le-R.
  3. Okulandelayo, sebenzisa i-Windows Task Scheduler ukuze usethe uhlelo lokuqalisa, isibonelo, njalo ngesigamu sehora.

isiphetho

Kulesi sihloko, sithole ukuthi singayakha kanjani i-bot futhi siyisebenzise ukuthumela izaziso ezahlukahlukene ngocingo.

Ngichaze umsebenzi wokuqapha i-Windows Task Scheduler, kodwa ungasebenzisa izinto ezikulesi sihloko ukuthumela noma yiziphi izaziso, kusukela kwisibikezelo sezulu kuya kumacaphuno esitoko ku-stock exchange, ngoba R ikuvumela ukuthi uxhume kunombolo enkulu yemithombo yedatha.

Esihlokweni esilandelayo, sizobona indlela yokwengeza imiyalo kanye nekhibhodi ku-bot ukuze ingakwazi ukuthumela izaziso kuphela, kodwa futhi yenza izenzo eziyinkimbinkimbi.

Source: www.habr.com

Engeza amazwana