Kod V14 Gelişmiş Timeout

ArviS

Bronz Üye
arviis.
Katılım
13 Ocak 2023
Mesajlar
1,113
Tepkime puanı
172
Şehir
Antalya
JavaScript:
const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require("discord.js");

const zamanKatsayilari = {
  saniye: 1000,
  dakika: 60 * 1000,
  saat: 60 * 60 * 1000,
  gün: 24 * 60 * 60 * 1000
};

module.exports = {
  data: new SlashCommandBuilder()
    .setName("timeout")
    .setDescription("Timeout işlemleri.")
    .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers)
    .addSubcommand(subcommand =>
      subcommand
        .setName("at")
        .setDescription("Belirtilen kullanıcıya Timeout atar.")
        .addUserOption(option =>
          option.setName("kişi")
            .setDescription("Kişi seç.")
            .setRequired(true)
        )
        .addIntegerOption(option =>
          option.setName("sayı-gir")
            .setDescription("SADECE sayı gir.")
            .setRequired(true)
        )
        .addStringOption(option =>
          option.setName("zaman-birimi-seç")
            .setDescription("Seç.")
            .setRequired(true)
            .addChoices(
              { name: "Saniye", value: "saniye" },
              { name: "Dakika", value: "dakika" },
              { name: "Saat", value: "saat" },
              { name: "Gün", value: "gün" }
            )
        )
        .addStringOption(option =>
          option.setName("sebep")
            .setDescription("Sebep gir.")
            .setRequired(true)
        )
    )
    .addSubcommand(subcommand =>
      subcommand
        .setName("kaldır")
        .setDescription("Belirtilen kişinin Timeoutunu kaldırır.")
        .addUserOption(option =>
          option.setName("kişi")
            .setDescription("Kişi seç.")
            .setRequired(true)
        )
    ),

  async execute(interaction) {
    const { guild, options, member: komutuKullanan } = interaction;
    const subcommand = options.getSubcommand();
    const user = options.getUser("kişi");
    const member = await guild.members.fetch(user.id).catch(() => null);
    const ikon = user.displayAvatarURL({ dynamic: true, size: 2048 });

    if (!member) {
      return interaction.reply({
        content: "<a:dikkat_arviis:997074866371039322> **Belirtilen kişi bu sunucuda bulunamıyor.**",
        ephemeral: true
      });
    }

    if (member.id === komutuKullanan.id) {
      return interaction.reply({
        content: "<a:dikkat_arviis:997074866371039322> **Kendine bu işlemi uygulayamazsın.**",
        ephemeral: true
      });
    }

    if (member.roles.highest.position >= komutuKullanan.roles.highest.position && komutuKullanan.id !== guild.ownerId) {
      return interaction.reply({
        content: "<a:dikkat_arviis:997074866371039322> **Bu kişi seninle aynı veya daha yüksek bir role sahip.**",
        ephemeral: true
      });
    }

    if (!guild.members.me.permissions.has(PermissionFlagsBits.ModerateMembers)) {
      return interaction.reply({
        content: "<a:dikkat_arviis:997074866371039322> **Bu işlem için yetkiye ihtiyacım var.**",
        ephemeral: true
      });
    }

    if (subcommand === "at") {
      const sureDeger = options.getInteger("sayı-gir");
      const birim = options.getString("zaman-birimi-seç");
      const reason = options.getString("sebep") || "Sebep belirtilmedi.";
      const sureMs = sureDeger * zamanKatsayilari[birim];

      if (sureDeger <= 0 || !sureMs || isNaN(sureMs)) {
        return interaction.reply({
          content: "<a:dikkat_arviis:997074866371039322> **Geçerli bir pozitif süre gir.**",
          ephemeral: true
        });
      }

      if (sureMs > 2419200000) {//28 Gün - UNUTMArviS
        return interaction.reply({
          content: "<a:dikkat_arviis:997074866371039322> **Timeout süresi maksimum __28 gün__ olabilir.**",
          ephemeral: true
        });
      }

      try {
        await member.timeout(sureMs, reason);

        const embed = new EmbedBuilder()
          .setAuthor({ name: "TIMEOUT UYGULANDI", iconURL: guild.iconURL({ dynamic: true }) })
          .setColor(0x337fb2)
          .setThumbnail(ikon)
          .addFields(
            { name: "<:kullanici_arviis:997610103865888768> Kişi", value: `${user}`, inline: true },
            { name: "<:hashtag_arviis:1051904217478070276> Sebep", value: reason, inline: true },
            { name: "<a:saat_arviis:1367655591560085535> Süre", value: `${sureDeger} ${birim}`, inline: true }
          );

        await interaction.reply({ embeds: [embed] });

      } catch (err) {
        console.error(err);
        return interaction.reply({
          content: "<a:dikkat_arviis:997074866371039322> **Botun rolü bu kullanıcıya işlem yapacak kadar yüksek olmayabilir.**",
          ephemeral: true
        });
      }

    } else if (subcommand === "kaldır") {
      if (!member.communicationDisabledUntilTimestamp || member.communicationDisabledUntilTimestamp < Date.now()) {
        return interaction.reply({
          content: "<a:dikkat_arviis:997074866371039322> **Bu kişinin aktif bir Timeoutu yok.**",
          ephemeral: true
        });
      }

      try {
        await member.timeout(null);

        const embed = new EmbedBuilder()
          .setAuthor({ name: "TIMEOUT KALDIRILDI", iconURL: guild.iconURL({ dynamic: true }) })
          .setColor(0x57f287)
          .setThumbnail(ikon)
          .setDescription(`${user} **(** ${user.username} **)** adlı kişinin Timeoutu kaldırıldı.`);

        await interaction.reply({ embeds: [embed] });

      } catch (err) {
        console.error(err);
        return interaction.reply({
          content: "<a:dikkat_arviis:997074866371039322> **Botun bu kullanıcı üzerinde işlem yapacak yetkisi olmayabilir.**",
          ephemeral: true
        });
      }
    }
  }
};
 

Konuyu 0 kişi okuyor. (0 kayıtlı üye ve 0 ziyaretçi)

Benzer konular

  • Bilgi