Monolith ist ein nodeJS basiertes Framework für die einfache Erstellung und Konfiguration von Discord Bots basierend auf dem Discord.js Framework.
- letzte nodeJS Version
- funktionierende MongoDB Datenbank
Nach dem Klonen des Repositorys kann mithilfe folgenden Befehles, alle Projekt Abhängigkeiten installiert werden:
npm run install
Zum starten der App muss unter
application/Monolith/Configs/
die MainConfig.example.ts zu MainConfig.ts umbenannt und anschließend richtig konfiguriert werden.
Zum schnellstart Verfügt die Monolith Applikation eine kleine Demo, die die Architektur verdeutlichen soll.
Zum Start der App:
npm run exec
Das Framework arbeitet nach dem MVC - Model - View - Controller Prinzip. Das heißt, es befindet sich unter application_mvc ein Verzeichnis "App" darunter können eigene Applications wie die bereits vorkonfigurierte demo-App erstellt werden.
Jede App besitzt jeweils ein "seite" Verzeichnis, in dem Discord-Events registriert werden können.
/application_mvc/app/demo_app/seite/channelCreate/
In jedem Verzeichnis muss jeweils ein Template und ein Controller der den template_base_controller erweitert sein.
Der Controller kann mithilfe der
registriere_template_variable('variable_name', wert);
Methode Werte an das Template geben. Die genaue Dokumentation und Syntax der Kontrollstrukturen im Template kann hier eingesehen werden: Dokumentation
An oberster Stelle stehen sogenannte Event-Templates, welche unter /seite/ in jedem Modul registriert werden können.
Interaction Templates sind besondere Event-Templates. Diese können unter /seite/interaction/interaction_name/ registriert werden.
<template>
{% if condition === true %}
<rechte>
<options>
<recht>1912455235235</recht>
</options>
<bausteine>
<baustein>
<pfad>/rightError/</pfad>
</baustein>
</bausteine>
</rechte>
{% endif %}
<seite>
<bausteine>
<baustein>
<pfad>/textAntwort/</pfad>
</baustein>
</bausteine>
</seite>
<befehl>
<ID>interaction_name</ID>
<daten>
<name>interaction_name</name>
<description>Beschreibungstext</description>
<rechte>
<dm>false</dm>
</rechte>
</daten>
</befehl>
</template>
Um Ein Befehl nur für bestimmte Rollen ausführbar zu machen kann unter rechte -> options -> recht die erlaubten RollenIDs konfiguriert werden. Unter bausteine kann eine Fehlermeldung konfiguriert werden wenn keine Berechtigung zum ausführen besteht.
Jedes Template kann mithilfe von Bausteinen eine Antwort konfiguriert werden.
ID: name des Befehls Name: Anzeigename des Befehls Description: Beschreibungstext
Diese Referenzieren auf einbindbare Bausteine unter /baustein/ die für den Response in Channeln oder als PM Message/Modal/Select-Menus zuständig sind.
<baustein>
<antworten>
<antwort>
<typ>CHANNEL</typ>
<ID>523950235523</ID>
</antwort>
<antwort>
<typ>EDIT</typ>
<ID>447623856325</ID>
</antwort>
<antwort>
<typ>REPLY</typ>
<ephemeral>true</ephemeral>
</antwort>
<antwort>
<typ>MODAL</typ>
</antwort>
<antwort>
<typ>DM</typ>
<ID>523536346346</ID>
</antwort>
</antworten>
<seite>
<bausteine>
<baustein>
<pfad>/antwort/embed/</pfad>
</baustein>
</bausteine>
</seite>
</baustein>
Jeder Baustein muss mind. eine Antwort aufweisen. Eine Antwort kann vom Typ CHANNEL|EDIT|REPLY|MODAL oder DM sein. REPLY darf nur als Antwort auf Interactions erfolgen. Edit kann eine bereits gesendete Nachricht überschreiben.
Referenz auf Subbausteine
Bausteine können Subbausteine einbinden, die wiederum die Konfiguration für den Response an sich wie Buttons, Embeds, Selectmenus und Modal-Elementen beinhalten.
Konfigurations-Beispiele:
<baustein>
<typ>button</typ>
<daten>
<style>Primary</style>
<label>Modal Demo</label>
<disabled>false</disabled>
<emoji></emoji>
<customid>1234</customid>
</daten>
</baustein>
<baustein>
<typ>selectmenu</typ>
<daten>
<customid>id</customid>
<disabled>false</disabled>
<placeholder>placeholder</placeholder>
<options>
<option>
<label>select</label>
<description>select</description>
<value>first</value>
</option>
<option>
<label>select2</label>
<description>select2</description>
<value>second</value>
</option>
</options>
<minvalues>0</minvalues>
<maxvalues>2</maxvalues>
</daten>
</baustein>
<baustein>
<typ>embed</typ>
<daten>
<color>0x0099FF</color>
<title>TITEL</title>
<url>https://example.com</url>
<author>
<name>Name</name>
<iconurl>http://icon_url/icon.jpg</iconurl>
<url>https://discord.js.org</url>
</author>
<description>Hello World!</description>
<fields>
<field>
<name>Field 1</name>
<value>value</value>
</field>
</fields>
<imageurl>http://image_url/img.png</imageurl>
<timestamp>2022-09-23T19:03:11.217Z</timestamp>
<footer>
<text>Lorem</text>
<iconurl>http://icon_url/icon.jpg</iconurl>
</footer>
</daten>
</baustein>
<baustein>
<typ>modal</typ>
<daten>
<customid>modalID</customid>
<title>Your Title</title>
</daten>
</baustein>
<baustein>
<typ>textinput</typ>
<daten>
<customid>textID</customid>
<label>Lorem</label>
<style>Paragraph</style>
<value>Lorem ipsum</value>
<placeholder>Lorem</placeholder>
<maxlength>1000</maxlength>
<minlength>300</minlength>
<required>true</required>
</daten>
</baustein>
Zur Laufzeit auftretende Fehler des Frameworks werden in einem Log unter /Log/ gespeichert.
logging via command-line über vorkonfigurierte farb-configurationen.
new CmdLogger({
'selectedPreset': 'ERROR'
}).log(err)
logging via command-line über vorkonfigurierte farb-configurationen.
new FileLogger({logName: 'log_name.txt'}).log('log_message')
Beim Verändern/Hinzufügen von Templates muss zusätzlich der Befehl
npm run liquid
oder
npm run install
ausgeführt werden. Somit werden alle Liquid-Templates automatisch in das bin Verzeichnis kopiert.
- Als eigenes npm Repository auslagern
- Die App über einen Websocket an andere Services anbindbar machen
- weitere Discord-Events Supporten