Kulemba telegalamu bot mu R (gawo 1): Kupanga bot ndikuigwiritsa ntchito kutumiza mauthenga mu telegalamu

Omvera a Telegalamu akuchulukirachulukira tsiku lililonse, izi zimathandizidwa ndi kuphweka kwa mthenga, kukhalapo kwa mayendedwe, macheza, komanso kuthekera kopanga bots.

Maboti amatha kugwiritsidwa ntchito pazifukwa zosiyanasiyana, kuyambira kulumikizana ndi makasitomala anu mpaka pakuwongolera ntchito zanu.

Kwenikweni, mutha kugwiritsa ntchito telegalamu kuchita ntchito zilizonse kudzera pa bot: kutumiza kapena kupempha deta, kuyendetsa ntchito pa seva, kusonkhanitsa zidziwitso mu database, kutumiza maimelo, ndi zina zotero.

Ndikukonzekera kulemba mndandanda wa nkhani za momwe mungagwiritsire ntchito telegram bot API, ndi kulemba bots kuti zigwirizane ndi zosowa zanu.

Kulemba telegalamu bot mu R (gawo 1): Kupanga bot ndikuigwiritsa ntchito kutumiza mauthenga mu telegalamu

Munkhani yoyamba iyi tiwona momwe tingapangire bot ya telegraph ndikuigwiritsa ntchito kutumiza zidziwitso pa telegalamu.

Zotsatira zake, tidzakhala ndi bot yomwe idzayang'ane momwe ntchito yomaliza yagwirira ntchito mu Windows Task Scheduler, ndikukutumizirani zidziwitso ngati zina zalephera.

Koma cholinga cha nkhanizi sikukuphunzitsani momwe mungalembe bot pa ntchito inayake, yopapatiza, koma kukudziwitsani za kalembedwe ka phukusi. telegram.bot, ndi zitsanzo zama code zomwe mungathe kulemba bots kuti muthetse mavuto anu.

Zamkatimu

Ngati mukufuna kusanthula deta, mungakhale ndi chidwi changa uthengawo ΠΈ Youtube njira. Zambiri mwazomwe zimaperekedwa ku chilankhulo cha R.

  1. Kupanga telegalamu bot
  2. Kuyika phukusi logwirira ntchito ndi telegalamu bot mu R
  3. Kutumiza mauthenga kuchokera ku R kupita ku Telegalamu
  4. Kupanga ndandanda yoyendetsa masikani a ntchito
  5. Pomaliza

Kupanga telegalamu bot

Choyamba, tiyenera kupanga bot. Izi zimachitika pogwiritsa ntchito bot yapadera Abambo,kupita ku kugwirizana ndipo lembani ku bot /start.

Pambuyo pake mudzalandira uthenga wokhala ndi mndandanda wa malamulo:

Uthenga wochokera kwa 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

Kuti mupange bot yatsopano, tumizani lamulo /newbot.

BotFather akufunsani kuti mulowetse dzina la bot ndikulowa.

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

Mutha kulowa dzina lililonse, koma kulowa kuyenera kutha ndi bot.

Ngati mwachita zonse molondola, mudzalandira uthenga wotsatirawu:

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

Chotsatira mudzafunika chizindikiro cha API chomwe mwalandira, mu chitsanzo changa 123456789:abcdefghijklmnopqrstuvwxyz.

Pa sitepe iyi, ntchito yokonzekera kupanga bot yatha.

Kuyika phukusi logwirira ntchito ndi telegalamu bot mu R

Ndikuganiza kuti muli ndi kale chilankhulo cha R ndi malo otukuka a RStudio. Ngati sizili choncho, ndiye kuti mutha kuyang'ana izi kanema phunziro mmene kukhazikitsa iwo.

Kuti tigwire ntchito ndi Telegraph Bot API tidzagwiritsa ntchito phukusi la R telegram.bot.

Kuyika mapaketi mu R kumachitika pogwiritsa ntchito ntchitoyi install.packages(), kotero kuti muyike phukusi lomwe tikufuna, gwiritsani ntchito lamulo install.packages("telegram.bot").

Mutha kuphunzira zambiri za kukhazikitsa mapaketi osiyanasiyana kuchokera vidiyo iyi.

Pambuyo kukhazikitsa phukusi, muyenera kulumikiza:

library(telegram.bot)

Kutumiza mauthenga kuchokera ku R kupita ku Telegalamu

Bot yomwe mudapanga imapezeka mu Telegraph pogwiritsa ntchito malowedwe omwe amatchulidwa panthawi yolenga, kwa ine @my_test_bot.

