34 lines
1.4 KiB
JavaScript
34 lines
1.4 KiB
JavaScript
|
|
import { getCachedMessage } from '../core/db.js';
|
||
|
|
import { logger } from '../core/logger.js';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Ловит удаления. MTProto в событии удаления присылает ТОЛЬКО id сообщений —
|
||
|
|
* без содержимого и (в личных чатах) без чата. Поэтому восстанавливаем из кэша,
|
||
|
|
* который наполняет модуль [cache]. Нашли в кэше — значит это было входящее
|
||
|
|
* в личке: сохраняем как перехват и уведомляем владельца.
|
||
|
|
*/
|
||
|
|
export default {
|
||
|
|
name: 'antidelete',
|
||
|
|
description: 'Сохраняет удалённые собеседником сообщения и медиа',
|
||
|
|
|
||
|
|
async onDeleted(event, ctx) {
|
||
|
|
const ids = event.deletedIds ?? [];
|
||
|
|
if (!ids.length) return;
|
||
|
|
|
||
|
|
for (const id of ids) {
|
||
|
|
const cached = getCachedMessage(id);
|
||
|
|
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 || '?'}`);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
};
|