Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python (discord.py)检查消息是否包含列表中的元素的正确方法是什么?_Python_Python 3.x_Discord_Discord.py_Discord.py Rewrite - Fatal编程技术网

Python (discord.py)检查消息是否包含列表中的元素的正确方法是什么?

Python (discord.py)检查消息是否包含列表中的元素的正确方法是什么?,python,python-3.x,discord,discord.py,discord.py-rewrite,Python,Python 3.x,Discord,Discord.py,Discord.py Rewrite,我想为我的机器人做一个亵渎的过滤器。我允许服务器管理员自己列出我的机器人在服务器上使用的脏话。在on_message函数中,我使用以下代码检查用户的消息是否包含来自过滤器的单词: file = open(f"configs/antiswearvalues/customantiswear/{message.guild.id}.txt") res = [ele for ele in file.read() if (ele in message.content)] if boo

我想为我的机器人做一个亵渎的过滤器。我允许服务器管理员自己列出我的机器人在服务器上使用的脏话。在on_message函数中,我使用以下代码检查用户的消息是否包含来自过滤器的单词:

file = open(f"configs/antiswearvalues/customantiswear/{message.guild.id}.txt")

res = [ele for ele in file.read() if (ele in message.content)]

if bool(res):
    await message.channel.send("you did a bad. time for the boot.")
问题是机器人仍然说你做了坏事。该开机了。即使消息包含元素的片段而不是整个元素

因此,如果列表是['omg'、'crap'、'hell'],bot仍然会警告用户消息中是否包含h或cr,因为hell和crap包含这些内容

我的问题是:如何让我的BOT正确地检查用户的消息是否包含一个列表中的元素?

你应该考虑使用。获取单词黑名单比不使用任何库解析txt文件要容易得多:

您的json文件,例如blacklist.json:

['omg', 'crap', 'hell']
您的python代码:

从json导入加载 @客户端事件 _message上的异步定义消息: 使用openblacklist.json,r: data=loadsfile.read 对于word输入数据: 如果message.content中有单词: 等待message.channel.send您做得不好。该开机了。 回来 <>你的代码没有按计划工作,因为你没有解析你的文件数据,你在探索一个字符串,而不是一个列表。

你应该考虑使用。获取单词黑名单比不使用任何库解析txt文件要容易得多:

您的json文件,例如blacklist.json:

['omg', 'crap', 'hell']
您的python代码:

从json导入加载 @客户端事件 _message上的异步定义消息: 使用openblacklist.json,r: data=loadsfile.read 对于word输入数据: 如果message.content中有单词: 等待message.channel.send您做得不好。该开机了。 回来
您的代码没有按预期工作,因为您没有解析文件数据,您正在探索字符串,而不是列表。

您不应该使用file.readlines返回每行的列表,而不是file.read吗?实际上,看到这个文本文件会很有帮助。@dantechguy文本文件目前只包含列表,每个discord服务器都有自己的文件,所以我使用哪个文件无关紧要。文本文件实际上只是['omg','crap','hell'],那么您需要解析该列表,因为现在file.read将整个文件作为字符串返回。但是您可以使用readlines并更改文件,使每个单词都位于自己的行中:omg\ncrap\n如果您正在对字符串进行迭代。不是名单。它看不到['omg','crap','hell'],它看到的是['omg','crap','hell']。所以当你迭代时,你不会得到omg,垃圾和地狱。你得到[,',o,m,…@TinNguyen是的,这就是问题所在。我将字符串转换为一个正确的列表,现在它可以工作了。谢谢,您不是应该使用file.readlines返回每一行的列表,而不是file.read吗?实际上,查看此文本文件会很有帮助。@dantechguy文本文件目前只包含列表,每个discord服务器都有自己的列表拥有自己的文件,所以我使用哪一个都不重要。文本文件字面上就是['omg','crap','hell']那么,您需要解析该列表,因为现在file.read以字符串形式返回整个文件。但是您可以使用readlines并将文件更改为每个单词都在自己的行中:omg\ncrap\n这是一个字符串。而不是列表。它没有看到['omg','crap','hell'],它看到['omg','crap','hell']所以当你迭代的时候,你不会得到omg,垃圾和地狱。你得到了[,',o,m,…@TinNguyen Yep这就是问题所在。我将字符串转换为一个正确的列表,现在它可以工作了。感谢您只需注意:如果每个黑名单中的单词都在新行上,您还可以将文本文件解析为一栏.csv文件。您仍然需要“导入csv”,但对最终用户来说可能更简单。只需注意:您还可以将文本文件解析为one column.csv文件,如果每个被列入黑名单的单词位于新行上。您仍然需要“导入csv”,但对最终用户来说可能更简单。