From 9ab3fb3616b78271d1d9f0e6740c985fb20632fb Mon Sep 17 00:00:00 2001 From: Davte Date: Thu, 14 May 2020 22:18:21 +0200 Subject: [PATCH] /when command implemented --- davtelepot/__init__.py | 2 +- davtelepot/messages.py | 28 +++++++++++++++++ davtelepot/useful_tools.py | 62 +++++++++++++++++++++++++++++++++++++- 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index e8059b4..e6c8390 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -11,7 +11,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.5.13" +__version__ = "2.5.14" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/messages.py b/davtelepot/messages.py index 0c8e6b2..19d469f 100644 --- a/davtelepot/messages.py +++ b/davtelepot/messages.py @@ -1072,4 +1072,32 @@ default_useful_tools_messages = { 'it': "Verifica se il bot è online", }, }, + 'when_command': { + 'description': { + 'en': "Use this command in reply to get information about a message", + 'it': "Usa questo comando in risposta per ottenere informazioni " + "su un messaggio", + }, + 'help_section': None, + 'forwarded_message': { + 'en': "— Original message —", + 'it': "— Messaggio originale —", + }, + 'instructions': { + 'en': "Use this command in reply to a message to get its original " + "sending time.", + 'it': "Usa questo comando in risposta per ottenere l'ora di invio " + "di un messaggio.", + }, + 'language_labelled_commands': { + 'en': "when", + 'it': "quando", + }, + 'who_when': { + 'en': "👤 {who}\n" + "🗓 {when:%Y-%m-%d ore %H:%M:%S}", + 'it': "👤 {who}\n" + "🗓 {when:%Y-%m-%d ore %H:%M:%S}", + }, + } } diff --git a/davtelepot/useful_tools.py b/davtelepot/useful_tools.py index 95d5b8f..d5c4d38 100644 --- a/davtelepot/useful_tools.py +++ b/davtelepot/useful_tools.py @@ -1,6 +1,7 @@ """General purpose functions for Telegram bots.""" # Standard library +import datetime import json from collections import OrderedDict @@ -9,7 +10,7 @@ from collections import OrderedDict from .api import TelegramError from .bot import Bot from .messages import default_useful_tools_messages -from .utilities import get_cleaned_text, recursive_dictionary_update +from .utilities import get_cleaned_text, recursive_dictionary_update, get_user async def _message_info_command(bot: Bot, update: dict, language: str): @@ -89,6 +90,53 @@ async def _ping_command(bot: Bot, update: dict): return "Pong!" +async def _when_command(bot: Bot, update: dict, language: str): + reply_markup = None + text = '' + if 'reply_to_message' not in update: + return bot.get_message( + 'useful_tools', 'when_command', 'instructions', + language=language + ) + update = update['reply_to_message'] + date = ( + datetime.datetime.fromtimestamp(update['date']) + if 'date' in update + else None + ) + text += bot.get_message( + 'useful_tools', 'when_command', 'who_when', + language=language, + who=get_user(update['from']), + when=date + ) + if 'forward_date' in update: + original_datetime= ( + datetime.datetime.fromtimestamp(update['forward_date']) + if 'forward_from' in update + else None + ) + text += "\n\n" + bot.get_message( + 'useful_tools', 'when_command', 'forwarded_message', + language=language, + who=get_user(update['forward_from']), + when=original_datetime + ) + "\n" + text += bot.get_message( + 'useful_tools', 'when_command', 'who_when', + language=language, + who=get_user(update['forward_from']), + when=original_datetime + ) + await bot.send_message( + text=text, + reply_markup=reply_markup, + reply_to_message_id=update['message_id'], + disable_notification=True, + chat_id=update['chat']['id'] + ) + + def init(telegram_bot: Bot, useful_tools_messages=None): """Define commands for `telegram_bot`. @@ -140,3 +188,15 @@ def init(telegram_bot: Bot, useful_tools_messages=None): authorization_level='everybody') async def ping_command(bot, update): return await _ping_command(bot=bot, update=update) + + @telegram_bot.command(command='/when', + aliases=None, + reply_keyboard_button=None, + show_in_keyboard=False, + **{key: val for key, val + in useful_tools_messages['when_command'].items() + if key in ('description', 'help_section', + 'language_labelled_commands')}, + authorization_level='everybody') + async def when_command(bot, update, language): + return await _when_command(bot=bot, update=update, language=language)