| 448 | this.sv.delete(sid); |
| 449 | this.persistDb().catch((e) => console.error("[fbi] persistDb error", e)); |
| 450 | |
| 451 | // ponytail: link from live msg entity (need peerId for unknown groups) |
| 452 | const preview = htmlEsc((msg.text || "").slice(0, 50) || "[媒体消息]"); |
| 453 | const link = chatEntity.username |
| 454 | ? `<a href="https://t.me/${chatEntity.username}/${msg.id}">${preview}</a>` |
| 455 | : `<a href="https://t.me/c/${peelChatId(chatEntity.id)}/${msg.id}">${preview}</a>`; |
| 456 | const result = `🚨 发现嫌疑人 ${entry.targetName} 最新动向\n\n${link}\n\n<i>天网恢恢疏而不漏。</i>`; |
| 457 | |
| 458 | // ponytail: client handles channel/normal, one call suffices |
| 459 | try { await cl.deleteMessages(entry.triggerPeer, [entry.triggerMsgId], { revoke: false }); } catch {} |
| 460 | |
| 461 | await cl.sendMessage(entry.triggerPeer, { message: result, parseMode: "html", linkPreview: false }); |
| 462 | await cl.sendMessage("me", { message: result, parseMode: "html", linkPreview: false }); |
| 463 | } |
| 464 | |
| 465 | /* ====== ds (zero-request, reads cache) ====== */ |
| 466 | |
| 467 | private async doLoc(msg: Api.Message, args: string[]) { |
| 468 | if (!this.cacheReady) { |
| 469 | await msg.edit({ text: "⏳ 缓存正在初始化,请稍后再试。", parseMode: "html" }); |
| 470 | return; |
| 471 | } |
| 472 | const target = await this.resolveTarget(msg, args); |
| 473 | if (!target) { |
| 474 | await msg.edit({ text: "❌ 无法识别目标", parseMode: "html" }); |
| 475 | return; |
| 476 | } |
| 477 | |
| 478 | await msg.edit({ text: `🧭 正在摸排嫌疑人 ${target.name} 的窝点...`, parseMode: "html" }); |
| 479 | |