jabber bot, XMPP, Open Source,xmpppy,да прибудет с тобой карма!

  1
  2
  3
  4
  5
  6
  7
  8
  9
 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
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys,xmpp,time#,MySQLdb #Подключение библеотек, xmpp - xmpppy.sourceforge.net, там же API
from types import *
confs = [] #В этом массиве будет хранится список конференций к которым бот подключён в данный момент
#Потом буду логи в базу MySQL пихать, дабы не забыть написал команды
#sqlconn = MySQLdb.connect (host = \"localhost\",user = \"root\",passwd = \"1\",db = \"pyrobot\",charset = \"utf8\",use_unicode = True)
#cursor = sqlconn.cursor ()
#cursor.execute(\"SQL-QUERY\")
#########################Функции бота, вызываются из обработки мессаг#################
def help(conn,user,where,nick,mtype): #Команды бота
conn.send(xmpp.protocol.Message(to=where,body=nick + u\'ушли\',typ=mtype))
conn.send(xmpp.protocol.Message(to=user,body=u\'Поддерживаемые команды:\\n!автор\\nпинг\',typ=\'chat\'))
#
def author(conn,where,nick,mtype): #Автор бота
conn.send(xmpp.protocol.Message(to=where,body=nick + u\'Меня написал Rulexec, он держит меня на localhost, я не знаю что это значит, но я хочу выбраться отсюда, поговорите с моим ботовладеньцем :\\\'(\',typ=mtype))
#
def ping(conn,where,nick,mtype): #Пинг
conn.send(xmpp.protocol.Message(to=where,body=nick + u\'А не буду я тебя пинговать =\\\\\',typ=mtype))
######################Обработка запросов (например, авторизация)#######################
def presenceCB(conn,presence):
if presence.getType()==\'subscribe\': #Обрабатываем запрос на авторизацию
jid = presence.getFrom().getStripped()
conn.send(xmpp.protocol.Presence(jid,\"subscribed\"))
print \"\\033[30mJID\\033[m \\033[37m\" + str(jid) + \"\\033[m \\033[30mзапросил авторизацию\\033[m\"
########################Логика работы, обработка мессаджей##############################
def messageCB(conn,mess):
text = mess.getBody() #Содержание мессаги
if type(text) is NoneType: #Если мессага пустая ничё не делаем
return
user = mess.getFrom() #Автор мессаги
username = unicode(user) #Автора в юникод (в новую переменную т.к. преобразуется в строку)
where = mess.getFrom().getStripped() #Откуда пришла мессага (для ответа юзеру или в конфу)
if where in confs: #Если мессага в конфе, то приписываем ник, двоеточие
nick = mess.getFrom().getResource() + \': \'
mtype = \'groupchat\'
else: #Если же нет, то ничё не пишем
nick = \'\'
mtype = \'chat\'
print u\"\\033[31mПришло сообщение от\\033[m \\033[37m\" + username + u\"\\033[m: \\033[33m\" + text + u\"\\033[m\" #В консольку чё пришло, когда будет не сервере уберу эту фигню
if text.find(\' \')+1: #Сообщение разделяем на 2 части - команду и аргумент
cmd,args = text.split(\' \',1)
if args.find(\' \')+1: #На всякий случай аргумент разделяем на 2 части, первый аргумент и второй :)
arg2,arg3 = args.split(\' \',1)
else:
arg2,arg3 = args,\'\'
else:
cmd,args=text,\'\'
cmd=cmd.lower()
########Если команда, то выполняем её####
if text == u\'команды\' or text == u\'хелп\' or text == u\'help\':
help(conn,user,where,nick,mtype)
if text == u\'!автор\':
author(conn,where,nick,mtype)
if text == u\'пинг\':
ping(conn,where,nick,mtype)
#Коннект, дисконнект к конфе
if cmd == u\'connect\' and args != \'\':
confs.append(args)
conf = args + u\'/PyroBot\'
conn.send(xmpp.protocol.Presence(to=conf))
if cmd == u\'disconnect\' and args != \'\':
confs.remove(args)
conf = args
conn.send(xmpp.protocol.Presence(to=conf,typ=\'unavailable\'))
#
###########################Системные фигни, коннект#############################
#####Далее идёт код в котором я не шарю))) Взят с образца#######################
jid=xmpp.JID(\"username@xdsl.by\") ##твой JID %username%
user,server,password=jid.getNode(),jid.getDomain(),\"password\" ##твой пасс от JID %username%
conn=xmpp.Client(server,debug=[])
conres=conn.connect()
if not conres:
print \"Unable to connect to server %s!\"%server
sys.exit(1)
if conres<>\'tls\':
print \"Warning: unable to estabilish secure connection - TLS failed!\"
authres=conn.auth(user,password,\"pyromancer\")
if not authres:
print \"Unable to authorize on %s - check login/password.\"%server
sys.exit(1)
if authres<>\'sasl\':
print \"Warning: unable to perform SASL auth os %s. Old authentication method used!\"%server
conn.RegisterHandler(\'message\',messageCB)
conn.RegisterHandler(\'presence\',presenceCB)
conn.sendInitPresence()
print \"Бот запущен\"
while 1:
conn.Process(1)
if not conn.isConnected():
conn.reconnectAndReauth()