• 15-06-2025, 13:42:02
    #1
    Merhabalar cursor pro ile baya yapmıştımda süresi bitti yapamıyorum. Sizden istediğim ticket açıldıgı zaman tickete hiç mesaj atılmadıgı takdirde ticket 1 dakika sonra kapatılsın otomatik olarak



    const { Permissions, MessageEmbed, MessageActionRow, MessageButton, MessageSelectMenu } = require('discord.js');
    const { createWriteStream } = require('fs');

    // ==================== BUTONLA ROL ALMA SİSTEMİ ====================

    const roles = {
    tiktok: '1370742863695970328',

    twitch: '1372945246543020182',
    };

    const CATEGORIES = {
    tiktok: '1370742864555802702',
    twitch: '1370742864555802702',
    };

    const clickedUsers = new Set();
    // Yetkili çağırma butonunun kullanım süresini takip etmek için
    const staffCallCooldowns = new Map();

    module.exports = async (client, interaction) => {
    if (!interaction.isButton() && !interaction.isSelectMenu()) return;

    // ==================== BUTONLA ROL ALMA ====================

    const customId = interaction.customId;
    if (roles[customId]) {
    if (clickedUsers.has(interaction.user.id)) {
    return interaction.reply({ content: '❌ Zaten bir seçim yaptın.', ephemeral: true });
    }

    const roleId = roles[customId];
    const role = interaction.guild.roles.cache.get(roleId);
    const member = interaction.guild.members.cache.get(interaction.us er.id);

    if (!role) {
    return interaction.reply({ content: '⚠️ Rol bulunamadı.', ephemeral: true });
    }

    await member.roles.add(role);
    clickedUsers.add(interaction.user.id);

    await interaction.reply({ content: `✅ **${role.name}** rolünü aldın! Sana özel bir kanal oluşturuldu.`, ephemeral: true });

    const channelName = `${interaction.user.username.toLowerCase()}`.repla ce(/[^a-z0-9-]/g, '');
    const categoryId = CATEGORIES[customId];

    const channel = await interaction.guild.channels.create(channelName, {
    type: 'GUILD_TEXT',
    parent: categoryId || null,
    permissionOverwrites: [
    {
    id: interaction.guild.id,
    deny: [Permissions.FLAGS.VIEW_CHANNEL],
    },
    {
    id: interaction.user.id,
    allow: [
    Permissions.FLAGS.VIEW_CHANNEL,
    Permissions.FLAGS.SEND_MESSAGES,
    Permissions.FLAGS.READ_MESSAGE_HISTORY,


    ],
    },
    {
    id: client.user.id,
    allow: [
    Permissions.FLAGS.VIEW_CHANNEL,
    Permissions.FLAGS.SEND_MESSAGES,
    Permissions.FLAGS.MANAGE_CHANNELS,
    ],
    },
    ],
    });

    channel.send(`👋 Merhaba ${interaction.user}, **${role.name}** rolünü seçtiğin için bu kanal senin için oluşturuldu!`);
    return;
    }



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

    if (interaction.customId === 'hizmet_talep') {
    const hizmetSahibiId = '637252039901970433';
    const hizmetSahibi = await client.users.fetch(hizmetSahibiId).catch(() => null);

    if (hizmetSahibi) {
    hizmetSahibi.send(`📬 Hizmetleriniz hakkında şu kişi butona tıkladı: <@${interaction.user.id}>`)
    .catch(() => console.log('DM gönderilemedi.'));
    }

    await interaction.reply({ content: 'İlginiz için teşekkürler! Hizmet sahibine bilgi verildi.', ephemeral: true });
    }
    });














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

    if (interaction.customId === 'yayın_talep') {
    const hizmetSahibiId = '637252039901970433';
    const hizmetSahibi = await client.users.fetch(hizmetSahibiId).catch(() => null);

    if (hizmetSahibi) {
    hizmetSahibi.send(`📬 Yayıncı bilgi almak istiyor: <@${interaction.user.id}>`)
    .catch(() => console.log('DM gönderilemedi.'));
    }

    await interaction.reply({ content: 'İlginiz için teşekkürler! Hizmet sahibine bilgi verildi.', ephemeral: true });
    }
    });










    const vipRolID = '1382250916966830143';
    const izinliKullaniciID = '1380439588924948510'; // Kim basabiliyorsa onun ID'si

    if (interaction.isButton() && interaction.customId === 'rol_ver') {
    if (interaction.user.id !== izinliKullaniciID) {
    return interaction.reply({
    content: '❌ Butona sadece Vip ücreti ödemiş kullanıcılar basabilir. <#1376854710920679554> açarak sende vip olabilirsin',
    ephemeral: true
    });
    }

    const member = interaction.guild.members.cache.get(interaction.us er.id);
    if (!member) return;

    if (member.roles.cache.has(vipRolID)) {
    return interaction.reply({
    content: 'Zaten bu role sahipsin!',
    ephemeral: true
    });
    }

    try {
    await member.roles.add(vipRolID);
    return interaction.reply({
    content: '✅ Rol başarıyla verildi!',
    ephemeral: true
    });
    } catch (err) {
    console.error('Rol verilirken hata:', err);
    return interaction.reply({
    content: '❌ Rol verilirken bir hata oluştu.',
    ephemeral: true
    });
    }
    }






    // ==================== TICKET SİSTEMİ ====================

    const allowedRoleId = '1357630446607007804';
    const logChannelId = '1357637412184002595';
    const ticketCategoryId = '1376854678750625892';
    let bakimModu = false;

    const [action, userId] = interaction.customId?.split('_') || [];

    if (bakimModu) {
    return interaction.reply({
    content: '🔧 Bot şu anda bakımda. Butonlar kullanılamaz. Tahmini süre : 15 dakika',
    ephemeral: true
    });
    }

    if (interaction.customId === 'createTicket') {
    const embed = new MessageEmbed()
    .setColor('YELLOW')
    .setTitle('📜 Destek Talebi Kuralları')
    .setDescription(
    `Lütfen destek talebi oluşturmadan önce aşağıdaki kuralları dikkatlice okuyun:nn` +
    `• Gereksiz yere destek talebi açmayınız.n` +
    `• Aynı konu hakkında birden fazla destek talebi oluşturmayınız.n` +
    `• Saygılı ve düzgün bir dil kullanınız.n` +
    `• Destek ekibine küfür/hakaret içeren mesajlar yasaktır.n` +
    `• Destek talebi açtıktan sonra sabırlı olunuz, yetkililer en kısa sürede cevap verecektir.nn` +
    `Kuralları okuduğunuzu ve kabul ettiğinizi onaylamak için aşağıdaki butona tıklayınız.`
    );

    const row = new MessageActionRow().addComponents(
    new MessageButton()
    .setCustomId('rulesAccept')
    .setLabel('✅ Kuralları Okudum ve Kabul Ediyorum')
    .setStyle('SUCCESS')
    );

    return interaction.reply({ embeds: [embed], components: [row], ephemeral: true });
    }

    if (interaction.customId === 'rulesAccept') {
    const selectMenu = new MessageSelectMenu()
    .setCustomId('newTicket')
    .setPlaceholder('📩 Destek Talebi Sebebini Seçiniz!')
    .addOptions([
    { emoji: '📌', label: 'Genel Sorunlar', value: 'newTicket_Soru/Sorun Bildirimi' },
    { emoji: '📌', label: 'Hata Bildirimi', value: 'newTicket_Küfür/Hakaret Bildirimi' },
    { emoji: '📌', label: 'Ödeme Sorunları', value: 'newTicket_Ödeme Sorunları' },
    { emoji: '📌', label: 'Öneri / İstek / Şikayet', value: 'newTicket_Hile/Bot Bildirimi' }
    ]);

    const row = new MessageActionRow().addComponents(selectMenu);
    return interaction.update({ content: '📩 Destek Talebi Sebebini Seçiniz!', components: [row], embeds: [] });
    }

    if (interaction.isSelectMenu() && interaction.customId === 'newTicket') {
    const reason = interaction.values[0].split('_')[1];
    const existingChannel = interaction.guild.channels.cache.find(channel =>
    channel.name.endsWith(interaction.member.id)
    );

    if (existingChannel) {
    return interaction.update({
    content: `Zaten açık bir destek talebiniz var: <#${existingChannel.id}> ❌`,
    components: [],
    ephemeral: true
    });
    }

    const randomTicketNumber = Math.floor(1000 + Math.random() * 9000);
    const channelName = `bilet-${randomTicketNumber}-${interaction.user.id}`;

    const channel = await interaction.guild.channels.create(channelName, {
    type: 'GUILD_TEXT',
    topic: `Ticket ${interaction.member.user.username} tarafından oluşturuldu. Sebep: ${reason}`,
    parent: ticketCategoryId,
    permissionOverwrites: [
    { id: interaction.guild.id, deny: ['VIEW_CHANNEL'] },
    { id: interaction.member.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES'] }, // Burada ATTACH_FILES eklendi
    { id: client.user.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES'] },
    { id: allowedRoleId, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES'] }
    ]
    });

    const embed = new MessageEmbed()
    .setColor('GREEN')
    .setAuthor(`🎟️ Destek Talebiniz Oluşturuldu: ${interaction.member.user.username}`)
    .setDescription(`**Sebep* ${reason}nn*Lütfen sorununuzu yetkililer gelene kadar detaylıca anlatınız. Ve lütfen yetkilileri etiketlemeyiniz.*`);

    // Butonlar yerine select menü oluşturalım
    const ticketActionMenu = new MessageSelectMenu()
    .setCustomId(`ticketAction_${interaction.member.id }`)
    .setPlaceholder('🛠️ İşlem Seçin')
    .addOptions([
    { emoji: '🔒', label: 'Kapat', value: `closeTicket_${interaction.member.id}`, description: 'Destek talebini kapat' },
    { emoji: '⭐', label: 'Değerlendir', value: `sendFeedback_${interaction.member.id}`, description: 'Destek talebini değerlendir' },
    { emoji: '✅', label: 'Çözüldü', value: `resolved_${interaction.member.id}`, description: 'Çözüldü olarak işaretle' },
    { emoji: '🔔', label: 'Destek Çağır', value: `callStaff_${interaction.member.id}`, description: 'Yetkilileri Çağır' },
    { emoji: '📢', label: 'Tickete Çağır', value: `callUser_${interaction.member.id}`, description: 'Ticket Açan Kişiyi Çağır' }
    ]);

    const row = new MessageActionRow().addComponents(ticketActionMenu) ;

    await channel.send(`<@${interaction.member.id}> | <@&${allowedRoleId}>`);

    // Ticket açıldıktan sonra bilgilendirme mesajını embed içinde gönder
    setTimeout(() => {
    const welcomeEmbed = new MessageEmbed()
    .setColor('#2F3136')
    .setTitle('📩 Destek Talebiniz Açıldı')
    .setDescription('**Sorununuzla aktif olan yetkilimiz en kısa sürede sizlerle ilgilenecektir.**nn**Lütfen yetkililer gelene kadar sorununuzu detaylıca açıklayınız.**')
    .setFooter('Destek Sistemi', interaction.guild.iconURL({ dynamic: true }))
    .setTimestamp();

    channel.send({ embeds: [welcomeEmbed] });
    }, 1000);

    await channel.send({ embeds: [embed], components: [row] });

    return interaction.update({ content: `🎫 Destek Talebi oluşturuldu: <#${channel.id}> ✅`, components: [], ephemeral: true });
    }

    // Select menü için işlem kontrolü
    if (interaction.isSelectMenu() && interaction.customId.startsWith('ticketAction_')) {
    const ticketOwnerId = interaction.customId.split('_')[1];
    const selectedValue = interaction.values[0];
    const [selectedAction, selectedUserId] = selectedValue.split('_');

    // Seçilen işleme göre işlem yapalım
    switch (selectedAction) {
    case 'callUser':
    // Yetkili çağırma işlemleri
    if (!interaction.member.roles.cache.has(allowedRoleId )) {
    return interaction.reply({ content: 'Bu işlemi sadece yetkililer kullanabilir! ❌', ephemeral: true });
    }

    const userToCall = await interaction.guild.members.fetch(ticketOwnerId).cat ch(() => null);
    if (!userToCall) {
    return interaction.reply({ content: 'Ticket sahibi bulunamadı! ❌', ephemeral: true });
    }

    // Ticket sahibine özel mesaj gönderme
    try {
    await userToCall.send({
    content: `🔔 **Ticket Çağrısı!**nYetkililer sizi <#${interaction.channel.id}> kanalındaki destek talebinize çağırıyor!`
    });

    return interaction.reply({
    content: `📢 Ticket sahibi <@${ticketOwnerId}> başarıyla çağrıldı! Kendisine özel mesaj gönderildi.`,
    ephemeral: true
    });
    } catch (error) {
    return interaction.reply({
    content: `⚠️ Ticket sahibine özel mesaj gönderilemedi. Muhtemelen DM'leri kapalı.`,
    ephemeral: true
    });
    }

    case 'callStaff':
    // Yetkili çağırma işlemleri
    if (interaction.user.id !== ticketOwnerId) {
    return interaction.reply({ content: 'Bu işlemi sadece ticket sahibi kullanabilir! ❌', ephemeral: true });
    }

    // 30 dakika bekleme süresi kontrolü
    const cooldownKey = `${interaction.channel.id}-${interaction.user.id}`;
    const cooldownTime = 30 * 60 * 1000; // 30 dakika (milisaniye cinsinden)
    const now = Date.now();

    if (staffCallCooldowns.has(cooldownKey)) {
    const expirationTime = staffCallCooldowns.get(cooldownKey) + cooldownTime;

    if (now < expirationTime) {
    const timeLeft = Math.ceil((expirationTime - now) / 1000 / 60); // Kalan süre (dakika)
    return interaction.reply({
    content: `⏰ Bu işlemi tekrar kullanabilmek için ${timeLeft} dakika beklemeniz gerekiyor.`,
    ephemeral: true
    });
    }
    }

    // Bekleme süresini güncelle
    staffCallCooldowns.set(cooldownKey, now);

    // 30 dakika sonra cooldown'u temizle (opsiyonel)
    setTimeout(() => staffCallCooldowns.delete(cooldownKey), cooldownTime);

    const staffRole = interaction.guild.roles.cache.get(allowedRoleId);
    if (!staffRole) {
    return interaction.reply({ content: 'Yetkili rolü bulunamadı! ❌', ephemeral: true });
    }

    // Yetkili rolündeki tüm üyelere DM gönderme
    let sentCount = 0;
    const staffMembers = staffRole.members;

    staffMembers.forEach(async (member) => {
    try {
    await member.send({
    content: `🔔 **Acil Yetkili Çağrısı!**n<@${interaction.user.id}> sizi <#${interaction.channel.id}> kanalındaki destek talebine çağırıyor!`
    });
    sentCount++;
    } catch (error) {
    // DM gönderilemedi, devam et
    }
    });

    return interaction.reply({
    content: `🔔 Yetkili çağrısı gönderildi! Bu işlemi tekrar kullanabilmek için 30 dakika beklemeniz gerekecek.`,
    ephemeral: true
    });

    case 'closeTicket':
    if (!interaction.member.roles.cache.has(allowedRoleId ))
    return interaction.reply({ content: 'Sadece yetkililer kapatabilir! ❌', ephemeral: true });

    const ticketMessage = await interaction.message.fetch();

    // Çözüldü kontrolü
    let isResolved = false;
    const ticketActionMenu = ticketMessage.components[0]?.components[0];
    if (ticketActionMenu) {
    const resolvedOption = ticketActionMenu.options.find(option => option.value.startsWith('resolved_'));
    if (resolvedOption && !resolvedOption.default) {
    return interaction.reply({ content: 'Destek talebini kapatmadan önce "Çözüldü" seçeneğini işaretlemeniz gerekmektedir. ❌', ephemeral: true });
    }
    }

    const memberToClose = await interaction.guild.members.fetch(ticketOwnerId).cat ch(() => null);
    if (!memberToClose) return interaction.reply({ content: 'Kullanıcı bulunamadı ❌', ephemeral: true });

    // Ticket sahibine özel mesaj gönderme
    try {
    const ticketClosedEmbed = new MessageEmbed()
    .setColor('RED')
    .setTitle('🔒 Destek Talebiniz Kapatıldı')
    .setDescription(`**${interaction.channel.name}** adlı destek talebiniz <@${interaction.user.id}> tarafından kapatılmıştır.`)
    .setTimestamp()
    .setFooter('Yeni bir sorun yaşarsanız tekrar destek talebi açabilirsiniz.');

    await memberToClose.send({ embeds: [ticketClosedEmbed] });
    } catch (error) {
    // DM gönderilemedi, devam et
    console.log('Ticket sahibine DM gönderilemedi:', error);
    }

    await interaction.channel.permissionOverwrites.edit(memb erToClose, { VIEW_CHANNEL: false, SEND_MESSAGES: false });

    const closeEmbed = new MessageEmbed()
    .setColor('RED')
    .setAuthor(`🔒 ${interaction.member.user.username} Destek talebini kapattı`)
    .setDescription('*Destek talebi silmek, kaydetmek veya yeniden açmak için aşağıdaki menüyü kullanın.*');

    // Kapatma sonrası menü
    const closeMenu = new MessageSelectMenu()
    .setCustomId(`closedTicketAction_${ticketOwnerId}` )
    .setPlaceholder('🛠️ İşlem Seçin')
    .addOptions([
    { emoji: '🔓', label: 'Yeniden Aç', value: `reopenTicket_${ticketOwnerId}`, description: 'Destek talebini yeniden aç' },
    { emoji: '📄', label: 'Kaydet', value: 'saveTicket', description: 'Destek talebini kaydet' },
    { emoji: '🗑️', label: 'Sil', value: 'deleteTicket', description: 'Destek talebini sil' }
    ]);

    const closeRow = new MessageActionRow().addComponents(closeMenu);

    return interaction.reply({ embeds: [closeEmbed], components: [closeRow] });

    case 'resolved':
    if (!interaction.member.roles.cache.has(allowedRoleId ))
    return interaction.reply({ content: 'Sadece yetkililer bu işlemi yapabilir! ❌', ephemeral: true });

    const logChannel = interaction.guild.channels.cache.get(logChannelId) ;
    if (logChannel?.isText()) {
    await logChannel.send(`✅ <@${interaction.member.id}> tarafından ticket <#${interaction.channel.id}> çözüldü olarak işaretlendi.`);
    }

    // Menüyü güncelle, çözüldü seçeneğini devre dışı bırak
    const message = await interaction.message.fetch();
    const currentMenu = message.components[0].components[0];

    const updatedMenu = new MessageSelectMenu()
    .setCustomId(currentMenu.customId)
    .setPlaceholder('🛠️ İşlem Seçin (✅ Çözüldü)');

    // Mevcut seçenekleri kopyala, çözüldü seçeneğini güncelle
    currentMenu.options.forEach(option => {
    if (option.value.startsWith('resolved_')) {
    updatedMenu.addOptions({
    emoji: '✅',
    label: 'Çözüldü ✓',
    value: option.value,
    description: 'Bu sorun çözüldü',
    default: true // Seçili olarak işaretle
    });
    } else {
    updatedMenu.addOptions(option);
    }
    });

    const updatedRow = new MessageActionRow().addComponents(updatedMenu);

    await interaction.update({
    content: '✅ Destek talebi çözüldü olarak işaretlendi.',
    components: [updatedRow]
    });
    break;

    case 'sendFeedback':
    const feedbackMenu = new MessageSelectMenu()
    .setCustomId(`feedback_${ticketOwnerId}`)
    .setPlaceholder('Geri Bildiriminizi Seçin')
    .addOptions([
    { label: '⭐', value: '1', description: 'Çok Kötü' },
    { label: '⭐⭐', value: '2', description: 'Kötü' },
    { label: '⭐⭐⭐', value: '3', description: 'Orta' },
    { label: '⭐⭐⭐⭐', value: '4', description: 'İyi' },
    { label: '⭐⭐⭐⭐⭐', value: '5', description: 'Çok İyi' }
    ]);

    return interaction.reply({
    content: 'Hizmetimizle ilgili geri bildiriminizi seçin:',
    components: [new MessageActionRow().addComponents(feedbackMenu)],
    ephemeral: true
    });
    }
    }

    // Kapatılmış ticket işlemleri için select menü kontrolü
    if (interaction.isSelectMenu() && interaction.customId.startsWith('closedTicketActio n_')) {
    const ticketOwnerId = interaction.customId.split('_')[1];
    const selectedValue = interaction.values[0];

    if (selectedValue.startsWith('reopenTicket_')) {
    const memberToOpen = await interaction.guild.members.fetch(ticketOwnerId).cat ch(() => null);
    if (!memberToOpen) return interaction.reply({ content: 'Kullanıcı bulunamadı ❌', ephemeral: true });

    await interaction.channel.permissionOverwrites.edit(memb erToOpen, { VIEW_CHANNEL: true, SEND_MESSAGES: true });

    // Ticket sahibine özel mesaj gönderme
    try {
    const ticketReopenedEmbed = new MessageEmbed()
    .setColor('GREEN')
    .setTitle('🔓 Destek Talebiniz Yeniden Açıldı')
    .setDescription(`**${interaction.channel.name}** adlı destek talebiniz <@${interaction.user.id}> tarafından yeniden açılmıştır.`)
    .setTimestamp();

    await memberToOpen.send({ embeds: [ticketReopenedEmbed] });
    } catch (error) {
    // DM gönderilemedi, devam et
    console.log('Ticket sahibine DM gönderilemedi:', error);
    }

    // Orijinal ticket menüsünü yeniden oluştur
    const ticketActionMenu = new MessageSelectMenu()
    .setCustomId(`ticketAction_${ticketOwnerId}`)
    .setPlaceholder('🛠️ İşlem Seçin')
    .addOptions([
    { emoji: '🔒', label: 'Kapat', value: `closeTicket_${ticketOwnerId}`, description: 'Destek talebini kapat' },
    { emoji: '⭐', label: 'Değerlendir', value: `sendFeedback_${ticketOwnerId}`, description: 'Destek talebini değerlendir' },
    { emoji: '✅', label: 'Çözüldü', value: `resolved_${ticketOwnerId}`, description: 'Çözüldü olarak işaretle' },
    { emoji: '🔔', label: 'Destek Çağır', value: `callStaff_${ticketOwnerId}`, description: 'Yetkilileri çağır' },
    { emoji: '📢', label: 'Tickete Çağır', value: `callUser_${ticketOwnerId}`, description: 'Ticket sahibini çağır' }
    ]);

    const row = new MessageActionRow().addComponents(ticketActionMenu) ;

    return interaction.update({
    embeds: [new MessageEmbed().setColor('GREEN').setAuthor('🔓 Destek talebi yeniden açıldı ✅')],
    components: [row]
    });
    }
    else if (selectedValue === 'deleteTicket') {
    // Ticket silindiğinde özel mesaj gönderme kaldırıldı
    return interaction.channel.delete();
    }
    else if (selectedValue === 'saveTicket') {
    const messages = (await interaction.channel.messages.fetch()).filter(m => !m.author.bot).map(m => {
    const date = new Date(m.createdTimestamp).toLocaleString();
    const user = `${m.author.tag}${m.author.id === ticketOwnerId ? ' (ticket sahibi)' : ''}`;
    return `${date} - ${user}: ${m.content || (m.attachments.first()?.proxyURL ?? '')}`;
    }).reverse().join('n');

    const fileName = `./data/ticket_${Date.now()}.txt`;
    const stream = createWriteStream(fileName);
    stream.write(`Destek Talebi Logları (${interaction.channel.name})nn${messages}`);
    stream.end();

    stream.on('finish', async () => {
    const logChannel = interaction.guild.channels.cache.get(logChannelId) ;
    if (logChannel?.isText()) {
    await logChannel.send({ content: `📄 Destek Talebi logları (${interaction.channel.name}):`, files: [fileName] });
    return interaction.reply({ content: 'Loglar başarıyla gönderildi ✅', ephemeral: true });
    }
    return interaction.reply({ content: 'Log kanalı bulunamadı ❌', ephemeral: true });
    });
    }
    }

    if (interaction.isSelectMenu() && interaction.customId.startsWith('feedback_')) {
    const memberId = interaction.customId.split('_')[1];
    const stars = interaction.values[0];
    const logChannel = interaction.guild.channels.cache.get(logChannelId) ;

    if (logChannel?.isText()) {
    await logChannel.send(`<@${memberId}> tarafından verilen geri bildirim: ${stars} ⭐`);
    }

    return interaction.update({
    content: `Teşekkür ederiz! Geri bildiriminiz: ${stars} ⭐`,
    components: [],
    ephemeral: true
    });
    }
    };
  • 15-06-2025, 13:48:44
    #2
    Satış yaptığın bir şeyi ücretsiz düzelttirmen çok mantıksız poe'de premium ai'leri deneyebilirsin ücretsiz kredi var ordan düzelt kendin
  • 15-06-2025, 14:04:07
    #3
    lightningx001 adlı üyeden alıntı: mesajı görüntüle
    Satış yaptığın bir şeyi ücretsiz düzelttirmen çok mantıksız poe'de premium ai'leri deneyebilirsin ücretsiz kredi var ordan düzelt kendin
    ne alaka satış yapmam ? ben kendi discord sunucmda kullanıyorum ticket botumu