В чём причина ошибки 409 при использовании Telebot?

Как исправить ошибку "telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running" при работе с кодом, где бот запущен только один раз, но токен был изменен несколько раз? 

Вот код:

from flask import Flask, render_template, request, redirect, url_for, flash, make_response, current_app
from flask_socketio import SocketIO
from flask_sqlalchemy import SQLAlchemy
import telebot
from threading import Thread
from app import *

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///Coin.db"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

socketio = SocketIO(app)
db = SQLAlchemy(app)

bot_token = token
bot = telebot.TeleBot(bot_token)
bot.set_webhook()

@bot.message_handler(commands=['start'])
def handle_start(message):
    bot.reply_to(message, "Привет! Это мой телеграм-бот!")

@app.route('/')
def index():
    return render_template('index1.html')

@app.route('/login')
def login():
    return render_template('auth/login.html')

@app.route('/login/<string:token>')
def login_token(token):
    return render_template('auth/login.html')

if __name__ == '__main__':
    Thread(target=bot.infinity_polling).start()
    socketio.run(app, debug=True)
    
У меня возникает ошибка "telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 409. Description: Conflict: terminated by other getUpdates request; make sure that only one bot instance is running", хотя бот запущен только один раз в этом коде. Токен бота менял несколько раз. Как я могу исправить эту ошибку?
  • 24 октября 2023 г. 16:28
Ответы на вопрос 1
Ошибка 409 возникает, когда бот пытается выполнять одновременные запросы к Telegram API из разных источников, и Telegram обнаруживает конфликт между ними. 

Чтобы исправить эту ошибку, вам необходимо убедиться, что все предыдущие запросы или экземпляры бота были корректно остановлены. Также убедитесь, что вы не используете несколько экземпляров бота в разных частях кода или устройствах.

В вашем коде вы запускаете экземпляр бота в отдельном потоке, используя функцию `bot.infinity_polling()`. Однако, если вы ранее запускали бота без использования потока и его экземпляр продолжает работать, останавливать его можно с помощью метода `bot.stop_polling()`. 

Попробуйте добавить следующую строку перед запуском нового экземпляра бота в отдельном потоке:
```python
bot.stop_polling()
```
Это должно остановить предыдущий экземпляр бота перед запуском нового.

Также убедитесь, что вы правильно обрабатываете и сохраняете новый токен бота и передаете его в `bot_token`.
Похожие вопросы