Я работаю над ботом 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
, но это не имеет значения. Опять же, этот код работал раньше (в час ночи, когда я, вероятно, был слишком устал, чтобы писать код) и не выдавал ошибок. Он просто не отвечает на команду в дискорде.
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
Благослови тебя Бог, @It_is_Chris! Похоже, отсутствие команды await
препятствовало запуску этого кода, а также блокировало более поздний код. Это сработало! Спасибо!
@BrockBrown спасибо за добавление объяснения. Я проверил отправку message.channel.send(random.randint(1, 6))
, и она работает без необходимости преобразования в строку.
Просто чтобы прояснить, что здесь сделано,
message.content
используется вместоmessage
, потому чтоmessage
— это не строка, а сообщение о разногласиях. Причина, по которой условное выражение никогда не срабатывало, заключается в том, что оно никогда не устанавливается в значение true. Такжеawait message.channel.send(random.randint(1, 6))
отправляет обратно. Возможно, вам придется преобразоватьrandom.randint(1,6)
в строку, я полагаю, что .send принимает строки, но, возможно, он просто преобразует вместо того, чтобы выдавать ошибку.