在 discord.py 中完成后如何跳过或结束关键字命令?
Posted
技术标签:
【中文标题】在 discord.py 中完成后如何跳过或结束关键字命令?【英文标题】:How to skip or end a keyword command when it done in discord.py? 【发布时间】:2021-07-30 13:42:08 【问题描述】:好吧,这又是我的问题;)
我写了一个回复消息的命令,当discord bot可以检测到句子中的关键字时,它可以工作,就像它可以在检测到句子中的关键字时回复“早上好”(“嘿,大家早上好")。
但是,我在命令中添加了很多关键字,出现了一个问题,当我发送一个句子有2个或以上的关键字时,命令会回复相同数量的消息给发件人。比如我设置了两个关键词“早安”和“祝你有美好的一天”,当有人发送一个包含这两个关键词的句子时,机器人会捕捉到这两个关键词并回复两次消息,对吧?
但我认为这很烦人,有没有任何命令可以停止它在检测到关键字并回复消息时保持检测关键字?就像我在命令中设置了两个关键字,然后有人用这两个关键字发送了一个句子,当机器人检测到一个关键字时,它会停止检测,它只会发送一条回复消息,这就是我想要的。
有人可以帮我解决这个问题吗? 这是我的代码:
async def on_message(msg):
keyword = ['good morning','great','have a nice day']
for key in keyword:
if key in msg.content and key == keyword[0] and msg.author != bot.user:
random_morning = random.choice(jdata['GOODMORNING'])
await msg.channel.send(random_morning)
elif key in msg.content and key == keyword[1] and msg.author != bot.user:
random_reaction_1 = random.choice(jdata['REACTION_1'])
await msg.channel.send(random_reaction_1)
elif key in msg.content and key == keyword[2] and msg.author != bot.user:
random_reaction_2 = random.choice(jdata['REACTION_2'])
await msg.channel.send(random_reaction_2)```
【问题讨论】:
【参考方案1】:尝试将break
放入每个if
/ elif
。像这样:
async def on_message(msg):
keyword = ['good morning','great','have a nice day']
for key in keyword:
if key in msg.content and key == keyword[0] and msg.author != bot.user:
random_morning = random.choice(jdata['GOODMORNING'])
await msg.channel.send(random_morning)
break
elif key in msg.content and key == keyword[1] and msg.author != bot.user:
random_reaction_1 = random.choice(jdata['REACTION_1'])
await msg.channel.send(random_reaction_1)
break
elif key in msg.content and key == keyword[2] and msg.author != bot.user:
random_reaction_2 = random.choice(jdata['REACTION_2'])
await msg.channel.send(random_reaction_2)
break
【讨论】:
你帮我解决了,谢谢兄弟:D以上是关于在 discord.py 中完成后如何跳过或结束关键字命令?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ACTION_IMAGE_CAPTURE 从相机拍摄照片后如何跳过或避免“重拍并查看”选项
如何为导入的库启用 PyCharm 自动完成功能 (Discord.py)