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

如何为Discord Bot的每个Cog设置独立前缀?

为Discord Bot的Cog设置独立前缀的方法

可以通过自定义前缀解析函数实现,无需为每个命令单独配置,核心思路是让Bot根据触发命令所属的Cog返回对应前缀。

实现步骤

1. 定义Cog与前缀的映射

创建字典记录每个Cog类对应的前缀:

COG_PREFIXES = {
    "Greetings": "g!",
    # 后续添加其他Cog及对应前缀,比如:
    # "Moderation": "m!",
}

2. 编写自定义前缀解析函数

该函数会判断消息触发的命令所属Cog,返回对应前缀;无匹配时返回默认前缀:

async def get_prefix(bot, message):
    default_prefix = "!"
    
    # 私信场景直接返回默认前缀(可按需调整)
    if not message.guild:
        return default_prefix
    
    content = message.content.strip()
    if not content:
        return default_prefix
    
    # 遍历已加载的Cog和其下命令,匹配对应前缀
    for cog_name, cog in bot.cogs.items():
        for command in cog.walk_commands():
            target_prefix = COG_PREFIXES.get(cog_name, default_prefix)
            if content.startswith(f"{target_prefix}{command.name}"):
                return target_prefix
    
    return default_prefix

3. 初始化Bot时绑定自定义前缀函数

创建Bot实例时,将command_prefix参数设为上述函数:

import discord
from discord.ext import commands

# 确保启用所需的Intents
intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix=get_prefix, intents=intents)

4. 原有Cog代码无需修改

你的Greetings Cog可以保持原有结构:

class Greetings(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
    
    @commands.command()
    async def hello(self, ctx, *, member: discord.Member):
        await ctx.send(f"Hello {member.name}")
        
async def setup(bot):
    await bot.add_cog(Greetings(bot))

使用说明

  • 发送g!hello @用户名即可触发Greetings Cog下的hello命令;
  • 新增Cog时,只需在COG_PREFIXES字典中添加对应条目,无需修改命令代码;
  • 可根据需求扩展前缀函数逻辑,比如支持多前缀、服务器专属Cog前缀等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:35:03