From ff862617928c6dea13108742ec0d6a65603934d7 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Thu, 9 Jul 2020 15:02:22 +0200 Subject: [PATCH 1/4] add queuing to telegram plugin --- plugin/telegram.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/plugin/telegram.py b/plugin/telegram.py index 5dea41f..60a45e2 100644 --- a/plugin/telegram.py +++ b/plugin/telegram.py @@ -20,12 +20,36 @@ from plugin.pluginBase import PluginBase # ###################### # # Custom plugin includes # from telegram.error import (TelegramError, Unauthorized, BadRequest, TimedOut, NetworkError) -import telegram +from telegram.ext import messagequeue as mq +from telegram.utils.request import Request +import telegram.bot # ###################### # logging.debug("- %s loaded", __name__) +class MQBot(telegram.bot.Bot): + '''A subclass of Bot which delegates send method handling to MQ''' + + def __init__(self, *args, is_queued_def=True, mqueue=None, **kwargs): + super(MQBot, self).__init__(*args, **kwargs) + # below 2 attributes should be provided for decorator usage + self._is_messages_queued_default = is_queued_def + self._msg_queue = mqueue or mq.MessageQueue() + + def __del__(self): + try: + self._msg_queue.stop() + except: + pass + + @mq.queuedmessage + def send_message(self, *args, **kwargs): + '''Wrapped method would accept new `queued` and `isgroup` + OPTIONAL arguments''' + return super(MQBot, self).send_message(*args, **kwargs) + + class BoswatchPlugin(PluginBase): """!Description of the Plugin""" @@ -35,7 +59,9 @@ class BoswatchPlugin(PluginBase): def onLoad(self): """!Called by import of the plugin""" - self.bot = telegram.Bot(token=self.config.get("botToken", default="")) + q = mq.MessageQueue() + request = Request(con_pool_size=8) + self.bot = MQBot(token=self.config.get("botToken", default=""), request=request, mqueue=q) def pocsag(self, bwPacket): """!Called on POCSAG alarm From ec9f3f3875de6561ed380afdd0691d79d4233aaa Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Fri, 10 Jul 2020 07:17:48 +0200 Subject: [PATCH 2/4] fix pep8 err --- plugin/telegram.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin/telegram.py b/plugin/telegram.py index 165b3c3..a68f536 100644 --- a/plugin/telegram.py +++ b/plugin/telegram.py @@ -70,7 +70,6 @@ class BoswatchPlugin(PluginBase): msg = self.parseWildcards(self.config.get("message_fms", default="{FMS}")) self._sendMessage(msg) - def pocsag(self, bwPacket): """!Called on POCSAG alarm From 43c9ed1edc8c6e0812869cc9fc2a009371fefcc8 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Tue, 14 Jul 2020 08:39:41 +0200 Subject: [PATCH 3/4] add new parameter to disable queue --- plugin/telegram.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugin/telegram.py b/plugin/telegram.py index a68f536..9bc5ef1 100644 --- a/plugin/telegram.py +++ b/plugin/telegram.py @@ -59,9 +59,14 @@ class BoswatchPlugin(PluginBase): def onLoad(self): """!Called by import of the plugin""" - q = mq.MessageQueue() - request = Request(con_pool_size=8) - self.bot = MQBot(token=self.config.get("botToken", default=""), request=request, mqueue=q) + if self.config.get("queue", default=True): + q = mq.MessageQueue() + request = Request(con_pool_size=8) + self.bot = MQBot(token=self.config.get("botToken", default=""), request=request, mqueue=q) + print('queue') + else: + self.bot = telegram.Bot(token=self.config.get("botToken")) + print('normal') def fms(self, bwPacket): """!Called on FMS alarm From b19d2e7eda755bb9d4b180e480068fe10c62d966 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Tue, 14 Jul 2020 08:40:04 +0200 Subject: [PATCH 4/4] Add Notice to documentation --- docu/docs/plugin/telegram.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docu/docs/plugin/telegram.md b/docu/docs/plugin/telegram.md index 92319d2..bd82296 100644 --- a/docu/docs/plugin/telegram.md +++ b/docu/docs/plugin/telegram.md @@ -5,6 +5,8 @@ Mit diesem Plugin ist es moeglich, Telegram-Nachrichten für POCSAG-Alarmierungen zu senden. Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket definiert sind. (beispielsweise durch das [Geocoding](../modul/geocoding.md) Modul) +Die abarbeitung der Alarmierungen erfolgt per Queue nach den Limits der Telegram API, damit keine Nachrichten verloren gehen, diese Funktion kann mit dem ```queue``` Parameter deaktiviert werden. + ## Unterstütze Alarmtypen - Fms - Pocsag @@ -24,6 +26,7 @@ Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket d |message_pocsag|Format der Nachricht für Pocsag|`{RIC}({SRIC})\n{MSG}`| |message_zvei|Format der Nachricht für ZVEI|`{TONE}`| |message_msg|Format der Nachricht für MSG|| +|queue|Aktivieren/Deaktivieren der MessageQueue|true| **Beispiel:** ```yaml