Rydyn ni'n ysgrifennu bot telegram yn yr iaith R (rhan 1): Creu bot ac anfon negeseuon i telegram gan ei ddefnyddio

Mae'r gynulleidfa telegram yn tyfu'n esbonyddol bob dydd, mae hyn yn cael ei hwyluso gan gyfleustra'r negesydd, argaeledd sianeli, sgyrsiau, ac wrth gwrs y gallu i greu bots.

Gellir defnyddio bots at amrywiaeth eang o ddibenion, o awtomeiddio cyfathrebu Γ’'ch cwsmeriaid i reoli eich tasgau eich hun.

Mewn gwirionedd, trwy'r bot, gallwch ddefnyddio telegram i gyflawni unrhyw weithrediad: anfon neu ofyn am ddata, rhedeg tasgau ar y gweinydd, casglu gwybodaeth mewn cronfa ddata, anfon e-byst, ac ati.

Rwy'n bwriadu ysgrifennu cyfres o erthyglau ar sut i weithio gydag R yn R. telegram bot API, ac ysgrifennu bots ar gyfer eich anghenion.

Rydyn ni'n ysgrifennu bot telegram yn yr iaith R (rhan 1): Creu bot ac anfon negeseuon i telegram gan ei ddefnyddio

Yn yr erthygl gyntaf hon, byddwn yn darganfod sut i greu bot telegram ac anfon hysbysiadau i telegram gan ei ddefnyddio.

O ganlyniad, bydd gennym bot a fydd yn gwirio statws cyflawniad olaf yr holl dasgau yn y Windows Task Scheduler, ac yn anfon hysbysiadau atoch os bydd unrhyw fethiant.

Ond nid pwrpas y gyfres hon o erthyglau yw eich dysgu sut i ysgrifennu bot ar gyfer tasg benodol, gyfyng, ond yn hytrach eich cyflwyno i gystrawen y pecyn yn gyffredinol. telegram.bot, ac enghreifftiau cod y gallwch chi ysgrifennu bots Γ’ nhw i ddatrys eich problemau eich hun.

Cynnwys

Os oes gennych ddiddordeb mewn dadansoddi data, efallai y bydd gennych ddiddordeb yn fy telegram ΠΈ youtube sianeli. Mae'r rhan fwyaf o'r cynnwys wedi'i neilltuo i'r iaith R.

  1. Creu bot telegram
  2. Gosod pecyn ar gyfer gweithio gyda bot telegram ar R
  3. Anfon negeseuon o R i Telegram
  4. Ffurfweddu amserlen lansio'r sgan tasg
  5. Casgliad

Creu bot telegram

Yn gyntaf, mae angen i ni greu bot. Gwneir hyn gan ddefnyddio bot arbennig Tad Bot, mynd i cyswllt ac ysgrifenu at y bot /start.

Yna byddwch yn derbyn neges gyda rhestr o orchmynion:

Neges gan 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

I greu bot newydd, anfonwch y gorchymyn /newbot.

Bydd BotFather yn gofyn ichi nodi enw a mewngofnodi'r bot.

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

Gallwch nodi enw mympwyol, a rhaid i'r mewngofnodi ddod i ben gyda bot.

Os gwnaethoch bopeth yn gywir, byddwch yn derbyn y neges ganlynol:

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

Nesaf, bydd angen y tocyn API a dderbyniwyd arnoch, yn fy enghraifft i ydyw 123456789:abcdefghijklmnopqrstuvwxyz.

Ar y cam hwn, mae'r gwaith paratoi ar gyfer creu'r bot wedi'i gwblhau.

Gosod pecyn ar gyfer gweithio gyda bot telegram ar R

Rwy'n cymryd bod yr iaith R wedi'i gosod yn barod a'r amgylchedd datblygu RStudio. Os nad yw hyn yn wir, yna gallwch edrych ar hyn tiwtorial fideo ar sut i'w gosod.

I weithio gyda'r Telegram Bot API, byddwn yn defnyddio'r pecyn R telegram.bot.

Mae gosod pecynnau yn R yn cael ei wneud gan y swyddogaeth install.packages(), felly i osod y pecyn sydd ei angen arnom, defnyddiwch y gorchymyn install.packages("telegram.bot").

Am ragor o wybodaeth am osod pecynnau amrywiol, gweler y fideo hwn.

Ar Γ΄l gosod y pecyn, mae angen i chi ei gysylltu:

library(telegram.bot)

Anfon negeseuon o R i Telegram

Gellir dod o hyd i'r bot a grΓ«wyd gennych yn Telegram gan ddefnyddio'r mewngofnodi a nodwyd yn ystod y creu, yn fy achos i @my_test_bot.

Anfonwch unrhyw neges i'r bot, fel "Hi bot". Ar hyn o bryd, mae angen hwn arnom er mwyn cael id eich sgwrs gyda'r bot.

