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

Pemirsa Telegram mundhak kanthi eksponensial saben dina, iki difasilitasi dening penak saka utusan, anane saluran, obrolan, lan mesthi kemampuan kanggo nggawe bot.

Bot bisa digunakake kanggo tujuan sing beda, saka ngotomatisasi komunikasi karo pelanggan nganti ngatur tugas sampeyan dhewe.

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

Aku arep nulis seri artikel babagan cara nggarap telegram bot API, lan nulis bot sing cocog karo 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 digunakake kanggo ngirim kabar ing telegram.

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

Nanging tujuan saka seri artikel iki ora kanggo mulang sampeyan carane nulis bot kanggo tugas tartamtu sing sempit, nanging umume ngenalake sintaks paket kasebut. telegram.bot, lan conto kode sing bisa digunakake kanggo 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. Nyetel jadwal kanggo mbukak tugas scan
  5. kesimpulan

Nggawe bot telegram

Pisanan, kita kudu nggawe bot. Iki rampung nggunakake bot khusus BotBapak, pindhah menyang 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 tutorial video 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 ditemtokake nalika nggawe, ing kasusku @my_test_bot.

Kirimi bot sembarang pesen, kayata "Hei bot." Saiki, kita butuh iki kanggo entuk id obrolan sampeyan karo bot.

Saiki kita nulis kode ing ngisor iki ing R.

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(), token sing ditampa sadurunge kudu dilebokake minangka argumen.

Ora dianggep minangka praktik paling apik kanggo nyimpen token ing kode, supaya sampeyan bisa nyimpen ing variabel lingkungan lan maca saka iku. 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 ngandhani babagan sing paling universal lan lintas platform. 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 dikirim menyang dheweke. 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 nampa sawetara informasi migunani liyane. Contone, 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 ngirim 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 *:
    • 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-dasar format 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 font 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 grafik sing digawe nggunakake paket, disimpen minangka gambar ggplot2.

Mriksa Windows Task Scheduler lan ngirim kabar babagan tugas sing wis rampung ora normal

Kanggo nggarap Windows Task Scheduler sampeyan kudu nginstal paket kasebut taskscheduleR, lan kanggo penak nggarap data, instal 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 wis kasil rampung lan duwe status asil pungkasan 0, lan sing durung tau dibukak lan duwe status 267011, tugas dipatèni, lan tugas sing lagi mlaku.

# Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список Π·Π°Π΄Π°Ρ‡
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 gagal, 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() - ninggalake mung siji lapangan ing meja kanthi jeneng tugas
  • unique() - mbusak jeneng duplikat
  • unlist() - Ngonversi kolom tabel sing dipilih dadi vektor
  • paste0() - nyambungake jeneng tugas menyang siji baris, lan nempatno feed baris minangka separator a, i.e. n.

Kabeh sing isih ana yaiku ngirim asil iki liwat telegram.

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

Dadi, saiki kode bot katon kaya iki:

Kode bot review 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 kanggo nyaring tugas, contone, mriksa mung tugas sing digawe, ora kalebu sistem.

Sampeyan uga bisa sijine macem-macem setelan menyang file konfigurasi kapisah, lan nyimpen chatting id 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 konfigurasi 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

Nyetel jadwal kanggo mbukak tugas scan

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

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

  1. Tulis path menyang folder ing ngendi R diinstal ing variabel sistem Path; ing Windows, path bakal kaya iki: C:Program FilesRR-4.0.2bin.
  2. Gawe file bat sing bisa dieksekusi kanthi mung 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, gunakake Windows Task Scheduler kanggo nyetel jadwal peluncuran, contone, saben setengah jam.

kesimpulan

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

Aku nerangake tugas ngawasi Windows Task Scheduler, nanging sampeyan bisa nggunakake materi ing artikel iki kanggo ngirim kabar apa wae, saka ramalan cuaca kanggo kuotasi saham ing bursa saham, amarga R ngijini sampeyan kanggo nyambung menyang nomer ageng 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

Add a comment