bot/src/Commands/help.ts
2024-06-24 00:48:44 +09:00

85 lines
2.5 KiB
TypeScript

import { codeBlock, type Message } from 'discord.js'
import { ApplyOptions } from '@sapphire/decorators'
import { Args, Command } from '@sapphire/framework'
@ApplyOptions<Command.Options>({
name: '도움말',
aliases: ['명령어', '도움', 'help'],
description: '기본적인 사용ㅂ법이에요.',
detailedDescription: {
usage: '머핀아 도움말 [명령어]',
examples: ['머핀아 도움말', '머핀아 도움말 배워'],
},
})
export default class extends Command {
public async messageRun(msg: Message, args: Args) {
const commandName = await args.pick('string').catch(() => null)
if (
!commandName ||
!this.container.stores.get('commands').get(commandName)
) {
const commandList: string[] = []
this.container.stores.get('commands').forEach(module => {
commandList.push(module.name)
})
await msg.reply({
embeds: [
{
title: '머핀봇의 도움말',
description: codeBlock(
'md',
commandList.map(item => `- ${item}`).join('\n'),
),
footer: {
text: `머핀봇 버전: ${this.container.version}`,
},
},
],
})
} else {
const { name, aliases, description, detailedDescription } =
this.container.stores.get('commands').get(commandName)!
if (typeof detailedDescription === 'string') return
await msg.reply({
embeds: [
{
title: '머핀봇의 도움말',
description: `명령어: ${name}`,
fields: [
{
name: '설명',
value: description,
inline: true,
},
{
name: '별칭',
value: aliases.map(item => `\`${item}\``).join(', '),
inline: true,
},
{
name: '사용법',
value: `\`${detailedDescription.usage}\``,
inline: true,
},
detailedDescription.examples
? {
name: '예시',
value: `\`\`\`${detailedDescription.examples.map(item => item).join('\n')}\`\`\``,
inline: false,
}
: {
name: '예시',
value: '없음',
inline: false,
},
],
timestamp: new Date().toISOString(),
},
],
})
}
}
}