Discord.py能否在单个文件中定义多个自定义命令?
问题解答
Discord.py完全支持在单个文件里定义多个自定义命令,你遇到的问题核心是只有第一个命令添加了@bot.command()装饰器,其余命令没加——这个装饰器是告诉Discord.py“这是一个bot命令”的关键,没加的话bot根本不会把这些函数识别成命令。
你的代码里只在TestCommand前加了装饰器,后面的AddRoles、RemoveRoles等都没加,所以bot只会响应第一个命令,其余的都会提示“command not found”。
修正后的代码示例:
# 导入相关模块 import discord from discord.ext import commands # 定义辅助函数 def helper_func(): # 辅助逻辑实现 pass # 配置intents(根据需求调整) intents = discord.Intents.default() intents.message_content = True # 若需处理消息内容,必须开启此权限 # 初始化bot bot = commands.Bot(command_prefix='$', intents=intents) # 每个命令都需要单独添加@bot.command()装饰器 @bot.command() async def TestCommand(ctx, *params): # 命令逻辑 await ctx.send("测试命令执行成功") @bot.command() async def AddRoles(ctx, *params): # 命令逻辑 await ctx.send("添加角色命令执行成功") @bot.command() async def RemoveRoles(ctx, *params): # 命令逻辑 await ctx.send("移除角色命令执行成功") @bot.command() async def AddToList(ctx, *params): # 命令逻辑 await ctx.send("添加到列表命令执行成功") # 启动bot bot.run("你的Bot令牌")
额外注意:
- 所有命令函数的第一个参数必须是
ctx(上下文对象),这是Discord.py命令的强制要求,原代码缺失ctx也可能引发异常 - 确保intents配置符合你的功能需求,比如涉及消息内容处理时,必须开启
message_content权限
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

