Nulis bot telegram ing R (bagean 1): Nggawe bot lan gunakake kanggo ngirim pesen ing telegram

Pemirsa telegram tuwuh kanthi eksponensial saben dina, sing difasilitasi dening penak saka utusan, anane saluran, obrolan, lan mesthi kemampuan kanggo nggawe bot.

Bot bisa digunakake kanggo macem-macem tujuan, saka ngotomatisasi komunikasi karo pelanggan kanggo ngatur tugas sampeyan dhewe.

Nyatane, liwat bot, sampeyan bisa nggunakake Telegram kanggo nindakake operasi apa wae: ngirim utawa njaluk data, mbukak tugas ing server, ngumpulake informasi ing basis data, ngirim email, lan liya-liyane.

Aku arep nulis seri artikel babagan cara nggarap R telegram bot api, lan nulis bot kanggo kabutuhan sampeyan.

Nulis bot telegram ing R (bagean 1): Nggawe bot lan gunakake kanggo ngirim pesen ing telegram

Ing artikel pisanan iki, kita bakal ngerti carane nggawe bot telegram lan ngirim kabar menyang telegram.

AkibatΓ©, kita bakal duwΓ© bot sing bakal mriksa status eksekusi pungkasan kabeh tugas ing penjadwal tugas. Windows, lan ngirim kabar yen ana sing gagal.

Nanging tujuan saka seri artikel iki ora kanggo mulang sampeyan carane nulis bot kanggo tugas tartamtu, sempit, nanging umume ngenalake sampeyan sintaks paket kasebut. telegram.bot, lan conto kode sing bakal mbantu sampeyan nulis bot kanggo ngatasi masalah sampeyan dhewe.

Isi

Yen sampeyan kasengsem ing analisis data, sampeyan bisa uga kasengsem ing sandi telegram ΠΈ youtube saluran. SebagΓ©yan gedhΓ© isinΓ© dikhususakΓ© kanggo basa R.

  1. Nggawe bot telegram
  2. Nginstal paket kanggo nggarap bot telegram ing R
  3. Ngirim pesen saka R menyang Telegram
  4. Nggawe jadwal kanggo mriksa tugas
  5. kesimpulan

Nggawe bot telegram

Pisanan, kita kudu nggawe bot. Iki rampung nggunakake bot khusus BotBapak, kita nerusake link lan nulis menyang bot /start.

Sawise sampeyan bakal nampa pesen kanthi dhaptar perintah:

Pesen saka 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

Kanggo nggawe bot anyar, kirim printah /newbot.

BotFather bakal njaluk sampeyan ngetik jeneng bot lan mlebu.

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

Sampeyan bisa ngetik jeneng apa wae, nanging login kudu diakhiri bot.

Yen sampeyan nindakake kabeh kanthi bener, sampeyan bakal nampa pesen ing ngisor iki:

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

Sabanjure sampeyan butuh token API sing ditampa, ing contoku 123456789:abcdefghijklmnopqrstuvwxyz.

Ing langkah iki, karya persiapan kanggo nggawe bot wis rampung.

Nginstal paket kanggo nggarap bot telegram ing R

Aku nganggep yen sampeyan wis nginstal basa R lan lingkungan pangembangan RStudio. Yen ora, sampeyan bisa ndeleng iki video wulangan carane kanggo nginstal.

Kanggo nggarap Telegram Bot API kita bakal nggunakake paket R telegram.bot.

Nginstal paket ing R wis rampung nggunakake fungsi install.packages(), supaya nginstal paket sing kita butuhake, gunakake perintah kasebut install.packages("telegram.bot").

Sampeyan bisa sinau luwih lengkap babagan nginstal macem-macem paket saka video iki.

Sawise nginstal paket kasebut, sampeyan kudu nyambungake:

library(telegram.bot)

Ngirim pesen saka R menyang Telegram

