diff --git a/davtelepot/messages.py b/davtelepot/messages.py
index 80fe1fc..0c8e6b2 100644
--- a/davtelepot/messages.py
+++ b/davtelepot/messages.py
@@ -1008,6 +1008,27 @@ default_unknown_command_message = {
}
default_useful_tools_messages = {
+ 'info_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,
+ 'instructions': {
+ 'en': "Use this command in reply to a message to get information "
+ "about it.",
+ 'it': "Usa questo comando in risposta per ottenere informazioni "
+ "su un messaggio.",
+ },
+ 'result': {
+ 'en': "Here is the information about the selected "
+ "message:\n\n"
+ "{info}
",
+ 'it': "Ecco le informazioni sul messaggio selezionato:\n\n"
+ "{info}
",
+ },
+ },
'length_command': {
'description': {
'en': "Use this command in reply to a message to get its length",
diff --git a/davtelepot/useful_tools.py b/davtelepot/useful_tools.py
index 0796e45..95d5b8f 100644
--- a/davtelepot/useful_tools.py
+++ b/davtelepot/useful_tools.py
@@ -1,14 +1,44 @@
"""General purpose functions for Telegram bots."""
# Standard library
+import json
+
from collections import OrderedDict
# Project modules
+from .api import TelegramError
from .bot import Bot
from .messages import default_useful_tools_messages
from .utilities import get_cleaned_text, recursive_dictionary_update
+async def _message_info_command(bot: Bot, update: dict, language: str):
+ """Provide information about selected update.
+
+ Selected update: the message `update` is sent in reply to. If `update` is
+ not a reply to anything, it gets selected.
+ The update containing the command, if sent in reply, is deleted.
+ """
+ if 'reply_to_message' in update:
+ selected_update = update['reply_to_message']
+ else:
+ selected_update = update
+ await bot.send_message(
+ text=bot.get_message(
+ 'useful_tools', 'info_command', 'result',
+ language=language,
+ info=json.dumps(selected_update, indent=2)
+ ),
+ update=update,
+ reply_to_message_id=selected_update['message_id'],
+ )
+ if selected_update != update:
+ try:
+ await bot.delete_message(update=update)
+ except TelegramError:
+ pass
+
+
async def _length_command(bot: Bot, update: dict, user_record: OrderedDict):
message_text = get_cleaned_text(
update=update,
@@ -73,32 +103,40 @@ def init(telegram_bot: Bot, useful_tools_messages=None):
)
telegram_bot.messages['useful_tools'] = useful_tools_messages
- @telegram_bot.command(
- command='/length',
- aliases=None,
- reply_keyboard_button=None,
- show_in_keyboard=False,
- **{
- key: val
- for key, val in useful_tools_messages['length_command'].items()
- if key in ('description', 'help_section', 'language_labelled_commands')
- },
- authorization_level='everybody'
- )
+ @telegram_bot.command(command='/info',
+ aliases=None,
+ reply_keyboard_button=None,
+ show_in_keyboard=False,
+ **{key: val for key, val
+ in useful_tools_messages['info_command'].items()
+ if key in ('description', 'help_section',
+ 'language_labelled_commands')},
+ authorization_level='moderator')
+ async def message_info_command(bot, update, language):
+ return await _message_info_command(bot=bot,
+ update=update,
+ language=language)
+
+ @telegram_bot.command(command='/length',
+ aliases=None,
+ reply_keyboard_button=None,
+ show_in_keyboard=False,
+ **{key: val for key, val
+ in useful_tools_messages['length_command'].items()
+ if key in ('description', 'help_section',
+ 'language_labelled_commands')},
+ authorization_level='everybody')
async def length_command(bot, update, user_record):
return await _length_command(bot=bot, update=update, user_record=user_record)
- @telegram_bot.command(
- command='/ping',
- aliases=None,
- reply_keyboard_button=None,
- show_in_keyboard=False,
- **{
- key: val
- for key, val in useful_tools_messages['ping_command'].items()
- if key in ('description', 'help_section', 'language_labelled_commands')
- },
- authorization_level='everybody'
- )
+ @telegram_bot.command(command='/ping',
+ aliases=None,
+ reply_keyboard_button=None,
+ show_in_keyboard=False,
+ **{key: val for key, val
+ in useful_tools_messages['ping_command'].items()
+ if key in ('description', 'help_section',
+ 'language_labelled_commands')},
+ authorization_level='everybody')
async def ping_command(bot, update):
return await _ping_command(bot=bot, update=update)