pyTelegramBotAPI
pypi.orgA Python implementation for the Telegram Bot API.
See https://core.telegram.org/bots/api
Creating a Telegram bot with the pyTelegramBotAPI
There are two ways to define a Telegram Bot with the pyTelegramBotAPI. ### The listener mechanism
- First, create a TeleBot instance.
import telebot TOKEN = '<token string>' bot = telebot.TeleBot(TOKEN)
- Then, define a listener function.
def echo_messages(*messages): """ Echoes all incoming messages of content_type 'text'. """ for m in messages: chatid = m.chat.id if m.content_type == 'text': text = m.text bot.send_message(chatid, text)
- Now, register your listener with the TeleBot instance and call TeleBot#polling()
bot.set_update_listener(echo_messages) bot.polling() while True: # Don't let the main Thread end. pass
- use Message’s content_type attribute to check the type of Message. Now Message supports content types:
- text
- audio
- document
- photo
- sticker
- video
- location
- contact
- new_chat_participant
- left_chat_participant
- new_chat_title
- new_chat_photo
- delete_chat_photo
- group_chat_created
- That’s it!
The decorator mechanism
- First, create a TeleBot instance.
import telebot TOKEN = '<token string>' bot = telebot.TeleBot(TOKEN)
- Next, define all of your so-called message handlers and decorate them with @bot.message_handler
# Handle /start and /help @bot.message_handler(commands=['start', 'help']) def command_help(message): bot.reply_to(message, "Hello, did someone call for help?") # Handles all messages which text matches the regex regexp. # See https://en.wikipedia.org/wiki/Regular_expression # This regex matches all sent url's. @bot.message_handler(regexp='((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)') def command_url(message): bot.reply_to(message, "I shouldn't open that url, should I?") # Handle all sent documents of type 'text/plain'. @bot.message_handler(func=lambda message: message.document.mime_type == 'text/plain', content_types=['document']) def command_handle_document(message): bot.reply_to(message, "Document received, sir!") # Default command handler. A lambda expression which always returns True is used for this purpose. @bot.message_handler(func=lambda message: True, content_types=['audio', 'video', 'document', 'text', 'location', 'contact', 'sticker']) def default_command(message): bot.reply_to(message, "This is the default command handler.")
- And finally, call bot.polling()
bot.polling() while True: # Don't end the main thread. pass
Use whichever mechanism fits your purpose! It is even possible to mix and match.
Source pypi.org