diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py
index f90bc97..a500af0 100644
--- a/davtelepot/__init__.py
+++ b/davtelepot/__init__.py
@@ -14,7 +14,7 @@ __author__ = "Davide Testa"
__email__ = "davide@davte.it"
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
__license__ = "GNU General Public License v3.0"
-__version__ = "2.4.9"
+__version__ = "2.4.10"
__maintainer__ = "Davide Testa"
__contact__ = "t.me/davte"
diff --git a/davtelepot/administration_tools.py b/davtelepot/administration_tools.py
index 35b0f08..1a43310 100644
--- a/davtelepot/administration_tools.py
+++ b/davtelepot/administration_tools.py
@@ -946,14 +946,12 @@ def init(telegram_bot, talk_messages=None, admin_messages=None):
async def maintenance_command(bot, update, user_record):
return await _maintenance_command(bot, update, user_record)
- @telegram_bot.command(
- command='/version',
- aliases=[],
- reply_keyboard_button=admin_messages['version_command']['reply_keyboard_button'],
- show_in_keyboard=False,
- description=admin_messages['version_command']['description'],
- help_section=admin_messages['version_command']['help_section'],
- authorization_level='admin',
- )
+ @telegram_bot.command(command='/version',
+ aliases=[],
+ reply_keyboard_button=admin_messages['version_command']['reply_keyboard_button'],
+ show_in_keyboard=False,
+ description=admin_messages['version_command']['description'],
+ help_section=admin_messages['version_command']['help_section'],
+ authorization_level='admin',)
async def version_command(bot, update, user_record):
return await _version_command(bot=bot, update=update, user_record=user_record)
diff --git a/davtelepot/helper.py b/davtelepot/helper.py
index 58d6d60..d31c5ac 100644
--- a/davtelepot/helper.py
+++ b/davtelepot/helper.py
@@ -10,7 +10,7 @@ from davtelepot.utilities import (
from .messages import default_help_messages
-def get_command_description(bot, update, user_record):
+def get_commands_description(bot, update, user_record):
"""Get a string description of `bot` commands.
Show only commands available for `update` sender.
@@ -18,11 +18,26 @@ def get_command_description(bot, update, user_record):
user_role = bot.Role.get_user_role(
user_record=user_record
)
- return "\n".join(
- [
- "/{}: {}".format(
- command,
- bot.get_message(
+ commands = {}
+ for command, details in bot.commands.items():
+ if 'description' not in details or not details['description']:
+ continue
+ if 'authorization_level' not in details:
+ continue
+ command_role = bot.Role.get_role_by_name(details['authorization_level'])
+ if command_role.code < user_role.code:
+ continue
+ if command_role.code not in commands:
+ commands[command_role.code] = []
+ commands[command_role.code].append(
+ "/{command}{authorization_level}: {description}".format(
+ command=command,
+ authorization_level=(
+ f" [{command_role.plural}]"
+ if command_role.code != bot.Role.default_role_code
+ else ""
+ ),
+ description=bot.get_message(
'commands', command, 'description',
user_record=user_record, update=update,
default_message=(
@@ -32,20 +47,47 @@ def get_command_description(bot, update, user_record):
)
)
)
- for command, details in sorted(
- bot.commands.items(),
- key=lambda x:x[0]
- )
- if 'description' in details and details['description']
- and user_role.code <= bot.Role.get_user_role(
- user_role_id=details['authorization_level']
- ).code
+ )
+ return "\n".join(
+ [
+ command
+ for role, commands in sorted(
+ commands.items(),
+ key=(lambda x: -x[0])
+ )
+ for command in sorted(
+ commands
+ )
]
)
+ # [
+ # "/{command}{authorization_level}: {description}".format(
+ # command=command,
+ # authorization_level=(
+ # ""
+ # if 1
+ # else ""
+ # ),
+ # description=bot.get_message(
+ # 'commands', command, 'description',
+ # user_record=user_record, update=update,
+ # default_message=(
+ # details['description']
+ # if type(details['description']) is str
+ # else ''
+ # )
+ # )
+ # )
+ # if 'description' in details and details['description']
+ # and user_role.code <= bot.Role.get_user_role(
+ # user_role_id=details['authorization_level']
+ # ).code
+ # ]
+ # )
def _make_button(text=None, callback_data='',
- prefix='help:///', delimiter='|', data=[]):
+ prefix='help:///', delimiter='|', data=None):
return make_button(text=text, callback_data=callback_data,
prefix=prefix, delimiter=delimiter, data=data)
@@ -84,7 +126,7 @@ def get_help_buttons(bot, update, user_record):
)
for name, section in bot.messages['help_sections'].items()
if 'authorization_level' in section
- and user_role.code <= bot.Role.get_user_role(
+ and user_role.code <= bot.Role.get_user_role(
user_role_id=section['authorization_level']
).code
]
@@ -134,7 +176,7 @@ async def _help_button(bot, update, user_record, data):
'help', 'help_command', 'header',
update=update, user_record=user_record,
bot=bot,
- commands=get_command_description(bot, update, user_record)
+ commands=get_commands_description(bot, update, user_record)
)
reply_markup = get_back_to_help_menu_keyboard(
bot=bot, update=update, user_record=user_record
@@ -147,14 +189,14 @@ async def _help_button(bot, update, user_record, data):
)
reply_markup = get_help_buttons(bot, update, user_record)
elif (
- data[0] == 'section'
- and len(data) > 1
- and data[1] in bot.messages['help_sections']
+ data[0] == 'section'
+ and len(data) > 1
+ and data[1] in bot.messages['help_sections']
):
section = bot.messages['help_sections'][data[1]]
if bot.authorization_function(
- update=update,
- authorization_level=section['authorization_level']
+ update=update,
+ authorization_level=section['authorization_level']
):
text = (
"{label}\n\n"
@@ -200,27 +242,26 @@ async def _start_command(bot, update, user_record):
return
-def init(bot, help_messages=None):
+def init(telegram_bot, help_messages=None):
"""Assign parsers, commands, buttons and queries to given `bot`."""
if help_messages is None:
help_messages = default_help_messages
- bot.messages['help'] = help_messages
+ telegram_bot.messages['help'] = help_messages
- @bot.command("/start", authorization_level='everybody')
+ @telegram_bot.command("/start", authorization_level='everybody')
async def start_command(bot, update, user_record):
return await _start_command(bot, update, user_record)
- @bot.command(command='/help', aliases=['00help'],
- reply_keyboard_button=help_messages['help_command'][
- 'reply_keyboard_button'],
- show_in_keyboard=True,
- description=help_messages['help_command']['description'],
- authorization_level='everybody')
+ @telegram_bot.command(command='/help', aliases=['00help'],
+ reply_keyboard_button=help_messages['help_command'][
+ 'reply_keyboard_button'],
+ show_in_keyboard=True,
+ description=help_messages['help_command']['description'],
+ authorization_level='everybody')
async def help_command(bot, update, user_record):
- result = await _help_command(bot, update, user_record)
- return result
+ return await _help_command(bot, update, user_record)
- @bot.button(prefix='help:///', separator='|',
- authorization_level='everybody')
+ @telegram_bot.button(prefix='help:///', separator='|',
+ authorization_level='everybody')
async def help_button(bot, update, user_record, data):
return await _help_button(bot, update, user_record, data)
diff --git a/davtelepot/suggestions.py b/davtelepot/suggestions.py
index 61339ec..2b9b4f2 100644
--- a/davtelepot/suggestions.py
+++ b/davtelepot/suggestions.py
@@ -280,7 +280,6 @@ def init(telegram_bot: davtelepot.bot.Bot, suggestion_messages=default_suggestio
types.datetime
)
-
@telegram_bot.command(command=suggestion_messages['suggestions_command']['command'],
aliases=suggestion_messages['suggestions_command']['aliases'],
reply_keyboard_button=(