make errors recoverable

This commit is contained in:
Matthieu Jolimaitre 2024-02-05 19:26:33 +01:00
parent 09e05c5c53
commit d6b3b6830a
2 changed files with 9 additions and 5 deletions

View file

@ -61,8 +61,11 @@ export class EpitlsBot {
if (member === undefined) return;
const role = await guild.roles.fetch(role_id);
if (role === null) return console.error("Role", role_id, "not found in guild", guild_id);
member.roles.add(role_id);
log(`Assigned to user '${member.displayName}' role '${role.name}'.`);
log(`Assigning to user '${member.displayName}' role '${role.name}'.`);
await try_(
() => member.roles.add(role_id),
() => log(`FAILED Assignation to user '${member.displayName}' role '${role.name}'.`),
);
}
public async update_user_name(user_id: string, must_contain: string, default_suffix: string) {
@ -75,7 +78,7 @@ export class EpitlsBot {
const generated_name_prefix = name.slice(0, DISCORD_MAX_NAME_LENGTH - default_suffix.length);
const generated_name = generated_name_prefix + default_suffix;
log(`Setting name of '${name}' to '${generated_name}'.`);
await try_(async () => await user.setNickname(generated_name));
await try_(() => user.setNickname(generated_name), () => log(`FAILED Setting name of '${name}'.`));
}
}

View file

@ -123,10 +123,11 @@ export function* reverse<T>(items: Iterable<T>) {
for (const item of collected.reverse()) yield item;
}
export async function try_<T>(f: () => Promise<T> | T) {
export async function try_<T>(operation: () => Promise<T> | T, recovery: () => Promise<void> | void = () => {}) {
try {
return await f();
return await operation();
} catch (_) {
await recovery();
return undefined;
}
}