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

如何在Discord.py中将斜杠命令拆分至独立文件?

将Discord斜杠命令迁移至独立文件的实现方案

一、调整项目文件结构

先给项目新增一个commands目录,用来存放拆分后的命令文件,最终结构如下:

你的项目根目录/
├── main.py
├── bot.py
├── commands/
│   ├── __init__.py  # 空文件即可,用于标记Python包
│   └── nick_commands.py  # 存放昵称相关斜杠命令
└── Nick_Handler.py  # 原有的昵称处理逻辑文件

二、编写独立命令文件(以nick_commands.py为例)

把原来写在bot.py里的斜杠命令迁移到这个文件中,基础版代码示例:

import discord
from discord import app_commands
from Nick_Handler import Nick_Handler

# 定义单个斜杠命令
@app_commands.command(
    name="changenick",
    description="修改你的昵称,需等待管理员审核"
)
@app_commands.describe(nickname="你的新昵称")
async def change_nick(interaction: discord.Interaction, nickname: str):
    # 用interaction.client替代原有的bot实例
    await Nick_Handler.ChangeNick(interaction, interaction.client, nickname)

# Discord.py约定的加载函数,会被bot自动调用
def setup(bot):
    bot.tree.add_command(change_nick)

如果需要把同类型命令归类成命令组(比如/nick change),可以用app_commands.Group优化结构:

import discord
from discord import app_commands
from Nick_Handler import Nick_Handler

class NickCommands(app_commands.Group):
    def __init__(self, bot):
        super().__init__(name="nick", description="昵称管理相关命令")
        self.bot = bot

    @app_commands.command(name="change", description="修改你的昵称,需等待管理员审核")
    @app_commands.describe(nickname="你的新昵称")
    async def change_nick(self, interaction: discord.Interaction, nickname: str):
        await Nick_Handler.ChangeNick(interaction, self.bot, nickname)

def setup(bot):
    bot.tree.add_command(NickCommands(bot))

三、修改bot.py加载命令文件

在run_discord_bot函数中添加命令加载逻辑,同时同步斜杠命令到Discord:

import discord
from discord.ext import commands
import os

TOKEN = "你的机器人令牌"

def run_discord_bot():
    bot = commands.Bot(command_prefix=";", intents=discord.Intents.all())

    @bot.event
    async def on_ready():
        print(f'{bot.user} 已启动运行')
        
        # 遍历commands目录,加载所有命令文件
        for filename in os.listdir("./commands"):
            if filename.endswith(".py") and filename != "__init__.py":
                # 加载扩展文件,格式为"commands.文件名"(去掉.py后缀)
                await bot.load_extension(f"commands.{filename[:-3]}")
        
        # 同步斜杠命令到Discord(全局命令同步可能需要几分钟生效)
        # 若要快速同步到指定服务器,可添加guild参数:guild=discord.Object(id=你的服务器ID)
        await bot.tree.sync()
        print("斜杠命令已同步至Discord")

    # 保留原有的其他事件逻辑

    bot.run(TOKEN)

四、验证运行

  1. 确保所有文件保存完毕
  2. 运行main.py启动机器人,控制台会输出机器人启动和命令同步的提示
  3. 在Discord服务器中即可使用拆分后的斜杠命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:21