Download:
child 7:7b7c6ad5c7ba
parent 5:754ae6ae2c54
6:bddc9023ac66
Anton Shestakov <av6@dwimlabs.net>, Wed, 11 May 2016 00:04:29 +0800
rollbot: try and respond to various commands (none yet) when addressed

1 файлов изменено, 40 вставок(+), 0 удалений(-) [+]
rollbot.py file | annotate | diff | comparison | revisions
--- a/rollbot.py Tue May 10 17:17:47 2016 +0800
+++ b/rollbot.py Wed May 11 00:04:29 2016 +0800
@@ -19,8 +19,12 @@
sleekxmpp.ClientXMPP.__init__(self, jid, password)
self.nick = nick
+ self.prefix = '!'
+ self.commands = []
self.add_event_handler('session_start', self.start)
+ self.add_event_handler('message', self.message)
+ self.add_event_handler('groupchat_message', self.muc_message)
self.add_event_handler('groupchat_invite', self.muc_invite)
self.add_event_handler('groupchat_direct_invite', self.muc_direct_invite)
@@ -28,6 +32,34 @@
self.get_roster()
self.send_presence()
+ def message(self, msg):
+ if msg['type'] not in ('chat', 'normal'):
+ return
+
+ rbody = self.respond(msg['body'].strip())
+ if rbody:
+ msg.reply(rbody)
+ msg.send()
+
+ def muc_message(self, msg):
+ if msg['mucnick'] == self.nick:
+ return
+
+ mbody = msg['body'].lstrip()
+ if mbody.startswith(self.nick):
+ mbody = mbody[len(self.nick):]
+ elif mbody.startswith(self.prefix):
+ mbody = mbody[len(self.prefix):]
+ else:
+ return
+
+ mbody = mbody.lstrip(':, \t')
+ rbody = self.respond(mbody)
+ if rbody:
+ rbody = '%s: %s' % (msg['mucnick'], rbody)
+ msg.reply(rbody)
+ msg.send()
+
def muc_invite(self, invite):
room = invite['from']
password = '' # https://github.com/fritzy/SleekXMPP/issues/409
@@ -38,6 +70,14 @@
password = invite['groupchat_invite']['password']
self.plugin['xep_0045'].joinMUC(room, self.nick, password=password, wait=True)
+ def respond(self, message, prefix=None):
+ response = ''
+ for command in self.commands:
+ response = command.parse(message)
+ if response:
+ break
+ return response
+
def lookup(key, args, config, default=None):
if hasattr(args, key):