有没有办法阻止一个不和谐的.py机器人提及角色



我正在用discord.py制作一个discordbot,我有一个say命令,但你可以让bot提到任何角色。我已经阻止它提及"每个人"one_answers"这里",但我不知道如何阻止它提及角色。这是代码

async def say(ctx, *, message=None):
message = message or "You have to type a message"
message_components = message.split()
if "@everyone" in message_components or "@here" in message_components:
await ctx.send("You can not ping everyone")
return
await ctx.message.delete()
await ctx.send(message)

您可以使用message.role_mentions

mentions = message.role_mentions
my_role = ctx.guild.get_role(some_id)
if my_role in mentions:
await ctx.send("You can't mention that role")

如果你有多个角色

my_roles = [] # a list of `discord.Role` objects
mentions = message.role_mentions
if any(role in mentions for role in my_roles):
await ctx.send("You can't mention that role")

另外,检查消息内容中是否提到了@everyone@here的更好方法是,可以使用message.mention_everyone属性

if message.mention_everyone:
await ctx.send("You can't mention everyone")

参考

  • Message.role_mentions
  • Message.mention_everyone

您可以使用正则表达式。假设有效的用户名/角色只允许使用大写/小写字母数字字符:

import re
user_regex = r"@[a-zA-Z0-9]+"
message = "I'm tagging @you and @you2 in this message!"
match = re.findall(user_regex, message)
if match:
await ctx.send("You can not ping everyone")
return

当然,如果您愿意,您可以使用一个非常复杂的正则表达式作为您的用户名。或者,您可以根据自己的需求找出角色的正则表达式,并尝试相应的匹配。

最新更新