diff --git a/kaehmy/tgbot.py b/kaehmy/tgbot.py new file mode 100644 index 0000000..248f7eb --- /dev/null +++ b/kaehmy/tgbot.py @@ -0,0 +1,38 @@ +''' +A telegram bot api for whatever purposes. +TODO: kaehmy app is definitely not correct place for this +''' +import logging +import requests +from django.conf import settings +from kaehmy.models import TelegramChannel + + +class TelegramBot: + ''' + A telegram bot api for whatever purposes + Currently only able to broadcast stuff to all registered + channels using broadcast method. + ''' + + def __init__(self, api_token=None): + + self.api_token = api_token or settings.TELEGRAM_BOT_TOKEN + self.send_message_url = "https://api.telegram.org/bot{}/sendMessage".format(self.api_token) + + def broadcast(self, message): + channels_ids = TelegramChannel.objects.values_list("channel_id", flat=True) + for id_ in channels_ids: + self.send_message(id_, message) + + def send_message(self, channel_id, message): + ''' + Send message to a chat with given channel_id + ''' + data = { + 'chat_id': channel_id, + 'text': message, + 'parse_mode': 'Markdown' + } + resp = requests.post(self.send_message_url, json=data) + logging.debug(resp.content) diff --git a/ohlhafv/templates/tgmsg.tpl b/ohlhafv/templates/tgmsg.tpl new file mode 100644 index 0000000..90fae52 --- /dev/null +++ b/ohlhafv/templates/tgmsg.tpl @@ -0,0 +1,8 @@ +Uusi Ohlhafv haaste! +==================== +Haastaja: {{ challenge.challenger }} +Uhri: {{ challenge.victim }} +Sarja: {{ challenge.get_series_display }} +Terveiset: {{ challenge.message }} + +Käy kurkkaamassa muutkin haasteet osoitteessa: {{ url }} \ No newline at end of file diff --git a/ohlhafv/views.py b/ohlhafv/views.py index 69e85b2..632ab4e 100644 --- a/ohlhafv/views.py +++ b/ohlhafv/views.py @@ -19,6 +19,7 @@ from ohlhafv.models import OhlhafvChallenge from ohlhafv.forms import OhlhafvForm from ohlhafv.tables import OhlhafvTable from webapp.utils import send_email +from kaehmy.tgbot import TelegramBot @require_http_methods(["GET"]) @@ -48,6 +49,17 @@ def ohlhafv_submit(request, *args, **kwargs): } ) send_email(email, subject, message) + + try: + tg_message = render_to_string( + 'ohlhafv:tgmsg.tpl', { + 'challenge': challenge, + 'url': url}) + bot = TelegramBot() + bot.broadcast(tg_message) + except Exception: # tg spam is not critical. Ignore on failure + pass + logging.debug( 'Sent ohlhafv email to recipient <{}>'.format(email)) else: diff --git a/package-lock.json b/package-lock.json index 251b467..c87cde5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -886,7 +886,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -904,11 +905,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -921,15 +924,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -1032,7 +1038,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -1042,6 +1049,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1054,17 +1062,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -1081,6 +1092,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -1153,7 +1165,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -1163,6 +1176,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -1238,7 +1252,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -1268,6 +1283,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -1285,6 +1301,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1323,11 +1340,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } },