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

如何使用discord.py的on_message事件实现特定混合格式消息的触发逻辑?

实现方法

核心逻辑是通过正则表达式匹配目标格式的消息,再在discord.py的消息监听事件中触发对应操作,具体步骤如下:

1. 前置准备

需要提前导入正则模块re,同时在Discord开发者后台为你的机器人开启Message Content Intent权限,discord.py 2.0及以上版本必须开启该权限才能读取用户发送的消息内容。

2. 编写正则匹配规则

你给出的示例122-PG-CSAI-2022的结构为「纯数字段-大写字母段-大写字母段-纯数字段」,用短横线分隔,对应的正则表达式为:
r'^\d+-[A-Z]+-[A-Z]+-\d+$'
如果你的格式有调整可以灵活修改正则:

  • 允许小写字母:把[A-Z]替换为[A-Za-z]
  • 允许任意段的数字/字母组合用短横线连接:改为r'^[A-Z\d]+(?:-[A-Z\d]+)*$'
  • 只需要消息包含该格式而非整条消息完全匹配:后续匹配时把fullmatch改为search即可

3. 代码实现示例

import discord
import re
from discord.ext import commands

# 配置机器人权限
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)

# 预编译正则表达式,提升匹配效率
TARGET_PATTERN = re.compile(r'^\d+-[A-Z]+-[A-Z]+-\d+$')

@bot.event
async def on_message(message):
    # 跳过机器人自身发送的消息,避免循环触发
    if message.author.bot:
        return

    # 匹配消息内容
    if TARGET_PATTERN.fullmatch(message.content.strip()):
        # 此处写匹配成功后要执行的逻辑
        await message.channel.send(f"检测到符合要求的内容:{message.content}")
    
    # 如果同时使用前缀指令,需保留该行避免指令被拦截
    await bot.process_commands(message)

# 运行机器人,填入你的机器人Token
bot.run("你的机器人Token")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:03