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

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请求仍执行

核心问题:

  1. 原逻辑中pass后未终止函数,后续OpenAI请求会无条件执行。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:53