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
Bu sistem, forumlarda eğitim amaçlı paylaşım için uygundur. Hadi adım adım başlayalım.
Başlamadan önce sistemimizde bazı şeylerin yüklü olması gerekiyor:
Node.js (v18 veya üstü önerilir)
Bir Discord Botu
)
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
Discord Developer Portal
adresine girin.
Yeni bir uygulama oluşturun.
“Bot” sekmesinden bot ekleyin ve tokeninizi kopyalayın.
Tokeni kimseyle paylaşmayın
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
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.
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
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,
});
}
});
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 });
}
});
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.
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: