Nivîsandina botek telegramê bi R (beş 1): Afirandina botek û karanîna wê ji bo şandina peyaman di telegramê de

Temaşevanên Telegram her roj bi qatanî mezin dibe, ev ji hêla rehetiya peyamberê, hebûna kanalan, sohbetan, û bê guman jêhatîbûna çêkirina botan hêsan dibe.

Bot dikarin ji bo armancên bi tevahî cûda werin bikar anîn, ji otomatîkkirina danûstendinên bi xerîdarên xwe re heya birêvebirina karên xwe.

Di bingeh de, hûn dikarin telegramê bikar bînin da ku bi riya botekê ve her karûbaran bikin: daneyan bişînin an daxwaz bikin, peywiran li ser serverê bimeşînin, agahdarî li databasek berhev bikin, e-name bişînin, û hwd.

Ez plan dikim ku rêzek gotaran binivîsim ka meriv çawa pê re dixebite telegram bot API, û botan li gorî hewcedariyên we binivîsin.

Nivîsandina botek telegramê bi R (beş 1): Afirandina botek û karanîna wê ji bo şandina peyaman di telegramê de

Di vê gotara yekem de em ê fêr bibin ka meriv çawa botek telegramê biafirîne û wê bikar bîne da ku di telegramê de agahdariyan bişîne.

Wekî encamek, em ê botekek heye ku dê statûya pêkanîna paşîn a hemî peywiran di Bernameya Peywira Windows-ê de kontrol bike, û heke yek ji wan têk neçe, ji we re agahdariyan bişîne.

Lê mebesta vê rêze gotaran ne ew e ku hûn fêrî nivîsandina botek ji bo karekî taybetî, teng bikin, lê bi gelemperî we bi hevoksaziya pakêtê bidin nasîn. telegram.bot, û nimûneyên kodê yên ku hûn dikarin botan binivîsin da ku pirsgirêkên xwe çareser bikin.

Contains

Heke hûn bi analîzkirina daneyê re eleqedar dibin, dibe ku hûn bala min bikin têlxiram и youtube kanalên. Piraniya naverokê ji bo zimanê R hatiye veqetandin.

  1. Afirandina botek telegramê
  2. Sazkirina pakêtek ji bo xebata bi botek telegramê li R
  3. Ji R ji Telegram re peyaman dişîne
  4. Sazkirina bernameyek ji bo şopandina peywirê
  5. encamê

Afirandina botek telegramê

Pêşîn, em hewce ne ku botek çêbikin. Ev bi karanîna botek taybetî tête kirin Bototembela botota, biçe link û ji botê re binivîse /start.

Piştî ku hûn ê peyamek bi navnîşek fermanan bistînin:

Peyama ji 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

Ji bo afirandina botek nû, emrê bişînin /newbot.

BotFather dê ji we bipirse ku hûn nav û têketina botê binivîsin.

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

Hûn dikarin her navekî binivîsin, lê têketin divê bi dawî bibe bot.

Ger we her tişt rast kir, hûn ê peyama jêrîn bistînin:

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

Dûv re hûn ê hewceyê nîşana API-ya wergirtî bin, di mînaka min de ew e 123456789:abcdefghijklmnopqrstuvwxyz.

Di vê gavê de, karê amadekariyê ji bo çêkirina botê qediya.

Sazkirina pakêtek ji bo xebata bi botek telegramê li R

Ez texmîn dikim ku we berê zimanê R û hawîrdora pêşkeftina RStudio sazkirî ye. Ger ev ne wusa be, wê hingê hûn dikarin li vê binêrin tutorial video li ser çawa ji bo sazkirina wan.

Ji bo ku bi Telegram Bot API re bixebitin em ê pakêta R bikar bînin telegram.bot.

Sazkirina pakêtan di R de bi karanîna fonksiyonê tête kirin install.packages(), ji ber vê yekê ji bo sazkirina pakêta ku em hewce ne, emrê bikar bînin install.packages("telegram.bot").

Hûn dikarin di derbarê sazkirina pakêtên cihêreng de bêtir fêr bibin vê vîdyoyê.

Piştî sazkirina pakêtê, hûn hewce ne ku wê ve girêdin:

library(telegram.bot)

Ji R ji Telegram re peyaman dişîne

Bota ku we afirandiye dikare di Telegram de bi karanîna têketina ku di dema afirandinê de hatî destnîşan kirin were dîtin, di doza min de ew e @my_test_bot.

