aboutsummaryrefslogtreecommitdiff
path: root/src/commands/remove.ts
diff options
context:
space:
mode:
authorDrunkenToast <[email protected]>2021-11-20 21:10:39 +0100
committerMax Isom <[email protected]>2021-11-20 19:01:52 -0500
commit5a74115bebb42df2eac3a277478f69ef706c4e83 (patch)
treed784e9f7637d50f802d64aebf847f39a51c547f4 /src/commands/remove.ts
parent46701a8aab0247943defc3b09c719a61cb5df2b0 (diff)
downloadmuse-5a74115bebb42df2eac3a277478f69ef706c4e83.tar.xz
muse-5a74115bebb42df2eac3a277478f69ef706c4e83.zip
feat: remove from queue
+ fix typo queuecommand
Diffstat (limited to 'src/commands/remove.ts')
-rw-r--r--src/commands/remove.ts77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/commands/remove.ts b/src/commands/remove.ts
new file mode 100644
index 0000000..8f2931f
--- /dev/null
+++ b/src/commands/remove.ts
@@ -0,0 +1,77 @@
+import {Message, TextChannel} from 'discord.js';
+import {inject, injectable} from 'inversify';
+import {TYPES} from '../types.js';
+import PlayerManager from '../managers/player.js';
+import Command from '.';
+import LoadingMessage from '../utils/loading-message.js';
+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 first song in the queue (not the one thats playing, just skip it dummy)'],
+ ['rm 6-9', 'removes the every song in range [6-9] 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);
+
+ const res = new LoadingMessage(msg.channel as TextChannel);
+ await res.start();
+
+ if (args.length === 0) {
+ await res.stop('atleast give me a clue for which song you want to remove');
+ 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 res.stop(errorMsg('incorrect format, just an index or start-end 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 res.stop(errorMsg('you start counting with 1'));
+ return;
+ }
+
+ if (range[0] < range[1]) {
+ player.removeFromQueue(range[0], range[0] - range[1]);
+ } else {
+ await res.stop(errorMsg('range is backwards, just like you'));
+ return;
+ }
+
+ console.log(range);
+ } else { // 3rd group exists -> just one song
+ const index = parseInt(match[3], 10);
+
+ if (index < 1) {
+ await res.stop(errorMsg('it\'s got be bigger than 0, chief'));
+ return;
+ }
+
+ if (index > player.queueSize()) {
+ await res.stop(errorMsg('queue isn\'t THAT big'));
+ return;
+ }
+
+ player.removeFromQueue(index, 1);
+ }
+
+ await res.stop('to the trash it goes :wastebasket:');
+ }
+}