Allow skipping multiple tracks

This commit is contained in:
Max Isom 2021-04-23 12:30:31 -04:00
parent 531da56dd0
commit 5d92d4ed54
No known key found for this signature in database
GPG key ID: 25C9B1A7F6798880
3 changed files with 19 additions and 10 deletions

View file

@ -11,7 +11,8 @@ export default class implements Command {
public name = 'skip';
public aliases = ['s'];
public examples = [
['skip', 'skips the current song']
['skip', 'skips the current song'],
['skip 2', 'skips the next 2 songs']
];
public requiresVC = true;
@ -22,14 +23,22 @@ export default class implements Command {
this.playerManager = playerManager;
}
public async execute(msg: Message, _: string []): Promise<void> {
public async execute(msg: Message, args: string []): Promise<void> {
let numToSkip = 1;
if (args.length === 1) {
if (!Number.isNaN(parseInt(args[0], 10))) {
numToSkip = parseInt(args[0], 10);
}
}
const player = this.playerManager.get(msg.guild!.id);
const loader = new LoadingMessage(msg.channel as TextChannel);
try {
await loader.start();
await player.forward();
await player.forward(numToSkip);
await loader.stop('keep \'er movin\'');
} catch (_: unknown) {

View file

@ -63,7 +63,7 @@ export default class {
if (isPlaying) {
oldPosition = player.getPosition();
player.manualForward();
player.manualForward(1);
}
await player.seek(position);

View file

@ -161,8 +161,8 @@ export default class {
this.stopTrackingPosition();
}
async forward(): Promise<void> {
this.manualForward();
async forward(skip: number): Promise<void> {
this.manualForward(skip);
try {
if (this.getCurrent() && this.status !== STATUS.PAUSED) {
@ -177,9 +177,9 @@ export default class {
}
}
manualForward(): void {
if (this.queuePosition < this.queue.length) {
this.queuePosition++;
manualForward(skip: number): void {
if ((this.queuePosition + skip - 1) < this.queue.length) {
this.queuePosition += skip;
this.positionInSeconds = 0;
this.stopTrackingPosition();
} else {
@ -440,7 +440,7 @@ export default class {
private async onVoiceConnectionSpeaking(isSpeaking: boolean): Promise<void> {
// Automatically advance queued song at end
if (!isSpeaking && this.status === STATUS.PLAYING) {
await this.forward();
await this.forward(1);
}
}
}