R dilində teleqram botu yazırıq (1-ci hissə): Bot yaradın və ondan istifadə edərək teleqrama mesaj göndərin.

Teleqramın auditoriyası hər gün eksponent olaraq artır, buna messencerin rahatlığı, kanalların, söhbətlərin mövcudluğu və əlbəttə ki, botlar yaratmaq imkanı kömək edir.

Botlardan müştərilərinizlə ünsiyyəti avtomatlaşdırmaqdan tutmuş öz tapşırıqlarınızı idarə etməyə qədər müxtəlif məqsədlər üçün istifadə oluna bilər.

Əslində, bot vasitəsilə istənilən əməliyyatı yerinə yetirmək üçün teleqramdan istifadə edə bilərsiniz: məlumat göndərmək və ya tələb etmək, serverdə tapşırıqları yerinə yetirmək, verilənlər bazasında məlumat toplamaq, e-poçt göndərmək və s.

R-də R ilə necə işləmək barədə bir sıra məqalələr yazmağı planlaşdırıram. telegram bot API, və ehtiyaclarınız üçün botlar yazın.

R dilində teleqram botu yazırıq (1-ci hissə): Bot yaradın və ondan istifadə edərək teleqrama mesaj göndərin.

Bu ilk məqalədə biz teleqram botunu necə yaratmağı və ondan istifadə edərək teleqrama bildiriş göndərməyi öyrənəcəyik.

Nəticədə, Windows Task Scheduler-də bütün tapşırıqların son icra vəziyyətini yoxlayan və hər hansı bir uğursuzluq halında sizə bildirişlər göndərən bir botumuz olacaq.

Lakin bu silsilə məqalələrin məqsədi sizə konkret, dar bir tapşırıq üçün bot yazmağı öyrətmək deyil, ümumiyyətlə paketin sintaksisi ilə tanış etməkdir. telegram.bot, və öz problemlərinizi həll etmək üçün botlar yaza biləcəyiniz kod nümunələri.

Məzmun

Əgər məlumatların təhlili ilə maraqlanırsınızsa, mənimlə maraqlana bilərsiniz teleqram и youtube kanallar. Məzmununun çoxu R dilinə həsr olunub.

  1. Teleqram botunun yaradılması
  2. R-də teleqram botu ilə işləmək üçün paketin quraşdırılması
  3. R-dən Telegram-a mesajların göndərilməsi
  4. Tapşırıq skanının işə salınması cədvəlinin konfiqurasiyası
  5. Nəticə

Teleqram botunun yaradılması

Əvvəlcə bir bot yaratmalıyıq. Bu, xüsusi bir bot istifadə edərək edilir BotAta, getmək əlaqə və bota yazın /start.

Sonra əmrlərin siyahısı olan bir mesaj alacaqsınız:

BotFather-dən mesaj

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

Yeni bot yaratmaq üçün əmri göndərin /newbot.

BotFather sizdən botun adını və girişini daxil etməyinizi xahiş edəcək.

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

Siz ixtiyari ad daxil edə bilərsiniz və giriş bununla bitməlidir bot.

Hər şeyi düzgün etmisinizsə, aşağıdakı mesajı alacaqsınız:

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

Sonra, qəbul edilmiş API nişanına ehtiyacınız olacaq, mənim nümunəmdə belədir 123456789:abcdefghijklmnopqrstuvwxyz.

Bu mərhələdə botun yaradılması üçün hazırlıq işləri tamamlanır.

R-də teleqram botu ilə işləmək üçün paketin quraşdırılması

Güman edirəm ki, sizdə artıq R dili quraşdırılıb və RStudio inkişaf mühiti var. Əgər belə deyilsə, buna baxa bilərsiniz video təlimatı onları necə quraşdırmaq barədə.

Telegram Bot API ilə işləmək üçün biz R paketindən istifadə edəcəyik telegram.bot.

R-də paketlərin quraşdırılması funksiya tərəfindən həyata keçirilir install.packages(), bizə lazım olan paketi quraşdırmaq üçün əmrdən istifadə edin install.packages("telegram.bot").

Müxtəlif paketlərin quraşdırılması haqqında ətraflı məlumat üçün baxın bu video.

Paketi quraşdırdıqdan sonra onu birləşdirməlisiniz:

library(telegram.bot)

R-dən Telegram-a mesajların göndərilməsi

Yaratdığınız botu Telegram-da yaratmaq zamanı göstərilən girişdən istifadə etməklə tapmaq olar, mənim vəziyyətimdə belədir @my_test_bot.

Bota istənilən mesajı göndərin, məsələn, "Salam bot". Hal-hazırda, bot ilə söhbətinizin id-sini əldə etmək üçün bizə bu lazımdır.

İndi R-də aşağıdakı kodu yazırıq.

library(telegram.bot)

# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Запрашиваем информацию о боте
print(bot$getMe())

# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()

# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()

Əvvəlcə funksiya ilə botumuzun nümunəsini yaradırıq Bot(), arqument olaraq, əvvəllər qəbul edilmiş nişanı ona ötürməlisiniz.

Tokenin kodda saxlanması pis təcrübə hesab olunur, ona görə də onu mühit dəyişənində saxlaya və ondan oxuya bilərsiniz. Paketdə standart olaraq telegram.bot aşağıdakı adda olan mühit dəyişənləri üçün həyata keçirilən dəstək: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Bunun əvəzinə ИМЯ_ВАШЕГО_БОТА yaradarkən təyin etdiyiniz adı əvəz edin, mənim vəziyyətimdə bu dəyişən olacaq R_TELEGRAM_BOT_My Test Bot.

Bir neçə yolla bir mühit dəyişəni yarada bilərsiniz, ən universal və cross-platform haqqında danışacağam. Ev kataloqunuzda yaradın (onu əmrlə tapa bilərsiniz path.expand("~")) adı ilə mətn faylı .Renviron. Bunu əmrlə də edə bilərsiniz file.edit(path.expand(file.path("~", ".Renviron"))).

Və ona aşağıdakı sətri əlavə edin.

R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

Daha sonra funksiya ilə mühit dəyişənində saxlanılan işarədən istifadə edə bilərsiniz bot_token(), yəni. bunun kimi:

bot <- Bot(token = bot_token("My Test Bot"))

üsul getUpdates()bizə bot yeniləmələrini əldə etməyə imkan verir, yəni. ona göndərilən mesajlar. Metod from_chat_id(), mesajın göndərildiyi söhbətin ID-sini əldə etməyə imkan verir. Bizə botdan mesaj göndərmək üçün bu identifikator lazımdır.

Metod tərəfindən alınan obyektdən söhbət id-inə əlavə olaraq getUpdates() başqa faydalı məlumatlar da əldə edirsiniz. Məsələn, mesajı göndərən istifadəçi haqqında məlumat.

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"

Beləliklə, bu mərhələdə botdan teleqrama mesaj göndərmək üçün lazım olan hər şey artıq var. Metoddan istifadə edək sendMessage(), söhbət identifikatorunu, mesaj mətnini və mesaj mətni işarələmə növünü ötürməli olduğunuz. İşarələmə növü Markdown və ya HTML ola bilər və arqument tərəfindən təyin olunur parse_mode.

# Отправка сообщения
bot$sendMessage(chat_id,
                text = "Привет, *жирный текст* _курсив_",
                parse_mode = "Markdown"
)

