Komplett Discord Bot Guide
Del 3: Grunnleggende Bot Struktur
📋 Innholdsfortegnelse
- Hva lærer vi i denne delen?
- Steg 1: Forstå Bot Arkitektur
- Steg 2: Lage index.js - Hovedfilen
- 🔍 Kode Forklaring - Linje for Linje
- Linje 1-2: Importere biblioteker
- Linje 4-12: Lage bot klient
- Linje 15: Command Collection
- Linje 17-26: Ready Event
- Linje 28-36: Meldings Event
- Linje 38: Start Bot
- ⚡ Steg 3: Teste Boten
- 🛠️ Steg 4: Forbedre Bot Strukturen
- 🧪 Steg 5: Test Alt Sammen
- 📁 Steg 6: Organisere Koden (Forberedelse)
- ✅ Oppsummering
- 🚨 Vanlige Problemer
- 🔥 Bonus: Gjør Boten Din Personlig
- 🚀 Neste Steg
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?
- Forstå bot arkitektur - Hvordan Discord bots fungerer
- Lage index.js - Hoved bot filen
- Koble til Discord - Få boten online
- Event system grunnlag - Hvordan boten reagerer på ting
- 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.
// 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
require('dotenv').config();
const { Client, GatewayIntentBits, Collection } = require('discord.js');
dotenvlar oss lese hemmeligheter fra .env filendiscord.jser hovedbiblioteket for å lage Discord bots- Vi henter ut spesifikke deler vi trenger
Linje 4-12: Lage bot klient
const client = new Client({
intents: [...]
});
Intents forteller Discord hva boten din trenger tilgang til:
Guilds= Se servere boten er iGuildMessages= Se når meldinger sendesMessageContent= Lese innholdet i meldingerGuildMembers= Se server medlemmerGuildPresences= Se hvem som er online/offline
Linje 15: Command Collection
client.commands = new Collection();
Dette er hvor vi lagrer alle bot commandsene senere (del 4).
Linje 17-26: Ready Event
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
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
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:
node index.js
Du skal se:
🤖 Bot er online!
📋 Logget inn som: MinBot#1234
🏠 Bot er i 1 servere
3.2: Test i Discord
- Gå til Discord serveren der boten er
- I en kanal, skriv:
!hei - 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:
// 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:
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:
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
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:
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:
const config = require('./config.js');
Og bytt ut hardkodede verdier:
// 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
- Sjekk token: Er BOT_TOKEN riktig i .env?
- Sjekk intents: Er alle nødvendige intents skrudd på i Developer Portal?
- Sjekk internett: Er du koblet til internett?
Bot svarer ikke på kommandoer
- Sjekk permissions: Kan boten se meldinger i kanalen?
- Sjekk stavemåte: Er kommandoen skrevet riktig?
- Sjekk terminal: Er det feilmeldinger der?
"Cannot find module" feil
- Installer pakker: Kjør
npm install - Sjekk mappenavn: Er du i riktig mappe?
🔥 Bonus: Gjør Boten Din Personlig
Prøv å endre disse tingene for å gjøre boten mer personlig:
// 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?