UNPKG

@hambur/koishi-plugin-auto-kick

Version:

自动踢出黑名单用户的群管理插件

165 lines (164 loc) 9.34 kB
import { Context, Schema } from 'koishi'; export declare const name = "auto-kick"; export declare const usage = "\n## \u529F\u80FD\u8BF4\u660E\n\u9AD8\u6027\u80FD\u81EA\u52A8\u8E22\u51FA\u6307\u5B9A\u7684\u9ED1\u540D\u5355\u7528\u6237\uFF0C\u652F\u6301\u5927\u89C4\u6A21\u7FA4\u7EC4\u76D1\u63A7\uFF1A\n- \u652F\u6301 QQ \u53F7\u9ED1\u540D\u5355\u548C\u6635\u79F0\u5173\u952E\u8BCD\u9ED1\u540D\u5355\n- **\u667A\u80FD\u8DF3\u8FC7\u7FA4\u4E3B\u548C\u7BA1\u7406\u5458\uFF0C\u907F\u514D\u8BEF\u8E22\u9AD8\u6743\u9650\u7528\u6237**\n- **\u65B0\u589E\uFF1A\u81EA\u52A8\u540C\u610F\u52A0\u7FA4\u8BF7\u6C42\u529F\u80FD\uFF0C\u81EA\u52A8\u62D2\u7EDD\u9ED1\u540D\u5355\u7528\u6237**\n- **\u65B0\u589E\uFF1AQQ\u673A\u5668\u4EBA\u79BB\u7EBF\u76D1\u63A7\u548C\u90AE\u4EF6\u901A\u77E5\u529F\u80FD\uFF08\u76F4\u63A5\u8C03\u7528NapCat API\u68C0\u6D4B\u771F\u5B9E\u8FDE\u63A5\u72B6\u6001\uFF09**\n- **\u4F18\u5148\u83B7\u53D6\u7FA4\u6635\u79F0\uFF0C\u786E\u4FDD\u51C6\u786E\u8BC6\u522B\u7FA4\u5185\u8FDD\u89C4\u6635\u79F0**\n- **\u65B0\u589E\uFF1A\u6269\u5C55\u6635\u79F0\u68C0\u67E5\u673A\u5236 - \u65B0\u6210\u5458\u8FDB\u7FA43\u5206\u949F\u540E\u68C0\u67E5\uFF0C\u7136\u540E\u6BCF\u5C0F\u65F6\u68C0\u67E5\u4E00\u6B21\uFF0C\u6301\u7EED12\u5C0F\u65F6**\n- \u4F18\u5316\u7684\u9ED1\u540D\u5355\u5339\u914D\u7B97\u6CD5 (O(1) \u67E5\u627E)\n- \u6635\u79F0\u652F\u6301\u7CBE\u786E\u5339\u914D\u3001\u5305\u542B\u5339\u914D\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\n- \u6279\u91CF\u626B\u63CF\u548C\u9650\u6D41\u63A7\u5236\n- \u5E76\u53D1\u63A7\u5236\u548C\u9519\u8BEF\u91CD\u8BD5\n- \u8E22\u4EBA\u7ED3\u679C\u9A8C\u8BC1\uFF0C\u9632\u6B62\u6743\u9650\u4E0D\u8DB3\u65F6\u7684\u8BEF\u62A5\n\n## \u4F7F\u7528\u65B9\u6CD5\n1. \u5728\u914D\u7F6E\u4E2D\u6DFB\u52A0\u8981\u5C4F\u853D\u7684 QQ \u53F7\n2. \u5728\u914D\u7F6E\u4E2D\u6DFB\u52A0\u8981\u5C4F\u853D\u7684\u6635\u79F0\u5173\u952E\u8BCD\uFF08\u5982 \"\u7FA4\u4E3B\"\u3001\"\u7BA1\u7406\u5458\"\uFF09\n3. **\u542F\u7528\u81EA\u52A8\u540C\u610F\u52A0\u7FA4\u529F\u80FD\uFF0C\u673A\u5668\u4EBA\u5C06\u81EA\u52A8\u5904\u7406\u52A0\u7FA4\u8BF7\u6C42**\n4. **\u914D\u7F6E\u90AE\u4EF6\u901A\u77E5\u670D\u52A1\u5668\u5730\u5740\u548CNapCat API\u5730\u5740\uFF0C\u542F\u7528\u79BB\u7EBF\u76D1\u63A7\u529F\u80FD**\n5. \u9009\u62E9\u6635\u79F0\u5339\u914D\u6A21\u5F0F\uFF1A\u5305\u542B\u5339\u914D\uFF08\u9ED8\u8BA4\uFF09\u6216\u6B63\u5219\u8868\u8FBE\u5F0F\n6. \u542F\u7528\u6269\u5C55\u6635\u79F0\u68C0\u67E5\u529F\u80FD\uFF0C\u65B0\u6210\u5458\u8FDB\u7FA4\u540E\u5C06\u57283\u5206\u949F\u30011\u5C0F\u65F6\u30012\u5C0F\u65F6...12\u5C0F\u65F6\u540E\u6301\u7EED\u68C0\u67E5\u6635\u79F0\u53D8\u66F4\n7. \u4F7F\u7528 Koishi \u7684\u7FA4\u7EC4\u8FC7\u6EE4\u5668\u9009\u62E9\u9700\u8981\u76D1\u63A7\u7684\u7FA4\n8. \u542F\u7528\u63D2\u4EF6\u5373\u53EF\u81EA\u52A8\u5DE5\u4F5C\n\n## \u5DE5\u4F5C\u539F\u7406\n- **\u7FA4\u6635\u79F0\u4F18\u5148**\uFF1A\u4F18\u5148\u83B7\u53D6\u548C\u68C0\u67E5\u7FA4\u6635\u79F0\uFF0C\u786E\u4FDD\u51C6\u786E\u8BC6\u522B\u7FA4\u5185\u8FDD\u89C4\u6635\u79F0\n- **\u79BB\u7EBF\u76D1\u63A7**\uFF1A\u76F4\u63A5\u8C03\u7528NapCat API\u68C0\u6D4B\u771F\u5B9EQQ\u8FDE\u63A5\u72B6\u6001\uFF0C\u79BB\u7EBF\u65F6\u81EA\u52A8\u53D1\u9001\u90AE\u4EF6\u901A\u77E5\n- **\u52A0\u7FA4\u8BF7\u6C42\u5904\u7406**\uFF1A\u81EA\u52A8\u540C\u610F\u975E\u9ED1\u540D\u5355\u7528\u6237\u7684\u52A0\u7FA4\u8BF7\u6C42\uFF0C\u62D2\u7EDD\u9ED1\u540D\u5355\u7528\u6237\n- **\u673A\u5668\u4EBA\u8FDB\u7FA4\u65F6**\uFF1A\u81EA\u52A8\u626B\u63CF\u73B0\u6709\u7FA4\u6210\u5458\uFF0C\u8E22\u51FA\u9ED1\u540D\u5355\u7528\u6237\n- **\u65B0\u6210\u5458\u52A0\u5165\u65F6**\uFF1A\u5B9E\u65F6\u68C0\u67E5\u65B0\u52A0\u5165\u7684\u6210\u5458\uFF0C\u53D1\u73B0\u9ED1\u540D\u5355\u7528\u6237\u7ACB\u5373\u8E22\u51FA\n- **\u6269\u5C55\u6635\u79F0\u68C0\u67E5**\uFF1A\u65B0\u6210\u5458\u8FDB\u7FA43\u5206\u949F\u540E\u9996\u6B21\u68C0\u67E5\uFF0C\u7136\u540E\u6BCF\u5C0F\u65F6\u68C0\u67E5\u4E00\u6B21\uFF0C\u6301\u7EED12\u5C0F\u65F6\u76D1\u63A7\u6635\u79F0\u53D8\u66F4\n- **\u9A8C\u8BC1\u673A\u5236**\uFF1A\u8E22\u4EBA\u540E\u9A8C\u8BC1\u7528\u6237\u662F\u5426\u771F\u7684\u88AB\u8E22\u51FA\uFF0C\u786E\u4FDD\u64CD\u4F5C\u6210\u529F\n"; /** * 性能统计信息 */ export interface Stats { totalScanned: number; totalKicked: number; totalFailed: number; totalApproved: number; totalRejected: number; lastScanTime: number; averageScanTime: number; totalOfflineNotifications: number; lastOfflineTime: number; totalExtendedChecks: number; } /** * 扩展检查缓存信息 */ export interface ExtendedCheckInfo { nickname: string; guildId: string; joinTime: number; checkCount: number; maxChecks: number; nextCheckTime: number; isFirstCheck: boolean; } /** * 插件配置接口 */ export interface Config { blacklist: string[]; nicknameBlacklist: string[]; enableJoinScan: boolean; enableMemberJoin: boolean; enableExtendedNicknameCheck: boolean; firstCheckDelay: number; extendedCheckInterval: number; extendedCheckHours: number; kickFailMessage: string; notifyAdmins: boolean; adminNotifyMessage: string; logLevel: 'debug' | 'info' | 'warn' | 'error'; enableAutoApprove: boolean; autoApproveMessage: string; autoRejectMessage: string; notifyAutoApprove: boolean; autoApproveNotifyMessage: string; autoRejectNotifyMessage: string; enableOfflineMonitor: boolean; emailServerUrl: string; napCatApiUrl: string; botName: string; offlineCheckInterval: number; maxOfflineNotifications: number; offlineNotificationCooldown: number; scanDelay: number; batchSize: number; maxConcurrent: number; kickDelay: number; retryAttempts: number; retryDelay: number; enableStats: boolean; skipBotMembers: boolean; skipAdmins: boolean; verifyKickResult: boolean; verifyDelay: number; verifyTimeout: number; nicknameMatchMode: 'exact' | 'contains' | 'regex'; } /** * 插件配置Schema */ export declare const Config: Schema<Schemastery.ObjectS<{ blacklist: Schema<string[], string[]>; nicknameBlacklist: Schema<string[], string[]>; enableJoinScan: Schema<boolean, boolean>; enableMemberJoin: Schema<boolean, boolean>; enableExtendedNicknameCheck: Schema<boolean, boolean>; firstCheckDelay: Schema<number, number>; extendedCheckInterval: Schema<number, number>; extendedCheckHours: Schema<number, number>; kickFailMessage: Schema<string, string>; notifyAdmins: Schema<boolean, boolean>; adminNotifyMessage: Schema<string, string>; logLevel: Schema<"debug" | "info" | "warn" | "error", "debug" | "info" | "warn" | "error">; }> | Schemastery.ObjectS<{ enableAutoApprove: Schema<boolean, boolean>; autoApproveMessage: Schema<string, string>; autoRejectMessage: Schema<string, string>; notifyAutoApprove: Schema<boolean, boolean>; autoApproveNotifyMessage: Schema<string, string>; autoRejectNotifyMessage: Schema<string, string>; }> | Schemastery.ObjectS<{ enableOfflineMonitor: Schema<boolean, boolean>; emailServerUrl: Schema<string, string>; napCatApiUrl: Schema<string, string>; botName: Schema<string, string>; offlineCheckInterval: Schema<number, number>; maxOfflineNotifications: Schema<number, number>; offlineNotificationCooldown: Schema<number, number>; }> | Schemastery.ObjectS<{ scanDelay: Schema<number, number>; batchSize: Schema<number, number>; maxConcurrent: Schema<number, number>; kickDelay: Schema<number, number>; retryAttempts: Schema<number, number>; retryDelay: Schema<number, number>; }> | Schemastery.ObjectS<{ enableStats: Schema<boolean, boolean>; skipBotMembers: Schema<boolean, boolean>; skipAdmins: Schema<boolean, boolean>; verifyKickResult: Schema<boolean, boolean>; verifyDelay: Schema<number, number>; verifyTimeout: Schema<number, number>; nicknameMatchMode: Schema<"exact" | "contains" | "regex", "exact" | "contains" | "regex">; }>, { blacklist: string[]; nicknameBlacklist: string[]; enableJoinScan: boolean; enableMemberJoin: boolean; enableExtendedNicknameCheck: boolean; firstCheckDelay: number; extendedCheckInterval: number; extendedCheckHours: number; kickFailMessage: string; notifyAdmins: boolean; adminNotifyMessage: string; logLevel: "debug" | "info" | "warn" | "error"; } & import("cosmokit").Dict & { enableAutoApprove: boolean; autoApproveMessage: string; autoRejectMessage: string; notifyAutoApprove: boolean; autoApproveNotifyMessage: string; autoRejectNotifyMessage: string; } & { enableOfflineMonitor: boolean; emailServerUrl: string; napCatApiUrl: string; botName: string; offlineCheckInterval: number; maxOfflineNotifications: number; offlineNotificationCooldown: number; } & { scanDelay: number; batchSize: number; maxConcurrent: number; kickDelay: number; retryAttempts: number; retryDelay: number; } & { enableStats: boolean; skipBotMembers: boolean; skipAdmins: boolean; verifyKickResult: boolean; verifyDelay: number; verifyTimeout: number; nicknameMatchMode: "exact" | "contains" | "regex"; }>; export declare function apply(ctx: Context, config: Config): void;