Bot sing digawe bisa ditemokake ing Telegram nggunakake login sing sampeyan nemtokake nalika nggawe, ing kasusku @my_test_bot.

Kirimi bot sembarang pesen, contone "Hello bot". Ing wayahe kita butuh iki kanggo njaluk id chatting karo bot.

Saiki ing R kita nulis kode ing ngisor iki.

library(telegram.bot)

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

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

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

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

Kaping pisanan, kita nggawe conto bot kita kanthi fungsi kasebut Bot(), sampeyan kudu ngirim token sing ditampa sadurunge minangka argumen.

Nyimpen token ing kode kasebut ora dianggep minangka praktik paling apik, supaya sampeyan bisa nyimpen ing variabel lingkungan lan maca saka kono. Kanthi gawan, ing paket telegram.bot dhukungan kanggo variabel lingkungan saka jeneng ing ngisor iki wis dileksanakake: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... tinimbang ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π ngganti jeneng sing sampeyan nemtokake nalika nggawe, ing kasusku bakal dadi variabel R_TELEGRAM_BOT_My Test Bot.

Ana sawetara cara kanggo nggawe variabel lingkungan, Aku bakal pitutur marang kowe bab sing paling universal lan salib-platform siji. Gawe ing direktori ngarep (sampeyan bisa nemokake kanthi nggunakake printah path.expand("~")) file teks kanthi jeneng .Renviron. Sampeyan uga bisa nindakake iki nggunakake printah file.edit(path.expand(file.path("~", ".Renviron"))).

Lan tambahake baris ing ngisor iki.

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

Sabanjure, sampeyan bisa nggunakake token sing disimpen ing variabel lingkungan nggunakake fungsi kasebut bot_token(), i.e. kaya iki:

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

Cara getUpdates()ngidini kita entuk nganyari bot, yaiku pesen sing wis dikirim. Metode from_chat_id(), ngidini sampeyan entuk ID chatting saka ngendi pesen kasebut dikirim. Kita butuh ID iki kanggo ngirim pesen saka bot.

Saliyane chatting id saka obyek dijupuk dening cara getUpdates() Sampeyan uga entuk sawetara informasi migunani liyane, kayata informasi babagan pangguna sing ngirim pesen.

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"

Dadi, ing tahap iki kita wis duwe kabeh sing dibutuhake kanggo ngirim pesen saka bot menyang Telegram. Ayo nggunakake cara sendMessage(), ing ngendi sampeyan kudu ngliwati ID chatting, teks pesen, lan jinis markup teks pesen. Jinis markup bisa Markdown utawa HTML lan disetel dening argumen parse_mode.

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

