Pycord框架下如何在Cogs中创建可用的斜杠命令?
问题修复:Pycord Cog中斜杠命令不生效
核心问题分析
你的代码存在两个关键错误,导致斜杠命令无法生效:
- 主文件未正确加载Cog:
on_ready事件中使用了未定义的cog变量,根本没有加载cogs/test.py这个Cog,命令自然无法注册。 - 斜杠命令回复方法错误:Pycord的斜杠命令上下文需要用
ctx.respond()而非ctx.send(),否则即使命令注册成功也无法正常回复。
修复后的代码
主文件 main.py
import discord import os from discord.ext import commands from dotenv import load_dotenv intents = discord.Intents.all() bot = commands.Bot(command_prefix="t.", intents=intents, help_command=None) @bot.event async def on_ready(): try: # 明确加载test cog bot.load_extension('cogs.test') print('[+] cog "test.py" installed') except Exception as e: # 打印具体错误信息便于排查 print(f'[-] cog "test.py" NOT installed: {str(e)}') load_dotenv() token = os.getenv("TOKEN") bot.run(token)
Cog文件 cogs/test.py
import discord from discord.ext import commands from discord import ApplicationContext class Test(commands.Cog): def __init__(self, bot): self.bot = bot @discord.slash_command(name='ping', description='获取Bot的延迟') async def ping(self, ctx: ApplicationContext): pong = self.bot.latency await ctx.respond(f'pong! `{round(pong*1000)} ms`') def setup(bot): bot.add_cog(Test(bot))
额外说明
- 如果需要快速测试斜杠命令,可以在装饰器中添加
guild_ids=[你的服务器ID],这样命令会立即同步到指定服务器,无需等待全局命令的同步延迟:@discord.slash_command(name='ping', description='获取Bot的延迟', guild_ids=[123456789]) - 确保Pycord版本是最新的,旧版本可能存在Cog斜杠命令的兼容性问题,可以用
pip install -U py-cord更新。
内容的提问来源于stack exchange,提问作者user22936811
相关产品推荐
相关产品推荐

