Top.Mail.Ru
Ответы

Как узнать id сообщения и обратиться к нему в другом хендлере?

В хендлере с командой 'check_creator'.
Сообщение начинается так await message.reply(...) - Как узнать его id и обратиться к нему в хендлере, который снизу. Нужно ответить на это же сообщение, но после выполнения условий в хендлере 'sub_check'


1234567891011121314151617181920212223242526272829303132333435363738394041424344
 from aiogram import Bot, Dispatcher, types 
from aiogram.utils import executor 
from keyboards import sub_verification_menu 
 
API_TOKEN = ''  # Замените на свой токен 
GROUP_ID =   # Замените на ID вашей группы (куда необходимо подписаться) 
 
 
bot = Bot(token=API_TOKEN) 
dp = Dispatcher(bot) 
 
 
def sub_verification(chat_member): 
    if chat_member["status"] != "left": 
        return True 
    else: 
        return False 
 
 
@dp.message_handler(commands=['check_creator']) 
async def check_creator(message: types.Message): 
    admins = await bot.get_chat_administrators(chat_id=message.chat.id) 
    creator_id = next(admin.user.id for admin in admins if admin.is_chat_creator) 
    member = await bot.get_chat_member(GROUP_ID, creator_id) 
    if member.status in ('member', 'administrator', 'creator'): 
        await bot.send_message(creator_id, text="Создатель группы является участником.") 
    else: 
        await message.reply("I can't work. The subscription to the bot has ended..\n\n_Only the owner of this group can renew the subscription in private messages with the bot_", parse_mode="Markdown") #Как обратиться к этому сообщение в хендлере, который ниже 
        await bot.send_message(creator_id, text="Ваша подписка закончилась.\n\nПользователи вашей группы просят продлить её", reply_markup=sub_verification_menu) 
 
 
 
 
@dp.callback_query_handler(text="sub_check") 
async def sub_check(message: types.Message): 
    await bot.delete_message(message.from_user.id, message.message.message_id) 
    if sub_verification(await bot.get_chat_member(chat_id="", user_id=message.from_user.id)): 
        await bot.send_message(message.from_user.id, "Ботом теперь можно пользоваться в вашей группе.") 
    else: 
        await bot.send_message(message.from_user.id, "Чтобы получить доступ к боту, подпишись на канал", reply_markup=sub_verification_menu) 
 
 
if __name__ == '__main__': 
    executor.start_polling(dp, skip_updates=True) 
По дате
По Рейтингу
Аватар пользователя
Мыслитель
8мес

Чтобы узнать id сообщения и обратиться к нему в другом хендлере, вы можете использовать следующий подход:

  1. В хендлере check_creator, сохраните id сообщения после его отправки.

  2. Используйте глобальную переменную или хранилище данных (например, словарь) для хранения id сообщения.

  3. В хендлере sub_check, получите сохраненный id сообщения и используйте его для ответа.


Вот как можно модифицировать ваш код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445
 from aiogram import Bot, Dispatcher, types 
from aiogram.utils import executor 
from keyboards import sub_verification_menu 
 
API_TOKEN = ''  # Замените на свой токен 
GROUP_ID =   # Замените на ID вашей группы (куда необходимо подписаться) 
 
bot = Bot(token=API_TOKEN) 
dp = Dispatcher(bot) 
 
# Словарь для хранения id сообщений 
message_ids = {} 
 
def sub_verification(chat_member): 
    return chat_member["status"] != "left" 
 
@dp.message_handler(commands=['check_creator']) 
async def check_creator(message: types.Message): 
    admins = await bot.get_chat_administrators(chat_id=message.chat.id) 
    creator_id = next(admin.user.id for admin in admins if admin.is_chat_creator()) 
    member = await bot.get_chat_member(GROUP_ID, creator_id) 
    if member.status in ('member', 'administrator', 'creator'): 
        await bot.send_message(creator_id, text="Создатель группы является участником.") 
    else: 
        sent_message = await message.reply("I can't work. The subscription to the bot has ended..\n\n_Only the owner of this group can renew the subscription in private messages with the bot_", parse_mode="Markdown") 
        # Сохраняем id сообщения 
        message_ids[creator_id] = sent_message.message_id 
        await bot.send_message(creator_id, text="Ваша подписка закончилась.\n\nПользователи вашей группы просят продлить её", reply_markup=sub_verification_menu) 
 
@dp.callback_query_handler(text="sub_check") 
async def sub_check(callback_query: types.CallbackQuery): 
    await bot.answer_callback_query(callback_query.id) 
    await bot.delete_message(callback_query.from_user.id, callback_query.message.message_id) 
    if sub_verification(await bot.get_chat_member(chat_id=GROUP_ID, user_id=callback_query.from_user.id)): 
        await bot.send_message(callback_query.from_user.id, "Ботом теперь можно пользоваться в вашей группе.") 
        # Получаем id сохраненного сообщения 
        original_message_id = message_ids.get(callback_query.from_user.id) 
        if original_message_id: 
            # Отвечаем на оригинальное сообщение 
            await bot.send_message(callback_query.message.chat.id, "Подписка продлена!", reply_to_message_id=original_message_id) 
    else: 
        await bot.send_message(callback_query.from_user.id, "Чтобы получить доступ к боту, подпишись на канал", reply_markup=sub_verification_menu) 
 
if __name__ == '__main__': 
    executor.start_polling(dp, skip_updates=True) 
Аватар пользователя
Мудрец
8мес

Если ты общаешься с сообщениями, то тогда тебе уже не помочь. 😔