def get_base_power_levels(portal: po.Portal, levels: PowerLevelContent = None, entity: TypeChat = None) -> PowerLevelContent: levels = levels or PowerLevelContent() if portal.peer_type == "user": overrides = portal.config["bridge.initial_power_level_overrides.user"] levels.ban = overrides.get("ban", 100) levels.kick = overrides.get("kick", 100) levels.invite = overrides.get("invite", 100) levels.redact = overrides.get("redact", 0) levels.events[EventType.ROOM_NAME] = 0 levels.events[EventType.ROOM_AVATAR] = 0 levels.events[EventType.ROOM_TOPIC] = 0 levels.state_default = overrides.get("state_default", 0) levels.users_default = overrides.get("users_default", 0) levels.events_default = overrides.get("events_default", 0) else: overrides = portal.config["bridge.initial_power_level_overrides.group"] dbr = entity.default_banned_rights if not dbr: portal.log.debug(f"default_banned_rights is None in {entity}") dbr = ChatBannedRights( invite_users=True, change_info=True, pin_messages=True, send_stickers=False, send_messages=False, until_date=None, ) levels.ban = overrides.get("ban", 50) levels.kick = overrides.get("kick", 50) levels.redact = overrides.get("redact", 50) levels.invite = overrides.get("invite", 50 if dbr.invite_users else 0) levels.events[ EventType.ROOM_ENCRYPTION] = 50 if portal.matrix.e2ee else 99 levels.events[EventType.ROOM_TOMBSTONE] = 99 levels.events[EventType.ROOM_NAME] = 50 if dbr.change_info else 0 levels.events[EventType.ROOM_AVATAR] = 50 if dbr.change_info else 0 levels.events[EventType.ROOM_TOPIC] = 50 if dbr.change_info else 0 levels.events[ EventType.ROOM_PINNED_EVENTS] = 50 if dbr.pin_messages else 0 levels.events[EventType.ROOM_POWER_LEVELS] = 75 levels.events[EventType.ROOM_HISTORY_VISIBILITY] = 75 levels.events[ EventType. STICKER] = 50 if dbr.send_stickers else levels.events_default levels.state_default = overrides.get("state_default", 50) levels.users_default = overrides.get("users_default", 0) levels.events_default = overrides.get( "events_default", 50 if (portal.peer_type == "channel" and not entity.megagroup or entity.default_banned_rights.send_messages) else 0, ) for evt_type, value in overrides.get("events", {}).items(): levels.events[EventType.find(evt_type)] = value levels.users = overrides.get("users", {}) if portal.main_intent.mxid not in levels.users: levels.users[portal.main_intent.mxid] = 100 return levels
def _get_base_power_levels( self, levels: PowerLevelStateEventContent = None, entity: TypeChat = None) -> PowerLevelStateEventContent: levels = levels or PowerLevelStateEventContent() if self.peer_type == "user": levels.ban = 100 levels.kick = 100 levels.invite = 100 levels.redact = 0 levels.events[EventType.ROOM_NAME] = 0 levels.events[EventType.ROOM_AVATAR] = 0 levels.events[EventType.ROOM_TOPIC] = 0 levels.state_default = 0 levels.users_default = 0 levels.events_default = 0 else: dbr = entity.default_banned_rights if not dbr: self.log.debug(f"default_banned_rights is None in {entity}") dbr = ChatBannedRights(invite_users=True, change_info=True, pin_messages=True, send_stickers=False, send_messages=False, until_date=None) levels.ban = 99 levels.kick = 50 levels.redact = 50 levels.invite = 50 if dbr.invite_users else 0 levels.events[EventType.ROOM_ENCRYPTED] = 99 levels.events[EventType.ROOM_TOMBSTONE] = 99 levels.events[EventType.ROOM_NAME] = 50 if dbr.change_info else 0 levels.events[EventType.ROOM_AVATAR] = 50 if dbr.change_info else 0 levels.events[EventType.ROOM_TOPIC] = 50 if dbr.change_info else 0 levels.events[ EventType.ROOM_PINNED_EVENTS] = 50 if dbr.pin_messages else 0 levels.events[EventType.ROOM_POWER_LEVELS] = 75 levels.events[EventType.ROOM_HISTORY_VISIBILITY] = 75 levels.state_default = 50 levels.users_default = 0 levels.events_default = ( 50 if (self.peer_type == "channel" and not entity.megagroup or entity.default_banned_rights.send_messages) else 0) levels.events[ EventType. STICKER] = 50 if dbr.send_stickers else levels.events_default levels.users[self.main_intent.mxid] = 100 return levels