كتابة روبوت برقية بلغة R (الجزء 2): إضافة دعم الأوامر وعوامل تصفية الرسائل إلى الروبوت

في المنشور السابق ، اكتشفنا كيفية إنشاء روبوت ، وتهيئة مثيل للفئة Botوالتعرف على طرق إرسال الرسائل باستخدامه.



في هذا المقال أواصل هذا الموضوع ، لذا أوصي ببدء قراءة هذا المقال فقط بعد قراءة الجزء الأول .



هذه المرة سوف نتعرف على كيفية إحياء الروبوت الخاص بنا وإضافة دعم الأوامر إليه ، وكذلك التعرف على الفصل Updater.



في سياق المقالة ، سنكتب عدة برامج روبوت بسيطة ، وستحدد الأخيرة ، وفقًا لتاريخ ورمز بلد معين ، ما إذا كان اليوم في بلد معين هو عطلة نهاية الأسبوع أو يوم عمل وفقًا لتقويم الإنتاج. ولكن ، كما في السابق ، الغرض من هذه المقالة هو تعريفك بواجهة الحزمة telegram.botلحل مشاكلك الخاصة.





جميع المقالات من سلسلة "كتابة روبوت برقية بلغة R"



  1. نقوم بإنشاء روبوت وإرسال رسائل إلى Telegram معه
  2. أضف دعم الأوامر وعوامل تصفية الرسائل إلى الروبوت
  3. كيفية إضافة دعم لوحة المفاتيح إلى الروبوت الخاص بك
  4. بناء حوار منطقي متسق مع الروبوت
  5. إدارة حقوق مستخدم الروبوت


المحتوى



telegram youtube . R.



  1. Updater
  2. Handlers —
  3. ,


Updater



Updater — , , Dispetcher. Updater , ( getUpdates()), Dispetcher.



Dispetcher , .. Handler.



Handlers —



Dispetcher . telegram.bot :



  • MessageHandler —
  • CommandHandler —
  • CallbackQueryHandler — Inline
  • ErrorHandler —


,



, , , / .



, .. /hi.



1:
library(telegram.bot)

#    Updater
updater <- Updater('  ')

#    
say_hello <- function(bot, update) {

  #      
  user_name <- update$message$from$first_name

  #   
  bot$sendMessage(update$message$chat_id, 
                  text = paste0(" , ", user_name, "!"), 
                  parse_mode = "Markdown")

}

#   
hi_hendler <- CommandHandler('hi', say_hello)

#    
updater <- updater + hi_hendler

#  
updater$start_polling()


, ' ' , BotFather ( ).

start_polling() Updater, , .



, /hi.





/hi, .



.





  1. Updater;
  2. , .. . say_hello(). , — bot update, — args. bot, , , , . update , , , getUpdates(). args , ;
  3. , .. - . , - . /hi, hi_hendler <- CommandHandler('hi', say_hello). CommandHandler() , hi, . , say_hello, ;
  4. Updater. , , +, .. updater <- updater + hi_hendler. add_handler(), Dispatcher, : updater$dispatcher$add_handler();
  5. start_polling().




, , , - , . — MessageHandler.



MessageHandler . . /hi, , : , , , , .



- , .. . .



2:
library(telegram.bot)

#    Updater
updater <- Updater('  ')

#    
##  
say_hello <- function(bot, update) {

  #      
  user_name <- update$message$from$first_name

  #   
  bot$sendMessage(update$message$chat_id, 
                  text = paste0(" , ", user_name, "!"),
                  parse_mode = "Markdown",
                  reply_to_message_id = update$message$message_id)

}

#  
MessageFilters$hi <- BaseFilter(function(message) {

  # ,      : , , , , 
  grepl(x           = message$text, 
        pattern     = '||||',
        ignore.case = TRUE)
  }
)

#   
hi_hendler <- CommandHandler('hi', say_hello) #   hi
hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi)

