• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~
spark.ChatGuard - 违禁词 | 反刷屏 | 云黑

资源 spark.ChatGuard - 违禁词 | 反刷屏 | 云黑 2.0.1

pingguo

【Lv:4】

开发者
正式会员
注册
2022/03/12
消息
129
金粒
3,238金粒
pingguo 提交新资源:

spark.ban - Q群违禁词 - 一个简单的Q群违禁词插件

简介
一个简单的Q群违禁词插件
合理地设置违禁词可以有效防止群被封

功能
检测到消息含有违禁词时撤回并禁言(可选)
违禁词支持判断大小写

安装
1.解压&压缩
2.将ban文件夹放入plugins\sparkbridge2\plugins文件夹内
3.重启服务器

配置
配置文件:plugins\sparkbridge2\serverdata\ban\config.json
JSON:
{
    "mute": true,//检测到违禁词后是否禁言
    "mutetime": 600,//禁言时间,单位:秒
    "list": ["114514","1919810"]//违禁词列表
}

阅读关于此资源更多信息...
 
JavaScript:
const msgbuilder = require('../../handles/msgbuilder');
const configFile = spark.getFileHelper('ban'), JSON5 = require('json5');
const GROUP = spark.mc.config.group;
const ADMINS = spark.mc.config.admins;
configFile.initFile('config.json', {
    mute: true,
    mutetime: 600,
    list: []
});

spark.on('message.group.normal', (e) => {
    const { raw_message, group_id, user_id, message_id } = e;
    if (group_id !== GROUP) return;
    try {
        let conf = JSON5.parse(configFile.getFile("config.json"));
        let tell = [];

        for (let w of conf.list) {
            let format_msg = formatCQMessage(raw_message);
            if (format_msg.toLowerCase().includes(w.toLowerCase()) && !ADMINS.includes(user_id)) {
                if (conf.mute) {
                    spark.QClient.sendWSPack(JSON.stringify({
                        action: 'set_group_ban',
                        params: {
                            group_id: group_id,
                            user_id: user_id,
                            duration: conf.mutetime
                        }
                    }));
                }
                spark.QClient.deleteMsg(message_id);
                tell.push(msgbuilder.at(user_id));
                tell.push(`\n恭喜你触发违禁词,获得禁言套餐${conf.mutetime / 60}分钟奖励`);
                spark.QClient.sendGroupMsg(GROUP, tell); // 向指定群发送消息

                break; // 检测到违禁词后跳出循环,避免多次执行
            }
        }

    } catch (error) {
        logger.error(`error : `, error);
        logger.error(error.message);
        logger.error(`出现错误 : ${error.stack}`);
    }
});

function formatCQMessage(msg) {
    const cqCodeRegex = /\[CQ:(\w+),([^\]]+)\]/g;

    return msg.replace(cqCodeRegex, (match, type, params) => {
        const paramMap = {};
        params.split(',').forEach(param => {
            const [key, value] = param.split('=');
            paramMap[key] = value;
        });

        switch (type) {
            case 'at':
                if (paramMap.qq == "all") {
                    return `@全体成员`;
                } else {
                    if (spark.mc.getXbox(paramMap.qq) == undefined) {
                        return '@' + paramMap.qq; // 未绑定则显示其QQ号
                    } else if (spark.mc.getXbox(paramMap.qq) != undefined) {
                        return '@' + spark.mc.getXbox(paramMap.qq); // 已绑定则显示其XboxID
                    }
                }
            case 'face':
                return `[表情:${paramMap.id}]`;
            case 'record':
                return `[语音]`; // [语音播放: ${paramMap.file}]
            case 'share':
                return `[分享: ${paramMap.title} - ${paramMap.url}]`;
            case 'image':
                if (paramMap.file.endsWith(`.gif`)) {
                    return `[动画表情]`;
                } else {
                    return `[图片.${paramMap.file.split('.')[1]}]`;
                }
            case 'video':
                return `[视频]`;
            case 'reply':
                return `[回复]`; // [回复: ${paramMap.id}]
            case 'redbag':
                return `[红包: ${paramMap.title}]`;
            case 'poke':
                return `[戳: ${paramMap.qq}]`;
            case 'gift':
                return `[礼物: ${paramMap.qq}, 类型: ${paramMap.id}]`;
            case 'json':
                return `[JSON消息]`;
            case 'file':
                return `[文件:${paramMap.file}]`;
            default:
                logger.warn(`default : `);
                logger.warn(match);
                logger.warn(paramMap.qq);
                return match; // 如果无法识别类型,保留原有的 CQ 码格式
        }
    });
}

这是我修改后的代码,代码做出了以下几个修改:
1.写了一个formatCQMessage函数用来格式化消息中的CQ码,能把获取到的消息进行识别并解析为合适的内容,避免有人在发除文字以外的其他消息,例如图片时发生的意外情况导致错误禁言的问题;
2.forEach遍历判断违禁词改为for of循环遍历判断违禁词,主要是因为for循环可以写break跳出循环
3.在违禁词检测到后向群内发送一条@触发违禁词的用户的警告信息
4.在违禁词检测的时候过滤机器人管理员(这个你可以做成配置项)
5.添加try catch语句避免代码出现错误时直接导致sparkbridge插件退出加载,提高代码安全性

有兴趣的话你可以用这个直接发个更新,我这里实际测试一切正常
 

在线会员

  • jiangyi
  • wanghil
  • zuozihao
  • 瓶瓶
  • wwwggfff
  • 听雨眠
  • with
  • 云墨从不白给
  • Cheng_cc
  • bloodghost
  • forget丶
  • 小李子plum
  • 67453661
  • ruge
  • 丽鸢
  • FontageLing
  • winter0203
  • tinktn833
  • MintyKOLA
  • 星芝芒
  • polang
...和 52 更多。
后退
顶部 底部