UNPKG

koishi-plugin-manager-all

Version:

一个功能完整的 Koishi 群管机器人插件,支持白名单管理、关键词过滤和消息监控

779 lines (774 loc) 32.6 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name2 in all) __defProp(target, name2, { get: all[name2], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { Config: () => Config, apply: () => apply, name: () => name }); module.exports = __toCommonJS(src_exports); var import_koishi = require("koishi"); var name = "manager-all"; var Config = import_koishi.Schema.object({ groupManagement: import_koishi.Schema.object({ autoApprove: import_koishi.Schema.boolean().default(false).description("是否启用自动审批"), useWhitelist: import_koishi.Schema.boolean().default(true).description("是否启用白名单检查"), autoRejectNonWhitelist: import_koishi.Schema.boolean().default(true).description("是否自动拒绝不在白名单中的申请"), useKeywordFilter: import_koishi.Schema.boolean().default(true).description("是否启用关键词过滤"), enableWelcome: import_koishi.Schema.boolean().default(true).description("是否启用入群欢迎消息"), welcomeMessage: import_koishi.Schema.string().default("欢迎新朋友加入!请仔细阅读群公告。").description("欢迎消息"), rejectionMessage: import_koishi.Schema.string().default("很抱歉,您的入群申请不符合要求。").description("拒绝消息") }).description("群组管理设置"), whitelist: import_koishi.Schema.array(String).default([]).description("QQ号白名单"), approvalKeywords: import_koishi.Schema.array(String).default(["朋友推荐", "学习交流"]).description("自动通过关键词"), rejectionKeywords: import_koishi.Schema.array(String).default(["广告", "营销", "推广"]).description("自动拒绝关键词"), messageMonitor: import_koishi.Schema.object({ enabled: import_koishi.Schema.boolean().default(true).description("是否启用消息监控"), logLevel: import_koishi.Schema.union(["info", "warn", "error"]).default("info").description("日志级别") }).description("消息监控设置") }); var logger = new import_koishi.Logger("manager-all"); function apply(ctx, config) { ctx.middleware(async (session, next) => { const { guildId, userId, content } = session; if (config.messageMonitor.enabled && guildId) { const logData = { 群组: guildId, 用户: userId, 内容: content?.slice(0, 100) + (content?.length > 100 ? "..." : ""), 时间: (/* @__PURE__ */ new Date()).toISOString() }; if (config.messageMonitor.logLevel === "info") { logger.info("消息监控:", JSON.stringify(logData, null, 2)); } if (content && config.rejectionKeywords.some((keyword) => content.includes(keyword))) { logger.warn(`检测到可疑内容: 群${guildId} 用户${userId} - ${content.slice(0, 50)}`); } } if (content === "ping") { await session.send("pong"); return; } if (content === "help" || content === "帮助") { const helpMessage = [ "🤖 Manager-All 群管机器人", "", "📋 白名单管理:", "• whitelist - 查看白名单帮助", "• whitelist.add <QQ号> - 添加单个白名单", "• whitelist.batch <QQ号列表> - 批量添加白名单", "• whitelist.remove <QQ号> - 移除白名单", "• whitelist.list - 查看白名单", "• whitelist.reject-toggle - 切换自动拒绝功能", "", "🔑 关键词管理:", "• keywords - 查看关键词帮助", "• keywords.approval.add <关键词> - 添加通过关键词", "• keywords.rejection.add <关键词> - 添加拒绝关键词", "", "👥 群组管理:", "• group.info - 查看群组信息", "• group.config - 查看配置", "", "💬 消息管理:", "• message - 查看消息管理帮助", "• message.welcome.set <消息> - 设置欢迎消息", "• message.welcome.toggle - 启用/禁用欢迎功能", "• message.rejection.set <消息> - 设置拒绝消息", "", "🛠️ 其他功能:", "• ping - 测试响应", "• help - 显示此帮助" ].join("\n"); await session.send(helpMessage); return; } return next(); }); const handleGroupRequest = /* @__PURE__ */ __name(async (session) => { const guildId = session.guildId || session.groupId; const userId = session.userId || session.user_id; const messageId = session.messageId || session.flag; logger.info(`收到入群申请: 用户 ${userId} 申请加入群 ${guildId}`); logger.info(`申请消息: ${session.content || session.comment || "无"}`); if (!config.groupManagement.autoApprove) { logger.info("自动审批功能已禁用"); return; } let shouldApprove = false; let reason = ""; if (config.groupManagement.useWhitelist) { if (config.whitelist.includes(userId)) { shouldApprove = true; reason = "白名单用户"; } else if (config.groupManagement.autoRejectNonWhitelist) { shouldApprove = false; reason = "不在白名单中"; } } const message = session.content || session.comment || ""; if (config.groupManagement.useKeywordFilter && message) { if (config.rejectionKeywords.some((keyword) => message.includes(keyword))) { shouldApprove = false; reason = "包含拒绝关键词"; } else if (config.approvalKeywords.some((keyword) => message.includes(keyword))) { if (!config.groupManagement.useWhitelist) { shouldApprove = true; reason = "包含通过关键词"; } else if (config.whitelist.includes(userId)) { shouldApprove = true; reason = "包含通过关键词"; } else if (!config.groupManagement.autoRejectNonWhitelist) { shouldApprove = true; reason = "包含通过关键词"; } else { shouldApprove = false; reason = "不在白名单中(关键词无效)"; } } } if (!config.groupManagement.useWhitelist && !config.groupManagement.useKeywordFilter) { shouldApprove = true; reason = "无过滤规则,默认通过"; } else if (!reason) { shouldApprove = false; reason = "未匹配任何通过条件"; } try { if (shouldApprove) { if (session.approve) { await session.approve(); } else if (session.bot.handleGuildRequest) { await session.bot.handleGuildRequest(messageId, true); } else if (session.bot.setGroupAddRequest) { await session.bot.setGroupAddRequest(messageId, true); } logger.info(`自动通过入群申请: 用户 ${userId} (${reason})`); if (config.groupManagement.enableWelcome && config.groupManagement.welcomeMessage) { setTimeout(async () => { try { await session.bot.sendMessage(guildId, config.groupManagement.welcomeMessage); } catch (error) { logger.error("发送欢迎消息失败:", error); } }, 2e3); } } else if (reason) { const rejectionMsg = config.groupManagement.rejectionMessage || "很抱歉,您的入群申请不符合要求。"; if (session.reject) { await session.reject(rejectionMsg); } else if (session.bot.handleGuildRequest) { await session.bot.handleGuildRequest(messageId, false, rejectionMsg); } else if (session.bot.setGroupAddRequest) { await session.bot.setGroupAddRequest(messageId, false, rejectionMsg); } logger.info(`自动拒绝入群申请: 用户 ${userId} (${reason})`); logger.info(`拒绝消息: ${rejectionMsg}`); } else { logger.info(`入群申请未自动处理: 用户 ${userId} (无匹配规则)`); } } catch (error) { logger.error(`处理入群申请失败: ${error}`); } }, "handleGroupRequest"); ctx.on("guild-member-request", handleGroupRequest); try { ctx.on("guild-request", handleGroupRequest); } catch (e) { logger.debug("guild-request 事件不支持"); } ctx.middleware((session, next) => { if (session.type === "request" && session.subtype === "add") { handleGroupRequest(session); return; } return next(); }); ctx.on("guild-member-added", async (session) => { const { guildId, userId } = session; logger.info(`新成员加入: 群 ${guildId}, 用户 ${userId}`); if (config.groupManagement.enableWelcome && config.groupManagement.welcomeMessage) { try { await session.send(import_koishi.h.at(userId) + " " + config.groupManagement.welcomeMessage); } catch (error) { logger.error("发送欢迎消息失败:", error); } } }); ctx.on("guild-member-removed", async (session) => { const { guildId, userId } = session; logger.info(`成员离开: 群 ${guildId}, 用户 ${userId}`); }); ctx.command("whitelist", "白名单管理").action(async () => { const helpMessage = [ "📋 白名单管理命令:", "", "➕ 添加操作:", "• whitelist.add <QQ号> - 添加单个白名单", "• whitelist.batch <QQ号列表> - 批量添加白名单", "• whitelist.import - 从当前群组导入成员", "", "➖ 移除操作:", "• whitelist.remove <QQ号> - 移除白名单", "• whitelist.clear - 清空白名单", "", "📄 查看操作:", "• whitelist.list - 查看白名单列表", "", "⚙️ 配置操作:", "• whitelist.reject-toggle - 切换自动拒绝功能", "", "📊 批量添加示例:", "• whitelist.batch 123,456,789", "• whitelist.batch 123 456 789", "", `当前白名单状态: ${config.groupManagement.useWhitelist ? "✅ 启用" : "❌ 禁用"}`, `白名单数量: ${config.whitelist.length} 个` ].join("\n"); return helpMessage; }); ctx.command("whitelist.add <qq:string>", "添加白名单").action(async (_, qq) => { if (!qq || !/^\d+$/.test(qq)) { return "❌ 请提供有效的QQ号"; } if (config.whitelist.includes(qq)) { return "⚠️ 该QQ号已在白名单中"; } config.whitelist.push(qq); return `✅ 已将 ${qq} 添加到白名单`; }); ctx.command("whitelist.batch <qqs:text>", "批量添加白名单").example("whitelist.batch 123456789,987654321,555666777").example("whitelist.batch 123456789 987654321 555666777").action(async (_, qqs) => { if (!qqs) { return [ "❌ 请提供QQ号列表", "", "📋 支持格式:", "• 逗号分隔: whitelist.batch 123,456,789", "• 空格分隔: whitelist.batch 123 456 789", "• 换行分隔: 支持多行输入" ].join("\n"); } const qqList = qqs.split(/[,\s\n]+/).map((qq) => qq.trim()).filter((qq) => qq.length > 0); if (qqList.length === 0) { return "❌ 未检测到有效的QQ号"; } const results = { success: [], invalid: [], duplicate: [] }; qqList.forEach((qq) => { if (!/^\d+$/.test(qq)) { results.invalid.push(qq); } else if (config.whitelist.includes(qq)) { results.duplicate.push(qq); } else { results.success.push(qq); config.whitelist.push(qq); } }); const report = []; report.push("📊 批量添加白名单结果:"); report.push(""); if (results.success.length > 0) { report.push(`✅ 成功添加 ${results.success.length} 个:`); report.push(results.success.map((qq) => `• ${qq}`).join("\n")); report.push(""); } if (results.duplicate.length > 0) { report.push(`⚠️ 已存在 ${results.duplicate.length} 个:`); report.push(results.duplicate.map((qq) => `• ${qq}`).join("\n")); report.push(""); } if (results.invalid.length > 0) { report.push(`❌ 无效格式 ${results.invalid.length} 个:`); report.push(results.invalid.map((qq) => `• ${qq}`).join("\n")); report.push(""); } report.push(`📋 当前白名单总数: ${config.whitelist.length}`); return report.join("\n"); }); ctx.command("whitelist.import", "从当前群组导入成员").option("limit", "-l <count:number> 限制导入数量", { fallback: 50 }).option("exclude-bot", "-e 排除机器人账号", { fallback: true }).action(async ({ session, options }) => { if (!session.guildId) { return "❌ 此命令只能在群组中使用"; } try { const bot = session.bot; const guild = await bot.getGuild(session.guildId); if (!guild) { return "❌ 无法获取群组信息"; } let members = []; try { const memberList = await bot.getGuildMemberList(session.guildId); members = memberList.data || []; } catch (e) { return [ "❌ 无法自动获取群成员列表", "", "💡 请手动使用批量添加功能:", "• whitelist.batch <QQ号列表>", "", "📋 支持格式:", "• 逗号分隔: 123,456,789", "• 空格分隔: 123 456 789" ].join("\n"); } if (members.length === 0) { return "❌ 获取到的成员列表为空"; } const results = { success: [], duplicate: [], excluded: [] }; let processedCount = 0; for (const member of members) { if (processedCount >= options.limit) break; const userId = member.user?.id || member.userId || member.user_id; if (!userId) continue; if (options["exclude-bot"] && (member.user?.isBot || member.is_bot || userId === bot.selfId)) { results.excluded.push(userId); continue; } if (config.whitelist.includes(userId)) { results.duplicate.push(userId); } else { config.whitelist.push(userId); results.success.push(userId); } processedCount++; } const report = []; report.push("📊 群成员导入白名单结果:"); report.push(""); report.push(`👥 群组: ${guild.name || session.guildId}`); report.push(`📝 处理成员: ${processedCount} / ${members.length}`); report.push(""); if (results.success.length > 0) { report.push(`✅ 成功导入 ${results.success.length} 个`); if (results.success.length <= 10) { report.push(results.success.map((id) => `• ${id}`).join("\n")); } else { report.push(`• ${results.success.slice(0, 5).join(", ")} ... (共${results.success.length}个)`); } report.push(""); } if (results.duplicate.length > 0) { report.push(`⚠️ 已存在 ${results.duplicate.length} 个`); report.push(""); } if (results.excluded.length > 0) { report.push(`🤖 排除机器人 ${results.excluded.length} 个`); report.push(""); } report.push(`📋 当前白名单总数: ${config.whitelist.length}`); return report.join("\n"); } catch (error) { logger.error("导入群成员失败:", error); return [ "❌ 导入群成员失败", "", "💡 请尝试手动批量添加:", "• whitelist.batch <QQ号列表>" ].join("\n"); } }); ctx.command("whitelist.remove <qq:string>", "移除白名单").action(async (_, qq) => { if (!qq) { return "❌ 请提供QQ号"; } const index = config.whitelist.indexOf(qq); if (index === -1) { return "⚠️ 该QQ号不在白名单中"; } config.whitelist.splice(index, 1); return `✅ 已将 ${qq} 从白名单移除`; }); ctx.command("whitelist.list", "查看白名单").action(async () => { if (config.whitelist.length === 0) { return "📋 白名单为空"; } const list = config.whitelist.map((qq, index) => `${index + 1}. ${qq}`).join("\n"); return `📋 白名单列表 (${config.whitelist.length} 个): ${list}`; }); ctx.command("whitelist.clear", "清空白名单").action(async () => { const count = config.whitelist.length; config.whitelist.length = 0; return `✅ 已清空白名单 (移除了 ${count} 个QQ号)`; }); ctx.command("whitelist.reject-toggle", "切换白名单自动拒绝功能").action(async () => { config.groupManagement.autoRejectNonWhitelist = !config.groupManagement.autoRejectNonWhitelist; return [ `🔄 白名单自动拒绝功能已${config.groupManagement.autoRejectNonWhitelist ? "启用" : "禁用"}`, "", config.groupManagement.autoRejectNonWhitelist ? "✅ 现在不在白名单中的用户将被自动拒绝" : "⚠️ 现在不在白名单中的用户将通过关键词过滤或默认规则处理", "", `当前配置:`, `• 白名单检查: ${config.groupManagement.useWhitelist ? "✅ 启用" : "❌ 禁用"}`, `• 自动拒绝非白名单: ${config.groupManagement.autoRejectNonWhitelist ? "✅ 启用" : "❌ 禁用"}`, `• 关键词过滤: ${config.groupManagement.useKeywordFilter ? "✅ 启用" : "❌ 禁用"}` ].join("\n"); }); ctx.command("keywords", "关键词管理").action(async () => { const helpMessage = [ "🔑 关键词管理命令:", "", "📈 通过关键词:", "• keywords.approval.add <关键词> - 添加通过关键词", "• keywords.approval.remove <关键词> - 移除通过关键词", "• keywords.approval.list - 查看通过关键词", "", "📉 拒绝关键词:", "• keywords.rejection.add <关键词> - 添加拒绝关键词", "• keywords.rejection.remove <关键词> - 移除拒绝关键词", "• keywords.rejection.list - 查看拒绝关键词", "", "• keywords.list - 查看所有关键词", "", `关键词过滤状态: ${config.groupManagement.useKeywordFilter ? "✅ 启用" : "❌ 禁用"}` ].join("\n"); return helpMessage; }); ctx.command("keywords.approval.add <keyword:text>", "添加通过关键词").action(async (_, keyword) => { if (!keyword) { return "❌ 请提供关键词"; } if (config.approvalKeywords.includes(keyword)) { return "⚠️ 该关键词已存在"; } config.approvalKeywords.push(keyword); return `✅ 已添加通过关键词: ${keyword}`; }); ctx.command("keywords.approval.remove <keyword:text>", "移除通过关键词").action(async (_, keyword) => { if (!keyword) { return "❌ 请提供关键词"; } const index = config.approvalKeywords.indexOf(keyword); if (index === -1) { return "⚠️ 该关键词不存在"; } config.approvalKeywords.splice(index, 1); return `✅ 已移除通过关键词: ${keyword}`; }); ctx.command("keywords.approval.list", "查看通过关键词").action(async () => { if (config.approvalKeywords.length === 0) { return "📈 通过关键词列表为空"; } const list = config.approvalKeywords.map((kw, index) => `${index + 1}. ${kw}`).join("\n"); return `📈 通过关键词列表 (${config.approvalKeywords.length} 个): ${list}`; }); ctx.command("keywords.rejection.add <keyword:text>", "添加拒绝关键词").action(async (_, keyword) => { if (!keyword) { return "❌ 请提供关键词"; } if (config.rejectionKeywords.includes(keyword)) { return "⚠️ 该关键词已存在"; } config.rejectionKeywords.push(keyword); return `✅ 已添加拒绝关键词: ${keyword}`; }); ctx.command("keywords.rejection.remove <keyword:text>", "移除拒绝关键词").action(async (_, keyword) => { if (!keyword) { return "❌ 请提供关键词"; } const index = config.rejectionKeywords.indexOf(keyword); if (index === -1) { return "⚠️ 该关键词不存在"; } config.rejectionKeywords.splice(index, 1); return `✅ 已移除拒绝关键词: ${keyword}`; }); ctx.command("keywords.rejection.list", "查看拒绝关键词").action(async () => { if (config.rejectionKeywords.length === 0) { return "📉 拒绝关键词列表为空"; } const list = config.rejectionKeywords.map((kw, index) => `${index + 1}. ${kw}`).join("\n"); return `📉 拒绝关键词列表 (${config.rejectionKeywords.length} 个): ${list}`; }); ctx.command("keywords.list", "查看所有关键词").action(async () => { const approvalList = config.approvalKeywords.length > 0 ? config.approvalKeywords.map((kw) => `✅ ${kw}`).join("\n") : "(无)"; const rejectionList = config.rejectionKeywords.length > 0 ? config.rejectionKeywords.map((kw) => `❌ ${kw}`).join("\n") : "(无)"; return [ "🔑 所有关键词列表:", "", "📈 通过关键词:", approvalList, "", "📉 拒绝关键词:", rejectionList, "", `过滤状态: ${config.groupManagement.useKeywordFilter ? "✅ 启用" : "❌ 禁用"}` ].join("\n"); }); ctx.command("group.info", "查看群组信息").action(async ({ session }) => { if (!session.guildId) { return "❌ 此命令只能在群组中使用"; } try { const guild = await session.bot.getGuild(session.guildId); if (guild) { return [ "👥 群组信息:", "", `📛 群名称: ${guild.name || "未知"}`, `🆔 群号: ${guild.id}`, `👤 成员数: 未知`, `🤖 机器人状态: ✅ 在线` ].join("\n"); } else { return "❌ 无法获取群组信息"; } } catch (error) { logger.error("获取群组信息失败:", error); return "❌ 获取群组信息失败"; } }); ctx.command("group.config", "查看群管配置").action(async () => { return [ "⚙️ 群管配置状态:", "", `🔄 自动审批: ${config.groupManagement.autoApprove ? "✅ 启用" : "❌ 禁用"}`, `📋 白名单检查: ${config.groupManagement.useWhitelist ? "✅ 启用" : "❌ 禁用"}`, `🚫 自动拒绝非白名单: ${config.groupManagement.autoRejectNonWhitelist ? "✅ 启用" : "❌ 禁用"}`, `🔑 关键词过滤: ${config.groupManagement.useKeywordFilter ? "✅ 启用" : "❌ 禁用"}`, `💬 入群欢迎: ${config.groupManagement.enableWelcome ? "✅ 启用" : "❌ 禁用"}`, `📝 消息监控: ${config.messageMonitor.enabled ? "✅ 启用" : "❌ 禁用"}`, "", `📊 统计信息:`, `• 白名单数量: ${config.whitelist.length}`, `• 通过关键词: ${config.approvalKeywords.length}`, `• 拒绝关键词: ${config.rejectionKeywords.length}`, "", `💬 欢迎消息: ${config.groupManagement.welcomeMessage || "(未设置)"}`, `🚫 拒绝消息: ${config.groupManagement.rejectionMessage || "(未设置)"}` ].join("\n"); }); ctx.command("monitor.toggle", "切换消息监控状态").action(async () => { config.messageMonitor.enabled = !config.messageMonitor.enabled; return `📝 消息监控已${config.messageMonitor.enabled ? "启用" : "禁用"}`; }); ctx.command("monitor.level <level:string>", "设置监控日志级别").action(async (_, level) => { if (!["info", "warn", "error"].includes(level)) { return "❌ 无效的日志级别,请使用: info, warn, error"; } config.messageMonitor.logLevel = level; return `📝 监控日志级别已设置为: ${level}`; }); ctx.command("message", "消息管理").action(async () => { return [ "💬 消息管理命令:", "", "✅ 欢迎消息:", "• message.welcome.set <消息> - 设置欢迎消息", "• message.welcome.get - 查看当前欢迎消息", "• message.welcome.toggle - 启用/禁用欢迎功能", "", "❌ 拒绝消息:", "• message.rejection.set <消息> - 设置拒绝消息", "• message.rejection.get - 查看当前拒绝消息", "", "📋 查看所有:", "• message.list - 查看所有消息配置", "", `当前状态:`, `• 欢迎功能: ${config.groupManagement.enableWelcome ? "✅ 启用" : "❌ 禁用"}`, `• 欢迎消息: ${config.groupManagement.welcomeMessage ? "已设置" : "未设置"}`, `• 拒绝消息: ${config.groupManagement.rejectionMessage ? "已设置" : "未设置"}` ].join("\n"); }); ctx.command("message.welcome.set <msg:text>", "设置欢迎消息").action(async (_, msg) => { if (!msg) { return "❌ 请提供欢迎消息内容"; } config.groupManagement.welcomeMessage = msg; return [ "✅ 欢迎消息已设置为:", "", `💬 ${msg}`, "", "新成员加入时将收到此消息。" ].join("\n"); }); ctx.command("message.welcome.get", "查看当前欢迎消息").action(async () => { if (!config.groupManagement.welcomeMessage) { return "⚠️ 未设置欢迎消息"; } return [ "💬 当前欢迎消息:", "", config.groupManagement.welcomeMessage ].join("\n"); }); ctx.command("message.rejection.set <msg:text>", "设置拒绝消息").action(async (_, msg) => { if (!msg) { return "❌ 请提供拒绝消息内容"; } config.groupManagement.rejectionMessage = msg; return [ "✅ 拒绝消息已设置为:", "", `💬 ${msg}`, "", "入群申请被拒绝时将显示此消息。" ].join("\n"); }); ctx.command("message.rejection.get", "查看当前拒绝消息").action(async () => { if (!config.groupManagement.rejectionMessage) { return "⚠️ 未设置拒绝消息"; } return [ "💬 当前拒绝消息:", "", config.groupManagement.rejectionMessage ].join("\n"); }); ctx.command("message.list", "查看所有消息配置").action(async () => { return [ "💬 所有消息配置:", "", "✅ 欢迎消息:", `状态: ${config.groupManagement.enableWelcome ? "✅ 启用" : "❌ 禁用"}`, `内容: ${config.groupManagement.welcomeMessage || "(未设置)"}`, "", "❌ 拒绝消息:", config.groupManagement.rejectionMessage || "(未设置)", "", "💡 使用 message.welcome.set 和 message.rejection.set 来修改消息", "💡 使用 message.welcome.toggle 来启用/禁用欢迎消息" ].join("\n"); }); ctx.command("message.welcome.toggle", "切换入群欢迎消息功能").action(async () => { config.groupManagement.enableWelcome = !config.groupManagement.enableWelcome; return [ `🔄 入群欢迎消息功能已${config.groupManagement.enableWelcome ? "启用" : "禁用"}`, "", config.groupManagement.enableWelcome ? "✅ 现在新成员加入时将收到欢迎消息" : "❌ 现在新成员加入时不会收到欢迎消息", "", `当前配置:`, `• 欢迎功能: ${config.groupManagement.enableWelcome ? "✅ 启用" : "❌ 禁用"}`, `• 欢迎消息: ${config.groupManagement.welcomeMessage ? "已设置" : "未设置"}`, "", config.groupManagement.enableWelcome && !config.groupManagement.welcomeMessage ? "⚠️ 提示: 请使用 message.welcome.set 设置欢迎消息内容" : "" ].filter((line) => line !== "").join("\n"); }); ctx.command("manager.status", "查看插件状态").action(async () => { return [ "🤖 Manager-All 插件状态:", "", "📊 功能模块状态:", `• 消息监控: ${config.messageMonitor.enabled ? "✅ 运行中" : "❌ 已禁用"}`, `• 白名单管理: ${config.groupManagement.useWhitelist ? "✅ 启用" : "❌ 禁用"}`, `• 自动拒绝非白名单: ${config.groupManagement.autoRejectNonWhitelist ? "✅ 启用" : "❌ 禁用"}`, `• 关键词过滤: ${config.groupManagement.useKeywordFilter ? "✅ 启用" : "❌ 禁用"}`, `• 入群欢迎: ${config.groupManagement.enableWelcome ? "✅ 启用" : "❌ 禁用"}`, `• 自动审批: ${config.groupManagement.autoApprove ? "✅ 启用" : "❌ 禁用"}`, "", "📈 数据统计:", `• 白名单用户: ${config.whitelist.length} 个`, `• 通过关键词: ${config.approvalKeywords.length} 个`, `• 拒绝关键词: ${config.rejectionKeywords.length} 个`, "", "🔧 配置信息:", `• 日志级别: ${config.messageMonitor.logLevel}`, `• 欢迎功能: ${config.groupManagement.enableWelcome ? "启用" : "禁用"}`, `• 欢迎消息: ${config.groupManagement.welcomeMessage ? "已设置" : "未设置"}`, `• 拒绝消息: ${config.groupManagement.rejectionMessage ? "已设置" : "未设置"}`, "", "📋 使用 help 命令查看完整功能列表" ].join("\n"); }); ctx.command("manager.debug", "开启调试模式").action(async () => { const originalOn = ctx.on.bind(ctx); const eventNames = [ "request", "guild-request", "friend-request", "group-request", "request/group", "request/group/add", "request/friend", "guild-member-request", "group-member-request" ]; eventNames.forEach((eventName) => { try { ctx.on(eventName, (session) => { logger.info(`📡 捕获到事件: ${eventName}`); logger.info(`📋 事件详情: ${JSON.stringify({ type: session.type, subtype: session.subtype, userId: session.userId, guildId: session.guildId, content: session.content, messageId: session.messageId, platform: session.platform }, null, 2)}`); }); } catch (e) { logger.debug(`❌ 事件 ${eventName} 不支持`); } }); ctx.middleware((session, next) => { if (session.type && session.type !== "message") { logger.info(`🔍 中间件捕获非消息事件: type=${session.type}, subtype=${session.subtype || "无"}`); logger.info(`📊 完整 session 信息:`); logger.info(` - platform: ${session.platform}`); logger.info(` - type: ${session.type}`); logger.info(` - subtype: ${session.subtype}`); logger.info(` - userId: ${session.userId}`); logger.info(` - guildId: ${session.guildId}`); logger.info(` - content: ${session.content}`); logger.info(` - messageId: ${session.messageId}`); if (session.type === "request") { logger.info(`🎯 发现请求事件! subtype: ${session.subtype}`); if (session.subtype === "add" || session.subtype === "group") { logger.info(`✅ 这可能是入群申请事件!`); handleGroupRequest(session); } } } return next(); }); return [ "🔧 调试模式已开启", "", "现在会记录所有可能的入群申请相关事件", "请尝试发送入群申请,查看控制台日志", "", "监听的事件类型:", eventNames.map((name2) => `• ${name2}`).join("\n"), "", "同时监听所有中间件事件,特别关注 type=request 的事件" ].join("\n"); }); logger.info("Manager-All 插件加载完成"); logger.info(`当前配置: 自动审批=${config.groupManagement.autoApprove}, 白名单=${config.groupManagement.useWhitelist}, 关键词过滤=${config.groupManagement.useKeywordFilter}`); } __name(apply, "apply"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Config, apply, name });