added move command (#585)

Co-authored-by: Max Isom <codetheweb@users.noreply.github.com>
This commit is contained in:
Rithwik Rayani 2022-03-19 20:33:08 +05:30 committed by GitHub
parent 60376d4f57
commit 46df0875d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 0 deletions

View file

@ -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

47
src/commands/move.ts Normal file
View file

@ -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');
}
}

View file

@ -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,

View file

@ -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]);
}
}