Выдает ошибку telebot

Ошибка:

telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: chat not found

Скрипт:

import telebot
from telebot import types 
import sqlite3

users_list = set()
TOKEN = ''

bot = telebot.TeleBot(TOKEN)


@bot.message_handler(commands=['start'])
def start(message):
    conn = sqlite3.connect('mainn.sql')
    cur = conn.cursor()
    ID = int(message.chat.id)
    cur.execute('CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, nameid int)')
    cur.execute("INSERT INTO users (nameid) VALUES ('%s')" % (ID))
    conn.commit()
    cur.close()
    conn.close()
    
    bot.send_message(message.chat.id, 'g')


@bot.message_handler(commands=['info'])
def info(message):
    global users_list
    conn = sqlite3.connect('mainn.sql')
    cur = conn.cursor()
    cur.execute('SELECT * FROM users')
    users = cur.fetchall()
    for user in users:
        users_list.add(user)
    for userr in users_list:
        bot.send_message(userr, userr)
    cur.close()
    conn.close()


bot.infinity_polling()

Ответы (1 шт):

Автор решения: Den

Ошибка Bad Request: chat not found часто возникает, когда попытка отправить сообщение производится в чат, который не существует, или когда бот был заблокирован пользователем. В вашем случае это может быть связано с функцией info, где вы пытаетесь отправить сообщение пользователям из списка users_list.

Давайте шаг за шагом разберём возможные проблемы и их решения:

1 Проверьте токен бота: Убедитесь, что вы используете правильный токен, который вы получили от BotFather в Telegram.

2 Проверка наличия пользователя: Перед тем как отправлять сообщение, нужно убедиться, что пользователь начал диалог с ботом, и бот не заблокирован этим пользователем.

3 Использование правильного ID: В таблице users вы сохраняете nameid как целочисленное значение. В вашем цикле вы пытаетесь отправить сообщение по userr, который представляет собой кортеж, а не ID пользователя. Вам нужно извлечь ID из этого кортежа перед отправкой сообщения.

4 Применение try-except: Использование блоков try-except для перехвата исключений позволит вам увидеть, на каком именно пользователе возникает ошибка и обработать её соответствующим образом.

Давайте поправим функцию info:

@bot.message_handler(commands=['info'])
def info(message):
    conn = sqlite3.connect('mainn.sql')
    cur = conn.cursor()
    cur.execute('SELECT * FROM users')
    users = cur.fetchall()
    cur.close()
    conn.close()

    for user in users:
        user_id = user[1]  # Извлекаем ID пользователя из кортежа
        try:
            bot.send_message(user_id, f"Ваш ID: {user_id}")
        except telebot.apihelper.ApiTelegramException as e:
            print(f"Не удалось отправить сообщение пользователю {user_id}: {e}")

В этом коде мы получаем user_id из кортежа user (предполагая, что ID пользователя находится на второй позиции в кортеже), а затем отправляем сообщение этому пользователю. Если возникает исключение, мы его перехватываем и выводим сообщение об ошибке в консоль.

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

→ Ссылка