javascript - 机器人不会将消息成员添加到 channel - Discord.JS

标签 javascript node.js discord discord.js

所以,我目前正在为我的机器人开发“临时 channel ”模块。当具有一定等级的用户执行 !newvc 时,机器人会创建一个他们可以使用的私有(private)语音 channel ,添加人员,当每个人都离开时,它会在一段时间后自动删除。

一切工作正常,但我注意到一个错误,我找不到它发生的原因。基本上,当您第一次使用该命令时,一切正常, channel 已创建,您将被添加,并将其移至类别。但如果您再次使用它,假设一分钟后您就没有被添加。该 channel 已创建,设置为私有(private),但您的 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 参数来创建具有适当覆盖的 channel 。 这是我建议的代码:

(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);
})();

关于javascript - 机器人不会将消息成员添加到 channel - Discord.JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62429230/

相关文章:

javascript - 我们构建时刻时区的方式有什么区别?

javascript - 如何在 NodeJS 中解析 CSV 文件

javascript - Nodejs - 防止 socket.io 降低帧速率

go - 我应该如何在 golang 中编码用于 Google Voice 识别的音频流?

python - Discord Bot 中的 AFK 功能

python - on_message 事件的 Discord py Cog 问题,不起作用

javascript - Electron JavaScript 未捕获类型错误 : Cannot read property 'on' of undefined

php - 如何使用 PHP 从 HTML 文档中去除所有 javascript?

javascript - 带有干扰 slider 的 cmsplugin 类的 django-cms div 标签

node.js - NodeJS + ExpressJS 等待 2 分钟再发送 .js 文件