forked from sunnniee/Buno
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
05f2d0d
commit df3b63a
Showing
1 changed file
with
44 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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>"; | ||
} | ||
} |