A Telegram közönsége naponta geometriai arányban növekszik, ami a messenger kényelmének, a csatornák és csoportok meglétének, valamint a botok létrehozásának lehetőségének köszönhető.
A botok teljesen különféle célokra használhatók, az ügyfelekkel való kommunikáció automatizálásától kezdve a saját feladataink kezeléséig.
Lényegében egy bot segítségével a Telegramon bármilyen műveletet végezhetünk: adatokat küldeni vagy kérni, feladatokat indítani a szerveren, információt gyűjteni egy adatbázisba, emaileket küldeni, és így tovább.
Egy sor cikket tervezek írni arról, hogyan lehet az R nyelven dolgozni a , és botokat írni a saját igényeinknek megfelelően.

Ebben az első cikkben azt fogjuk megnézni, hogyan lehet létrehozni egy Telegram botot, és hogyan lehet rajta keresztül értesítéseket küldeni a Telegramra.
Ennek eredményeként egy botunk lesz, amely ellenőrzi a Windows Ütemezőben végrehajtott legutolsó feladatok állapotát, és értesítéseket küld, ha valamelyik hiba miatt leállt.
De ennek a cikksorozatnak a célja nem az, hogy megtanítson benneteket egy szűk feladatra írt bot elkészítésére, hanem hogy általánosan megismertessük a csomag szintaxisával telegram.bot, és a kódk példáival, amelyek segítségével botokat írhattok saját feladataitok megoldására.
Tartalom
Ha érdeklik az adatelemzés, talán érdekesek lesznek a és csatornák. A tartalom nagyobb része R nyelvvel foglalkozik.
Telegram bot létrehozása
Először is létre kell hoznunk egy botot. Ezt egy speciális bot segítésével tehetjük meg BotFather, menjünk a -ra, és írjunk a botnak /start.
Ezt követően megkapja az utasítások listáját:
Üzenet a BotFather-től
Segíthetek létrehozni és kezelni a Telegram botokat. Ha új vagy a Bot API-val kapcsolatban, kérlek, nézd meg a kézikönyvet (https://core.telegram.org/bots).
Ezekkel a parancsokkal irányíthatsz engem:
/newbot - új bot létrehozása
/mybots - a botjaid szerkesztése [beta]
Botok szerkesztése
/setname - egy bot nevének megváltoztatása
/setdescription - bot leírásának megváltoztatása
/setabouttext - bot üzenet információ megváltoztatása
/setuserpic - bot profil fotójának megváltoztatása
/setcommands - a parancsok listájának megváltoztatása
/deletebot - egy bot törlése
Bot beállítások
/token - engedélyezési token generálása
/revoke - a bot hozzáférési tokenjének visszavonása
/setinline - inline mód bekapcsolása (https://core.telegram.org/bots/inline)
/setinlinegeo - inline helyzetkérések bekapcsolása (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - inline visszajelzés (https://core.telegram.org/bots/inline#collecting-feedback) beállításának megváltoztatása
/setjoingroups - hozzáadható-e a bot csoportokhoz?
/setprivacy - a magánélet módjának bekapcsolása (https://core.telegram.org/bots#privacy-mode) csoportokban
Játékok
/mygames - a játékok szerkesztése (https://core.telegram.org/bots/games) [beta]
/newgame - új játék létrehozása (https://core.telegram.org/bots/games)
/listgames - a játékaid listájának lekérése
/editgame - egy játék szerkesztése
/deletegame - egy meglévő játék törléseÚj bot létrehozásához küldd el a parancsot /newbot.
A BotFather megkérdőjelez téged, hogy írd be a bot nevét és a felhasználónevet.
BotFather, [25.07.20 09:39]
Rendben, egy új bot. Hogyan fogjuk hívni? Kérlek, válassz egy nevet a botodnak.
Alexey Seleznev, [25.07.20 09:40]
My Test Bot
BotFather, [25.07.20 09:40]
Jó. Most válasszunk egy felhasználónevet a botodnak. Ennek `bot`-ba kell végződnie. Például: TetrisBot vagy tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botA nevet szabadon megadhatod, de a felhasználónévnek be kell fejeződnie bot.
Ha mindent jól csináltál, akkor a következőt üzenetet fogod megkapni:
Kész! Gratulálok az új botodhoz. Itt találhatod: t.me/my_test_bot. Most már adhatsz neki leírást, tájékoztatót és profilképet, a parancsok listájához lásd a /help-t. Egyébként, ha befejezted a menő botod létrehozását, értesítsd a Bot Támogatást, ha jobb felhasználónevet szeretnél. Csak ügyelj arra, hogy a bot teljesen működőképes legyen, mielőtt ezt megteszed.
Ezzel a tokennel férhetsz hozzá a HTTP API-hoz:
123456789:abcdefghijklmnopqrstuvwxyz
A Bot API leírásának megtalálásához lásd ezt az oldalt: https://core.telegram.org/bots/apiEzután szükséged lesz a megkapott API tokenre, az én példámban ez 123456789:abcdefghijklmnopqrstuvwxyz.
Ezen a ponton a bot létrehozásának előkészületei befejeződtek.
Csomag telepítése a Telegram botal való munkához R-ben
Feltehetőleg már telepítve van R nyelv és az RStudio fejlesztői környezet. Ha nem, akkor megnézheted ezt a arról, hogyan lehet őket telepíteni.
A Telegram Bot API-hoz az R csomagot fogjuk használni .
A csomagok telepítése R-ben az install.packages(), ezért a szükséges csomag telepítéséhez használd a következő parancsot install.packages("telegram.bot").
A különböző csomagok telepítéséről részletesebben olvashatsz ebből .
A csomag telepítése után csatlakoztatni kell:
library(telegram.bot)Üzenetek küldése R-ből Telegramra
Az általad létrehozott botot a Telegramban megtalálhatod a létrehozásakor megadott felhasználónév alapján, az én példámban ez @my_test_bot.
Küldjön bármilyen üzenetet a botnak, például "Helló bot". Jelenleg erre szükségünk van ahhoz, hogy megszerezzük a chat azonosítóját a bottal.
Most a R-ben írjuk a következő kódot.
library(telegram.bot)
# létrehozzuk a bot példányát
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Lekérdezzük a bot információit
print(bot$getMe())
# Megkapjuk a bot frissítéseit, azaz a neki elküldött üzenetek listáját
updates <- bot$getUpdates()
# Lekérdezzük a chat azonosítót
# Megjegyzés: a frissítések lekérése előtt üzenetet kell küldenie a botnak
chat_id <- updates[[1L]]$from_chat_id()Kezdetben létrehozzuk a bot példányát a következő funkcióval Bot(), amelynek argumentumaként meg kell adnunk a korábban megszerzett tokent.
A tokent a kódban tárolni nem a legjobb gyakorlat, ezért tárolhatja környezeti változóban, és onnan olvashatja be. Alapértelmezés szerint a csomagban telegram.bot a következő nevű környezeti változók támogatása van megvalósítva: R_TELEGRAM_BOT_A_TE_BOT_NEVE. A helyére A_TE_BOT_NEVE írja be azt a nevet, amit a létrehozáskor megadott, az én esetemben ez a változó lesz R_TELEGRAM_BOT_My Test Bot.
Környezeti változót többféleképpen létrehozhat, itt a leguniverzálisabbat és multiplatformot ismertetem. Hozzon létre a személyes könyvtárában (ezt a parancs segítségével tudhatja meg path.expand("~")) egy szöveges fájlt, melynek neve .Renviron. Ezt a parancs segítségével is megteheti. file.edit(path.expand(file.path("~", ".Renviron"))).
És adja hozzá a következő sort a fájlhoz.
R_TELEGRAM_BOT_A_TE_BOT_NEVE=123456789:abcdefghijklmnopqrstuvwxyzEzután a környezeti változóban tárolt tokent a következő funkcióval használhatja bot_token(), azaz így:
bot <- Bot(token = bot_token("My Test Bot"))Módszer getUpdates()lehetővé teszi számunkra, hogy megkapjuk a bot frissítéseit, azaz azokat az üzeneteket, amelyeket elküldtek neki. A from_chat_id()metódus lehetővé teszi számunkra, hogy megszerezzük a chat azonosítót, ahonnan az üzenet érkezett. Erre az azonosítóra szükségünk van a bot által küldött üzenetekhez.
A chat azonosító mellett a getUpdates() metódussal kapott objektumból
néhány más hasznos információt is megkapunk. Például azt az információt a felhasználóról, aki az üzenetet elküldte.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"Tehát ezen a ponton már minden megvan, amire szükségünk van ahhoz, hogy üzenetet küldjünk a botból a Telegramon. Használjuk a metódust. sendMessage(), amelybe át kell adni a csoportazonosítót, az üzenet szövegét és az üzenet formázásának típusát. A formázás típusa lehet Markdown vagy HTML, amit az argumentum határoz meg. parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)A Markdown formázás alapjai:
- A vastag betűt *-jel segítségével lehet kiemelni:
- példa:
*vastag betű* - eredmény: vastag betű
- példa:
- A dőlt betű aláhúzással adható meg:
- példa:
_dőlt_ - eredmény: dőlt betű
- példa:
- A monospaced betűt, amelyet általában a programkód kiemelésére használnak, aposztrófok -- ` -el lehet megadni:
- példa: `monospaced betű`
- eredmény:
monospaced betű
A HTML formázás alapjai:
HTML-ben a kiemelni kívánt szöveget tagek közé kell zárni, példa: szöveg.
- — nyitó tag
- — záró tag
HTML formázási tagek
<b>— vastag betű- példa:
<b>félkövér betű</b> - az eredményt félkövér betű
- példa:
— dőlt- példa:
dőlt - eredmény: dőlt betű
- példa:
— monospaced betű- példa:
monospaced betű - eredmény:
monospaced betű
- példa:
A szöveg mellett más tartalom is küldhető speciális módszerekkel:
# Отправить изображение
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"
)Tehát például a sendPhoto() metódussal elküldhető egy képként mentett grafikon, amelyet a ggplot2.
Windows feladatütemező ellenőrzése, és értesítés küldése a sikertelenül befejeződött feladatokról.
A Windows feladatütemezővel való munkához telepítenie kell a taskscheduleRcsomagot, és az adatok kényelmesebb kezeléséhez telepítjük a dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)csomagot. Ezután a taskscheduler_ls() funkcióval kérjük le a feladataink adatait a feladatütemezőből. A filter() csomagból dplyr funkcióval eltávolítjuk a sikeresen végrehajtott feladatokat, amelyek utolsó eredménye 0, valamint azokat, amelyeket még sosem futtattak le, státuszuk 267011, a letiltott feladatok, és azokat a feladatokat, amelyek jelenleg is futnak.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")Az objektumban task most már egy listánk van a hibával befejeződött feladatokról, ezt a listát el kell küldenünk Telegramra.
Ha részletesebben megvizsgáljuk minden parancsot, akkor:
filter()— szűri a feladatlistát a fent leírt feltételek szerintselect()— csak egy mezőt hagy a feladatok táblázatábanunique()— eltávolítja az azonos neveketunlist()— a kiválasztott oszlopot átalakítja vektorrápaste0()— összefűzi a feladatneveket egyetlen szöveggé, és az elválasztójelet sortörésként adja meg, azaz.n.
Minden, amit tennünk kell, hogy ezt az eredményt elküldjük Telegramra.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Jelenleg a bot kódja így néz ki:
A feladatok ellenőrzésére szolgáló 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 helyettesítse a kódban a bot tokenjét és a chat azonosítóját.
Feladatfilterezési feltételeket is adhat hozzá, például ellenőrizheti csak azokat a feladatokat, amelyeket Ön hozott létre, kizárva a rendszerszintű feladatokat.
A különböző beállításokat külön konfigurációs fájlba is viheti, ahol tárolhatja a chat azonosítóját és a tokent. A konfigurációt például a következő csomaggal olvashatja: configr.
INI konfiguráció példa
[telegram_bot]
; a Telegram bot és a chat beállításai, ahová az értesítések érkeznek
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"A konfigurációból származó változók R-ben való olvasásának példája
library(configr)
# a konfiguráció olvasása
config <- read.config('C:/út_a_konfigurációhoz/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idA feladatellenőrzés ütemezésének beállítása
A szkriptek ütemezett indításának folyamata részletesen le van írva ebben a cikkben. Itt csak azokat a lépéseket fogom ismertetni, amelyeket el kell végezni. Ha bármelyik lépés nem világos, kérjük, olvassa el a hivatkozott cikket.
Tegyük fel, hogy a bot kódját a fájlban tároltuk: check_bot.R. A fájl rendszeres indításának ütemezéséhez végezze el a következő lépéseket:
- Adja hozzá a PATH környezeti változóhoz azt a mappát, ahol az R telepítve van. Windows rendszeren a következő úton nagyjából így néz ki:
C:Program FilesRR-4.0.2bin. - Hozzon létre egy futtatható bat fájlt, amely csak egy sort tartalmaz:
R CMD BATCH C:rscriptscheck_botcheck_bot.R. CseréljeC:rscriptscheck_botcheck_bot.Raz R fájlja teljes útvonalához. - Ezután a Windows Feladatütemező segítségével állítsa be az indítási ütemtervet, például félóránként.
Zárás
Ebben a cikkben megtudtuk, hogyan kell létrehozni egy botot, és hogyan küldhetünk különböző értesítéseket a Telegramon.
Leírtam a Windows feladatütemezőjének ellenőrzésével kapcsolatos feladatot, de az cikk anyaggát felhasználhatja bármely értesítés küldésére, legyen szó időjárás-előrejelzésről vagy tőzsdei árfolyamokról, mivel az R lehetővé teszi, hogy számos adatforráshoz kapcsolódjon.
A következő cikkben meg fogjuk vizsgálni, hogyan adhatunk parancsokat és billentyűzetet a botnak, hogy ne csupán értesítéseket küldhessen, hanem összetettebb műveleteket is végrehajthasson.
Forrás: habr.com
