Saya mencoba membuatnya agar ketika seseorang bergabung dengan Saluran Suara, Bot akan menambahkan orang tertentu ke saluran teks dengan izin untuk membaca dan mengirim pesan dan menghapus individu dan izin mereka ketika mereka meninggalkan Saluran Suara. Saya tidak terlalu akrab dengan discord.js jadi saya tidak yakin bagaimana melakukannya.

1
AzureReckoning 31 Mei 2019, 17:27

2 jawaban

Jawaban Terbaik

Pertama dan terpenting, selamat datang di Stack Overflow. Saya harap kami dapat membantu Anda.

Mari kita mulai dengan mendeteksi ketika seorang anggota bergabung dengan saluran suara. Untuk melakukannya, kami dapat mendengarkan klien Anda voiceStateUpdate acara. Selanjutnya, kita dapat membandingkan saluran suara lama dengan yang baru, dan melihat apakah anggota bergabung atau pergi. Terakhir, kita dapat mengubah izin untuk anggota di saluran teks menggunakan GuildChannel.overwritePermissions().

Pembaruan: Beberapa "pasangan" saluran teks dan saluran suara dengan perilaku serupa.

Untuk melakukan ini untuk banyak saluran yang berbeda, Anda dapat mengatur file json untuk menyimpan saluran suara dan saluran teks yang sesuai, dan kemudian mengulangi setiap pasangan, memeriksa apakah situasinya cocok.

channelPairs.json

[
  { "voice": "voiceChannelIDHere", "text": "textChannelIDHere" }
]

index.js

const pairs = require('./channelPairs.json'); // Keep in mind the path may vary

client.on('voiceStateUpdate', (oldMember, newMember) => {
  let oldID;
  let newID;
  if (oldMember.voiceChannel) oldID = oldMember.voiceChannel.id;
  if (newMember.voiceChannel) newID = newMember.voiceChannel.id;

  for (let i = 0; i < pairs.length; i++) {
    const textChannel = newMember.guild.channels.get(pairs[i].text);
    if (!textChannel) {
      console.log('Invalid text channel ID in json.');
      continue;
    }

    const vcID = pairs[i].voice;

    if (oldID !== vcID && newID === vcID) {          // Joined the voice channel.
      textChannel.overwritePermissions(newMember, {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true
      }).catch(console.error);
    } else if (oldID === vcID && newID !== vcID) {   // Left the voice channel.
      textChannel.overwritePermissions(newMember, {
        VIEW_CHANNEL: null,
        SEND_MESSAGES: null
      }).catch(console.error);
    }
  }
});
4
slothiful 31 Mei 2019, 16:06

Oke jadi mari kita lihat DiscordJS API:

Ditemukan di sini.

Seperti yang bisa kita lihat, ada kelas yang disebut "WSEvent" (singkatan dari WebsocketEvent). Kami dapat menggunakan ini untuk mendeteksi ketika pengguna bergabung dengan saluran...

Tetapi kami tidak dapat benar-benar menggunakannya karena tidak ada acara "CHANNEL_JOIN". Jadi sebagai gantinya, kita harus mendengarkan acara voiceStateUpdate atau VOICE_STATUS_UPDATE ini.

Seperti:

// voiceStateUpdate
/* Emitted whenever a user changes voice state - e.g. joins/leaves a channel, mutes/unmutes.
PARAMETER    TYPE             DESCRIPTION
oldMember    GuildMember      The member before the voice state update
newMember    GuildMember      The member after the voice state update    */
client.on("voiceStateUpdate", function(oldMember, newMember){
    console.log(`a user changes voice state`);
  // Here we can just check if newMember is in the channel that we want. Bam.
  if(newMember.voiceChannel.name == 'channelname') {
    // DO SOMETHING.
    myVoiceChannel.overwritePermissions(newMember, {
      SEND_MESSAGES: true
    });
  } else {
    myVoiceChannel.overwritePermissions(newMember, {
      SEND_MESSAGES: null
    });
  }
});

Mari kita kurangi ini:

newMember.voiceChannel - Ini berarti ke saluran mana mereka terhubung.

voiceChannel.name - Dapatkan nama saluran agar kami dapat memeriksanya.

Semoga saya bisa membantu, dan omong-omong, inilah lembar contekan kecil yang rapi yang suka saya gunakan saat mengembangkan bot DiscordJS: https://gist.github.com/koad/316b265a91d933fd1b62dddfcc3ff584

0
FeaturedSpace 31 Mei 2019, 15:43