{"id":785,"date":"2022-09-13T16:12:21","date_gmt":"2022-09-13T14:12:21","guid":{"rendered":"https:\/\/wesleydegraaf.com\/?page_id=785"},"modified":"2024-03-22T00:16:31","modified_gmt":"2024-03-21T22:16:31","slug":"chourgie-v4","status":"publish","type":"page","link":"https:\/\/wesleydegraaf.com\/en\/chourgie-v4\/","title":{"rendered":"Chourgie"},"content":{"rendered":"\n<div class=\"wp-block-cover\" style=\"min-height:280px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-palette-color-1-background-color has-background-dim-100 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-x-large-font-size wp-block-paragraph\"><strong>Chourgie (V4)<\/strong><\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 29%\"><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">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). <br><br>Chourgie maakt nu gebruik van het slashcommand systeem van discord, voorheen gebruitke de bot de ; als prefix. <br>Chourgie heeft verschillende functionaliteit erbij gekregen! Zo kan Chourgie reisinformatie opvragen van de NS API en de actuele storingen bekijken! Hieronder meer.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"840\" src=\"https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2024\/03\/Chourgie-v4.png\" alt=\"\" class=\"wp-image-892 size-full\" srcset=\"https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2024\/03\/Chourgie-v4.png 626w, https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2024\/03\/Chourgie-v4-224x300.png 224w, https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2024\/03\/Chourgie-v4-9x12.png 9w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-palette-color-1-color\">Project Info:<\/mark><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Solo Project<br>Project tijd: begin 1e jaar tot heden<br>Code Languages: JavaScript, Discord.js<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-palette-color-1-color\">NS API<\/mark><\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 29%\"><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">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.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"540\" height=\"617\" src=\"https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2022\/09\/NS-API-Bericht.png\" alt=\"\" class=\"wp-image-797 size-full\" srcset=\"https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2022\/09\/NS-API-Bericht.png 540w, https:\/\/wesleydegraaf.com\/wp-content\/uploads\/2022\/09\/NS-API-Bericht-263x300.png 263w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><\/figure><\/div>\n\n\n<div class=\"dm-code-snippet light no-background  dm-normal-version\" style=\"background-color:#abb8c3;\" snippet-height=\"500px\">\n\t\t\t<div class=\"control-language\">\n                <div class=\"dm-buttons\">\n                    <div class=\"dm-buttons-left\">\n                        <div class=\"dm-button-snippet red-button\"><\/div>\n                        <div class=\"dm-button-snippet orange-button\"><\/div>\n                        <div class=\"dm-button-snippet green-button\"><\/div>\n                    <\/div>\n                    <div class=\"dm-buttons-right\">\n                        <a id=\"dm-copy-raw-code\">\n                        <span class=\"dm-copy-text\">Get the Code!<\/span>\n                        <span class=\"dm-copy-confirmed\" style=\"display:none\">You have it!<\/span>\n                        <span class=\"dm-error-message\" style=\"display:none\">Use a different Browser<\/span><\/a>\n                    <\/div>\n                <\/div>\n                <pre class=\"line-numbers\"><code id=\"dm-code-raw\" class=\"wrap language-javascript\">\n<pre>const discord = require(\"discord.js\");\nconst fetch = require(\"node-fetch\");\n\nmodule.exports.run = async (client, message, args) =&gt; {\n\n    var botIcon = client.user.displayAvatarURL({ size: 2048 });\n    var apiKeyPrim = \":)\";\n\n    fetch(`https:\/\/gateway.apiportal.ns.nl\/reisinformatie-api\/api\/v3\/disruptions?isActive=true`, {\n        method: 'GET',\n        headers: { \"Ocp-Apim-Subscription-Key\": apiKeyPrim },\n    })\n        .then(response =&gt; response.json())\n        .then(data =&gt; {\n            var info = \"\";\n            for (let i = 0; i &lt; data.length; i++) {\n                var type = data[i].type\n\n                if (type == \"CALAMITY\") {\n                    info += `**${data[i].title}** (\u2139 Info \u2139)\n                    **Bescrhijving:** ${data[i].description}\\n`\n                }\n                else if (type == \"DISRUPTION\") {\n                    info += `**${data[i].title}** (\u26a0 Verstoring \u26a0)\n                        **Start:** ${new Date(data[i].start).toLocaleString()} \n                        **Verwacht Einde:** ${data[i].expectedDuration.description}\n                        **Extra:** ${data[i].phase.label}\\n`\n\n                    let timeSpans = \"\";\n                    for (let t = 0; t &lt; data[i].timespans.length; t++) {\n                        timeSpans += `**Oorzaak:** ${data[i].timespans[t].cause.label}\\n`\n                        if (data[i].timespans[t].alternativeTransport) timeSpans += `**Alternatief vervoer:** ${data[i].timespans[t].alternativeTransport.label}\\n`\n                        if (data[i].timespans[t].additionalTravelTime) timeSpans += `**Alternatief duur vervoer:** ${data[i].timespans[t].additionalTravelTime.label}\\n`\n\n                        if (data[i].timespans[t].advices &amp;&amp; data[i].timespans[t].advices.length != 0) {\n                            timeSpans += \"**Advies:** \"\n                            for (let a = 0; a &lt; data[i].timespans[t].advices.length; a++) {\n                                timeSpans += data[i].timespans[t].advices[a] + \"\\n\";\n                            }\n                        }\n                        timeSpans += \"\\n\"\n                    }\n                    info += timeSpans\n\n                } else if (type == \"MAINTENANCE\") {\n                    info += `**${data[i].title}** (\ud83d\udee0 Werkzaamheden \ud83d\udee0)\n                    **Periode:** ${data[i].period}\n                    **Extra reistijd:** ${data[i].summaryAdditionalTravelTime.label}\\n`\n\n                    let timeSpans = \"\";\n                    for (let t = 0; t &lt; data[i].timespans.length; t++) {\n                        if (data[i].timespans[t].alternativeTransport) timeSpans += `**Alternatief vervoer:** ${data[i].timespans[t].alternativeTransport.label}\\n`\n\n                        if (data[i].timespans[t].advices &amp;&amp; data[i].timespans[t].advices.length != 0) {\n                            timeSpans += \"**Advies:** \"\n                            for (let a = 0; a &lt; data[i].timespans[t].advices.length; a++) {\n                                timeSpans += data[i].timespans[t].advices[a] + \"\\n\";\n                            }\n                        }\n                        timeSpans += \"\\n\"\n                    }\n                    info += timeSpans\n                }\n            }\n\n            var nsEmbed = new discord.MessageEmbed()\n                .setColor(\"#fcc81c\")\n                .setTitle(\"Nederlandse Spoorwegen Verstoringen\")\n                .setDescription(info)\n                .setFooter(\"Chourgie\u00ae\", botIcon)\n                .setTimestamp();\n\n            return message.channel.send({ embeds: [nsEmbed] })\n        }).catch(err =&gt; console.log(err));\n}\n\nmodule.exports.help = {\n    name: \"ns\",\n    category: \"general\",\n    description: \"NS informatie.\"\n}<\/pre>\n<\/code><\/pre>\n\t\t\t<\/div>\n        <\/div>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">NS API Code voor verstoringen<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-785","page","type-page","status-publish","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/pages\/785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/comments?post=785"}],"version-history":[{"count":16,"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/pages\/785\/revisions"}],"predecessor-version":[{"id":893,"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/pages\/785\/revisions\/893"}],"wp:attachment":[{"href":"https:\/\/wesleydegraaf.com\/en\/wp-json\/wp\/v2\/media?parent=785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}