javascript - 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(由于工作,没有时间更新它)
解决方案
首先,前两行应更改为:
let member = message.member,
user = message.author;
// or
const { member, author: user } = message;
虽然这不是问题,但在严格模式下会导致错误,因为从技术上讲,您在user = member.user
. 如果您不打算更改变量的值,则应该尝试使用 const。请注意,message.author
与 相同message.member.user
。
其次,不推荐使用permissionOverwrites
arg in Guild#createChannel
(请参阅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);
})();
推荐阅读
- html - 如何将 FullCalendar 插件移动到中心?
- python - 无法运行 flask-assistant python 库的示例
- java - IntelliJ IDEA 未显示任何端点选项卡:“无法检索应用程序 JMX 服务 URL”
- c# - Ajax 调用向控制器发送错误数据
- sapui5 - 完全隐藏 SideNavigation
- python - Facebook POST 请求失败
- routing - TYPO3 路由多域 slug 是 /1
- laravel - 在 laravel 中使用带有分页的表单的多个复选框过滤器
- symfony4 - 在渲染模板期间引发了异常(“资产清单文件“../manifest.json”不存在。”)
- tableau-api - 保持多个区域图宽度固定