我们用R语言编写一个电报机器人(第1部分):创建一个机器人并用电报发送消息

电报的受众每天都在成倍增长,这得益于Messenger的便利性,渠道,聊天的存在以及创建自动程序的能力。



Bot可用于完全不同的目的,从自动与客户沟通到管理自己的任务。



实际上,通过该漫游器,您可以使用电报执行任何操作:发送或请求数据,在服务器上运行任务,将信息收集到数据库中,发送电子邮件等等。



我计划写一系列文章,介绍如何在R中使用电报机器人API并为我的需要编写机器人。





在本文的第一篇文章中,我们将探讨如何创建电报机器人并使用它以电报形式发送通知。



结果,我们将拥有一个机器人,该机器人将检查Windows Task Scheduler中所有任务的最后执行状态,并在某些任务失败时向您发送通知。



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



.



笑脸桌



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