GuildMember
GuildMember combines a User with guild-specific data: nickname, role assignments, permission bitfield, and per-guild avatar.
Import
Section titled “Import”import { GuildMember } from "lunibee";import { GuildMember } from "lunibee";Properties
Section titled “Properties”| Property | Type | Description |
|---|---|---|
user |
User |
The underlying Discord user. |
guildId |
string |
Guild this member belongs to. |
nickname |
string | null |
Server nickname, or null if not set. |
roleIds |
string[] |
Array of assigned role snowflake IDs. |
pending |
boolean |
Whether the member is pending membership screening. |
joinedAt |
Date | undefined |
When the member joined the guild. |
permissions |
PermissionsBitField |
Effective permission bitfield. |
avatarHash |
string | null |
Server-specific avatar hash. |
premiumSince |
Date | null |
When they started boosting, or null. |
timedOutUntil |
Date | null |
Timeout expiry, or null if not timed out. |
flags |
number |
Member flags bitfield. |
displayName |
string |
Nickname if set, otherwise user.displayName. |
isTimedOut |
boolean |
true if currently timed out. |
Methods
Section titled “Methods”avatarURL(options?)
Section titled “avatarURL(options?)”Returns the server-specific member avatar URL, falling back to the user’s avatar, or null.
const avatar = member.avatarURL({ size: 128 });const avatar = member.avatarURL({ size: 128 });displayAvatarURL(options?)
Section titled “displayAvatarURL(options?)”Always returns a URL — member avatar → user avatar → default avatar.
const avatar = member.displayAvatarURL({ size: 256 });const avatar = member.displayAvatarURL({ size: 256 });toString()
Section titled “toString()”Returns the Discord user mention string (<@userId>).
Examples
Section titled “Examples”Check permissions before acting
client.on("interactionCreate", async (interaction) => { if (!interaction.isChatInputCommand() || interaction.commandName !== "purge") return; const member = interaction.member; if (!member?.permissions.has(Permission.manageMessages)) { return interaction.reply({ content: "You need Manage Messages.", ephemeral: true }); } // proceed with purge...});client.on("interactionCreate", async (interaction) => { if (!interaction.isChatInputCommand() || interaction.commandName !== "purge") return; const member = interaction.member; if (!member?.permissions.has(Permission.manageMessages)) { return interaction.reply({ content: "You need Manage Messages.", ephemeral: true }); } // proceed with purge...});Member info command
client.on("interactionCreate", async (interaction) => { if (!interaction.isChatInputCommand() || interaction.commandName !== "memberinfo") return; const member = interaction.member; if (!member) return; const embed = new EmbedBuilder() .setTitle(member.displayName) .setThumbnail(member.displayAvatarURL({ size: 128 })) .addFields( { name: "Joined", value: member.joinedAt ? `<t:${Math.floor(member.joinedAt.getTime() / 1000)}:R>` : "Unknown", inline: true }, { name: "Boosting", value: member.premiumSince ? "Yes 💎" : "No", inline: true }, { name: "Timed Out", value: member.isTimedOut ? "Yes ⏱️" : "No", inline: true }, ); await interaction.reply({ embeds: [embed] });});client.on("interactionCreate", async (interaction) => { if (!interaction.isChatInputCommand() || interaction.commandName !== "memberinfo") return; const member = interaction.member; if (!member) return; const embed = new EmbedBuilder() .setTitle(member.displayName) .setThumbnail(member.displayAvatarURL({ size: 128 })) .addFields( { name: "Joined", value: member.joinedAt ? `<t:${Math.floor(member.joinedAt.getTime() / 1000)}:R>` : "Unknown", inline: true }, { name: "Boosting", value: member.premiumSince ? "Yes 💎" : "No", inline: true }, { name: "Timed Out", value: member.isTimedOut ? "Yes ⏱️" : "No", inline: true }, ); await interaction.reply({ embeds: [embed] });});