ProHoster > Blog > Pentadbiran > Menulis bot telegram dalam R (bahagian 1): Mencipta bot dan menggunakannya untuk menghantar mesej dalam telegram
Menulis bot telegram dalam R (bahagian 1): Mencipta bot dan menggunakannya untuk menghantar mesej dalam telegram
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 API bot telegram, 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.
Akibatnya, kami akan mempunyai bot yang akan menyemak status pelaksanaan terakhir semua tugasan 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 telegram ΠΈ youtube saluran. Kebanyakan kandungan didedikasikan untuk bahasa R.
Pertama, kita perlu membuat bot. Ini dilakukan menggunakan bot khas BotBapa, pergi ke pautan 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 game
Untuk 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_bot
Anda 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/api
Seterusnya 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 tutorial video tentang cara memasangnya.
Untuk bekerja dengan Telegram Bot API kami akan menggunakan pakej R telegram.bot.
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 video ini.
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.
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"))).
Seterusnya, 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.
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.
Itu. contohnya menggunakan kaedah sendPhoto() anda boleh menghantar graf yang disimpan sebagai imej yang anda cipta menggunakan pakej tersebut ggplot2.
Menyemak Penjadual Tugas Windows dan menghantar pemberitahuan tentang tugas yang telah ditamatkan secara tidak normal
Untuk bekerja dengan Windows Task Scheduler anda perlu memasang pakej tersebut taskscheduleR, dan untuk kemudahan bekerja dengan data, pasang pakej 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.
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.
Menyediakan jadual untuk menjalankan imbasan tugas
Proses menyediakan pelancaran skrip pada jadual diterangkan dengan lebih terperinci dalam perkara ini artikel. 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:
Tulis laluan ke folder di mana R dipasang dalam pembolehubah sistem Laluan; dalam 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. Gantikan C:rscriptscheck_botcheck_bot.R ke laluan penuh ke fail R anda.
Seterusnya, gunakan Windows Task Scheduler untuk menyediakan 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 kepada sebut harga saham di bursa saham, kerana R membolehkan anda menyambung kepada sejumlah 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.