55 lines
2.3 KiB
JavaScript
55 lines
2.3 KiB
JavaScript
const db = require("../config/db");
|
||
const TelegramBot = require("node-telegram-bot-api");
|
||
|
||
const util = require('util');
|
||
const dbAll = util.promisify(db.all).bind(db);
|
||
const dbRun = util.promisify(db.run).bind(db);
|
||
|
||
const TOKEN = process.env.TELEGRAM_TOKEN;
|
||
const STAND_CHAT_ID = process.env.STAND_CHAT_ID;
|
||
|
||
const bot = new TelegramBot(TOKEN, { polling: false });
|
||
|
||
class Messages {
|
||
async cleanup_old() {
|
||
try {
|
||
// "Зараз мінус 24 години"
|
||
const oneDayAgo = Date.now() - (24 * 60 * 55 * 1000);
|
||
|
||
// 1. Отримуємо повідомлення, які старші за добу
|
||
const oldMessages = await dbAll(
|
||
`SELECT last_message_id FROM sent_messages WHERE created_at < ?`,
|
||
[oneDayAgo]
|
||
);
|
||
|
||
if (!oldMessages || oldMessages.length === 0) {
|
||
console.log('🧹 Застарілих повідомлень не знайдено.');
|
||
return;
|
||
}
|
||
|
||
console.log(`🧹 Знайдено ${oldMessages.length} повідомлень для видалення...`);
|
||
|
||
// 2. Видаляємо повідомлення з Telegram по черзі
|
||
for (const msg of oldMessages) {
|
||
try {
|
||
await bot.deleteMessage(STAND_CHAT_ID, msg.last_message_id);
|
||
await new Promise(resolve => setTimeout(resolve, 50)); // пауза 50мс
|
||
} catch (e) {
|
||
// Код помилки 400 зазвичай означає, що повідомлення вже видалено вручну
|
||
// або минуло понад 48 годин
|
||
console.log(`⚠️ Повідомлення ${msg.last_message_id} не знайдено в Telegram або застаре.`);
|
||
}
|
||
}
|
||
|
||
// 3. Видаляємо записи з бази даних одним махом
|
||
await dbRun(`DELETE FROM sent_messages WHERE created_at < ?`, [oneDayAgo]);
|
||
|
||
console.log(`✅ Очистка завершена.`);
|
||
|
||
} catch (err) {
|
||
console.error('❌ Помилка під час виконання cleanup_old:', err.message);
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = new Messages(); |