基本上就像问题一样。我想创建一个机器人,如果消息的作者在我的服务器中没有机器人或可信任的角色,它将删除带有附件的消息。
目前我有这个:
**if message.attachments:
if not "*roleID*" or "roleID" in [role.id for role in message.author.roles]:
await client.delete_message(message)
await client.send_message(message.channel, "Sorry mate only trusted members or bots can attach things to prevent spam")**
答案 0 :(得分:1)
在不知道您的完整代码的情况下,此代码段似乎接近实现您想要执行的操作,它只是第二个if
条件格式错误并导致问题。
假设您将*roleID*
和roleID
替换为相应的机器人和受信任角色ID,*roleID*
将始终返回True
,无论您将哪些内容添加到字符串中,因为它不是空的。此时or
的任何内容都被忽略了,if
语句将始终返回True
,删除任何通过此代码的消息。
另外需要注意的是,您应该使用您为roleID
个检查而不仅仅是一个检查所做的列表理解,因此您必须将其保存到变量中。
尝试查看以下内容是否有效:
if len(message.attachments) > 0:
author_roles = [role.id for role in message.author.roles]
# replace both botRoleId and trustedRoleID with the respective IDs (as strings, because role.id is a string as well)
if "botRoleID" not in author_roles or "trustedRoleID" not in author_roles:
await client.delete_message(message)
await client.send_message(message.channel, "Sorry mate only trusted members or bots can attach things to prevent spam")
我希望我能帮忙!