YENİ 📢 Sınırlı lansman teklifi: Tüm oyunlarda ilk aya %70'e varan indirim!Paketleri görün

nextcord botu 24/7 nasıl barındırılır

Discord botlarıUpdated Nov 6, 20269 min read

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:

  1. 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.
  2. 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.
  3. 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.
  4. İ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.
  5. Kodunuz adımında Dosya yükle’ye tıklayın ve bot.py ile requirements.txt dosyasını (içinde nextcord yazmalı) yükleyin, ya da Git’i bağla’ya tıklayın.
  6. 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.py değilse onu ayarlayın ve Kaydet’e tıklayın.
  7. 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üphaneSürümBoştaki bellekBaşlangıçtan Discord’un yanıtına
nextcord3.2.047 MB1,0 sn
discord.py2.7.148 MB1,0 sn
Pycord2.8.151 MB1,1 sn
disnake2.12.247 MB0,9 sn
hikari2.7.061 MB1,3 sn
Yalnızca Python3.129 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 nextcord satı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,<4 ile 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ından ModuleNotFoundError: 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 ve import nextcord ile from nextcord.ext import commands yazarsı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 kodunuzda discord yerine nextcord yazmanı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 gibi on_ready iç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 = True ve 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’inizPlayNHost bot planı
PythonDağı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
PaketlerHer değişiklikten sonra pip install çalıştırırsınızrequirements.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şlatmalarSizin systemd biriminizÇökmeden sonra yeniden başlatılır; bir dakika içinde yeniden çökerse nedeni belirtilerek durdurulmuş bırakılır
TokenKendiniz koruduğunuz bir dosyaŞifreli saklanır, yapıştırdığınızda Discord ile doğrulanır ve koda DISCORD_TOKEN olarak verilir
HatalarGünlüğü siz okursunuzKonsol bandı yanlış token veya kurulmayan bir paket gibi nedeni belirtir
Sistem güncellemeleri, güvenlik duvarı, SSHSize aittirSizin 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.

Botun başka bir yerde mi? Bize taşı

EN YENİ BLOG YAZILARIMIZ