Just for fun написал простенький движок для создания джаббер ботов. Использовал
xmppy, стоит заметить, что написана она очень не по-питоновски, сразу видно у автора какой-то сишный бэкграунд. Документация тоже мягко говоря не очень, приходилось спецификацию протокола
XMPP читать чтобы понять, как эта библиотека работает.
Собственно вот результат:
jabber bot mini-framework on Python
Использовать следующим образом:
from jabberbot import JabberBot
bot = JabberBot("example@example.com", "password", "BotName")
bot.setConference("example@conference.example.com")
bot.run()
Сейчас бот ничего не будет делать, кроме того как логиниться и заходить на конференцию.
Чтобы расширить его функциональность, нужно написать класс-расширение. Например мы хотим чтобы на команду “!торт <ник>” бот отвечал: “<имя_бота> смачно кидает бисквитный трот прямо в лицо <ник>”, тогда класс будет выглядеть так:
from jabberbot import CommandExtension
class CakeExtension(CommandExtension):
def process(self):
if self.options:
return "/me смачно кидает бисквитный торт прямо в лицо %s" % self.options
else:
return None
и результирующий код будет такой:
from jabberbot import JabberBot, CommandExtension
class CakeExtension(CommandExtension):
def process(self):
if self.options:
return "/me смачно кидает бисквитный торот прямо в лицо %s" % self.options
else:
return None
bot = JabberBot("example@example.com", "password", "BotName")
bot.setConference("example@conference.example.com")
bot.extensions.append(CakeExtension("торт")) # Добавляем наше расширение
bot.run()
В конструктор расширения передается название команды, само расширение наследуется от CommandExtension. Префикс команды задается константой jabberbot.CMD_PREFIX и по умолчанию — “!”. В self.options расширения записывается весь текст который следует после команды. Возможно переопределить функцию CommandExtension.check(text), в своем расширении, если вы например хотите делать проверку на какое-то слово во всем сообщении. Функция в качестве параметра получает сообщение пользователя и возвращает True, если оно соответствует команде расширения(а именно если строка начинается с команды), иначе False.
Безусловно это достаточно простой пример, но более сложный/полезный/интересный функционал уже дело техники и вашей фантазии, легкий
API вам предоставлен :)