Kuandika boti ya telegramu katika R (sehemu ya 1): Kuunda roboti na kuitumia kutuma ujumbe kwa telegramu

Hadhira ya Telegram inakua kwa kasi kila siku, hii inawezeshwa na urahisi wa mjumbe, uwepo wa njia, mazungumzo, na bila shaka uwezo wa kuunda roboti.

Boti zinaweza kutumika kwa madhumuni tofauti kabisa, kutoka kwa mawasiliano ya kiotomatiki na wateja wako hadi kudhibiti majukumu yako mwenyewe.

Kimsingi, unaweza kutumia telegramu kufanya shughuli zozote kupitia bot: kutuma au kuomba data, kuendesha kazi kwenye seva, kukusanya taarifa kwenye hifadhidata, kutuma barua pepe, na kadhalika.

Ninapanga kuandika mfululizo wa makala kuhusu jinsi ya kufanya kazi nayo telegram bot API, na uandike roboti ili kukidhi mahitaji yako.

Kuandika boti ya telegramu katika R (sehemu ya 1): Kuunda roboti na kuitumia kutuma ujumbe kwa telegramu

Katika nakala hii ya kwanza tutagundua jinsi ya kuunda bot ya telegraph na kuitumia kutuma arifa kwenye telegraph.

Kwa hivyo, tutakuwa na bot ambayo itaangalia hali ya utekelezaji wa mwisho wa kazi zote kwenye Kipanga Kazi cha Windows, na kukutumia arifa ikiwa yoyote kati yao imeshindwa.

Lakini madhumuni ya safu hii ya vifungu sio kukufundisha jinsi ya kuandika bot kwa kazi maalum, nyembamba, lakini kwa ujumla kukutambulisha kwa syntax ya kifurushi. telegram.bot, na mifano ya nambari ambayo unaweza kuandika roboti kutatua shida zako mwenyewe.

yaliyomo

Ikiwa una nia ya uchambuzi wa data, unaweza kupendezwa na yangu telegram ΠΈ youtube njia. Maudhui mengi yamejitolea kwa lugha ya R.

  1. Kuunda bot ya telegraph
  2. Kufunga kifurushi cha kufanya kazi na bot ya telegraph katika R
  3. Inatuma ujumbe kutoka R hadi Telegram
  4. Kuweka ratiba ya kuendesha skanning za kazi
  5. Hitimisho

Kuunda bot ya telegraph

Kwanza, tunahitaji kuunda bot. Hii inafanywa kwa kutumia bot maalum BotBaba, enda kwa kiungo na uandike kwa bot /start.

Baada ya hapo utapokea ujumbe na orodha ya amri:

Ujumbe kutoka 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

Ili kuunda bot mpya, tuma amri /newbot.

BotFather itakuuliza uweke jina la bot na uingie.

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

Unaweza kuingiza jina lolote, lakini kuingia lazima kumalizike bot.

Ikiwa ulifanya kila kitu kwa usahihi, utapokea ujumbe ufuatao:

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

Ifuatayo utahitaji ishara ya API iliyopokelewa, kwa mfano wangu ni 123456789:abcdefghijklmnopqrstuvwxyz.

Katika hatua hii, kazi ya maandalizi ya kuunda bot imekamilika.

Kufunga kifurushi cha kufanya kazi na bot ya telegraph katika R

Nadhani tayari unayo lugha ya R na mazingira ya ukuzaji wa RStudio yaliyosanikishwa. Ikiwa hii sio kesi, basi unaweza kuangalia hii mafunzo ya video jinsi ya kuziweka.

Kufanya kazi na API ya Telegram Bot tutatumia kifurushi cha R telegram.bot.

Kufunga vifurushi katika R hufanywa kwa kutumia kazi install.packages(), kwa hivyo kufunga kifurushi tunachohitaji, tumia amri install.packages("telegram.bot").

Unaweza kujifunza zaidi kuhusu kusakinisha vifurushi mbalimbali kutoka video hii.

Baada ya kusanikisha kifurushi, unahitaji kuiunganisha:

library(telegram.bot)

Inatuma ujumbe kutoka R hadi Telegram

Kijibu ulichounda kinaweza kupatikana kwenye Telegraph kwa kutumia kuingia maalum wakati wa uundaji, kwa upande wangu ni @my_test_bot.

