From 812f30d3332c77f4a7309767a3210e9badb40e5b Mon Sep 17 00:00:00 2001 From: Eddy de Vink Date: Sat, 5 Sep 2026 00:17:39 +0200 Subject: [PATCH] Add !rooms edit subcommand: moderators can change name/topic/alias of a room record; v2.3.0 --- maubot.yaml | 2 +- roomsoverview.mbp | Bin 7558 -> 8256 bytes roomsoverview.py | 71 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/maubot.yaml b/maubot.yaml index 3548c09..c38062b 100644 --- a/maubot.yaml +++ b/maubot.yaml @@ -1,6 +1,6 @@ maubot: 0.1.0 id: nl.roomsoverview -version: 2.2.1 +version: 2.3.0 license: MIT modules: - roomsoverview diff --git a/roomsoverview.mbp b/roomsoverview.mbp index 34ecd241db1c9d48655cbe69dc017c9567457ce3..bdbe11f2174c903d52e79fa580d5110c55d52635 100644 GIT binary patch delta 7644 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 delta 6903 zcmZYERa6uVfCb>8yBq25mhK!F8itfc9J*6*=tf!z=@1yYySuwf5G03gg+2d1?%vmX z?!$fldSxRepxPiLWMTjSfDYJ-Wio38*)x9y001)p000X>1#q_Vws!U6@wakz0_$S{ zkaYI49CY`x9K8Lo00_u;2mrwUj=>rr%rHLutr_-1L{#t0cV0RsY7YX#Y)DT)mbriz z4w3@c$jfJrph-%{r7}vtS@Iuh`~fj>8dw{8BtFDniXZZSaEaQnF_DGMH3hN+XdW%Lj>-;un+XllsY=6I+W{C1hp)!$^FFz?^B7q87&f3 z3Z9h~mACuqmQfLjR%4mW7L5i)O(_5X0y6*rA3&9gKt}|{03ZSPvK-X@|B15?ryd(> z9@p7;r4A<;lmllft3;WmJI!2cd1(+RIrI4+g);Uao`^GY9Q`~4+R zW0})J@54wp?@!@bRmJ6-8*#NEO=0oxa|{}W5*0zcD+_E>CfzqHo)q`1F+f6Tvi$_~ z1rLeOeF`&V?$b5zP!Kku;~T|wo%JEE$t`|FLkL=)DMWs#*m1B%$zeI-(u0ENN%8b< z4F>N{du3dc$o`?2ht;+Yd<5+dqbVDB3`U-vZdsCBksFIAfA?XGADN2b3Yu5P$l^|1 z`iS0D*QFuD_L}?jFtn3APwU6n+}Pu-b-!}v>KT#+;!h%@en<{9%RbEmdh0Z^E+!`B zwVm^7A9zTWxRaPzFd_p#KdU5h)Qs)y>k@#KHZ?TdM5$p(ka`-K5@hEBH;v{o6XT1t z3k_)eIL=?ydRB)smjc-PyH1@l6b)mqr~CYIMQp&rglG}n58^y% z6_x8qHMT=$zkrDv!_eGX-%l#6FP~&;p%ibkjzY|#60 zy}6FIXHn4l&~$pau#=0+DJJqA^J2%fL^887@XL8P)#~6O_vzpOTN=*;H5`=d)u>jK z?j@0n!jKWW>R#lXVP`k%G$e)h%`ad}PEpFmLAIe}CUp_Py#r*lBw;#GEUd9_8?`U; zLN-El|CrA z<*r5M6ImVS>W4X7vE?uIx$I_r=@vkaYzTMbvn2a8;xwQ@x;hH0qRpODSB*r{Wg-(N zW1s>+Vh4XjfqqSBfi!g5b%^UD@EaEE*SaqhK$pobQ7e2W z)=d;TB_%eq$}s!Ul9@pIuEp+_j;)VwD)N)Yh}sOAYp=iPB}ApVMg8MoAy`!gzfnAD z;{!A1^qJVvNRTpan6ItP8B~76tP=5uPqtl#U+QHE;ODu+Khv#%g;XlBvCG>8rw7{5 zMJ=EX(_`9ur&dY@a1R7OikA^0Hn_R}Q*D(K+S#hVaI&d0xFn-gHRKxgre~Vp$mxW7BtDo^386 zSAtzJeA39+P!E?m?W>@_rD^WH%9`6Pp@bsUTbN}lbJ^7aNxz0uF>D9dVB4bKXkx>P zq^1`_E;RFXld2;TdUWOaWBm)rfSOIC`t7zAG660T7J#6ydRb-@*q6=I>P|9yyJiZ! zMA2a916!h7M&Fps=y8E_o5yuX-12c%klPBo);A2Hw@ZFk-S7C%)L+2hBvvUWJLtD3 zq{KRFA!TA#Sn%_{X@fDAD72x~fS9ZXrOwtevgPEc^TsXL~XmP$^r1X@P zS+@?j;$D_BN^RR&t{3y7h{(jU-!44zn5G=J7y(xguzba zu5JN6^tQ^~)WRMOr8wV7sc$jXAzote>X@J|eW^&A`0sht3M~j5G4O?E@BLnarEHnE zY^x8T0)d|<1aCM%UUY7JdkiX(i(nU0j(`qSJr}r?=T>0X?QP@h!dA#&#Z~0^Gj%+) zp)kRNmj_iY2z$}{mQ`cMj{h4^@QQ54I{1MR3>Iu+vt)l%kB@iyb>b7|BGqM{JP2p! zs*e@7WIr+=_bL!At|xvzQU-O}4dZBD`0OH6Ia(t%J%>#-APhD4;Xu{@_{ehMx&)7y z79GQY3~IPVN-z8R;6dfPdE#!3huy(BnPVi+}fpM2AmewmB;$eu!vj6S6qhwC!e z^KxwdeS6FBPiJ7AX?hilHsmaB_Lew6w;`<8*VFNRhn#@k!LO(78y_0AlNfu%r=H2v zWLlv)0%@iVHX(W}+9l-RMekAd)Nx|`-&Uv&nzzXP9dfI9uh3PFz$LFa?UQ&W{enVu z1*r}+f|5g^B3OQ0ak1eAUnf#lKkez;m@ELo9BQGn``$XU6t{tdH&-=ei~PVgJQ7KQKaRp&le09U;q>m~}Ezf)s2N7J<-1f%H?yqb9c&-g7lFa^B+ zc{7C6sdOX;7(o$_W+LACXV?nfT;xi>oLanY1?Vt5G9z+P*f>u9q3@9H!F|GHD65Wz zRD{3B!R}FU-MOHpr53-qpSjnnbf$Pz_zRRWX?Y^n8t&I9dd%va*j0|OKW}6Q$^_Up z4Yf}8EEc}j95^?=&jKeFfx)~TS9A(BIy~|pRJA_tAw!ct30s*bR>|emyB60juw8Qo z1RzopdnQQ<8qP5v#qkRFf2wigoSc7O)|N4#QPTP`ILe{X|N54nZRV-(=I7h(%rbs< zM;%>gMJXdvWo&+Sm`YOHc<{?3Lb_?V5^(>fkD(v;H{nw6=$CoC$5>|ub#N`57{GXl zm^I5+m@Z9pWUUOeK>I{ zsjXUZ#fSsFI&dq* z1ggs_RcEeTx2>e*q@+{qGgydGKkFI8nOUp~LUv3vu6ge_9fvXZcf)A~`OV+)c+Nab zRvY*0rdIi*<%ifd9Zbvo-}s^VQ-Yg?!CJxLT$d~5MzQ$al$0g!gg^vCcDI&K)PDs5&GVyyvMbyF*0YZa6Mq^qLhn!mmM)$W}u7J=@?d!Y|M`t?H z^7?OAV#y(`oTJfmUZ>#kC^Tf}{;oXvGQqCO75caPSS-y}!|Upt?OWIKcrUwXzc!tW zaks5_HNT}m6gC&UrREX9ZP@q|13fs*DMIK=+QE0c%F49Ja?=J6Z|~D8;)fd(Rw%Xe zKnk)mNdKnrVO3$bl%Q1fn#h{DTHWycBmK7uLo_)8D-(k;ubm>+8@i&;e8ei+7tRMfY}?1qKZX0x&CDg6?C zAqq>&niKNg2f(LRhf&M8$P}!wPqf#86%1+qDqse$lB7eR3n$HbvwN9H1-@3y?V1k zcQ!ZlWWQG-#q2w5U>`q6_gS@YXrk56H~NqNI@4$AT;lgzJ2F-0VIpiz+=I(Bd>iLD zmg8GE6`}n``380D#V6CdlhDzJx5zVP-*)EisX>mvr6ZG*Qir$;0wfv=>WKfe0B38_x-b|E0 zgh|~9E=L&&1!XsRaEO6p^hpvMU(?^lL))I<+oAfNH+UJcp_hj|nCqY&k+93S#hT@uO?f5=mtY2eUB5myzE@q81?e&D#`Hz}4YV#;5=H+5wVgfh z_Ut{bw-4&ex(*kK$71H#zm_PjjR8?{Ll`u`0J&Brv9dWe1-gz!c@#@ni!F($z0xMf z;CIFo3m3$oG#oNqAL;FSXS1V(B@j8e%jpflsk9G{Of(2Y0Ilytp%jpwaHo9vSg)*O zu!^|`4|i0{VzfI1l+=ORr;27@4cdJDmzsV5#s7n#Z>*?@`V^pvG7S;=(=sib-LFN; zF~tiDRpNc7h2BX0v|do!K+X-YWobq1Lb@UL5aioZaUfHDAFvpV5xpWUvgO4&_!1k1 z)BR6!{vB_gdre8S>d6JKcc`W5U9%qc8cCc)MXK+g-m2TXic!VLUb`d2Qhbbj_EA>g z7`k=bx4@G0b$M$N9%93Cd-G%jv*f2;EF(dm5+MrTSSX(@;~rdx$`MSQzeIIsj%0g? zVlz8}mPp7zI@*#kHyv2{+JgM={BMR~NtZoL8EXyeAKJ|_hi|uBBte&Ko`-mNt8T)F z&q)mnaD{qBPfrU}niOOyrmHqXJ0e(d*J(b3xww=5yn04)yIGE{)Tc50l-NmR;u9Ur zdJ3iEWhg{HZYgXYLp(S{lTz%c!%HBvw>B$yGdYEgseJP+_!2`6t(|U9?BY+5mi5=r^dhL{L+2o`<^3kT;5A&QaKbze;6(0wOr zvV$nm9t^zxHxDaZhmaJ}aoQd?s@1i@HMgev8R~+)IgWV76C}qfiiI2j@x<6K4dPI2 zVq~i7&bW1?MWr>Z^E;g$x*t$>;F02{2{7Ip5E)1`KBC&C_&sd!_!(X^B>Gk2UX6p% z0p2uOkFg8!eV7tHfsOZ^*CG-O|K?fA3emZ!D*PmT^>|}m}3Er`z@ExH&7JR2AetuiE9_Ciuf|Ekx~A&eqE8`T+i$S zG%3R74^dX;u3C&hk_Zo5dl1Uh(%shq)`-sQ-$v%u%GbW=xfu>02 z1M^m^{qn=d*2XK~TKx8Jtt+Lz(GI%>NRaXR!)gRzpgWjD*V%=!nAiPNF)!iw8st6A zCP$1ax1N*?a6ts(*J|#x(Q-4qDyW5h_}kkZ@7u6tP`-cfehHbGwI${f3x-%{$hA-H zwnaI_ zdLpsrhn2-16a?W6D{mN?UqYNExErt6&)6ECueY+sU`16Z3eVWS2{<0jRJzjp7Ukmo z4*DKcG%X)-?*iqds)8#kp|wTrUP6!%tD)WS6#nMf7KeUQ|ApGFY)s{ky*U@T%>tXc z1y%9E+an?ObhyIfxLF1#903S0k6TF~dMeuO>{6aO>jBpr&`hY0!?mLl@B2NF-L^Qo zyUQ`o#c*P5b+B*VZAv;es$Bh;Og<_3S>CWQnZeye0ol2c?k0-@de-xrx|Q~_BY=sn zOa@(>@L*O;P)twjaJmR$?lAk zgk8Do;f0SV85Tp(&g84J@;;%-pEHT#qaL)B$av{$ zr|FMIfX%hd!BG}n^+4M&9KU~=*0Vv6G7bCD5MF& z>RV-gDJC~e5!=3@zht+@9M|BohUu%bTXv}bFw7n@!BL7396mY8VVu!ngcKI@m*F;h zD2JCw#JmqaN8uiAd^u7Obwxs^KoBk~lmKyAh06L2yGpG!5t1`jz4AO?UsSADDxad7-$H%$MC zu>DR5@V9WV(PE_d6_AWtmTTLE%JMP2Tf}g*sf>(jJ5nYDNJPd_-G60cUT1uSsr_~b z+uuL6(0IDN4yH9Jfzvvc&g|JGm3^^s#on~9CxxJ~MRz}K!m-m6+rMyDvPaTo?$_<; z9Dg4^yWbI%Gf+WU;qHl0ys|3((lI$qKDWdIic)?ebcV%zYk=FLa9E!BAJ$01cJvw) z+>O=obB=*)>gB|7GGIOdmJBBU1O0y}pk+OcPtm<4KNFpHEyVl541{qrjucowj|2)A z{41alU`~TF3n(W^6x^_y%`U+{n z13ciE#vdFDuG>j2w(0zT3#YS9H((;ezM@da%by|YgpwzzTJI7`c?#PCaMXis&zJS2 z(#6B46SN~+vm<|Mj3@o`r7)?XiiLIVMh2O{wEX~(Q}wh9TbXUk(+%1+fqB-HYd!Q6 zw_ECk{P=eN=SsgKDcD|mX0c{4FbiVK`CS&3ysA3_L-)Jt!5KR`RO}!LeXGy^wFt`S z8$P=?q8f0vmK&S%*g`DneZ6k{eao$;v#dk6V>)q?Y+d@+ITNpA-nHkV`{k&&z(z8*LjL)^ld=o7d0Zl~cA;kZVQCb%Z zb@(Z|)%o)bDEc>RE9(~O;JK>vOM*|W0p{IR;dl~Is+mY40^eP1@9O*y3T+`CSS5G| zxZ?m&mA!EOt3-jzPScn zP~yR}PU#$juj;m}lx0}gjk}TS+4Of88)QL0VqyH$^b}qfe1;#1HOx@W#OBBP^X~|F zBLqold2J&zzkM+mz+#5%6`QtX@=fL`$ZW6M(poh~K5VHp8IKhy9)(J^;?wly0nn?z ztR&+g?cPFD6y5=nmNq!%6T~se73he#8MH?Dn^Ii0K?sO6NdHHsQsrsc|1+pm7g}+I oh17Cd5!(OnJmi4?f&c&jf None: ) +def _parse_edit_args(args: str) -> Optional[Tuple[str, str, str]]: + """Parse `!rooms edit =`. + + Retourneert (room_ref, field, value) of None bij ongeldige vorm. + field is genormaliseerd naar lowercase; value mag leeg zijn (wissen). + """ + parts = args.strip().split(" ", 1) + if len(parts) != 2: + return None + room_ref, kv = parts + if "=" not in kv: + return None + field, _, value = kv.partition("=") + field = field.strip().lower() + return room_ref, field, value.strip() + + class Config(BaseProxyConfig): def do_update(self, helper: ConfigUpdateHelper) -> None: helper.copy("refresh_interval_minutes") @@ -515,7 +532,7 @@ class RoomsOverviewPlugin(Plugin): @command.new( name="rooms", - help="Toon de room-index; subcommand: add, remove, refresh", + help="Toon de room-index; subcommand: add, edit, remove, refresh", require_subcommand=False, ) async def handle_rooms(self, evt: MessageEvent) -> None: @@ -566,6 +583,58 @@ class RoomsOverviewPlugin(Plugin): f"([{target}](https://matrix.to/#/{target}))" ) + @handle_rooms.subcommand( + name="edit", + help="Wijzig naam/topic/alias van een room (moderator+)", + ) + @command.argument("args", pass_raw=True, required=True) + async def edit_room(self, evt: MessageEvent, args: str) -> None: + if not await self._is_mod(evt.room_id, evt.sender): + await evt.reply("Geen permissie: moderator of hoger vereist.") + return + parsed = _parse_edit_args(args) + if parsed is None: + await evt.reply( + "Gebruik: `!rooms edit =`\n" + "Lege waarde wist het veld (bijv. `alias=`)." + ) + return + room_ref, field, value = parsed + field_ok = {"name": "display_name", "topic": "topic", "alias": "canonical_alias"} + if field not in field_ok: + await evt.reply("Veld moet `name`, `topic` of `alias` zijn.") + return + if field == "alias" and value and not value.startswith("#"): + await evt.reply("Alias moet beginnen met `#` (bijv. `#mijn-room:server.nl`).") + 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.") + return + new_value = value or None # lege waarde wist het veld (NULL) + column = field_ok[field] + result = await self.database.execute( + f"UPDATE roomsoverview_rooms SET {column} = $2, last_checked = $3 " + "WHERE room_id = $1", + room_id, + new_value, + int(time.time()), + ) + if result != "UPDATE 1": + await evt.reply(f"Room `{room_id}` stond niet in de index.") + return + row = await self.database.fetchrow( + "SELECT display_name, canonical_alias FROM roomsoverview_rooms " + "WHERE room_id = $1", + room_id, + ) + label = row["display_name"] or row["canonical_alias"] or room_id + 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}`." + ) + @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: