From fb27f3eee5ae96fa7d52f4bfab233448f850daa3 Mon Sep 17 00:00:00 2001 From: Tomas Kracmar Date: Thu, 18 Apr 2024 08:20:34 +0000 Subject: [PATCH] Update module_auto_invite.py --- module_auto_invite.py | 62 ++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/module_auto_invite.py b/module_auto_invite.py index d87bb5c..22b2871 100644 --- a/module_auto_invite.py +++ b/module_auto_invite.py @@ -1,33 +1,51 @@ -class AutoInvite: +import logging +from synapse.module_api import ModuleApi + +logger = logging.getLogger(__name__) + +class AutoInviteBotModule: def __init__(self, config, api: ModuleApi): - self.config = config self.api = api - self.api.register_room_creation_handler(self.on_room_creation) + self.bot_user_id = config.get("bot_user_id", "@bot.id:blackmesaresearch.net") + logger.info("Module initialized with bot_user_id: %s", self.bot_user_id) + + # Register the new event callback only + self.api.register_third_party_rules_callbacks( + on_new_event=self.on_new_event + ) @staticmethod def parse_config(config): return config - async def on_room_creation(self, room_id: str, creator: str): - # Invite the bot to the room - await self.api.update_room_membership( - sender=creator, - target=self.config['auto_invite_user_id'], - room_id=room_id, - membership="invite" - ) - # Adjust power levels, as before - await self.adjust_power_levels(room_id, creator) + async def on_new_event(self, event, state_events): + if event.type == "m.room.message": + room_id = event.room_id + logger.debug("Processing new message event in room: %s", room_id) - async def adjust_power_levels(self, room_id: str, creator: str): - current_levels = await self.api.get_power_levels(room_id) - current_levels['users'][self.config['auto_invite_user_id']] = 100 - current_levels['users'][creator] = 90 + # Fetch current state to check bot's membership + current_state = await self.api.get_room_state(room_id) + bot_member_event = current_state.get(("m.room.member", self.bot_user_id), {}) + bot_membership = bot_member_event.get("content", {}).get("membership") - if 'invite' in current_levels and current_levels['invite'] > 90: - current_levels['invite'] = 50 + # Log current membership state + logger.debug("Bot's current membership in %s: %s", room_id, bot_membership) - await self.api.set_power_levels(room_id, creator, current_levels) + if bot_membership != "join": + logger.info("Bot is not a member of the room. Sending invite...") + try: + await self.api.update_room_membership( + sender=event.sender, + target=self.bot_user_id, + room_id=room_id, + membership="invite" + ) + logger.info("Bot invited to room %s upon new event.", room_id) + except Exception as e: + logger.error("Failed to invite bot to room %s: %s", room_id, e) + else: + logger.info("Bot is already a member of the room. No action needed.") -def setup(config: dict, api: ModuleApi) -> AutoInvite: - return AutoInvite(config, api) +def setup(config, api): + module_config = AutoInviteBotModule.parse_config(config) + return AutoInviteBotModule(module_config, api) \ No newline at end of file