Comments 9
Если создать клавиатуру в которой слишком много кнопок (я пытался все возможные языки сделать на одной клавиатуре) то бот умирает полностью. Оживить можно только перевыпустив токен.
Зы у меня в боте локализация на все языки делается с помощью gpt* автоматически.
В тексте программы это выглядит как то так
bot_reply_translated(user_id, 'Привет как дела.', [help='подсказка для ИИ переводчика, можно написать что этот текст надо перевести так что бы он вмещался в столько то символов например или какие то указания для переводчика, объяснение что это за текст для понимания'])
или
msg = f'{tr('Привет как дела, сегодня', user, help='подсказка')} {date}'
bot_reply(user, msg)
Язык юзера берется из базы а туда попадает из настроек или инфы от телеграма
Функция для перевода строк с помощью ИИ запоминает (кеширует) результаты что бы не долбить ИИ постоянно, и вообще быстрее отвечать
Сама функция для перевода с помощью ИИ - простой запрос в чатгпт и аналоги с промптом типа переведи вот этот кусок текста, на такой то язык, вот тебе подсказка для перевода, ну и там же можно немного контроля и самопроверки добавить, + fallback на гугол переводчик. На самом деле там сложнее немного, что бы ИИ отвечал стабильно и правильно ему надо добавить в контекст несколько примеров с запросами и ответами. Бесплатных вариантов типа groq сейчас много так что получается халявная локализация на все языки.
А зачем тут ИИ, просто что бы было? Берете i18n или json файл, или просто в коде структуру в виде массива и делаете переводы всех данных которые требуются.
Отличная статья, местами совсем для начинающих разжевано, но может оно и к лучшему. Пару приемов aiogram узнал, за это спасибо!
Кстати, я недавно делал бота и подвис на этом моменте: как корректно удалить кнопки inline-клавиатуры после клика пользователя? Чтобы не было возможности нажать кнопку ещё раз. У меня получилось либо сделать кнопки ненажимаемыми, либо заменить кнопки на другие. А совсем убрать кнопки под сообщением не удалось...
Блогодарю за отзыв. Вот так удаляйте
await call.message.edit_reply_markup(reply_markup=None)
Эх, это был один из 4-5 вариантов, что я попробовал. И он рабочий! Оказалось, что веб-версия не удаляет кнопки... А сейчас в Android клиенте перепроверил, все работает. Бывает и такое 🙂
async def del_call_kb(call: CallbackQuery):
try:
await bot.edit_message_reply_markup(
chat_id=call.from_user.id,
message_id=call.message.message_id,
reply_markup=None
)
except Exception as E:
print(E)
Вот, кстати, есть такая реализация. Сейчас бота пишу - наткнулся) В FSM сценариях использую функцию. Достаточно просто CallbackQuery объект передать, ну и вообще иногда удобнее через bot отрабатывать. К примеру тут можно было бы просто сохранять айдишник сообщения с CallbackQuery, а после тянуть с базы и удалять клавиатуру даже со временем
await call.message.delete_reply_markup() короче
Отличная статья!!! Автору респект. О себе, я новичок и недавно влился в сообщество разработчиков и начал писать на пайтон. Вопрос к автору или аудитории. по коду. Как из всего списка инлайнкнопок с вопросами, последовательно убрать те кнопки которые были активированы и на них был получен ответ. Спасибо
Telegram Боты на Aiogram 3.x: Инлайн кнопки и CallBack Дата