mirror of
https://github.com/jaronpate/unicord.git
synced 2026-10-18 21:47:40 +00:00
Some build proccess stuff
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { exists, log } from "../utils";
|
||||
import type { Client } from "./client";
|
||||
|
||||
export class API {
|
||||
@@ -32,6 +33,30 @@ export class API {
|
||||
// console.log(`API Body: ${JSON.stringify(data, null, 4)}`);
|
||||
// console.log('API Response:', JSON.stringify(body, null, 4));
|
||||
|
||||
// Extract rate limit headers
|
||||
const remaining = response.headers.get('X-RateLimit-Remaining');
|
||||
const limit = response.headers.get('X-RateLimit-Limit');
|
||||
const reset = response.headers.get('X-RateLimit-Reset');
|
||||
const resetSeconds = response.headers.get('X-RateLimit-Reset-After');
|
||||
const limitBucket = response.headers.get('X-RateLimit-Bucket');
|
||||
|
||||
// Log rate limit info for debugging
|
||||
log(`Rate Limit: ${remaining}/${limit} - Reset: ${reset} (${resetSeconds}s) - Bucket: ${limitBucket}`);
|
||||
|
||||
// If status is 429, we are being rate limited
|
||||
if (response.status === 429) {
|
||||
// Look for the retry-after header
|
||||
const retryAfter = response.headers.get('Retry-After');
|
||||
if (exists(retryAfter)) {
|
||||
// Wait for the retry-after time
|
||||
await new Promise(resolve => setTimeout(resolve, parseInt(retryAfter) * 1000));
|
||||
} else {
|
||||
// TODO: Handle this case better
|
||||
// Maybe wait some arbitrary time??
|
||||
throw new Error('Rate limited without Retry-After header');
|
||||
}
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,11 +38,14 @@ export async function hydrate<T extends Hydrateable | Hydrated<any, any>, K exte
|
||||
|
||||
if (data instanceof Context) {
|
||||
for (const expectation of expectations) {
|
||||
if (expectation === Expectation.Guild && exists(data.guild_id)) {
|
||||
if (expectation === Expectation.Message && exists(data.message_id)) {
|
||||
let context = data as unknown as HydratedContext<[Expectation.Message, ...Expectation[]]>;
|
||||
context.message = await client.messages.get(data.channel_id, data.message_id);
|
||||
} else if (expectation === Expectation.Guild && exists(data.guild_id)) {
|
||||
let context = data as unknown as HydratedContext<[Expectation.Guild, ...Expectation[]]>;
|
||||
context.guild = await client.guilds.get(data.guild_id);
|
||||
} else {
|
||||
throw new Error(`Could not resolve expectation: ${expectation}`);
|
||||
throw new Error(`Invalid expectation requested for Context: ${expectation}`);
|
||||
}
|
||||
}
|
||||
} else if (data instanceof Message) {
|
||||
@@ -54,7 +57,7 @@ export async function hydrate<T extends Hydrateable | Hydrated<any, any>, K exte
|
||||
let message = data as unknown as HydratedMessage<[Expectation.Guild, ...Expectation[]]>;
|
||||
message.guild = await client.guilds.get(data.guild_id);
|
||||
} else {
|
||||
throw new Error(`Could not resolve expectation: ${expectation}`);
|
||||
throw new Error(`Invalid expectation requested for Message: ${expectation}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user