aslain.dev
0%
← Tüm makaleler

Python ile Discord Botu: discord.py ile Başlangıç Rehberi

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 bot ve applications.commands yetkileriyle 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ç.

Devamı için