Dasar format Markdown:

  • Huruf kandel disorot nganggo tandha *:
    • tuladha: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • asil: font kandel
  • Miring dituduhake kanthi garis ngisor:
    • tuladha: _курсив_
    • asil: miring
  • Font monospace sing biasane digunakake kanggo nyorot kode program ditemtokake nggunakake apostrof - `:
    • contone: `monospace font`
    • asil: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Dasar pemformatan markup HTML:
Ing HTML, sampeyan mbungkus bagean teks sing kudu disorot ing tag, contone <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> - tag pambuka
  • - tag penutup

Tag markup HTML

  • <b> - font kandel
    • tuladha: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • efek jinis kandel
  • <i> - miring
    • tuladha: <i>курсив</i>
    • asil: miring
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • contone: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • asil: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Saliyane teks, sampeyan bisa ngirim konten liyane nggunakake cara khusus:

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

Sing, contone, nggunakake cara sendPhoto() sampeyan bisa ngirim gambar sing disimpen saka grafik sing wis digawe nggunakake paket kasebut ggplot2.

Mriksa Penjadwal Tugas Windows, lan ngirim kabar babagan tugas sing wis dipungkasi kanthi ora normal

Kanggo nggarap Penjadwal Tugas Windows sampeyan kudu nginstal paket kasebut taskscheduleR, lan kanggo gampang nggarap data, kita bakal nginstal paket kasebut dplyr.

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

Sabanjure, nggunakake fungsi taskscheduler_ls() kita njaluk informasi babagan tugas saka panjadwal kita. Nggunakake fungsi filter() saka paket dplyr Kita mbusak saka dhaptar tugas sing kasil rampung lan nduweni status asil pungkasan 0, lan sing durung tau diluncurake lan duwe status 267011, tugas dipatèni, lan tugas sing lagi ditindakake.

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

Ing obyek task Saiki kita duwe dhaptar tugas sing wis rampung kanthi kesalahan, kita kudu ngirim dhaptar iki menyang Telegram.

Yen kita ndeleng saben printah kanthi luwih rinci, banjur:

  • filter() - nyaring dhaptar tugas miturut kahanan sing kasebut ing ndhuwur
  • select() - godhong mung siji lapangan karo jeneng tugas ing meja
  • unique() - mbusak jeneng duplikat
  • unlist() - Ngonversi kolom tabel sing dipilih dadi vektor
  • paste0() - nggabungke jeneng tugas menyang siji baris lan nggunakake feed baris minangka separator a, i.e. n.

Sing isih ana kanggo kita yaiku ngirim asil iki menyang Telegram.

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

Dadi, saiki kode bot katon kaya iki:

Kode Bot Pemeriksa Tugas

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

}

Nalika nggunakake conto ing ndhuwur, ngganti token bot lan ID chatting menyang kode.

Sampeyan bisa nambah kahanan nyaring tugas, contone mung mriksa tugas sing digawe dening sampeyan, ora kalebu sistem.

Sampeyan uga bisa sijine macem-macem setelan ing file konfigurasi kapisah lan nyimpen ID chatting lan token ing. Sampeyan bisa maca konfigurasi, contone, nggunakake paket configr.

Conto iki config

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

Conto maca variabel saka config ing 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

Nggawe jadwal kanggo mriksa tugas

Proses nyiyapake peluncuran skrip sing wis dijadwal diterangake kanthi luwih rinci artikel. Ing kene aku mung bakal nerangake langkah-langkah sing kudu ditindakake kanggo iki. Yen ana langkah-langkah sing ora jelas kanggo sampeyan, deleng artikel sing wis dakwenehake link.

Ayo nganggep yen kita nyimpen kode bot menyang file check_bot.RKanggo gawe jadwal file iki supaya bisa mlaku kanthi rutin, tindakake langkah iki:

  1. Ketik path menyang folder ing ngendi R diinstal ing variabel sistem Path, Windows dalane bakal kaya ngene: C:Program FilesRR-4.0.2bin.
  2. Nggawe file bat eksekusi sing mung ngemot siji baris. R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ganti C:rscriptscheck_botcheck_bot.R menyang path lengkap menyang file R sampeyan.
  3. Sabanjure, konfigurasi nganggo penjadwal tugas. Windows jadwal peluncuran, contone, saben setengah jam.

kesimpulan

Ing artikel iki, kita ngerti carane nggawe bot lan ngirim macem-macem kabar ing telegram kanthi bantuan.

Aku njlentrehake tugas ngawasi penjadwal tugas Windows, nanging sampeyan bisa nggunakake materi ing artikel iki kanggo ngirim kabar apa wae, saka prakiraan cuaca nganti kuotasi saham, amarga R ngidini sampeyan nyambung menyang akeh banget sumber data.

Ing artikel sabanjure, kita bakal ngerti carane nambah perintah lan keyboard menyang bot supaya ora mung ngirim kabar, nanging uga nindakake tumindak sing luwih rumit.

Source: www.habr.com

Tuku hosting sing dipercaya kanggo situs kanthi proteksi DDoS, server VPS VDS πŸ”₯ Tuku hosting situs web sing bisa dipercaya nganggo proteksi DDoS, server VPS VDS | ProHoster