class Log(Plugin):
- """Logs presence.
+ """Logs group chat participant presence.
+
+ The account running the bot need at least room moderation right to log
+ participants JIDs (fallback to nickname).
"""
throttle_ts = int(time())-30
bot.add_event_handler("muc::%s::got_offline" %
self.bot.room, self.log_offline)
- def log_online(self, pres):
+ def _get_jid(self, pres):
nick = pres['muc']['nick']
+ jid = self.bot.plugin['xep_0045'].rooms[self.bot.room][nick]['jid']
+ if not jid:
+ self.log.debug('jid not found, is bot account moderating room?')
+ return nick
+ jid = jid.split('/')[0] # strip ressource
+ return jid
+
+ def log_online(self, pres):
+ nick = self._get_jid(pres)
self.log.info('got online: %s', nick)
self.presence.append((datetime.now(), 'online', nick))
def log_offline(self, pres):
- nick = pres['muc']['nick']
+ nick = self._get_jid(pres)
self.log.info('got offline: %s', nick)
self.presence.append((datetime.now(), 'offline', nick))
def log_presence(self, pres):
- nick = pres['muc']['nick']
+ nick = self._get_jid(pres)
self.log.debug('%s: %s', pres['muc']['nick'], pres['type'])
self.presence.append((datetime.now(), pres['type'], nick))
@botcmd(hidden=True)
def write(self, message, args):
- """
- **command** ``!write`` : Write log to file"""
+ """Dump/save room presences log
+
+ ``!write`` : Writes log to file (use mktemp and return file location as MUC message)"""
delay = int(time()) - Log.throttle_ts
if delay < 30:
self.log.debug('throttling file creation')
- self.reply(message, f'wait {30-delay}')
+ self.reply(message, f'wait {30-delay}s')
return
log = self._format_log()
mode = {'mode': 'w', 'encoding': 'utf-8'}
@botcmd(hidden=True)
def dump(self, message, args):
- """**command** ``!dump`` : dump log online!"""
+ """``!dump`` : Dumps log as MUC message"""
self.reply(message, self._format_log())