我正在创建Discord机器人。我想通过公会ID创建邀请。创建邀请需要一个渠道。我想让机器人选择第一个频道。我该怎么办?
我用了这个但是没用:
guild.channels[Object.keys(guild.channels)[0]]
//returns undefined
答案 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