Как ожидать сообщения 2 пользователей aiogram
Как "связать" двух пользователей? Допустим есть бот, который после команды старт отвечает "Попросите второго пользователя зайти в бота и написать /code {code}", и когда второй пользователь вводит команду /code {code} первому пользователю приходило сообщение "{user.id} ввёл этот код"? Сам код будет генерироваться с помощью random.choice() из листа слов, пример: "loremipsum", "randomtext" и т.п.. Заранее спасибо.
Ответы (1 шт):
Используйте Deep-linking:
t.me/<bot_username>?start=<parameter>
Выдайте первому пользователю ссылку с доп параметром: t.me/namebot?start=123456, которую он передаст второму пользователю.
Когда второй пользователь перейдет по это ссылке, и нажмет кнопу Старт, боту будет передана команда /start 123456
И делайте то, что необходимо:
@router.message(CommandStart())
async def handler(message: Message, command: CommandObject, bot: Bot):
if command.args:
first_user_id = await db.first_user_id(command.args) # тут нужно получить откуда-нибудь id первого пользователя (предполагаю, что он хранится в БД и был записан ранее, при выдаче ссылки первому пользователю), либо сразу передавать id первого пользователя в параметре
await bot.send_message(first_user_id, f"{first_user_id} ввёл этот код")
Примерно так. Надеюсь, понятно объяснил
UPD: Если передавать аргумент не с командой /start, а другой, то будет немного отличаться:
@dp.message(Command("code"))
async def cmd_settimer(message: Message, command: CommandObject, bot: Bot):
arg = command.args
Это для команды вида /code {code}
UPD Для aiogram 2 можно так сделать:
@dp.message_handler(commands="code")
async def coord(message: types.Message):
arg = message.get_full_command()[1].split(' ')
await message.answer(arg)