Бот не добавляет участника сообщения в канал - Discord. JS - PullRequest
2 голосов
/ 17 июня 2020

Итак, сейчас я работаю над модулем «временные каналы» для своего бота. Когда пользователь с определенным рангом делает !newvc, бот создает частный голосовой канал, который они могут использовать, добавлять людей, и когда все уходят, он автоматически удаляется через некоторое время.

Все работало нормально. , но я заметил ошибку, из-за которой я не могу найти причину, по которой это происходит. По сути, когда вы впервые используете команду, все работает нормально, канал создается, вас добавляют, и он перемещается в категорию. Но если вы воспользуетесь им снова, допустим, через минуту вас не добавят. Канал создан, установлен как частный, но вы message.member не добавляете. Затем он снова работает и нет. Вы правильно поняли?

Я, честно говоря, не могу найти причину, по которой он это делает, и единственное, что я могу придумать, это что-то сделать с API Discord.

Вот мой код

        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))

FYI: My Discord. JS версия - 11.4 (не успел обновить, из-за работы)

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

Во-первых, первые 2 строки должны быть изменены на:

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

, поскольку, хотя это не проблема, в строгом режиме это вызовет ошибку, поскольку технически у вас нет ключевого слова переменной в перед user = member.user. Вам следует попробовать использовать const, если вы не собираетесь изменять значения переменных. Обратите внимание, что message.author совпадает с message.member.user.

Во-вторых, использование permissionOverwrites arg в Guild#createChannel устарело (см. https://discord.js.org/# / docs / main / v11 / class / Гильдия? 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 голос
/ 17 июня 2020

Я нашел проблему. По сути, из-за того, что пользователь был добавлен после , канал был создан, 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.

...