Provides a pure interface for the 'Telegram Bot API' < http://core.telegram.org/bots/api>. In addition to the pure API implementation, it features a number of tools to make the development of 'Telegram' bots with R easy and straightforward, providing an easy-to-use interface that takes some work off the programmer.
This package provides a pure R interface for the Telegram Bot API. In addition to the pure API implementation, it features a number of tools to make the development of Telegram bots with R easy and straightforward, providing an easy-to-use interface that takes some work off the programmer.
You can install telegram.bot from CRAN:
install.packages("telegram.bot")
Or the development version from GitHub:
# install.packages("devtools")devtools::install_github("ebeneditos/telegram.bot")
You can quickly build a chatbot with a few lines:
library(telegram.bot) start <- function(bot, update){ bot$sendMessage(chat_id = update$message$chat$id, text = sprintf("Hello %s!", update$message$from$first_name))} updater <- Updater("TOKEN") + CommandHandler("start", start) updater$start_polling() # Send '/start' to the botIf you don't have a TOKEN, you can follow the steps explained below to generate one.
One of the core instances from the package is Bot, which represents a Telegram Bot. You can find a full list of the Telegram API methods implemented in its documentation (?Bot), but here there are some examples:
# Initialize botbot <- Bot(token = "TOKEN") # Get bot infoprint(bot$getMe()) # Get updatesupdates <- bot$getUpdates() # Retrieve your chat id# Note: you should text the bot before calling 'getUpdates'chat_id <- updates[[1L]]$from_chat_id() # Send messagebot$sendMessage(chat_id = chat_id, text = "foo *bold* _italic_", parse_mode = "Markdown") # Send photobot$sendPhoto(chat_id = chat_id, photo = "https://telegram.org/img/t_logo.png") # Send audiobot$sendAudio(chat_id = chat_id, audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3") # Send documentbot$sendDocument(chat_id = chat_id, document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf") # Send stickerbot$sendSticker(chat_id = chat_id, sticker = "https://www.gstatic.com/webp/gallery/1.webp") # Send videobot$sendVideo(chat_id = chat_id, video = "http://techslides.com/demos/sample-videos/small.mp4") # Send gifbot$sendAnimation(chat_id = chat_id, animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif") # Send locationbot$sendLocation(chat_id = chat_id, latitude = 51.521727, longitude = -0.117255) # Send chat actionbot$sendChatAction(chat_id = chat_id, action = "typing") # Get user profile photosphotos <- bot$getUserProfilePhotos(user_id = chat_id) # Download user profile photofile_id <- photos$photos[[1L]][[1L]]$file_idbot$getFile(file_id, destfile = "photo.jpg")Note that you can also send local files by passing their path instead of an URL. Additionaly, all methods accept their equivalent snake_case syntax (e.g. bot$get_me() is equivalent to bot$getMe()).
To make it work, you'll need an access TOKEN (it should look something like 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). If you don't have it, you have to talk to @BotFather and follow a few simple steps (described here).
Recommendation: Following Hadley's API
guidelines
it's unsafe to type the TOKEN just in the R script. It's better to use
environment variables set in .Renviron file.
So let's say you have named your bot RTelegramBot; you can open the .Renviron file with the R command:
file.edit(path.expand(file.path("~", ".Renviron")))And put the following line with your TOKEN in your .Renviron:
R_TELEGRAM_BOT_RTelegramBot=TOKENIf you follow the suggested R_TELEGRAM_BOT_ prefix convention you'll be able
to use the bot_token function (otherwise you'll have to get
these variable from Sys.getenv). Finally, restart R and you can then create the Updater object as:
updater <- Updater(token = bot_token("RTelegramBot"))To get you started with telegram.bot, we recommend to take a look at its Wiki:
You can also check these other resources:
If you have any other doubt about the package, you can post a question on Stack Overflow under the r-telegram-bot tag or directly e-mail the package's maintainer.
The package is in a starting phase, so contributions of all sizes are very welcome. Please:
This package is inspired by Python's library
python-telegram-bot, specially by its submodule telegram.ext.
reply_markup parameter from editMessageReplyMarkup() fixed (#9). Thanks to Diogo Tayt-son for reporting.Updater() has been optimized.+ method for class TelegramObject, which eases the Updater construction (see The add operator).!, & and | methods for class BaseFilter, which enables combining filters (see Advanced Filters).destfile parameter for getFile() to download files to a local path.username parameter for CommandHandler() with examples.ErrorHandler() with examples.from_chat_id() and from_user_id() methods for Update().Filters for MessageFilters to avoid masking from utils::Filters.Bot() has been totally updated so to be independent from TGBot. Therefore, all its API methods have been implemented, optimized and updated (e.g. adding timeout argument to getUpdates(), so to use Long Polling). Additionally, new methods have been added, the full list is:
answerCallbackQuery()answerInlineQuery()deleteMessage()deleteWebhook()editMessageReplyMarkup()forwardMessage()getFile()getMe()getUpdates()getUserProfilePhotos()getWebhookInfo()leaveChat()sendAnimation()sendAudio()sendChatAction()sendDocument()sendLocation()sendMessage()sendPhoto()sendSticker()sendVideo()sendVideoNote()sendVoice()setWebhook()reply_markup from sendMessage() for keyboard displaying, with its objects:
ReplyKeyboardMarkupInlineKeyboardMarkupReplyKeyboardRemoveForceReplyanswerInlineQuery() and the InlineQueryResult object.request_config parameter for Bot() and Updater(), which allows you to set additional configuration settings to be passed to the bot's POST requests, useful for users who would like to control the default timeouts and/or control the proxy used for HTTP communication.clean_updates(), set_token(), bot_token() and user_id().