R тилинде телеграмма ботун жазуу (1-бөлүк): Бот түзүү жана аны телеграммада билдирүүлөрдү жөнөтүү үчүн колдонуу

Telegram аудиториясы күн сайын экспоненциалдуу түрдө өсүп жатат, буга мессенджердин ыңгайлуулугу, каналдардын, чаттардын болушу жана, албетте, ботторду түзүү мүмкүнчүлүгү көмөктөшөт.

Ботторду кардарларыңыз менен байланышты автоматташтыруудан баштап, өз милдеттериңизди башкарууга чейин таптакыр башка максаттарда колдонсо болот.

Негизи, сиз телеграмманы бот аркылуу каалаган операцияларды аткаруу үчүн колдоно аласыз: маалыматтарды жөнөтүү же суроо, серверде тапшырмаларды аткаруу, маалымат базасына маалымат чогултуу, электрондук каттарды жөнөтүү ж.б.у.с.

Кантип иштөө керектиги боюнча бир катар макалаларды жазууну пландап жатам телеграмма бот API, жана муктаждыктарыңызга ылайыктуу ботторду жазыңыз.

R тилинде телеграмма ботун жазуу (1-бөлүк): Бот түзүү жана аны телеграммада билдирүүлөрдү жөнөтүү үчүн колдонуу

Бул биринчи макалада биз телеграмма ботун кантип түзүүнү жана аны телеграммада билдирүүлөрдү жөнөтүү үчүн колдонууну чечебиз.

Натыйжада, биз Windows Task Scheduler программасындагы бардык тапшырмалардын акыркы аткарылышынын абалын текшере турган ботко ээ болобуз жана алардын бири ишке ашпай калса, сизге эскертмелерди жөнөтөт.

Бирок бул макалалар сериясынын максаты конкреттүү, тар тапшырма үчүн бот жазууну үйрөтүү эмес, жалпысынан пакеттин синтаксиси менен тааныштыруу. telegram.bot, жана өз көйгөйлөрүңүздү чечүү үчүн ботторду жаза турган код мисалдары.

ыраазы

Эгер сиз маалыматтарды талдоо кызыктырсаңыз, сизди менин телеграмма и YouTube каналдар. Мазмундун көбү R тилине арналган.

  1. Телеграмма ботун түзүү
  2. R-де телеграмма боту менен иштөө үчүн пакетти орнотуу
  3. Rдан Telegramга билдирүүлөрдү жөнөтүү
  4. Тапшырмаларды сканерлөө үчүн график түзүү
  5. жыйынтыктоо

Телеграмма ботун түзүү

Биринчиден, биз бот түзүшүбүз керек. Бул атайын боттун жардамы менен жасалат 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.

Бул кадамда ботту түзүү боюнча даярдык иштери аяктады.

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.

Ботко каалаган билдирүүнү жөнөтүңүз, мисалы, "Эй бот". Учурда бул сиздин бот менен болгон чатыңыздын идентификаторун алуу үчүн керек.

Эми биз 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 керек.

Метод менен алынган объекттен чат 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"

Ошентип, бул этапта бизде боттон Telegramга билдирүү жөнөтүү үчүн керектүү нерселердин баары бар. ыкманы колдонолу sendMessage(), ага чат идентификаторун, билдирүү текстин жана билдирүү текстинин белгилөө түрүн өткөрүп беришиңиз керек. Белгилөө түрү Markdown же HTML болушу мүмкүн жана аргумент менен белгиленет parse_mode.

# Отправка сообщения
bot$sendMessage(chat_id,
                text = "Привет, *жирный текст* _курсив_",
                parse_mode = "Markdown"
)

Markdown форматтоо негиздери:

  • Калың шрифт * менен белгиленет:
    • мисалы: *жирный шритф*
    • натыйжа: калың шрифт
  • Курвиктер астынкы сызыктар менен белгиленет:
    • мисалы: _курсив_
    • натыйжа: курсив
  • Адатта программалык кодду бөлүп көрсөтүү үчүн колдонулган мономейкиндик шрифти апострофтун жардамы менен белгиленет - `:
    • мисал: `моносмостук шрифт`
    • натыйжа: моноширинный шрифт

HTML белгилөө форматтоо негиздери:
HTMLде тексттин тегдер менен баса белгилениши керек болгон бөлүгүн оройсуз, мисалы <тег>текст</тег>.

  • <тег> - теги ачуу
  • - жабуу белгиси

HTML белгилөө теги

  • <b> - калың шрифт
    • мисалы: <b>жирный шрифт</b>
    • жыйынтык калың шрифт
  • <i> - курсив
    • мисалы: <i>курсив</i>
    • натыйжа: курсив
  • — моноширинный шрифт
    • мисал: моноширинный шрифт
    • натыйжа: моноширинный шрифт

Тексттен тышкары, сиз атайын ыкмаларды колдонуу менен башка мазмунду жөнөтө аласыз:

# Отправить изображение
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.

Windows Task Scheduler текшерилүүдө жана анормалдуу түрдө токтотулган тапшырмалар жөнүндө эскертмелер жөнөтүлүүдө

Windows Task Scheduler менен иштөө үчүн пакетти орнотуу керек 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"
  )

}

Жогорудагы мисалды колдонуп жатканда, кодго бот белгисин жана чат идентификаторуңузду алмаштырыңыз.

Тапшырмаларды чыпкалоо үчүн шарттарды кошо аласыз, мисалы, системалык тапшырмаларды кошпогондо, сиз түзгөн тапшырмаларды гана текшерүү.

Сиз ошондой эле ар кандай орнотууларды өзүнчө конфигурация файлына салып, андагы чат идентификаторун жана белгини сактай аласыз. Сиз конфигурацияны окуй аласыз, мисалы, пакетти колдонуп 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 FilesRR-4.0.2bin.
  2. Бир сап менен аткарылуучу бат файлын түзүңүз R CMD BATCH C:rscriptscheck_botcheck_bot.R. алмаштыруу C:rscriptscheck_botcheck_bot.R R файлыңызга толук жолго.
  3. Андан кийин, ишке киргизүү графигин орнотуу үчүн Windows Task Scheduler колдонуңуз, мисалы, ар бир жарым саатта.

жыйынтыктоо

Бул макалада биз ботту кантип түзүүнү жана аны телеграммада ар кандай билдирүүлөрдү жөнөтүү үчүн колдонууну түшүндүк.

Мен Windows Task Scheduler мониторингинин тапшырмасын сүрөттөп бердим, бирок сиз бул макаладагы материалды аба ырайынын болжолдоосунан биржадагы биржа котировкаларына чейин каалаган билдирүүлөрдү жөнөтүү үчүн колдоно аласыз, анткени R көп сандагы маалымат булактарына туташууга мүмкүндүк берет.

Кийинки макалада биз ботко буйруктарды жана клавиатураны кантип кошуу керектигин, ал эскертмелерди гана жөнөтпөстөн, татаалыраак аракеттерди да аткара ала тургандай кылып билебиз.

Source: www.habr.com

Комментарий кошуу