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
a4093f0
main
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 > { 5for ( let attempt = 0 ; ; attempt ++ ) { 6try { 7return await operation () 8} catch ( error ) { 9const 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 ) 13if ( ! transient || attempt >= 4 ) throw error 14const wait = 1000 * 2 ** attempt 15console . warn ( ` ${ label } : transient Discord request failure; retrying in ${ wait / 1000 } s` , error ) 16await timers . setTimeout ( wait ) 17} 18} 19}