Python Discord聊天机器人:制作情绪计数器



我想为我的discord ChatBot制作一个情绪计数器。该变量应影响对用户的响应。到目前为止,我用python做了两本词典,一本叫回应,一本叫做侮辱。回复很简单,如果用户发送了字典中的消息,机器人就会回复。每次你侮辱机器人时,侮辱词典都会从可变情绪中减去一个固定的量。我写了一个if语句,试图将情绪减去一点,但每当我试图真正侮辱机器人,机器人都不会对我说任何话。请帮忙。请记住,这并不是所有的代码,我愿意提供更深入的解释,说明我有什么问题。

@client.event
async def on_message(message) :
content = message.content.upper()
mood = 2
if content in responses:
if mood <= 0:
await client.send_message(message.channel, responses[content]["RANG"])
if mood == 1:
await client.send_message(message.channel, responses[content]["ANG"])
if mood == 2:
await client.send_message(message.channel, responses[content]["NEU"])
if mood == 3:
await client.send_message(message.channel, responses[content]["HAP"])
if mood == 4:
await client.send_message(message.channel, responses[content]["RHAP"])
if content in insults:
mood = mood - 0.25
if mood <= 0:
await client.send_message(message.channel, insults[content]["RANG"])
if mood == 1:
await client.send_message(message.channel, insults[content]["ANG"])
if mood == 2:
await client.send_message(message.channel, insults[content]["NEU"])
if mood == 3:
await client.send_message(message.channel, insults[content]["HAP"])
if mood == 4:
await client.send_message(message.channel, insults[content]["RHAP"])

您的代码很奇怪,因为您一直在第4行设置mood=2

@client.event
async def on_message(message) :
content = message.content.upper()
mood = 2 # you hard-code your mood here!
if content in responses: # might enter here
if mood <= 0: # mood = 2, so won't enter here
await client.send_message(message.channel, responses[content]["RANG"])
if mood == 1: # mood = 2, so won't enter here
await client.send_message(message.channel, responses[content]["ANG"])
if mood == 2: # mood = 2, so ALWAYS here!
await client.send_message(message.channel, responses[content]["NEU"])
if mood == 3: # mood = 2, so won't enter here
await client.send_message(message.channel, responses[content]["HAP"])
if mood == 4: # mood = 2, so won't enter here
await client.send_message(message.channel, responses[content]["RHAP"])
if content in insults: # might enter here
mood = mood - 0.25 # mood was 2, not it is 1.75
if mood <= 0: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["RANG"])
if mood == 1: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["ANG"])
if mood == 2: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["NEU"])
if mood == 3: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["HAP"])
if mood == 4: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["RHAP"])

您需要从某个地方提取mood。它是从哪里来的?

此外,您使用的是floats,但您的支票都是== <some_int>。您可能需要将所有if mood == <int>更改为elif mood <= <int>

if content in insults: # might enter here
mood = mood - 0.25 # mood was 2, now it is 1.75
if mood <= 0: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["RANG"])
elif mood <= 1: # mood = 1.75, so won't enter here
await client.send_message(message.channel, insults[content]["ANG"])
elif mood <= 2: # mood = 1.75, so ENTER HERE
await client.send_message(message.channel, insults[content]["NEU"])
elif mood <= 3: # elif, so skipped
await client.send_message(message.channel, insults[content]["HAP"])
elif mood <= 4: # elif, so skipped
await client.send_message(message.channel, insults[content]["RHAP"])

让心情全球化

每次都会重置您的mood。为了避免这种情况,请尝试使用discord.py:访问命令之间的变量

mood = 2
@client.event
async def on_message(message) :
content = message.content.upper()
global mood
if content in responses:
.
.
.

最新更新