Ji botê re peyamek bişînin, wekî "Hey bot." Vê gavê, ji bo ku em nasnameya sohbeta we ya bi botê re bigirin, hewcedariya me bi vê yekê heye.

Naha em koda jêrîn li R dinivîsin.

library(telegram.bot)

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

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

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

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

Di destpêkê de, em mînakek bota xwe bi fonksiyonê diafirînin Bot(), tokena ku berê hatî wergirtin divê wekî arguman tê de derbas bibe.

Ew pratîka çêtirîn nayê hesibandin ku token di kodê de hilîne, ji ber vê yekê hûn dikarin wê di guhêrbarek jîngehê de hilînin û jê bixwînin. Bi xwerû di pakêtê de telegram.bot Piştgiriya ji bo guhêrbarên jîngehê yên navên jêrîn hatine bicîh kirin: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Di şona ИМЯ_ВАШЕГО_БОТА navê ku we dema afirandinê diyar kir biguhezîne, di rewşa min de ew ê guhêrbar be R_TELEGRAM_BOT_My Test Bot.

Gelek awayên afirandina guhêrbarek jîngehê hene; Ez ê ji we re li ser ya herî gerdûnî û cross-platformê bibêjim. Di pelrêça mala xwe de biafirînin (hûn dikarin wê bi karanîna fermanê bibînin path.expand("~")) dosyaya nivîsê ya bi navê .Renviron. Her weha hûn dikarin vê yekê bi karanîna fermanê bikin file.edit(path.expand(file.path("~", ".Renviron"))).

Û rêza jêrîn lê zêde bike.

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

Dûv re, hûn dikarin bi karanîna fonksiyonê nîşana ku di guhêrbara jîngehê de hatî hilanîn bikar bînin bot_token(), yanî welî evê:

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

Rêbaz getUpdates()destûrê dide me ku em nûvekirinên botê bistînin, ango. peyamên ku jê re hatine şandin. Awa from_chat_id(), destûrê dide te ku hûn nasnameya sohbeta ku jê re peyam hatiye şandin bistînin. Pêdiviya me bi vê nasnameyê heye ku ji botê peyaman bişînin.

Ji bilî id chatê ji object ku bi rêbazê hatî wergirtin getUpdates() hûn jî hin agahiyên din ên kêrhatî distînin. Mînakî, agahdariya li ser bikarhênerê ku peyam şandiye.

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"

Ji ber vê yekê, di vê qonaxê de her tiştê me heye ku em ji botekek ji Telegram re peyamek bişînin. Ka em rêbazê bikar bînin sendMessage(), ku hûn hewce ne ku nasnameya chatê, metna peyamê, û celebê nîşankirina nivîsa peyamê derbas bikin. Cûreya nîşankirinê dikare Markdown an HTML be û ji hêla argumanê ve tête danîn parse_mode.

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

