Documentatie / NL
Zelfgebouwde Discord ticket bot voor FiveM servers. Alles werkt via slash commands, gebouwd met Discord.js v14.
Vereisten
Zorg dat je het volgende hebt voor je begint:
- Node.js 18 of hoger — controleer met
node -v, downloaden via nodejs.org. - Een bot aangemaakt via de Discord Developer Portal op
discord.com/developers/applications. - De volgende intents ingeschakeld in de Developer Portal:
- Server Members Intent
- Message Content Intent
- Presence Intent
Installatie
- 1Pak de bestanden uit naar een map en open een terminal daarin.
- 2Installeer de packages:
npm install - 3Vul
config/config.jsonin — zie het onderdeel Configuratie. - 4Registreer de slash commands (eenmalig, of opnieuw na wijzigingen):
node src/deploy.js - 5Start de bot:
Voor productie via PM2:npm startpm2 start ecosystem.config.js
Configuratie
Open config/config.json. Zet Developer Mode aan in Discord via Instellingen › Geavanceerd — dan kun je op alles rechtsklikken om een ID te kopiëren.
| Veld | Beschrijving |
|---|---|
TOKEN | Bot token uit de Developer Portal, tabblad Bot. Nooit publiek maken. |
CLIENT_ID | Applicatie-ID, staat op General Information in de Developer Portal. |
GUILD_ID | ID van je server — rechtsklik op de server, ID kopiëren. |
TICKET_CATEGORY_ID | Categorie waar ticketkanalen aangemaakt worden. |
TICKET_CHANNEL_ID | Kanaal waar het ticketpanel geplaatst wordt. |
TICKET_LOG_CHANNEL_ID | Kanaal voor ticketlogs — elke actie wordt hier gepost. |
TICKET_TRANSCRIPT_CHANNEL_ID | Kanaal waar transcripts naartoe gestuurd worden na sluiten. |
MEMBER_COUNT_CHANNEL_ID | Voice kanaal waarvan de naam het ledenaantal toont. |
SUPPORT_ROLE_ID | Supportrol — tickets beheren. |
ADMIN_ROLE_ID | Adminrol — toegang tot alle commands. |
MOD_ROLE_ID | Moderatorrol — moderatiecommands. |
WELCOME_CHANNEL_ID | Kanaal voor welkomst- en afscheidsberichten. |
MUTED_ROLE_ID | Muterol voor handmatige mutes. |
BOT_COLOR | Kleurcode voor embeds, zonder hekje — bijv. 5865F2. |
BOT_NAME | Naam die onderaan embeds verschijnt. |
BOT_LOGO | URL naar afbeelding voor het logo in embeds. |
TICKET_TYPES | Lijst van ticket types — zie hieronder. |
Ticket types
Standaard: Support, Ban Appeal, Speler Rapporteren en Aankoop Probleem. Aanpasbaar via TICKET_TYPES in de config.
| Veld | Uitleg |
|---|---|
id | Unieke naam zonder spaties, bijv. support |
label | Naam die gebruikers zien in het dropdown-menu |
description | Korte omschrijving in het dropdown-menu |
emoji | Emoji die voor de naam staat |
prefix | Begin van de kanaalnaam — ticket geeft ticket-0001 |
Hoe het ticketsysteem werkt
- 01Je plaatst het panel met
/ticket-panelin een kanaal. - 02Een gebruiker opent het dropdown-menu en kiest een ticket type.
- 03Er wordt automatisch een privékanaal aangemaakt — alleen de gebruiker en de supportrol kunnen het zien.
- 04In het kanaal staan knoppen: sluiten, claimen, gebruiker toevoegen en transcript.
- 05Als iemand sluit verschijnt er een bevestigingsvraag.
- 06Na bevestiging wordt een HTML transcript gestuurd naar het transcriptkanaal en het kanaal verdwijnt na 5 seconden.
- 07De ticket eigenaar krijgt een DM dat het ticket gesloten is.
Commands — Tickets
Plaatst het aanmaakpanel. Gebruikers kiezen via een dropdown een type. Kanaal, titel en beschrijving zijn optioneel.
Sluit het ticket met een bevestigingsvraag. Na bevestigen wordt transcript gemaakt en verstuurd, kanaal verdwijnt na 5 sec.
Voegt een gebruiker toe aan het ticket. Die persoon krijgt lees- en schrijftoegang tot het kanaal.
Verwijdert een gebruiker uit het ticket. De eigenaar zelf kan niet verwijderd worden.
Claimt het ticket. Iedereen ziet dat jij het oppakt. Je kunt geen al geclaimed ticket claimen.
Geeft de claim vrij. Admins kunnen ook de claim van iemand anders vrijgeven.
Hernoemt het kanaal. Spaties en speciale tekens worden automatisch koppeltekens.
Stelt de prioriteit in. De kleur van het embed past mee aan.
Vergrendelt het ticket voor de gebruiker — nog zichtbaar, maar kan niet meer typen. Zelfde command ontgrendelt.
Verplaatst het kanaal naar een andere categorie. Handig voor workflows met aparte categorieën per status.
Voegt een interne notitie toe aan de ticketdata. Alleen zichtbaar voor staffleden.
Genereert een HTML transcript van het ticket en stuurt het direct naar jou in DM.
Toont ticketinfo: eigenaar, type, status, prioriteit, claimer en aanmaakdatum.
Statistieken: totaal, open, gesloten en per type.
Lijst van open tickets. Staff ziet alles of gefilterd op gebruiker. Gewone gebruikers alleen hun eigen.
Verwijdert het kanaal direct zonder transcript. Gebruik alleen als het echt nodig is — berichtgeschiedenis gaat verloren.
Commands — Moderatie
Bant een gebruiker. Stuurt eerst een DM met de reden. Met dagen geef je op hoeveel dagen berichtgeschiedenis verwijderd wordt (0–7). Actie wordt gelogd.
Verwijdert de ban op basis van Discord ID. ID terug te vinden in de banlijst. Actie wordt gelogd.
Toont de banlijst met gebruikersnaam, ID en reden. Maximaal 20 per keer.
Kickt een gebruiker. Stuurt een DM met de reden. Actie wordt gelogd.
Timeout. Keuze: 1 min, 5 min, 10 min, 1 uur, 1 dag, 1 week. Gebruiker krijgt DM en kan niet chatten of reageren. Actie wordt gelogd.
Verwijdert de timeout zodat de gebruiker weer kan chatten.
Geeft een waarschuwing. Opgeslagen, gebruiker krijgt DM. Actie wordt gelogd.
Toont waarschuwingen met datum, reden en wie het gaf. Zonder gebruiker je eigen. Moderators kunnen van iedereen opvragen.
Verwijdert waarschuwingen. Met ID alleen die ene. Zonder ID alle waarschuwingen van die gebruiker.
Verwijdert meerdere berichten tegelijk, max 100. Optioneel filteren op gebruiker. Berichten ouder dan 14 dagen zijn niet verwijderbaar.
Slowmode aan of uit. Gebruikers wachten X seconden per bericht. Op 0 zetten schakelt het uit.
Vergrendelt of ontgrendelt een kanaal voor iedereen. Er wordt automatisch een bericht geplaatst met de reden.
Rol toevoegen of verwijderen van een gebruiker. Werkt niet met door integraties beheerde rollen.
Wijzigt de bijnaam. Leeg laten herstelt de gewone gebruikersnaam.
DM namens de server in een embed. Als de gebruiker DMs heeft uitgeschakeld krijg je een melding.
Commands — Admin
Opent een formulier voor titel en tekst. Stuurt een opgemaakte embed in het kanaal. Kleur in hex, optioneel ping.
Verandert activiteitsstatus. Keuze: Speelt, Luistert naar, Kijkt naar, Streamt. Status: Online, Idle, DND of Invisible.
Werkt de naam van het voice ledenaantal-kanaal handmatig bij. Normaal gaat dit automatisch bij join en leave.
Giveaway met timer en deelnemen-knop. Deelnemersaantal live bijgehouden. Winnaars willekeurig gekozen na afloop. Één deelname per persoon.
Poll met 2 tot 4 opties. Resultaten live bijgewerkt met balkjes en percentages. Knoppen uitgeschakeld na afloop.
Laat de bot een bericht sturen. Zonder kanaal het huidige kanaal.
Lijst van alle leden met een bepaalde rol, met gebruikersnaam en ID.
Commands — Utility
Roundtrip latency en API latency van de verbinding met Discord.
ID, bijnaam, accountaanmaakdatum, toetreedatum, rollen en badges. Zonder gebruiker je eigen info.
Naam, ID, eigenaar, aanmaakdatum, ledenaantal, boosts, boost level, kanalen, rollen en verificatieniveau.
Avatar in hoge resolutie. Als de gebruiker ook een serveravatar heeft worden beide getoond, met downloadlink.
Naam, ID, kleur, positie, aanmaakdatum, apart weergeven, mentionable, ledenaantal en permissies.
Naam, ID, type, categorie, NSFW status, slowmode en onderwerp. Zonder kanaal het huidige.
Uptime, ping, servers, leden, commands, Node.js versie, geheugengebruik en platform.
Naam, ID, geanimeerd of niet, aanmaakdatum en de exacte code om de emoji te gebruiken.
Invite links en gebruik. Zonder gebruiker je eigen. Moderators kunnen van iedereen opvragen.
Laatste verwijderde bericht in het kanaal met auteur en tijdstip. Werkt alleen terwijl de bot online was.
Herinnering via DM. Notatie: 10m min, 2h uur, 1d dag. Max 7 dagen. Bij uitgeschakelde DMs wordt het in het kanaal gestuurd.
Interactief helpmenu met dropdown. Kies een categorie voor alle commands met uitleg. Sluit na 2 minuten.
Permissieniveaus
Wie admin of mod is wordt bepaald door de rol-IDs in de config. Iemand met de Administrator permissie in Discord telt altijd als admin.
Tickets beheren: claimen, sluiten, toevoegen, verwijderen, prioriteit, notities, transcripts, vergrendelen, verplaatsen, hernoemen.
Alles van Support plus: ban, kick, mute, warn, purge, slowmode, lockdown, rollen, bijnamen en DMs sturen.
Toegang tot alles: aankondigingen, giveaways, bot status, ledencount en tickets forceren verwijderen.
Bestandsstructuur
Dataopslag
De bot slaat alles lokaal op als bestanden — geen database nodig.
Ticketdata — data/tickets/misc/ als JSON bestanden. Elk ticket heeft zijn eigen bestand: naam, eigenaar-ID, type, status, prioriteit, claimer, aanmaakdatum, sluitdatum en notities.
Transcripts — data/tickets/logs/{userID}/{ticketnaam}/index.html. Te openen in een browser. Bevatten alle berichten met avatars, namen, timestamps en bijlagen.
Waarschuwingen — data/warnings.json. Per server en gebruiker een lijst met reden, datum en wie het gaf.
data/ map als je de geschiedenis wilt bewaren.FAQ
Voer node src/deploy.js opnieuw uit. Soms duurt het een paar minuten voor Discord ze doorvoert. Controleer ook of CLIENT_ID en GUILD_ID correct zijn.
Controleer of de bot online is, de token klopt en de benodigde intents aanstaan in de Developer Portal.
Controleer of TICKET_CATEGORY_ID klopt en of de bot de permissie heeft om kanalen aan te maken (Kanalen beheren).
Controleer TICKET_TRANSCRIPT_CHANNEL_ID en of de bot schrijftoegang heeft tot dat kanaal.
Controleer of MEMBER_COUNT_CHANNEL_ID een voice kanaal is en of de bot de naam mag wijzigen.
Maak een nieuw .js bestand in de juiste map onder src/commands/, kopieer de structuur van een bestaand command en draai node src/deploy.js.
Verander Routes.applicationGuildCommands naar Routes.applicationCommands in src/deploy.js. Globale registratie kan tot een uur duren.
Notify / Tester
Test alle notificatie-types van lxrs-notify live in je browser. Klik op een preset of stel je eigen notify in.
Stuur 3 notifies tegelijk om stacking te testen.
Deze bot is nog niet uitgebracht. Documentatie wordt toegevoegd zodra de bot beschikbaar is.