簡體   English   中英

Bot 未將消息成員添加到頻道 - Discord.JS

[英]Bot doesn't add message member to the channel - Discord.JS

所以,我目前正在為我的機器人開發一個“臨時通道”模塊。 當某個等級的用戶執行!newvc時,機器人會創建一個他們可以使用、添加人員的私人語音頻道,當所有人離開時,它會在一段時間后自動刪除。

一切正常,但我注意到一個錯誤,我找不到它發生的原因。 基本上,當您第一次使用該命令時,一切正常,頻道已創建,您被添加並移至類別。 但是,如果您再次使用它,假設一分鍾后您不會被添加。 該頻道已制作,設置為私人,但您的message.member沒有被添加。 然后它又做了又不做,你明白了嗎?

老實說,我找不到它這樣做的原因,我唯一能想到的就是與 Discord 的 API 有關。

這是我的代碼

        let member = message.member
        user = member.user

            message.delete()
            message.guild.createChannel(`⭐${member.user.username}'s Room`, 'voice', [{

                id: message.guild.id,
                deny: ['CONNECT', 'SPEAK', 'PRIORITY_SPEAKER']

            }]).then(channel => {

                channel.overwritePermissions(member, {
                    CONNECT: true,
                    USE_VAD: true,
                    PRIORITY_SPEAKER: true
                })

                channel.setParent('567718414454358026')

            })

                let privatevc = new Discord.RichEmbed()
                .setDescription(':white_check_mark: Successfully created a voice channel!')
                .setColor(config.green)

                message.channel.send({ embed: privatevc }).then(msg => msg.delete(10000))

僅供參考:我的 Discord.JS 版本是 11.4(由於工作沒時間更新)

首先,前兩行應更改為:

let member = message.member,
    user = message.author;
// or
const { member, author: user } = message;

雖然這不是問題,但在嚴格模式下會導致錯誤,因為從技術上講,您在user = member.user前面沒有變量關鍵字。 如果您不打算更改變量的值,則應該嘗試使用 const。 請注意, message.authormessage.member.user相同。

其次,不推薦在Guild#createChannel中使用permissionOverwrites參數(參見https://discord.js.org/#/docs/main/v11/class/Guild?scrollTo=createChannel )。 我知道 Discord.JS 已經廢除了許多東西,盡管他們說“已棄用”。 嘗試使用typeOrOptions參數來創建具有適當覆蓋的通道。 這是我建議的代碼:

(async () => {
  message.delete();
  message.guild.createChannel(`⭐ ${message.author.username}'s Room`, {
    type: 'voice',
    parent: '567718414454358026',
    permissionOverwrites: [{
      id: message.guild.id, // @everyone has the ID of the guild
      deny: ['VIEW_CHANNEL', 'CONNECT'],
    }, {
      id: message.author.id, // attach the permission overrides for the user directly here
      allow: ['VIEW_CHANNEL', 'CONNECT', 'USE_VAD', 'PRIORITY_SPEAKER']
    }]
  });
  const embed = new Discord.RichEmbed()
                .setDescription(':white_check_mark: Successfully created a voice channel!')
                .setColor(config.green);
  const sentMessage = await message.channel.send(embed);
  sentMessage.delete(10 * 1000);
})();

我發現了這個問題。 基本上,因為用戶是在創建頻道添加的,所以 Discord API 正在失去它(或者什么,這些只是我的猜測)。

改成這樣后:

            message.guild.createChannel(`⭐${member.user.username}'s Room`, 'voice', [{

                id: message.guild.id,
                deny: ['CONNECT', 'SPEAK', 'PRIORITY_SPEAKER']

            }, {

                id: message.author.id,
                allow: ['CONNECT', 'SPEAK', 'PRIORITY_SPEAKER']

            }])

一切都恢復正常。 謝謝 PiggyPlex。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM