Del 3 av 10 Moderat

Komplett Discord Bot Guide

Del 3: Grunnleggende Bot Struktur

Fremgang: 3/10 (30%)

Del 3: Grunnleggende Bot Struktur

Nå skal vi skrive vår første kode og få boten online! Dette er hvor magien skjer - vi skal se boten komme til liv i Discord.

Hva lærer vi i denne delen?

  1. Forstå bot arkitektur - Hvordan Discord bots fungerer
  2. Lage index.js - Hoved bot filen
  3. Koble til Discord - Få boten online
  4. Event system grunnlag - Hvordan boten reagerer på ting
  5. Teste at alt fungerer - Se boten i aksjon

Steg 1: Forstå Bot Arkitektur

La oss først forstå hvordan en Discord bot fungerer:

Discord Server ←→ Discord API ←→ Din Bot ←→ Databasen din
      ↑                                ↑
   Brukere sender                  Bot svarer med  
   meldinger/commands              meldinger/actions

Enkelt forklart:

  • Discord API = Telefonlinjen mellom Discord og boten din
  • Bot Token = ID-kort som beviser hvem boten din er
  • Events = Ting som skjer (noen kommer inn, sender melding, etc.)
  • Commands = Ting brukere kan be boten om å gjøre

Steg 2: Lage index.js - Hovedfilen

Åpne index.js filen i VS Code og skriv inn denne koden. Ikke bekymre deg om du ikke forstår alt - vi forklarer hver linje.

javascript
// Importere biblioteker vi trenger
require('dotenv').config(); // For å lese .env filen
const { Client, GatewayIntentBits, Collection } = require('discord.js');

// Lage en ny bot "klient"
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,              // For å se servere
        GatewayIntentBits.GuildMessages,       // For å se meldinger  
        GatewayIntentBits.MessageContent,      // For å lese meldingsinnhold
        GatewayIntentBits.GuildMembers,        // For å se server medlemmer
        GatewayIntentBits.GuildPresences       // For å se hvem som er online
    ]
});

// Her kommer vi til å lagre commands senere
client.commands = new Collection();

// Event: Når boten starter (blir klar)
client.once('ready', () => {
    console.log('🤖 Bot er online!');
    console.log(`📋 Logget inn som: ${client.user.tag}`);
    console.log(`🏠 Bot er i ${client.guilds.cache.size} servere`);
    
    // Sett bot status (det som står under navnet)
    client.user.setPresence({
        activities: [{ name: 'Lærer Discord.js!' }],
        status: 'online'
    });
});

// Event: Når noen sender en melding
client.on('messageCreate', (message) => {
    // Ignorer meldinger fra andre bots
    if (message.author.bot) return;
    
    // Enkel kommando for testing
    if (message.content.toLowerCase() === '!hei') {
        message.reply('Hei der! 👋 Jeg er din nye Discord bot!');
    }
});

// Start boten med token fra .env filen
client.login(process.env.BOT_TOKEN);

🔍 Kode Forklaring - Linje for Linje

La oss forstå hva hver del gjør:

Linje 1-2: Importere biblioteker

javascript
require('dotenv').config();
const { Client, GatewayIntentBits, Collection } = require('discord.js');
  • dotenv lar oss lese hemmeligheter fra .env filen
  • discord.js er hovedbiblioteket for å lage Discord bots
  • Vi henter ut spesifikke deler vi trenger

Linje 4-12: Lage bot klient

javascript
const client = new Client({
    intents: [...]
});

Intents forteller Discord hva boten din trenger tilgang til:

  • Guilds = Se servere boten er i
  • GuildMessages = Se når meldinger sendes
  • MessageContent = Lese innholdet i meldinger
  • GuildMembers = Se server medlemmer
  • GuildPresences = Se hvem som er online/offline

Linje 15: Command Collection

javascript
client.commands = new Collection();

Dette er hvor vi lagrer alle bot commandsene senere (del 4).

Linje 17-26: Ready Event

javascript
client.once('ready', () => {
    console.log('🤖 Bot er online!');
    // ... mer kode
});

Dette kjører EN gang når boten starter. Som å si "Hei verden!" når boten våkner.

Linje 28-36: Meldings Event

javascript
client.on('messageCreate', (message) => {
    // Reagerer på alle meldinger
});

Dette kjører hver gang noen sender en melding i en kanal boten kan se.

Linje 38: Start Bot

javascript
client.login(process.env.BOT_TOKEN);

Dette starter boten med token fra .env filen.

⚡ Steg 3: Teste Boten

La oss se om boten fungerer!

3.1: Kjør Boten

I VS Code terminalen, skriv:

bash
node index.js

Du skal se:

🤖 Bot er online!
📋 Logget inn som: MinBot#1234
🏠 Bot er i 1 servere

3.2: Test i Discord

  1. Gå til Discord serveren der boten er
  2. I en kanal, skriv: !hei
  3. Boten skal svare: "Hei der! 👋 Jeg er din nye Discord bot!"

GRATULERER! 🎉 Din første Discord bot fungerer!

3.3: Stoppe Boten

For å stoppe boten, trykk Ctrl+C i terminalen.

🛠️ Steg 4: Forbedre Bot Strukturen

Nå skal vi gjøre boten litt smartere og mer profesjonell.

4.1: Legg til Feilhåndtering

Legg til dette under client.login() linjen:

javascript
// Håndter feil som kan oppstå
process.on('unhandledRejection', error => {
    console.error('❌ Uventet feil:', error);
});

client.on('error', error => {
    console.error('❌ Discord.js feil:', error);
});

Hvorfor? Dette forhindrer at boten krasjer hvis noe går galt.

4.2: Legg til Mer Logging

Bytt ut ready eventet med dette:

javascript
client.once('ready', () => {
    console.log('='.repeat(40));
    console.log('🤖 BOT ER ONLINE!');
    console.log('='.repeat(40));
    console.log(`📋 Bot navn: ${client.user.tag}`);
    console.log(`🆔 Bot ID: ${client.user.id}`);
    console.log(`🏠 Servere: ${client.guilds.cache.size}`);
    console.log(`👥 Brukere: ${client.users.cache.size}`);
    console.log('='.repeat(40));
    
    // Sett bot aktivitet
    client.user.setPresence({
        activities: [{ 
            name: `${client.guilds.cache.size} servere | !hei for hjelp`,
            type: 'WATCHING'
        }],
        status: 'online'
    });
});

4.3: Flere Test Commands

Legg til flere kommandoer i messageCreate eventet:

javascript
client.on('messageCreate', (message) => {
    // Ignorer bots
    if (message.author.bot) return;
    
    // Kommando: !hei
    if (message.content.toLowerCase() === '!hei') {
        message.reply('Hei der! 👋 Jeg er din nye Discord bot!');
    }
    
    // Kommando: !ping  
    if (message.content.toLowerCase() === '!ping') {
        const ping = Date.now() - message.createdTimestamp;
        message.reply(`🏓 Pong! Responstid: ${Math.abs(ping)}ms`);
    }
    
    // Kommando: !server
    if (message.content.toLowerCase() === '!server') {
        const serverInfo = `
📊 **${message.guild.name}** Server Info:
👥 Medlemmer: ${message.guild.memberCount}
📅 Opprettet: ${message.guild.createdAt.toDateString()}
🎯 ID: ${message.guild.id}
        `;
        message.reply(serverInfo);
    }
    
    // Kommando: !bruker
    if (message.content.toLowerCase() === '!bruker') {
        const userInfo = `
👤 **${message.author.username}** Bruker Info:
🆔 ID: ${message.author.id} 
📅 Konto opprettet: ${message.author.createdAt.toDateString()}
🏷️ Tag: ${message.author.tag}
        `;
        message.reply(userInfo);
    }
});

🧪 Steg 5: Test Alt Sammen

5.1: Start Bot Med Ny Kode

bash
node index.js

Du skal nå se mye mer informasjon når boten starter!

5.2: Test Alle Commands

I Discord, prøv:

  • !hei - Grunnleggende hilsen
  • !ping - Sjekk responstid
  • !server - Server informasjon
  • !bruker - Din bruker informasjon

Alt fungerer? Perfekt! 🎉

📁 Steg 6: Organisere Koden (Forberedelse)

Nå skal vi forberede oss på å lage en mer organisert struktur. Dette gjør det lettere å legge til nye funksjoner senere.

6.1: Lag config.js

Lag en ny fil config.js:

javascript
module.exports = {
    // Bot innstillinger
    prefix: '!',
    botName: 'MinBot',
    version: '1.0.0',
    
    // Farge koder for embeds (senere)
    colors: {
        primary: 0x3498db,    // Blå
        success: 0x2ecc71,    // Grønn  
        warning: 0xf39c12,    // Gul
        error: 0xe74c3c       // Rød
    },
    
    // Emojis
    emojis: {
        success: '✅',
        error: '❌', 
        loading: '⏳',
        info: 'ℹ️'
    }
};

6.2: Oppdater index.js

Legg til øverst i index.js:

javascript
const config = require('./config.js');

Og bytt ut hardkodede verdier:

javascript
// I stedenfor: message.content.toLowerCase() === '!hei'
if (message.content.toLowerCase() === `${config.prefix}hei`) {
    // ...
}

✅ Oppsummering

Hva har vi lært:

  • ✅ Hvordan Discord bots fungerer
  • ✅ Lage hovedbot fil (index.js)
  • ✅ Koble til Discord API
  • ✅ Håndtere events (ready, messageCreate)
  • ✅ Lage enkle kommandoer
  • ✅ Organisere kode i konfigurasjonsfiler
  • ✅ Feilhåndtering og logging

Hva har vi bygget:

  • 🤖 En fungerende Discord bot
  • 📝 4 forskjellige kommandoer
  • 🔧 Grunnleggende feilhåndtering
  • 📊 Informativ logging
  • ⚙️ Konfigurasjonssystem

🚨 Vanlige Problemer

Bot går ikke online

  1. Sjekk token: Er BOT_TOKEN riktig i .env?
  2. Sjekk intents: Er alle nødvendige intents skrudd på i Developer Portal?
  3. Sjekk internett: Er du koblet til internett?

Bot svarer ikke på kommandoer

  1. Sjekk permissions: Kan boten se meldinger i kanalen?
  2. Sjekk stavemåte: Er kommandoen skrevet riktig?
  3. Sjekk terminal: Er det feilmeldinger der?

"Cannot find module" feil

  1. Installer pakker: Kjør npm install
  2. Sjekk mappenavn: Er du i riktig mappe?

🔥 Bonus: Gjør Boten Din Personlig

Prøv å endre disse tingene for å gjøre boten mer personlig:

javascript
// Endre bot status
client.user.setPresence({
    activities: [{ name: 'DITT EGET NAVN HER!' }],
    status: 'dnd' // 'online', 'idle', 'dnd', 'invisible'
});

// Legg til egen kommando
if (message.content.toLowerCase() === '!minkommando') {
    message.reply('Dette er MIN personlige kommando! 🚀');
}

🚀 Neste Steg

I del 4 skal vi lære om moderne Slash Commands! Dette er den nye måten å lage Discord bot kommandoer på. Vi lærer:

  • Hvordan slash commands fungerer
  • Lage ditt første slash command
  • Command registration system
  • Parameters og options
  • Professional command structure

Klar for å lære den moderne måten?