如何在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
相关产品推荐
相关产品推荐

