اليوم في 20:46
صاحب الموضوع
İnternet üzerinde sürekli ve stabil çalışan Discord botları geliştirmek, özellikle ücretsiz barındırma ortamlarında karşılaşılan en büyük zorluklardan biridir. Bu nedenle, botların "keep-alive" mantığıyla sürekli aktif kalması ve aynı zamanda kullanıcıların göndereceği görselleri otomatik olarak indirme ve işleme yeteneği, moderasyon otomasyonunu büyük ölçüde kolaylaştırır. Bu makalede, Python dilinde basit ve etkili bir yapıya sahip, PM ile sürekli çalıştırılan ve görsel işleme yeteneği olan Discord botunun temel yapısını anlatacağım.
İlk olarak, botun sürekli çalışmasını sağlamak için genellikle "ping" veya "heartbeat" mekanizmaları kullanılır. Bu, host'un zaman zaman botu "uyandırması" anlamına gelir ve özellikle ücretsiz barındırma servislerinde botun kapanmasını engeller. Bir diğer önemli konu ise, kullanıcılardan gelen görsellerin otomatik indirilmesi ve işlenmesi. Bunun için, mesajlarda görsel olup olmadığını tespit edip, görselleri belirli dizinlere kaydedip, ardından OpenCV veya PIL gibi kütüphanelerle temel görüntü işleme yapabiliriz.
Örnek olarak, aşağıdaki kod parçacığında, Discord.py kütüphanesi kullanılarak, mesajlar içinde görsel tespiti, otomatik indirme ve sürekli aktif kalma mekanizması anlatılmaktadır:
12345678910111213141516171819202122232425262728293031323334353637383940
import discord
import asyncio
import os
import aiohttp
intents = discord.Intents.all()
client = discord.Client(intents=intents)
[b]Sürekli çalışma için basit bir keep-alive fonksiyonu[/b]
async def keep_alive():
while True:
await asyncio.sleep(300) # 5 dakika aralıkla çalışır
# Burada herhangi bir API çağrısı veya ping işlemi yapılabilir
@client.event
async def on_ready():
print(f"{client.user} aktif durumda!")
asyncio.create_task(keep_alive())
@client.event
async def on_message(message):
if message.author == client.user:
return
# Görsel varsa, indirme ve işleme
for attachment in message.attachments:
if any(attachment.filename.lower().endswith(ext) for ext in ['.png', '.jpg', '.jpeg', '.gif']):
save_path = f"images/{attachment.filename}"
os.makedirs("images", exist_ok=True)
async with aiohttp.ClientSession() as session:
async with session.get(attachment.url) as resp:
if resp.status == 200:
with open(save_path, 'wb') as f:
f.write(await resp.read())
# İşlem yapılabilir: OpenCV ile görsel işleme
print(f"Görsel kaydedildi: {save_path}")
[b]Bot tokeninizi buraya girin[/b]
client.run('BOT_TOKENİNİZ')
Burada dikkat edilmesi gerekenler:
- keep_alive fonksiyonu, belirli aralıklarla aktif kalmayı sağlar.
- on_message eventi, gelen mesajlarda görsel olup olmadığını kontrol eder ve indirme işlemini gerçekleştirir.
- Görsel işleme kısmı, ihtiyaçlara göre genişletilebilir; örneğin yüz tanıma, filtreleme veya boyutlandırma gibi.
Son olarak, bu yapıyı daha stabil ve güvenilir hale getirmek için, uygun hosting ortamı ve hata yönetimi de önemlidir. Ayrıca, görsel işleme algoritmalarını kendi moderasyon kurallarınıza göre uyarlayabilirsiniz.
Bu temel yapı, moderasyon ve otomasyon süreçlerini kolayca entegre etmenize imkan sağlar.