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

Discord机器人开发需求:拒申请发DM并添加角色权限校验

Discord机器人/deny命令优化方案

核心修改点

  • 新增目标用户参数,让命令能指定被拒绝的用户,而非仅给命令发起者发消息
  • 添加角色权限校验,仅允许指定角色的成员执行拒绝操作
  • 增加异常处理,应对无法向用户发送私信的场景(如用户关闭了私信权限)

优化后完整代码

import discord
from discord.ext import commands

# 替换为你允许执行该命令的角色ID(建议用ID,避免角色名称变更影响)
ALLOWED_ROLE_ID = 123456789012345678

@bot.slash_command(name="deny", description="拒绝用户的申请并发送私信通知")
async def deny(ctx, user: discord.User, msg: str):
    # 检查命令发起者是否拥有指定角色
    has_permission = any(role.id == ALLOWED_ROLE_ID for role in ctx.author.roles)
    if not has_permission:
        await ctx.respond("你没有权限执行此命令", ephemeral=True)
        return
    
    # 尝试向目标用户发送私信
    try:
        await user.send(msg)
        await ctx.respond(f"已向用户 {user.mention} 发送拒绝通知", ephemeral=True)
    except discord.Forbidden:
        await ctx.respond(f"无法向用户 {user.mention} 发送私信,对方可能关闭了私信权限", ephemeral=True)

关键代码说明

  • 角色权限校验:通过遍历发起者的角色列表,对比预设的角色ID判断权限,用ID比角色名称更稳定,避免角色重名或改名导致校验失效
  • 目标用户参数:使用discord.User类型作为参数,Discord会自动在命令界面提供用户选择器,方便快速选择目标用户
  • 异常处理:捕获discord.Forbidden异常,当用户关闭私信或机器人被拉黑时,给命令发起者发送提示,避免机器人报错
  • ephemeral=True:让机器人的回复仅命令发起者可见,避免频道内消息杂乱

内容的提问来源于stack exchange,提问作者The OPKNIGHT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:35:34