use of net.robinfriedli.aiode.exceptions.InvalidCommandException in project aiode by robinfriedli.
the class PlayCommand method doRun.
@Override
public void doRun() throws Exception {
CommandContext context = getContext();
Guild guild = context.getGuild();
VoiceChannel channel = context.getVoiceChannel();
AudioManager audioManager = Aiode.get().getAudioManager();
MessageChannel messageChannel = getContext().getChannel();
AudioPlayback playbackForGuild = audioManager.getPlaybackForGuild(guild);
playbackForGuild.setCommunicationChannel(messageChannel);
if (getCommandInput().isBlank()) {
if (playbackForGuild.isPaused() || !audioManager.getQueue(guild).isEmpty()) {
audioManager.startOrResumePlayback(guild, channel);
} else {
throw new InvalidCommandException("Queue is empty. Specify a song you want to play.");
}
} else {
super.doRun();
}
}
use of net.robinfriedli.aiode.exceptions.InvalidCommandException in project aiode by robinfriedli.
the class ReverseCommand method doRun.
@Override
public void doRun() {
AudioPlayback playback = Aiode.get().getAudioManager().getPlaybackForGuild(getContext().getGuild());
AudioTrack playingTrack = playback.getAudioPlayer().getPlayingTrack();
if (playingTrack == null) {
throw new InvalidCommandException("No track is being played at the moment");
}
long toReverseMs;
try {
if (argumentSet("minutes")) {
toReverseMs = Integer.parseInt(getCommandInput()) * 60000;
} else {
toReverseMs = Integer.parseInt(getCommandInput()) * 1000;
}
} catch (NumberFormatException e) {
throw new InvalidCommandException("'" + getCommandInput() + "' is not convertible to type integer. " + "Please enter a valid number.");
}
if (toReverseMs <= 0) {
throw new InvalidCommandException("Expected 1 or greater");
}
long newPosition = playback.getCurrentPositionMs() - toReverseMs;
if (newPosition < 0) {
throw new InvalidCommandException("New position less than 0");
}
playback.setPosition(newPosition);
}
use of net.robinfriedli.aiode.exceptions.InvalidCommandException in project aiode by robinfriedli.
the class RewindCommand method doRun.
@Override
public void doRun() {
AudioManager audioManager = Aiode.get().getAudioManager();
Guild guild = getContext().getGuild();
AudioPlayback playback = audioManager.getPlaybackForGuild(guild);
AudioQueue queue = playback.getAudioQueue();
VoiceChannel channel = getContext().getVoiceChannel();
if (!queue.hasPrevious()) {
throw new InvalidCommandException("No previous item in queue");
}
int queueSize = queue.getTracks().size();
if (getCommandInput().isBlank()) {
queue.reverse();
} else {
int offset;
try {
offset = Integer.parseInt(getCommandInput());
} catch (NumberFormatException e) {
throw new InvalidCommandException(getCommandInput() + " is not an integer");
}
if (offset < 1) {
throw new InvalidCommandException("Expected a number grater than 0");
}
boolean deficient = queue.getPosition() - offset < 0;
int newIndex;
if (!playback.isRepeatAll() && deficient) {
newIndex = 0;
} else if (deficient) {
// if the current index is 20 with 50 tracks in the queue and the user wants to rewind 24, the result should be 46
int provisional = queue.getPosition() - offset;
int page = provisional / queueSize * (-1) + 1;
newIndex = page * queueSize + provisional;
} else {
newIndex = queue.getPosition() - offset;
}
queue.setPosition(newIndex);
}
audioManager.startPlayback(guild, channel);
}
use of net.robinfriedli.aiode.exceptions.InvalidCommandException in project aiode by robinfriedli.
the class SkipCommand method doRun.
@Override
public void doRun() {
AudioManager audioManager = Aiode.get().getAudioManager();
Guild guild = getContext().getGuild();
AudioPlayback playback = audioManager.getPlaybackForGuild(guild);
AudioQueue queue = playback.getAudioQueue();
VoiceChannel channel = getContext().getVoiceChannel();
if (!queue.hasNext()) {
throw new InvalidCommandException("No next item in queue");
}
if (getCommandInput().isBlank()) {
queue.iterate();
} else {
int offset;
try {
offset = Integer.parseInt(getCommandInput());
} catch (NumberFormatException e) {
throw new InvalidCommandException(getCommandInput() + " is not an integer");
}
if (offset < 1) {
throw new InvalidCommandException("Expected a number greater than 0");
}
int newIndex;
int queueSize = queue.getTracks().size();
boolean overflow = queue.getPosition() + offset >= queueSize;
if (!playback.isRepeatAll() && overflow) {
newIndex = queueSize - 1;
} else if (overflow) {
// if the current index is 30 with 50 tracks in the queue and the user wants to skip 24, the result should be 4
// if the user wants to skip 20, the result be 0
int provisional = queue.getPosition() + offset;
int page = provisional / queueSize;
newIndex = provisional - (page * queueSize);
} else {
newIndex = queue.getPosition() + offset;
}
queue.setPosition(newIndex);
}
audioManager.startPlayback(guild, channel);
}
use of net.robinfriedli.aiode.exceptions.InvalidCommandException in project aiode by robinfriedli.
the class VolumeCommand method doRun.
@Override
public void doRun() {
AudioPlayback playback = Aiode.get().getAudioManager().getPlaybackForGuild(getContext().getGuild());
int volume;
try {
volume = Integer.parseInt(getCommandInput());
} catch (NumberFormatException e) {
throw new InvalidCommandException("'" + getCommandInput() + "' is not an integer");
}
if (!(volume > 0 && volume <= 200)) {
throw new InvalidCommandException("Expected a value between 1 and 200");
}
playback.setVolume(volume);
}
Aggregations