@AirronBark

Можно ли получить id сообщения от бота (telegram)?

Пишу бота на основе библиотеки aiogram.
Необходимо получить id определённого сообщения от бота.
Ситуация такая: бот выдает из базы данных заказы (циклом) и каждому заказу можно присвоить статус (принят или нет), но чтоб его присвоить мне нужно получить id заказа, а так он храниться в определённом сообщении бота, нужно найти именно это сообщение и еще раз прочитать его, чтоб найти id заказа.
Найти id заказа в сообщении я знаю как, а вот получить id сообщения бота не могу.
Можете что-то подсказать или есть какие-то альтернативные решения данного вопроса?
@dp.callback_query_handler(text='check_new_ords')
async def process_order_callback_2(query: types.CallbackQuery):
        if answer_ord_date == 'check_new_ords':
            if len(records):
                await bot.send_message(query.from_user.id, text='Хорошо! Вывожу новые заказы:')
                for r in records:
                    if r[6] == 1:
                        client_id_1= int(re.search('\d+',r[1]).group(0))
                        cl_name = db.get_client_name(client_id_1)
                        await bot.send_message(query.from_user.id,
                                                 text=f"Заказ № {r[0]}\nСтатус: НА РАССМОТРЕНИИ.\nНазвание работы: {r[2]}\nОписание: {r[3]}\nКлиент: {cl_name}\nДата создания заказа:\n{r[5]}\n\n",
                                                 reply_markup=nav.order_list_admin_1)

                await bot.send_message(query.from_user.id, text='Выберите пункт меню:',reply_markup=nav.back_admin_menu_order)

@dp.callback_query_handler(text="accept_ord")
@dp.callback_query_handler(text="refusal_ord")
async def process_order_callback_3(query: types.CallbackQuery):
    answ_date_2=query.data
    if answ_date_2 == "accept_ord":
        status = 2
## Вот здесь я застрял
        message_id=

##
        db.set_new_status(id, status)
        await bot.send_message(query.from_user.id, text=f'ЗАКАЗ №{id} ПРИНЯТ', reply_markup=nav.back_admin_menu_order)


Конечно, есть вариант в ручную переключать статус в бд, но это будет уже крайний случай.
  • Вопрос задан
  • 2278 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Нельзя найти сообщение по ID. Если имеется в виду получение сообщения как в вашем коде, то
message_id=query.message.message_id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
InternetMaster
@InternetMaster
Интернет
Если у вас есть id сообщения, то вы можете без проблем найти отправленное сообщение полностью!
Суть в том, что вы используете forwardMessage

await bot.forward_message(chat_id=<чат id КУДА ПЕРЕСЛАТЬ СООБЩЕНИЕ>, from_chat_id=<чат id ГДЕ БЫЛО ОТПРАВЛЕНО СООБЩЕНИЕ>, message_id<id сообщения>)


В качестве chat_id можете использовать любой аккаунт. Вообще любой, это неважно, главное чтобы боту удалось сообщение отправить на этот аккаунт

P.S. конечно, надо будет знать message_id сообщения где находится статус заказа, но message_id можно записывать во время отправки сообщения. В случае успеха (то есть если сообщение бот сможет отправить) он вернет Message. Для получения текста - message.text

P.S.S. Этот метод ещё можно использовать для человеко-читаемого формата. То есть если кто-то будет стоять физически, например за пунктом выдачи заказов, то можно в chat_id передать chat_id работяги который выдает заказы, и ему уже придёт сообщение такое же как и пользователю.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы