Despite this code having been in production in quite a heavy use environment for a good few months, I really wouldn't class it as an example of great code.
It would be fair to say I got sidetracked, and decided to see how much I could abuse certain aspects of Python (such as metaclasses/class creation).
You have been warned!
With that out of the way, telegrambot
is pretty easy to get up and running.
% pip install telegrambot
% cat mybot.cfg
[core]
bot_id = <telegram_bot_id>
token = <telegram_bot_token>
[bing]
key = <bing_api_key>
% telegrambot mybot.cfg
As it stands the framework exposes three commands; /crash
and /hang
were
used to test error handling and threading during development whereas /get
is a bring-your-own-api-key bing image searcher.
Adding plugins aims to be really easy, just create a namespace package under
telegrambot.plugins
and subclass telegrambot.plugins.base.BasePlugin
(now that I think about it, the namespace package may not be necessary - I will
have to re-think my motivation on that one).
from telegrambot.plugins.base import BasePlugin
# due to annoying limitations class names must be unique
class HelloWorld(BasePlugin):
# register /hello command to 'hello_handler' method
commands {'hello': 'hello_handler'}
def hello_handler(self, args, msg):
# `args` is a list of the arguments after the command:
# '/hello world' -> args=['world']
# `msg` is a dictionary representing the Telegram `Message` object
# see TelegramAPIMixin for available Telegram API functions
self.send_message('Hello, {}'.(' '.join(args)),
msg['chat']['id'],
reply=msg['message_id'])