Fix !rooms top-level (require_subcommand=False), pass_raw room arg, creator via create-event sender; v2.0.3
This commit is contained in:
parent
9a76ea1a8b
commit
78820450e1
3 changed files with 21 additions and 7 deletions
|
|
@ -1,6 +1,6 @@
|
|||
maubot: 0.1.0
|
||||
id: nl.roomsoverview
|
||||
version: 2.0.1
|
||||
version: 2.0.3
|
||||
license: MIT
|
||||
modules:
|
||||
- roomsoverview
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -205,8 +205,10 @@ class RoomsOverviewPlugin(Plugin):
|
|||
async def _is_mod(self, room_id: str, user_id: str) -> bool:
|
||||
"""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.
|
||||
Room v12+ (MSC4289): de creator heeft impliciet de maximale macht en
|
||||
mag/hoeft niet in de users-map voor te komen (het create-event heeft dan
|
||||
ook geen creator-veld meer). Creator = sender van m.room.create, te
|
||||
vinden via de bulk-state-query (die wél de sender per event bevat).
|
||||
"""
|
||||
base = self._base_url()
|
||||
h = self._headers()
|
||||
|
|
@ -220,15 +222,21 @@ class RoomsOverviewPlugin(Plugin):
|
|||
if r.status != 200:
|
||||
return False
|
||||
d = await r.json()
|
||||
creator = None
|
||||
async with self.http.get(
|
||||
f"{base}/_matrix/client/v3/rooms/{rid}/state/m.room.create",
|
||||
f"{base}/_matrix/client/v3/rooms/{rid}/state",
|
||||
headers=h,
|
||||
timeout=_REQUEST_TIMEOUT,
|
||||
) as r:
|
||||
creator = (await r.json()).get("creator") if r.status == 200 else None
|
||||
if r.status == 200:
|
||||
evs = await r.json()
|
||||
for ev in evs:
|
||||
if ev.get("type") == "m.room.create" and ev.get("sender"):
|
||||
creator = ev["sender"]
|
||||
break
|
||||
except Exception:
|
||||
return False
|
||||
if user_id == creator:
|
||||
if creator and 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)
|
||||
|
|
@ -316,12 +324,17 @@ class RoomsOverviewPlugin(Plugin):
|
|||
header = f"**Rooms overzicht ({total} rooms getoond, deel {idx}/{len(chunks)}):**\n\n"
|
||||
await evt.respond(header + "\n".join(chunk), markdown=True)
|
||||
|
||||
@command.new(name="rooms", help="Toon de room-index; subcommand: add, remove, refresh")
|
||||
@command.new(
|
||||
name="rooms",
|
||||
help="Toon de room-index; subcommand: add, remove, refresh",
|
||||
require_subcommand=False,
|
||||
)
|
||||
async def handle_rooms(self, evt: MessageEvent) -> None:
|
||||
await evt.mark_read()
|
||||
await self._send_list(evt)
|
||||
|
||||
@handle_rooms.subcommand(name="add", help="Voeg een room toe (moderator+)")
|
||||
@command.argument("room", pass_raw=True, required=True)
|
||||
async def add_room(self, evt: MessageEvent, room: str) -> None:
|
||||
if not await self._is_mod(evt.room_id, evt.sender):
|
||||
await evt.reply("Geen permissie: moderator of hoger vereist.")
|
||||
|
|
@ -363,6 +376,7 @@ class RoomsOverviewPlugin(Plugin):
|
|||
)
|
||||
|
||||
@handle_rooms.subcommand(name="remove", help="Verwijder een room (moderator+)")
|
||||
@command.argument("room", pass_raw=True, required=True)
|
||||
async def remove_room(self, evt: MessageEvent, room: str) -> None:
|
||||
if not await self._is_mod(evt.room_id, evt.sender):
|
||||
await evt.reply("Geen permissie: moderator of hoger vereist.")
|
||||
|
|
|
|||
Loading…
Reference in a new issue