feat: add setting for default queue page size

This commit is contained in:
Tiago Grosso 2024-08-24 23:08:05 +01:00
parent c46153f620
commit 0912d95791
5 changed files with 58 additions and 3 deletions

View file

@ -56,6 +56,15 @@ export default class implements Command {
.setMinValue(0)
.setMaxValue(100)
.setRequired(true)))
.addSubcommand(subcommand => subcommand
.setName('set-default-queue-page-size')
.setDescription('set the default page size of the /queue command')
.addIntegerOption(option => option
.setName('page-size')
.setDescription('page size of the /queue command')
.setMinValue(1)
.setMaxValue(50)
.setRequired(true)))
.addSubcommand(subcommand => subcommand
.setName('get')
.setDescription('show all settings'));
@ -171,6 +180,23 @@ export default class implements Command {
break;
}
case 'set-default-queue-page-size': {
const value = interaction.options.getInteger('page-size')!;
await prisma.setting.update({
where: {
guildId: interaction.guild!.id,
},
data: {
defaultQueuePageSize: value,
},
});
await interaction.reply('👍 default queue page size updated');
break;
}
case 'get': {
const embed = new EmbedBuilder().setTitle('Config');
@ -185,6 +211,7 @@ export default class implements Command {
'Auto announce next song in queue': config.autoAnnounceNextSong ? 'yes' : 'no',
'Add to queue reponses show for requester only': config.autoAnnounceNextSong ? 'yes' : 'no',
'Default Volume': config.defaultVolume,
'Default queue page size': config.defaultQueuePageSize,
};
let description = '';

View file

@ -5,6 +5,7 @@ import {TYPES} from '../types.js';
import PlayerManager from '../managers/player.js';
import Command from './index.js';
import {buildQueueEmbed} from '../utils/build-embed.js';
import {getGuildSettings} from '../utils/get-guild-settings.js';
@injectable()
export default class implements Command {
@ -17,7 +18,9 @@ export default class implements Command {
.setRequired(false))
.addIntegerOption(option => option
.setName('page-size')
.setDescription('how many items to display per page [default: 10]')
.setDescription('how many items to display per page [default: 10, max: 50]')
.setMinValue(1)
.setMaxValue(50)
.setRequired(false));
private readonly playerManager: PlayerManager;
@ -27,12 +30,16 @@ export default class implements Command {
}
public async execute(interaction: ChatInputCommandInteraction) {
const player = this.playerManager.get(interaction.guild!.id);
const guildId = interaction.guild!.id;
const player = this.playerManager.get(guildId);
const pageSizeFromOptions = interaction.options.getInteger('page-size');
const pageSize = pageSizeFromOptions ?? (await getGuildSettings(guildId)).defaultQueuePageSize;
const embed = buildQueueEmbed(
player,
interaction.options.getInteger('page') ?? 1,
interaction.options.getInteger('page-size') ?? 10,
pageSize,
);
await interaction.reply({embeds: [embed]});