Zakkaru, ну вот вам логика работы, а именно: "Что происходит, когда вы пытаетесь вызвать команду"
Вася Пупкин пишет команду: !sad @Смирнов.
В этот момент, бот разбирает эту писанину и разбирает все аргументы в команде !sad
У него в голове складывается такая схема: self -> Контекст; ctx -> @Смирнов; member -> ??(Что-то, отсутствует. Дается три аргумента, а вводится всего два.)??.
Это совсем простое и топорное объяснение, но оно явно отражает суть.
Zakkaru,
Передайте ctx первым аргументом. async def sad(ctx, member: discord.Member)
Даже ошибка вам прямо заявляет о том, что аргумент с указанием второго пользователя - пуст.
Vindicar, однако был действительно не прав. Привык к хорошему так сильно, что и уже и понятия не имею что есть в базе discord.py а чего нету.
К сожалению в стандартной библиотеке действительно нет такого метода.
Так что я глядел бы в сторону слэш-команд, вот там, такой тип имеется точно.