Nawr yn R rydym yn ysgrifennu'r cod canlynol.

library(telegram.bot)

# создаём экзСмпляр Π±ΠΎΡ‚Π°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΎΡ‚Π΅
print(bot$getMe())

# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ обновлСния Π±ΠΎΡ‚Π°, Ρ‚.Π΅. список ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ сообщСний
updates <- bot$getUpdates()

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π°Ρ‚Π°
# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄ запросом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΡ‚Ρƒ сообщСниС
chat_id <- updates[[1L]]$from_chat_id()

I ddechrau, rydyn ni'n creu enghraifft o'n bot gyda'r swyddogaeth Bot(), fel dadl, rhaid i chi drosglwyddo'r tocyn a dderbyniwyd yn flaenorol iddo.

Ystyrir bod storio'r tocyn mewn cod yn arfer gwael, felly gallwch ei storio mewn newidyn amgylchedd a'i ddarllen ohono. Yn ddiofyn yn y pecyn telegram.bot gweithredu cefnogaeth ar gyfer newidynnau amgylchedd o'r enw canlynol: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... Yn lle ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π rhodder yr enw a osodwyd gennych wrth greu, yn fy achos i, bydd yn newidyn R_TELEGRAM_BOT_My Test Bot.

Gallwch greu newidyn amgylchedd mewn sawl ffordd, byddaf yn siarad am y mwyaf cyffredinol a thraws-lwyfan. Creu yn eich cyfeiriadur cartref (gallwch ddod o hyd iddo gyda'r gorchymyn path.expand("~")) ffeil testun gyda'r enw .Renviron. Gallwch hefyd wneud hyn gyda'r gorchymyn file.edit(path.expand(file.path("~", ".Renviron"))).

Ac ychwanegwch y llinell ganlynol ato.

R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π=123456789:abcdefghijklmnopqrstuvwxyz

Yna gallwch chi ddefnyddio'r tocyn sydd wedi'i storio yn y newidyn amgylchedd gyda'r swyddogaeth bot_token(), h.y. fel hyn:

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

Dull getUpdates()yn ein galluogi i gael diweddariadau bot, h.y. negeseuon a anfonwyd ato. Dull from_chat_id(), yn eich galluogi i gael ID y sgwrs yr anfonwyd y neges ohoni. Mae angen y dynodwr hwn i anfon negeseuon o'r bot.

Yn ogystal Γ’'r ID sgwrsio o'r gwrthrych a dderbyniwyd gan y dull getUpdates() rydych chi'n cael rhywfaint o wybodaeth ddefnyddiol arall hefyd. Er enghraifft, gwybodaeth am y defnyddiwr a anfonodd y neges.

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"

Felly, ar hyn o bryd, mae gennym ni eisoes bopeth sydd ei angen i anfon neges o'r bot i telegram. Gadewch i ni ddefnyddio'r dull sendMessage(), y mae angen i chi basio ID sgwrs, testun neges, a math marcio testun y neges. Gall y math marcio fod yn Markdown neu HTML ac fe'i gosodir gan y ddadl parse_mode.

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния
bot$sendMessage(chat_id,
                text = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, *ΠΆΠΈΡ€Π½Ρ‹ΠΉ тСкст* _курсив_",
                parse_mode = "Markdown"
)

Hanfodion Fformatio Markdown:

  • Mae ffont trwm wedi'i nodi Γ’ *:
    • Enghraifft: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • canlyniad: sgript feiddgar
  • Rhoddir llythrennau italig gan danlinellu:
    • Enghraifft: _курсив_
    • canlyniad: italig
  • Mae'r ffont gofod sefydlog, a ddefnyddir fel arfer i amlygu cod rhaglen, yn cael ei nodi gan ddefnyddio collnodau - `:
    • enghraifft: `ffont monospace`
    • canlyniad: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Hanfodion fformatio marcio HTML:
Yn HTML, rydych chi'n lapio'r rhan o'r testun rydych chi am ei amlygu mewn tagiau, er enghraifft <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <tag> β€” tag agoriadol
  • - tag cau

Tagiau marcio HTML

  • <b> - ffont beiddgar
    • Enghraifft: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • arwain ffont beiddgar
  • <i> - italig
    • Enghraifft: <i>курсив</i>
    • canlyniad: italig
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • enghraifft: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • canlyniad: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Yn ogystal Γ’ thestun, gallwch anfon cynnwys arall gan ddefnyddio dulliau arbennig:

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
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"
)

Y rhai. er enghraifft defnyddio'r dull sendPhoto() gallwch anfon llain arbed fel delwedd a adeiladwyd gennych gyda'r pecyn ggplot2.

Gwirio'r Windows Task Scheduler ac anfon hysbysiad o dasgau sydd wedi damwain

I weithio gyda'r Windows Task Scheduler, mae angen i chi osod y pecyn taskscheduleR, ac er hwylustod gweithio gyda data, gosodwch y pecyn dplyr.

# Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
library(taskscheduleR)
library(dplyr)

Nesaf, gan ddefnyddio'r swyddogaeth taskscheduler_ls() rydym yn gofyn am wybodaeth am dasgau gan ein trefnydd. Gan ddefnyddio'r swyddogaeth filter() o'r pecyn dplyr rydym yn tynnu o'r rhestr o dasgau y rhai a gwblhawyd yn llwyddiannus ac sydd Γ’ statws canlyniad diwethaf o 0, a'r rhai nad ydynt erioed wedi'u rhedeg eto ac sydd Γ’ statws 267011, tasgau anabl, a thasgau sy'n rhedeg ar hyn o bryd.

# Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список Π·Π°Π΄Π°Ρ‡
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Yn y gwrthrych task mae gennym nawr restr o dasgau y daeth eu gwaith i ben gyda gwall, mae angen i ni anfon y rhestr hon i Telegram.

Os byddwn yn ystyried pob gorchymyn yn fwy manwl, yna:

  • filter() β€” yn hidlo'r rhestr o dasgau yn unol Γ’'r amodau a ddisgrifir uchod
  • select() - yn gadael dim ond un maes gydag enw'r tasgau yn y tabl
  • unique() - yn dileu enwau dyblyg
  • unlist() - yn trosi'r golofn tabl a ddewiswyd yn fector
  • paste0() - cysylltu enwau tasgau yn un llinell, a rhoi nod llinell newydd fel gwahanydd, h.y. n.

Y cyfan sydd ar Γ΄l i ni yw anfon y canlyniad hwn i telegram.

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

Felly, ar hyn o bryd mae'r cod bot yn edrych fel hyn:

Cod bot sy'n gwirio'r dasg

# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
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"
  )

}

Wrth ddefnyddio'r enghraifft uchod, amnewidiwch eich tocyn bot a'ch ID sgwrs yn y cod.

Gallwch ychwanegu amodau hidlo tasg, er enghraifft, gwirio dim ond y tasgau hynny a grΓ«wyd gennych chi, ac eithrio rhai system.

Gallwch hefyd roi gosodiadau amrywiol mewn ffeil ffurfweddu ar wahΓ’n, a storio'r ID sgwrsio a'r tocyn ynddo. Gallwch ddarllen y config, er enghraifft, gan ddefnyddio'r pecyn configr.

Enghraifft ini config

[telegram_bot]
;настройки Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚Π° ΠΈ Ρ‡Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ увСдомлСния
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Enghraifft o ddarllen newidynnau o config yn 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

Sefydlu amserlen lansio sgan tasg

Disgrifir y broses o ffurfweddu lansiad sgript a drefnwyd yn fanylach yn hyn Erthygl. Yma ni fyddaf ond yn disgrifio'r camau y mae'n rhaid eu dilyn ar gyfer hyn. Os nad yw unrhyw un o'r camau yn glir i chi, yna cyfeiriwch at yr erthygl y rhoddais ddolen iddi.

Gadewch i ni ddweud ein bod yn arbed ein cod bot i ffeil check_bot.R. I drefnu bod y ffeil hon yn rhedeg yn rheolaidd, dilynwch y camau hyn:

  1. Ysgrifennwch y llwybr i'r ffolder y mae R wedi'i osod ynddo yn y newidyn system Path, ar Windows bydd y llwybr yn rhywbeth fel hyn: C:Program FilesRR-4.0.2bin.
  2. Creu ffeil ystlumod gweithredadwy gydag un llinell yn unig R CMD BATCH C:rscriptscheck_botcheck_bot.R. Amnewid C:rscriptscheck_botcheck_bot.R i'r llwybr llawn i'ch ffeil R.
  3. Nesaf, defnyddiwch y Windows Task Scheduler i osod amserlen gychwyn, er enghraifft, bob hanner awr.

Casgliad

Yn yr erthygl hon, fe wnaethon ni ddarganfod sut i greu bot a'i ddefnyddio i anfon amrywiol hysbysiadau i telegram.

Disgrifiais y dasg o fonitro'r Windows Task Scheduler, ond gallwch ddefnyddio'r deunydd yn yr erthygl hon i anfon unrhyw hysbysiad, o ragolygon y tywydd i ddyfynbrisiau stoc ar y gyfnewidfa stoc, oherwydd. Mae R yn caniatΓ‘u ichi gysylltu Γ’ nifer enfawr o ffynonellau data.

Yn yr erthygl nesaf, byddwn yn darganfod sut i ychwanegu gorchmynion a bysellfwrdd at y bot fel y gall nid yn unig anfon hysbysiadau, ond hefyd gyflawni gweithredoedd mwy cymhleth.

Ffynhonnell: hab.com

Ychwanegu sylw