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

Discord.py Cogs中Slash Commands无法同步的问题求助

Discord.py Cog中Slash命令无法同步的排查与解决

核心问题定位

既然主文件中的Slash命令能正常工作,问题大概率出在Cog的命令注册方式、Cog加载逻辑、命令同步时机这几个环节,以下是具体排查和修复方案:

1. 检查Cog的Slash命令写法

Cog中的Slash命令必须遵循Discord.py v2.x的规范,错误写法会导致命令无法被识别:

错误示例

# 错误:未正确绑定到Cog实例,或缺少必要导入
@app_commands.command(name="embed")
async def embed(interaction: discord.Interaction):
    pass

正确写法

import discord
from discord import app_commands
from discord.ext import commands

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

    @app_commands.command(name="send_embed", description="发送测试嵌入消息")
    async def send_embed(self, interaction: discord.Interaction):
        embed = discord.Embed(title="测试标题", description="来自Cog的Slash命令", color=discord.Color.blue())
        await interaction.response.send_message(embed=embed)

# 必须存在异步setup函数,用于Discord.py加载Cog
async def setup(bot: commands.Bot):
    await bot.add_cog(EmbedCog(bot))
    print("EmbedCog 加载完成")

2. 修正main.py的Cog加载与命令同步逻辑

主文件中必须先加载所有Cog,再同步Slash命令,且需用异步方式加载Cog:

正确的main.py核心代码

import discord
from discord.ext import commands
import os

# 配置必要的Intents
intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    print(f"已登录:{bot.user}")
    # 遍历加载cogs文件夹下的所有Cog文件
    for filename in os.listdir("./cogs"):
        if filename.endswith(".py"):
            try:
                await bot.load_extension(f"cogs.{filename[:-3]}")
                print(f"成功加载Cog:{filename[:-3]}")
            except Exception as e:
                print(f"加载Cog失败 {filename[:-3]}: {e}")
    # 同步Slash命令(测试阶段建议指定服务器ID,避免全局同步延迟)
    # 替换成你的测试服务器ID
    test_guild = discord.Object(id=123456789012345678)
    await bot.tree.sync(guild=test_guild)
    # 全局同步(正式环境使用,生效需1小时左右)
    # await bot.tree.sync()
    print("Slash命令同步完成")

bot.run("你的机器人TOKEN")

3. 其他排查点

  • 权限检查:确保机器人在目标服务器中拥有「应用程序命令」权限(服务器设置→角色→机器人角色中开启)
  • 文件路径验证:确认embed.py在discord_bot/cogs/目录下,文件名无拼写错误(区分大小写)
  • 控制台日志:启动机器人时查看控制台,确认Cog加载成功,无报错信息

验证方法

启动机器人后,在测试服务器中输入/,查看命令列表是否出现Cog中定义的Slash命令;如果仍未出现,检查控制台是否有加载报错,或尝试重启机器人重新同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:22:36