aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRithwik Rayani <[email protected]>2022-03-19 20:33:08 +0530
committerGitHub <[email protected]>2022-03-19 10:03:08 -0500
commit46df0875d507ec8e7b1b268f1db5e7925d767d41 (patch)
tree56b4cb656329321bc86af55c4006f46a7be01ff5
parent60376d4f5798004bc0215698bc1cc0786fcd5dbc (diff)
downloadmuse-46df0875d507ec8e7b1b268f1db5e7925d767d41.tar.xz
muse-46df0875d507ec8e7b1b268f1db5e7925d767d41.zip
added move command (#585)
Co-authored-by: Max Isom <[email protected]>
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/commands/move.ts47
-rw-r--r--src/inversify.config.ts2
-rw-r--r--src/services/player.ts10
4 files changed, 60 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8709464..648cca4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
+- Added a `/move` command to change position of tracks
- Added a `/now-playing` command to show the current track without the full queue embed
## [1.6.2] - 2022-03-17
diff --git a/src/commands/move.ts b/src/commands/move.ts
new file mode 100644
index 0000000..91a3957
--- /dev/null
+++ b/src/commands/move.ts
@@ -0,0 +1,47 @@
+import {CommandInteraction} from 'discord.js';
+import {inject, injectable} from 'inversify';
+import {TYPES} from '../types.js';
+import PlayerManager from '../managers/player.js';
+import Command from '.';
+import {SlashCommandBuilder} from '@discordjs/builders';
+
+@injectable()
+export default class implements Command {
+ public readonly slashCommand = new SlashCommandBuilder()
+ .setName('move')
+ .setDescription('move songs within the queue')
+ .addIntegerOption(option =>
+ option.setName('from')
+ .setDescription('position of the song to move')
+ .setRequired(true),
+ )
+ .addIntegerOption(option =>
+ option.setName('to')
+ .setDescription('position to move the song to')
+ .setRequired(true));
+
+ private readonly playerManager: PlayerManager;
+
+ constructor(@inject(TYPES.Managers.Player) playerManager: PlayerManager) {
+ this.playerManager = playerManager;
+ }
+
+ public async execute(interaction: CommandInteraction): Promise<void> {
+ const player = this.playerManager.get(interaction.guild!.id);
+
+ const from = interaction.options.getInteger('from') ?? 1;
+ const to = interaction.options.getInteger('to') ?? 1;
+
+ if (from < 1) {
+ throw new Error('position must be at least 1');
+ }
+
+ if (to < 1) {
+ throw new Error('position must be at least 1')
+ }
+
+ player.move(from, to);
+
+ await interaction.reply('moved');
+ }
+}
diff --git a/src/inversify.config.ts b/src/inversify.config.ts
index 78267f8..5574bb0 100644
--- a/src/inversify.config.ts
+++ b/src/inversify.config.ts
@@ -21,6 +21,7 @@ import Config from './commands/config.js';
import Disconnect from './commands/disconnect.js';
import Favorites from './commands/favorites.js';
import ForwardSeek from './commands/fseek.js';
+import Move from './commands/move.js'
import NowPlaying from './commands/now-playing.js';
import Pause from './commands/pause.js';
import Play from './commands/play.js';
@@ -66,6 +67,7 @@ container.bind<SpotifyAPI>(TYPES.Services.SpotifyAPI).to(SpotifyAPI).inSingleton
Disconnect,
Favorites,
ForwardSeek,
+ Move,
NowPlaying,
Pause,
Play,
diff --git a/src/services/player.ts b/src/services/player.ts
index 020c501..5c38cdd 100644
--- a/src/services/player.ts
+++ b/src/services/player.ts
@@ -554,4 +554,14 @@ export default class {
resolve(returnedStream);
});
}
+
+ move(from: number, to: number): void {
+
+ if (from > this.queueSize() || to > this.queueSize()){
+ throw new Error('Move index is outside the range of the queue.' )
+ }
+
+ this.queue.splice( this.queuePosition + to ,0, this.queue.splice(this.queuePosition + from, 1)[0]);
+ }
+
}