Біз телеграмма ботын R тілінде жазамыз (1-бөлім): Бот жасаңыз және оның көмегімен телеграммаға хабарламалар жіберіңіз.

Telegram аудиториясы күн сайын экспоненциалды түрде өсіп келеді, бұған мессенджердің ыңғайлылығы, арналардың, чаттардың болуы және, әрине, боттарды жасау мүмкіндігі ықпал етеді.

Боттарды тұтынушылармен байланысты автоматтандырудан бастап жеке тапсырмаларды басқаруға дейін мүлдем басқа мақсаттарда пайдалануға болады.

Негізінде телеграмманы бот арқылы кез келген операцияларды орындау үшін пайдалануға болады: деректерді жіберу немесе сұрау, серверде тапсырмаларды орындау, дерекқорға ақпаратты жинау, электрондық хаттарды жіберу және т.б.

Мен қалай жұмыс істеу керектігі туралы бірқатар мақалалар жазуды жоспарлап отырмын telegram ботының API, және қажеттіліктеріңізге сәйкес боттарды жазыңыз.

Біз телеграмма ботын R тілінде жазамыз (1-бөлім): Бот жасаңыз және оның көмегімен телеграммаға хабарламалар жіберіңіз.

Бұл бірінші мақалада біз телеграмма ботын қалай жасау керектігін және оны телеграммада хабарландыруларды жіберу үшін пайдалануды анықтаймыз.

Нәтижесінде бізде Windows Task Scheduler бағдарламасындағы барлық тапсырмалардың соңғы орындалу күйін тексеретін және олардың кез келгені орындалмаған жағдайда сізге хабарландыру жіберетін бот болады.

Бірақ бұл мақалалар топтамасының мақсаты нақты, тар тапсырма үшін бот жазуды үйрету емес, сізді жалпы пакеттің синтаксисімен таныстыру. telegram.bot, және өз мәселелеріңізді шешу үшін боттарды жазуға болатын код мысалдары.

Мазмұны

Егер сіз деректерді талдауға қызығушылық танытсаңыз, сізді мені қызықтыруы мүмкін жеделхат и YouTube арналар. Мазмұнның көп бөлігі R тіліне арналған.

  1. Telegram ботын құру
  2. R-де телеграмма ботымен жұмыс істеуге арналған пакетті орнату
  3. R-дан Telegram-ға хабарламалар жіберу
  4. Тапсырмаларды сканерлеуді орындау үшін кестені орнату
  5. қорытынды

Telegram ботын құру

Біріншіден, біз бот жасауымыз керек. Бұл арнайы бот арқылы жасалады БотӘке, бару байланыс және ботқа жазыңыз /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.

Ботқа «Эй бот» сияқты кез келген хабарды жіберіңіз. Қазіргі уақытта бұл сіздің ботпен сөйлесуіңіздің идентификаторын алу үшін қажет.

Енді 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()бізге бот жаңартуларын алуға мүмкіндік береді, яғни. оған жіберілген хабарламалар. Әдіс from_chat_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(), оған чат идентификаторын, хабар мәтінін және хабар мәтінін белгілеу түрін беру қажет. Белгілеу түрі Markdown немесе HTML болуы мүмкін және аргумент арқылы орнатылады parse_mode.

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

Белгілеуді пішімдеу негіздері:

  • Қалың шрифт * белгісімен бөлектеледі:
    • мысалы: *жирный шритф*
    • нәтиже: қалың шрифт
  • Куривтер астын сызу арқылы белгіленеді:
    • мысалы: _курсив_
    • нәтиже: курсив
  • Әдетте бағдарлама кодын бөлектеу үшін қолданылатын монокеңістік шрифті апострофтар арқылы көрсетіледі - `:
    • мысал: `бір кеңістіктік шрифт`
    • нәтиже: моноширинный шрифт

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 тапсырмаларын жоспарлау құралын тексеру және әдеттен тыс аяқталған тапсырмалар туралы хабарландыруларды жіберу

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() — тапсырмалардың атауларын бір жолға қосады және бөлгіш ретінде жол арнасын қояды, яғни. n.

Бізге бұл нәтижені телеграм арқылы жіберу ғана қалды.

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

Сонымен, қазіргі уақытта бот коды келесідей көрінеді:

Тапсырманы қарау бот коды

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

}

Жоғарыдағы мысалды пайдаланған кезде кодқа бот белгісін және чат идентификаторын ауыстырыңыз.

Тапсырмаларды сүзу шарттарын қосуға болады, мысалы, жүйелік тапсырмаларды қоспағанда, тек өзіңіз жасаған тапсырмаларды тексеру.

Сондай-ақ, әртүрлі параметрлерді бөлек конфигурация файлына қоюға және оған чат идентификаторы мен таңбалауышты сақтауға болады. Сіз конфигурацияны оқи аласыз, мысалы, буманы пайдаланып 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

пікір қалдыру