@getsolara/solara.voice
Version:
Optional voice functionality for @getsolara/solara.js using @discordjs/voice
31 lines (30 loc) • 1.84 kB
JavaScript
const { AudioResource } = require('@discordjs/voice');
module.exports = {
name: "$voiceSetVolume",
description: "Sets the playback volume (0-200). Note: Applies to newly created resources or if an InlineVolumeTransformer is used.",
takesBrackets: true,
execute: async (context, args) => {
if (context.client.voiceInitialized === false) {
return "[Error: $voiceSetVolume requires voice features to be enabled. Ensure @getsolara/solara.voice is installed and configured correctly.]";
}
if (!context.guild) return "[Error: $voiceSetVolume can only be used in a server.]";
if (!args[0]) return "[Error: $voiceSetVolume requires a volume level (0-200)]";
const volumeLevel = parseInt(args[0], 10);
if (isNaN(volumeLevel) || volumeLevel < 0 || volumeLevel > 200) {
return "[Error: Volume for $voiceSetVolume must be a number between 0 and 200]";
}
const guildId = context.guild.id;
context.client.solaraVoiceVolumes = context.client.solaraVoiceVolumes || new Map();
context.client.solaraVoiceVolumes.set(guildId, volumeLevel / 100);
const player = context.client.solaraAudioPlayers?.get(guildId);
if (player && player.state.status === AudioPlayerStatus.Playing && player.state.resource) {
if (player.state.resource.volume) {
player.state.resource.volume.setVolume(volumeLevel / 100);
return `Volume set to ${volumeLevel}%.`;
} else {
return `Volume setting stored (${volumeLevel}%), but current track cannot have volume adjusted dynamically. Will apply to next track if it supports it.`;
}
}
return `Volume setting stored (${volumeLevel}%). Will apply to future playback.`;
}
};