Py-cord机器人添加guild_ids遇403错误及权限控制问题求助
问题解决:Py-cord Discord机器人权限控制与命令部署问题
问题1:添加guild_ids后出现403 Forbidden(错误码50001)
原因及解决方案:
- 权限配置不匹配:确保机器人邀请链接同时包含
bot和applications.commands权限,且邀请到指定服务器中。若之前用全局命令链接邀请,需重新生成带服务器权限的链接重新邀请。 - 服务器角色权限不足:在目标服务器中,给机器人角色分配
管理员权限,或至少开启应用命令相关权限(避免权限缓存导致异常)。 guild_ids格式错误:参数必须传入整数列表,不能用字符串。正确写法为guild_ids=[772141234940018688]。- 刷新命令缓存:执行
bot.sync_commands(),强制同步指定服务器的命令。
问题2:shard_id校验逻辑无效,OpenAI请求仍执行
核心问题:
- 原逻辑中
pass后未终止函数,后续OpenAI请求会无条件执行。 shard_id是机器人分片ID,和用户身份无关,用它做权限控制完全错误,应校验用户ID来限制仅本人使用。
修正后的代码:
@bot.slash_command(name="askgpt", description="Ask a question to AI!", guild_ids=[772141234940018688]) @option( "Inquiry", description="Ask something!", required=True, ) async def askgpt( ctx: discord.ApplicationContext, inquiry: str ): # 替换为你自己的Discord用户ID(整数类型) YOUR_USER_ID = 123456789012345678 if ctx.author.id != YOUR_USER_ID: await ctx.respond('你没有权限使用此命令。') return # 终止函数,避免执行后续代码 # 仅允许本人使用时才执行OpenAI请求 response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": f'尽量用最少的词回答问题:{inquiry}'}, {"role": "user", "content": f'尽量用最少的词回答问题:{inquiry}'} ]) await ctx.respond(response["choices"][0]["message"]["content"])
关键修正点:
- 用
ctx.author.id校验用户身份,替换错误的shard_id判断。 - 校验不通过时执行
return终止函数,阻止后续OpenAI请求和回复。 - 修正
guild_ids格式为整数列表(同步解决第一个问题的格式错误)。
内容的提问来源于stack exchange,提问作者Imnotsure_YT
相关产品推荐
相关产品推荐

