aboutsummaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/move.ts47
1 files changed, 47 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');
+ }
+}