Markdown Formatlaşdırma Əsasları:

  • Qalın şrift * ilə qeyd olunur:
    • Məsələn: *жирный шритф*
    • nəticə: qalın skript
  • Kursiv alt xətt ilə verilir:
    • Məsələn: _курсив_
    • nəticə: kursiv
  • Adətən proqram kodunu vurğulamaq üçün istifadə olunan sabit boşluq şrifti apostroflardan istifadə etməklə müəyyən edilir - `:
    • misal: `tek fəza şrifti`
    • nəticə: моноширинный шрифт

HTML işarələmə formatının əsasları:
HTML-də mətnin vurğulamaq istədiyiniz hissəsini teqlərə sarırsınız, məsələn <тег>текст</тег>.

  • <tag> — açılış teqi
  • - bağlama etiketi

HTML işarələmə teqləri

  • <b> - qalın şrift
    • Məsələn: <b>жирный шрифт</b>
    • nəticə qalın şrift
  • <i> - kursiv
    • Məsələn: <i>курсив</i>
    • nəticə: kursiv
  • — моноширинный шрифт
    • misal: моноширинный шрифт
    • nəticə: моноширинный шрифт

Mətnə əlavə olaraq, xüsusi üsullardan istifadə edərək digər məzmun göndərə bilərsiniz:

# Отправить изображение
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"
)

Bunlar. məsələn metoddan istifadə etməklə sendPhoto() paketlə birlikdə qurduğunuz şəkil kimi saxladığınız qrafiki göndərə bilərsiniz ggplot2.

Windows Task Scheduler yoxlanılır və qəzaya uğramış tapşırıqlar barədə bildiriş göndərilir

Windows Task Scheduler ilə işləmək üçün paketi quraşdırmalısınız taskscheduleR, və verilənlərlə işləmək rahatlığı üçün paketi quraşdırın dplyr.

# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)

Sonra, funksiyadan istifadə edin taskscheduler_ls() biz planlayıcımızdan tapşırıqlar haqqında məlumat tələb edirik. Funksiyadan istifadə etməklə filter() paketdən dplyr müvəffəqiyyətlə tamamlanan və son nəticə statusu 0 olan və hələ icra olunmamış və 267011 statusuna malik olanları, əlil edilmiş tapşırıqları və hazırda işləyən tapşırıqları tapşırıqlar siyahısından çıxarırıq.

# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Obyektdə task indi işi xəta ilə bitən tapşırıqların siyahısı var, bu siyahını Telegram-a göndərməliyik.

Hər bir əmri daha ətraflı nəzərdən keçirsək, onda:

  • filter() — yuxarıda təsvir edilən şərtlərə uyğun olaraq tapşırıqların siyahısını süzür
  • select() - cədvəldəki tapşırıqların adı ilə yalnız bir sahə buraxır
  • unique() - dublikat adları silir
  • unlist() - seçilmiş cədvəl sütununu vektora çevirir
  • paste0() - tapşırıqların adlarını bir sətirdə birləşdirir və ayırıcı kimi yeni sətir simvolu qoyur, yəni. n.

Bizə qalan bu nəticəni teleqrama göndərməkdir.

bot$sendMessage(chat_id,
                text = task,
                parse_mode = "Markdown"
)

Beləliklə, hazırda bot kodu belə görünür:

Tapşırığı yoxlayan bot kodu

# Подключение пакета
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"
  )

}

Yuxarıdakı nümunədən istifadə edərkən, kodda bot nişanınızı və söhbət ID-nizi əvəz edin.

Siz tapşırıq filtrləmə şərtlərini əlavə edə bilərsiniz, məsələn, sistem tapşırıqları istisna olmaqla, yalnız sizin yaratdığınız tapşırıqları yoxlamaq.

Siz həmçinin müxtəlif parametrləri ayrıca konfiqurasiya faylına yerləşdirə və söhbət id və nişanını orada saxlaya bilərsiniz. Konfiqurasiyanı, məsələn, paketdən istifadə edərək oxuya bilərsiniz configr.

Misal ini konfiqurasiyası

[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

R-də konfiqurasiyadan dəyişənlərin oxunması nümunəsi

library(configr)

# чтение конфина
config <- read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE)

bot_token <- config$telegram_bot$bot_token
chat_id     <- config$telegram_bot$chat_id

Tapşırıq skanının işə salınması cədvəlinin qurulması

Planlaşdırılmış skriptin işə salınmasının konfiqurasiya prosesi burada daha ətraflı təsvir edilmişdir məqalə. Burada yalnız bunun üçün əməl edilməli olan addımları təsvir edəcəyəm. Əgər addımlardan hər hansı biri sizə aydın deyilsə, o zaman link verdiyim məqaləyə müraciət edin.

Deyək ki, biz bot kodumuzu faylda saxlayırıq check_bot.R. Bu faylın müntəzəm işləməsini planlaşdırmaq üçün bu addımları yerinə yetirin:

  1. Path sistem dəyişənində R-nin quraşdırıldığı qovluğa gedən yolu yazın, Windows-da yol belə olacaq: C:Program FilesRR-4.0.2bin.
  2. Yalnız bir sətir ilə icra edilə bilən yarasa faylı yaradın R CMD BATCH C:rscriptscheck_botcheck_bot.R. Əvəz edin C:rscriptscheck_botcheck_bot.R R faylınızın tam yoluna.
  3. Sonra, məsələn, hər yarım saatda bir başlanğıc cədvəli qurmaq üçün Windows Task Scheduler-dən istifadə edin.

Nəticə

Bu yazıda biz bot yaratmağı və ondan teleqrama müxtəlif bildirişlər göndərmək üçün necə istifadə edəcəyimizi anladıq.

Mən Windows Task Scheduler-in monitorinqi vəzifəsini təsvir etdim, lakin bu məqalədəki materialdan hava proqnozundan birjada birja kotirovkalarına qədər hər hansı bir bildiriş göndərmək üçün istifadə edə bilərsiniz, çünki. R çox sayda məlumat mənbəyinə qoşulmağa imkan verir.

Növbəti məqalədə bota əmrlərin və klaviaturanın necə əlavə ediləcəyini anlayacağıq ki, o, nəinki bildirişlər göndərə, həm də daha mürəkkəb hərəkətləri yerinə yetirə bilsin.

Mənbə: www.habr.com

Добавить комментарий