Skip to content

Commit

Permalink
fix: Username
Browse files Browse the repository at this point in the history
  • Loading branch information
GeekCornerGH committed Jan 17, 2025
1 parent 05f2d0d commit df3b63a
Showing 1 changed file with 44 additions and 12 deletions.
56 changes: 44 additions & 12 deletions src/utils/getUsername.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,45 @@
import { Client, Snowflake } from "discord.js";

export async function getUsername(client: Client, guildId: Snowflake, memberId: Snowflake) {
let guild = client.guilds.cache.get(guildId);
if (!guild) guild = await client.guilds.fetch(guildId);
let member = guild.members.cache.get(memberId);
if (!member) member = await guild.members.fetch(memberId);
if (member) return member.displayName;
let user = client.users.cache.get(memberId);
if (!user) user = await client.users.fetch(memberId);
if (!user) return "<Unknown player>";
return user.displayName;
import { Client, DiscordAPIError, Guild, GuildMember, Snowflake, } from "discord.js";

const nonExistentMemberCache = new Map<Snowflake, boolean>();
const CACHE_DURATION = 30000; // 30 seconds

export async function getUsername(client: Client, guildId: Snowflake, memberId: Snowflake): Promise<string> {
try {
// Fetch guild
const guild = client.guilds.cache.get(guildId) || await client.guilds.fetch(guildId);

// Check if member is cached as non-existent
if (nonExistentMemberCache.has(memberId)) {
return await fetchUserDisplayName(client, memberId);
}

// Attempt to fetch member
try {
const member = await fetchMember(guild, memberId);
return member.displayName;
} catch (memberError) {
if ((memberError as DiscordAPIError).code === 10007) { // Unknown member error
nonExistentMemberCache.set(memberId, true);
setTimeout(() => nonExistentMemberCache.delete(memberId), CACHE_DURATION);
}
return await fetchUserDisplayName(client, memberId);
}
} catch (error) {
console.error("Error in getUsername:", error);
return "<Unknown player>";
}
}

async function fetchMember(guild: Guild, memberId: Snowflake): Promise<GuildMember> {
return guild.members.cache.get(memberId) || await guild.members.fetch(memberId);
}

async function fetchUserDisplayName(client: Client, userId: Snowflake): Promise<string> {
try {
const user = client.users.cache.get(userId) || await client.users.fetch(userId);
return user.displayName;
} catch (error) {
console.error("Error fetching user:", error);
return "<Unknown player>";
}
}

0 comments on commit df3b63a

Please sign in to comment.