Telegram bot Telebot не реагирует на любые сообщения кроме текстовых
Пишу бота обратной связи, который работает через форум (группа с темами), попрошу помочь найти ошибку в коде. Бота менял, группу менял, аккаунт менял, ничего не помогло.
В общем, бот просто игнорит любые сообщения где content_type не text, пытался отправлять стикеры и картинки, но он их просто не видит.
import telebot
import sqlite3
from telebot.apihelper import ApiTelegramException
db = sqlite3.connect('base.db', check_same_thread=False)
c = db.cursor()
with sqlite3.connect('base.db'):
c.execute('CREATE TABLE IF NOT EXISTS users (user_id INT NOT NULL PRIMARY KEY, topic_id INT NOT NULL)')
bot = telebot.TeleBot("ТОКЕН")
channel_id = АЙДИ ФОРУМА
def send_msg2(message):
try:
bot.copy_message(from_chat_id=channel_id, chat_id=c.execute(f"SELECT user_id FROM users WHERE topic_id = {message.message_thread_id}").fetchone()[0], message_id=message.message_id)
print(message)
except ApiTelegramException as e:
#Проверяем, является ли ошибка блокировкой
if "bot was blocked by the user" in e.description:
bot.send_message(text="Пользователь заблокировал бота. Сообщение не отправлено.", message_thread_id=message.message_thread_id, chat_id=channel_id)
else:
bot.send_message(text="Не удалось отправить сообщение.", message_thread_id=message.message_thread_id, chat_id=channel_id)
def send_msg(message):
try:
bot.copy_message(from_chat_id=message.chat.id, chat_id=channel_id, message_id=message.message_id, message_thread_id=c.execute(f"SELECT topic_id FROM users WHERE user_id = {message.from_user.id}").fetchone()[0])
except ApiTelegramException as e:
if "message thread not found" in e.description:
c.execute(f"UPDATE users SET topic_id = {bot.create_forum_topic(chat_id=channel_id, name=message.from_user.id, icon_color=0x6FB9F0).message_thread_id} WHERE user_id = {message.from_user.id}")
bot.send_message(chat_id=channel_id, message_thread_id=c.execute(f"SELECT topic_id FROM users WHERE user_id = {message.from_user.id}").fetchone()[0], text='Создан новый топик так как старый был удлен.')
bot.copy_message(from_chat_id=message.chat.id, chat_id=channel_id, message_id=message.message_id, message_thread_id=c.execute(f"SELECT topic_id FROM users WHERE user_id = {message.from_user.id}").fetchone()[0])
db.commit()
def create_topic(message):
c.execute(f"INSERT INTO users (topic_id, user_id) VALUES ({bot.create_forum_topic(chat_id=channel_id, name=message.from_user.id, icon_color=0x6FB9F0).message_thread_id}, {message.from_user.id})")
db.commit()
@bot.message_handler(chat_types=['supergroup'])
def receiving(message):
print(message)
with sqlite3.connect('base.db'):
send_msg2(message)
@bot.message_handler(chat_types=['private'])
def send_message(message):
with sqlite3.connect('base.db'):
if c.execute(f'SELECT topic_id FROM users WHERE user_id = {message.from_user.id}').fetchone() is None:
create_topic(message)
send_msg(message)
else:
send_msg(message)
bot.infinity_polling()
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
бот просто игнорит любые сообщения где
content_typeнеtext
Так укажите в content_types что-то ещё кроме текста?♀️
import telebot
bot = telebot.TeleBot("ТОКЕН")
@bot.message_handler(
content_types=[
"audio",
"photo",
"voice",
"video",
"document",
"text",
"location",
"contact",
"sticker",
]
)
def echo(message):
bot.copy_message(message.chat.id, message.chat.id, message.message_id)
bot.infinity_polling()
