Пишем своего Jabber-бота на Python
Сегодня я расскажу вам как написать своего бота. Мы напишем основной класс и реализуем простейший пример с приёмом и отправкой сообщений. В последствие, функционал бота можно будет расширить.
Итак, приступим.
Подготовка
Ну, для начала, на понадобятся:
- Python — интерпретатор можно скачать на официальном сайте
- xmpppy — библиотека для работы с протоколом Jabber, оф. сайт
Так же, в большинстве дистрибутивов Linux интерпретатор Python уже установлен, нужно только скачать библиотеку. Сделать это можно командой:
1 | sudo apt-get install python-xmpppy |
Класс jabber_bot.py
Когда все приготовления закончены, можно приступить непосредственно к кодированию.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import sys, xmpp class JabberBot: #создаём класс нашего бота def __init__( self , jid, password): jid = xmpp.JID(jid) self .user, self .server, self .password = jid.getNode(), jid.getDomain(), password self .connect() self .auth() def connect( self ): #функция подключения к серверу self .conn = xmpp.Client( self .server, debug = []) conn_result = self .conn.connect() if not conn_result: print "Can't connect to server!\n" sys.exit( 1 ) def auth( self ): #аутентификация auth_result = self .conn.auth( self .user, self .password) if not auth_result: print "Can't to authorize!\n" sys.exit( 1 ) def register_handler( self , name, handler): #привязка функций к событиям self .conn.RegisterHandler(name, handler) def step_on( self ): try : self .conn.Process( 1 ) except KeyboardInterrupt: return 0 return 1 def start( self ): self .conn.sendInitPresence() print "Bot started!" while self .step_on(): pass |
Можно сказать, каркас бота готов. Даже если здесь что-то не понятно, ничего страшного.
Основной функционал будет представлен в другом файле. Там будут указаны основные параметры: логин, пароль, сервер и др.
Основной файл bot.py
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | mport xmpp from jabber_bot import JabberBot config = { #имя пользователя и пароль для подключения 'jid' : 'username@jabber.org' , 'pass' : 'password' } def message_handler(conn, mess): #вызывается при входящем сообщении, text = mess.getBody() #получаем текст сообщения, отправителя user = mess.getFrom() #и шлём обратно reply = text conn.send(xmpp.Message(mess.getFrom(), reply)) bot = JabberBot(config[ 'jid' ], config[ 'pass' ]) bot.register_handler( 'message' , message_handler) bot.start() |
Заключения
Ну вот, пожалуй и всё, что я хотел сказать на сегодня. Мы создали класс, который можно использовать для создания своих ботов и сделали простейшего.
К функционалу можно добавить, например, обработку команд или пересылку логов с сервера.