diff --git a/src/adaptor/discord/member-stats.ts b/src/adaptor/discord/member-stats.ts index 7dadf7b2..c0bebb27 100644 --- a/src/adaptor/discord/member-stats.ts +++ b/src/adaptor/discord/member-stats.ts @@ -20,16 +20,16 @@ export class DiscordMemberStats async allMemberCount(): Promise { const guild = await this.client.guilds.fetch(this.guildId); - if (!guild) { - throw new Error('guild not found'); + if (!guild.available) { + throw new Error('guild unavailable'); } return guild.memberCount; } async botMemberCount(): Promise { const guild = await this.client.guilds.fetch(this.guildId); - if (!guild) { - throw new Error('guild not found'); + if (!guild.available) { + throw new Error('guild unavailable'); } const guildMemberList = await guild.members.list({ limit: 1000 }); return guildMemberList.filter((member) => member.user.bot).size; @@ -37,8 +37,8 @@ export class DiscordMemberStats async fetchMembersWithRole(): Promise { const guild = await this.client.guilds.fetch(this.guildId); - if (!guild) { - throw new Error('guild not found'); + if (!guild.available) { + throw new Error('guild unavailable'); } const guildMemberList = await guild.members.list({ limit: 1000 }); return guildMemberList.map(({ displayName, roles }) => ({ @@ -49,6 +49,9 @@ export class DiscordMemberStats async fetchStats(userId: string): Promise { const guild = await this.client.guilds.fetch(this.guildId); + if (!guild.available) { + throw new Error('guild unavailable'); + } const member = await guild.members.fetch(userId); if (!member) { return null; diff --git a/src/adaptor/discord/role.ts b/src/adaptor/discord/role.ts index f3008c9d..65d30a02 100644 --- a/src/adaptor/discord/role.ts +++ b/src/adaptor/discord/role.ts @@ -15,6 +15,9 @@ export class DiscordRoleManager implements RoleManager, RoleStatsRepository { async addRole(targetMember: Snowflake, newRoleId: Snowflake): Promise { const guild = await this.client.guilds.fetch(this.guildId); + if (!guild.available) { + throw new Error('guild unavailable'); + } const member = await guild.members.fetch(targetMember); await member.roles.add(newRoleId); } @@ -24,12 +27,18 @@ export class DiscordRoleManager implements RoleManager, RoleStatsRepository { removingRoleId: Snowflake ): Promise { const guild = await this.client.guilds.fetch(this.guildId); + if (!guild.available) { + throw new Error('guild unavailable'); + } const member = await guild.members.fetch(targetMember); await member.roles.remove(removingRoleId); } async fetchStats(roleId: string): Promise { const guild = await this.client.guilds.fetch(this.guildId); + if (!guild.available) { + throw new Error('guild unavailable'); + } const role = await guild.roles.fetch(roleId); if (!role) { return null; diff --git a/src/adaptor/discord/voice.ts b/src/adaptor/discord/voice.ts index 1114b133..90f30a6a 100644 --- a/src/adaptor/discord/voice.ts +++ b/src/adaptor/discord/voice.ts @@ -38,9 +38,10 @@ export class DiscordVoiceConnectionFactory guildId: Snowflake, roomId: Snowflake ): Promise> { - const guild = - this.client.guilds.cache.get(guildId) || - (await this.client.guilds.fetch(guildId)); + const guild = await this.client.guilds.fetch(guildId); + if (!guild.available) { + throw new Error('guild unavailable'); + } const channel = guild.channels.cache.get(roomId) || (await guild.channels.fetch(roomId)); if (!channel) {