You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查特定频道权限?实现无嵌入链接权限时自动删链接功能

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:33:15