Parse duration strings for /fseek and /seek (#565)

This commit is contained in:
Max Isom 2022-03-13 18:30:36 -04:00 committed by GitHub
parent 03d5cfffd1
commit 6c00727a4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 58 additions and 13 deletions

View file

@ -5,15 +5,16 @@ import {inject, injectable} from 'inversify';
import PlayerManager from '../managers/player.js';
import Command from '.';
import {prettyTime} from '../utils/time.js';
import durationStringToSeconds from '../utils/duration-string-to-seconds.js';
@injectable()
export default class implements Command {
public readonly slashCommand = new SlashCommandBuilder()
.setName('fseek')
.setDescription('seek forward in the current song')
.addNumberOption(option => option
.setName('seconds')
.setDescription('the number of seconds to skip forward')
.addStringOption(option => option
.setName('time')
.setDescription('an interval expression or number of seconds (1m, 30s, 100)')
.setRequired(true));
public requiresVC = true;
@ -37,12 +38,14 @@ export default class implements Command {
throw new Error('can\'t seek in a livestream');
}
const seekTime = interaction.options.getNumber('seconds');
const seekValue = interaction.options.getString('value');
if (!seekTime) {
throw new Error('missing number of seconds to seek');
if (!seekValue) {
throw new Error('missing seek value');
}
const seekTime = durationStringToSeconds(seekValue);
if (seekTime + player.getPosition() > currentSong.length) {
throw new Error('can\'t seek past the end of the song');
}