Вообще задумайся: если у тебя два многословных ника простым текстом подряд, как программа поймёт, где начинается первый ник, и где кончается второй?
Я бы или упростил команду (убрал механизм "ответ на сообщение"), или наоборот, опирался бы на этот механизм в первую очередь.
Вообще discord.py позволяет указывать тип аргумента.
Почитай секции "Basic converters", "Discord Converters" и "typing.Union".
Используя это, ты можешь попробовать схитрить вот так:
# discord.py попытается сначала интерпретировать первый аргумент как пользователя.
# Если не получится - будет просто строка
async def nick(ctx, arg1: typing.Union[discord.Member, str], *, arg2: str = None):
if ctx.message.reference is not None and isintance(arg1, str): # сообщение - это ответ
member = ctx.message.reference.resolved.author
# arg1 будет содержать первое слово ника - доклеиваем к нему остальные.
newnick = f'{arg1} {arg2}' if arg2 is not None else arg1
elif ctx.message.reference is None and isintance(arg1, discord.Member) and arg2 is not None: # сообщение - не ответ
member, newnick = arg1, arg2
else:
... # выводим сообщение о неправильном использовании команды
await member.edit(nick = newnick)
Не факт что сработает. В этом случае либо требуй ввода упоминания, либо вообще сделай слэш-команду и не парься.