Pull to refresh

Comments 9

Если создать клавиатуру в которой слишком много кнопок (я пытался все возможные языки сделать на одной клавиатуре) то бот умирает полностью. Оживить можно только перевыпустив токен.

Зы у меня в боте локализация на все языки делается с помощью gpt* автоматически.

В тексте программы это выглядит как то так

bot_reply_translated(user_id, 'Привет как дела.', [help='подсказка для ИИ переводчика, можно написать что этот текст надо перевести так что бы он вмещался в столько то символов например или какие то указания для переводчика, объяснение что это за текст для понимания'])

или

msg = f'{tr('Привет как дела, сегодня', user, help='подсказка')} {date}'
bot_reply(user, msg)

Язык юзера берется из базы а туда попадает из настроек или инфы от телеграма

Функция для перевода строк с помощью ИИ запоминает (кеширует) результаты что бы не долбить ИИ постоянно, и вообще быстрее отвечать

Сама функция для перевода с помощью ИИ - простой запрос в чатгпт и аналоги с промптом типа переведи вот этот кусок текста, на такой то язык, вот тебе подсказка для перевода, ну и там же можно немного контроля и самопроверки добавить, + fallback на гугол переводчик. На самом деле там сложнее немного, что бы ИИ отвечал стабильно и правильно ему надо добавить в контекст несколько примеров с запросами и ответами. Бесплатных вариантов типа groq сейчас много так что получается халявная локализация на все языки.

А зачем тут ИИ, просто что бы было? Берете i18n или json файл, или просто в коде структуру в виде массива и делаете переводы всех данных которые требуются.

ИИ тут что бы не брать 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, а после тянуть с базы и удалять клавиатуру даже со временем

Отличная статья!!! Автору респект. О себе, я новичок и недавно влился в сообщество разработчиков и начал писать на пайтон. Вопрос к автору или аудитории. по коду. Как из всего списка инлайнкнопок с вопросами, последовательно убрать те кнопки которые были активированы и на них был получен ответ. Спасибо

Sign up to leave a comment.

Articles