feat: Add reminder cooldown for room notices

Introduces a customizable cooldown period for sending room notices
after message redaction to prevent flooding users with notifications.
Configurable via `reminder_cooldown` setting in the configuration file.
This commit is contained in:
Kumi 2024-12-26 12:51:06 +01:00
parent 8f637ac5e3
commit 9b2981de90
Signed by: kumi
GPG key ID: ECBCC9082395383F
2 changed files with 34 additions and 2 deletions

View file

@ -1,4 +1,5 @@
homeserver: https://matrix.example.com
user_id: "@example:example.com"
access_token: syt_1234567890
check_room: # If you want to check for permissions in a specific room instead of the current room
check_room: # If you want to check for permissions in a specific room instead of the current room
reminder_cooldown: 30

View file

@ -1,4 +1,5 @@
import re
import datetime
import asyncio
import yaml
import nio
@ -10,14 +11,23 @@ url_regex = re.compile(r"(https?://\S+)|(www\.\S+)")
class RedactorBot:
def __init__(
self, homeserver, user_id, access_token, sync_timeout, check_room=None
self,
homeserver,
user_id,
access_token,
sync_timeout=30000,
reminder_cooldown=30,
check_room=None,
):
self.client = AsyncClient(homeserver, user_id)
self.client.access_token = access_token
self.sync_timeout = sync_timeout
self.client.add_event_callback(self.message_callback, RoomMessage)
self.reminder_cooldown = reminder_cooldown
self.check_room = check_room
self.cooldown_log = {}
async def message_callback(self, room: MatrixRoom, event: RoomMessage):
if isinstance(event, (RoomMessageText, RoomMessageMedia)):
check_room = (
@ -42,6 +52,26 @@ class RedactorBot:
print(
f"Redacted message from {event.sender} in {room.display_name}"
)
# Send a notice to the room to inform the user
if (
not self.cooldown_log.get(room.room_id)
or (
datetime.datetime.now()
- self.cooldown_log[room.room_id]
).seconds
> self.reminder_cooldown
):
self.cooldown_log[room.room_id] = datetime.datetime.now()
await self.client.room_send(
room_id=room.room_id,
message_type="m.room.message",
content={
"msgtype": "m.notice",
"body": "New users cannot send links or uploads until powerlevel raised above zero.",
},
)
else:
print(f"Failed to redact message: {response}")
@ -62,6 +92,7 @@ bot = RedactorBot(
user_id=config["user_id"],
access_token=config["access_token"],
sync_timeout=config.get("sync_timeout", 30000),
reminder_cooldown=config.get("reminder_cooldown", 30),
check_room=config.get("check_room", None),
)