/
clone.py
executable file
·73 lines (59 loc) · 2.27 KB
/
clone.py
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
#!/usr/bin/env python
import sys,re
import os.path
from tgdcb.config import *
from pyxmpp.all import JID
from tgdcb import mucroombot
from random import choice,random
from getpass import getuser,getpass
from tgdcb.colors import colorize,notify
from pyxmpp.jabber.muc import MucRoomHandler
from tgdcb.markov import PidginLogs, MarkovChain
class MucClient(MucRoomHandler):
def __init__(self,parent):
super(MucClient,self).__init__()
self.parent = parent
def message_received(self, user, stanza):
body=stanza.get_body()
if user is None or body is None: return
print user.nick+':',body
response = self.parent.autorespond(body)
if response:
self.room_state.send_message(response)
#end
class CloneClient(mucroombot.ChatClient):
def __init__(self, jid, password, nick):
super(CloneClient,self).__init__(jid,password,nick)
self.responder = MarkovChain(PidginLogs('~/.purple/logs/jabber/%s/'%jid.as_utf8(),select_nick=nick))
def session_started(self):
self._session_started_helper(MucClient(self),JID(ROOM,SERVER))
def autorespond(self,body):
if (not self.nick in body) and random() < 0.6: return None
r = self.responder.get(body)
rr = repr(r)
if rr[rr.find("'")+1:rr.rfind("'")] != r or len(r.split()) < 2: return None
return r
def message(self,stanza):
body=stanza.get_body()
frm = stanza.get_from().as_utf8().split('@')[0]
if stanza.get_type()=="headline": return True
print colorize('g',frm+':'),body
response = self.autorespond(body)
return Message(to_jid=stanza.get_from(),
from_jid=stanza.get_to(),
stanza_type=stanza.get_type(),
subject=stanza.get_subject(),
body=response)
#end class
if len(sys.argv) != 2:
print notify('!','r',"Usage: %s <nick_to_clone>"%sys.argv[0])
sys.exit(1)
nick = sys.argv[1]
if ROOM_TYPE == 'MUC':
jidname = nick+'@'+DOMAIN
else:
sys.exit(notify('!','r',"%s is not supported yet"%ROOM_TYPE))
jidname = getuser()+'@'+DOMAIN
mucroombot.setup_localization()
while mucroombot.main(lambda: CloneClient(JID(jidname),getpass(),nick)): pass
# vi: sts=4 et sw=4