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

在Nextcord Cogs中实现Slash Commands遇到问题求助

解决Nextcord Slash命令实现及Intents只读问题

一、修复Intents成员属性只读的报错

Nextcord的Intents对象属性是只读的,无法直接赋值修改。要开启members和message_content这类特权意图,可采用以下两种方法:

方法1:合并默认意图与特权意图

先获取默认意图集合,再通过位运算添加所需特权意图:

import nextcord
from nextcord.ext import commands
import os

def main():
    intents = nextcord.Intents.default()
    # 合并成员和消息内容特权意图
    intents |= nextcord.Intents(members=True, message_content=True)

    client = commands.Bot(command_prefix=PREFIX, intents=intents)

    @client.event
    async def on_ready():
        for folder in os.listdir("data"):
            if os.path.exists(os.path.join("data", folder, "cog.py")):
                client.load_extension(f"data.{folder}.cog")
        print(f"已登录:{client.user}")

    client.run(BOT_TOKEN)

if __name__ == "__main__":
    main()

方法2:直接声明所需所有意图

若不需要全部默认意图,可直接列出需要的意图项:

intents = nextcord.Intents(
    guilds=True,          # 必须开启,否则无法处理Slash命令
    members=True,         # 成员特权意图
    messages=True,        # 消息相关事件
    message_content=True  # 消息内容特权意图
)

二、让Slash命令正常生效

1. 补全未定义变量

代码中的GUILD_ID、PREFIX、BOT_TOKEN需替换为实际有效值:

  • GUILD_ID必须是整数类型的服务器ID,不能用字符串
  • BOT_TOKEN从Discord开发者门户获取机器人令牌
  • PREFIX是前缀命令的符号(如!)

2. 调整Cog加载时机(可选)

虽然在on_ready中加载Cog可行,但提前加载可避免错过命令同步时机:

def main():
    # 初始化intents和client...

    # 提前加载所有Cog,无需等待on_ready
    for folder in os.listdir("data"):
        if os.path.exists(os.path.join("data", folder, "cog.py")):
            client.load_extension(f"data.{folder}.cog")

    @client.event
    async def on_ready():
        print(f"已登录:{client.user}")

    client.run(BOT_TOKEN)

3. 手动同步命令(自动同步失败时使用)

若命令未出现在服务器中,可在on_ready事件中手动同步:

@client.event
async def on_ready():
    # 加载Cog...
    # 同步指定服务器的Slash命令
    await client.sync_application_commands(guild_ids=[GUILD_ID])
    print(f"已登录:{client.user}")

4. 检查Cog中的命令代码

确保装饰器和参数格式正确:

import nextcord
from nextcord import Interaction
from nextcord.ext import commands

# 替换为你的实际服务器ID
GUILD_ID = 123456789012345678

class Ping(commands.Cog):
    def __init__(self, client):
        self.client = client

    @nextcord.slash_command(name="test", description="测试Slash命令", guild_ids=[GUILD_ID])
    async def test(self, interaction: Interaction):
        await interaction.response.send_message("Slash命令生效啦!")

def setup(client):
    client.add_cog(Ping(client))

三、最后检查项

  • 确认Discord开发者门户已开启Server Members Intent和Message Content Intent
  • 邀请机器人时,OAuth2 URL已勾选applications.commands权限
  • 机器人在目标服务器拥有管理员权限,或至少拥有Use Application Commands权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:27:28