DiscordJS: как выбрать случайного пользователя в текущем канале, который подключен к Сети?

#node.js #discord.js

#node.js #discord.js

Вопрос:

В Discord.js версию 12 я использую message.channel.members.random().toString() для получения случайного имени пользователя в текущем канале. Но я хочу это только для участников, которые имеют статус «Онлайн» в текущем канале. Не участники со статусом присутствия dnd, бездействующие или автономные.

Всех пользователей, которые находятся в Сети, можно запросить следующим образом для всего сервера (чего я не хочу) и выбрать случайное имя пользователя для упоминания. message.guild.members.cache.filter(member => member.presence.status == 'online').random().toString()

message.channel.members не имеют информации о статусе присутствия (онлайн, оффлайн, dnd, idle).

[{«guildID»:»12…89″,»joinedTimestamp»:12…89,»lastMessageChannelID»:null,»premiumSinceTimestamp»:null,»deleted»:false,»nickname»:null,»userID»:»12…89″,»displayName»:»Nickname»}]

Как я могу получить имя (упоминание) случайно выбранного участника со статусом присутствия «онлайн» в текущем канале?

Источник https://discordjs.guide /

Ответ №1:

Вы можете сделать это, отфильтровав статус пользователей, которые могут просматривать канал.

 message.channel.members.filter(member => member.presence.status == 'online').random()
 

channel.members имеет тип Collection<Snowflake, GuildMember> , поэтому вы можете получить доступ к данным о присутствии внутри GuildMember .

Комментарии:

1. Как мне не стыдно, я попробовал это с помощью «cache» message.channel.members.cache. фильтр (..) и сбой. Решение было так близко. 😉