ProHoster > Blog > Adminisztráció > Telegram bot írása R-ben (1. rész): Bot létrehozása és használata üzenetek küldésére táviratban
Telegram bot írása R-ben (1. rész): Bot létrehozása és használata üzenetek küldésére táviratban
A Telegram közönsége napról napra ugrásszerűen növekszik, ezt elősegíti a messenger kényelme, a csatornák, chatek jelenléte, és persze a botkészítés lehetősége.
A botok teljesen különböző célokra használhatók, az ügyfelekkel folytatott kommunikáció automatizálásától a saját feladatai kezeléséig.
Lényegében a távirat segítségével bármilyen műveletet végrehajthat a botokon keresztül: adatokat küldhet vagy kérhet, feladatokat futtathat a szerveren, információkat gyűjthet egy adatbázisba, e-maileket küldhet stb.
Cikksorozatot tervezek írni a velük való munkavégzésről telegram bot API, és írjon robotokat az igényeinek megfelelően.
Ebben az első cikkben kitaláljuk, hogyan hozhatunk létre egy távirat-botot, és hogyan használhatjuk azt értesítések küldésére a táviratban.
Ennek eredményeként lesz egy robotunk, amely ellenőrzi a Windows Feladatütemezőben található összes feladat utolsó végrehajtásának állapotát, és értesítést küld, ha valamelyik meghiúsult.
De ennek a cikksorozatnak nem az a célja, hogy megtanítsa, hogyan kell botot írni egy meghatározott, szűk feladathoz, hanem hogy általánosságban megismertesse a csomag szintaxisával. telegram.bot, és kódpéldák, amelyekkel botokat írhatsz saját problémáid megoldására.
Tartalom
Ha érdekel az adatelemzés, akkor az én oldalam is érdekelheti távirat и youtube csatornák. A tartalom nagy része az R nyelvnek szól.
Először is létre kell hoznunk egy botot. Ez egy speciális bot segítségével történik BotFather, menj link és írj a botnak /start.
Ezt követően üzenetet fog kapni a parancsok listájával:
BotFather üzenete
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
Új bot létrehozásához küldje el a parancsot /newbot.
A BotFather meg fogja kérni, hogy adja meg a robot nevét és bejelentkezési adatait.
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
Bármilyen nevet megadhat, de a bejelentkezésnek ezzel kell végződnie bot.
Ha mindent helyesen csinált, a következő üzenetet fogja kapni:
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
Ezután a kapott API tokenre lesz szüksége, az én példámban ez van 123456789:abcdefghijklmnopqrstuvwxyz.
Ezzel a lépéssel befejeződik a bot létrehozásának előkészítő munkája.
Csomag telepítése egy táviratbottal való munkához R-ben
Feltételezem, hogy már telepítve van az R nyelv és az RStudio fejlesztői környezet. Ha nem ez a helyzet, akkor ezt megnézheti video bemutató hogyan kell telepíteni őket.
A Telegram Bot API-val való együttműködéshez az R csomagot használjuk távirat.bot.
A csomagok telepítése R-ben a függvény segítségével történik install.packages(), tehát a szükséges csomag telepítéséhez használja a parancsot install.packages("telegram.bot").
További információ a különböző csomagok telepítéséről innen ez a videó.
A csomag telepítése után csatlakoztatnia kell:
library(telegram.bot)
Üzenetek küldése R-ről a Telegramba
Az általad létrehozott bot a Telegramban megtalálható a létrehozáskor megadott bejelentkezési névvel, esetemben az @my_test_bot.
Bármilyen üzenetet küldhet a botnak, például "Hey bot". Jelenleg erre van szükségünk ahhoz, hogy megkapjuk a bottal folytatott csevegés azonosítóját.
Most a következő kódot írjuk R-be.
library(telegram.bot)
# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Запрашиваем информацию о боте
print(bot$getMe())
# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()
# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()
Kezdetben létrehozzuk a botunk példányát a funkcióval Bot(), a korábban kapott tokent argumentumként kell átadni bele.
Nem tekinthető bevált gyakorlatnak a tokent kódban tárolni, ezért tárolhatja azt egy környezeti változóban, és kiolvashatja belőle. Alapértelmezés szerint a csomagban telegram.bot A következő nevű környezeti változók támogatása megtörtént: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Ahelyett ИМЯ_ВАШЕГО_БОТА cserélje ki a létrehozáskor megadott nevet, esetemben ez egy változó lesz R_TELEGRAM_BOT_My Test Bot.
Környezeti változót többféleképpen is létrehozhatunk; elmondom a leguniverzálisabb és több platformot átívelő változót. Hozzon létre a saját könyvtárában (megtalálhatja a paranccsal path.expand("~")) nevű szövegfájlt .Renviron. Ezt a paranccsal is megteheti file.edit(path.expand(file.path("~", ".Renviron"))).
Ezután használhatja a környezeti változóba mentett tokent a függvény segítségével bot_token(), azaz mint ez:
bot <- Bot(token = bot_token("My Test Bot"))
módszer getUpdates()lehetővé teszi számunkra, hogy bot frissítéseket kapjunk, pl. a neki küldött üzeneteket. Módszer from_chat_id(), lehetővé teszi annak a csevegésnek az azonosítóját, amelyből az üzenetet küldték. Erre az azonosítóra van szükségünk üzenetek küldéséhez a bottól.
A metódussal kapott objektum chat-azonosítója mellett getUpdates() egyéb hasznos információkat is kap. Például információ az üzenetet küldő felhasználóról.
Tehát ebben a szakaszban már megvan minden, ami ahhoz kell, hogy egy bottól üzenetet küldjünk a Telegramnak. Használjuk a módszert sendMessage(), amelybe át kell adnia a csevegési azonosítót, az üzenet szövegét és az üzenetszöveg jelölési típusát. A jelölés típusa lehet Markdown vagy HTML, és az argumentum határozza meg parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)
Markdown formázási alapok:
A félkövér betűtípust * jelzi:
például: *жирный шритф*
eredmény: félkövér betűtípus
A dőlt betűket aláhúzás jelzi:
például: _курсив_
eredmény: dőlt betűvel
A monospace betűtípust, amelyet általában a programkód kiemelésére használnak, aposztrófokkal adjuk meg - `:
példa: `monospace font`
eredmény: моноширинный шрифт
A HTML-jelölés formázásának alapjai:
A HTML-ben a kiemelendő szövegrészt címkékbe csomagolja, például <тег>текст</тег>.
<tag> - nyitó címke
- záró címke
HTML jelölőcímkék
<b> - félkövér betűtípus
például: <b>жирный шрифт</b>
eredmény félkövér betűtípus
<i> - dőlt
például: <i>курсив</i>
eredmény: dőlt betűvel
— моноширинный шрифт
példa: моноширинный шрифт
eredmény: моноширинный шрифт
A szövegen kívül más tartalmat is küldhet speciális módszerekkel:
Azok. például a módszer segítségével sendPhoto() elküldheti a csomag segítségével készített grafikont, képként mentve ggplot2.
A Windows Feladatütemező ellenőrzése és értesítések küldése a rendellenesen befejeződött feladatokról
A Windows Task Scheduler használatához telepítenie kell a csomagot taskscheduleR, és az adatokkal való munka kényelme érdekében telepítse a csomagot dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)
Ezután a funkció használatával taskscheduler_ls() a feladatokról információt kérünk ütemezőnktől. A funkció használata filter() a csomagból dplyr Eltávolítjuk a feladatok listájából azokat, amelyek sikeresen befejeződtek, és az utolsó eredmény állapota 0, és azokat, amelyek még soha nem indultak el, és amelyek állapota 267011, a letiltott és a jelenleg futó feladatokat.
Az objektumban task Most megvan a sikertelen feladatok listája, ezt a listát el kell küldenünk a Telegramnak.
Ha részletesebben megvizsgáljuk az egyes parancsokat, akkor:
filter() — szűri a feladatok listáját a fent leírt feltételek szerint
select() — csak egy mezőt hagy a táblázatban a feladatok nevével
unique() - eltávolítja a duplikált neveket
unlist() — vektorrá alakítja a kiválasztott táblázatoszlopot
paste0() — egy sorba köti a feladatok neveit, és soremelést tesz elválasztóként, pl. n.
Nincs más hátra, mint ezt az eredményt táviratban elküldeni.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
Tehát jelenleg a bot kódja így néz ki:
Feladat felülvizsgálati bot kódja
# Подключение пакета
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"
)
}
A fenti példa használatakor cserélje be a kódba a bot-tokenjét és a chatazonosítóját.
Feltételeket adhat hozzá a feladatok szűréséhez, például csak azokat a feladatokat ellenőrizheti, amelyeket Ön hozott létre, kivéve a rendszerfeladatokat.
Különféle beállításokat is elhelyezhet egy külön konfigurációs fájlba, és abban tárolhatja a csevegési azonosítót és a tokent. A konfigurációt például a csomag segítségével olvashatja el configr.
Példa ini config
[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
Példa változók beolvasására egy R-beli konfigurációból
Ütemezés beállítása a feladatvizsgálatok futtatásához
A szkriptek ütemezett indításának beállításának folyamatát ebben részletesebben ismertetjük cikk. Itt csak az ehhez szükséges lépéseket írom le. Ha valamelyik lépés nem világos számodra, akkor olvasd el azt a cikket, amelyre hivatkozást adtam.
Tegyük fel, hogy elmentettük a bot kódunkat egy fájlba check_bot.R. A fájl rendszeres futtatásának ütemezéséhez kövesse az alábbi lépéseket:
Írja be a Path rendszerváltozóba annak a mappának az elérési útját, amelybe az R telepítve van; Windowsban az elérési út a következő lesz: C:Program FilesRR-4.0.2bin.
Hozzon létre egy futtatható bat fájlt egyetlen sorral R CMD BATCH C:rscriptscheck_botcheck_bot.R. Cserélje ki C:rscriptscheck_botcheck_bot.R az R fájl teljes elérési útjára.
Ezután a Windows Feladatütemezővel állítsa be az indítási ütemezést, például félóránként.
Következtetés
Ebben a cikkben kitaláltuk, hogyan hozhatunk létre egy botot, és hogyan használhatjuk különféle értesítések küldésére táviratban.
Leírtam a Windows Task Scheduler figyelésének feladatát, de a cikk anyaga segítségével bármilyen értesítést küldhet, az időjárás-előrejelzéstől a tőzsdei jegyzésekig, mert Az R segítségével rengeteg adatforráshoz csatlakozhat.
A következő cikkben kitaláljuk, hogyan adhatunk hozzá parancsokat és billentyűzetet a bothoz, hogy ne csak értesítéseket küldhessenek, hanem bonyolultabb műveleteket is végrehajthassanak.