Tuma kijibu ujumbe wowote, kama vile "Hey bot." Kwa sasa, tunahitaji hii ili kupata kitambulisho cha gumzo lako na roboti.

Sasa tunaandika nambari ifuatayo katika R.

library(telegram.bot)

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

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

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

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

Hapo awali, tunaunda mfano wa bot yetu na kazi Bot(), ishara iliyopokelewa hapo awali lazima ipitishwe ndani yake kama hoja.

Haizingatiwi kuwa mazoea bora kuhifadhi ishara katika nambari, kwa hivyo unaweza kuihifadhi katika muundo wa mazingira na kuisoma kutoka kwayo. Kwa chaguo-msingi katika kifurushi telegram.bot Usaidizi wa vibadilishio vya mazingira vya majina yafuatayo umetekelezwa: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... Badala ya ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π badilisha jina ulilotaja wakati wa kuunda, kwa upande wangu litakuwa la kutofautisha R_TELEGRAM_BOT_My Test Bot.

Kuna njia kadhaa za kuunda utofauti wa mazingira; Nitakuambia juu ya ulimwengu wote na jukwaa la msalaba. Unda kwenye saraka yako ya nyumbani (unaweza kuipata kwa kutumia amri path.expand("~")) faili ya maandishi yenye jina .Renviron. Unaweza pia kufanya hivyo kwa kutumia amri file.edit(path.expand(file.path("~", ".Renviron"))).

Na ongeza safu ifuatayo kwake.

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

Ifuatayo, unaweza kutumia ishara iliyohifadhiwa kwenye utofauti wa mazingira kwa kutumia chaguo la kukokotoa bot_token(), i.e. kama hii:

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

Mbinu getUpdates()inaturuhusu kupata sasisho za bot, i.e. jumbe ambazo zilitumwa kwake. Njia from_chat_id(), hukuruhusu kupata kitambulisho cha gumzo ambalo ujumbe ulitumwa. Tunahitaji kitambulisho hiki ili kutuma ujumbe kutoka kwa roboti.

Mbali na kitambulisho cha gumzo kutoka kwa kitu kilichopatikana kwa njia getUpdates() pia unapokea taarifa nyingine muhimu. Kwa mfano, habari kuhusu mtumiaji aliyetuma ujumbe.

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"

Kwa hiyo, katika hatua hii tayari tuna kila kitu tunachohitaji kutuma ujumbe kutoka kwa bot hadi Telegram. Hebu tumia mbinu sendMessage(), ambamo unahitaji kupitisha kitambulisho cha gumzo, maandishi ya ujumbe, na aina ya maandishi ya maandishi. Aina ya markup inaweza kuwa Markdown au HTML na imewekwa na hoja parse_mode.

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

