我的discord机器人上有一个过滤器,该过滤器会删除所有人(包括“ discord.gg,@ everyone,@ here”)中的消息,除非它们具有管理员角色。我的过滤器检查发送的每条消息,它首先检查该用户是否具有管理员角色,然后检查内容。如果某人在担任管理员角色时发送了一条消息(带有这3个列入黑名单的单词中的一个或全部),则该漫游器将允许发送该消息。 过滤器不知何故停止了工作,我一无所知。该机器人是用discord.py编写的。 问题在于过滤器会阻止漫游器发送任何类型的消息。我已经缩小到第2行(从这段代码开始)。
@client.event
async def on_message(message):
if '735893522032623646' not in str(message.author.roles):
if 'discord.gg' in message.content:
await message.channel.purge(limit=1)
print('had inv link')
if '@everyone' in message.content:
await message.channel.purge(limit=1)
print('had everyone')
if '@here' in message.content:
await message.channel.purge(limit=1)
print('had here')
答案 0 :(得分:1)
'735893522032623646',而str(message.author.roles)是包含Role
个对象而不是Role IDS
的列表,因此您需要检查它是否在Role IDS列表中。
也可以使用message.delete()
而不是purge()
删除邮件,有时purge
也可以删除其他邮件
@client.event
async def on_message(message):
if 735893522032623646 not in [i.id for i in message.author.roles]:
if 'discord.gg' in message.content:
await message.delete()
print('had inv link')
elif '@everyone' in message.content:
await message.delete()
print('had everyone')
elif '@here' in message.content:
await message.delete()
print('had here')
await client.process_commands(message)