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

如何在discord.TextChannel.purge的check参数中实现正则检查?求示例

使用正则表达式配合discord.TextChannel.purge()过滤消息

完全可以在discord.TextChannel.purge()的check参数中实现正则表达式检查,check参数只需接收一个返回布尔值的可调用对象——lambda表达式或自定义函数都能满足需求,结合re库就能轻松实现消息内容的正则匹配过滤。

以下是两个实用示例:

示例1:用lambda快速匹配正则内容

这个示例会删除频道中最近100条消息里包含邮箱地址的内容:

import discord
import re

@bot.command()
async def purge_emails(ctx):
    # 预编译正则表达式(提升重复匹配效率)
    email_pattern = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}')
    # 调用purge,check通过lambda判断消息内容是否匹配正则
    deleted_count = await ctx.channel.purge(
        limit=100,
        check=lambda msg: email_pattern.search(msg.content) is not None
    )
    await ctx.send(f"已删除 {len(deleted_count)} 条包含邮箱的消息")

示例2:自定义函数实现复杂检查逻辑

如果需要同时结合多个条件(比如排除机器人消息、匹配多组正则),可以用自定义函数替代lambda:

import discord
import re

def spam_check(msg):
    # 匹配包含广告关键词的内容,且消息发送者不是机器人
    spam_pattern = re.compile(r'(代刷|外挂|抽奖)', re.IGNORECASE)
    return spam_pattern.search(msg.content) is not None and not msg.author.bot

@bot.command()
async def purge_spam(ctx):
    deleted = await ctx.channel.purge(limit=50, check=spam_check)
    await ctx.send(f"已清理 {len(deleted)} 条垃圾广告消息")

注意事项

  • 建议提前用re.compile()编译正则表达式,避免重复编译带来的性能损耗
  • check函数的参数是discord.Message对象,除了content,还可以访问author、created_at等属性扩展过滤逻辑
  • 返回True的消息会被purge()方法删除,反之则保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:10:05