- Introduced `applyCommandCooldown` function to manage per-command cooldowns after execution, improving command rate limiting. - Updated command execution flow to include cooldown application, ensuring users are informed of cooldown status. - Enhanced error handling in interaction replies, allowing for more graceful error management and user feedback. - Improved the handling of interaction responses across various commands, ensuring consistent user experience. - Added permission checks for new commands, ensuring only authorized users can execute specific actions.
63 lines
2.5 KiB
TypeScript
63 lines
2.5 KiB
TypeScript
import { applyCommandDescription, applyOptionDescription } from '@nexumi/shared';
|
|
import { PermissionFlagsBits, SlashCommandBuilder } from 'discord.js';
|
|
|
|
export const giveawayCommandData = applyCommandDescription(
|
|
new SlashCommandBuilder()
|
|
.setName('giveaway')
|
|
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('start'), 'giveaway.start.description')
|
|
.addStringOption((o) =>
|
|
applyOptionDescription(o.setName('duration').setRequired(true), 'giveaway.start.options.duration')
|
|
)
|
|
.addIntegerOption((o) =>
|
|
applyOptionDescription(
|
|
o.setName('winners').setRequired(true).setMinValue(1).setMaxValue(25),
|
|
'giveaway.start.options.winners'
|
|
)
|
|
)
|
|
.addStringOption((o) =>
|
|
applyOptionDescription(o.setName('prize').setRequired(true), 'giveaway.start.options.prize')
|
|
)
|
|
.addRoleOption((o) =>
|
|
applyOptionDescription(o.setName('role'), 'giveaway.start.options.role')
|
|
)
|
|
.addIntegerOption((o) =>
|
|
applyOptionDescription(
|
|
o.setName('level').setMinValue(0).setMaxValue(500),
|
|
'giveaway.start.options.level'
|
|
)
|
|
)
|
|
.addIntegerOption((o) =>
|
|
applyOptionDescription(
|
|
o.setName('member_days').setMinValue(0).setMaxValue(3650),
|
|
'giveaway.start.options.member_days'
|
|
)
|
|
)
|
|
)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('end'), 'giveaway.end.description').addStringOption((o) =>
|
|
applyOptionDescription(o.setName('id').setRequired(true), 'giveaway.common.options.id')
|
|
)
|
|
)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('reroll'), 'giveaway.reroll.description').addStringOption(
|
|
(o) => applyOptionDescription(o.setName('id').setRequired(true), 'giveaway.common.options.id')
|
|
)
|
|
)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('list'), 'giveaway.list.description')
|
|
)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('delete'), 'giveaway.delete.description').addStringOption(
|
|
(o) => applyOptionDescription(o.setName('id').setRequired(true), 'giveaway.common.options.id')
|
|
)
|
|
)
|
|
.addSubcommand((s) =>
|
|
applyCommandDescription(s.setName('pause'), 'giveaway.pause.description').addStringOption(
|
|
(o) => applyOptionDescription(o.setName('id').setRequired(true), 'giveaway.common.options.id')
|
|
)
|
|
),
|
|
'giveaway.description'
|
|
);
|