Как ожидать сообщения 2 пользователей aiogram

Как "связать" двух пользователей? Допустим есть бот, который после команды старт отвечает "Попросите второго пользователя зайти в бота и написать /code {code}", и когда второй пользователь вводит команду /code {code} первому пользователю приходило сообщение "{user.id} ввёл этот код"? Сам код будет генерироваться с помощью random.choice() из листа слов, пример: "loremipsum", "randomtext" и т.п.. Заранее спасибо.


Ответы (1 шт):

Автор решения: CausonQ

Используйте 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)
    
→ Ссылка