generated from geekiot/python-template
Add [messages & callbacks]: add the bot menu keyboard & update register router
This commit is contained in:
parent
ff74a5d03f
commit
c690226d8a
7 changed files with 60 additions and 27 deletions
21
src/bot/handlers/callbacks/menu.py
Normal file
21
src/bot/handlers/callbacks/menu.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
from aiogram.types import CallbackQuery, Message
|
||||||
|
|
||||||
|
from bot.handlers import registry
|
||||||
|
from bot.handlers.utils.keyboards import get_menu_markup
|
||||||
|
from bot.handlers.utils.types import ChatType
|
||||||
|
|
||||||
|
|
||||||
|
@registry.register(
|
||||||
|
commands="menu",
|
||||||
|
chat_types=ChatType.PRIVATE,
|
||||||
|
description="Menu Callback Function Description",
|
||||||
|
is_callback=True,
|
||||||
|
)
|
||||||
|
async def cmd_menu(call: CallbackQuery) -> None:
|
||||||
|
if not isinstance(call.message, Message):
|
||||||
|
return
|
||||||
|
|
||||||
|
await call.message.edit_text(
|
||||||
|
"Menu Callback Function Answer Text",
|
||||||
|
reply_markup=get_menu_markup(),
|
||||||
|
)
|
||||||
|
|
@ -5,9 +5,9 @@ from bot.handlers.utils.types import ChatType
|
||||||
|
|
||||||
|
|
||||||
@registry.register(
|
@registry.register(
|
||||||
command="help",
|
commands="help",
|
||||||
chat_types=ChatType.PRIVATE,
|
chat_types=ChatType.PRIVATE,
|
||||||
description="Test Help Function Description",
|
description="Help Command Function Description",
|
||||||
)
|
)
|
||||||
async def cmd_help(message: Message) -> None:
|
async def cmd_help(message: Message) -> None:
|
||||||
await message.answer("Test Help Function Answer Text")
|
await message.answer("Help Command Function Answer Text")
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
|
|
||||||
from bot.handlers import registry
|
from bot.handlers import registry
|
||||||
|
from bot.handlers.utils.keyboards import get_menu_markup
|
||||||
from bot.handlers.utils.types import ChatType
|
from bot.handlers.utils.types import ChatType
|
||||||
|
|
||||||
|
|
||||||
@registry.register(
|
@registry.register(
|
||||||
command="start",
|
commands=["menu", "start"],
|
||||||
chat_types=ChatType.PRIVATE,
|
chat_types=ChatType.PRIVATE,
|
||||||
description="Test Start Function Description",
|
description="Menu Command Function Description",
|
||||||
)
|
)
|
||||||
async def cmd_menu(message: Message) -> None:
|
async def cmd_menu(message: Message) -> None:
|
||||||
await message.answer("Test Start Function Answer Text")
|
await message.answer(
|
||||||
|
"Menu Command Function Answer Text",
|
||||||
|
reply_markup=get_menu_markup(),
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
from aiogram.types import Message
|
|
||||||
|
|
||||||
from bot.handlers import registry
|
|
||||||
from bot.handlers.utils.types import ChatType
|
|
||||||
|
|
||||||
|
|
||||||
@registry.register(
|
|
||||||
command="group",
|
|
||||||
chat_types=ChatType.GROUP,
|
|
||||||
description="Test Group Function Description",
|
|
||||||
)
|
|
||||||
async def cmd_group(message: Message) -> None:
|
|
||||||
await message.answer("Test Group Function Answer Text")
|
|
||||||
|
|
@ -1,4 +1,19 @@
|
||||||
__all__ = []
|
__all__ = ["get_menu_markup"]
|
||||||
|
|
||||||
|
|
||||||
# TODO: Add reply keyboard markups for bot here.
|
from aiogram.utils.keyboard import (
|
||||||
|
InlineKeyboardBuilder,
|
||||||
|
InlineKeyboardButton,
|
||||||
|
InlineKeyboardMarkup,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_menu_markup() -> InlineKeyboardMarkup:
|
||||||
|
"""
|
||||||
|
Reply markup for the bot callback menu & message menu.
|
||||||
|
"""
|
||||||
|
builder = InlineKeyboardBuilder()
|
||||||
|
builder.add(
|
||||||
|
InlineKeyboardButton(text="Test Menu", callback_data="menu"),
|
||||||
|
)
|
||||||
|
return builder.as_markup()
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ class RouterRegistry:
|
||||||
description: str,
|
description: str,
|
||||||
chat_types: Union[ChatType, list[ChatType]],
|
chat_types: Union[ChatType, list[ChatType]],
|
||||||
filters: Union[BaseFilter, list[BaseFilter]] = [],
|
filters: Union[BaseFilter, list[BaseFilter]] = [],
|
||||||
command: str,
|
commands: str | list[str],
|
||||||
is_callback: bool = False,
|
is_callback: bool = False,
|
||||||
) -> Callable[[Any], HandlerType]:
|
) -> Callable[[Any], HandlerType]:
|
||||||
"""
|
"""
|
||||||
|
|
@ -84,8 +84,10 @@ class RouterRegistry:
|
||||||
handler description for Telegram bot menu.
|
handler description for Telegram bot menu.
|
||||||
chat_types (Union[ChatType, list[ChatType]]):
|
chat_types (Union[ChatType, list[ChatType]]):
|
||||||
list of Telegram chat types.
|
list of Telegram chat types.
|
||||||
command (str):
|
commands (str | list[str]):
|
||||||
specifying handler command trigger (data for callback).
|
specifying handler command trigger (data for callback).
|
||||||
|
It can be a list of str for callbacks & messages.
|
||||||
|
Use first command as main command for bot menu.
|
||||||
filters (Union[BaseFilter, list[BaseFilter]], optional):
|
filters (Union[BaseFilter, list[BaseFilter]], optional):
|
||||||
List of a handler's filters.
|
List of a handler's filters.
|
||||||
Defaults to [].
|
Defaults to [].
|
||||||
|
|
@ -99,12 +101,16 @@ class RouterRegistry:
|
||||||
if isinstance(filters, BaseFilter):
|
if isinstance(filters, BaseFilter):
|
||||||
filters = [filters]
|
filters = [filters]
|
||||||
|
|
||||||
|
if isinstance(commands, str):
|
||||||
|
commands = [commands]
|
||||||
|
|
||||||
def decorator(func: HandlerType) -> HandlerType:
|
def decorator(func: HandlerType) -> HandlerType:
|
||||||
meta = HandlerMeta(
|
meta = HandlerMeta(
|
||||||
func=func,
|
func=func,
|
||||||
description=description,
|
description=description,
|
||||||
chat_types=chat_types,
|
chat_types=chat_types,
|
||||||
command=command,
|
command=commands[0],
|
||||||
|
is_callback=is_callback,
|
||||||
)
|
)
|
||||||
self._handlers.append(meta)
|
self._handlers.append(meta)
|
||||||
|
|
||||||
|
|
@ -113,14 +119,14 @@ class RouterRegistry:
|
||||||
func,
|
func,
|
||||||
*filters,
|
*filters,
|
||||||
ChatTypeFilter(chat_types=chat_types),
|
ChatTypeFilter(chat_types=chat_types),
|
||||||
F.data == command,
|
F.data.in_(commands),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
self._router.message.register(
|
self._router.message.register(
|
||||||
func,
|
func,
|
||||||
*filters,
|
*filters,
|
||||||
ChatTypeFilter(chat_types=chat_types),
|
ChatTypeFilter(chat_types=chat_types),
|
||||||
Command(commands=[command]),
|
Command(commands=commands),
|
||||||
)
|
)
|
||||||
return func
|
return func
|
||||||
|
|
||||||
|
|
@ -140,7 +146,7 @@ class RouterRegistry:
|
||||||
description=meta.description,
|
description=meta.description,
|
||||||
)
|
)
|
||||||
for meta in self._handlers
|
for meta in self._handlers
|
||||||
if meta.command is not None
|
if meta.is_callback is False
|
||||||
and ChatType.PRIVATE in meta.chat_types
|
and ChatType.PRIVATE in meta.chat_types
|
||||||
],
|
],
|
||||||
scope=BotCommandScopeAllPrivateChats(),
|
scope=BotCommandScopeAllPrivateChats(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue