Как получить first_name из callbackquery в aiogram?
Я делаю телеграм бота и хочу сделать интерактив между пользователями бота с помощью кнопок,
подскажите как сделать чтобы получать first_name другого человека из callback. Я могу получить свой first_name используя callback.from_user.first_name , но как мне вытащить first_name из сообщения на которое я ответил. Выглядит это так:
@dp.message_handler(commands=['rp', 'рп'])
async def roleplay(message: types.Message):
if not message.reply_to_message:
return await message.reply('Команда должна быть ответом на сообщение!')
elif message.reply_to_message:
await message.reply('Доступные взаимодействия', reply_markup=togrp_kb1)
@dp.callback_query_handler(text='smile')
async def smile(callback: types.CallbackQuery):
await callback.message.edit_text(text=f'{callback.from_user.first_name} улыбнулся {какому-то пользователю}')
То есть я пишу /rp ответом на сообщение у меня появляется кнопка и при нажатии на кнопку, сообщение редактируется и там какое-то действие. Я пытался доставать так callback.message.reply_to_message.from_user.first_name
Но он достаёт моё имя.
А нужен другой пользователь. Может как то получать из get_chat_member? Как поступить? Что посоветуете?
Ответы (2 шт):
Данный вопрос решил так:
Используя global
@dp.message_handler(commands=['rp', 'рп'])
async def roleplay(message: types.Message):
global otherusername
otherusername = message.reply_to_message.from_user.first_name
if not message.reply_to_message:
return await message.reply('Команда должна быть ответом на сообщение!')
elif message.reply_to_message:
await message.reply('Доступные взаимодействия', reply_markup=togrp_kb1)
Затем нажимаем на кнопку
В самой кнопке код:
@dp.callback_query_handler(text='smile')
async def smile(callback: types.CallbackQuery):
await callback.message.edit_text(text=f'{callback.from_user.first_name} улыбнулся {otherusername}')
В ответ получаем сообщение по типу: Миша улыбнулся Вася
Так как я не нашел способ чтобы получить другого пользователя через callback.
Было принято решение просто отказаться от кнопок в данном случае, а просто использовать обычные штатные команды, то есть /hug @user, то есть использовать в качестве обработчика событий @dp.message.handler(commands=['hug']).
Таким образом можно проще получить другого пользователя используя метод get_args, который берет аргументы после команды.
В ответ будет получаться что текущий пользователь обнял указанного.
Пример: /hug @Alice
Миша обнял пользователя @Alice.
Так и решается данная проблема.