在 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)

如何跳过或忽略标题上方的行?

使用 mysqldump 时跳过或忽略临时表

Discord bot 添加对消息 discord.py 的反应(无自定义表情符号)

有没有办法让 Gulp 在不同的环境中跳过或包含 JavaScript 段?