153 lines
6.3 KiB
JavaScript
153 lines
6.3 KiB
JavaScript
// Mappa globale per salvare gli interval id anche dopo un "hot-reload"
|
|
if (!global.__meb_live_dashboards) {
|
|
global.__meb_live_dashboards = new Map();
|
|
}
|
|
|
|
module.exports = [
|
|
{
|
|
id: 'dashboard-refresh',
|
|
execute: async ({ bot, chatId, msg }) => {
|
|
const dash = require('../commands/dashboard.js');
|
|
const newText = dash.formatSensorData();
|
|
|
|
try {
|
|
await bot.editMessageText(newText, {
|
|
chat_id: chatId,
|
|
message_id: msg.message_id,
|
|
parse_mode: 'Markdown',
|
|
reply_markup: {
|
|
inline_keyboard: [
|
|
[
|
|
{ text: "⚡️ Avvia Live Tracker (2s)", callback_data: 'dashboard-live-start' }
|
|
],
|
|
[
|
|
{ text: "🔄 Ricarica Dati", callback_data: 'dashboard-refresh' }
|
|
]
|
|
]
|
|
}
|
|
});
|
|
} catch (e) {
|
|
if (!e.message.includes('message is not modified')) {
|
|
console.error("Errore nel refresh dashboard:", e);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
id: 'dashboard-live-start',
|
|
execute: async ({ bot, chatId, msg }) => {
|
|
const dash = require('../commands/dashboard.js');
|
|
|
|
const messageId = msg.message_id;
|
|
const liveKey = `${chatId}_${messageId}`;
|
|
|
|
// Se è già attivo un live per questo messaggio, non fare nulla
|
|
if (global.__meb_live_dashboards.has(liveKey)) return;
|
|
|
|
// Avvisa che sta partendo
|
|
const startMarkup = {
|
|
inline_keyboard: [
|
|
[
|
|
{ text: "🛑 Ferma Live Tracker", callback_data: 'dashboard-live-stop' }
|
|
]
|
|
]
|
|
};
|
|
|
|
await bot.editMessageReplyMarkup(startMarkup, { chat_id: chatId, message_id: messageId });
|
|
|
|
// Inizializza l'interval a 2 secondi. Autodistruzione dopo 30s
|
|
let count = 15; // 15 tick da 2 secondi = 30 secondi
|
|
const intervalTimer = setInterval(async () => {
|
|
count--;
|
|
const baseText = dash.formatSensorData();
|
|
|
|
// Se il tempo scade, disattiva il live e ripristina i tasti normali
|
|
if (count <= 0) {
|
|
if (global.__meb_live_dashboards.has(liveKey)) {
|
|
clearInterval(global.__meb_live_dashboards.get(liveKey));
|
|
global.__meb_live_dashboards.delete(liveKey);
|
|
}
|
|
try {
|
|
await bot.editMessageText(baseText + `\n🛑 _Live tracker terminato automaticamente (30s) per risparmiare risorse._`, {
|
|
chat_id: chatId,
|
|
message_id: messageId,
|
|
parse_mode: 'Markdown',
|
|
reply_markup: {
|
|
inline_keyboard: [
|
|
[{ text: "⚡️ Avvia Live Tracker (2s)", callback_data: 'dashboard-live-start' }],
|
|
[{ text: "🔄 Ricarica Dati", callback_data: 'dashboard-refresh' }]
|
|
]
|
|
}
|
|
});
|
|
} catch (e) { }
|
|
return;
|
|
}
|
|
|
|
// Altrimenti prosegui con l'aggiornamento e la stringa del countdown
|
|
const newText = baseText + `\n⏳ _Live attivo: arresto automatico tra *${count * 2}s*_`;
|
|
|
|
try {
|
|
await bot.editMessageText(newText, {
|
|
chat_id: chatId,
|
|
message_id: messageId,
|
|
parse_mode: 'Markdown',
|
|
reply_markup: startMarkup
|
|
});
|
|
} catch (e) {
|
|
// API limits o the message was not modified
|
|
if (e.response && e.response.statusCode === 400 && e.message.includes("message is not modified")) {
|
|
// ignore
|
|
} else if (e.response && e.response.statusCode === 429) {
|
|
// Troppe richieste Telegram
|
|
console.warn("[Telegram Dashboard] Rate Limit raggionto. Riprovo più tardi...");
|
|
} else if (e.response && e.response.statusCode === 400 && e.message.includes("message to edit not found")) {
|
|
// Il messaggio è stato cancellato dall'utente
|
|
clearInterval(intervalTimer);
|
|
global.__meb_live_dashboards.delete(liveKey);
|
|
} else {
|
|
console.error("[Telegram Dashboard] Errore update live:", e);
|
|
}
|
|
}
|
|
}, 2000);
|
|
|
|
global.__meb_live_dashboards.set(liveKey, intervalTimer);
|
|
}
|
|
},
|
|
{
|
|
id: 'dashboard-live-stop',
|
|
execute: async ({ bot, chatId, msg }) => {
|
|
const dash = require('../commands/dashboard.js');
|
|
|
|
const messageId = msg.message_id;
|
|
const liveKey = `${chatId}_${messageId}`;
|
|
|
|
// Pulisci l'interval se esiste
|
|
if (global.__meb_live_dashboards.has(liveKey)) {
|
|
clearInterval(global.__meb_live_dashboards.get(liveKey));
|
|
global.__meb_live_dashboards.delete(liveKey);
|
|
}
|
|
|
|
// Ripristina la formattazione iniziale
|
|
const newText = dash.formatSensorData();
|
|
|
|
try {
|
|
await bot.editMessageText(newText, {
|
|
chat_id: chatId,
|
|
message_id: messageId,
|
|
parse_mode: 'Markdown',
|
|
reply_markup: {
|
|
inline_keyboard: [
|
|
[
|
|
{ text: "⚡️ Avvia Live Tracker (2s)", callback_data: 'dashboard-live-start' }
|
|
],
|
|
[
|
|
{ text: "🔄 Ricarica Dati", callback_data: 'dashboard-refresh' }
|
|
]
|
|
]
|
|
}
|
|
});
|
|
} catch (e) { }
|
|
}
|
|
}
|
|
];
|