#    
updater <- updater + 
             hi_hendler +
             hi_txt_hnd

#  
updater$start_polling()


, ' ' , BotFather ( ).

, :



, , . reply_to_message_id, sendMessage(), id . id : update$message$message_id.



, — BaseFilter():



#  
MessageFilters$hi <- BaseFilter( 

  #   
  function(message) {

    # ,       
    grepl(x           = message$text, 
          pattern     = '||||',
          ignore.case = TRUE)
  }

)


, MessageFilters, . MessageFilters hi, .



BaseFilter() . , — , TRUE FALSE. , , grepl() , |||| TRUE.



hi_txt_hnd <- MessageHandler(say_hello, filters = MessageFilters$hi). MessageHandler() — , , — . MessageFilters$hi.



, , hi_txt_hnd.



updater <- updater + 
             hi_hendler +
             hi_txt_hnd


, telegram.bot MessageFilters , :



  • all —
  • text —
  • command — , .. /
  • reply — ,
  • audio —
  • document —
  • photo —
  • sticker —
  • video —
  • voice —
  • contact —
  • location —
  • venue —
  • game —


|, & . , , :



handler <- MessageHandler(callback, 
  MessageFilters$video | MessageFilters$photo | MessageFilters$document
)




, , . , .



, .



API isdayoff.ru.



3: ,
library(telegram.bot)

#    Updater
updater <- Updater('  ')

#    
##  
check_date <- function(bot, update, args) {

  #  
  day     <- args[1]  # 
  country <- args[2]  # 

  #   
  if ( !grepl('\\d{4}-\\d{2}-\\d{2}', day) ) {

    # Send Custom Keyboard
    bot$sendMessage(update$message$chat_id, 
                    text = paste0(day, " -  ,     --"),
                    parse_mode = "Markdown")

  } else {
    day <- as.Date(day)
    #    POSIXtl
    y <- format(day, "%Y")
    m <- format(day, "%m")
    d <- format(day, "%d")

  }

  #   
  ##    
  ##     ru
  if ( ! country %in% c('ru', 'ua', 'by', 'kz', 'us') ) {

    # Send Custom Keyboard
    bot$sendMessage(update$message$chat_id, 
                    text = paste0(country, " -   ,  : ru, by, kz, ua, us.    ."),
                    parse_mode = "Markdown")

    country <- 'ru'

  }

  #    API
  #  HTTP 
  url <- paste0("https://isdayoff.ru/api/getdata?",
                "year=",  y, "&",
                "month=", m, "&",
                "day=",   d, "&",
                "cc=",    country, "&",
                "pre=1&",
                "covid=1")

  #  
  res <- readLines(url)

  #  
  out <- switch(res, 
                "0"   = " ",
                "1"   = " ",
                "2"   = "  ",
                "4"   = "covid-19",
                "100" = "  ",
                "101" = "  ",
                "199" = " ")

  #  
  bot$sendMessage(update$message$chat_id, 
                  text = paste0(day, " - ", out),
                  parse_mode = "Markdown")

}

#   
date_hendler <- CommandHandler('check_date', check_date, pass_args = TRUE)

#    
updater <- updater + date_hendler

#  
updater$start_polling()


, ' ' , BotFather ( ).

, check_date, .



, , , . , , .



, pass_args = TRUE CommandHandler(), , bot, updateargs. , . , .



, .







— .



:



  1. R. RStudio File, Save As....
  2. bin, R Path, .
  3. , 1 : R CMD BATCH C:\Users\Alsey\Documents\my_bot.R. C:\Users\Alsey\Documents\my_bot.R . , , .. . , txt bat.
  4. Windows, , %windir%\system32\taskschd.msc /s. .
  5. " ...".
  6. "" , " ".
  7. "", "". " " "", bat , .
  8. , .
  9. , "".


, , , .





, , . .



, , .



telegram youtube .




All Articles