Kikọ bot telegram kan ni R (apakan 1): Ṣiṣẹda bot ati lilo rẹ lati firanṣẹ awọn ifiranṣẹ ni telegram

Awọn olugbo Telegram n dagba lọpọlọpọ lojoojumọ, eyi ni irọrun nipasẹ irọrun ti ojiṣẹ, wiwa awọn ikanni, awọn iwiregbe, ati dajudaju agbara lati ṣẹda awọn bot.

Bots le ṣee lo fun awọn idi ti o yatọ patapata, lati adaṣe adaṣe pẹlu awọn alabara rẹ si iṣakoso awọn iṣẹ ṣiṣe tirẹ.

Ni pataki, o le lo telegram lati ṣe awọn iṣẹ eyikeyi nipasẹ bot: firanṣẹ tabi beere data, ṣiṣe awọn iṣẹ ṣiṣe lori olupin, gba alaye sinu ibi ipamọ data, firanṣẹ awọn imeeli, ati bẹbẹ lọ.

Mo gbero lati kọ lẹsẹsẹ awọn nkan lori bi a ṣe le ṣiṣẹ pẹlu telegram bot API, ati kọ awọn bot lati ba awọn aini rẹ ṣe.

Kikọ bot telegram kan ni R (apakan 1): Ṣiṣẹda bot ati lilo rẹ lati firanṣẹ awọn ifiranṣẹ ni telegram

Ninu nkan akọkọ yii a yoo ro bi o ṣe le ṣẹda bot telegram kan ati lo lati firanṣẹ awọn iwifunni ni telegram.

Bi abajade, a yoo ni bot kan ti yoo ṣayẹwo ipo ti ipaniyan ti o kẹhin ti gbogbo awọn iṣẹ-ṣiṣe ni Iṣeto Iṣẹ-ṣiṣe Windows, ati firanṣẹ awọn iwifunni ti eyikeyi ninu wọn ba kuna.

Ṣugbọn idi ti jara ti awọn nkan kii ṣe lati kọ ọ bi o ṣe le kọ bot fun iṣẹ kan pato, dín, ṣugbọn lati ṣafihan rẹ ni gbogbogbo si sintasi ti package telegram.bot, ati awọn apẹẹrẹ koodu pẹlu eyiti o le kọ awọn bot lati yanju awọn iṣoro tirẹ.

Awọn akoonu

Ti o ba nifẹ si itupalẹ data, o le nifẹ ninu mi telegram и youtube awọn ikanni. Pupọ julọ akoonu jẹ igbẹhin si ede R.

  1. Ṣiṣẹda telegram bot
  2. Fifi package kan fun ṣiṣẹ pẹlu bot telegram ni R
  3. Fifiranṣẹ awọn ifiranṣẹ lati R si Telegram
  4. Ṣiṣeto iṣeto fun ṣiṣe awọn ọlọjẹ iṣẹ ṣiṣe
  5. ipari

Ṣiṣẹda telegram bot

Ni akọkọ, a nilo lati ṣẹda bot kan. Eyi ni a ṣe nipa lilo bot pataki kan Bàbá Bàbá, lọ si ọna asopọ ki o si kọ si bot /start.

Lẹhin eyi iwọ yoo gba ifiranṣẹ kan pẹlu atokọ ti awọn aṣẹ:

Ifiranṣẹ lati 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

Lati ṣẹda bot tuntun, firanṣẹ aṣẹ naa /newbot.

BotFather yoo beere lọwọ rẹ lati tẹ orukọ bot ati buwolu wọle.

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

O le tẹ orukọ eyikeyi sii, ṣugbọn iwọle gbọdọ pari pẹlu bot.

Ti o ba ṣe ohun gbogbo ni deede, iwọ yoo gba ifiranṣẹ atẹle yii:

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

Nigbamii iwọ yoo nilo aami API ti o gba, ninu apẹẹrẹ mi o jẹ 123456789:abcdefghijklmnopqrstuvwxyz.

Ni ipele yii, iṣẹ igbaradi fun ṣiṣẹda bot ti pari.

Fifi package kan fun ṣiṣẹ pẹlu bot telegram ni R

Mo ro pe o ti ni ede R tẹlẹ ati agbegbe idagbasoke RStudio ti fi sori ẹrọ. Ti eyi ko ba jẹ ọran, lẹhinna o le wo eyi Tutorial fidio lori bi o ṣe le fi wọn sii.

Lati ṣiṣẹ pẹlu Telegram Bot API a yoo lo package R telegram.bot.

Fifi awọn idii ni R ṣe ni lilo iṣẹ naa install.packages(), nitorinaa lati fi sori ẹrọ package ti a nilo, lo aṣẹ naa install.packages("telegram.bot").

O le ni imọ siwaju sii nipa fifi sori ẹrọ orisirisi awọn idii lati fidio yi.

Lẹhin fifi package sii, o nilo lati sopọ:

library(telegram.bot)

Fifiranṣẹ awọn ifiranṣẹ lati R si Telegram

Bot ti o ṣẹda ni a le rii ni Telegram ni lilo iwọle ti o ṣalaye lakoko ẹda, ninu ọran mi o jẹ @my_test_bot.

