如何编写Discord机器人实现仅放行指定词upgrade的消息过滤
Discord机器人upgrade关键词消息过滤实现
需求说明
开发Discord机器人需实现以下消息过滤规则:
- 仅放行内容完全由指定词
upgrade构成的消息,支持单次出现、多次重复的合法场景(例如upgrade upgrade这类重复关键词的消息不得删除) - 匹配时忽略消息内的空格、大小写差异
- 其余所有不符合规则的消息全部删除
原有代码问题排查
两版代码都存在明确逻辑错误:
- 第一版逻辑完全倒置:判断条件为「消息去空格转小写后不含upgrade就跳过删除」,实际运行效果是只要消息带upgrade关键词就会被删除,且无法识别混入其他内容的违规消息,完全不符合需求。
- 第二版匹配范围过窄:仅判断去空格转小写后的内容是否完全等于单个
upgrade字符串,所有重复出现upgrade的合法消息(比如两个upgrade拼接的内容)都会被判定为违规删除,覆盖不了重复关键词的场景。
正确实现代码
核心逻辑是先对消息内容做归一化处理,再通过正则严格校验内容是否仅由1次或多次重复的upgrade构成,无其他多余字符:
client.on("message", (message) => { // 内容归一化:移除所有空白字符、统一转小写 const normalizedMsg = message.content.replace(/\s/g, '').toLowerCase(); // 正则校验:整段内容必须是1次及以上的upgrade连续重复,无其他字符 const isLegal = /^(upgrade)+$/.test(normalizedMsg); // 违规消息直接删除 if (!isLegal) { message.delete(); } });
匹配规则说明
正则/^(upgrade)+$/的匹配逻辑:
^锁定字符串起始位置(upgrade)+匹配连续出现1次及以上的upgrade字符串$锁定字符串结束位置
该规则可以保证归一化后的内容不存在任何除重复upgrade外的多余字符,实际匹配效果:
- 放行场景:
upgrade、UPGRADE、Upgrade Upgrade、upgrade upgrade UPGRADE(任意空格、任意大小写、任意重复次数均合法) - 删除场景:
upgrade hello、upgrad、upgrade123、helloupgrade(混入其他内容、关键词拼写错误均判定为违规)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

