Tweaks to !server numbers. Try to prevent unnecessary API calls.

!server can now also use numbers from the invite of servers with
a vanity URL.

API calls for the invite and the REST guild endpoint are now memoized.

Since Guild.fetchAllMembers() now returns a promise, tweaked
refreshMembersIfNeeded() to not make unnecessary API calls if called
multiple times in rapid succession.
This commit is contained in:
Dragory 2020-01-21 00:24:04 +02:00
parent ba647c69ce
commit 6a5e71d7c1
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
2 changed files with 61 additions and 9 deletions

View file

@ -1049,3 +1049,30 @@ const formatter = new Intl.NumberFormat("en-US");
export function formatNumber(numberToFormat: number): string {
return formatter.format(numberToFormat);
}
interface IMemoizedItem {
createdAt: number;
value: any;
}
const memoizeCache: Map<any, IMemoizedItem> = new Map();
export function memoize<T>(fn: (...args: any[]) => T, key?, time?): T {
const realKey = key ?? fn;
if (memoizeCache.has(realKey)) {
const memoizedItem = memoizeCache.get(realKey);
if (!time || memoizedItem.createdAt > Date.now() - time) {
return memoizedItem.value;
}
memoizeCache.delete(realKey);
}
const value = fn();
memoizeCache.set(realKey, {
createdAt: Date.now(),
value,
});
return value;
}