Home > OS >  Discord JS: Extracting data from a collection
Discord JS: Extracting data from a collection

Time:03-13

I have a command where I want to write the id of a user in a voice channel into an array. So far, I managed to write the whole collection of the user with joinedTimestamp etc. Now I want to extract the id of the user from the collection.

My command looks like this:

client.on('messageCreate', (message) => {
    let waitingroom = message.guild.channels.cache.get("952324088762867722")
    let player = [];
    let isadmin = message.member.roles.cache.has(adminRole);

    if (message.content.toLowerCase() === prefix   'startgame' && isadmin) {
        player.push(waitingroom.members);
        console.log(player);
    }    
});

And this is what I get from the array when 2 users are in the waitingroom:

[
  Collection(2) [Map] {
    '392776445375545355' => GuildMember {
      guild: [Guild],
      joinedTimestamp: 1646940658665,
      premiumSinceTimestamp: null,
      nickname: null,
      pending: false,
      communicationDisabledUntilTimestamp: null,
      _roles: [Array],
      user: [User],
      avatar: null
    },
    '849388169614196737' => GuildMember {
      guild: [Guild],
      joinedTimestamp: 1647168003344,
      premiumSinceTimestamp: null,
      nickname: 'Test-Account [Nils]',
      pending: false,
      communicationDisabledUntilTimestamp: null,
      _roles: [],
      user: [User],
      avatar: null
    }
  }
]

But I only want the user ids from the collection. I appreciate any help.

CodePudding user response:

Better solution, see accepted answer.

First you need to create a variable with an empty array.
Then you can use the .map function of the member Collection to push the user id's to the array.

let arr = [];
<Channel>.members.map(user => {
    arr.push(user.id);
});

CodePudding user response:

The accepted answer is a bit verbose. Collection#map() returns an array and accepts a callback function, so all you have to do is to iterate over the members and return their ids:

let waitingRoom = message.guild.channels.cache.get('952324088762867722')
let memberIDs = waitingRoom.members.map(member => member.id)

Now, memberIDs is an array of the snowflakes/IDs of the members. No need to create a new array or use the push method. Actually, you should never really use map with push or other methods that mutate arrays.

  • Related