@theurus

Мультиязычный бот, какие лимиты на запросы к api?

Хочу с помощью гугол переводчика сделать перевод описания бота на все языки. Есть возможность локализовать имя бота, длинное описание, короткое описание и команды. Делается это как от так

bot.set_my_name(tr(new_bot_name, lang), language_code=lang)
.set_my_description()
.set_my_short_description()
.set_my_commands


Сделал, но судя по этим ошибкам не дождусь выполнения никогда. Как это надо правильно делать?

Не удалось установить команды по умолчанию для языка yo: A request to the Telegram API was unsuccessful. Error code: 429. Description: Too Many Requests: retry after 846
...
Не удалось установить имя бота: Bot A request to the Telegram API was unsuccessful. Error code: 429. Description: Too Many Requests: retry after 35118


@bot.message_handler(commands=['init'])
def set_default_commands(message: telebot.types.Message):
    thread = threading.Thread(target=set_default_commands_thread, args=(message,))
    thread.start()
def set_default_commands_thread(message: telebot.types.Message):
    """
    Reads a file containing a list of commands and their descriptions,
    and sets the default commands for the bot.
    """
    # не обрабатывать команды к другому боту /cmd@botname args
    if is_for_me(message.text)[0]: message.text = is_for_me(message.text)[1]
    else: return

    chat_full_id = get_topic_id(message)
    user_lang = get_lang(chat_full_id, message)

    if message.from_user.id not in cfg.admins:
        bot.reply_to(message, tr("Эта команда доступна только администраторам", user_lang))
        return

    def get_seconds(s):
        match = re.search(r"after\s+(?P<seconds>\d+)", s)
        if match:
            return int(match.group("seconds"))
        else:
            return 0

    bot.reply_to(message, tr("Локализация займет много времени, не повторяйте эту команду", user_lang))
    
    # most_used_langs = ['ar', 'bn', 'da', 'de', 'el', 'en', 'es', 'fa', 'fi', 'fr', 'hi',
    #                    'hu', 'id', 'in', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'ro',
    #                    'ru', 'sv', 'sw', 'th', 'tr', 'uk', 'ur', 'vi', 'zh']
    most_used_langs = [x for x in supported_langs_trans if len(x) == 2]

    msg_commands = ''
    for lang in most_used_langs:
        commands = []
        with open('commands.txt', encoding='utf-8') as file:
            for line in file:
                try:
                    command, description = line[1:].strip().split(' - ', 1)
                    if command and description:
                        description = tr(description, lang)
                        commands.append(telebot.types.BotCommand(command, description))
                except Exception as error:
                    my_log.log2(f'Не удалось прочитать команды по умолчанию для языка {lang}: {error}')
        result = False
        try:
            result = bot.set_my_commands(commands, language_code=lang)
        except Exception as error_set_command:
            my_log.log2(f'Не удалось установить команды по умолчанию для языка {lang}: {error_set_command} ')
            time.sleep(get_seconds(str(error_set_command)))
            try:
                result = bot.set_my_commands(commands, language_code=lang)
            except Exception as error_set_command2:
                my_log.log2(f'Не удалось установить команды по умолчанию для языка {lang}: {error_set_command2}')
        if result:
            result = '✅'
        else:
            result = '❌'

        msg = f'{result} Установлены команды по умолчанию [{lang}]'
        msg_commands += msg + '\n'
    reply_to_long_message(message, msg_commands)

    new_bot_name = cfg.bot_name.strip()
    new_description = cfg.bot_description.strip()
    new_short_description = cfg.bot_short_description.strip()

    msg_bot_names = ''
    for lang in most_used_langs:
        result = False
        try:
            result = bot.set_my_name(tr(new_bot_name, lang), language_code=lang)
        except Exception as error_set_name:
            my_log.log2(f'Не удалось установить имя бота: {tr(new_bot_name, lang)}'+'\n\n'+str(error_set_name))
            time.sleep(get_seconds(str(error_set_name)))
            try:
                result = bot.set_my_name(tr(new_bot_name, lang), language_code=lang)
            except Exception as error_set_name2:
                my_log.log2(f'Не удалось установить имя бота: {tr(new_bot_name, lang)}'+'\n\n'+str(error_set_name2))
        if result:
            msg_bot_names += '✅ Установлено имя бота для языка ' + lang + '\n'
        else:
            msg_bot_names += '❌ Установлено имя бота для языка ' + lang + '\n'
    reply_to_long_message(message, msg_bot_names)

    msg_descriptions = ''
    for lang in most_used_langs:
        result = False
        try:
            result = bot.set_my_description(tr(new_description, lang), language_code=lang)
        except Exception as error_set_description:
            my_log.log2(f'Не удалось установить описание бота {lang}: {tr(new_description, lang)}'+'\n\n'+str(error_set_description))
            time.sleep(get_seconds(str(error_set_description)))
            try:
                result = bot.set_my_description(tr(new_description, lang), language_code=lang)
            except Exception as error_set_description2:
                my_log.log2(f'Не удалось установить описание бота {lang}: {tr(new_description, lang)}'+'\n\n'+str(error_set_description2))
                msg_descriptions += '❌ Установлено новое описание бота для языка ' + lang + '\n'
                continue
        if result:
            msg_descriptions += '✅ Установлено новое описание бота для языка ' + lang + '\n'
        else:
            msg_descriptions += '❌ Установлено новое описание бота для языка ' + lang + '\n'
    reply_to_long_message(message, msg_descriptions)

    msg_descriptions = ''
    for lang in most_used_langs:
        result = False
        try:
            result = bot.set_my_short_description(tr(new_short_description, lang), language_code=lang)
        except Exception as error_set_short_description:
            my_log.log2(f'Не удалось установить короткое описание бота: {tr(new_short_description, lang)}'+'\n\n'+str(error_set_short_description))
            time.sleep(get_seconds(str(error_set_short_description)))
            try:
                result = bot.set_my_short_description(tr(new_short_description, lang), language_code=lang)
            except Exception as error_set_short_description2:
                my_log.log2(f'Не удалось установить короткое описание бота: {tr(new_short_description, lang)}'+'\n\n'+str(error_set_short_description2))
                msg_descriptions += '❌ Установлено новое короткое описание бота для языка ' + lang + '\n'
                continue
        if result:
            msg_descriptions += '✅ Установлено новое короткое описание бота для языка ' + lang + '\n'
        else:
            msg_descriptions += '❌ Установлено новое короткое описание бота для языка ' + lang + '\n'
    reply_to_long_message(message, msg_descriptions)
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы