(msg: Api.Message, args: string)
| 380 | } |
| 381 | |
| 382 | private async handleAd(msg: Api.Message, args: string) { |
| 383 | const parts = args.split(/\s+/); |
| 384 | const subCmd = parts[0]?.toLowerCase(); |
| 385 | const keywords = parts.slice(1); |
| 386 | |
| 387 | switch (subCmd) { |
| 388 | case "add": |
| 389 | if (keywords.length === 0) throw new Error("请提供关键词。"); |
| 390 | this.config.adFilters.push(...keywords); |
| 391 | await this.saveConfig(); |
| 392 | await msg.edit({ text: `✅ 成功添加 ${keywords.length} 个广告过滤词。` }); |
| 393 | break; |
| 394 | case "del": |
| 395 | if (keywords.length === 0) throw new Error("请提供关键词。"); |
| 396 | const initialLength = this.config.adFilters.length; |
| 397 | this.config.adFilters = this.config.adFilters.filter(k => !keywords.includes(k)); |
| 398 | await this.saveConfig(); |
| 399 | await msg.edit({ text: `✅ 成功删除 ${initialLength - this.config.adFilters.length} 个广告过滤词。` }); |
| 400 | break; |
| 401 | case "list": |
| 402 | if (this.config.adFilters.length === 0) { |
| 403 | await msg.edit({ text: "当前没有广告过滤词。" }); |
| 404 | } else { |
| 405 | await msg.edit({ text: `**当前广告过滤词:**\n\n${this.config.adFilters.join(", ")}` }); |
| 406 | } |
| 407 | break; |
| 408 | default: |
| 409 | throw new Error(`用法: ${mainPrefix}so ad <add|del|list> [关键词]`); |
| 410 | } |
| 411 | } |
| 412 | |
| 413 | private async handleKkp(msg: Api.Message, useSpoiler: boolean) { |
| 414 | await this.findAndSendVideo(msg, null, useSpoiler, true, "kkp"); |
no test coverage detected