Reset record last_activity upon kick.
This commit is contained in:
parent
b03d082d96
commit
b76e8313bb
3 changed files with 90 additions and 5 deletions
|
@ -2,6 +2,6 @@
|
||||||
# See file /usr/share/kaikout/rtbl.toml
|
# See file /usr/share/kaikout/rtbl.toml
|
||||||
|
|
||||||
[[sources]]
|
[[sources]]
|
||||||
description = "A general block list focussing on spam and service abuse."
|
description = "A general block list focusing on spam and service abuse."
|
||||||
jabber_id = "xmppbl.org"
|
jabber_id = "xmppbl.org"
|
||||||
node_id = "muc_bans_sha256"
|
node_id = "muc_bans_sha256"
|
||||||
|
|
|
@ -419,10 +419,35 @@ class XmppClient(slixmpp.ClientXMPP):
|
||||||
noticed_jids = self.settings[room]['inactivity_notice']
|
noticed_jids = self.settings[room]['inactivity_notice']
|
||||||
if result == 'Inactivity':
|
if result == 'Inactivity':
|
||||||
if jid_bare in noticed_jids: noticed_jids.remove(jid_bare)
|
if jid_bare in noticed_jids: noticed_jids.remove(jid_bare)
|
||||||
|
# FIXME Counting and creating of key entry "score_inactivity" appear not to occur.
|
||||||
|
score_inactivity = XmppCommands.raise_score_inactivity(self, room, jid_bare, db_file)
|
||||||
|
if score_inactivity > 10:
|
||||||
|
jid_bare = await XmppCommands.outcast(self, room, alias, reason)
|
||||||
|
# admins = await XmppMuc.get_affiliation_list(self, room, 'admin')
|
||||||
|
# owners = await XmppMuc.get_affiliation_list(self, room, 'owner')
|
||||||
|
moderators = await XmppMuc.get_role_list(
|
||||||
|
self, room, 'moderator')
|
||||||
|
# Report to the moderators.
|
||||||
|
message_to_moderators = (
|
||||||
|
'Participant {} ({}) has been banned from '
|
||||||
|
'groupchat {} due to being inactive for over {} times.'.format(
|
||||||
|
alias, jid_bare, room, score_inactivity))
|
||||||
|
for alias in moderators:
|
||||||
|
# jid_full = presence['muc']['jid']
|
||||||
|
jid_full = XmppMuc.get_full_jid(self, room, alias)
|
||||||
|
XmppMessage.send(self, jid_full, message_to_moderators, 'chat')
|
||||||
|
# Inform the subject.
|
||||||
|
message_to_participant = (
|
||||||
|
'You were banned from groupchat {} due to being '
|
||||||
|
'inactive for over {} times. Please contact the '
|
||||||
|
' moderators if you think this was a mistake'
|
||||||
|
.format(room, score_inactivity))
|
||||||
|
else:
|
||||||
await XmppCommands.kick(self, room, alias, reason)
|
await XmppCommands.kick(self, room, alias, reason)
|
||||||
message_to_participant = (
|
message_to_participant = (
|
||||||
'You were expelled from groupchat {} due to '
|
'You were expelled from groupchat {} due to '
|
||||||
'being inactive for {} days.'.format(room, span))
|
'being inactive for over {} days.'.format(room, span))
|
||||||
|
XmppCommands.remove_last_activity(self, room, jid_bare, db_file)
|
||||||
elif result == 'Warning' and jid_bare not in noticed_jids:
|
elif result == 'Warning' and jid_bare not in noticed_jids:
|
||||||
noticed_jids.append(jid_bare)
|
noticed_jids.append(jid_bare)
|
||||||
time_left = int(span)
|
time_left = int(span)
|
||||||
|
|
|
@ -410,6 +410,66 @@ class XmppCommands:
|
||||||
Toml.update_jid_settings(self, room, db_file, 'last_activity', activity)
|
Toml.update_jid_settings(self, room, db_file, 'last_activity', activity)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_last_activity(self, room, jid_bare, db_file):
|
||||||
|
"""
|
||||||
|
Remove last message activity.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
room : str
|
||||||
|
Jabber ID.
|
||||||
|
db_file : str
|
||||||
|
Database filename.
|
||||||
|
jid_bare : str
|
||||||
|
Jabber ID.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
result.
|
||||||
|
|
||||||
|
"""
|
||||||
|
activity = self.settings[room]['last_activity'] if 'last_activity' in self.settings[room] else {}
|
||||||
|
del activity[jid_bare]
|
||||||
|
Toml.update_jid_settings(self, room, db_file, 'last_activity', activity)
|
||||||
|
|
||||||
|
|
||||||
|
def raise_score_inactivity(self, room, alias, db_file):
|
||||||
|
"""
|
||||||
|
Raise score by one.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
room : str
|
||||||
|
Jabber ID.
|
||||||
|
alias : str
|
||||||
|
Alias.
|
||||||
|
db_file : str
|
||||||
|
Database filename.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
result.
|
||||||
|
|
||||||
|
"""
|
||||||
|
status_message = '✒️ Writing a score against {} for {}'.format(alias, 'inactivity')
|
||||||
|
self.action_count += 1
|
||||||
|
task_number = self.action_count
|
||||||
|
if room not in self.actions: self.actions[room] = {}
|
||||||
|
self.actions[room][task_number] = status_message
|
||||||
|
XmppStatus.send_status_message(self, room)
|
||||||
|
scores_inactivity = self.settings[room]['scores_inactivity'] if 'scores_inactivity' in self.settings[room] else {}
|
||||||
|
jid_full = XmppMuc.get_full_jid(self, room, alias)
|
||||||
|
if jid_full:
|
||||||
|
jid_bare = jid_full.split('/')[0]
|
||||||
|
scores_inactivity[jid_bare] = scores_inactivity[jid_bare] + 1 if jid_bare in scores_inactivity else 1
|
||||||
|
Toml.update_jid_settings(self, room, db_file, 'scores_inactivity', scores_inactivity)
|
||||||
|
time.sleep(5)
|
||||||
|
del self.actions[room][task_number]
|
||||||
|
XmppStatus.send_status_message(self, room)
|
||||||
|
result = scores_inactivity[jid_bare] if jid_full and jid_bare else 0
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
async def restore_default(self, room, db_file, key=None):
|
async def restore_default(self, room, db_file, key=None):
|
||||||
if key:
|
if key:
|
||||||
value = self.defaults[key]
|
value = self.defaults[key]
|
||||||
|
|
Loading…
Reference in a new issue