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

如何在nextcord中实现仅本人可通过私信触发的公告命令

Discord机器人私信触发公告命令修改方案

问题原因

原有代码无法在私信场景触发的核心原因是@commands.has_any_role装饰器依赖服务器角色体系,私信上下文不存在角色信息,会直接拦截命令执行。

修改后的完整代码

from nextcord.ext import commands

@client.command()
@commands.dm_only() # 限制命令仅可在私信场景触发
async def pemberitauan(ctx):
    # 请替换为你自己的Discord账号数字ID
    OWNER_USER_ID = 707853874895126598
    if ctx.author.id != OWNER_USER_ID:
        # 非本人触发无响应,可按需添加错误提示
        return
    
    embed = nextcord.Embed(
        color=nextcord.Color.dark_red()
    )
    embed.set_author(name='Kentod', icon_url='https://cdn.discordapp.com/avatars/707853874895126598/fd92dfd8c389bf9f2ba7a756df4b2681.webp?size=48')
    embed.set_image(url='https://cdn.discordapp.com/attachments/865242702668759100/902717752605806612/unknown.png')

    target_channel = client.get_channel(803585009692835851)
    await target_channel.send(embed=embed)
    # 可选:私信回复确认执行结果
    await ctx.send("公告已推送至目标频道")

核心修改说明

  • 移除原有has_any_role装饰器:该装饰器仅在服务器场景生效,私信场景下会直接阻断命令执行
  • 新增dm_only装饰器:严格限制该命令仅能在私信对话中调用,服务器频道发送指令不会响应
  • 新增用户ID校验逻辑:直接比对触发用户的账号ID,仅本人触发时才会执行后续逻辑,权限校验逻辑在私信场景下也可正常生效
  • 可选新增执行成功的私信回执,方便确认命令运行状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:04