Escribimos un bot de telegram en el lenguaje R (parte 1): creamos un bot y enviamos mensajes en telegram con él

La audiencia de telegramas crece exponencialmente cada día, esto se ve facilitado por la conveniencia del messenger, la presencia de canales, chats y por supuesto la capacidad de crear bots.



Los bots se pueden usar para propósitos completamente diferentes, desde automatizar la comunicación con sus clientes hasta administrar sus propias tareas.



De hecho, a través del bot, puede usar Telegram para realizar cualquier operación: enviar o solicitar datos, ejecutar tareas en el servidor, recopilar información en una base de datos, enviar correos electrónicos, etc.



Planeo escribir una serie de artículos sobre cómo trabajar con la API de bots de Telegram en R y escribir bots para mis necesidades.





En este, el primer artículo, descubriremos cómo crear un bot de telegram y enviar notificaciones en telegram usándolo.



Como resultado, tendremos un bot que verificará el estado de la última ejecución de todas las tareas en el Programador de tareas de Windows y le enviará notificaciones si algunas han fallado.



, , , telegram.bot, , , .



" telegram R"



  1. , telegram
  2. ,




telegram youtube . R.



  1. R
  2. R Telegram
  3. Emoji
  4. Windows, ,




. BotFather, /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.



BotFather . .



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.



, " ". , 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("~")) .Renviron. 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(), , . .



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"


, , . sendMessage(), , , . Markdown HTML parse_mode.



#  
bot$sendMessage(chat_id,
                text = ", * * __",
                parse_mode = "Markdown"
)


Markdown :



  • *:

    • : * *
    • :
  • :

    • : __
    • :
  • , , — `:

    • : ` `
    • :


HTML :

HTML , , , <></>.



  • <> —
  • </> —


HTML



  • <b>

    • : <b> </b>
  • <i>

    • : <i></i>
    • :
  • <code> —

    • : <code> </code>
    • :


:



#  
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.



Emoji



, Emoji.



.



Mesa sonriente



Unicode. , U+ \U000. .. , U+1F601, R — \U0001F601.



:



bot$sendMessage(chat_id, 
                '   \U0001F601     U+1F601')


:



Windows, ,



Windows 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"
  )

}


.



, , , .



, 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 Files\R\R-4.0.2\bin.
  2. bat , R CMD BATCH C:\rscripts\check_bot\check_bot.R. C:\rscripts\check_bot\check_bot.R R .
  3. Windows , .




, , telegram.



Windows, , , .. R .



, , , , .




All Articles