Firanṣẹ bot eyikeyi ifiranṣẹ, gẹgẹbi "Hey bot." Ni akoko yii, a nilo eyi lati le gba id ti iwiregbe rẹ pẹlu bot.

Bayi a kọ koodu atẹle ni R.

library(telegram.bot)

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

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

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

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

Ni ibẹrẹ, a ṣẹda apẹẹrẹ ti bot wa pẹlu iṣẹ naa Bot(), ami ti a ti gba tẹlẹ gbọdọ wa ni gbigbe sinu rẹ gẹgẹbi ariyanjiyan.

Ko ṣe akiyesi iṣe ti o dara julọ lati tọju ami-ami sinu koodu, nitorinaa o le fipamọ sinu oniyipada agbegbe ki o ka lati inu rẹ. Nipa aiyipada ni package telegram.bot Atilẹyin fun awọn oniyipada ayika ti awọn orukọ wọnyi ti ni imuse: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Dipo ИМЯ_ВАШЕГО_БОТА paarọ orukọ ti o ṣalaye nigbati o ṣẹda, ninu ọran mi yoo jẹ oniyipada R_TELEGRAM_BOT_My Test Bot.

Awọn ọna pupọ lo wa lati ṣẹda oniyipada ayika; Emi yoo sọ fun ọ nipa gbogbo agbaye julọ ati iru-ọna agbelebu. Ṣẹda ninu ilana ile rẹ (o le rii ni lilo aṣẹ naa path.expand("~")) faili ọrọ pẹlu orukọ .Renviron. O tun le ṣe eyi nipa lilo aṣẹ naa file.edit(path.expand(file.path("~", ".Renviron"))).

Ki o si fi awọn wọnyi ila si o.

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

Nigbamii, o le lo ami-ami ti o fipamọ ni oniyipada ayika nipa lilo iṣẹ naa bot_token(), i.e. bi eleyi:

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

Ọna getUpdates()gba wa laaye lati gba awọn imudojuiwọn bot, i.e. awọn ifiranṣẹ ti o ranṣẹ si i. Ọna from_chat_id(), gba ọ laaye lati gba ID ti iwiregbe lati eyiti o ti fi ifiranṣẹ ranṣẹ. A nilo ID yii lati firanṣẹ awọn ifiranṣẹ lati bot.

Ni afikun si id iwiregbe lati ohun ti o gba nipasẹ ọna getUpdates() o tun gba diẹ ninu awọn alaye to wulo miiran. Fun apẹẹrẹ, alaye nipa olumulo ti o fi ifiranṣẹ ranṣẹ.

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"

Nitorinaa, ni ipele yii a ti ni ohun gbogbo ti a nilo lati fi ifiranṣẹ ranṣẹ lati bot kan si Telegram. Jẹ ki a lo ọna naa sendMessage(), sinu eyiti o nilo lati kọja ID iwiregbe, ọrọ ifiranṣẹ, ati iru ifọrọranṣẹ. Iru isamisi le jẹ Markdown tabi HTML ati pe a ṣeto nipasẹ ariyanjiyan parse_mode.

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

