Is there a difference between GuildMemberManager.resolve() and Guild.member() in discord.js?

Tags: , , ,



Guild.member() returns the GuildMember form of a User object, if the user is present in the guild. It takes a UserResolvable as a parameter (user ID or object).

GuildMemberManager resolves a GuildMemberResolvable to a GuildMember object. What confused me is that a GuildMemberResolvable can be either a GuildMember object or a UserResolvable.

First of all, why would anybody need to convert a GuildMember object into a GuildMember object?

Seconds of all, besides the option of resolving a GuildMember object as well as a UserResolvable, is there any difference between the two methods? They look exactly the same to me.

const user = message.mentions.users.first(); // a user object
const guild = message.client.guilds.cache.get('Guild ID'); // a guild object

guild.member(user); // a guildmember object
guild.members.resolve(user); // also a guildmember object

Answer

The two methods are identical.

The source for Guild#member shows that it simply calls GuildMemberManager#resolve:

  member(user) {
    return this.members.resolve(user);
  }

UserResolvable and GuildMemberResolvable are also the same. UserResolvable can be a User, Snowflake, Message, or GuildMember; and a GuildMemberResolvable can be a GuildMember or UserResolvable. In this way, the type GuildMemberResolvable is essentially redundant and could be substituted for UserResolvable.

// Using TypeScript syntax to show the types
type UserResolvable = User | Snowflake | Message | GuildMember

// same as GuildMember | User | Snowflake | Message
type GuildMemberResolvable = GuildMember | UserResolvable


Source: stackoverflow