koishi-plugin-kbot
Version:
A muti-function qq bot for koishi
105 lines (104 loc) • 4.76 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.initViolation = void 0;
const jsx_runtime_1 = require("@satorijs/element/jsx-runtime");
const enum_1 = require("../enum");
const utils_1 = require("../utils");
async function initViolation(context) {
context.database.extend('guildmanage.violationList', {
id: 'unsigned',
guildId: 'string',
violations: {
type: 'list',
initial: [],
},
count: {
type: 'integer',
initial: 3,
},
handleWay: {
type: 'string',
initial: 'mute',
},
}, {
autoInc: true,
});
context.database.extend('guildmanage.userViolation', {
id: 'unsigned',
userId: 'string',
userCount: 'integer(3)',
day: 'integer(2)',
}, {
autoInc: true,
});
context.guild().middleware(async (session, next) => {
const { userId, guildId, content } = session;
let userRes = await context.database.get('guildmanage.userViolation', { userId });
const violationRes = await context.database.get('guildmanage.violationList', { guildId });
if (violationRes.length === 0)
return next();
if (userRes.length === 0) {
await context.database.upsert('guildmanage.userViolation', [{
userId,
userCount: 0,
day: new Date().getDate(),
}]);
userRes = await context.database.get('guildmanage.userViolation', { userId });
}
const botRole = await (0, utils_1.getGroupMemberRole)(session.bot, guildId, session.selfId);
const userRole = await (0, utils_1.getGroupMemberRole)(session.bot, guildId, userId);
const { id, day } = userRes[0];
let { userCount } = userRes[0];
let isViolation = false;
if (botRole === 'member' || enum_1.RoleNumber[userRole] >= enum_1.RoleNumber[botRole])
return next();
const { violations = [], count = 3, handleWay = 'mute' } = violationRes[0];
for (const violation of violations) {
if (content.includes(violation)) {
if (userRes.length) {
if (day === new Date().getDate()) {
if (userCount + 1 < count) {
await context.database.upsert('guildmanage.userViolation', [{
id,
userCount: userCount + 1,
}]);
}
}
else {
await context.database.upsert('guildmanage.userViolation', [{
id,
userCount: 1,
day: new Date().getDate(),
}]);
}
}
else {
await context.database.upsert('guildmanage.userViolation', [{
userId,
userCount: 1,
day: new Date().getDate(),
}]);
}
userCount = userCount || 0 + 1;
isViolation = true;
break;
}
}
if (isViolation) {
await session.bot.deleteMessage(guildId, session.messageId);
await session.send((0, jsx_runtime_1.jsxs)("message", { children: [(0, jsx_runtime_1.jsx)("at", { id: userId }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u56E0\u4E3A\u8FDD\u89C4\u53D1\u8A00, \u5DF2\u88AB\u64A4\u56DE, \u4ECA\u65E5\u8FDD\u89C4\u6B21\u6570 +1, \u5F53\u524D\u8FDD\u89C4\u6B21\u6570: ", userCount, ", \u6BCF\u65E5\u8FDD\u89C4\u6B21\u6570\u4E3A: ", count] })] }));
}
if (userCount < count)
return next();
if (handleWay === 'mute') {
await session.send((0, jsx_runtime_1.jsxs)("message", { children: [(0, jsx_runtime_1.jsx)("at", { id: userId }), (0, jsx_runtime_1.jsx)("p", { children: "\u56E0\u4E3A\u8FDD\u89C4\u53D1\u8A00, \u5DF2\u88AB\u7981\u8A00 1 \u5929" })] }));
await session.bot.muteGuildMember(guildId, userId, 60 * 60 * 24 * 1);
}
else if (handleWay === 'kick') {
await session.send((0, jsx_runtime_1.jsxs)("message", { children: [(0, jsx_runtime_1.jsx)("at", { id: userId }), (0, jsx_runtime_1.jsx)("p", { children: "\u56E0\u4E3A\u8FDD\u89C4\u53D1\u8A00, \u5DF2\u88AB\u8E22\u51FA\u672C\u7FA4" })] }));
await session.bot.kickGuildMember(guildId, userId);
}
return next();
}, true);
}
exports.initViolation = initViolation;