Discord.py распознает событие клиента on_message, но операторы IF не отвечают

Я работаю над ботом Discord и в этом случае хочу, чтобы бот бросал 6-гранный кубик, когда любой пользователь дает команду «бросить». См. код ниже. Как ни странно, это работало просто отлично, но теперь триггеры print(worked) и операторы if p_message ничего не делают. Я не получаю никаких ошибок, это просто не работает.

import discord
import random

intents = discord.Intents.all()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_message(message):
  p_message = message
  print("worked")

  if p_message == "roll":
    return str(random.randint(1, 6))

client.run('***') #my token

Я пытался убедиться, что message является str, но это не имеет значения. Опять же, этот код работал раньше (в час ночи, когда я, вероятно, был слишком устал, чтобы писать код) и не выдавал ошибок. Он просто не отвечает на команду в дискорде.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
import discord
import random

# change .all to .default
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)


@client.event
async def on_message(message):
    # use message.content
    if message.content == "roll":
        # send message to the channel that someone types "roll"
        await message.channel.send(random.randint(1, 6))


client.run('***')  # my token

Просто чтобы прояснить, что здесь сделано, message.content используется вместо message, потому что message — это не строка, а сообщение о разногласиях. Причина, по которой условное выражение никогда не срабатывало, заключается в том, что оно никогда не устанавливается в значение true. Также await message.channel.send(random.randint(1, 6)) отправляет обратно. Возможно, вам придется преобразовать random.randint(1,6) в строку, я полагаю, что .send принимает строки, но, возможно, он просто преобразует вместо того, чтобы выдавать ошибку.

Brock Brown 31.03.2023 16:24

Благослови тебя Бог, @It_is_Chris! Похоже, отсутствие команды await препятствовало запуску этого кода, а также блокировало более поздний код. Это сработало! Спасибо!

Jared Robertson 31.03.2023 16:25

@BrockBrown спасибо за добавление объяснения. Я проверил отправку message.channel.send(random.randint(1, 6)), и она работает без необходимости преобразования в строку.

It_is_Chris 31.03.2023 16:30

Другие вопросы по теме