Update module_auto_invite.py

This commit is contained in:
2024-04-18 08:20:34 +00:00
parent 374d82f9d4
commit fb27f3eee5

View File

@@ -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): def __init__(self, config, api: ModuleApi):
self.config = config
self.api = api 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 @staticmethod
def parse_config(config): def parse_config(config):
return config return config
async def on_room_creation(self, room_id: str, creator: str): async def on_new_event(self, event, state_events):
# Invite the bot to the room if event.type == "m.room.message":
await self.api.update_room_membership( room_id = event.room_id
sender=creator, logger.debug("Processing new message event in room: %s", room_id)
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 adjust_power_levels(self, room_id: str, creator: str): # Fetch current state to check bot's membership
current_levels = await self.api.get_power_levels(room_id) current_state = await self.api.get_room_state(room_id)
current_levels['users'][self.config['auto_invite_user_id']] = 100 bot_member_event = current_state.get(("m.room.member", self.bot_user_id), {})
current_levels['users'][creator] = 90 bot_membership = bot_member_event.get("content", {}).get("membership")
if 'invite' in current_levels and current_levels['invite'] > 90: # Log current membership state
current_levels['invite'] = 50 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: def setup(config, api):
return AutoInvite(config, api) module_config = AutoInviteBotModule.parse_config(config)
return AutoInviteBotModule(module_config, api)