Два варианта:
1. То как предложил Александр, использовать параметры команды:
@bot.command()
async def report(ctx, user: discord.Membmer, *, reason: str): # первый kwarg используется как "собирающий" аргумент
# https://discordpy.readthedocs.io/en/v1.3.4/ext/commands/commands.html#keyword-only-arguments
...
Команда в таком случае будет вызываться следующим образом:
[p]report User#0000 Нарушение правила 42
2. Ждать ответа:
Для этого вам понадобиться ждать события сообщения:
https://discordpy.readthedocs.io/en/v1.3.4/api.htm...
from asyncio import TimeoutError as AsyncTimeoutError
@bot.command()
async def report(ctx):
...
try:
member = await bot.wait_for("message", check=lambda m: m.author == ctx.author, timeout = 60) # Базовая проверка - будет ловить сообщения от пользователя запустившего команду везде.
except AsyncTimeoutError:
await ctx.send("Вы уснули, я ушёл")
return
# На данный момент переменная "member" является лишь строкой, и не факт что это реальный пользователь
# Используем конвертер для перевода из строки в пользователя
# https://discordpy.readthedocs.io/en/v1.3.4/ext/commands/api.html#discord.ext.commands.MemberConverter
try:
member = commands.MemberConverter().convert(ctx, member)
except commands.BadArgument:
await ctx.send("Это не пользователь, кого вы пытаетесь ~~на...~~ обмануть")
return
# и тоже самое для причины