From 1b8cca26fa90e7d1d6fff86f49e688ffbb59d59a Mon Sep 17 00:00:00 2001 From: urlbot Date: Sat, 11 Jul 2015 00:27:46 +0200 Subject: [PATCH] implement 'record' hooking including vanishing --- plugins.py | 2 +- urlbot.py | 66 +++++++++++++++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/plugins.py b/plugins.py index 5ba31c6..743292c 100644 --- a/plugins.py +++ b/plugins.py @@ -832,7 +832,7 @@ def command_record(argv, **args): } target_user = argv[1] - message = 'Message from %s (%s): ' % (args['reply_user'], time.strftime('%F.%T')) + message = '%s (%s): ' % (args['reply_user'], time.strftime('%F.%T')) message += ' '.join(argv[2:]) if conf('persistent_locked'): diff --git a/urlbot.py b/urlbot.py index 2861504..feb1af5 100755 --- a/urlbot.py +++ b/urlbot.py @@ -225,7 +225,7 @@ def handle_msg(msg_obj): return arg_user = msg_obj['mucnick'] - blob_userpref = conf_load().get('user_pref',[]) + blob_userpref = conf_load().get('user_pref', []) nospoiler = False if arg_user in blob_userpref: @@ -284,36 +284,50 @@ class bot(ClientXMPP): def muc_online(self, msg_obj): # don't react to yourself - if msg_obj['mucnick'] == self.nick: + if msg_obj['muc']['nick'] == self.nick: return -# XXX: this is the 'foo has joined' message hook. Be careful: After joining, -# the bot user sees a single message for each existing user. E.g. the -# bot will likely highlight all users. Not good. -# -# XXX: example code: -# -# self.send_message( -# mto=msg_obj['from'].bare, -# mbody='hello, %s %s' % ( -# msg_obj['muc']['role'], -# msg_obj['muc']['nick'] -# ), -# mtype='groupchat' -# ) -# -# log.info('sent greeting to %s in %s' % ( -# msg_obj['muc']['nick'], -# msg_obj['from'].bare -# )) + arg_user = msg_obj['muc']['nick'] + blob_userrecords = conf_load().get('user_records', {}) + + if arg_user in blob_userrecords: + records = blob_userrecords[arg_user] + + if not records: + return + + self.send_message( + mto=msg_obj['from'].bare, + mbody='%s, there %s %d message%s for you:\n%s' % ( + arg_user, + 'is' if 1 == len(records) else 'are', + len(records), + '' if 1 == len(records) else 's', + '\n'.join(blob_userrecords[arg_user]) + ), + mtype='groupchat' + ) + log.info('sent %d offline records to room %s' % ( + len(records), msg_obj['from'].bare + )) + + if conf('persistent_locked'): + log.warn("couldn't get exclusive lock") + return False + + set_conf('persistent_locked', True) + blob = conf_load() + + if 'user_records' not in blob: + blob['user_records'] = {} + + blob['user_records'][arg_user] = [] + + conf_save(blob) + set_conf('persistent_locked', False) return -# plugins.data_parse_commands(msg_obj) -# plugins.data_parse_other(msg_obj) - - print('msg from %s: %s' % (msg_obj['from'].bare, msg_obj)) - # def set_presence(self, msg): # for room in self.rooms: # self.send_presence(pto=room, pstatus=msg)