R-д телеграм бот бичих (1-р хэсэг): Бот үүсгэж, телеграм дээр мессеж илгээхэд ашиглах.

Telegram-ийн үзэгчид өдөр бүр өсөн нэмэгдэж байгаа бөгөөд энэ нь мессенжерийн тав тухтай байдал, суваг, чат, мэдээжийн хэрэг бот үүсгэх чадвар зэрэгт нөлөөлж байна.

Ботуудыг үйлчлүүлэгчидтэйгээ харилцах харилцааг автоматжуулахаас эхлээд өөрийн даалгаврыг удирдах хүртэл огт өөр зорилгоор ашиглаж болно.

Үндсэндээ та телеграммыг ашиглан роботоор дамжуулан аливаа үйлдлийг гүйцэтгэх боломжтой: өгөгдөл илгээх, хүсэх, сервер дээр даалгавар гүйцэтгэх, мэдээллийн санд мэдээлэл цуглуулах, имэйл илгээх гэх мэт.

Би түүнтэй хэрхэн ажиллах талаар цуврал нийтлэл бичихээр төлөвлөж байна телеграм ботын API, мөн өөрийн хэрэгцээнд нийцүүлэн бот бичээрэй.

R-д телеграм бот бичих (1-р хэсэг): Бот үүсгэж, телеграм дээр мессеж илгээхэд ашиглах.

Энэ эхний өгүүллээр бид телеграмм ботыг хэрхэн үүсгэж, телеграм дээр мэдэгдэл илгээхэд ашиглах талаар олж мэдэх болно.

Үүний үр дүнд бид Windows Task Scheduler дахь бүх даалгаврын сүүлчийн гүйцэтгэлийн статусыг шалгаж, тэдгээрийн аль нэг нь амжилтгүй болсон тохиолдолд танд мэдэгдэл илгээх роботтой болно.

Гэхдээ энэ цуврал нийтлэлийн зорилго нь тодорхой, нарийн даалгаварт зориулж бот хэрхэн бичихийг заах биш, харин багцын синтаксийг ерөнхийд нь танилцуулах явдал юм. telegram.bot, мөн өөрийн асуудлыг шийдэхийн тулд бот бичиж болох кодын жишээнүүд.

Агуулга

Хэрэв та өгөгдлийн шинжилгээг сонирхож байгаа бол миний мэдээллийг сонирхож магадгүй юм цахилгаан мэдээ и YouTube-ийн сувгууд. Ихэнх контент нь R хэлэнд зориулагдсан.

  1. Телеграм бот үүсгэх
  2. R-д телеграм боттой ажиллах багц суулгаж байна
  3. R-ээс Telegram руу мессеж илгээх
  4. Даалгаврын скан хийх хуваарийг тохируулах
  5. дүгнэлт

Телеграм бот үүсгэх

Эхлээд бид робот үүсгэх хэрэгтэй. Үүнийг тусгай робот ашиглан хийдэг Бот Эцэг, руу явах холбоос болон бот руу бичнэ үү /start.

Үүний дараа та тушаалуудын жагсаалт бүхий мессеж хүлээн авах болно:

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

Шинэ робот үүсгэхийн тулд командыг илгээнэ үү /newbot.

BotFather танаас ботын нэр болон нэвтрэхийг хүсэх болно.

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

Та ямар ч нэр оруулж болно, гэхдээ нэвтрэх нь төгсгөлд байх ёстой bot.

Хэрэв та бүх зүйлийг зөв хийсэн бол дараах мессежийг хүлээн авах болно.

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

Дараа нь танд хүлээн авсан API токен хэрэгтэй болно, миний жишээнд энэ нь байна 123456789:abcdefghijklmnopqrstuvwxyz.

Энэ үе шатанд робот үүсгэх бэлтгэл ажил дуусч байна.

R-д телеграм боттой ажиллах багц суулгаж байна

Та аль хэдийн R хэл болон RStudio хөгжүүлэлтийн орчинг суулгасан байна гэж би бодож байна. Хэрэв тийм биш бол та үүнийг харж болно видео хичээл тэдгээрийг хэрхэн суулгах талаар.

Telegram Bot API-тай ажиллахын тулд бид R багцыг ашиглах болно telegram.bot.

R-д багцуудыг суулгах нь функцийг ашиглан хийгддэг install.packages(), тиймээс бидэнд хэрэгтэй багцыг суулгахын тулд тушаалыг ашиглана уу install.packages("telegram.bot").

Та янз бүрийн багцуудыг суулгах талаар илүү ихийг мэдэх боломжтой энэ видео.

Багцыг суулгасны дараа та үүнийг холбох хэрэгтэй:

library(telegram.bot)

R-ээс Telegram руу мессеж илгээх

