Bot不会将消息成员添加到频道-Discord.JS

时间:2020-06-17 12:39:38

标签: javascript node.js discord 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(由于工作原因,没有时间对其进行更新)

2 个答案:

答案 0 :(得分:3)

首先,前两行应更改为:

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

虽然这不是问题,但在严格模式下,由于您在技术上在user = member.user前面没有变量关键字,因此它将导致错误。如果您不打算更改变量的值,则应尝试使用const。请注意,message.authormessage.member.user相同。

第二,不建议使用permissionOverwrites中的Guild#createChannel arg(请参见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);
})();

答案 1 :(得分:1)

我发现了问题。基本上,由于在创建频道后 添加了用户,因此Discord API丢失了该频道(或某些,这只是我的猜测atm)。

将其更改为此:

            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。