Выдает ошибку 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 шт):
Ошибка 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 пользователя находится на второй позиции в кортеже), а затем отправляем сообщение этому пользователю. Если возникает исключение, мы его перехватываем и выводим сообщение об ошибке в консоль.
Если вы продолжите сталкиваться с ошибкой, проверьте, есть ли у вашего бота разрешение на отправку сообщений указанным пользователям и не заблокирован ли он.