Таны үүсгэсэн ботыг үүсгэх явцад заасан нэвтрэлтийг ашиглан Telegram-аас олж болно, миний хувьд тийм @my_test_bot.

Бот руу "Хөөе bot" гэх мэт ямар ч мессеж илгээнэ үү. Одоогоор бидэнд боттой чатын id-г авахын тулд энэ хэрэгтэй байна.

Одоо бид дараах кодыг R дээр бичнэ.

library(telegram.bot)

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

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

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

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

Эхэндээ бид функцтэй өөрийн роботын жишээг үүсгэдэг Bot(), өмнө нь хүлээн авсан токеныг аргумент болгон оруулах ёстой.

Токеныг кодонд хадгалах нь хамгийн сайн туршлага гэж тооцогддоггүй тул та үүнийг орчны хувьсагчд хадгалж, түүнээс уншиж болно. Анхдагчаар багцад telegram.bot Дараах нэртэй орчны хувьсагчдад зориулсан дэмжлэгийг хэрэгжүүлэв. R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Оронд нь ИМЯ_ВАШЕГО_БОТА үүсгэх үед заасан нэрээ орлуулна уу, миний хувьд энэ нь хувьсагч байх болно R_TELEGRAM_BOT_My Test Bot.

Хүрээлэн буй орчны хувьсагчийг бий болгох хэд хэдэн арга байдаг бөгөөд би танд хамгийн түгээмэл бөгөөд платформ хоорондын нэгийг хэлэх болно. Гэрийн лавлахдаа үүсгэнэ үү (та үүнийг командыг ашиглан олох боломжтой path.expand("~")) нэртэй текст файл .Ренвирон. Та мөн командыг ашиглан үүнийг хийж болно file.edit(path.expand(file.path("~", ".Renviron"))).

Дараах мөрийг нэмж оруулаарай.

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

Дараа нь та функцийг ашиглан орчны хувьсагчд хадгалагдсан токеныг ашиглаж болно bot_token(), өөрөөр хэлбэл үүн шиг:

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

арга getUpdates()бидэнд bot шинэчлэлтүүдийг авах боломжийг олгодог, i.e. түүнд илгээсэн мессежүүд. Арга from_chat_id(), мессеж илгээсэн чатын ID-г авах боломжийг танд олгоно. Ботоос мессеж илгээхийн тулд бидэнд энэ ID хэрэгтэй.

Арга замаар олж авсан объектоос чатын id-аас гадна getUpdates() Та бас бусад хэрэгтэй мэдээлэл авах болно. Жишээлбэл, мессеж илгээсэн хэрэглэгчийн тухай мэдээлэл.

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"

Тиймээс, энэ үе шатанд бид Telegram руу ботоос мессеж илгээхэд шаардлагатай бүх зүйл аль хэдийн бэлэн болсон байна. Энэ аргыг хэрэглэцгээе sendMessage(), үүнд та чатын ID, мессежийн текст болон мессежийн текстийн тэмдэглэгээний төрлийг оруулах шаардлагатай. Тэмдэглэгээний төрөл нь Markdown эсвэл HTML байж болох ба аргументаар тохируулагдана parse_mode.

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

