Не работает обработка ссылки. Telegram Bot
При создании бота решил сделать хорошо и интересно оформленную информацию о нём. Появилась идея внедрить в каждый из пунктов списка "Содержание" ссылку, перейдя по которой пользователя отправит в того же бота, но вместо /start должна обрабатываться соответствующая функция, в которой будет описан пункт списка. Но, как бы я не старался, всё равно запускается /start вместо нужной функции. Ссылка создаётся правильно, но скорее всего неправильно обрабатывается, не знаю как исправить.
Код:
# Словарь для хранения описаний разделов
sections = {
"О боте": "Описание бота",
"Функции": "Описание функций бота",
"Функции/connect": "Описание функции /connect",
"Функции/create": "Описание функции /create",
"Обозначения": "Описание обозначений",
"Внутрянка": "Описание внутреннего устройства",
"Будущее": "Описание планов на будущее",
}
#* Обработчик команды "/help"
@dp.message(Command("help"))
async def help(message: types.Message):
# Формируем текст сообщения с ссылками на команды
help_text = "<b>Содержание:</b>\n"
help_text += "├ <a href='t.me/AHelpTbot?start=about'>О боте</a>\n"
help_text += "├ <a href='t.me/AHelpTbot?start=features'>Функции</a>\n"
help_text += " ├ <a href='t.me/AHelpTbot?start=helpconnect'>/connect</a>\n"
help_text += " └ <a href='t.me/AHelpTbot?start=helpcreate'>/create</a>\n"
help_text += "├ <a href='t.me/AHelpTbot?start=notations'>Обозначения</a>\n"
help_text += "├ <a href='t.me/AHelpTbot?start=inner'>Внутрянка</a>\n"
help_text += "└ <a href='t.me/AHelpTbot?start=future'>Будущее</a>\n"
await message.reply(
text=help_text,
parse_mode=ParseMode.HTML
)
# Функция для команды /about
@dp.message(Command("about"))
async def about(message: types.Message):
await message.reply(
text=sections["О боте"],
parse_mode=ParseMode.HTML
)
# Функция для команды /features
@dp.message(Command("features"))
async def features(message: types.Message):
await message.reply(
text=sections["Функции"],
parse_mode=ParseMode.HTML
)
# Функция для команды /helpconnect
@dp.message(Command("helpconnect"))
async def connect(message: types.Message):
await message.reply(
text=sections["Функции/connect"],
parse_mode=ParseMode.HTML
)
# Функция для команды /helpcreate
@dp.message(Command("helpcreate"))
async def create(message: types.Message):
await message.reply(
text=sections["Функции/create"],
parse_mode=ParseMode.HTML
)
# Функция для команды /notations
@dp.message(Command("notations"))
async def notations(message: types.Message):
await message.reply(
text=sections["Обозначения"],
parse_mode=ParseMode.HTML
)
# Функция для команды /inner
@dp.message(Command("inner"))
async def inner(message: types.Message):
await message.reply(
text=sections["Внутрянка"],
parse_mode=ParseMode.HTML
)
# Функция для команды /future
@dp.message(Command("future"))
async def future(message: types.Message):
await message.reply(
text=sections["Будущее"],
parse_mode=ParseMode.HTML
)
Ответы (2 шт):
Параметр start
в вашей ссылке - это параметр, который вы можете получить в хендлере своей команды при помощи message.get_args()
.
Через этот параметр вы не сможете отправить команду от имени пользователя.
Для ваших целей лучше подходят ReplyKeyboardMarkup
я нашел решение!
к сожалению, у меня не вышло создание ссылки с помощью create_start_link()
, но обработку ссылки я всё же сделал.
#* Обработчик команды "/help"
@dp.message(Command("help"))
async def help(message: types.Message):
# Формируем текст сообщения с ссылками на команды
help_text = "<b>Содержание:</b>\n"
help_text += f"├ <a href='{link}about'>О боте</a>\n"
help_text += f"├ <a href='{link}features'>Функции</a>\n"
help_text += f" ├ <a href='{link}helpconnect'>/connect</a>\n"
help_text += f" └ <a href='{link}helpcreate'>/create</a>\n"
help_text += f"├ <a href='{link}notations'>Обозначения</a>\n"
help_text += f"├ <a href='{link}inner'>Внутрянка</a>\n"
help_text += f"└ <a href='{link}future'>Будущее</a>\n"
await message.reply(
text=help_text,
parse_mode=ParseMode.HTML
)
#* Обработчик команды "/start"
@dp.message(CommandStart())
async def handler(message: Message, command: CommandObject):
args = command.args
if args == "about":
await message.reply(
text=sections["О боте"],
parse_mode=ParseMode.HTML
)
# и так далее...
для использования заполняем:
sections = {
"О боте": "Описание бота",
"Функции": "Описание функций бота",
"Функции/connect": "Описание функции /connect",
"Функции/create": "Описание функции /create",
"Обозначения": "Описание обозначений",
"Внутрянка": "Описание внутреннего устройства",
"Будущее": "Описание планов на будущее",
}