@CteplerMarinovich

Как получить chat_id из обьекта query | Aiogram?

У меня есть вот такая функция, которая зписывает юзера в очередь:
@dp.callback_query_handler(text='support')
async def CheckSubcribtion(query: types.CallbackQuery):
    global ADMINS
    if SQLiteRequests.SetInQueue(query.from_user.id) == True:
        await bot.send_message(query.from_user.id, 'Ваш запрос был направлен в очередь, скоро вам ответит менеджер.')
        print(query.from_user.id)
        for a in ADMINS:
            await bot.send_message(chat_id=a, text='Пользователь обратился в службу поддержки.', reply_markup=MK.SupportButtons)
            print(a)

    else:
        await bot.send_message(query.from_user.id, 'Вы уже направили запрос на обращение в поддержку, пожалуйста, ожидайте!')


В качестве аргумента для SetInQueue я использую id юзера, но когда я пытаюсь явно отправить в чат с этим юзером сообщение, получаю ошибку, мол чат не найден, следовательно id пользователя и chat_id пользователя вещи разные, тогда какой метод возвращает чат айди? Методом перебора ничего не нашел... Хотя у обьекта message это поле существкет.
  • Вопрос задан
  • 1279 просмотров
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Очевидно, в данном случае запрос делается из группового чата, а у групповых чатов user_id не совпадает с chat_id. Это вообще очень распространённая ошибка. Я вообще рекомендую всем всегда явно использовать chat_id, потому что в теории Телеграм может когда-нибудь даже для личных чатов начать использовать id, отличные от id пользователей.

В query есть объект query.message, который содержит исходное сообщение, в котором нажали на кнопку. А в нём, соответственно, есть query.message.chat с объектом чата. А в query.message.chat уже есть id.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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