Как в группе проверить forward сообщение на user_id?

Есть бот который пересылает сообщение пользователя в закрытую группу(через forward). Дальше в группе отвечаю на сообщение и сообщение приходит пользователю. Как проверять каждое сообщение в группе по user_id(которое бот прислал через forward)? Пробовал через message.forward_from_chat.id. Выдает ошибку 'NoneType' object has no attribute 'id'. Нужно ли сохранять user_id в бд? Или возможно есть другой вариант решения даной проблемы?


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

Автор решения: biflé

Моя мысль, как такое реализовать:

  1. Создаем БД, в ней храним id сообщения в группе и chat_id откуда оно пришло
  2. При reply к сообщению, боту возвращается его id, по нему в бд находим chat_id
  3. 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 
        )
→ Ссылка