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

Pycord机器人Cog编写的斜杠命令无法显示,求解决方案

Pycord Cog斜杠命令无法显示问题排查

我在Pycord机器人中使用Cog编写了斜杠命令,但无法在Discord中看到这些命令。原本尝试手动同步,后来得知Pycord现在支持自动同步,因此已开启bot.auto_sync = True,但问题仍未解决。

相关代码文件

main.py(机器人主文件)

import tracemalloc
tracemalloc.start()

import os
import pathlib

import discord
from discord.ext import commands
from discord import option
from dotenv import load_dotenv
load_dotenv()

CMDS_PATH = pathlib.Path(__file__).parent / "cmds"

intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(intents=intents)
bot.auto_sync = True

@bot.event
async def on_ready():
    print(f'{bot.user} has connected to Discord!')

    for cmd_file in CMDS_PATH.glob("*.py"):
        if cmd_file.name != "__init__.py":
            bot.load_extension(f"cmds.{cmd_file.name[:-3]}")

bot.run(os.getenv("TOKEN"))

cogs/hello.py(测试Cog文件)

import discord
from discord.ext import commands

class test(commands.Cog):
    def __init__(self, bot: discord.Bot):
        self.bot = bot

    @commands.slash_command()
    async def hello(self, ctx): 
        await ctx.defer(ephemeral=True)
        await ctx.respond("hello", ephemeral=True)

def setup(bot: discord.Bot):
    bot.add_cog(test(bot))

问题原因及解决方案

1. 文件夹路径不匹配(最可能原因)

主代码中指定加载cmds目录下的扩展文件,但测试Cog实际放在cogs目录中,导致机器人未加载该Cog,自然不会同步命令。

解决方法:

  • 要么将Cog所在文件夹重命名为cmds,与主代码路径保持一致;
  • 要么修改主代码中的路径配置:
    # 修改路径指向cogs文件夹
    CMDS_PATH = pathlib.Path(__file__).parent / "cogs"
    # 加载扩展时使用cogs前缀
    bot.load_extension(f"cogs.{cmd_file.name[:-3]}")
    

2. Cog加载时机晚于自动同步触发

Pycord的自动同步可能在on_ready事件触发前执行,而你在on_ready中才加载Cog,导致新命令未被同步。

解决方法:
将Cog加载逻辑移到bot.run()之前,确保机器人启动时就加载所有Cog:

# 移除on_ready中的加载代码,替换为以下内容
for cmd_file in CMDS_PATH.glob("*.py"):
    if cmd_file.name != "__init__.py":
        bot.load_extension(f"cogs.{cmd_file.name[:-3]}")  # 路径前缀根据实际调整

bot.run(os.getenv("TOKEN"))

3. 机器人缺少必要权限

确保机器人邀请链接包含applications.commands权限,否则无法在服务器显示斜杠命令。邀请链接需带scope=bot+applications.commands参数,示例:

https://discord.com/oauth2/authorize?client_id=你的机器人ID&scope=bot+applications.commands&permissions=所需权限值

4. 手动触发同步验证

若自动同步仍有问题,可在on_ready中手动触发同步,确认是否生效:

@bot.event
async def on_ready():
    print(f'{bot.user} has connected to Discord!')
    await bot.sync_commands()  # 手动触发命令同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:40:59