]> kaliko git repositories - sid.git/blobdiff - sid/log.py
Bump version
[sid.git] / sid / log.py
index ba216e5f58eafaf286ba3012451d06613d440720..1872c1beedf486c074f0f563b7e62b57726be54c 100644 (file)
@@ -1,18 +1,6 @@
 # -*- coding: utf-8 -*-
-
-# Copyright (C) 2020 kaliko <kaliko@azylum.org>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, version 3 only.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# SPDX-FileCopyrightText: 2020 kaliko <kaliko@azylum.org>
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 from datetime import datetime
 from os import fdopen
@@ -23,7 +11,10 @@ from .plugin import Plugin, botcmd
 
 
 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
 
@@ -37,18 +28,27 @@ class Log(Plugin):
         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))
 
@@ -58,12 +58,13 @@ class Log(Plugin):
 
     @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'}
@@ -77,7 +78,7 @@ class Log(Plugin):
 
     @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())