diff --git a/apps/groupAdmin/groupVoteBan.js b/apps/groupAdmin/groupVoteBan.js index f27044a..ca701d9 100644 --- a/apps/groupAdmin/groupVoteBan.js +++ b/apps/groupAdmin/groupVoteBan.js @@ -37,9 +37,11 @@ export class GroupVoteBan extends plugin { */ async Switch() { if (!common.checkPermission(this.e, "master")) return + let type = !!/启用/.test(this.e.msg) const { VoteBan } = Config.groupAdmin + if (VoteBan && type) return this.reply("❎ 投票禁言功能已处于启用状态") if (!VoteBan && !type) return this.reply("❎ 投票禁言功能已处于禁用状态") @@ -52,14 +54,17 @@ export class GroupVoteBan extends plugin { * @param e */ async Initiate(e) { - if (!Config.groupAdmin.VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true) + const { VoteBan, outTime, minNum, BanTime, voteAdmin } = Config.groupAdmin + + if (!VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true) if (!common.checkPermission(e, "all", "admin")) return + let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "") targetQQ = Number(targetQQ) || String(targetQQ) let key = e.group_id + targetQQ - const time = Config.groupAdmin.outTime + if (e.user_id === targetQQ) return e.reply("❎ 您不能对自己进行投票") if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效") @@ -70,15 +75,21 @@ export class GroupVoteBan extends plugin { const group = e.bot.pickGroup(e.group_id, true) const targetMember = group.pickMember(targetQQ) const targetMemberInfo = targetMember?.info || await targetMember?.getInfo?.() + if (!targetMemberInfo) return e.reply("❎ 该群没有这个人") if (targetMemberInfo.role === "owner") return e.reply("❎ 权限不足,该命令对群主无效") - if (targetMemberInfo.role === "admin" && !group.is_owner) return e.reply("❎ 权限不足,需要群主权限") + if (targetMemberInfo.role === "admin") { + if (!voteAdmin) return e.reply("❎ 该命令对管理员无效") + if (!group.is_owner) return e.reply("❎ Bot权限不足,需要群主权限") + } + /** 写入数据 */ Vote[key] = { supportCount: 1, opposeCount: 0, List: [ e.user_id ] } + let res = await e.reply([ segment.at(targetQQ), `(${targetQQ})的禁言投票已发起\n`, @@ -89,24 +100,29 @@ export class GroupVoteBan extends plugin { `「#支持禁言${targetQQ}」\n`, "不支持者请发送:\n", `「#反对禁言${targetQQ}」\n`, - `超时时间:${time}秒\n`, - "规则:支持票大于反对票且参与人高于3人即可成功禁言" + `超时时间:${outTime}秒\n`, + `禁言时间:${BanTime}秒\n`, + `规则:支持票大于反对票且参与人高于${minNum}人即可成功禁言` ]) + if (!res) return false + setTimeout(async() => { - // 处理结果 if (!Vote[key]) return const { supportCount, opposeCount } = Vote[key] + let msg = `投票结束,投票结果:\n支持票数:${supportCount}\n反对票数:${opposeCount}\n` - if (supportCount > opposeCount && supportCount >= 3) { + + if (supportCount > opposeCount && supportCount >= minNum) { msg += "支持票数大于反对票\n执行禁言操作" - await e.group.muteMember(targetQQ, 3600) + await e.group.muteMember(targetQQ, BanTime) } else { - msg += "反对票数大于支持票数或支持票数小于3,不进行禁言操作" + msg += `反对票数大于支持票数或支持票数小于${minNum},不进行禁言操作` } delete Vote[key] return e.reply(msg, true) - }, time * 1000) + }, outTime * 1000) + setTimeout(async() => { const { supportCount, opposeCount } = Vote[key] const msg = [ @@ -117,10 +133,11 @@ export class GroupVoteBan extends plugin { "请支持者发送:\n", `「#支持禁言${targetQQ}」\n`, "不支持者请发送:\n", - `「#反对禁言${targetQQ}」\n` + `「#反对禁言${targetQQ}」` ] - e.reply(msg) - }, time * 1000 - 60000) + + await e.reply(msg) + }, outTime * 1000 - 60000) } /** @@ -129,24 +146,30 @@ export class GroupVoteBan extends plugin { */ async Follow(e) { if (!common.checkPermission(e, "all", "admin")) return + let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "") targetQQ = Number(targetQQ) || String(targetQQ) let key = e.group_id + targetQQ - if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效") if (!targetQQ) return e.reply("❎ 请艾特或输入需要进行跟票的被禁言人QQ") + if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效") + + if (e.user_id === targetQQ) return e.reply("❎ 您不能对自己进行投票") + if (!Vote[key]) return e.reply("❎ 未找到对应投票") - if (e.member.is_admin || e.member.is_owner) { - if (/支持/.test(e.msg)) { - await e.reply("投票结束,管理员介入,无需投票直接执行禁言", true) - await e.group.muteMember(targetQQ, 3600) - } else { - await e.reply("投票取消,管理员介入", true) + if (Config.groupAdmin.veto) { + if (e.member.is_admin || e.member.is_owner) { + if (/支持/.test(e.msg)) { + await e.reply("投票结束,管理员介入,无需投票直接执行禁言", true) + await e.group.muteMember(targetQQ, 3600) + } else { + await e.reply("投票取消,管理员介入", true) + } + delete Vote[key] + return true } - delete Vote[key] - return true } const { List } = Vote[key] diff --git a/config/default_config/groupAdmin.yaml b/config/default_config/groupAdmin.yaml index b193bad..153c860 100644 --- a/config/default_config/groupAdmin.yaml +++ b/config/default_config/groupAdmin.yaml @@ -2,7 +2,16 @@ whiteQQ: [] #白名单禁言自动解禁 noBan: false + # 投票禁言开关 VoteBan: true # 投票禁言超时时间 单位:秒 outTime: 180 +# 投票最低所需票数 不建议太低 +minNum: 3 +# 投票成功禁言时间 单位:秒 +BanTime: 3600 +# 是否允许管理员一票否决 +veto: true +# 是否允许投票禁言管理员(Bot为群主的情况下) +voteAdmin: false \ No newline at end of file