@dmitriy8720

Почему 2 id, хотя один должен быть?

Подскажите пожалуйста, почему пишет 2 id, хотя у меня один только и все боты его пишут и пложение плюс тоже его показывает, но в таблице записывает другой, если я напишу в группе текст, а мой реальной показывает, когда нажму старт в боте.
62a0fa92dfeab727739182.jpeg
1 я нажал старт в боте и записался, мой настоящий id, 2 я написал в группе текст, но Id уже другой? последние цифры, 2 id стёр.

API_TOKEN = 'moi_token'
    logging.basicConfig(level=logging.INFO)

    bot = Bot(token=API_TOKEN) 
    storage = MemoryStorage()
    dp = Dispatcher(bot, storage=storage)
    dp.middleware.setup(LoggingMiddleware())



    conn = sqlite3.connect("idusers2.db")
    c = conn.cursor()
    #Создание таблицы если не сущ.
    c.execute('''CREATE TABLE IF NOT EXISTS users
            (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER)''')
    conn.commit()
    conn.close()

    class SQLither:

        def __init__(self, database):
            self.conn = sqlite3.connect(database)
            self.c = self.conn.cursor()

        def exists_user(self, user_id):
            """Проверка существования пользователя в БД"""
            return bool(self.c.execute("SELECT * FROM users WHERE user_id=?", (user_id,)).fetchone())

        def add_to_db(self, user_id):
            """Добавление пользователя в БД"""
            self.c.execute("INSERT INTO users ('user_id') VALUES(?)", (user_id,))
            self.conn.commit()

    #db = SQLither("idusers.db")


    @dp.message_handler(commands=['start'])
    async def start(message: types.Message):
        user_id = message.from_user.id
        if not db.exists_user(user_id):
            #Если пользователя нет в БД - добавить.
            db.add_to_db(user_id)
        await message.answer("Здравствуйте, {0.first_name}. \nВаш id: {0.id}".format(message.from_user), parse_mode='html')
        #await bot.send_message(message.chat.id, '\nТекст.')



    @dp.message_handler(content_types=["text"])
    async def message_handler(message: types.Message):
        user_id = message.from_user.id
        if not db.exists_user(user_id):
            #Если пользователя нет в БД - добавить.
            db.add_to_db(user_id)
    		
    db = SQLither("idusers2.db")

    if __name__ == '__main__':
        executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Потому что надо различать message.from_user.id и message.chat.id. Первое - id отправителя. Второе - id чата. На текущий момент API Телеграма реализован так, что для привата с ботом chat_id == user_id, хотя по чисто формальным признакам это необязательно и id чата может отличаться от id пользователя. Но для групп это, разумеется, не может быть так, у групп id отличается от id пользователя всегда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы