From 819d9a5e052a69b221e26f2bd639b1f958c7154e Mon Sep 17 00:00:00 2001 From: Alexey Marchenko Date: Sat, 6 Jul 2024 23:02:37 +0300 Subject: [PATCH] send to telegram group thread --- sportorg/gui/dialogs/telegram_dialog.py | 7 +++++++ sportorg/libs/telegram/telegram.py | 8 +++++++- sportorg/modules/telegram/telegram.py | 13 +++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/sportorg/gui/dialogs/telegram_dialog.py b/sportorg/gui/dialogs/telegram_dialog.py index 51402070..8b56a4bf 100644 --- a/sportorg/gui/dialogs/telegram_dialog.py +++ b/sportorg/gui/dialogs/telegram_dialog.py @@ -44,6 +44,10 @@ def init_ui(self): self.item_chat_id = QLineEdit() self.layout.addRow(self.label_chat_id, self.item_chat_id) + self.label_thread_id = QLabel(translate('Thread id')) + self.item_thread_id = QLineEdit() + self.layout.addRow(self.label_thread_id, self.item_thread_id) + self.label_template = QLabel(translate('Template')) self.item_template = QTextEdit() self.item_template.setMinimumHeight(150) @@ -89,6 +93,7 @@ def set_values(self): obj = race() token = obj.get_setting('telegram_token', '') url = obj.get_setting('telegram_chat_id', '') + thread_id = obj.get_setting('telegram_thread_id', '') parse_mode = obj.get_setting('telegram_parse_mode', '') template = obj.get_setting( 'telegram_template', '{group} {name} {bib} {result} {place}' @@ -96,6 +101,7 @@ def set_values(self): telegram_enabled = obj.get_setting('telegram_enabled', False) self.item_chat_id.setText(url) + self.item_thread_id.setText(thread_id) self.item_token.setText(token) self.item_template.setText(template) self.item_enabled.setChecked(telegram_enabled) @@ -117,6 +123,7 @@ def apply_changes_impl(self): obj = race() obj.set_setting('telegram_token', self.item_token.text()) obj.set_setting('telegram_chat_id', self.item_chat_id.text()) + obj.set_setting('telegram_thread_id', self.item_thread_id.text()) obj.set_setting('telegram_enabled', self.item_enabled.isChecked()) obj.set_setting('telegram_parse_mode', parse_mode) obj.set_setting('telegram_template', self.item_template.toPlainText()) diff --git a/sportorg/libs/telegram/telegram.py b/sportorg/libs/telegram/telegram.py index 9b63cb74..c54bd30d 100644 --- a/sportorg/libs/telegram/telegram.py +++ b/sportorg/libs/telegram/telegram.py @@ -10,12 +10,18 @@ def __init__(self, bot_token: str): def _get_api_url(self, path: str = '') -> str: return '{}bot{}/{}'.format(self.URL, self._bot_token, path) - def send_message(self, chat_id: str, text: str, parse_mode: str = ''): + def send_message( + self, chat_id: str, text: str, parse_mode: str = '', thread_id: str = '' + ): json_data = { 'chat_id': chat_id, 'text': text, } + if parse_mode in ['Markdown', 'HTML']: json_data['parse_mode'] = parse_mode + if thread_id != '': + json_data['message_thread_id'] = thread_id + return requests.post(self._get_api_url('sendMessage'), json=json_data) diff --git a/sportorg/modules/telegram/telegram.py b/sportorg/modules/telegram/telegram.py index 71e35ea0..251546cf 100644 --- a/sportorg/modules/telegram/telegram.py +++ b/sportorg/modules/telegram/telegram.py @@ -8,11 +8,12 @@ class TelegramSendThread(Thread): - def __init__(self, token, chat_id, text, parse_mode=''): + def __init__(self, token, chat_id, text, parse_mode='', thread_id=''): super().__init__(daemon=True) self.setName('TelegramSendThread') self.token = token self.chat_id = chat_id + self.thread_id = thread_id self.text = text self.parse_mode = parse_mode @@ -20,15 +21,18 @@ def run(self): try: sys.stdout = FakeStd() sys.stderr = FakeStd() - Telegram(self.token).send_message(self.chat_id, self.text, self.parse_mode) + Telegram(self.token).send_message( + self.chat_id, self.text, self.parse_mode, self.thread_id + ) except Exception as e: logging.error(str(e)) class BotOption: - def __init__(self, token, chat_id, template, parse_mode, enabled=False): + def __init__(self, token, chat_id, template, parse_mode, thread_id, enabled=False): self.token = token self.chat_id = chat_id + self.thread_id = thread_id self.template = template self.parse_mode = parse_mode self.enabled = enabled @@ -43,6 +47,7 @@ def get_options(): obj.get_setting('telegram_chat_id', ''), obj.get_setting('telegram_template', ''), obj.get_setting('telegram_parse_mode', ''), + obj.get_setting('telegram_thread_id', ''), obj.get_setting('telegram_enabled', False), ) @@ -72,7 +77,7 @@ def send(self, data_dict): logging.error(str(e)) logging.info('Telegram {}'.format(text)) TelegramSendThread( - options.token, options.chat_id, text, options.parse_mode + options.token, options.chat_id, text, options.parse_mode, options.thread_id ).start()