// SPDX-License-Identifier: GPL-3.0-or-later /* Animal Rights Advocates Discord Bot Copyright (C) 2023 Anthony Berg This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ import { Listener } from '@sapphire/framework'; import type { VoiceState } from 'discord.js'; import { checkActive, removeMute } from '#utils/database/vcMute'; export class VCMuteListener extends Listener { public constructor(context: Listener.Context, options: Listener.Options) { super(context, { ...options, event: 'voiceStateUpdate', }); } public async run(oldState: VoiceState, newState: VoiceState) { // Check the user joining the channel if they need to be muted if (oldState.channel === null && newState.channel !== null) { const { member } = newState; if (member === null) { this.container.logger.error('VCMute Listener - GuildMember not found when joining'); return; } // Check if user is already muted if (member.voice.serverMute) { return; } // Check if user is muted on the database if (!await checkActive(member.id)) { return; } // Server mute the user await member.voice.setMute(true); return; } // Check if the user has been unmuted by a mod if (oldState.channel !== null && newState.channel !== null) { const { member } = newState; if (member === null) { this.container.logger.error('VCMute Listener - GuildMember not found when unmuting'); return; } // Check if user is muted on the database if (!await checkActive(member.id)) { return; } // Checks if the user has been unmuted if (oldState.serverMute && !newState.serverMute) { await removeMute(member.id); } } } }