aboutsummaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
authorMax Isom <[email protected]>2021-11-20 19:05:52 -0500
committerGitHub <[email protected]>2021-11-20 19:05:52 -0500
commitf146a2a57c83aa37b4601cf093acb1cfa700a41e (patch)
tree7b316bed0fcb624b807368595526bf5d2ba0a991 /src/commands
parent381ee62b780f546b5c7652741bbeb9a36add2939 (diff)
parent2903fcf0f8389a6851090604854e6202b62cad12 (diff)
downloadmuse-f146a2a57c83aa37b4601cf093acb1cfa700a41e.tar.xz
muse-f146a2a57c83aa37b4601cf093acb1cfa700a41e.zip
Merge pull request #417 from DrunkenToast/remove
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/play.ts2
-rw-r--r--src/commands/remove.ts76
2 files changed, 77 insertions, 1 deletions
diff --git a/src/commands/play.ts b/src/commands/play.ts
index a907a40..0582ebe 100644
--- a/src/commands/play.ts
+++ b/src/commands/play.ts
@@ -37,6 +37,7 @@ export default class implements Command {
this.getSongs = getSongs;
}
+ // eslint-disable-next-line complexity
public async execute(msg: Message, args: string[]): Promise<void> {
const [targetVoiceChannel] = getMemberVoiceChannel(msg.member!) ?? getMostPopularVoiceChannel(msg.guild!);
@@ -130,7 +131,6 @@ export default class implements Command {
if (song) {
newSongs.push(song);
} else {
- console.log(_);
await res.stop(errorMsg('that doesn\'t exist'));
return;
}
diff --git a/src/commands/remove.ts b/src/commands/remove.ts
new file mode 100644
index 0000000..9c40a71
--- /dev/null
+++ b/src/commands/remove.ts
@@ -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');
+ }
+}