Awọn ipilẹ ọna kika aami:

  • Fọọmu alaigboya jẹ afihan pẹlu *:
    • apẹẹrẹ: *жирный шритф*
    • abajade: bold font
  • Awọn italics jẹ itọkasi nipasẹ awọn abẹlẹ:
    • apẹẹrẹ: _курсив_
    • abajade: ẹsẹ-iwe
  • Fonti monospace, eyiti a maa n lo lati ṣe afihan koodu eto, jẹ pato nipa lilo awọn apostrophes - `:
    • apẹẹrẹ: `monospace font`
    • abajade: моноширинный шрифт

Awọn ipilẹ ti ọna kika isamisi HTML:
Ni HTML, o fi ipari si apakan ọrọ ti o nilo lati ṣe afihan ni awọn afi, apẹẹrẹ <тег>текст</тег>.

  • <tag> - tag ṣiṣi
  • - titi tag

HTML siṣamisi afi

  • <b> - bold font
    • apẹẹrẹ: <b>жирный шрифт</b>
    • ipa bold font
  • <i> - italics
    • apẹẹrẹ: <i>курсив</i>
    • abajade: ẹsẹ-iwe
  • — моноширинный шрифт
    • apẹẹrẹ: моноширинный шрифт
    • abajade: моноширинный шрифт

Ni afikun si ọrọ, o le fi akoonu miiran ranṣẹ nipa lilo awọn ọna pataki:

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

Awon. fun apẹẹrẹ lilo ọna sendPhoto() o le fi aworan kan ti o fipamọ bi aworan ti o ṣẹda nipa lilo package ggplot2.

Ṣiṣayẹwo Iṣeto Iṣẹ-ṣiṣe Windows ati fifiranṣẹ awọn ifitonileti nipa awọn iṣẹ ṣiṣe ti o ti pari ni aijẹ deede

Lati ṣiṣẹ pẹlu Iṣeto Iṣẹ-ṣiṣe Windows o nilo lati fi sori ẹrọ package naa taskscheduleR, ati fun wewewe ti ṣiṣẹ pẹlu data, fi sori ẹrọ ni package dplyr.

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

Nigbamii, lilo iṣẹ naa taskscheduler_ls() a beere alaye nipa awọn iṣẹ ṣiṣe lati ọdọ oluṣeto wa. Lilo iṣẹ naa filter() lati package dplyr A yọ kuro ninu atokọ awọn iṣẹ ṣiṣe ti o pari ni aṣeyọri ati pe o ni ipo abajade ti o kẹhin ti 0, ati awọn ti ko ṣe ifilọlẹ rara ati pe o ni ipo 267011, awọn iṣẹ alaabo, ati awọn iṣẹ ṣiṣe lọwọlọwọ.

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

Ninu nkan naa task A ni atokọ ti awọn iṣẹ ṣiṣe ti o kuna, a nilo lati fi atokọ yii ranṣẹ si Telegram.

Ti a ba wo aṣẹ kọọkan ni awọn alaye diẹ sii, lẹhinna:

  • filter() - Ajọ awọn akojọ ti awọn iṣẹ-ṣiṣe ni ibamu si awọn ipo ti salaye loke
  • select() - fi aaye kan silẹ nikan ni tabili pẹlu orukọ awọn iṣẹ-ṣiṣe
  • unique() - yọ awọn orukọ ẹda
  • unlist() - iyipada iwe tabili ti o yan si fekito kan
  • paste0() - so awọn orukọ ti awọn iṣẹ-ṣiṣe sinu ọkan ila, ati ki o fi kikọ sii ila bi a separator, i.e. n.

Gbogbo ohun ti o ku fun wa ni lati firanṣẹ esi yii nipasẹ teligram.

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

Nitorinaa, ni akoko yii koodu bot dabi eyi:

Atunwo bot koodu iṣẹ-ṣiṣe

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

}

Nigbati o ba nlo apẹẹrẹ loke, rọpo aami bot rẹ ati ID iwiregbe rẹ sinu koodu naa.

O le ṣafikun awọn ipo fun sisẹ awọn iṣẹ ṣiṣe, fun apẹẹrẹ, ṣayẹwo awọn iṣẹ ṣiṣe ti o ṣẹda nikan, laisi awọn eto.

O tun le fi awọn eto lọpọlọpọ sinu faili atunto lọtọ, ki o tọju id iwiregbe ati ami-ami ninu rẹ. O le ka atunto, fun apẹẹrẹ, lilo package configr.

Apeere ini config

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

Apeere ti awọn oniyipada kika lati atunto ni 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

Ṣiṣeto iṣeto fun ṣiṣe awọn ọlọjẹ iṣẹ ṣiṣe

Ilana ti iṣeto ifilọlẹ awọn iwe afọwọkọ lori iṣeto ni a ṣe apejuwe ni awọn alaye diẹ sii ni eyi article. Nibi Emi yoo ṣe apejuwe awọn igbesẹ nikan ti o nilo lati tẹle fun eyi. Ti eyikeyi awọn igbesẹ naa ko ba han ọ, lẹhinna tọka si nkan ti Mo pese ọna asopọ kan si.

Jẹ ki a ro pe a fipamọ koodu bot wa si faili kan check_bot.R. Lati ṣeto faili yii lati ṣiṣẹ nigbagbogbo, tẹle awọn igbesẹ wọnyi:

  1. Kọ ọna si folda ninu eyiti a fi R sori ẹrọ ni iyipada ọna ọna; ni Windows, ọna naa yoo jẹ nkan bii eyi: C:Program FilesRR-4.0.2bin.
  2. Ṣẹda faili adan ti o le ṣiṣẹ pẹlu laini kan R CMD BATCH C:rscriptscheck_botcheck_bot.R. Rọpo C:rscriptscheck_botcheck_bot.R si ọna kikun si faili R rẹ.
  3. Nigbamii, lo Iṣeto Iṣẹ-ṣiṣe Windows lati ṣeto iṣeto ifilọlẹ kan, fun apẹẹrẹ, ni gbogbo idaji wakati.

ipari

Ninu nkan yii, a rii bi o ṣe le ṣẹda bot ati lo lati firanṣẹ awọn iwifunni lọpọlọpọ ni teligram.

Mo ṣe apejuwe iṣẹ-ṣiṣe ti mimojuto Alakoso Iṣẹ-ṣiṣe Windows, ṣugbọn o le lo awọn ohun elo ti o wa ninu nkan yii lati firanṣẹ awọn iwifunni eyikeyi, lati oju ojo oju ojo si awọn idiyele ọja lori paṣipaarọ ọja, nitori R gba ọ laaye lati sopọ si nọmba nla ti awọn orisun data.

Ninu nkan ti o tẹle, a yoo ro bi o ṣe le ṣafikun awọn aṣẹ ati bọtini itẹwe si bot ki o ko le firanṣẹ awọn iwifunni nikan, ṣugbọn tun ṣe awọn iṣe eka diẹ sii.

orisun: www.habr.com

Fi ọrọìwòye kun