Bingehên formatkirina Markdown:

  • Tîpên stûr bi * tê ronî kirin:
    • nimûne: *жирный шритф*
    • netîce: tîpên stûr
  • Îtalîk bi jêrkêşan têne destnîşan kirin:
    • nimûne: _курсив_
    • netîce: îtalîk
  • Fontê monospace, ku bi gelemperî ji bo ronîkirina koda bernameyê tê bikar anîn, bi karanîna apostrofan tê destnîşan kirin - `:
    • mînak: `font monospace`
    • netîce: моноширинный шрифт

Bingehên formatkirina nîşankirina HTML:
Di HTML-ê de, hûn beşa nivîsê ya ku divê di etîketan de were ronî kirin, wekî mînak dipêçin <тег>текст</тег>.

  • <tag> - nîşana vekirinê
  • - etîketa girtinê

Etîketên nîşankirina HTML

  • <b> - tîpên stûr
    • nimûne: <b>жирный шрифт</b>
    • bandor tîpên stûr
  • <i> - îtalîk
    • nimûne: <i>курсив</i>
    • netîce: îtalîk
  • — моноширинный шрифт
    • mînak: моноширинный шрифт
    • netîce: моноширинный шрифт

Ji bilî nivîsê, hûn dikarin naveroka din bi karanîna rêbazên taybetî bişînin:

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

Ewan. ji bo nimûne bikaranîna rêbazê sendPhoto() hûn dikarin grafiyek ku wekî wêneyek ku we bi karanîna pakêtê afirandiye tomarkirî bişînin ggplot2.

Kontrolkirina Bernameya Peywiran a Windows-ê û şandina agahdariya li ser karên ku bi rengek ne normal bi dawî bûne

Ji bo ku hûn bi Windows Task Scheduler re bixebitin hûn hewce ne ku pakêtê saz bikin taskscheduleR, û ji bo rehetiya xebata bi daneyan re, pakêtê saz bikin dplyr.

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

Piştre, fonksiyonê bikar bînin taskscheduler_ls() em agahdariya li ser karan ji plansaziya xwe dixwazin. Bikaranîna fonksiyonê filter() ji pakêtê dplyr Em ji navnîşa peywiran ên ku bi serfirazî qediyane û statûya wan a paşîn 0 ye, û yên ku qet nehatine destpêkirin û statûya wan 267011, karên neçalak, û peywirên ku niha têne xebitandin derxistin.

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

Di objeyê de task Naha navnîşek peywirên ku têk çûne hene, divê em vê navnîşê ji Telegram re bişînin.

Ger em li her fermanê bi hûrgulî binêrin, wê hingê:

  • filter() - navnîşa karan li gorî şertên ku li jor hatine destnîşan kirin fîlter dike
  • select() - di tabloyê de bi navê peywiran tenê yek zevî dihêle
  • unique() - navên dubare radike
  • unlist() - stûna sifrê ya hilbijartî vediguherîne vektorek
  • paste0() - navên peywiran bi yek rêzê ve girêdide, û xêzek xêzek wekî veqetanker datîne, yanî. n.

Ya ku ji me re dimîne ev e ku em vê encamê bi telegramê bişînin.

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

Ji ber vê yekê, niha koda botê bi vî rengî xuya dike:

Koda botê ya vekolîna peywirê

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

}

Dema ku mînaka li jor bikar bînin, tokena xweya botê û nasnameya chatê xwe bixin şûna kodê.

Hûn dikarin şert û mercên fîlterkirina peywiran lê zêde bikin, mînakî, kontrolkirina tenê wan karên ku we afirandine, ji bilî yên pergalê.

Her weha hûn dikarin mîhengên cihêreng bixin nav pelek vesazkirinê ya cihê, û nasnameya chat û tokenê tê de hilînin. Hûn dikarin mîhengê bixwînin, mînakî, bi karanîna pakêtê configr.

Mînak ini config

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

Nimûneyek xwendina guhêrbarên ji mîhengek li 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

Sazkirina bernameyek ji bo şopandina peywirê

Pêvajoya sazkirina destpêkirina senaryoyan li ser nexşeyek bi hûrgulî di vê yekê de tête diyar kirin gotara. Li vir ez ê tenê gavên ku ji bo vê yekê divê werin şopandin vebêjim. Ger yek ji wan gavan ji we re ne diyar e, wê hingê serî li gotara ku min pê ve girêdanek daye.

Ka em bifikirin ku me koda xweya botê li pelek tomar kir check_bot.R. Ji bo ku ev pel bi rêkûpêk bixebite plansaz bike, van gavan bişopînin:

  1. Rêya peldanka ku R tê de di guhêrbara pergala Rê de hatî saz kirin binivîsin; di Windows-ê de, rê dê tiştek wusa be: C:Program FilesRR-4.0.2bin.
  2. Bi tenê yek rêzek pelek batê ya îcrakar biafirînin R CMD BATCH C:rscriptscheck_botcheck_bot.R. Diberdaxistin C:rscriptscheck_botcheck_bot.R bi riya tevahî ya pelê R-ya we.
  3. Dûv re, Windows Task Scheduler bikar bînin da ku nexşeyek destpêkirinê saz bikin, mînakî, her nîv saetê.

encamê

Di vê gotarê de, me fêhm kir ku meriv çawa botek biafirîne û wê bikar bîne da ku di telegramê de agahdariyên cihêreng bişîne.

Min peywira şopandina Bernameya Peywiran a Windows-ê diyar kir, lê hûn dikarin di vê gotarê de materyalê bikar bînin da ku ji pêşbîniya hewayê bigire heya nirxê pargîdaniyê li ser borsayê, ji ber ku ... R dihêle hûn bi hejmareke mezin ji çavkaniyên daneyê ve girêdayî bibin.

Di gotara din de, em ê fêr bibin ka meriv çawa ferman û klavyeyek li botê zêde dike da ku ew ne tenê agahdariyan bişîne, lê di heman demê de kiryarên tevlihevtir jî pêk bîne.

Source: www.habr.com

Add a comment