Add queue clear command

This commit is contained in:
Max Isom 2020-03-14 22:03:31 -05:00
parent 9e1d656e52
commit d70bd16797
3 changed files with 45 additions and 4 deletions

22
src/commands/clear.ts Normal file
View file

@ -0,0 +1,22 @@
import {Message} from 'discord.js';
import {TYPES} from '../types';
import {inject, injectable} from 'inversify';
import Queue from '../services/queue';
import Command from '.';
@injectable()
export default class implements Command {
public name = 'clear';
public description = 'clears all songs in queue (except currently playing)';
private readonly queue: Queue;
constructor(@inject(TYPES.Services.Queue) queue: Queue) {
this.queue = queue;
}
public async execute(msg: Message, _: string []): Promise<void> {
this.queue.clear(msg.guild!.id);
await msg.channel.send('cleared');
}
}

View file

@ -21,6 +21,7 @@ import Player from './services/player';
// Comands
import Command from './commands';
import Clear from './commands/clear';
import Config from './commands/config';
import Play from './commands/play';
import QueueCommad from './commands/queue';
@ -38,6 +39,7 @@ container.bind<Player>(TYPES.Services.Player).to(Player).inSingletonScope();
container.bind<Queue>(TYPES.Services.Queue).to(Queue).inSingletonScope();
// Commands
container.bind<Command>(TYPES.Command).to(Clear).inSingletonScope();
container.bind<Command>(TYPES.Command).to(Config).inSingletonScope();
container.bind<Command>(TYPES.Command).to(Play).inSingletonScope();
container.bind<Command>(TYPES.Command).to(QueueCommad).inSingletonScope();

View file

@ -56,10 +56,7 @@ export default class {
}
add(guildId: string, song: QueuedSong): void {
if (!this.guildQueues.get(guildId)) {
this.guildQueues.set(guildId, []);
this.queuePositions.set(guildId, 0);
}
this.initQueue(guildId);
if (song.playlist) {
// Add to end of queue
@ -95,7 +92,27 @@ export default class {
this.guildQueues.set(guildId, [queue[0], ...shuffle(queue.slice(1))]);
}
clear(guildId: string): void {
this.initQueue(guildId);
const queue = this.guildQueues.get(guildId);
const newQueue = [];
if (queue!.length > 0) {
newQueue.push(queue![0]);
}
this.guildQueues.set(guildId, newQueue);
}
size(guildId: string): number {
return this.get(guildId).length;
}
private initQueue(guildId: string): void {
if (!this.guildQueues.get(guildId)) {
this.guildQueues.set(guildId, []);
this.queuePositions.set(guildId, 0);
}
}
}