char-slop/city-role-bot

discord auto role applicator bot for charlotte polycule city

git clone https://git.t4t.associates/char-slop/city-role-bot

Charlotte Somadd starboarda4093f0

main
817 B19 linesraw
1import timers from 'node:timers/promises'
2import { DiscordHTTPError, DiscordRESTError } from 'oceanic.js'
3
4export async function retryDiscord<T>(operation: () => Promise<T>, label: string): Promise<T> {
5  for (let attempt = 0; ; attempt++) {
6    try {
7      return await operation()
8    } catch (error) {
9      const transient =
10        (error instanceof TypeError && error.message === 'fetch failed') ||
11        (error instanceof Error && error.name === 'AbortError') ||
12        ((error instanceof DiscordHTTPError || error instanceof DiscordRESTError) && error.status >= 500)
13      if (!transient || attempt >= 4) throw error
14      const wait = 1000 * 2 ** attempt
15      console.warn(`${label}: transient Discord request failure; retrying in ${wait / 1000}s`, error)
16      await timers.setTimeout(wait)
17    }
18  }
19}