提问者:小点点

Bot不向通道添加消息成员-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(由于工作原因,没时间更新)


共1个答案

匿名用户

首先,前2行应改为:

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

虽然这不是一个问题,但在严格模式下,它将导致一个错误,因为从技术上讲,在user=member.user前面没有一个variable关键字。 如果不想更改变量的值,应该尝试使用const。 注意,message.authormessage.member.user相同。

其次,不推荐使用guild#createchannel中的permissionoverwrites参数(请参阅https://discord.js.org/#/docs/main/v11/class/guild?scrollto=createchannel)。 我知道discord.js已经废除了许多东西,尽管它们说“deprecated”。 尝试使用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);
})();