We write a telegram bot in the R language (part 1): We create a bot and send messages in telegram with it

The telegram audience is growing exponentially every day, this is facilitated by the convenience of the messenger, the presence of channels, chats, and of course the ability to create bots.



Bots can be used for completely different purposes, from automating communication with your customers to managing your own tasks.



In fact, through the bot, you can use telegram to perform any operations: send or request data, run tasks on the server, collect information into a database, send emails, and so on.



I plan to write a series of articles on how to work with the telegram bot API in R and write bots for my needs.





In this, the first article, we will figure out how to create a telegram bot and send telegram notifications using it.



As a result, we will have a bot that will check the status of the last execution of all tasks in the Windows Task Scheduler, and send you notifications if any failed.



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



.



Smiley table



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