aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/commands/move.ts47
-rw-r--r--src/inversify.config.ts2
-rw-r--r--src/services/player.ts10
3 files changed, 59 insertions, 0 deletions
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]);
+ }
+
}