Тэмдэглэгээний форматын үндэс:

  • Тод фонтыг *-аар тодруулна:
    • жишээ нь: *жирный шритф*
    • үр дүн: тод фонт
  • Налуу үсгийг доогуур зураасаар тэмдэглэнэ:
    • жишээ нь: _курсив_
    • үр дүн: налуу
  • Хөтөлбөрийн кодыг тодруулахад ихэвчлэн ашигладаг monospace фонтыг таслах тэмдэг ашиглан зааж өгдөг - `:
    • жишээ: `monspace font`
    • үр дүн: моноширинный шрифт

HTML тэмдэглэгээг форматлах үндэс:
HTML хэл дээр та текстийн тэмдэглэгээг тэмдэглэх шаардлагатай хэсгийг боож өгнө, жишээ нь <тег>текст</тег>.

  • <tag> - нээх таг
  • - хаалтын шошго

HTML тэмдэглэгээний шошгууд

  • <b> - тод фонт
    • жишээ нь: <b>жирный шрифт</b>
    • үр нөлөө тод фонт
  • <i> - налуу
    • жишээ нь: <i>курсив</i>
    • үр дүн: налуу
  • — моноширинный шрифт
    • жишээ: моноширинный шрифт
    • үр дүн: моноширинный шрифт

Текстээс гадна та тусгай аргуудыг ашиглан бусад контентыг илгээж болно.

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

Тэдгээр. жишээ нь аргыг ашиглах sendPhoto() Та багцыг ашиглан үүсгэсэн графикаа зураг хэлбэрээр хадгалах боломжтой ggplot2.

Windows Task Scheduler-г шалгаж, хэвийн бусаар дуусгавар болсон ажлуудын талаар мэдэгдэл илгээж байна

Windows Task Scheduler-тэй ажиллахын тулд багцыг суулгах хэрэгтэй taskscheduleR, өгөгдөлтэй ажиллахад хялбар болгохын тулд багцыг суулгана уу dplyr.

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

Дараа нь функцийг ашиглана уу taskscheduler_ls() Бид төлөвлөгчөөсөө даалгаврын талаарх мэдээллийг авахыг хүсдэг. Функцийг ашиглах filter() багцаас dplyr Амжилттай дууссан, сүүлийн үр дүн нь 0, хэзээ ч эхлүүлээгүй, 267011 статустай, идэвхгүй болсон ажлууд болон одоо ажиллаж байгаа ажлуудыг бид жагсаалтаас хасдаг.

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

Объект дотор task Бидэнд амжилтгүй болсон ажлуудын жагсаалт байгаа тул бид энэ жагсаалтыг Telegram руу илгээх хэрэгтэй.

Хэрэв бид тушаал бүрийг илүү нарийвчлан авч үзвэл:

  • filter() — дээр дурдсан нөхцлийн дагуу даалгаврын жагсаалтыг шүүнэ
  • select() - даалгаврын нэр бүхий хүснэгтэд зөвхөн нэг талбарыг үлдээнэ
  • unique() - давхардсан нэрийг устгана
  • unlist() — сонгосон хүснэгтийн баганыг вектор болгон хувиргана
  • paste0() — даалгаврын нэрийг нэг мөрөнд холбож, шугамын тэжээлийг тусгаарлагч болгон байрлуулна, i.e. n.

Бидний хувьд энэ үр дүнг телеграмаар илгээх л үлдлээ.

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

Тиймээс, одоогоор bot код дараах байдалтай байна.

Даалгаврын хяналтын ботын код

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

}

Дээрх жишээг ашиглахдаа код руу өөрийн робот токен болон чат ID-аа орлуулна уу.

Та даалгавруудыг шүүх нөхцөлийг нэмж болно, жишээлбэл, системийн даалгаврыг эс тооцвол зөвхөн өөрийн үүсгэсэн ажлуудыг шалгах боломжтой.

Та мөн янз бүрийн тохиргоог тусдаа тохиргооны файлд хийж, чатын ID болон жетоныг хадгалах боломжтой. Та багцыг ашиглан тохиргоог уншиж болно configr.

ini тохиргооны жишээ

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

R дээрх тохиргооноос хувьсагчдыг унших жишээ

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

Даалгаврын скан хийх хуваарийг тохируулах

Хуваарийн дагуу скриптийг эхлүүлэх үйл явцыг энд илүү дэлгэрэнгүй тайлбарласан болно нийтлэл. Энд би зөвхөн үүний тулд хийх ёстой алхмуудыг тайлбарлах болно. Хэрэв алхмуудын аль нэг нь танд тодорхойгүй байвал миний холбоосыг оруулсан нийтлэлийг үзнэ үү.

Бид бот кодоо файлд хадгалсан гэж бодъё check_bot.R. Энэ файлыг тогтмол ажиллуулахын тулд дараах алхмуудыг дагана уу:

  1. Path системийн хувьсагч дээр R суулгасан хавтасны замыг бичнэ үү; Windows дээр зам нь иймэрхүү байх болно. C:Program FilesRR-4.0.2bin.
  2. Зөвхөн нэг мөртэй ажиллах боломжтой bat файл үүсгэ R CMD BATCH C:rscriptscheck_botcheck_bot.R. Солих C:rscriptscheck_botcheck_bot.R таны R файлын бүрэн зам руу орно.
  3. Дараа нь Windows Task Scheduler ашиглан эхлүүлэх хуваарийг, жишээлбэл, хагас цаг тутамд тохируулна уу.

дүгнэлт

Энэ нийтлэлд бид ботыг хэрхэн үүсгэж, телеграм дээр янз бүрийн мэдэгдэл илгээхэд ашиглах талаар олж мэдсэн.

Би Windows Task Scheduler-д хяналт тавих даалгаврыг тайлбарласан боловч та энэ нийтлэл дэх материалыг ашиглан цаг агаарын мэдээнээс эхлээд хөрөнгийн бирж дээрх хувьцааны ханш хүртэл аливаа мэдэгдэл илгээх боломжтой. R нь асар олон тооны мэдээллийн эх сурвалжтай холбогдох боломжийг олгодог.

Дараагийн өгүүллээр бид бот руу команд, гарыг хэрхэн нэмэх талаар олж мэдэх болно, ингэснээр энэ нь мэдэгдэл илгээхээс гадна илүү төвөгтэй үйлдлүүдийг хийх боломжтой болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх