Annotation of MumbleDicebot/peebot.py, Revision 1.1.1.1
1.1 rubenllo 1: from twisted.python.rebuild import rebuild
2: import mumble_client as mc
3: import mumble_protocol as mp
4: import peebot
5: import re
6: import dice
7:
8: OWNER = "ruben" # Your mumble nickname
9: SERVER_IP = "192.168.88.11" # Server IP
10: SERVER_PORT = 64738 # Server PORT
11: USERNAME = "screwgoogle" # Bot's name
12:
13: # Use empty string for optional fields to remove
14: PASSWORD = "no subestimes el poder de Iota" # Optional password
15: CERTIFICATE = "" # Optional certificate
16:
17:
18: class PeeBotClient(mp.MumbleClient):
19: def connectionMade(self):
20: mp.MumbleClient.connectionMade(self)
21:
22: self.users = {}
23: self.channels = {}
24: self.session = 0
25: self.channel = 0
26: self.shutup = []
27: self.follow = 0
28: self.c_order = []
29:
30: def reload(self):
31: rebuild(mp)
32: rebuild(peebot)
33:
34: def reply(self, p, msg):
35: if p.channel_id:
36: self.send_textmessage(msg, channels=p.channel_id)
37: else:
38: self.send_textmessage(msg, users=[p.actor])
39:
40: def handle_udptunnel(self, p):
41: if self.users[p.session] in self.shutup:
42: self.move_user(self.shutup_channel, p.session)
43:
44: def handle_channelstate(self, p):
45: if p.name:
46: self.channels[p.channel_id] = p.name
47:
48: def handle_userremove(self, p):
49: # Remove user from userlist
50: del self.users[p.session]
51:
52: def handle_userstate(self, p):
53: # Add user id to the userlist
54: if p.name:
55: self.users[p.session] = p.name
56:
57: # Stores own session id
58: if p.name == self.factory.nickname:
59: self.session = p.session
60:
61: if p.session == self.session:
62: self.channel = p.channel_id
63:
64: # Follows user around
65: if self.users[p.session] == self.follow:
66: if p.channel_id:
67: self.move_user(p.channel_id, self.session)
68: elif p.self_mute:
69: self.mute_or_deaf(self.session, True, True)
70: else:
71: self.mute_or_deaf(self.session, False, False)
72:
73: def handle_textmessage(self, p):
74:
75:
76: # Reload the script
77: if p.message == "/reload":
78: self.reload()
79: print "Reloaded!"
80:
81: if re.match('^/roll (.+)$', p.message):
82: try:
83: self.reply(p, str(dice.roll(re.search('^/roll (.+)$', p.message).group(1)+"+0")))
84: except dice.DiceBaseException as e:
85: print(e.pretty_print())
86:
87: # Only listen to the owner
88: if self.users[p.actor] != OWNER:
89: return
90:
91: if p.message.startswith("/change"):
92: channel = p.message.split(' ')[-1]
93: self.move_user(int(channel), self.session)
94:
95: # List the channels in the console
96: elif p.message.startswith("/channels"):
97: print self.channels
98:
99: # List the users in the console
100: elif p.message.startswith("/users"):
101: print self.users
102:
103:
104: if __name__ == '__main__':
105: factory = mc.create_client(peebot.PeeBotClient, USERNAME, PASSWORD)
106: mc.start_client(factory, SERVER_IP, SERVER_PORT, certificate=CERTIFICATE)
CVSweb