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 сообщений и чат — без содержимого. Поэтому восстанавливаем из кэша, который
|
|
|
|
|
* наполняет модуль [cache], по паре (chatId, msgId). Нашли — значит это было
|
|
|
|
|
* входящее в личке: сохраняем как перехват и уведомляем владельца.
|
2026-08-09 19:16:52 +03:00
|
|
|
*/
|
|
|
|
|
export default {
|
|
|
|
|
name: 'antidelete',
|
|
|
|
|
description: 'Сохраняет удалённые собеседником сообщения и медиа',
|
|
|
|
|
|
2026-08-09 21:00:22 +03:00
|
|
|
async onDeleted({ chatId, msgIds }, ctx) {
|
|
|
|
|
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) {
|
|
|
|
|
const cached = getCachedMessage(chatId, id);
|
2026-08-09 19:16:52 +03:00
|
|
|
if (!cached) continue; // не наше/не кэшировали — пропускаем
|
|
|
|
|
|
|
|
|
|
await ctx.capture('deleted', {
|
|
|
|
|
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 || '?'}`);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
};
|