Python discord bot如何将消息与列表进行比较

Posted

技术标签:

【中文标题】Python discord bot如何将消息与列表进行比较【英文标题】:Python discord bot how to compare messages with a list 【发布时间】:2020-08-24 13:33:43 【问题描述】:

我正在制作一个 python Discord Bot,现在我试图让他响应列表中的某个消息,但存在一些问题,因为他只在消息开始文本时才响应(而不是在中间或结束)。所以我想弄清楚如何让他比较所有文本并与消息列表匹配,发送文本答案。

Python 3.8.2

代码:

import discord
from discord.ext        import commands
from discord.ext.commands   import Bot
import asyncio

bot = commands.Bot(command_prefix = "$")
phrases = ["QWACK","KWAK","AARK","KWAAAK"]

@bot.event
async def on_ready():
    print ("I'm ready!")

@bot.event
async def on_message(message):
    if str(phrases) in message.content:                                                    
        await message.channel.send("dhbang")

【问题讨论】:

【参考方案1】:

我很惊讶机器人的反应 xD

str(phrases) 是一个字符串,这个特定的字符串:"["QWACK","KWAK","AARK","KWAAAK"]"

您应该遍历每个单词,并检查该单词是否在消息中。

您还应该考虑在一封邮件中出现的大小写和多个关键字。

【讨论】:

我放了“str”,因为我只尝试了“短语”,但它给出了错误消息。你建议我怎么写这些台词?【参考方案2】:

正如 wrong1man 所说,str(phrases) 是一个字符串,所以它应该只响应像 Lovely day, isn't it ["QWACK","KWAK","AARK","KWAAAK"]? 这样的消息。 我只想通过提供一些代码来扩展 wrong1man 的答案:

if any((phrase in message.content) for phrase in phrases):                                                    
    await message.channel.send("dhbang")

以上是使用a generator expression的更简洁的版本。如果您是 Python 初学者,您可能更喜欢普通的 for 循环:

for phrase in phrases:
    if phrase in message.content:                                                    
        await message.channel.send("dhbang")
        break

【讨论】:

哦,你。我完全忘记为此使用循环(被卡在不和谐库中)。是的,我是一个初学者(谢谢你的耐心),你们帮了我很多。 @DearFuture 不客气!如果这回答了您的问题,如果您可以将其标记为答案,将会很有帮助。

以上是关于Python discord bot如何将消息与列表进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个参数插入discord bot命令python

Python Discord Bot 将消息与列表进行比较

Discord Python Bot - Bot 的消息不会自动嵌入链接/图像/等

如何使用 discord.js 从 discord bot 向特定用户发送消息

Python discord Bot 处理来自一个用户的消息并在 webhook 中发送它们

Python Discord Bot Prune 命令