Liczba użytkowników Telegrama rośnie z dnia na dzień, co jest zasługą wygody komunikatora, dostępności kanałów, czatów i oczywiście możliwości tworzenia botów.
Boty mogą być używane w zupełnie różnych celach, od automatyzacji komunikacji z klientami po zarządzanie własnymi zadaniami.
W zasadzie za pomocą bota można wykonywać wszelkie operacje w Telegramie: wysyłać lub pobierać dane, uruchamiać zadania na serwerze, gromadzić informacje w bazie danych, wysyłać e-maile i tak dalej.
Planuję napisać serię artykułów o tym, jak w języku R pracować z , aby tworzyć boty zgodne z własnymi potrzebami.

W tym, pierwszym artykule zajmiemy się tym, jak stworzyć bota Telegram i wysyłać za jego pomocą powiadomienia w Telegramie.
W rezultacie uzyskamy bota, który będzie sprawdzać status ostatniego wykonania wszystkich zadań w harmonogramie zadań Windows i wysyłać powiadomienia, jeśli któreś z nich zakończą się błędem.
Jednak celem tej serii artykułów nie jest nauczenie was pisania bota do konkretnego, wąskiego zadania, ale ogólne zapoznanie z składnią pakietu telegram.bot, oraz przykładami kodu, za pomocą których będziecie mogli pisać boty rozwiązujące własne zadania.
Spis treści
Jeśli interesujesz się analizą danych, to mogą Cię zainteresować moje i kanały. Większość zawartości poświęcona jest językowi R.
Tworzenie bota Telegram
Na początek musimy stworzyć bota. Robimy to za pomocą specjalnego bota BotFather, przechodzimy do i piszemy do bota /start.
Po czym otrzymasz wiadomość z listą komend:
Wiadomość od BotFather
Mogę pomóc Ci stworzyć i zarządzać botami Telegram. Jeśli jesteś nowy w API botów, zapoznaj się z podręcznikiem (https://core.telegram.org/bots).
Możesz kontrolować mnie, wysyłając te polecenia:
/newbot - stwórz nowego bota
/mybots - edytuj swoje boty [beta]
Edytuj Boty
/setname - zmień nazwę bota
/setdescription - zmień opis bota
/setabouttext - zmień informacje o bocie
/setuserpic - zmień zdjęcie profilowe bota
/setcommands - zmień listę poleceń
/deletebot - usuń bota
Ustawienia Bota
/token - wygeneruj token autoryzacji
/revoke - cofnij token dostępu bota
/setinline - przełącz tryb inline (https://core.telegram.org/bots/inline)
/setinlinegeo - przełącz żądania lokalizacji inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - zmień ustawienia opinii inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - czy Twój bot może być dodany do grup?
/setprivacy - przełącz tryb prywatności (https://core.telegram.org/bots#privacy-mode) w grupach
Gry
/mygames - edytuj swoje gry (https://core.telegram.org/bots/games) [beta]
/newgame - stwórz nową grę (https://core.telegram.org/bots/games)
/listgames - uzyskaj listę swoich gier
/editgame - edytuj grę
/deletegame - usuń istniejącą gręAby stworzyć nowego bota, wyślij polecenie /newbot.
BotFather poprosi Cię o wprowadzenie nazwy i loginu bota.
BotFather, [25.07.20 09:39]
Dobrze, nowy bot. Jak go nazwiemy? Wybierz nazwę dla swojego bota.
Alexey Seleznev, [25.07.20 09:40]
Mój Testowy Bot
BotFather, [25.07.20 09:40]
Dobrze. Teraz wybierz nazwę użytkownika dla swojego bota. Musi kończyć się na `bot`. Na przykład: TetrisBot lub tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botMożesz wprowadzić dowolną nazwę, ale login musi kończyć się na bot.
Jeśli wszystko zrobiłeś poprawnie, otrzymasz następującą wiadomość:
Gotowe! Gratulacje za nowego bota. Znajdziesz go pod adresem t.me/my_test_bot. Teraz możesz dodać opis, sekcję 'o', a także zdjęcie profilowe swojego bota, zobacz /help, aby uzyskać listę poleceń. Swoją drogą, gdy skończysz tworzyć swojego fajnego bota, skontaktuj się z naszą obsługą botów, jeśli chcesz lepszej nazwy użytkownika. Upewnij się, że bot działa poprawnie, zanim to zrobisz.
Użyj tego tokena, aby uzyskać dostęp do API HTTP:
123456789:abcdefghijklmnopqrstuvwxyz
Aby zapoznać się z opisem API Bot, zobacz tę stronę: https://core.telegram.org/bots/apiNastępnie będziesz potrzebować otrzymanego tokena API, w moim przykładzie jest to 123456789:abcdefghijklmnopqrstuvwxyz.
Na tym etapie prace przygotowawcze do stworzenia bota są zakończone.
Instalacja pakietu do pracy z botem Telegram w R
Zakładam, że masz już zainstalowany język R oraz środowisko programistyczne RStudio. Jeśli nie, możesz obejrzeć ten o tym, jak je zainstalować.
Do pracy z API botów Telegram użyjemy pakietu R .
Instalacja pakietów w R odbywa się za pomocą funkcji install.packages(), więc aby zainstalować potrzebny nam pakiet, użyj polecenia install.packages("telegram.bot").
Aby bardziej szczegółowo poznać instalację różnych pakietów, można to zobaczyć w .
Po zainstalowaniu pakietu musisz go załadować:
library(telegram.bot)Wysyłanie wiadomości z R do Telegramu
Twojego stworzonego bota można znaleźć w Telegramie pod nadanym przy tworzeniu loginem, w moim przypadku jest to @my_test_bot.
Wyślij do bota dowolną wiadomość, na przykład „Cześć, bot”. Na ten moment potrzebujemy tego, aby uzyskać identyfikator czatu z botem.
Teraz w R wpisujemy następujący kod.
library(telegram.bot)
# tworzymy instancję bota
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Pobieramy informacje o bocie
print(bot$getMe())
# Otrzymujemy aktualizacje bota, czyli listę wiadomości, które mu wysłano
updates <- bot$getUpdates()
# Pobieramy identyfikator czatu
# Uwaga: przed zapytaniem o aktualizacje musisz wysłać wiadomość do bota
chat_id <- updates[[1L]]$from_chat_id()Początkowo tworzymy instancję naszego bota za pomocą funkcji Bot(), jako argument należy przekazać wcześniej otrzymany token.
Przechowywanie tokenu w kodzie nie jest najlepszą praktyką, dlatego możesz go przechowywać w zmiennej środowiskowej i odczytywać z niej. Domyślnie w pakiecie telegram.bot wspierane są zmienne środowiskowe o następującej nazwie: R_TELEGRAM_BOT_NAZWA_TWOJEGO_BOTA. Zamiast NAZWA_TWOJEGO_BOTA podstaw nazwę, którą ustawiłeś podczas tworzenia, w moim przypadku będzie to zmienna R_TELEGRAM_BOT_My Test Bot.
Tworzenie zmiennej środowiskowej można wykonać na kilka sposobów, opowiem o najbardziej uniwersalnym i międzyplatformowym. Utwórz w swoim katalogu domowym (możesz sprawdzić jego lokalizację za pomocą polecenia path.expand("~")) plik tekstowy o nazwie .Renviron. Można to zrobić również za pomocą polecenia file.edit(path.expand(file.path("~", ".Renviron"))).
I dodaj do niego następującą linię.
R_TELEGRAM_BOT_NAZWA_TWOJEGO_BOTA=123456789:abcdefghijklmnopqrstuvwxyzNastępnie możesz używać tokenu zapisanego w zmiennej środowiskowej za pomocą funkcji bot_token(), czyli tak:
bot <- Bot(token = bot_token("My Test Bot"))Metoda getUpdates()pozwala nam uzyskać aktualizacje bota, czyli wiadomości, które mu zostały wysłane. Metoda from_chat_id(), pozwala uzyskać identyfikator czatu, z którego wiadomość została wysłana. Ten identyfikator jest nam potrzebny do wysyłania wiadomości z bota.
Oprócz identyfikatora czatu z obiektu uzyskanego przez metodę getUpdates() otrzymujesz również inne przydatne informacje. Na przykład informacje o użytkowniku, który wysłał wiadomość.
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"Na tym etapie mamy już wszystko, czego potrzebujemy, aby wysłać wiadomość z bota na Telegram. Skorzystamy z metody sendMessage(), który musi zawierać identyfikator czatu, treść wiadomości oraz typ formatowania treści wiadomości. Typ formatowania może być Markdown lub HTML i jest określany przez argument tryb_analizy.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Podstawy formatowania Markdown:
- Pogrubienie uzyskuje się przy użyciu znaku *:
- przykład:
*pogrubiony tekst* - wynik: pogrubiony tekst
- przykład:
- Kursywę ustawia się przy użyciu podkreślenia:
- przykład:
_kursywa_ - wynik: kursywa
- przykład:
- Czcionka monospace, która zazwyczaj jest używana do oznaczania kodu, jest ustalana za pomocą akcentu — `:
- przykład: `czcionka monospace`
- wynik:
czcionka monospace
Podstawy formatowania HTML:
W HTML zawijasz część tekstu, którą chcesz wyróżnić, w tagi, przykład: w tekście.
- — otwierający tag
- — zamykający tag
Tagi HTML
<b>— pogrubienie- przykład:
<b>pogrubiony tekst</b> - wynik pogrubiony tekst
- przykład:
— kursywa- przykład:
kursywa - wynik: kursywa
- przykład:
— czcionka monospace- przykład:
czcionka monospace - wynik:
czcionka monospace
- przykład:
Oprócz tekstu możesz wysyłać także inny content za pomocą specjalnych metod:
# Отправить изображение
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"
)Tzn. na przykład za pomocą metody sendPhoto() możesz wysłać zapisany jako obrazek wykres, który stworzyłeś za pomocą pakietu ggplot2.
Sprawdzenie harmonogramu zadań systemu Windows i wysłanie powiadomienia o zadaniach, które zakończyły się błędem
Aby pracować z harmonogramem zadań systemu Windows, musisz zainstalować pakiet taskscheduleR, a dla wygody pracy z danymi zainstalujemy pakiet dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Następnie za pomocą funkcji taskscheduler_ls() pytamy o informacje o zadaniach z naszego harmonogramu. Za pomocą funkcji filter() z pakietu dplyr usuwamy z listy zadań te, które zostały pomyślnie wykonane i mają status ostatniego wyniku 0, oraz te, które jeszcze nigdy nie były uruchamiane i mają status 267011, wyłączone zadania oraz zadania, które są aktualnie uruchamiane.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")W obiekcie task mamy teraz listę zadań, które zakończyły się błędem, tę listę musimy wysłać do Telegramu.
Jeśli przyjrzeć się każdemu poleceniu bliżej, to:
filter()— filtruje listę zadań zgodnie z opisanymi powyżej warunkamiselect()— zostawia w tabeli tylko jedno pole z nazwą zadaniaunique()— usuwa duplikaty nazwunlist()— przekształca wybraną kolumnę tabeli w wektorpaste0()— łączy nazwy zadań w jeden ciąg i ustawia jako separator znak nowej linii, tzn.n.
Wszystko, co nam pozostaje, to wysłać ten wynik do Telegramu.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Na ten moment kod bota wygląda następująco:
Kod bota sprawdzającego zadania
# Подключение пакета
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"
)
}Przy użyciu powyższego przykładu wprowadź do kodu token swojego bota oraz swój identyfikator czatu.
Możesz dodawać warunki filtrowania zadań, na przykład sprawdzając tylko te zadania, które zostały utworzone przez Ciebie, z wyłączeniem zadań systemowych.
Możesz również wyodrębnić różne ustawienia do oddzielnego pliku konfiguracyjnego i przechowywać w nim identyfikator czatu oraz token. Możesz czytać konfigurację na przykład za pomocą pakietu configr.
Przykład konfiguracji ini
[telegram_bot]
; Ustawienia bota Telegram oraz czatu, na który będą przychodziły powiadomienia
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Przykład odczytu zmiennych z konfiguracji w R
library(configr)
# Odczyt konfiguracji
config <- read.config('C:/ścieżka_do_konfiguracji/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idKonfigurujemy harmonogram uruchamiania sprawdzania zadań
Najbardziej szczegółowo proces konfiguracji uruchamiania skryptów w harmonogramie opisany jest w tym . Tutaj jedynie opiszę kroki, które należy wykonać. Jeśli którykolwiek z kroków jest dla Ciebie niezrozumiały, skontaktuj się z artykułem, do którego podałem link.
Załóżmy, że zapisaliśmy kod naszego bota w pliku check_bot.R. Aby zaplanować regularne uruchamianie tego pliku, wykonaj następujące kroki:
- Wpisz w zmiennej systemowej Path ścieżkę do folderu, w którym zainstalowano R, w systemie Windows ścieżka będzie mniej więcej taka:
C:Program FilesRR-4.0.2bin. - Utwórz wykonywalny plik bat, w którym będzie tylko jedna linia
R CMD BATCH C:rscriptscheck_botcheck_bot.R. ZmieńC:rscriptscheck_botcheck_bot.Rna pełną ścieżkę do Twojego pliku R. - Następnie skonfiguruj harmonogram uruchamiania za pomocą harmonogramu zadań systemu Windows, na przykład co pół godziny.
Podsumowanie
W tym artykule omówiliśmy, jak stworzyć bota i wysyłać za jego pomocą różne powiadomienia do Telegrama.
Opisałem zadanie monitorowania harmonogramu zadań systemu Windows, ale możesz wykorzystać materiał z tego artykułu do wysyłania wszelkich powiadomień, od prognozy pogody po notowania akcji na giełdzie, ponieważ R pozwala Ci połączyć się z ogromną liczbą źródeł danych.
W następnym artykule dowiemy się, jak dodać komendy i klawiaturę do bota, aby mógł on nie tylko wysyłać powiadomienia, ale także wykonywać bardziej złożone działania.
Źródło: habr.com
