Add config option to override default power levels in rooms
This commit is contained in:
@@ -186,6 +186,11 @@ bridge:
|
|||||||
background: "020202" # only for gif
|
background: "020202" # only for gif
|
||||||
fps: 30 # only for webm
|
fps: 30 # only for webm
|
||||||
|
|
||||||
|
# Overrides for base power levels.
|
||||||
|
initial_power_level_overrides:
|
||||||
|
user: {}
|
||||||
|
group: {}
|
||||||
|
|
||||||
# Whether to bridge Telegram bot messages as m.notices or m.texts.
|
# Whether to bridge Telegram bot messages as m.notices or m.texts.
|
||||||
bot_messages_as_notices: true
|
bot_messages_as_notices: true
|
||||||
bridge_notices:
|
bridge_notices:
|
||||||
|
|||||||
@@ -106,6 +106,9 @@ class Config(BaseBridgeConfig):
|
|||||||
copy("bridge.animated_sticker.target")
|
copy("bridge.animated_sticker.target")
|
||||||
copy("bridge.animated_sticker.args")
|
copy("bridge.animated_sticker.args")
|
||||||
|
|
||||||
|
copy("bridge.initial_power_level_overrides.group")
|
||||||
|
copy("bridge.initial_power_level_overrides.user")
|
||||||
|
|
||||||
copy("bridge.bot_messages_as_notices")
|
copy("bridge.bot_messages_as_notices")
|
||||||
if isinstance(self["bridge.bridge_notices"], bool):
|
if isinstance(self["bridge.bridge_notices"], bool):
|
||||||
base["bridge.bridge_notices"] = {
|
base["bridge.bridge_notices"] = {
|
||||||
|
|||||||
@@ -335,26 +335,28 @@ class PortalMetadata(BasePortal, ABC):
|
|||||||
entity: TypeChat = None) -> PowerLevelStateEventContent:
|
entity: TypeChat = None) -> PowerLevelStateEventContent:
|
||||||
levels = levels or PowerLevelStateEventContent()
|
levels = levels or PowerLevelStateEventContent()
|
||||||
if self.peer_type == "user":
|
if self.peer_type == "user":
|
||||||
levels.ban = 100
|
overrides = config["bridge.initial_power_level_overrides.user"]
|
||||||
levels.kick = 100
|
levels.ban = overrides.get("ban", 100)
|
||||||
levels.invite = 100
|
levels.kick = overrides.get("kick", 100)
|
||||||
levels.redact = 0
|
levels.invite = overrides.get("invite", 100)
|
||||||
|
levels.redact = overrides.get("redact", 0)
|
||||||
levels.events[EventType.ROOM_NAME] = 0
|
levels.events[EventType.ROOM_NAME] = 0
|
||||||
levels.events[EventType.ROOM_AVATAR] = 0
|
levels.events[EventType.ROOM_AVATAR] = 0
|
||||||
levels.events[EventType.ROOM_TOPIC] = 0
|
levels.events[EventType.ROOM_TOPIC] = 0
|
||||||
levels.state_default = 0
|
levels.state_default = overrides.get("state_default", 0)
|
||||||
levels.users_default = 0
|
levels.users_default = overrides.get("users_default", 0)
|
||||||
levels.events_default = 0
|
levels.events_default = overrides.get("events_default", 0)
|
||||||
else:
|
else:
|
||||||
|
overrides = config["bridge.initial_power_level_overrides.group"]
|
||||||
dbr = entity.default_banned_rights
|
dbr = entity.default_banned_rights
|
||||||
if not dbr:
|
if not dbr:
|
||||||
self.log.debug(f"default_banned_rights is None in {entity}")
|
self.log.debug(f"default_banned_rights is None in {entity}")
|
||||||
dbr = ChatBannedRights(invite_users=True, change_info=True, pin_messages=True,
|
dbr = ChatBannedRights(invite_users=True, change_info=True, pin_messages=True,
|
||||||
send_stickers=False, send_messages=False, until_date=None)
|
send_stickers=False, send_messages=False, until_date=None)
|
||||||
levels.ban = 50
|
levels.ban = overrides.get("ban", 50)
|
||||||
levels.kick = 50
|
levels.kick = overrides.get("kick", 50)
|
||||||
levels.redact = 50
|
levels.redact = overrides.get("redact", 50)
|
||||||
levels.invite = 50 if dbr.invite_users else 0
|
levels.invite = overrides.invite or (50 if dbr.invite_users else 0)
|
||||||
levels.events[EventType.ROOM_ENCRYPTED] = 99
|
levels.events[EventType.ROOM_ENCRYPTED] = 99
|
||||||
levels.events[EventType.ROOM_TOMBSTONE] = 99
|
levels.events[EventType.ROOM_TOMBSTONE] = 99
|
||||||
levels.events[EventType.ROOM_NAME] = 50 if dbr.change_info else 0
|
levels.events[EventType.ROOM_NAME] = 50 if dbr.change_info else 0
|
||||||
@@ -363,13 +365,19 @@ class PortalMetadata(BasePortal, ABC):
|
|||||||
levels.events[EventType.ROOM_PINNED_EVENTS] = 50 if dbr.pin_messages 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_POWER_LEVELS] = 75
|
||||||
levels.events[EventType.ROOM_HISTORY_VISIBILITY] = 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.events[EventType.STICKER] = 50 if dbr.send_stickers else levels.events_default
|
||||||
levels.users[self.main_intent.mxid] = 100
|
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 (self.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 self.main_intent.mxid not in levels.users:
|
||||||
|
levels.users[self.main_intent.mxid] = 100
|
||||||
return levels
|
return levels
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -585,7 +593,8 @@ class PortalMetadata(BasePortal, ABC):
|
|||||||
self.save()
|
self.save()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def _try_use_intent(self, sender: Optional['p.Puppet'], action: Callable[[IntentAPI], None]) -> None:
|
async def _try_use_intent(self, sender: Optional['p.Puppet'],
|
||||||
|
action: Callable[[IntentAPI], None]) -> None:
|
||||||
if sender:
|
if sender:
|
||||||
try:
|
try:
|
||||||
await action(sender.intent_for(self))
|
await action(sender.intent_for(self))
|
||||||
|
|||||||
Reference in New Issue
Block a user