Erstellen einesDiscord-Bot ist ein unterhaltsames, praktisches Python-Projekt, das asynchrone Programmierung, APIs und Ereignisbehandlung lehrt. Im Jahr 2026discord.py macht es einfach. In diesem Leitfaden wird ein funktionsfähiger Bot mit Slash-Befehlen, Einbettungen und interaktiven Schaltflächen erstellt und anschließend bereitgestellt.
📋 Table of Contents
Schritt 1: Erstellen Sie eine Discord-Anwendung
- Gehen Sie zum Discord-Entwicklerportal (discord.com/developers)
- Klicken Sie aufNeue Anwendung, benennen Sie Ihren Bot
- Gehen Sie zuBot Klicken Sie im Abschnitt aufBot hinzufügen
- Kopieren Sie dasToken (Halten Sie es geheim – begehen Sie es niemals)
- Aktivieren SieAbsicht des Nachrichteninhalts unter Privileged Gateway Intents
- UnterOAuth2, dann URL-Generator:
botauswählen undapplications.commandsBereiche, wählen Sie Berechtigungen aus und verwenden Sie die generierte URL, um den Bot auf Ihren Server einzuladen
Schritt 2: Einrichtung
pip install discord.py python-dotenv
# Project structure
mybot/
├── bot.py
├── .env
└── requirements.txt
# .env — never commit this
DISCORD_TOKEN=your_bot_token_here
Schritt 3: Einfacher Bot mit Slash-Befehlen
# bot.py
import os
import discord
from discord import app_commands
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
# Sync slash commands with Discord
await bot.tree.sync()
print(f"Logged in as {bot.user}")
# Slash command
@bot.tree.command(name="hello", description="Greet the user")
async def hello(interaction: discord.Interaction):
await interaction.response.send_message(
f"Hello, {interaction.user.mention}!"
)
# Slash command with parameters
@bot.tree.command(name="add", description="Add two numbers")
async def add(interaction: discord.Interaction, a: int, b: int):
await interaction.response.send_message(f"{a} + {b} = {a + b}")
bot.run(os.getenv("DISCORD_TOKEN"))
Schritt 4: Rich Embeds
@bot.tree.command(name="userinfo", description="Show user information")
async def userinfo(interaction: discord.Interaction, member: discord.Member = None):
member = member or interaction.user
embed = discord.Embed(
title=f"User Info: {member.display_name}",
color=discord.Color.blurple()
)
embed.set_thumbnail(url=member.display_avatar.url)
embed.add_field(name="Username", value=str(member), inline=True)
embed.add_field(name="ID", value=member.id, inline=True)
embed.add_field(
name="Joined",
value=member.joined_at.strftime("%Y-%m-%d"),
inline=False
)
embed.set_footer(text="MyBot")
await interaction.response.send_message(embed=embed)
Schritt 5: Interaktive Schaltflächen
class ConfirmView(discord.ui.View):
def __init__(self):
super().__init__(timeout=60)
self.value = None
@discord.ui.button(label="Confirm", style=discord.ButtonStyle.green)
async def confirm(self, interaction: discord.Interaction, button: discord.ui.Button):
self.value = True
await interaction.response.send_message("Confirmed!", ephemeral=True)
self.stop()
@discord.ui.button(label="Cancel", style=discord.ButtonStyle.red)
async def cancel(self, interaction: discord.Interaction, button: discord.ui.Button):
self.value = False
await interaction.response.send_message("Cancelled.", ephemeral=True)
self.stop()
@bot.tree.command(name="confirm", description="Ask for confirmation")
async def confirm_cmd(interaction: discord.Interaction):
view = ConfirmView()
await interaction.response.send_message("Are you sure?", view=view)
Schritt 6: Ereignisbehandlung
# Welcome new members
@bot.event
async def on_member_join(member):
channel = member.guild.system_channel
if channel:
await channel.send(f"Welcome {member.mention} to the server!")
# React to messages
@bot.event
async def on_message(message):
if message.author == bot.user:
return # ignore the bot's own messages
if "hello bot" in message.content.lower():
await message.channel.send("Hello there!")
await bot.process_commands(message) # keep prefix commands working
Schritt 7: Stellen Sie den Bot bereit
# Bots need to run 24/7. Deploy to a small VPS or Railway/Fly.io.
# On a VPS with systemd — /etc/systemd/system/mybot.service
[Unit]
Description=Discord Bot
After=network.target
[Service]
WorkingDirectory=/opt/mybot
ExecStart=/opt/mybot/venv/bin/python bot.py
Restart=always
EnvironmentFile=/opt/mybot/.env
[Install]
WantedBy=multi-user.target
# Enable and start
sudo systemctl enable mybot
sudo systemctl start mybot
Häufig gestellte Fragen
F: Slash-Befehle vs. Präfix-Befehle?
A: Slash-Befehle (/command) sind der moderne Standard – Discord zeigt sie in einem Menü mit Parameterhinweisen an. Präfixbefehle (!command) funktionieren weiterhin, sind aber veraltet. Verwenden Sie Slash-Befehle für neue Bots.
F: Warum werden meine Slash-Befehle nicht angezeigt?
A: Sie müssenbot.tree.sync()aufrufen um sie bei Discord zu registrieren (durchgeführt in on_ready oben). Die Verbreitung der globalen Synchronisierung kann bis zu einer Stunde dauern. Zum sofortigen Testen mit einer bestimmten Gilde synchronisieren.
F: Wie halte ich mein Bot-Token sicher?
A: Speichern Sie es in einem.env Datei (gitignored), niemals fest codieren und niemals festschreiben. Wenn es durchgesickert ist, generieren Sie es sofort im Entwicklerportal neu – ein durchgesickertes Token ermöglicht es jedem, Ihren Bot zu kontrollieren.
F: Wo soll ich meinen Bot kostenlos/günstig hosten?
A: Railway und Fly.io verfügen über kostenlose/günstige Tarife. Ein VPS für 4–6 $/Monat (Hetzner, Contabo) mit systemd ist zuverlässig und günstig. Vermeiden Sie kostenlose Stufen, die bei Inaktivität schlafen – Bots müssen kontinuierlich ausgeführt werden.
F: Wie füge ich meinem Bot eine Datenbank hinzu?
A: SQLite für einfache Bots (über aiosqlite für asynchron) oder PostgreSQL für größere (asyncpg). Speichern Sie serverspezifische Einstellungen, Benutzerdaten oder Befehlsstatus. Verwenden Sie immer asynchrone Datenbankbibliotheken, um eine Blockierung des Bots zu vermeiden.
Fazit
Das Erstellen eines Discord-Bots mit Python ist ein zugängliches Projekt, das asynchrone Programmierung und API-Integration lehrt. Dasdiscord.py Die Bibliothek kümmert sich um die schwierigen Teile – Sie definieren Schrägstrichbefehle, umfangreiche Einbettungen und interaktive Schaltflächen mit klaren Dekoratoren. Sobald Ihr Bot lokal funktioniert, stellen Sie ihn mit systemd (oder Railway/Fly.io) auf einem kleinen VPS bereit, damit er rund um die Uhr läuft. Fügen Sie von hier aus eine Datenbank, weitere Befehle und Ereignishandler hinzu, um Ihren Bot an die Bedürfnisse Ihrer Community anzupassen.
🔗 Share this article
✍️ Leave a Comment