Додані повідомлення та перепрацьована структура застосунку та api

This commit is contained in:
2026-03-15 00:25:10 +02:00
parent 85483b85bb
commit 4bc9c11512
101 changed files with 5763 additions and 2546 deletions

55
cron/tasks/messages.js Normal file
View 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();