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

如何使用discord.py实现单个命令无需前缀即可触发?

实现discord.py单命令无前缀触发的方案

前置修改

先把你原来硬编码为空的前缀改回正常使用的默认前缀,比如习惯用!作为普通命令的前缀,同时开启必要的消息内容意图,否则机器人无法读取用户消息内容:

# 开启消息内容意图,需要同时在Discord开发者后台的Bot设置页开启Message Content Intent
intents = discord.Intents.default()
intents.message_content = True

client = commands.Bot(command_prefix = '!', intents=intents)

方案1:通过on_message事件手动触发(最灵活,推荐新手使用)

新增on_message事件监听,匹配到你要无前缀触发的命令关键词时,手动调用对应命令逻辑即可,记得保留process_commands保证其他带前缀的命令正常运行:

@client.event
async def on_message(message):
    # 过滤机器人自己发的消息,避免循环触发
    if message.author.bot:
        return
    # 匹配你要无前缀触发的命令,比如你要让test命令无需前缀触发
    if message.content.strip() == 'test':
        # 获取命令上下文后手动调用test命令
        ctx = await client.get_context(message)
        await client.get_command('test')(ctx)
    # 处理其他带前缀的正常命令,必须保留
    await client.process_commands(message)

如果要给其他命令加无前缀触发,只要多加if判断对应关键词即可。

方案2:使用动态前缀函数

你也可以给command_prefix传入一个动态生成前缀的函数,对指定的命令允许空前缀,其他命令仅允许正常前缀:

def get_prefix(bot, message):
    # 把你要无前缀触发的命令名放到这个列表里
    no_prefix_commands = ['test']
    for cmd in no_prefix_commands:
        if message.content.strip().startswith(cmd):
            # 匹配到目标命令时,同时支持空前缀和默认前缀!
            return ['', '!']
    # 其他命令仅支持默认前缀!
    return '!'

# 初始化bot的时候传这个动态前缀函数
intents = discord.Intents.default()
intents.message_content = True
client = commands.Bot(command_prefix = get_prefix, intents=intents)

注意事项

  • 必须在Discord开发者平台的Bot管理页开启Message Content Intent,否则机器人无法读取普通消息内容,两种方案都不会生效
  • 如果你要无前缀触发的命令需要带参数,修改on_message的匹配规则或者动态前缀的匹配规则适配即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:02