Dutch command names: !kamer with subcommands over/voegtoe/wijzig/verwijder/ververs/hulp; English names kept as aliases; v3.0.0

This commit is contained in:
Eddy de Vink 2026-09-06 15:15:06 +02:00
commit fe149713f9
3 changed files with 56 additions and 50 deletions

View file

@ -1,6 +1,6 @@
maubot: 0.1.0
id: nl.roomsoverview
version: 2.4.1
version: 3.0.0
license: MIT
modules:
- roomsoverview

Binary file not shown.

View file

@ -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 <room> <veld>=<waarde>`.
"""Parse `!kamer wijzig <room> <veld>=<waarde>`.
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 <room-id-of-alias>`."
"De kamer-index is nog leeg. Moderators kunnen kamers toevoegen met "
"`!kamer voegtoe <room-id-of-alias>`."
)
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 <zoekterm ...>` — zoek rooms op naam, alias en/of "
"omschrijving (bijv. `!rooms over linux`); alle termen moeten "
"* `!kamer over <zoekterm ...>` — 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 <room-id of #alias>` — voeg een room toe aan de index\n"
"* `!rooms edit <room-id of #alias> <veld>=<waarde>` — wijzig een "
"veld van een room\n"
"* `!rooms remove <room-id of #alias>` — verwijder een room uit de index\n"
"* `!rooms refresh` — controleer of rooms nog bestaan en vul "
"* `!kamer voegtoe <room-id of #alias>` — voeg een kamer toe aan de index\n"
"* `!kamer wijzig <room-id of #alias> <veld>=<waarde>` — wijzig een "
"veld van een kamer\n"
"* `!kamer verwijder <room-id of #alias>` — 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 <zoekterm ...>",
help="Zoek kamers op naam, alias of omschrijving: !kamer over <zoekterm ...>",
)
@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 <zoekterm ...>` (bijv. `!rooms over linux`).\n"
"Gebruik: `!kamer over <zoekterm ...>` (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 <room-id of #alias> (moderator+)",
name="voegtoe",
aliases=["add"],
help="Voeg een kamer toe aan de index: !kamer voegtoe <room-id of #alias> (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 <room-id of #alias> "
name="wijzig",
aliases=["edit"],
help="Wijzig een veld van een kamer: !kamer wijzig <room-id of #alias> "
"<name|topic|alias>=<waarde> (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 <room-id-of-alias> <name|topic|alias>=<waarde>`\n"
"Gebruik: `!kamer wijzig <room-id-of-alias> <name|topic|alias>=<waarde>`\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 <room-id of #alias> (moderator+)",
name="verwijder",
aliases=["remove"],
help="Verwijder een kamer uit de index: !kamer verwijder <room-id of #alias> (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."
)