Discord botunu yalnızca Node.js ile yazmak zorunda değilsin — Python ve discord.py kütüphanesi de son derece güçlü ve okunaklı bir seçenek. Python ile Discord bot yapımı, özellikle veri işleme ve otomasyon ağırlıklı botlarda çok rahattır. Bu rehberde discord.py 2.x ile sıfırdan bir bot kurup, oyun veritabanına bağlanan bir komut yazacağız.
Gereksinimler
- Python 3.10+.
pip install discord.py aiomysql.- Developer Portal'da bot + token; sunucuya
botveapplications.commandsyetkileriyle davet.
İlk bot: /ping komutu
discord.py 2.x'te slash komutları komut ağacı (command tree) ile yönetilir. bot.tree.sync() komutları Discord'a yükler:
import discord
from discord.ext import commands
intents = discord.Intents.default()
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
await bot.tree.sync() # slash komutlarini Discord'a yukle
print(f"Giris yapildi: {bot.user}")
@bot.tree.command(name="ping", description="Pong ile yanitlar")
async def ping(interaction: discord.Interaction):
await interaction.response.send_message("Pong! 🏓")
bot.run("TOKEN")
intents, botun hangi olayları alacağını belirler. Üye listesi veya mesaj içeriği gibi ayrıcalıklı intent'leri Developer Portal'dan açman gerekir.
Oyun veritabanına bağlanmak
Asenkron bir bot, veritabanını da asenkron sorgulamalı ki diğer komutları bloklamasın. aiomysql ile oyuncunun seviyesini çeken komut:
import aiomysql
pool = await aiomysql.create_pool(
host="localhost", user="bot", password="***", db="player"
)
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute(
"SELECT level FROM player WHERE name = %s", (name,)
)
row = await cur.fetchone()
await interaction.response.send_message(f"{name} seviye {row[0]}")
Burada %s bir parametre yer tutucusudur; kullanıcı girdisini asla doğrudan sorguya yazma — bu, SQL injection'ı önler.
Node.js'ten farkı
discord.py senkron-görünümlü async/await yapısıyla okunaklıdır ve Python'un zengin veri ekosistemine (pandas, requests, ML kütüphaneleri) doğrudan erişir. Node.js ise olay tabanlı, yüksek eşzamanlı işlerde parlar. Doğru seçim, botun ne yaptığına bağlı.
Botu sürekli çalıştırmak
Botu bir VPS'te systemd servisi veya pm2'nin Python desteğiyle 7/24 çalıştırabilirsin. Çökme durumunda otomatik yeniden başlatma ve log tutma şarttır.
Sık Sorulan Sorular
discord.py hâlâ geliştiriliyor mu?
Evet. 2.x sürümüyle aktif geliştiriliyor ve slash komutlarını (app_commands) tam destekliyor.
Slash komutlarım görünmüyor, neden?
Genellikle bot.tree.sync() çağrılmamıştır ya da global komutların yayılması beklenir. Geliştirmede tek sunucuya senkronlamak anında sonuç verir.
Aynı botta hem Python hem Node.js kullanabilir miyim?
Tek bir bot tek dilde yazılır, ama farklı botları farklı dillerde yazıp aynı veritabanını paylaştırabilirsin.
Python tabanlı bir bot mu istiyorsun? Oyun verisini işleyen, otomasyon yapan botlar yazıyorum — benimle iletişime geç.