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

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

请登录后获取

pingguo

【Lv:4】

开发者
正式会员
注册
2022/03/12
消息
171
金粒
745.94金粒
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插件退出加载,提高代码安全性

有兴趣的话你可以用这个直接发个更新,我这里实际测试一切正常
 
旧版SB2插件是怎么适配到新版SB2的,教教我,我的这里的部分SB2插件升级到新版SB2之后都用不了了,而且报错都一样:
1746351189202.webp
会的话帮我看看?这几个插件中都用到了:const { PAPI } = require("../../../GMLIB-LegacyRemoteCallApi/lib/BEPlaceholderAPI-JS"); 之前都是能用的,升级完SB2就不能用了,之前用的一直是sparkbridge2.5.0,升级到2.6.5就这样了
 
旧版SB2插件是怎么适配到新版SB2的,教教我,我的这里的部分SB2插件升级到新版SB2之后都用不了了,而且报错都一样:
浏览附件98403
会的话帮我看看?这几个插件中都用到了:const { PAPI } = require("../../../GMLIB-LegacyRemoteCallApi/lib/BEPlaceholderAPI-JS"); 之前都是能用的,升级完SB2就不能用了,之前用的一直是sparkbridge2.5.0,升级到2.6.5就这样了
你把sb2更新到最新版(昨天发的那个)应该就行了
不更新的话在插件的spark.json里面加一行"permission": "core",
 
你把sb2更新到最新版(昨天发的那个)应该就行了
不更新的话在插件的spark.json里面加一行"permission": "core",
我不是说了吗 我升级到2.6.5了,spark.json也都加了新出的那几个,所以我才来问的
 
你把sb2更新到最新版(昨天发的那个)应该就行了
不更新的话在插件的spark.json里面加一行"permission": "core",
我的意思是在sb2插件里不是能使用LSE的API吗,但是伱看这个报错:
1746357594740.webp
ll.import is not a function
 
我的意思是在sb2插件里不是能使用LSE的API吗,但是伱看这个报错:
浏览附件98420
ll.import is not a function
因为sb2新搞了个虚拟环境加载插件,大部分api都用不了,只有core权限是能用所有的
 

在线会员

  • 泡泡龙
  • BarryTeddy
  • ADAF
  • yujia
后退
顶部 底部