Undiscord 高级过滤规则:正则表达式与自定义条件
引言:为什么需要高级过滤?
你是否曾在清理Discord服务器时遇到以下困境:想删除包含敏感链接的消息却误删重要通知?需要批量清理机器人指令却保留用户讨论?手动筛选成千上万条消息效率低下且容易出错?Undiscord的高级过滤系统正是为解决这些问题而生。本文将深入解析如何通过正则表达式(Regular Expression,regex)和自定义条件实现精准消息过滤,让你的Discord服务器管理效率提升10倍。
读完本文后,你将掌握:
- 正则表达式基础语法与Discord消息过滤实战
- 5种预设过滤条件的组合策略
- 复杂场景下的多条件逻辑组合
- 常见过滤规则模板与调试技巧
- 性能优化方案与安全最佳实践
过滤系统工作原理
Undiscord的消息过滤引擎基于Discord官方搜索API构建,采用"先搜索后过滤"的双阶段处理流程:
核心处理逻辑位于filterResponse()方法中,通过链式调用实现多层过滤:
// 代码片段源自deleteDiscordMessages.user.js
messagesToDelete = messagesToDelete.filter(msg =>
msg.type === 0 || (msg.type >= 6 && msg.type <= 21) // 消息类型过滤
);
messagesToDelete = messagesToDelete.filter(msg =>
msg.pinned ? this.options.includePinned : true // 置顶消息过滤
);
if (this.options.regexFilter) { // 正则表达式过滤
const regex = new RegExp(this.options.regexFilter, this.options.regexFlags);
messagesToDelete = messagesToDelete.filter(msg => regex.test(msg.content));
}
正则表达式基础与实战
语法快速参考
| 元字符 | 含义 | 示例 | Discord消息应用 |
|---|---|---|---|
. | 匹配任意单个字符 | he..o | 匹配"hello"、"heyo" |
* | 匹配前一元素0+次 | a*b | 匹配"b"、"ab"、"aaab" |
+ | 匹配前一元素1+次 | a+b | 匹配"ab"、"aaab"(不匹配"b") |
? | 匹配前一元素0或1次 | colou?r | 匹配"color"和"colour" |
[] | 字符集 | [aeiou] | 匹配任意元音字母 |
() | 分组 | (http|https) | 匹配"http"或"https" |
^ | 行首匹配 | ^!cmd | 匹配以"!cmd"开头的命令消息 |
$ | 行尾匹配 | end$ | 匹配以"end"结尾的消息 |
\d | 数字 | \d{4} | 匹配4位数字(如年份) |
\s | 空白字符 | hello\sworld | 匹配"hello world" |
实用过滤规则模板
1. URL链接过滤
https?:\/\/[^\s]+
此规则将匹配所有HTTP/HTTPS链接,等价于内置的"has link"过滤选项,但提供更多自定义可能。通过添加域名限制可实现更精确过滤:
https?:\/\/(www\.)?discord\.com\/channels\/[0-9]+
仅匹配Discord频道链接。
2. 命令消息清理
^!([a-zA-Z]+)\s?.*
匹配以"!"开头的命令消息(如"!help"、"!ban @user"),可用于清理机器人指令。添加具体命令名可进一步限制:
^!(help|ping|stats)\b
仅匹配"!help"、"!ping"和"!stats"命令。
3. 表情符号过滤
<:[a-zA-Z0-9_]+:\d+>
匹配Discord自定义表情符号(如<:smile:1234567890>),结合+量词可匹配包含多个表情的消息:
(<:[a-zA-Z0-9_]+:\d+>)\s?{3,}
匹配包含3个以上连续表情的消息。
4. 日期格式匹配
\d{4}-\d{2}-\d{2}
匹配YYYY-MM-DD格式日期,可用于筛选包含日期信息的消息。
标志位(Flags)使用技巧
正则表达式标志位可修改匹配行为,Undiscord支持通过regexFlags选项设置:
| 标志 | 作用 | 实用场景 |
|---|---|---|
i | 忽略大小写 | (?i)hello匹配"Hello"、"HELLO" |
g | 全局匹配 | 统计消息中特定关键词出现次数 |
m | 多行模式 | ^error匹配每行开头的"error" |
组合使用示例:/discord/i将匹配"Discord"、"DISCORD"等所有大小写变体。
自定义条件组合策略
预设过滤条件
Undiscord提供两种基础过滤选项,可与正则表达式组合使用:
-
has link:仅删除包含链接的消息
- 技术原理:检测消息内容中是否包含
http://或https://模式 - 适用场景:清理广告链接、外部资源分享
- 技术原理:检测消息内容中是否包含
-
has file:仅删除包含文件的消息
- 包含类型:图片、视频、文档等所有附件
- 特殊说明:Discord将图片和视频统一视为文件类型
多条件逻辑组合
通过界面选项与正则表达式的组合,可实现复杂过滤逻辑:
场景1:删除包含外部链接的非置顶消息
配置步骤:
- 勾选"has link"选项
- 取消勾选"include pinned"选项
- 正则表达式留空
场景2:删除包含特定关键词的命令消息
- 不勾选任何预设过滤选项
- 设置正则表达式:
^!(warn|ban|kick)\b - 设置标志位:
i(忽略大小写)
场景3:删除包含链接或邮箱的消息
通过正则表达式实现"或"逻辑:
https?:\/\/[^\s]+|[\w\.-]+@[\w\.-]+\.\w+
此规则将匹配所有URL或电子邮件地址。
高级应用案例
案例1:清理机器人日志消息
某服务器使用机器人记录用户加入/退出事件,消息格式如下:
[2023-10-01 14:30] User#1234 joined the server
[2023-10-01 15:45] User#5678 left the server
过滤规则:^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}\] User#\d+ (joined|left) the server$
案例2:筛选特定用户的消息
删除用户"BotHelper#9876"发送的所有消息:
^BotHelper#9876: .*
注意:Discord用户名区分大小写,如需不区分大小写匹配,添加
i标志位。
案例3:保留包含特定关键词的消息
通过否定前瞻断言实现"包含X则保留"的反向过滤:
^(?!.*important).*$
此规则将删除所有不包含"important"关键词的消息(即仅保留含"important"的消息)。
性能优化与注意事项
正则表达式效率优化
复杂正则表达式可能导致过滤速度下降,尤其在处理大量消息时。优化建议:
-
避免贪婪匹配:优先使用
.*?非贪婪模式而非.*- 优化前:
(.*) - 优化后:
(.*?)
- 优化前:
-
减少回溯:使用原子组避免不必要的回溯
- 优化前:
(\w+)\1 - 优化后:
(?>\\w+)\\1
- 优化前:
-
具体优先于模糊:用具体字符集代替通配符
- 优化前:
.*@.*\..* - 优化后:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
- 优化前:
安全最佳实践
-
测试先行:在执行批量删除前,建议先通过Discord搜索功能测试正则表达式效果:
/regex:<你的正则表达式> -
备份重要数据:对于包含关键信息的频道,建议先导出重要消息
-
增量执行:大量消息删除建议分批次进行,每次处理不超过100条消息
-
权限控制:确保仅对有权限管理的频道使用批量删除功能
常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 过滤结果为空 | 正则表达式过于严格 | 简化规则或添加通配符 |
| 误删正常消息 | 正则表达式匹配范围过大 | 增加边界条件(如\b单词边界) |
| 执行速度慢 | 正则表达式复杂度高 | 优化表达式结构,减少回溯 |
| 部分消息未过滤 | Discord API限制 | 调整时间范围,分多次处理 |
高级技巧与实用工具
正则表达式调试工具
推荐使用以下在线工具测试过滤规则:
批量操作脚本
对于需要定期执行的过滤任务,可结合Undiscord的参数化调用实现自动化:
# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/un/undiscord
cd undiscord
# 安装依赖
npm install
# 构建用户脚本
npm run build
规则分享与社区资源
Undiscord社区已创建多种常用过滤规则模板,可根据需要调整使用:
- 垃圾消息清理:
(?:http|https):\/\/(?:www\.)?(?:bit\.ly|tinyurl\.com|t\.co)\/\w+ - 表情刷屏过滤:
(<a?:[a-zA-Z0-9_]+:\d+>)\s?{5,} - 重复内容检测:
\b(\w+)\s+\1\b(匹配连续重复单词)
总结与展望
Undiscord的高级过滤系统通过正则表达式与自定义条件的组合,为Discord消息管理提供了强大而灵活的解决方案。从简单的链接过滤到复杂的多条件逻辑组合,掌握这些高级技巧将显著提升社区管理效率。
随着Discord API的不断演进,未来过滤系统可能会支持:
- 基于AI的语义分析过滤
- 更精细的消息元数据筛选(如发送设备、编辑历史)
- 多维度统计与可视化报表
建议定期查看项目更新日志,及时获取新功能与改进:
https://gitcode.com/gh_mirrors/un/undiscord/commits/main
最后,记住高效管理的核心原则:精准过滤,审慎删除。合理使用Undiscord的高级功能,让你的Discord社区保持整洁有序,同时避免不必要的数据损失。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



