Discord Başvuru Botu Yapı

TURAN

Administrator
Yönetici
Katılım
16 Eylül 2025
Mesajlar
12
Tepkime puanı
9
Puan
3
Web sitesi
ebubekirbayat.com.tr
📌 Discord Başvuru Botu Yapımı (Eğitim)

Merhaba arkadaşlar 👋
Bugünkü eğitimimizde, sizlere Discord için başvuru botu yapmayı göstereceğim. Bu bot, kullanıcıların butona basarak popup (modal) form doldurmasını ve başvuruların log kanalına düşmesini sağlayacak. Ayrıca log mesajında ✅ Onayla ve ❌ Reddet butonları olacak.

Bu sistem, forumlarda eğitim amaçlı paylaşım için uygundur. Hadi adım adım başlayalım. 🚀

1️⃣ Gereksinimler

Başlamadan önce sistemimizde bazı şeylerin yüklü olması gerekiyor:

Node.js (v18 veya üstü önerilir)
👉 Node.JS İndir

Bir Discord Botu
👉 Discord Developer Portal üzerinden oluşturabilirsiniz. (Discord for Developers
)

discord.js kütüphanesi

Bot için bir klasör açıyoruz:

Kod:
mkdir basvuru-botu
cd basvuru-botu
npm init -y
npm install discord.js@14
3

2️⃣ Bot Tokeni Alma

Discord Developer Portal
adresine girin.

Yeni bir uygulama oluşturun.

“Bot” sekmesinden bot ekleyin ve tokeninizi kopyalayın.

Tokeni kimseyle paylaşmayın ❌ (çünkü botunuzu hackleyebilirler).

3️⃣ Basit Bot Kurulumu

index.js dosyası açın ve şu temel kodu yazın:

Kod:
const { Client, GatewayIntentBits } = require("discord.js");

const client = new Client({
  intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages]
});

client.once("ready", () => {
  console.log(`${client.user.tag} aktif!`);
});

client.login("BOT_TOKENINIZ");


Terminalden botu çalıştırın:

node index.js


Eğer konsolda BotAdınız#0000 aktif! yazısını görüyorsanız, botunuz çalışıyor demektir ✅

4️⃣ Başvuru Butonu Oluşturma

Kullanıcıların başvurmasını sağlamak için bir buton koyacağız.
Sadece adminler tarafından kullanılacak !başvuru-buton komutunu ekleyelim.

Kod:
const {
  ActionRowBuilder,
  ButtonBuilder,
  ButtonStyle
} = require("discord.js");

client.on("messageCreate", async (message) => {
  if (message.content === "!başvuru-buton") {
    if (!message.member.permissions.has("Administrator")) return;

    const row = new ActionRowBuilder().addComponents(
      new ButtonBuilder()
        .setCustomId("basvuru_ac")
        .setLabel(" Başvuru Yap")
        .setStyle(ButtonStyle.Primary)
    );

    await message.channel.send({
      content: "Başvuru yapmak için aşağıdaki butona basın:",
      components: [row],
    });
  }
});


Artık adminler !başvuru-buton yazınca kanala Başvuru Yap butonu gelir.

5️⃣ Popup (Modal) Form Açma

Butona tıklayan kullanıcılara bir popup form açacağız.

Kod:
const {
  ModalBuilder,
  TextInputBuilder,
  TextInputStyle
} = require("discord.js");

client.on("interactionCreate", async (interaction) => {
  if (!interaction.isButton()) return;
  if (interaction.customId === "basvuru_ac") {
    const modal = new ModalBuilder()
      .setCustomId("basvuruFormu")
      .setTitle(" Başvuru Formu");

    const isim = new TextInputBuilder()
      .setCustomId("isim")
      .setLabel("Adınız Soyadınız")
      .setStyle(TextInputStyle.Short)
      .setRequired(true);

    const yas = new TextInputBuilder()
      .setCustomId("yas")
      .setLabel("Yaşınız")
      .setStyle(TextInputStyle.Short)
      .setRequired(true);

    const neden = new TextInputBuilder()
      .setCustomId("neden")
      .setLabel("Neden başvurmak istiyorsunuz?")
      .setStyle(TextInputStyle.Paragraph)
      .setRequired(true);

    modal.addComponents(
      new ActionRowBuilder().addComponents(isim),
      new ActionRowBuilder().addComponents(yas),
      new ActionRowBuilder().addComponents(neden)
    );

    await interaction.showModal(modal);
  }
});


Butona basınca kullanıcıya popup formu açılır 🎉

6️⃣ Başvuruları Log Kanalına Gönderme

Form doldurulunca başvurular başvurular isimli kanala düşsün.

Kod:
client.on("interactionCreate", async (interaction) => {
  if (!interaction.isModalSubmit()) return;
  if (interaction.customId === "basvuruFormu") {
    const isim = interaction.fields.getTextInputValue("isim");
    const yas = interaction.fields.getTextInputValue("yas");
    const neden = interaction.fields.getTextInputValue("neden");

    const logChannel = interaction.guild.channels.cache.find(
      (ch) => ch.name === "başvurular"
    );

    if (logChannel) {
      const row = new ActionRowBuilder().addComponents(
        new ButtonBuilder()
          .setCustomId("onayla")
          .setLabel(" Onayla")
          .setStyle(ButtonStyle.Success),
        new ButtonBuilder()
          .setCustomId("reddet")
          .setLabel(" Reddet")
          .setStyle(ButtonStyle.Danger)
      );

      await logChannel.send({
        content: ` Yeni Başvuru:\n İsim: ${isim}\n Yaş: ${yas}\n Sebep: ${neden}\n Kullanıcı: <@${interaction.user.id}>`,
        components: [row],
      });
    }

    await interaction.reply({
      content: " Başvurun başarıyla alındı! Yetkililer inceleyecek.",
      ephemeral: true,
    });
  }
});

7️⃣ Onay / Reddet Butonları

Artık yetkililer, log kanalındaki mesaj üzerinden başvuruyu onaylayıp reddedebilecek.

Kod:
client.on("interactionCreate", async (interaction) => {
  if (!interaction.isButton()) return;

  if (interaction.customId === "onayla") {
    await interaction.reply({ content: " Başvuru **ONAYLANDI**", ephemeral: false });
  }

  if (interaction.customId === "reddet") {
    await interaction.reply({ content: " Başvuru **REDDEDİLDİ**", ephemeral: false });
  }
});

8️⃣ Opsiyonel Geliştirmeler
Onay veya red sonrası başvuran kişiye DM gönderme.
Başvuruları bir veritabanına kaydetme (SQLite veya MongoDB).
Onaylanan kişiye otomatik olarak rol verme.
Başvurular için Embed mesaj kullanarak daha şık görünüm sağlama.

🎉 Sonuç
Artık elimizde:
Kullanıcıların butonla başvuru yaptığı
Başvuruların popup form ile toplandığı
Sonuçların log kanalına düştüğü
Yetkililerin butonlarla onay/red verebildiği
tamamen çalışan bir Discord Başvuru Botu var! 🚀
Bu sistemi kendi forumunuzda eğitim amaçlı paylaşabilir, isteyen herkesin öğrenmesini sağlayabilirsiniz.
 
Son düzenleme:
Üst