Pull to refresh

Пишем своего Jabber-бота на Python

Здравствуйте!
Сегодня я расскажу вам как написать своего бота. Мы напишем основной класс и реализуем простейший пример с приёмом и отправкой сообщений.
В последствие, функционал бота можно будет расширить.
Итак, приступим.

Подготовка

Ну, для начала, на понадобятся:

Так же, в большинстве дистрибутивов Linux интерпретатор Python уже установлен, нужно только скачать библиотеку. Сделать это можно командой:

sudo apt-get install python-xmpppy

Класс jabber_bot.py

Когда все приготовления закончены, можно приступить непосредственно к кодированию.

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


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()


Заключения


Ну вот, пожалуй и всё, что я хотел сказать на сегодня. Мы создали класс, который можно использовать для создания своих ботов и сделали простейшего.
К функционалу можно добавить, например, обработку команд или пересылку логов с сервера.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.