Penonton Telegram berkembang pesat setiap hari, ini difasilitasi oleh kemudahan messenger, kehadiran saluran, sembang, dan sudah tentu keupayaan untuk mencipta bot.
Bot boleh digunakan untuk tujuan yang berbeza, daripada mengautomasikan komunikasi dengan pelanggan anda kepada mengurus tugas anda sendiri.
Pada asasnya, anda boleh menggunakan telegram untuk melakukan sebarang operasi melalui bot: menghantar atau meminta data, menjalankan tugas pada pelayan, mengumpul maklumat ke dalam pangkalan data, menghantar e-mel dan sebagainya.
Saya bercadang untuk menulis satu siri artikel tentang cara bekerja dengannya , dan tulis bot untuk memenuhi keperluan anda.

Dalam artikel pertama ini, kami akan memikirkan cara membuat bot telegram dan menggunakannya untuk menghantar pemberitahuan dalam telegram.
Hasilnya, kita akan mempunyai bot yang akan menyemak status pelaksanaan terakhir semua tugas dalam penjadual tugas. Windows, dan menghantar pemberitahuan kepada anda jika mana-mana daripadanya gagal.
Tetapi tujuan siri artikel ini bukan untuk mengajar anda cara menulis bot untuk tugas khusus dan sempit, tetapi untuk memperkenalkan anda secara am kepada sintaks pakej telegram.bot, dan contoh kod yang boleh anda gunakan untuk menulis bot untuk menyelesaikan masalah anda sendiri.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
Jika anda berminat dengan analisis data, anda mungkin berminat dengan saya ΠΈ saluran. Kebanyakan kandungan didedikasikan untuk bahasa R.
Mencipta bot telegram
Pertama, kita perlu membuat bot. Ini dilakukan menggunakan bot khas BotBapa, pergi ke dan tulis kepada bot /start.
Selepas itu anda akan menerima mesej dengan senarai arahan:
Mesej daripada 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 gameUntuk membuat bot baharu, hantar arahan /newbot.
BotFather akan meminta anda memasukkan nama bot dan log masuk.
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_botAnda boleh memasukkan sebarang nama, tetapi log masuk mesti berakhir dengan bot.
Jika anda melakukan semuanya dengan betul, anda akan menerima mesej berikut:
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/apiSeterusnya anda memerlukan token API yang diterima, dalam contoh saya ialah 123456789:abcdefghijklmnopqrstuvwxyz.
Pada langkah ini, kerja persediaan untuk mencipta bot telah selesai.
Memasang pakej untuk bekerja dengan bot telegram dalam R
Saya menganggap bahawa anda sudah mempunyai bahasa R dan persekitaran pembangunan RStudio yang dipasang. Jika ini tidak berlaku, maka anda boleh melihat ini tentang cara memasangnya.
Untuk bekerja dengan Telegram Bot API kami akan menggunakan pakej R .
Memasang pakej dalam R dilakukan menggunakan fungsi install.packages(), jadi untuk memasang pakej yang kami perlukan, gunakan arahan install.packages("telegram.bot").
Anda boleh mengetahui lebih lanjut tentang memasang pelbagai pakej daripada .
Selepas memasang pakej, anda perlu menyambungkannya:
library(telegram.bot)Menghantar mesej dari R ke Telegram
Bot yang anda buat boleh didapati di Telegram menggunakan log masuk yang ditentukan semasa penciptaan, dalam kes saya ia adalah @my_test_bot.
Hantar bot sebarang mesej, seperti "Hei bot." Pada masa ini, kami memerlukan ini untuk mendapatkan id sembang anda dengan bot.
Sekarang kita tulis kod berikut dalam R.
library(telegram.bot)
# ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±ΠΎΡΠ°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±ΠΎΡΠ΅
print(bot$getMe())
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΠΎΡΠ°, Ρ.Π΅. ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
updates <- bot$getUpdates()
# ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°ΡΠ°
# ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π±ΠΎΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
chat_id <- updates[[1L]]$from_chat_id()Pada mulanya, kami mencipta contoh bot kami dengan fungsi tersebut Bot(), token yang diterima sebelum ini mesti dihantar ke dalamnya sebagai hujah.
Ia tidak dianggap sebagai amalan terbaik untuk menyimpan token dalam kod, jadi anda boleh menyimpannya dalam pembolehubah persekitaran dan membacanya daripadanya. Secara lalai dalam pakej telegram.bot Sokongan untuk pembolehubah persekitaran bagi nama berikut telah dilaksanakan: R_TELEGRAM_BOT_ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π... Sebaliknya ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π gantikan nama yang anda tentukan semasa mencipta, dalam kes saya ia akan menjadi pembolehubah R_TELEGRAM_BOT_My Test Bot.
Terdapat beberapa cara untuk mencipta pembolehubah persekitaran; Saya akan memberitahu anda tentang yang paling universal dan merentas platform. Buat dalam direktori rumah anda (anda boleh menemuinya menggunakan arahan path.expand("~")) fail teks dengan nama .Persekitaran. Anda juga boleh melakukan ini menggunakan arahan file.edit(path.expand(file.path("~", ".Renviron"))).
Dan tambahkan baris berikut kepadanya.
R_TELEGRAM_BOT_ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π=123456789:abcdefghijklmnopqrstuvwxyzSeterusnya, anda boleh menggunakan token yang disimpan dalam pembolehubah persekitaran menggunakan fungsi tersebut bot_token(), iaitu seperti ini:
bot <- Bot(token = bot_token("My Test Bot"))Kaedah getUpdates()membolehkan kami mendapatkan kemas kini bot, i.e. mesej yang dihantar kepadanya. Kaedah from_chat_id(), membolehkan anda mendapatkan ID sembang dari mana mesej itu dihantar. Kami memerlukan ID ini untuk menghantar mesej daripada bot.
Sebagai tambahan kepada id sembang dari objek yang diperolehi oleh kaedah getUpdates() anda juga menerima beberapa maklumat lain yang berguna. Contohnya, maklumat tentang pengguna yang menghantar mesej.
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"Jadi, pada peringkat ini kami sudah mempunyai semua yang kami perlukan untuk menghantar mesej dari bot ke Telegram. Jom guna kaedah sendMessage(), yang mana anda perlu menghantar ID sembang, teks mesej dan jenis penanda teks mesej. Jenis markup boleh menjadi Markdown atau HTML dan ditetapkan oleh hujah parse_mode.
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
bot$sendMessage(chat_id,
text = "ΠΡΠΈΠ²Π΅Ρ, *ΠΆΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ* _ΠΊΡΡΡΠΈΠ²_",
parse_mode = "Markdown"
)Asas pemformatan turun harga:
- Fon tebal diserlahkan dengan *:
- contoh:
*ΠΆΠΈΡΠ½ΡΠΉ ΡΡΠΈΡΡ* - hasil: fon tebal
- contoh:
- Italic ditunjukkan dengan garis bawah:
- contoh:
_ΠΊΡΡΡΠΈΠ²_ - hasil: huruf condong
- contoh:
- Fon monospace, yang biasanya digunakan untuk menyerlahkan kod program, ditentukan menggunakan apostrof - `:
- contoh: `fon ruang tunggal`
- hasil:
ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Asas pemformatan markup HTML:
Dalam HTML, anda membalut bahagian teks yang perlu diserlahkan dalam teg, contohnya <ΡΠ΅Π³>ΡΠ΅ΠΊΡΡ</ΡΠ΅Π³>.
- <tag> - teg pembukaan
- - tag penutup
Tag markup HTML
<b>- fon tebal- contoh:
<b>ΠΆΠΈΡΠ½ΡΠΉ ΡΡΠΈΡΡ</b> - mengakibatkan fon tebal
- contoh:
<i>- huruf condong- contoh:
<i>ΠΊΡΡΡΠΈΠ²</i> - hasil: huruf condong
- contoh:
- β ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
- contoh: ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
- hasil:
ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Selain teks, anda boleh menghantar kandungan lain menggunakan kaedah khas:
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
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"
)Itu. contohnya menggunakan kaedah sendPhoto() anda boleh menghantar graf yang disimpan sebagai imej yang anda cipta menggunakan pakej tersebut ggplot2.
Memeriksa Penjadual Tugas Windows, dan menghantar pemberitahuan tentang tugasan yang telah ditamatkan secara tidak normal
Untuk bekerja dengan Penjadual Tugas Windows anda perlu memasang pakej tersebut taskscheduleR, dan untuk kemudahan bekerja dengan data, pasang pakej dplyr.
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
library(taskscheduleR)
library(dplyr)Seterusnya, menggunakan fungsi taskscheduler_ls() kami meminta maklumat tentang tugas daripada penjadual kami. Menggunakan fungsi filter() daripada pakej dplyr Kami mengalih keluar daripada senarai tugasan yang berjaya disiapkan dan mempunyai status keputusan terakhir 0 dan tugasan yang tidak pernah dilancarkan dan mempunyai status 267011, tugasan yang dilumpuhkan dan tugasan yang sedang dijalankan.
# Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")Dalam objek task Kami kini mempunyai senarai tugas yang gagal, kami perlu menghantar senarai ini ke Telegram.
Jika kita melihat setiap arahan dengan lebih terperinci, maka:
filter()β menapis senarai tugas mengikut syarat yang diterangkan di atasselect()β meninggalkan hanya satu medan dalam jadual dengan nama tugasanunique()- membuang nama penduaunlist()β menukar lajur jadual yang dipilih kepada vektorpaste0()β menyambungkan nama tugas ke dalam satu baris, dan meletakkan suapan baris sebagai pemisah, i.e.n.
Apa yang tinggal untuk kami ialah menghantar keputusan ini melalui telegram.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Jadi, pada masa ini kod bot kelihatan seperti ini:
Kod bot semakan 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"
)
}Apabila menggunakan contoh di atas, gantikan token bot anda dan ID sembang anda ke dalam kod.
Anda boleh menambah syarat untuk menapis tugas, contohnya, menyemak hanya tugasan yang anda buat, tidak termasuk tugasan sistem.
Anda juga boleh meletakkan pelbagai tetapan ke dalam fail konfigurasi yang berasingan, dan menyimpan id dan token sembang di dalamnya. Anda boleh membaca konfigurasi, contohnya, menggunakan pakej configr.
Contoh konfigurasi ini
[telegram_bot]
;Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡΠ° ΠΈ ΡΠ°ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Contoh membaca pembolehubah daripada konfigurasi dalam 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_idMenyediakan jadual untuk menjalankan imbasan tugas
Proses menyediakan pelancaran skrip pada jadual diterangkan dengan lebih terperinci dalam perkara ini . Di sini saya hanya akan menerangkan langkah-langkah yang perlu diikuti untuk ini. Jika mana-mana langkah tidak jelas kepada anda, rujuk artikel yang saya berikan pautannya.
Mari kita anggap bahawa kita telah menyimpan kod bot kita pada fail check_bot.R. Untuk menjadualkan fail ini berjalan dengan kerap, ikut langkah berikut:
- Masukkan laluan ke folder tempat R dipasang dalam pembolehubah sistem Laluan, Windows laluannya akan menjadi seperti ini:
C:Program FilesRR-4.0.2bin. - Buat fail kelawar boleh laku dengan hanya satu baris
R CMD BATCH C:rscriptscheck_botcheck_bot.R. GantikanC:rscriptscheck_botcheck_bot.Rke laluan penuh ke fail R anda. - Seterusnya, konfigurasikannya menggunakan penjadual tugas. Windows jadual pelancaran, contohnya, setiap setengah jam.
Kesimpulan
Dalam artikel ini, kami mengetahui cara membuat bot dan menggunakannya untuk menghantar pelbagai pemberitahuan dalam telegram.
Saya menerangkan tugas memantau penjadual tugas Windows, tetapi anda boleh menggunakan bahan dalam artikel ini untuk menghantar sebarang pemberitahuan, daripada ramalan cuaca hingga sebut harga saham, kerana R membolehkan anda menyambung ke sebilangan besar sumber data.
Dalam artikel seterusnya, kami akan memikirkan cara menambah arahan dan papan kekunci pada bot supaya ia bukan sahaja boleh menghantar pemberitahuan, tetapi juga melakukan tindakan yang lebih kompleks.
Sumber: www.habr.com
