Пока я видел только ответы, в которых говорилось, что вам нужно делать. Но не почему вам нужно делать то, что вам сказали. Этот ответ даст вам стратегию и решение, поэтому вам не придется снова задавать эти вопросы. (Не то чтобы это неправильно, но вы можете легко выяснить это самостоятельно, сэкономив много времени).
Шаг 1: Найдите событие (или, в данном случае, как создать команду) в документации
Так как мы хотим понять, как мы можем составлять команды. Сначала мы исследуем, как мы можем составлять команды. Например, эта ссылка помогает вам создавать команды. Чтобы перейти по этой ссылке, введите «Как создавать команды в Discord py» и перейдите по первой ссылке из официальной документации: https://discordpy.readthedocs.io/.
Шаг 2: Посмотрите, какие параметры (объекты) вы получаете от события
Когда мы читаем документацию, вы увидите в первой части, что она использует объект context . И что вы можете использовать его через ввод из функции (переменная ctx). Теперь мы хотим исследовать, что мы можем сделать с объектом ctx / context .
Шаг 3. Понять, для чего можно использовать объекты
Как было сказано ранее, мы хотим понять, как мы можем использовать объекты. В этом случае мы фокусируемся на объекте "ctx". Страница, описывающая объект контекста, сообщает обо всем, что содержит объект ctx. Как видите, первым появляющимся параметром является объект сообщения . Что было частью того, что вы хотели. Таким образом, доступ был бы просто: ctx.message.author
. Но как другие люди говорят использовать: ctx.author
? Если вы прочтете контекстную страницу дальше, мы также увидим член Автор . Также указано, что это сокращение от Message.Author. Это означает, что мы также можем использовать: ctx.author
, чтобы получить точно такой же результат.
Шаг 4. Интегрируйте объекты в ваш код
Теперь мы знаем, как что объект контекста есть, и что мы можем с ним делать. Но как нам это интегрировать?
Ну, сначала полезно напомнить нам о том, чего мы хотели достичь. Мы хотим, чтобы бот не отвечал сам себе. Таким образом, вы просто игнорируете сообщения, которые могут исходить от вашего бота. Нам нужно сравнить, является ли автор входящего сообщения ботом, если оно исходит от бота, нам нужно его игнорировать.
Как указано ранее в шаге 3. Мы можем использовать ctx.message.author
или ctx.author
, чтобы получить автора. Если это равно боту (client.user
), тогда мы должны вернуться раньше.
Это приводит к выражению if, которое проверяет оба значения:
@client.command()
async def amy(ctx):
if ctx.author == client.user:
return
else:
# the rest of your code.
или
@client.command()
async def amy(ctx):
if ctx.message.author == client.user:
return
else:
# the rest of your code.
_________________________________________________________________
Рекомендую прочитать документацию. Поскольку это очень помогает. Часто ввод, который вы получаете от событий / команд, - это все, что вам нужно для выполнения работы. Также это удобно, если вы точно знаете, что вам нужно. Например, вы могли бы выполнить поиск по всем объектам, полученным от функции, и найти в них указанную c переменную и описание, в этом случае вам нужен «Автор». Это может ускорить поиск.
В любом случае полезно знать, для чего можно использовать общие объекты. Поскольку это очень помогает при написании кода для вашего бота.