Merge pull request #417 from DrunkenToast/remove

This commit is contained in:
Max Isom 2021-11-20 19:05:52 -05:00 committed by GitHub
commit f146a2a57c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 86 additions and 4 deletions

View file

@ -1,5 +1,5 @@
DISCORD_TOKEN= DISCORD_TOKEN=
DATA_DIR= DATA_DIR=./data
YOUTUBE_API_KEY= YOUTUBE_API_KEY=
SPOTIFY_CLIENT_ID= SPOTIFY_CLIENT_ID=
SPOTIFY_CLIENT_SECRET= SPOTIFY_CLIENT_SECRET=

View file

@ -37,6 +37,7 @@ export default class implements Command {
this.getSongs = getSongs; this.getSongs = getSongs;
} }
// eslint-disable-next-line complexity
public async execute(msg: Message, args: string[]): Promise<void> { public async execute(msg: Message, args: string[]): Promise<void> {
const [targetVoiceChannel] = getMemberVoiceChannel(msg.member!) ?? getMostPopularVoiceChannel(msg.guild!); const [targetVoiceChannel] = getMemberVoiceChannel(msg.member!) ?? getMostPopularVoiceChannel(msg.guild!);
@ -130,7 +131,6 @@ export default class implements Command {
if (song) { if (song) {
newSongs.push(song); newSongs.push(song);
} else { } else {
console.log(_);
await res.stop(errorMsg('that doesn\'t exist')); await res.stop(errorMsg('that doesn\'t exist'));
return; return;
} }

76
src/commands/remove.ts Normal file
View file

@ -0,0 +1,76 @@
import {Message} from 'discord.js';
import {inject, injectable} from 'inversify';
import {TYPES} from '../types.js';
import PlayerManager from '../managers/player.js';
import Command from '.';
import errorMsg from '../utils/error-msg.js';
@injectable()
export default class implements Command {
public name = 'remove';
public aliases = ['rm'];
public examples = [
['remove 1', 'removes the next song in the queue'],
['rm 5-7', 'remove every song in range 5 - 7 (inclusive) from the queue'],
];
private readonly playerManager: PlayerManager;
constructor(@inject(TYPES.Managers.Player) playerManager: PlayerManager) {
this.playerManager = playerManager;
}
public async execute(msg: Message, args: string []): Promise<void> {
const player = this.playerManager.get(msg.guild!.id);
if (args.length === 0) {
await msg.channel.send(errorMsg('missing song position or range'));
return;
}
const reg = /^(\d+)-(\d+)$|^(\d+)$/g; // Expression has 3 groups: x-y or z. x-y is range, z is a single digit.
const match = reg.exec(args[0]);
if (match === null) {
await msg.channel.send(errorMsg('incorrect format'));
return;
}
if (match[3] === undefined) { // 3rd group (z) doesn't exist -> a range
const range = [parseInt(match[1], 10), parseInt(match[2], 10)];
if (range[0] < 1) {
await msg.channel.send(errorMsg('position must be greater than 0'));
return;
}
if (range[1] > player.queueSize()) {
await msg.channel.send(errorMsg('position is outside of the queue\'s range'));
return;
}
if (range[0] < range[1]) {
player.removeFromQueue(range[0], range[1] - range[0] + 1);
} else {
await msg.channel.send(errorMsg('range is backwards'));
return;
}
} else { // 3rd group exists -> just one song
const index = parseInt(match[3], 10);
if (index < 1) {
await msg.channel.send(errorMsg('position must be greater than 0'));
return;
}
if (index > player.queueSize()) {
await msg.channel.send(errorMsg('position is outside of the queue\'s range'));
return;
}
player.removeFromQueue(index, 1);
}
await msg.channel.send(':wastebasket: removed');
}
}

View file

@ -21,7 +21,8 @@ import ForwardSeek from './commands/fseek.js';
import Help from './commands/help.js'; import Help from './commands/help.js';
import Pause from './commands/pause.js'; import Pause from './commands/pause.js';
import Play from './commands/play.js'; import Play from './commands/play.js';
import QueueCommad from './commands/queue.js'; import QueueCommand from './commands/queue.js';
import Remove from './commands/remove.js';
import Seek from './commands/seek.js'; import Seek from './commands/seek.js';
import Shortcuts from './commands/shortcuts.js'; import Shortcuts from './commands/shortcuts.js';
import Shuffle from './commands/shuffle.js'; import Shuffle from './commands/shuffle.js';
@ -60,7 +61,8 @@ container.bind<NaturalLanguage>(TYPES.Services.NaturalLanguage).to(NaturalLangua
Help, Help,
Pause, Pause,
Play, Play,
QueueCommad, QueueCommand,
Remove,
Seek, Seek,
Shortcuts, Shortcuts,
Shuffle, Shuffle,

View file

@ -271,6 +271,10 @@ export default class {
this.queue = newQueue; this.queue = newQueue;
} }
removeFromQueue(index: number, amount = 1): void {
this.queue.splice(this.queuePosition + index, amount);
}
removeCurrent(): void { removeCurrent(): void {
this.queue = [...this.queue.slice(0, this.queuePosition), ...this.queue.slice(this.queuePosition + 1)]; this.queue = [...this.queue.slice(0, this.queuePosition), ...this.queue.slice(this.queuePosition + 1)];
} }