Chourgie (V4)

Chourgie is ontstaan in het 1e jaar. Hij was gemaakt om huiswerk bij te houden en toetsen. Chourgie komt van mijn eerste bot Double en gebruikt heel veel code daarvan, maar hij is al beter dan de oude bot. Later moest ik de bot updaten naar V12 en nu naar V14 waardoor ik heel veel moest herschrijven. Helaas wordt Discord.js regelmatig nog grondig aangepast waardoor sommige commands breken. Op het moment heeft Chourgie 23 public commands (1 private).

Chourgie maakt nu gebruik van het slashcommand systeem van discord, voorheen gebruitke de bot de ; als prefix.
Chourgie heeft verschillende functionaliteit erbij gekregen! Zo kan Chourgie reisinformatie opvragen van de NS API en de actuele storingen bekijken! Hieronder meer.

Project Info:

Solo Project
Project tijd: begin 1e jaar tot heden
Code Languages: JavaScript, Discord.js


NS API

Ik maak gebruik van de NS API om dit aan een gebruiker te laten zien in een embed. Ik gebruik Node-Fetch voor het fetchen van de API. De NS API geeft niet content consistent terug, waardoor sommige data velden niet in een deel van het bericht zitten zoals Extra reistijd. Ik heb dat gefilterd en sommige data velden hadden een array van data in zich zitten.


const discord = require("discord.js");
const fetch = require("node-fetch");

module.exports.run = async (client, message, args) => {

    var botIcon = client.user.displayAvatarURL({ size: 2048 });
    var apiKeyPrim = ":)";

    fetch(`https://gateway.apiportal.ns.nl/reisinformatie-api/api/v3/disruptions?isActive=true`, {
        method: 'GET',
        headers: { "Ocp-Apim-Subscription-Key": apiKeyPrim },
    })
        .then(response => response.json())
        .then(data => {
            var info = "";
            for (let i = 0; i < data.length; i++) {
                var type = data[i].type

                if (type == "CALAMITY") {
                    info += `**${data[i].title}** (ℹ Info ℹ)
                    **Bescrhijving:** ${data[i].description}\n`
                }
                else if (type == "DISRUPTION") {
                    info += `**${data[i].title}** (⚠ Verstoring ⚠)
                        **Start:** ${new Date(data[i].start).toLocaleString()} 
                        **Verwacht Einde:** ${data[i].expectedDuration.description}
                        **Extra:** ${data[i].phase.label}\n`

                    let timeSpans = "";
                    for (let t = 0; t < data[i].timespans.length; t++) {
                        timeSpans += `**Oorzaak:** ${data[i].timespans[t].cause.label}\n`
                        if (data[i].timespans[t].alternativeTransport) timeSpans += `**Alternatief vervoer:** ${data[i].timespans[t].alternativeTransport.label}\n`
                        if (data[i].timespans[t].additionalTravelTime) timeSpans += `**Alternatief duur vervoer:** ${data[i].timespans[t].additionalTravelTime.label}\n`

                        if (data[i].timespans[t].advices && data[i].timespans[t].advices.length != 0) {
                            timeSpans += "**Advies:** "
                            for (let a = 0; a < data[i].timespans[t].advices.length; a++) {
                                timeSpans += data[i].timespans[t].advices[a] + "\n";
                            }
                        }
                        timeSpans += "\n"
                    }
                    info += timeSpans

                } else if (type == "MAINTENANCE") {
                    info += `**${data[i].title}** (🛠 Werkzaamheden 🛠)
                    **Periode:** ${data[i].period}
                    **Extra reistijd:** ${data[i].summaryAdditionalTravelTime.label}\n`

                    let timeSpans = "";
                    for (let t = 0; t < data[i].timespans.length; t++) {
                        if (data[i].timespans[t].alternativeTransport) timeSpans += `**Alternatief vervoer:** ${data[i].timespans[t].alternativeTransport.label}\n`

                        if (data[i].timespans[t].advices && data[i].timespans[t].advices.length != 0) {
                            timeSpans += "**Advies:** "
                            for (let a = 0; a < data[i].timespans[t].advices.length; a++) {
                                timeSpans += data[i].timespans[t].advices[a] + "\n";
                            }
                        }
                        timeSpans += "\n"
                    }
                    info += timeSpans
                }
            }

            var nsEmbed = new discord.MessageEmbed()
                .setColor("#fcc81c")
                .setTitle("Nederlandse Spoorwegen Verstoringen")
                .setDescription(info)
                .setFooter("Chourgie®", botIcon)
                .setTimestamp();

            return message.channel.send({ embeds: [nsEmbed] })
        }).catch(err => console.log(err));
}

module.exports.help = {
    name: "ns",
    category: "general",
    description: "NS informatie."
}

NS API Code voor verstoringen