Misingi ya umbizo la Markdown:

  • Fonti nzito imeangaziwa na *:
    • mfano: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • matokeo: herufi nzito
  • Italiki huonyeshwa kwa mistari chini:
    • mfano: _курсив_
    • matokeo: italiki
  • Fonti ya nafasi moja, ambayo kwa kawaida hutumiwa kuangazia msimbo wa programu, imebainishwa kwa kutumia viapostrofi - `:
    • mfano: `fonti ya nafasi moja`
    • matokeo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Misingi ya uundaji wa alama za HTML:
Katika HTML, unafunga sehemu ya maandishi ambayo inahitaji kuangaziwa katika vitambulisho, kwa mfano <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - kufungua lebo
  • - alama ya kufunga

Lebo za alama za HTML

  • <b> - fonti ya ujasiri
    • mfano: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • matokeo herufi nzito
  • <i> - italiki
    • mfano: <i>курсив</i>
    • matokeo: italiki
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • mfano: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • matokeo: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Mbali na maandishi, unaweza kutuma maudhui mengine kwa kutumia mbinu maalum:

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

Wale. kwa mfano kutumia mbinu sendPhoto() unaweza kutuma grafu uliyounda kwa kutumia kifurushi, kilichohifadhiwa kama picha ggplot2.

Kukagua Kipanga Kazi cha Windows na kutuma arifa kuhusu kazi ambazo zimekatishwa kwa njia isiyo ya kawaida.

Kufanya kazi na Windows Task Scheduler unahitaji kusakinisha kifurushi taskscheduleR, na kwa urahisi wa kufanya kazi na data, sasisha kifurushi dplyr.

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

Ifuatayo, kwa kutumia kazi taskscheduler_ls() tunaomba maelezo kuhusu kazi kutoka kwa mratibu wetu. Kwa kutumia kipengele filter() kutoka kwa kifurushi dplyr Tunaondoa kutoka kwenye orodha ya kazi zile ambazo zilikamilishwa kwa ufanisi na kuwa na hali ya matokeo ya mwisho ya 0, na zile ambazo hazijawahi kuzinduliwa na zina hadhi ya 267011, kazi za walemavu, na kazi zinazoendeshwa kwa sasa.

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

Katika kitu task Sasa tuna orodha ya majukumu ambayo hayakufaulu, tunahitaji kutuma orodha hii kwa Telegramu.

Ikiwa tutaangalia kila amri kwa undani zaidi, basi:

  • filter() - huchuja orodha ya kazi kulingana na masharti yaliyoelezwa hapo juu
  • select() - huacha uwanja mmoja tu kwenye meza na jina la kazi
  • unique() - huondoa majina ya nakala
  • unlist() - hubadilisha safu wima ya jedwali iliyochaguliwa kuwa vekta
  • paste0() - huunganisha majina ya kazi kwenye mstari mmoja, na kuweka malisho ya mstari kama kitenganishi, i.e. n.

Kilichobaki kwetu ni kutuma matokeo haya kupitia telegramu.

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

Kwa hivyo, kwa sasa nambari ya bot inaonekana kama hii:

Kagua kazi msimbo wa roboti

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

}

Unapotumia mfano ulio hapo juu, badilisha tokeni yako ya roboti na kitambulisho chako cha gumzo kwenye msimbo.

Unaweza kuongeza masharti ya kazi za kuchuja, kwa mfano, kuangalia kazi hizo tu ambazo umeunda, ukiondoa zile za mfumo.

Unaweza pia kuweka mipangilio mbalimbali katika faili tofauti ya usanidi, na kuhifadhi kitambulisho cha gumzo na ishara ndani yake. Unaweza kusoma usanidi, kwa mfano, kwa kutumia kifurushi configr.

Mfano ini config

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

Mfano wa kusoma anuwai kutoka kwa usanidi katika 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

Kuweka ratiba ya kuendesha skanning za kazi

Mchakato wa kuanzisha uzinduzi wa maandiko kwenye ratiba umeelezwa kwa undani zaidi katika hili Ibara ya. Hapa nitaelezea tu hatua zinazohitajika kufuatwa kwa hili. Ikiwa hatua yoyote haijulikani kwako, basi rejea kwenye makala ambayo nilitoa kiungo.

Hebu tuchukulie kwamba tulihifadhi nambari yetu ya roboti kwenye faili check_bot.R. Ili kuratibu faili hii kufanya kazi mara kwa mara, fuata hatua hizi:

  1. Andika njia ya folda ambayo R imewekwa kwenye utofauti wa mfumo wa Njia; katika Windows, njia itakuwa kitu kama hiki: C:Program FilesRR-4.0.2bin.
  2. Unda faili ya popo inayoweza kutekelezwa na mstari mmoja tu R CMD BATCH C:rscriptscheck_botcheck_bot.R. Badilisha C:rscriptscheck_botcheck_bot.R kwa njia kamili ya faili yako ya R.
  3. Ifuatayo, tumia Mpangilio wa Task wa Windows ili kusanidi ratiba ya uzinduzi, kwa mfano, kila nusu saa.

Hitimisho

Katika nakala hii, tuligundua jinsi ya kuunda bot na kuitumia kutuma arifa mbali mbali kwenye telegraph.

Nilielezea kazi ya ufuatiliaji wa Mpangilio wa Kazi ya Windows, lakini unaweza kutumia nyenzo katika makala hii kutuma arifa zozote, kutoka kwa utabiri wa hali ya hewa hadi nukuu za hisa kwenye soko la hisa, kwa sababu. R hukuruhusu kuungana na idadi kubwa ya vyanzo vya data.

Katika makala inayofuata, tutajua jinsi ya kuongeza amri na kibodi kwenye bot ili sio tu kutuma arifa, lakini pia kufanya vitendo ngumu zaidi.

Chanzo: mapenzi.com

Kuongeza maoni