如何检查特定频道权限?实现无嵌入链接权限时自动删链接功能
Discord机器人:无嵌入链接权限时自动删除用户发送的链接
实现逻辑
- 监听频道内所有消息,先判断内容是否包含链接
- 检查发消息的用户在当前频道的**嵌入链接(Embed Links)**有效权限(Discord会自动叠加用户所有角色的权限,无需逐个角色判断)
- 若用户无此权限,直接删除消息并发送提示;有权限则不做处理
修正后的完整代码
import discord import re # 初始化客户端(替换为你的机器人令牌) intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) # 匹配常见http/https链接的正则表达式 LINK_PATTERN = re.compile(r'https?://\S+') @client.event async def on_message(message): # 忽略机器人自身消息,避免循环触发 if message.author.bot: return # 判断消息是否包含链接 if LINK_PATTERN.search(message.content): # 获取用户在当前频道的有效权限 channel_perms = message.author.permissions_in(message.channel) # 检查嵌入链接权限 if not channel_perms.embed_links: # 删除违规消息 await message.delete() # 发送提示并自动清理 await message.channel.send(f"{message.author.mention} 你没有嵌入链接权限,禁止发送链接!", delete_after=5) # 启动机器人 client.run("你的机器人令牌")
关键说明
- 权限判断:
message.author.permissions_in(message.channel)直接获取用户的有效权限,自动处理角色权限叠加逻辑,无需手动遍历角色 - 链接匹配:正则
https?://\S+覆盖绝大多数公开链接,可根据需求调整规则 - 防循环处理:跳过机器人自身消息,避免误删提示内容
- 自动清理:提示消息5秒后自动删除,避免频道信息冗余
内容的提问来源于stack exchange,提问作者Kaze
相关产品推荐
相关产品推荐

