From e898955ec2f0fbd338571e6daebbcee676c1cb60 Mon Sep 17 00:00:00 2001 From: Astra Date: Thu, 5 Dec 2024 01:11:57 +0100 Subject: [PATCH] Add support for topics --- supportbot/bot.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/supportbot/bot.py b/supportbot/bot.py index c43ebc4..cfb8bd5 100644 --- a/supportbot/bot.py +++ b/supportbot/bot.py @@ -19,12 +19,13 @@ db = None bot_self_id: int = None target_group: Optional[int] = None +message_thread_id: Optional[int] = None welcome_text: str = None reply_text: str = None integration_fmt: Optional[str] = None def init(config: dict, _db): - global bot, db, bot_self_id, target_group, welcome_text, reply_text, integration_fmt + global bot, db, bot_self_id, target_group, message_thread_id, welcome_text, reply_text, integration_fmt if not config.get("bot_token"): logging.error("No telegram token specified.") exit(1) @@ -35,6 +36,8 @@ def init(config: dict, _db): db = _db if config.get("target_group"): target_group = int(config["target_group"]) + if config.get("message_thread_id"): + message_thread_id = int(config["message_thread_id"]) welcome_text = config["welcome_text"] reply_text = config["reply_text"] integration_fmt = config.get("integration_fmt") @@ -178,17 +181,17 @@ def handle_group(ev: TMessage): if user.banned_until is not None and (user.banned_until >= now and now - user.last_messaged >= BAN_NOTSENT_WARNING): msg = "Message was not delivered, unban recipient first." - return callwrapper(lambda: bot.send_message(target_group, msg)) + return callwrapper(lambda: bot.send_message(target_group, message_thread_id=message_thread_id, text=msg)) # deliver message res = callwrapper(lambda: bot.copy_message(user_id, ev.chat.id, ev.message_id)) if res == "blocked": - callwrapper(lambda: bot.send_message(target_group, "Bot was blocked by user.")) + callwrapper(lambda: bot.send_message(target_group, message_thread_id=message_thread_id, text="Bot was blocked by user.")) def handle_group_command(ev: TMessage, user_id: int, c: str, arg: str): if c == "info": msg = format_user_info(db_get_user(user_id)) - return callwrapper(lambda: bot.send_message(target_group, msg, parse_mode="HTML")) + return callwrapper(lambda: bot.send_message(target_group, message_thread_id=message_thread_id, text=msg, parse_mode="HTML")) elif c == "ban": delta = parse_timedelta(arg) if not delta: @@ -199,7 +202,7 @@ def handle_group_command(ev: TMessage, user_id: int, c: str, arg: str): msg = "User banned until %s." % format_datetime(until) with db_modify_user(user_id) as user: user.banned_until = until - return callwrapper(lambda: bot.send_message(target_group, msg)) + return callwrapper(lambda: bot.send_message(target_group, message_thread_id=message_thread_id, text=msg)) elif c == "unban": msg = None with db_modify_user(user_id) as user: @@ -208,7 +211,7 @@ def handle_group_command(ev: TMessage, user_id: int, c: str, arg: str): else: user.banned_until = None msg = "User was unbanned." - return callwrapper(lambda: bot.send_message(target_group, msg)) + return callwrapper(lambda: bot.send_message(target_group, message_thread_id=message_thread_id, text=msg)) def handle_private(ev: TMessage): if target_group is None: @@ -253,9 +256,9 @@ def handle_private(ev: TMessage): if now - user.last_messaged >= ID_REMIND_DURATION: msg = "---------------------------------------\n" msg += format_user_info(user) - callwrapper(lambda: bot.send_message(target_group, msg, parse_mode="HTML")) + callwrapper(lambda: bot.send_message(chat_id=target_group, message_thread_id=message_thread_id, text=msg, parse_mode="HTML")) def f(user_id=user.id): - ev2 = bot.forward_message(target_group, ev.chat.id, ev.message_id) + ev2 = bot.forward_message(chat_id=target_group, from_chat_id=ev.chat.id, message_id=ev.message_id, message_thread_id=message_thread_id) db["m%d" % ev2.message_id] = user_id logging.debug("delivered msg from %s -> id = %d", user, ev2.message_id) callwrapper(f)