Tumizani bot uthenga uliwonse, monga "Hey bot." Pakadali pano, tikufuna izi kuti tipeze id ya macheza anu ndi bot.

Tsopano timalemba khodi ili mu R.

library(telegram.bot)

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

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

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

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

Poyamba, timapanga chitsanzo cha bot yathu ndi ntchitoyo Bot(), chizindikiro cholandilidwa kale chiyenera kuperekedwa mmenemo ngati mkangano.

Sichimaganiziridwa kuti ndi njira yabwino kwambiri yosungira chizindikiro mu code, kotero mutha kuyisunga pamalo osinthika ndikuwerenga kuchokera pamenepo. Mwa kusakhulupirika mu phukusi telegram.bot Thandizo losintha zachilengedwe la mayina otsatirawa lakhazikitsidwa: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... M'malo mwa ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π m'malo mwa dzina lomwe mudalitchula popanga, kwa ine likhala losinthika R_TELEGRAM_BOT_My Test Bot.

Pali njira zingapo zopangira kusintha kwachilengedwe; Ndikukuwuzani zapadziko lonse lapansi komanso nsanja imodzi. Pangani chikwatu chakunyumba kwanu (mutha kuchipeza pogwiritsa ntchito lamulo path.expand("~")) fayilo yokhala ndi dzina .Renviron. Mukhozanso kuchita izi pogwiritsa ntchito lamulo file.edit(path.expand(file.path("~", ".Renviron"))).

Ndipo onjezani mzere wotsatira kwa icho.

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

Kenako, mutha kugwiritsa ntchito chizindikiro chomwe chasungidwa pakusintha kwachilengedwe pogwiritsa ntchito ntchitoyi bot_token(),ndi. ngati chonchi:

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

Njira getUpdates()imatithandiza kupeza zosintha za bot, i.e. mauthenga omwe adatumizidwa kwa iye. Njira from_chat_id(), amakulolani kuti mutenge ID ya macheza omwe uthengawo unatumizidwa. Tikufuna ID iyi kuti titumize mauthenga kuchokera ku bot.

Kuwonjezera pa macheza id kuchokera ku chinthu chopezedwa ndi njira getUpdates() mumalandiranso zidziwitso zina zothandiza. Mwachitsanzo, zambiri za wogwiritsa ntchito amene adatumiza uthengawo.

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"

Chifukwa chake, pakadali pano tili ndi zonse zomwe tikufuna kutumiza uthenga kuchokera ku bot kupita ku Telegraph. Tiyeni tigwiritse ntchito njirayo sendMessage(), momwe muyenera kutumizira macheza ID, meseji, ndi mtundu wa meseji. Mtundu wa markup ukhoza kukhala Markdown kapena HTML ndipo umayikidwa ndi mkangano parse_mode.

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

Zofunikira pakukonza Markdown:

  • Font ya Bold imawonetsedwa ndi *:
    • chitsanzo: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • zotsatira: font yolimba
  • Mawu opendekeka amasonyezedwa ndi ma underscores:
    • chitsanzo: _курсив_
    • zotsatira: mawu opendekera
  • Fonti ya monospace, yomwe nthawi zambiri imagwiritsidwa ntchito kuwunikira khodi ya pulogalamu, imatchulidwa pogwiritsa ntchito apostrophes - `:
    • chitsanzo: `font monospace`
    • zotsatira: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Zoyambira pakupanga HTML markup:
Mu HTML, mumakulunga gawo lazolemba lomwe likufunika kuwunikira ma tag, mwachitsanzo <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - kutsegula tag
  • - chizindikiro chotseka

Zizindikiro za HTML

  • <b> - Font yolimba
    • chitsanzo: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • zotsatira font yolimba
  • <i> - zilembo zopendekera
    • chitsanzo: <i>курсив</i>
    • zotsatira: mawu opendekera
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • chitsanzo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • zotsatira: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Kuphatikiza pa mameseji, mutha kutumiza zina pogwiritsa ntchito njira zapadera:

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

Iwo. mwachitsanzo pogwiritsa ntchito njira sendPhoto() mutha kutumiza graph yosungidwa ngati chithunzi chomwe mudapanga pogwiritsa ntchito phukusi ggplot2.

Kuyang'ana Windows Task Scheduler ndikutumiza zidziwitso za ntchito zomwe zatha modabwitsa.

Kuti mugwire ntchito ndi Windows Task Scheduler muyenera kukhazikitsa phukusi taskscheduleR, komanso kuti zitheke kugwira ntchito ndi deta, yikani phukusi dplyr.

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

Pambuyo pake, mutha kugwiritsa ntchito taskscheduler_ls() timapempha zambiri za ntchito kuchokera kwa wokonza mapulani athu. Kugwiritsa ntchito filter() kuchokera phukusi dplyr Timachotsa pamndandanda wa ntchito zomwe zidamalizidwa bwino ndikukhala ndi zotsatira zomaliza za 0, ndi zomwe sizinayambikepo ndipo zili ndi udindo wa 267011, ntchito zolemala, ndi ntchito zomwe zikugwira ntchito pano.

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

Mu chinthu task Tsopano tili ndi mndandanda wa ntchito zomwe zidalephera, tiyenera kutumiza mndandandawu ku Telegraph.

Ngati tiyang'ana lamulo lirilonse mwatsatanetsatane, ndiye:

  • filter() - amasefa mndandanda wa ntchito molingana ndi zomwe tafotokozazi
  • select() - amasiya gawo limodzi lokha patebulo lokhala ndi dzina la ntchitozo
  • unique() - imachotsa mayina obwereza
  • unlist() - amasintha tebulo losankhidwa kukhala vekitala
  • paste0() - amagwirizanitsa mayina a ntchito mu mzere umodzi, ndikuyika chakudya cha mzere ngati cholekanitsa, i.e. n.

Zomwe zatsala kwa ife ndikutumiza izi kudzera pa telegalamu.

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

Chifukwa chake, pakadali pano nambala ya bot ikuwoneka motere:

Task review 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"
  )

}

Mukamagwiritsa ntchito chitsanzo pamwambapa, sinthani chizindikiro chanu cha bot ndi ID yanu yochezera mu code.

Mutha kuwonjezera zinthu zosefera, mwachitsanzo, kuyang'ana ntchito zomwe mudapanga, kupatula zadongosolo.

Mutha kuyikanso makonda osiyanasiyana mufayilo yosinthira yosiyana, ndikusunga id yochezera ndi chizindikiro mmenemo. Mukhoza kuwerenga config, mwachitsanzo, pogwiritsa ntchito phukusi configr.

Chitsanzo ndi config

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

Chitsanzo cha kuwerenga zosinthika kuchokera ku config mu 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

Kupanga ndandanda yoyendetsera masikani a ntchito

Njira yokhazikitsira kukhazikitsidwa kwa zolembera pa ndondomeko ikufotokozedwa mwatsatanetsatane mu izi nkhani. Pano ndingofotokoza njira zomwe ziyenera kutsatiridwa pa izi. Ngati chimodzi mwamasitepewo sichikumveka bwino kwa inu, tchulani nkhani yomwe ndidakupatsirani ulalo.

Tiyerekeze kuti tasunga nambala yathu ya bot ku fayilo check_bot.R. Kuti fayiloyi igwire ntchito pafupipafupi, tsatirani izi:

  1. Lembani njira yopita ku foda yomwe R imayikidwa mu Path system variable; mu Windows, njirayo idzakhala motere: C:Program FilesRR-4.0.2bin.
  2. Pangani fayilo ya bat yomwe ingagwiritsidwe ntchito ndi mzere umodzi wokha R CMD BATCH C:rscriptscheck_botcheck_bot.R. M'malo C:rscriptscheck_botcheck_bot.R panjira yonse yopita ku fayilo yanu ya R.
  3. Kenako, gwiritsani ntchito Windows Task Scheduler kukhazikitsa ndandanda yotsegulira, mwachitsanzo, theka la ola lililonse.

Pomaliza

M'nkhaniyi, tawona momwe tingapangire bot ndikuigwiritsa ntchito kutumiza zidziwitso zosiyanasiyana pa telegalamu.

Ndinalongosola ntchito yoyang'anira Windows Task Scheduler, koma mungagwiritse ntchito zomwe zili m'nkhaniyi kutumiza zidziwitso zilizonse, kuyambira nyengo ya nyengo kupita kuzinthu zamtengo wapatali pa malonda, chifukwa R imakulolani kuti mugwirizane ndi chiwerengero chachikulu cha magwero a deta.

M'nkhani yotsatira, tiwona momwe tingawonjezerere malamulo ndi kiyibodi ku bot kuti zisamangotumiza zidziwitso, komanso kuchita zinthu zovuta kwambiri.

Source: www.habr.com

Kuwonjezera ndemanga