From 37f8fe580d813474afe89d3aaf19ea0d4de8b759 Mon Sep 17 00:00:00 2001 From: Marcel Dechert Date: Sat, 5 Dec 2020 21:00:53 +0100 Subject: [PATCH] telegram bot notifications --- src/telegram_bot/__init__.py | 0 src/telegram_bot/telegram_bot.py | 18 ++++++ src/telegram_bot/telegram_bot_test.py | 14 ++++ src/telegram_bot/telegram_notifier.py | 92 +++++++++++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 src/telegram_bot/__init__.py create mode 100644 src/telegram_bot/telegram_bot.py create mode 100644 src/telegram_bot/telegram_bot_test.py create mode 100644 src/telegram_bot/telegram_notifier.py diff --git a/src/telegram_bot/__init__.py b/src/telegram_bot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/telegram_bot/telegram_bot.py b/src/telegram_bot/telegram_bot.py new file mode 100644 index 0000000..2caae7f --- /dev/null +++ b/src/telegram_bot/telegram_bot.py @@ -0,0 +1,18 @@ +import telegram_notifier +import logging + +# telegram bot --- +TELEGRAM_TOKEN_ID = '1150602533:AAGSmPC0nGDYwiLQkkIlDheMzwR4TGv--sU' # token-id +TELEGRAM_CHAT_ID = '291512617' # chat-id +# ---------------- + +def send_notifaction(timestamp): + # - - - - - - - - - - + # Telegram notification: + msg = "Es hat geklingelt um {}".format(timestamp) + telegram_notifier.basic_notifier(logger_name='training_notifier', + token_id=TELEGRAM_TOKEN_ID, + chat_id=TELEGRAM_CHAT_ID, + message=msg, + level=logging.INFO) + \ No newline at end of file diff --git a/src/telegram_bot/telegram_bot_test.py b/src/telegram_bot/telegram_bot_test.py new file mode 100644 index 0000000..3e28e3d --- /dev/null +++ b/src/telegram_bot/telegram_bot_test.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +import unittest + +import telegram_bot +import datetime + +class TestGetDataFromRKI(unittest.TestCase): + + def test_send_notifaction(self): + timestamp = datetime.datetime.now() + telegram_bot.send_notifaction(timestamp) + +if __name__ == '__main__': + unittest.main() diff --git a/src/telegram_bot/telegram_notifier.py b/src/telegram_bot/telegram_notifier.py new file mode 100644 index 0000000..229faf8 --- /dev/null +++ b/src/telegram_bot/telegram_notifier.py @@ -0,0 +1,92 @@ +# Copyright 2019 Gabriele Valvano +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Inspired by: https://www.marcodena.it/blog/telegram-logging-handler-for-python-java-bash/ + +1) Search the "BotFather" on Telegram. This is the official bot that allows you to create other bots. +2) Create new bot: /newbot +3) Choose a name for your bot: ScriptNotifier +4) Choose a username for your bot that must end with "_bot": script_notifier_bot +5) Once the bot is created, you will have a long string that is the TOKENID +6) The bot will send you messages on a specific chat, that you need to create. Go to Telegram search bar, on your + smartphone, and search your bot. Then, start the bot: /start +7) Now you are ready to use a command line code to send your first notification: + "curl -s -X POST https://api.telegram.org/bot[TOKENID]/sendMessage -d chat_id=[ID] -d text="Hello world" " + + +- - - - - - - +bot page: +https://api.telegram.org/bot[TOKENID]/getUpdates +- - - - - - - +bot info: +curl -X GET https://api.telegram.org/bot[TOKENID]/getMe +- - - - - - - +send message to the bot: +curl -s -X POST https://api.telegram.org/bot[TOKENID]/sendMessage -d chat_id=[ID] -d text="Hello world" + +""" + +import requests +from logging import Handler, Formatter +import logging + + +class RequestsHandler(Handler): + + def __init__(self, token_id, chat_id): + super().__init__() + self.token_id = token_id + self.chat_id = chat_id + + def emit(self, record): + log_entry = self.format(record) + payload = { + 'chat_id': self.chat_id, + 'text': log_entry, + 'parse_mode': 'HTML' + } + return requests.post("https://api.telegram.org/bot{token}/sendMessage".format(token=self.token_id), + data=payload).content + + +class LogstashFormatter(Formatter): + def __init__(self): + super(LogstashFormatter, self).__init__() + + def format(self, record): + # time = strftime("%d/%m/%Y, %H:%M:%S") + # return "{datetime}\n{message}".format(datetime=time, message=record.msg) + return "{message}".format(message=record.msg) + + +def basic_notifier(logger_name, token_id, chat_id, message, level=logging.INFO): + logger = logging.getLogger(logger_name) + logger.setLevel(level) + + handler = RequestsHandler(token_id=token_id, chat_id=chat_id) + formatter = LogstashFormatter() + handler.setFormatter(formatter) + logger.addHandler(handler) + + logger.setLevel(level) + logger.info(message) + + +if __name__ == '__main__': + l_name = 'trymeApp' + l_msg = 'We have a problem' + t_id = 'insert here your token id' + c_id = 'insert here your chat id' + basic_notifier(logger_name=l_name, token_id=t_id, chat_id=c_id, message=l_msg) +