summaryrefslogtreecommitdiff
path: root/src/app.js
blob: bfbdc446f6ea9a2d99d8c50c308a1d337c784759 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
const fetch = require('node-fetch');
const dotenv = require('dotenv').config();

const roleId = process.env.ROLE_ID;
const interval = process.env.INTERVAL_IN_SECONDS; // Interval in Sekunden
const eventName = process.env.EVENT_NAME; // Der Name des Events
const eventLocation = process.env.EVENT_LOCATION; // Die Location des Events
const webhookUrl = process.env.WEBHOOK_URL; // Webhook-URL

const url = 'https://api.soopy.dev/skyblock/chevents/get'; // API-URL

var lastStatus = false; // Speichert den letzten Status, ob das Event aktiv war

function sendDiscordMessage(message) {
    fetch(webhookUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            content: message,
            username: 'Powder Tracker', // Optional: Custom-Bot-Name
        })
    })
        .then(res => res.text())
        .then(text => console.log(text))
        .catch(err => console.error('Fehler beim Senden der Webhook-Nachricht:', err));
}

setInterval(() => {
    fetch(url)
        .then(res => res.json())
        .then(json => {
            const eventInfo = json.data.running_events[eventLocation];
            const specificEvent = eventInfo && eventInfo.find(e => e.event === eventName);

            // Überprüfung, ob das Event aktiv ist
            const currentTime = json.data.curr_time;
            const eventActive = specificEvent && currentTime <= specificEvent.ends_at;
            const remainingTimeMs = specificEvent ? specificEvent.ends_at - currentTime : 0; // Verbleibende Zeit in Millisekunden
            const remainingTimeMin = Math.floor(remainingTimeMs / 60000); // Verbleibende Zeit in Minuten
            const lobbyCount = specificEvent ? specificEvent.lobby_count : 0; // Anzahl der Lobbys

            console.log(`Event '${eventName}' in '${eventLocation}': ${eventActive ? 'Aktiv' : 'Inaktiv'}`);

            if (eventActive && !lastStatus) {
                const message = `<@&${roleId}> Hey there is a '${eventName}' in '${eventLocation}' aktiv. Time Left: ${remainingTimeMin} Min. Lobbys: ${lobbyCount}.`;
                sendDiscordMessage(message);
                lastStatus = true; // Aktualisierung des Status, um Mehrfachbenachrichtigungen zu vermeiden
            } else if (!eventActive && lastStatus) {
                lastStatus = false; // Zurücksetzen des Status
            }
        })
        .catch(err => {
            console.error('Fehler beim Abrufen der API:', err);
        });
}, interval * 1000);