• Ошибка записи данных из бота в файл?

    @o5a
    Потому что это так не делается. От того, что хэндлеры записали как вложенные функции, они не будут работать только внутри тех функций. Первый записанный хэндлер одинакового типа (в данном случае content_types=['text']) и будет использоваться для всех вводов.
    В данном случае подойдет использование register_next_step_handler, когда указывается функция, обрабатывающая последующий шаг операции. Про нее много где написано подробно, в т.ч. на этом сайте.
    Для данного бота будет примерно так:
    вместо
    @bot.message_handler(commands=["api_id"])
    def api_id(m, res=False):
        bot.send_message(m.chat.id, 'Введите Api ID, полученное на сайте my.telegram.org')
        @bot.message_handler(func=lambda message: True, content_types=['text'])
        def msg(message):
            print(message.text)
            f = open('C:/Users/асер/Desktop/python/bot/api_id.txt', 'a')
            f.write(message.text + '\n')
            f.close()
            bot.send_message(m.chat.id, 'Прекрасно!')

    сделать так (указать запрос api_id следующим шагом):
    @bot.message_handler(commands=["api_id"])
    def api_id(m, res=False):
        bot.send_message(m.chat.id, 'Введите Api ID, полученное на сайте my.telegram.org')
        # указываем запуск следующего шага обработки - свою функцию
        bot.register_next_step_handler(message, get_api_id)
    
    def get_api_id(message):
        print(message.text)
        with open('C:/Users/асер/Desktop/python/bot/api_id.txt', 'a') as f:
            f.write(message.text + '\n')
        bot.send_message(m.chat.id, 'Прекрасно!')


    Аналогично для обработчиков других команд.
    Ответ написан
    1 комментарий