matrix-moderation-widget

A widget for moderating with mjolnir. Highly WIP. Use at your own risk!
git clone git://archive.git.mtrnord.blog/MTRNord/matrix-moderation-widget.git
Log | Files | Refs | README | LICENSE

commit 26ae993a83cf0f0f7acc7f3179ee8c7899fd43a2
parent 2cf4d6e677f45805df7cfbb7606622a3a703aced
Author: MTRNord <mtrnord1@gmail.com>
Date:   Thu,  3 Mar 2022 17:00:43 +0100

Fix logic for banform and also filter banlist

Diffstat:
Msrc/components/Banlist.tsx | 28+++++++++++++++++++++++-----
Msrc/components/forms/BanForm.tsx | 2+-
Msrc/windowExt.ts | 2+-
3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/components/Banlist.tsx b/src/components/Banlist.tsx @@ -1,13 +1,17 @@ import { PureComponent } from 'react'; import { + CanonicalAliasEvent, + CANONICAL_ALIAS, + DEV_NORDGEDANKEN_MJOLNIR_BANLISTS, MembershipEvent, + MJjolnirBanlists, M_POLICY_RULE_SERVER, M_POLICY_RULE_SERVER_ALT, M_POLICY_RULE_SERVER_OLD, M_POLICY_RULE_USER, - M_POLICY_RULE_USER_ALT, - M_POLICY_RULE_USER_OLD, - ServerRuleEvent, + M_POLICY_RULE_USER_ALT, + M_POLICY_RULE_USER_OLD, + ServerRuleEvent, UserRuleEvent } from '../windowExt'; @@ -46,10 +50,24 @@ class BanList extends PureComponent<Props, State> { const sender = new Set([...user_rules_all.map(element => element.sender), ...server_rules_all.map(element => element.sender)]); const memberships = await window.widget_api.readStateEvents("m.room.member", 250_000_000_000, undefined, list_rooms) as MembershipEvent[]; const memberships_needed = memberships.filter(member => sender.has(member.state_key)); + const banlist_codes = await window.widget_api.readStateEvents(DEV_NORDGEDANKEN_MJOLNIR_BANLISTS, 250_000_000_000, undefined, [this.state.roomId ?? "*"]) as MJjolnirBanlists[]; + const aliases = await window.widget_api.readStateEvents(CANONICAL_ALIAS, list_rooms.length, undefined, list_rooms) as CanonicalAliasEvent[]; this.setState({ - user_rules: user_rules_all, - server_rules: server_rules_all, + user_rules: user_rules_all.filter(rules => { + if (banlist_codes.length > 0) { + return banlist_codes.some(banlist_codes_event => banlist_codes_event.content?.banlists.has(aliases.find(aliases_event => aliases_event.room_id === rules.room_id)?.content?.alias ?? "") || banlist_codes_event.content?.banlists.has(rules.room_id)); + } else { + return true; + } + }), + server_rules: server_rules_all.filter(rules => { + if (banlist_codes.length > 0) { + return banlist_codes.some(banlist_codes_event => banlist_codes_event.content?.banlists.has(aliases.find(aliases_event => aliases_event.room_id === rules.room_id)?.content?.alias ?? "") || banlist_codes_event.content?.banlists.has(rules.room_id)); + } else { + return true; + } + }), memberships: memberships_needed }); } diff --git a/src/components/forms/BanForm.tsx b/src/components/forms/BanForm.tsx @@ -59,7 +59,7 @@ class BanForm extends PureComponent<Props, State> { for (const event of aliases) { let result_known = true; if (banlist_codes.length > 0) { - if (banlist_codes.some(known_lists_event => known_lists_event.content?.banlists.keys.includes(event.room_id) || known_lists_event.content?.banlists.keys.includes(event.content?.alias ?? ""))) { + if (banlist_codes.some(known_lists_event => known_lists_event.content?.banlists.has(event.room_id) || known_lists_event.content?.banlists.has(event.content?.alias ?? ""))) { result_known = true; } else { result_known = false; diff --git a/src/windowExt.ts b/src/windowExt.ts @@ -80,6 +80,6 @@ export type MJjolnirBanlists = { event_id: string; room_id: string; content?: { - banlists: Record<string, string>; + banlists: Map<string, string>; }; }; \ No newline at end of file