Discord.JS:如何获得公会的第一个渠道?

时间:2019-10-12 21:49:25

标签: node.js discord.js

我正在创建Discord机器人。我想通过公会ID创建邀请。创建邀请需要一个渠道。我想让机器人选择第一个频道。我该怎么办?

我用了这个但是没用:

guild.channels[Object.keys(guild.channels)[0]]
//returns undefined

5 个答案:

答案 0 :(得分:2)

对于v12尝试

var chx = guild.channels.cache.filter(chx => chx.type === "text").find(x => x.position === 0);

答案 1 :(得分:1)

如果您首先要按位置表示,则可以使用公会渠道集合按类型和位置向上查找渠道。

const channel = guild.channels.filter(c => c.type === 'text').find(x => x.position == 0);

答案 2 :(得分:0)

我不清楚第一个频道的意思,但是您可以使用

const randomChannel = (guild) => {
    guild.channels.random().then(channel => {
        if (channel.type === 'text') return channel;
        else return randomChannel(guild);
    }
}

答案 3 :(得分:0)

要获得创建邀请的渠道,您应该只能使用Bot拥有权限的邀请,例如:

 const invitechannels = guild.channels.filter(c=> c.permissionsFor(guild.me).has('CREATE_INSTANT_INVITE'));
 invitechannels.random().createInvite()
     .then(invite=> console.log('Create Invite:\n' + invite.code))

或者,您也可以检查现有邀请:

guild.fetchInvites()
    .then(invites => console.log('Found Invites:\n' + invites.map(invite => invite.code).join('\n')))

答案 4 :(得分:0)

每个频道都有一个calculatedPosition属性,您可以使用该属性获取第一个频道。

const channel = Array.from(guild.channels).sort((a,b) => a.calculatedPosition - b.calculatedPosition)[0];

好的,让我们分解一下上面代码中发生的事情:

Array.from(guild.channels) //returns an Array of GuildChannels (Textchannels and Voicechannels)
.sort((a,b) => a.calculatedPosition - b.calculatedPosition) //sorts the elements in the collection by their calculatedPosition property in ascending order and returns the array
[0] //returns the first element of the array