Додані повідомлення та перепрацьована структура застосунку та api
This commit is contained in:
55
cron/tasks/messages.js
Normal file
55
cron/tasks/messages.js
Normal file
@@ -0,0 +1,55 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user