From b479aae6dbb5aa2fa9ecbfc9c151548f2367c69d Mon Sep 17 00:00:00 2001 From: missytake Date: Sat, 7 Oct 2023 15:39:15 +0200 Subject: [PATCH] method to check whether a chat is a relay group --- src/teams_bot/bot.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/teams_bot/bot.py b/src/teams_bot/bot.py index 9fd19bd..995bb6c 100644 --- a/src/teams_bot/bot.py +++ b/src/teams_bot/bot.py @@ -51,11 +51,7 @@ class RelayPlugin: else: logging.debug("Ignoring message, just admins chatting") - elif message.chat.get_contacts() == self.account.get_chat_by_id( - get_crew_id(self.account) - ).get_contacts() and message.chat.get_name().startswith( - "[%s] " % (self.account.get_config("addr").split("@")[0],) - ): + elif self.is_relay_group(message.chat): if message.quote.get_sender_contact() == self.account.get_self_contact(): """:TODO forward to original sender""" else: @@ -65,6 +61,19 @@ class RelayPlugin: logging.debug("Forwarding message to relay group") """:TODO forward message to relay group""" + def is_relay_group(self, chat: deltachat.Chat) -> bool: + """Check whether a chat is a relay group.""" + if not chat.get_name().startswith("[%s] " % (self.account.get_config("addr").split("@")[0],)): + return False # all relay groups' names begin with a [tag] with the localpart of the teamsbot's address + if chat.get_messages()[0].get_sender_contact() != self.account.get_self_contact(): + return False # all relay groups were started by the teamsbot + if chat.is_protected(): + return False # relay groups don't need to be protected, so they are not + for crew_member in self.account.get_chat_by_id(get_crew_id(self.account)).get_contacts(): + if crew_member not in chat.get_contacts(): + return False # all crew members have to be in any relay group + return True + def get_crew_id(ac: deltachat.Account, setupplugin: SetupPlugin = None) -> int: """Get the group ID of the crew group if it exists; warn old crews if they might still believe they are the crew.