我试图使它这样,当某人加入语音通道,所以机器人将添加特定的人到文本通道的权限,阅读和发送消息,并删除个人和他们的权限,当他们离开语音通道。我对discord.js不是很熟悉,所以我不知道怎么做。
首先,也是最重要的,欢迎使用堆栈溢出。我希望我们能对你有所帮助。
让我们从检测成员何时加入语音通道开始。为此,我们可以监听客户机的VoiceStateUpdate
事件。接下来,我们可以对比一下新旧语音通道,看看成员是加入还是离开。最后,我们可以使用GuildChannel.OverwritePermissions()
更改文本通道中成员的权限。
更新:具有相似行为的文本通道和语音通道的多个“对”。
要对许多不同的通道执行此操作,您可以设置一个json文件来存储语音通道和相应的文本通道,然后遍历每对通道,检查情况是否匹配。
channelpairs.json
[
{ "voice": "voiceChannelIDHere", "text": "textChannelIDHere" }
]
index.js
const pairs = require('./channelPairs.json'); // Keep in mind the path may vary
client.on('voiceStateUpdate', (oldMember, newMember) => {
let oldID;
let newID;
if (oldMember.voiceChannel) oldID = oldMember.voiceChannel.id;
if (newMember.voiceChannel) newID = newMember.voiceChannel.id;
for (let i = 0; i < pairs.length; i++) {
const textChannel = newMember.guild.channels.get(pairs[i].text);
if (!textChannel) {
console.log('Invalid text channel ID in json.');
continue;
}
const vcID = pairs[i].voice;
if (oldID !== vcID && newID === vcID) { // Joined the voice channel.
textChannel.overwritePermissions(newMember, {
VIEW_CHANNEL: true,
SEND_MESSAGES: true
}).catch(console.error);
} else if (oldID === vcID && newID !== vcID) { // Left the voice channel.
textChannel.overwritePermissions(newMember, {
VIEW_CHANNEL: null,
SEND_MESSAGES: null
}).catch(console.error);
}
}
});
好的,让我们来看看DiscordJS API:
在这里发现的。
正如我们所看到的,有一个名为“wsevent”(代表WebsocketEvent)的类。我们可以用它来检测用户何时加入频道。。。
但是我们不能真正使用它,因为没有“channel_join”事件。因此,我们必须侦听此voiceStateUpdate或VOICE_STATUS_UPDATE事件。
像这样:
// voiceStateUpdate
/* Emitted whenever a user changes voice state - e.g. joins/leaves a channel, mutes/unmutes.
PARAMETER TYPE DESCRIPTION
oldMember GuildMember The member before the voice state update
newMember GuildMember The member after the voice state update */
client.on("voiceStateUpdate", function(oldMember, newMember){
console.log(`a user changes voice state`);
// Here we can just check if newMember is in the channel that we want. Bam.
if(newMember.voiceChannel.name == 'channelname') {
// DO SOMETHING.
myVoiceChannel.overwritePermissions(newMember, {
SEND_MESSAGES: true
});
} else {
myVoiceChannel.overwritePermissions(newMember, {
SEND_MESSAGES: null
});
}
});
让我们减少这个:
NewMember.VoiceChannel
-这意味着他们连接到的频道。
voicechannel.name
-获取频道的名称,以便我们检查它。
我希望我能帮上忙,顺便说一下,这里有一个我在开发DiscordJS机器人时喜欢使用的小便条:https://gist.github.com/koad/316b265a91d933fd1b62dddfcc3ff584