Bir nextcord botunu 24/7 barındırmak için onu bilgisayarınızda değil, hep açık kalan bir makinede çalıştırın: kendiniz barındırıyorsanız systemd servisli bir Linux VPS, ya da kodunuzu yüklediğiniz, token’ı yapıştırdığınız ve Başlat’a bastığınız PlayNHost Discord bot barındırma üzerinde bir bot planı (ayda US$1,99’dan başlayan fiyatlarla). Testimizde nextcord 3.2.0 kullanan bir bot yaklaşık 47 MB bellek kullandı ve başlatıldıktan yaklaşık 1,0 saniye sonra Discord’a ulaştı. Kontrol edeceğiniz ilk şey: nextcord 3, Python 3.12 veya daha yenisini gerektirir. PlayNHost’taki adımlar:
- Discord bot barındırma sayfasında bir planda Sunucu oluştur’a tıklayın. Sipariş penceresinde Botunuz hangi platform için? sorusuna Discord yanıtını verin ve Python’u seçin.
- Sunucunuzu panelde açın. Genel bakış sayfasındaki Botunuzu kurun kartı Discord’a bağlan adımında açılır. İlk adımı olan Ne çalışır, Bu bot Python Bot çalıştırır. demelidir; kontrol etmek için bu adıma tıklayın, ardından Devam’a basın.
- Discord’a bağlan adımında token’ınızı Bot token’ınızı yapıştırın alanına yapıştırın, Bağlan’a tıklayın, ardından Evet, devam’a basın.
- İzinler adımında, Kodum bunu kullanıyor kutusunu yalnızca kodunuzun istediği ayrıcalıklı intent’ler için işaretleyin (aşağıdaki bot hiçbirine ihtiyaç duymaz), Bir Discord sunucusuna ekle’ye tıklayın, ardından Devam’a basın.
- Kodunuz adımında Dosya yükle’ye tıklayın ve
bot.pyilerequirements.txtdosyasını (içindenextcordyazmalı) yükleyin, ya da Git’i bağla’ya tıklayın. - Bot sayfasında, Kod bölmesinde, Çalışma ortamı’nı Python 3.12 (recommended), 3.13 veya 3.14 olarak bırakın, Giriş dosyası
bot.pydeğilse onu ayarlayın ve Kaydet’e tıklayın. - Botu başlat’a tıklayın ve Console’u izleyin. Botunuz
Logged in as ...yazdırdığında kart Botunuz Discord’da çevrimiçi. der.
Genel Python adımları (paketler, konsol satırları) Python Discord botu nasıl barındırılır yazısındadır. Bu sayfa nextcord’da farklı olan kısımları kapsar.
Neyi ölçtük
Her Python Discord kütüphanesini kendi sunucularımızda, bir bot planının kullandığı aynı Python 3.12 kurulumuyla ve 1 GB bellek sınırıyla çalıştırdık:
| Kütüphane | Sürüm | Boştaki bellek | Başlangıçtan Discord’un yanıtına |
|---|---|---|---|
| nextcord | 3.2.0 | 47 MB | 1,0 sn |
| discord.py | 2.7.1 | 48 MB | 1,0 sn |
| Pycord | 2.8.1 | 51 MB | 1,1 sn |
| disnake | 2.12.2 | 47 MB | 0,9 sn |
| hikari | 2.7.0 | 61 MB | 1,3 sn |
| Yalnızca Python | 3.12 | 9 MB |
Yöntem: kütüphaneyi yükleyen ve sahte bir token’la giriş yapan en küçük program, sunucularımızın kurduğu şekilde kurulmuş. Bellek, Discord token’ı reddettikten 15 saniye sonra sürecin tuttuğu miktardır; başlangıç süresi ise başlatmadan bu yanıta kadar geçen süredir, yani Discord’a bir gidiş geliş içerir. Her rakam, bir ısınma çalıştırmasından sonraki üç çalıştırmanın ortancasıdır. Bu, tabandır: bağlanmış, sunuculara katılmış ve üyeleri önbelleğe almış bir bot daha fazlasını kullanır; ne kadar fazla olduğu bota bağlıdır.
Plan için anlamı: en küçük nextcord botu 0,5 GB’lık STARTER planının küçük bir kısmını kullanır. Planı kütüphaneye göre değil, kendi botunuzun bellekte tuttuklarına göre seçin.
En küçük nextcord botu
Bir slash komutuyla /ping’e yanıt verir ve bir hazır satırı yazdırır. Token’ı DISCORD_TOKEN’dan okur; bu, panelin kodunuza verdiği addır.
requirements.txt
nextcord>=3.2,<4
bot.py
import logging
import os
import nextcord
from nextcord.ext import commands
logging.basicConfig(level=logging.INFO)
bot = commands.Bot()
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}")
@bot.slash_command(description="Check that the bot answers")
async def ping(interaction: nextcord.Interaction):
await interaction.send("Pong!")
bot.run(os.environ["DISCORD_TOKEN"])
requirements.txt içindeki sürüm aralığı bilerek konmuştur: çok eski bir Python’da pip, eski bir nextcord’u sessizce kurmak yerine hatayla durur (aşağıya bakın). commands.Bot() slash komutları için önek gerektirmez. nextcord, her bağlandığında /ping’i Discord’a kendisi kaydeder. Logged in as satırı, Genel bakış sayfasındaki rozeti Discord’da çevrimiçi durumuna getirir.
Token yanlışsa
Discord token’ı reddettiğinde nextcord şu hatayı verir (test botumuzun yazdırdığı metin):
LoginFailure: Improper token has been passed.
bot.run() ile bir traceback nextcord.errors.LoginFailure: Improper token has been passed. ile biter ve bot durur. Panel bu satırı okur: rozet Token sorunu gösterir ve bir bant Discord bot token’ınızı kabul etmedi der. Discord Developer Portal’dan yeni bir token alın: uygulamanız, Bot, Reset Token (yalnızca bir kez gösterilir). Bantta Token’ı değiştir’e, ardından Discord bölmesinde Token’ı değiştir’e tıklayın, token’ı yapıştırın ve botu yeniden başlatın. Bkz. Discord botu nasıl oluşturulur ve token’ı nasıl alınır.
Bir sunucu sağlayıcının nextcord hakkında bilmesi gerekenler
- Python 3.12 veya daha yenisi. Her nextcord 3 sürümü Python 3.12 veya sonrasını gerektirir. Python 3.10 veya 3.11’de, yalın bir
nextcordsatırı pip’in Eylül 2023 tarihli 2.6.0 sürümünü kurmasına yol açar; bu, onları destekleyen son sürümdür ve nextcord 3 için yazılmış kod bu durumda çalışmayabilir.nextcord>=3.2,<4ile pip reddeder: konsol pip’in hatasını ve[PlayNHost] pip could not install everything in requirements.txt.satırını gösterir; nextcord sunucuya hiç kurulmadıysa bot ardındanModuleNotFoundError: No module named 'nextcord'ile durur. Çalışma ortamı altında 3.12, 3.13 veya 3.14’ü seçin; değişiklik bir sonraki başlatmada geçerli olur. - İçe aktarma nextcord’dur.
nextcord’u kurarsınız veimport nextcordilefrom nextcord.ext import commandsyazarsınız. discord.py’den geliyorsanız, nextcord’un geçiş kılavuzu discord.py’yi kaldırmanızı ve import’larınızda ve kodunuzdadiscordyerinenextcordyazmanızı söyler. - Tanımadığı komutlar silinir. Bağlanırken nextcord yeni komutları kaydeder, değişenleri günceller ve kodunuzun tanımlamadığı komutları Discord’da siler (
rollout_delete_unknown, varsayılan olarak açık). Aynı botu ikinci bir program kullanıyorsa, örneğin bilgisayarınızdaki bir test kopyası, yalnızca o programın tanımladığı komutlar sunucudaki kopya her bağlandığında silinir. Test için ayrı bir uygulama kullanın. - on_connect’e dokunmayın. Bu kayıt, botun kendi
on_connect’i içinde çalışır.@bot.event async def on_connect()tanımlamak onu değiştirir ve komutlarınız güncellenmez. Başlangıç kodunu yukarıdaki gibion_readyiçine koyun. - Günlüğü açın. nextcord günlüğü kendisi kurmaz ve kendi belgeleri bunu yapılandırmayı şiddetle önerir. Günlük olmadan Python yalnızca uyarıları ve hataları gösterir; yukarıdaki bottaki
logging.basicConfig(level=logging.INFO)kütüphanenin bilgi satırlarını da gösterir. - Intent’ler. Varsayılan intent’ler ayrıcalıklı hiçbirini içermez ve slash komutları hiçbirine ihtiyaç duymaz. Önekli komutlar için kodunuzda
intents.message_content = Trueve Developer Portal’da Message Content Intent’in açık olması gerekir. Kodunuz bunu isterken Portal’da kapalıysa Discord girişi reddeder. Bkz. Discord botunuzdaki "Used disallowed intents" hatasını düzeltin.
Linux VPS’te kendiniz barındırın
Önce Python sürümünü kontrol edin: python3 --version 3.12 veya daha yenisini göstermelidir. Ubuntu 24.04 3.12 ile, Debian 13 ise 3.13 ile gelir; Debian 12 3.11 ile, Ubuntu 22.04 3.10 ile gelir ve ikisi de nextcord 3 için çok eskidir. Ardından Python’u kurun, bot için bir kullanıcı ve klasör oluşturun ve nextcord’u sanal bir ortama kurun:
sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/nextcord-bot bot
sudo cp bot.py requirements.txt /opt/nextcord-bot/
sudo chown bot: /opt/nextcord-bot/bot.py /opt/nextcord-bot/requirements.txt
sudo -u bot python3 -m venv /opt/nextcord-bot/venv
sudo -u bot /opt/nextcord-bot/venv/bin/pip install -r /opt/nextcord-bot/requirements.txt
Token’ı yalnızca root’un okuyabildiği bir dosyaya koyun. /etc/nextcord-bot.env dosyasını sudo nano /etc/nextcord-bot.env ile oluşturun, tek bir satır yazın, DISCORD_TOKEN= ve ardından token’ınız, kaydedin ve sudo chmod 600 /etc/nextcord-bot.env komutunu çalıştırın.
Sonra /etc/systemd/system/nextcord-bot.service dosyasını oluşturun:
[Unit]
Description=nextcord Discord bot
Wants=network-online.target
After=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/nextcord-bot
EnvironmentFile=/etc/nextcord-bot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/nextcord-bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Şimdi ve her açılışta başlatın, ardından çıktısını izleyin:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1, print() çıktısının bir tampon dolana kadar beklemeden günlüğe hemen ulaşmasını sağlar. Botu güncellemek için yeni dosyaları kopyalayın, pip install satırını yeniden çalıştırın ve sudo systemctl restart nextcord-bot komutunu verin.
Kendi barındırmanız veya bot planı
| Kendi VPS’iniz | PlayNHost bot planı | |
|---|---|---|
| Python | Dağıtımınızın getirdiği sürüm; nextcord 3 için 3.12 veya daha yenisi olmalıdır | Çalışma ortamı altında 3.12, 3.13 veya 3.14’ü seçin |
| Paketler | Her değişiklikten sonra pip install çalıştırırsınız | requirements.txt veya Python sürümü değiştikten sonraki bir başlatmada ve son kurulumdan bir gün sonraki ilk başlatmada kurulur |
| Yeniden başlatmalar | Sizin systemd biriminiz | Çökmeden sonra yeniden başlatılır; bir dakika içinde yeniden çökerse nedeni belirtilerek durdurulmuş bırakılır |
| Token | Kendiniz koruduğunuz bir dosya | Şifreli saklanır, yapıştırdığınızda Discord ile doğrulanır ve koda DISCORD_TOKEN olarak verilir |
| Hatalar | Günlüğü siz okursunuz | Konsol bandı yanlış token veya kurulmayan bir paket gibi nedeni belirtir |
| Sistem güncellemeleri, güvenlik duvarı, SSH | Size aittir | Sizin işiniz değildir |
Sık sorulan sorular
pip neden nextcord 2.6.0 kurdu?
Python’unuz 3.10 veya 3.11. nextcord 3, 3.12 veya daha yenisini gerektirir; bu yüzden pip, Python’unuzu hâlâ destekleyen en yeni sürümü seçer. Kod bölmesinde Çalışma ortamı’nı Python 3.12 veya daha yenisine ayarlayın ve botu yeniden başlatın: Python sürümü değiştiği için paketler yeniden kurulur.
Slash komutlarım kayboldu. Neden?
Sık görülen bir neden: aynı botla giren başka bir program kendi listesini senkronladı ve nextcord, kodunun tanımlamadığı komutları siler. Uygulama başına yalnızca bir kopya çalıştırın. Test ederken bir komutta guild_ids=[your_server_id] veya default_guild_ids ayarını commands.Bot() üzerinde kullanmak onu yalnızca o sunucuda oluşturur ve Discord’un belgeleri sunucu komutlarının anında güncellendiğini söyler.
discord.py kodumu koruyabilir miyim?
Çoğunu. nextcord, discord.py’nin bir çatalı olarak başladı; bu yüzden Client, Intents ve ext.commands gibi sınıflar nextcord adıyla oradadır. Slash komutları farklıdır: nextcord’da @bot.slash_command ve interaction.send(), discord.py’de app_commands. nextcord’un geçiş kılavuzunun dediği gibi discord.py’yi kaldırın ve import’ları değiştirin.
Bir nextcord botu en küçük plana sığar mı?
Evet. Testimizdeki yaklaşık 47 MB ile en küçük bir nextcord botu, 0,5 GB’lık STARTER planının çoğunu kendi kodunuza bırakır. Botunuzun kendisi gerektirdiğinde üst plana geçin: üyelerini önbelleğe aldığı büyük sunucular, işlediği dosyalar veya görseller ya da bellekte tuttuğu veriler.
Kendi botunuzu çalıştırmaya hazır mısınız? Discord bot barındırma sayfasında bir plan seçin ve nextcord botunuzu yükleyin.



