diff --git a/maubot.yaml b/maubot.yaml index 0d61d9d..d623741 100644 --- a/maubot.yaml +++ b/maubot.yaml @@ -1,6 +1,6 @@ maubot: 0.1.0 id: nl.roomsoverview -version: 2.4.1 +version: 3.0.0 license: MIT modules: - roomsoverview diff --git a/roomsoverview.mbp b/roomsoverview.mbp index 4dce937..3305d8e 100644 Binary files a/roomsoverview.mbp and b/roomsoverview.mbp differ diff --git a/roomsoverview.py b/roomsoverview.py index 1816032..4cb721e 100644 --- a/roomsoverview.py +++ b/roomsoverview.py @@ -98,7 +98,7 @@ async def upgrade_v3(conn: Connection, scheme: Scheme) -> None: def _parse_edit_args(args: str) -> Optional[Tuple[str, str, str]]: - """Parse `!rooms edit =`. + """Parse `!kamer wijzig =`. Retourneert (room_ref, field, value) of None bij ongeldige vorm. field is genormaliseerd naar lowercase; value mag leeg zijn (wissen). @@ -535,8 +535,8 @@ class RoomsOverviewPlugin(Plugin): rooms = self._sort_rooms(await self._list_rooms()) if not rooms: await evt.reply( - "De room-index is nog leeg. Moderators kunnen rooms toevoegen met " - "`!rooms add `." + "De kamer-index is nog leeg. Moderators kunnen kamers toevoegen met " + "`!kamer voegtoe `." ) return await self._send_cards( @@ -570,7 +570,7 @@ class RoomsOverviewPlugin(Plugin): found = await self._search_rooms(query) query_label = " ".join(query.split()) if not found: - await evt.reply(f"Geen rooms gevonden voor `{query_label}`.") + await evt.reply(f"Geen kamers gevonden voor `{query_label}`.") return await self._send_cards( evt, @@ -580,67 +580,70 @@ class RoomsOverviewPlugin(Plugin): ) async def _send_help(self, evt: MessageEvent) -> None: - """Uitgebreide Nederlandstalige handleiding voor !rooms.""" + """Uitgebreide Nederlandstalige handleiding voor !kamer.""" help_text = ( - "**!rooms** — overzicht van de room-index\n\n" - "Toont alle rooms als kaarten met naam, ledental, omschrijving " - "en een directe join-link. Ruimtes met een eigen icoon tonen die " - "naast de naam.\n\n" + "**!kamer** — overzicht van de kamer-index\n\n" + "Toont alle kamers als kaarten met naam, ledental, omschrijving " + "en een directe join-link. Kamers met een eigen icoon tonen die " + "naast de naam. De oude Engelse commando's (`!rooms`, `add`, " + "`edit`, `remove`, `refresh`, `help`) blijven als alias werken.\n\n" "**Basis:**\n" - "* `!rooms` — toon de volledige lijst (bij veel rooms verdeeld " + "* `!kamer` — toon de volledige lijst (bij veel kamers verdeeld " "over meerdere berichten)\n" - "* `!rooms over ` — zoek rooms op naam, alias en/of " - "omschrijving (bijv. `!rooms over linux`); alle termen moeten " + "* `!kamer over ` — zoek kamers op naam, alias en/of " + "omschrijving (bijv. `!kamer over linux`); alle termen moeten " "matchen\n\n" "**Subcommando's (moderator of hoger vereist):**\n" - "* `!rooms add ` — voeg een room toe aan de index\n" - "* `!rooms edit =` — wijzig een " - "veld van een room\n" - "* `!rooms remove ` — verwijder een room uit de index\n" - "* `!rooms refresh` — controleer of rooms nog bestaan en vul " + "* `!kamer voegtoe ` — voeg een kamer toe aan de index\n" + "* `!kamer wijzig =` — wijzig een " + "veld van een kamer\n" + "* `!kamer verwijder ` — verwijder een kamer uit de index\n" + "* `!kamer ververs` — controleer of kamers nog bestaan en vul " "ontbrekende avatars aan\n\n" - "**Veld bij edit:** `name` (naam), `topic` (omschrijving) of " + "**Veld bij wijzig:** `name` (naam), `topic` (omschrijving) of " "`alias` (adres). Een lege waarde wist het veld.\n\n" "**Voorbeelden:**\n" - "* `!rooms add #algemeen:mtux.nl`\n" - "* `!rooms edit #algemeen:mtux.nl name=Algemeen Overleg`\n" - "* `!rooms edit #algemeen:mtux.nl topic=` (wist de omschrijving)\n" - "* `!rooms remove #algemeen:mtux.nl`\n\n" - "Alleen moderators (macht ≥ 50) mogen rooms toevoegen, wijzigen " + "* `!kamer voegtoe #algemeen:mtux.nl`\n" + "* `!kamer wijzig #algemeen:mtux.nl name=Algemeen Overleg`\n" + "* `!kamer wijzig #algemeen:mtux.nl topic=` (wist de omschrijving)\n" + "* `!kamer verwijder #algemeen:mtux.nl`\n\n" + "Alleen moderators (macht ≥ 50) mogen kamers toevoegen, wijzigen " "of verwijderen. Iedereen kan de lijst bekijken." ) await evt.respond(help_text, markdown=True) @command.new( - name="rooms", - help="Toon de room-index als kaarten; subcommands: over (zoeken), add, edit, remove, refresh, help", + name="kamer", + aliases=["rooms"], + help="Toon de kamer-index als kaarten; subcommando's: over, voegtoe, wijzig, verwijder, ververs, hulp", require_subcommand=False, ) async def handle_rooms(self, evt: MessageEvent) -> None: await evt.mark_read() await self._send_list(evt) - @handle_rooms.subcommand(name="help", help="Toon deze handleiding") + @handle_rooms.subcommand(name="hulp", aliases=["help"], help="Toon deze handleiding") async def rooms_help(self, evt: MessageEvent) -> None: await self._send_help(evt) @handle_rooms.subcommand( name="over", - help="Zoek rooms op naam, alias of omschrijving: !rooms over ", + help="Zoek kamers op naam, alias of omschrijving: !kamer over ", ) @command.argument("terms", pass_raw=True, required=True) async def search_over(self, evt: MessageEvent, terms: str) -> None: if not terms.strip(): await evt.reply( - "Gebruik: `!rooms over ` (bijv. `!rooms over linux`).\n" + "Gebruik: `!kamer over ` (bijv. `!kamer over linux`).\n" "Zoekt op naam, alias en omschrijving; alle termen moeten matchen." ) return await self._send_search(evt, terms) @handle_rooms.subcommand( - name="add", - help="Voeg een room toe aan de index: !rooms add (moderator+)", + name="voegtoe", + aliases=["add"], + help="Voeg een kamer toe aan de index: !kamer voegtoe (moderator+)", ) @command.argument("room", pass_raw=True, required=True) async def add_room(self, evt: MessageEvent, room: str) -> None: @@ -649,11 +652,11 @@ class RoomsOverviewPlugin(Plugin): return room_id = room if room.startswith("!") else await self._resolve_alias(room) if not room_id: - await evt.reply(f"Room `{room}` kon niet gevonden worden.") + await evt.reply(f"Kamer `{room}` kon niet gevonden worden.") return info = await self._get_room_info(room_id) if info is None: - await evt.reply(f"Room `{room_id}` bestaat niet (of is niet meer bereikbaar).") + await evt.reply(f"Kamer `{room_id}` bestaat niet (of is niet meer bereikbaar).") return max_rooms = max(1, int(self.config.get("max_rooms", 300) or 300)) count = await self.database.fetchval( @@ -681,13 +684,14 @@ class RoomsOverviewPlugin(Plugin): ) target = info["alias"] or room_id await evt.reply( - f"Room toegevoegd: **{info['name'] or room_id}** " + f"Kamer toegevoegd: **{info['name'] or room_id}** " f"([{target}](https://matrix.to/#/{target}))" ) @handle_rooms.subcommand( - name="edit", - help="Wijzig een veld van een room: !rooms edit " + name="wijzig", + aliases=["edit"], + help="Wijzig een veld van een kamer: !kamer wijzig " "= (moderator+)", ) @command.argument("args", pass_raw=True, required=True) @@ -698,7 +702,7 @@ class RoomsOverviewPlugin(Plugin): parsed = _parse_edit_args(args) if parsed is None: await evt.reply( - "Gebruik: `!rooms edit =`\n" + "Gebruik: `!kamer wijzig =`\n" "Lege waarde wist het veld (bijv. `alias=`)." ) return @@ -712,7 +716,7 @@ class RoomsOverviewPlugin(Plugin): return room_id = room_ref if room_ref.startswith("!") else await self._resolve_alias(room_ref) if not room_id: - await evt.reply(f"Room `{room_ref}` kon niet gevonden worden.") + await evt.reply(f"Kamer `{room_ref}` kon niet gevonden worden.") return new_value = value or None # lege waarde wist het veld (NULL) column = field_ok[field] @@ -724,7 +728,7 @@ class RoomsOverviewPlugin(Plugin): int(time.time()), ) if result != "UPDATE 1": - await evt.reply(f"Room `{room_id}` stond niet in de index.") + await evt.reply(f"Kamer `{room_id}` stond niet in de index.") return row = await self.database.fetchrow( "SELECT display_name, canonical_alias FROM roomsoverview_rooms " @@ -735,12 +739,13 @@ class RoomsOverviewPlugin(Plugin): shown = new_value if new_value is not None else "(leeg)" field_name = {"name": "naam", "topic": "omschrijving", "alias": "alias"}[field] await evt.reply( - f"Room bijgewerkt: **{label}** — {field_name} is nu `{shown}`." + f"Kamer bijgewerkt: **{label}** — {field_name} is nu `{shown}`." ) @handle_rooms.subcommand( - name="remove", - help="Verwijder een room uit de index: !rooms remove (moderator+)", + name="verwijder", + aliases=["remove"], + help="Verwijder een kamer uit de index: !kamer verwijder (moderator+)", ) @command.argument("room", pass_raw=True, required=True) async def remove_room(self, evt: MessageEvent, room: str) -> None: @@ -749,19 +754,20 @@ class RoomsOverviewPlugin(Plugin): return room_id = room if room.startswith("!") else await self._resolve_alias(room) if not room_id: - await evt.reply(f"Room `{room}` kon niet gevonden worden.") + await evt.reply(f"Kamer `{room}` kon niet gevonden worden.") return result = await self.database.execute( "DELETE FROM roomsoverview_rooms WHERE room_id = $1", room_id ) if result == "DELETE 1": - await evt.reply(f"Room verwijderd: `{room_id}`.") + await evt.reply(f"Kamer verwijderd: `{room_id}`.") else: - await evt.reply(f"Room `{room_id}` stond niet in de index.") + await evt.reply(f"Kamer `{room_id}` stond niet in de index.") @handle_rooms.subcommand( - name="refresh", - help="Controleer of rooms bestaan en vul ontbrekende avatars aan (moderator+)", + name="ververs", + aliases=["refresh"], + help="Controleer of kamers bestaan en vul ontbrekende avatars aan (moderator+)", ) async def refresh_index(self, evt: MessageEvent) -> None: if not await self._is_mod(evt.room_id, evt.sender): @@ -770,7 +776,7 @@ class RoomsOverviewPlugin(Plugin): removed, total = await self._validate_all() filled = await self._enrich_avatars_online() await evt.reply( - f"Index gecontroleerd: {total - removed} rooms over, " - f"{removed} verwijderd (bestonden niet meer). " - f"{filled} avatar(s) aangevuld." +f"Index gecontroleerd: {total - removed} kamers over, " + f"{removed} verwijderd (bestonden niet meer). " + f"{filled} avatar(s) aangevuld." ) \ No newline at end of file