2026-08-09 19:16:52 +03:00
|
|
|
import { getCachedMessage } from '../core/db.js';
|
|
|
|
|
import { logger } from '../core/logger.js';
|
|
|
|
|
|
|
|
|
|
/**
|
2026-08-09 21:00:22 +03:00
|
|
|
* Ловит удаления. Telegram в событии deleted_business_messages присылает ТОЛЬКО
|
|
|
|
|
* id сообщений и чат — без содержимого. Поэтому восстанавливаем из кэша, который
|
2026-08-09 22:16:44 +03:00
|
|
|
* наполняет модуль [cache], по тройке (connId, chatId, msgId). Нашли — значит это
|
|
|
|
|
* было входящее в личке: сохраняем как перехват владельца и уведомляем его.
|
2026-08-09 19:16:52 +03:00
|
|
|
*/
|
|
|
|
|
export default {
|
|
|
|
|
name: 'antidelete',
|
|
|
|
|
description: 'Сохраняет удалённые собеседником сообщения и медиа',
|
|
|
|
|
|
2026-08-09 22:16:44 +03:00
|
|
|
async onDeleted({ connId, ownerId, ownerChatId, chatId, msgIds }, ctx) {
|
2026-08-09 21:00:22 +03:00
|
|
|
if (!msgIds?.length) return;
|
2026-08-09 19:16:52 +03:00
|
|
|
|
2026-08-09 21:00:22 +03:00
|
|
|
for (const id of msgIds) {
|
2026-08-09 22:16:44 +03:00
|
|
|
const cached = getCachedMessage(connId, chatId, id);
|
2026-08-09 19:16:52 +03:00
|
|
|
if (!cached) continue; // не наше/не кэшировали — пропускаем
|
|
|
|
|
|
|
|
|
|
await ctx.capture('deleted', {
|
2026-08-09 22:16:44 +03:00
|
|
|
ownerId,
|
|
|
|
|
ownerChatId,
|
2026-08-09 19:16:52 +03:00
|
|
|
chatId: cached.chat_id,
|
|
|
|
|
senderId: cached.sender_id,
|
|
|
|
|
sender: cached.sender,
|
|
|
|
|
text: cached.text,
|
|
|
|
|
mediaKind: cached.media_kind,
|
|
|
|
|
mediaPath: cached.media_path,
|
|
|
|
|
});
|
|
|
|
|
logger.info(`antidelete: восстановлено удалённое сообщение ${id} от ${cached.sender || '?'}`);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
};
|