Sade sözdizimi ve güçlü kütüphaneleriyle Python, Discord botu geliştirmek için JavaScript'e harika bir alternatiftir.
Node.js ve discord.js ikilisi çok popüler olsa da, makine öğrenmesi, veri analizi veya web kazıma (web scraping) gibi işlemleri botunuza entegre etmek istiyorsanız Python kullanmak çok daha mantıklı bir seçim olacaktır. discord.py kütüphanesi, Discord API'sini Pythonik bir yapıyla kullanmanızı sağlar.
1. Kurulum ve Hazırlık
Sisteminizde Python 3.8 veya daha üstü bir sürümün kurulu olması gerekir. Başlamadan önce bağımlılıklarımızı kuralım:
# discord.py kütüphanesini yükle
pip install discord.py
# Çevresel değişkenleri (Token) yönetmek için
pip install python-dotenv
2. Token Güvenliği (.env Kullanımı)
Hiçbir zaman Discord token'ınızı kodun içine doğrudan yazmayın. Proje klasörünüze bir .env dosyası açın:
DISCORD_TOKEN=MTA2Mj...senin_tokenin_buraya...XYZ
3. İlk Botumuzu Kodluyoruz (main.py)
Şimdi main.py adında bir dosya oluşturup temel bot iskeletimizi yazalım:
import discord
from discord.ext import commands
import os
from dotenv import load_dotenv
# .env dosyasını yükle
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
# Intent'leri (izinleri) ayarla
intents = discord.Intents.default()
intents.message_content = True # Mesajları okuma izni
# Prefix (Önek) belirle: "!"
bot = commands.Bot(command_prefix='!', intents=intents)
# Bot hazır olduğunda tetiklenen olay
@bot.event
async def on_ready():
print(f'{bot.user.name} olarak Discorda bağlanıldı!')
print('Bot şu anda aktif.')
bot.run(TOKEN)
4. Basit Komutlar Eklemek
Python'da komut eklemek @bot.command() dekoratörü (decorator) sayesinde çok kolaydır:
@bot.command()
async def merhaba(ctx):
# ctx (context), komutun çağrıldığı yerle ilgili tüm bilgileri içerir
await ctx.send(f'Merhaba {ctx.author.mention}! Nasılsın?')
@bot.command()
async def topla(ctx, sayi1: int, sayi2: int):
# Argümanlar otomatik olarak int (tam sayı) tipine çevrilir
sonuc = sayi1 + sayi2
await ctx.send(f'İşlemin sonucu: **{sonuc}**')
5. Cogs ile Projeyi Parçalara Bölmek (Gelişmiş Mimari)
Botunuz büyüdükçe yüzlerce komutu tek bir dosyada (main.py) tutmak karmaşaya yol açar. Python'un discord.py kütüphanesi, bu sorunu çözmek için Cogs (çarklar/modüller) adı verilen bir sistem sunar.
Örnek bir moderasyon Cog'u (moderasyon.py):
import discord
from discord.ext import commands
class Moderasyon(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command()
@commands.has_permissions(kick_members=True)
async def at(self, ctx, uye: discord.Member, *, sebep=None):
await uye.kick(reason=sebep)
await ctx.send(f'{uye.mention} sunucudan atıldı. Sebep: {sebep}')
# Cog'u bota yüklemek için gereken fonksiyon
async def setup(bot):
await bot.add_cog(Moderasyon(bot))
Bu Cog'u ana dosyanızda çağırmak için main.py'ye şu kodu ekleyin:
# async def on_ready() içine ekleyin:
await bot.load_extension('moderasyon')
6. Embed Mesajlar Göndermek
Embed'ler bot mesajlarınızı renklendirir ve yapılandırır:
@bot.command()
async def bilgi(ctx):
embed = discord.Embed(
title="Sunucu Bilgisi",
description="Bu sunucu hakkında temel istatistikler",
color=discord.Color.blue()
)
embed.add_field(name="Üye Sayısı", value=ctx.guild.member_count, inline=False)
embed.add_field(name="Kurucu", value=ctx.guild.owner.mention, inline=False)
embed.set_footer(text="Python Bot Rehberi")
await ctx.send(embed=embed)
Eğer botunuzda yapay zeka cevapları oluşturmak, ChatGPT API kullanmak, görsel işleme (OpenCV) veya grafik çizdirme (Matplotlib) gibi işlemler yapacaksanız Python kesinlikle en iyi dildir. Çok karmaşık verileri çok kısa kodlarla işleyebilirsiniz.
