Recognize creator as owner (MSC4289 room v12+); v2.0.1
This commit is contained in:
parent
437a39a0a0
commit
9a76ea1a8b
3 changed files with 24 additions and 7 deletions
|
|
@ -1,6 +1,6 @@
|
|||
maubot: 0.1.0
|
||||
id: nl.roomsoverview
|
||||
version: 2.0.0
|
||||
version: 2.0.1
|
||||
license: MIT
|
||||
modules:
|
||||
- roomsoverview
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -177,7 +177,6 @@ class RoomsOverviewPlugin(Plugin):
|
|||
members = len(d.get("joined", {}))
|
||||
elif r.status == 404:
|
||||
return None # room bestaat niet (meer)
|
||||
# 403: bestaat, maar bot heeft geen toegang
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
|
@ -204,18 +203,33 @@ class RoomsOverviewPlugin(Plugin):
|
|||
return None
|
||||
|
||||
async def _is_mod(self, room_id: str, user_id: str) -> bool:
|
||||
"""Moderator (power level >= 50) in de gegeven room."""
|
||||
"""Moderator (power level >= 50) in de gegeven room.
|
||||
|
||||
Let op room v12+ (MSC4289): de creator heeft impliciet de maximale macht
|
||||
en mag/hoeft niet in de users-map voor te komen. Die telt daarom mee.
|
||||
"""
|
||||
base = self._base_url()
|
||||
h = self._headers()
|
||||
rid = quote(room_id, safe="")
|
||||
try:
|
||||
async with self.http.get(
|
||||
f"{self._base_url()}/_matrix/client/v3/rooms/{quote(room_id, safe='')}/state/m.room.power_levels",
|
||||
headers=self._headers(),
|
||||
f"{base}/_matrix/client/v3/rooms/{rid}/state/m.room.power_levels",
|
||||
headers=h,
|
||||
timeout=_REQUEST_TIMEOUT,
|
||||
) as r:
|
||||
if r.status != 200:
|
||||
return False
|
||||
d = await r.json()
|
||||
async with self.http.get(
|
||||
f"{base}/_matrix/client/v3/rooms/{rid}/state/m.room.create",
|
||||
headers=h,
|
||||
timeout=_REQUEST_TIMEOUT,
|
||||
) as r:
|
||||
creator = (await r.json()).get("creator") if r.status == 200 else None
|
||||
except Exception:
|
||||
return False
|
||||
if user_id == creator:
|
||||
return True # MSC4289: creator heeft impliciet maximale macht
|
||||
users = d.get("users", {}) or {}
|
||||
default = int(d.get("users_default", 0) or 0)
|
||||
pl = int(users.get(user_id, default) or 0)
|
||||
|
|
@ -368,7 +382,10 @@ class RoomsOverviewPlugin(Plugin):
|
|||
@handle_rooms.subcommand(name="refresh", help="Valideer de index nu (moderator+)")
|
||||
async def refresh_index(self, evt: MessageEvent) -> None:
|
||||
if not await self._is_mod(evt.room_id, evt.sender):
|
||||
await evt.reply("Geen permissie: moderator of hoger.")
|
||||
await evt.reply("Geen permissie: moderator of hoger vereist.")
|
||||
return
|
||||
removed, total = await self._validate_all()
|
||||
await evt.reply(f"Index gecontroleerd: {total - removed} rooms over, {removed} verwijderd (bestonden niet meer).")
|
||||
await evt.reply(
|
||||
f"Index gecontroleerd: {total - removed} rooms over, "
|
||||
f"{removed} verwijderd (bestonden niet meer)."
|
||||
)
|
||||
Loading…
Reference in a new issue