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 bot
If 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=TOKEN
If 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:
ReplyKeyboardMarkup
InlineKeyboardMarkup
ReplyKeyboardRemove
ForceReply
answerInlineQuery()
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()
.