aboutsummaryrefslogtreecommitdiff
path: root/src/commands/queue.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/queue.ts')
-rw-r--r--src/commands/queue.ts55
1 files changed, 50 insertions, 5 deletions
diff --git a/src/commands/queue.ts b/src/commands/queue.ts
index 6c5cc63..1ec2016 100644
--- a/src/commands/queue.ts
+++ b/src/commands/queue.ts
@@ -1,8 +1,15 @@
-import {Message} from 'discord.js';
+import {Message, MessageEmbed} from 'discord.js';
import {TYPES} from '../types';
import {inject, injectable} from 'inversify';
import QueueManager from '../managers/queue';
+import PlayerManager from '../managers/player';
+import {STATUS} from '../services/player';
import Command from '.';
+import getProgressBar from '../utils/get-progress-bar';
+import errorMsg from '../utils/error-msg';
+import {prettyTime} from '../utils/time';
+
+const PAGE_SIZE = 10;
@injectable()
export default class implements Command {
@@ -13,16 +20,54 @@ export default class implements Command {
];
private readonly queueManager: QueueManager;
+ private readonly playerManager: PlayerManager;
- constructor(@inject(TYPES.Managers.Queue) queueManager: QueueManager) {
+ constructor(@inject(TYPES.Managers.Queue) queueManager: QueueManager, @inject(TYPES.Managers.Player) playerManager: PlayerManager) {
this.queueManager = queueManager;
+ this.playerManager = playerManager;
}
- public async execute(msg: Message, _: string []): Promise<void> {
+ public async execute(msg: Message, args: string []): Promise<void> {
const queue = this.queueManager.get(msg.guild!.id);
+ const player = this.playerManager.get(msg.guild!.id);
+
+ const currentlyPlaying = queue.getCurrent();
+
+ if (currentlyPlaying) {
+ const queueSize = queue.size();
+ const queuePage = args[0] ? parseInt(args[0], 10) : 1;
+
+ if (queuePage * PAGE_SIZE > queueSize && queuePage > Math.ceil((queueSize + 1) / PAGE_SIZE)) {
+ await msg.channel.send(errorMsg('the queue isn\'t that big'));
+ return;
+ }
+
+ const embed = new MessageEmbed();
+
+ embed.setTitle(currentlyPlaying.title);
+ embed.setURL(`https://www.youtube.com/watch?v=${currentlyPlaying.url}`);
+ embed.setFooter(`Source: ${currentlyPlaying.artist}`);
+
+ let description = player.status === STATUS.PLAYING ? 'âšī¸' : 'â–ļī¸';
+ description += ' ';
+ description += getProgressBar(20, player.getPosition() / currentlyPlaying.length);
+ description += ' ';
+ description += `\`[${prettyTime(player.getPosition())}/${prettyTime(currentlyPlaying.length)}]\``;
+ description += ' 🔉';
+ description += queue.isEmpty() ? '' : '\n\n**Next up:**';
+
+ embed.setDescription(description);
+
+ const queuePageBegin = (queuePage - 1) * PAGE_SIZE;
+ const queuePageEnd = queuePageBegin + PAGE_SIZE;
- await msg.channel.send('`' + JSON.stringify(queue.getCurrent()) + '`');
+ queue.get().slice(queuePageBegin, queuePageEnd).forEach((song, i) => {
+ embed.addField(`${(i + 1 + queuePageBegin).toString()}/${queueSize.toString()}`, song.title, false);
+ });
- await msg.channel.send('`' + JSON.stringify(queue.get().slice(0, 10)) + '`');
+ await msg.channel.send(embed);
+ } else {
+ await msg.channel.send('queue empty');
+ }
}
}