Как в группе проверить forward сообщение на user_id?
Есть бот который пересылает сообщение пользователя в закрытую группу(через forward). Дальше в группе отвечаю на сообщение и сообщение приходит пользователю. Как проверять каждое сообщение в группе по user_id(которое бот прислал через forward)? Пробовал через message.forward_from_chat.id. Выдает ошибку 'NoneType' object has no attribute 'id'. Нужно ли сохранять user_id в бд? Или возможно есть другой вариант решения даной проблемы?
Ответы (1 шт):
Автор решения: biflé
→ Ссылка
Моя мысль, как такое реализовать:
- Создаем БД, в ней храним id сообщения в группе и chat_id откуда оно пришло
- При reply к сообщению, боту возвращается его id, по нему в бд находим chat_id
- Profit
Как выглядит код:
#класс бд
class db:
def __init__(self, database_file):
self.connection = sqlite3.connect(
database_file, check_same_thread=False)
self.cursor = self.connection.cursor()
with self.connection:
self.cursor.execute(
"""CREATE TABLE IF NOT EXISTS `messages` (
`message_id` INTEGER,
`chat_id` INTEGER
);""")
def add_message(self, message_id: int, chat_id: int) -> None:
self.cursor.execute(
'INSERT INTO `messages` VALUES(?,?)',
(message_id, chat_id)
)
self.connection.commit()
def get_id(self, message_id: int) -> int:
result=self.cursor.execute(
'SELECT `chat_id` FROM `messages` WHERE `message_id` = ?',
(message_id,)
).fetchone()
return result[0]
#далее создаем объект базы данных
db=db('{название файла бд}')
@bot.message_handler()
def get_user_text(message):
if message.chat.id != PRIVATE_GROUP:
msg=await message.forward(PRIVATE_GROUP, message.text)
db.add_message(msg.message_id, message.chat.id) #добавляем в бд сообщение
elif message.reply_to_message: #проверяем, является ли сообщение ответом
bot.copy_message(
chat_id=db.get_id(message.reply_to_message.message_id), #chat_id, куда отправляем
from_chat_id=message.chat.id,
message_id=message.message_id
)