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 码格式
}
});
}