Minty U

Command folder added

1 +const Discord = require("discord.js");
2 +exports.run = async (client, msg, args, prefix) => {
3 + if (!args[0]) {
4 + const categorys = client.category; // bot.js에 있는 client.category 를 categorys로 선언하였습니다.
5 + let Commands = new Discord.MessageEmbed()
6 + .setAuthor(client.user.username + " 봇 명령어", client.user.displayAvatarURL())
7 + .setColor("7289DA")
8 + .setFooter(`${prefix}도움 <명령어> 를 통하여 해당 명령어를 자세히 확인해보세요.`);
9 + for (const category of categorys) { // 위에서 선언한 것을 for문으로 category로 선언하였습니다. (반복문)
10 + /**
11 + * 위에 for문을 잠시 설명해드리자면
12 + * categorys가 있는 만큼 반복을 하여
13 + * categorys중에 하나를 category로 선언하여 아래의 코드를 작성한 것입니다.
14 + */
15 +
16 + // console.log(client.commands.filter(el => el.config.category == category).keys());
17 + let a = client.commands.filter(el => el.config.category == category).keys();
18 + let arr = [];
19 + for (const i of a) {
20 + arr.push(i);
21 + }
22 + Commands.addField(category, `> **\`${arr.join(', ')}\`**`);
23 + /**
24 + * 소제목에는 카테고리 이름을 넣고
25 + * 소 설명에는 이전에 client.commands를 컬랙션으로 지정한 것들을 불러와 필터를 시켜줍니다.
26 + * el로 선언하여 el이 어떤식으로 되어있냐면
27 + * 이전에 명령어들에게 exports를 사용하여 모듈화 하였는데 그것들을 불러오게 됩니다.
28 + * 여러가지 있는데 그중에 하나만 뜯어서 보여드렸습니다.
29 + * {
30 + * run: [AsyncFunction],
31 + * config: {
32 + * name: "asd",
33 + * aliases: ["asd1", "asd2", "123"],
34 + * category: ["example"],
35 + * des: ["config 설명"],
36 + * use: ["튜토야 도움 <명령어>"]
37 + * }
38 + * }
39 + * 그러고 이제 config.category가 const로 선언한 category와 맞는지 확인 후 Array화 시킨 후 안에 있는 명령어들을 불러온 것입니다.
40 + */
41 + }
42 + msg.reply({ embeds: [Commands] });
43 + } else {
44 + if (client.commands.get(args[0])) { // 만약에 client.commands안에 args[0] 라는게 있다면
45 + var command = client.commands.get(args[0]); // command 는 client.commands.get(args[0])로 선언해줍시다.
46 + } else if (client.aliases.get(args[0])) { // 만약에 client.aliases 안에 args[0] 라는게 있다면
47 + let aliases = client.aliases.get(args[0]); // aliases 를 client.aliases.get(args[0])로 선언해주고 (왜냐하면 저기서 aliases를 불러오면 command 이름이 나오기 때문입니다.)
48 + var command = client.commands.get(aliases); // commands는 client.commands.get(aliases)으로 선언해줍시다.
49 + } else return msg.reply(`${args[0]} 명령어라는 것을 찾을 수 없어요...`);
50 +
51 + let config = command.config;
52 + let name = config.name;
53 + let aliases = config.aliases;
54 + let category = config.category;
55 + let description = config.des;
56 + let use = config.use;
57 +
58 + let Command = new Discord.MessageEmbed()
59 + .setTitle(`${name} 명령어`)
60 + .setColor("7289DA")
61 + .setDescription(`\`\`\`fix\n사용법: ${use}\`\`\``)
62 + .addField("명령어 설명", `**${description}**`, false)
63 + .addField("카테고리", `**${category}**`, true)
64 + .addField("공유하는 명령어", `**${aliases}**`, true);
65 + msg.reply({ embeds: [Command] });
66 + }
67 +};
68 +
69 +exports.config = {
70 + name: '도움말',
71 + aliases: ['도움', '명령어', 'commands', 'help'],
72 + category: ['example'],
73 + des: ['봇에 대한 명령어 리스트들을 불러옵니다.'],
74 + use: ['!도움말 <명령어>']
75 +};
...\ No newline at end of file ...\ No newline at end of file
1 const { Client, Intents } = require('discord.js'); 1 const { Client, Intents } = require('discord.js');
2 +const Discord = require("discord.js");
2 const { token } = require('./config.json'); 3 const { token } = require('./config.json');
4 +const fs = require('fs');
3 5
4 const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); 6 const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
5 7
...@@ -7,9 +9,37 @@ client.once('ready', () => { ...@@ -7,9 +9,37 @@ client.once('ready', () => {
7 console.log(`Logged in as ${client.user.tag}!`); 9 console.log(`Logged in as ${client.user.tag}!`);
8 }); 10 });
9 11
12 +client.commands = new Discord.Collection();
13 +client.aliases = new Discord.Collection();
14 +client.category = ['example', 'stationery', 'translate', 'tts'];
15 +
16 +fs.readdirSync("./Commands/").forEach(dir => {
17 + const Filter = fs.readdirSync(`./Commands/${dir}`).filter(f => f.endsWith(".js"));
18 + Filter.forEach(file => {
19 + const cmd = require(`./Commands/${dir}/${file}`);
20 + client.commands.set(cmd.config.name, cmd);
21 + for (let alias of cmd.config.aliases) {
22 + client.aliases.set(alias, cmd.config.name);
23 + }
24 + });
25 +});
26 +
27 +function runCommand(command, message, args, prefix) {
28 + if (client.commands.get(command) || client.aliases.get(command)) {
29 + const cmd = client.commands.get(command) || client.commands.get(client.aliases.get(command));
30 + if (cmd) cmd.run(client, message, args, prefix);
31 + }
32 +}
33 +
10 client.on('messageCreate', msg => { 34 client.on('messageCreate', msg => {
11 - if (msg.content === 'ping') { 35 + const prefix = "!";
12 - msg.reply('Pong!'); 36 + if (!msg.content.startsWith(prefix)) return;
37 + let args = msg.content.slice(prefix.length).trim().split(/ +/g);
38 + let command = args.shift().toLowerCase();
39 + try {
40 + runCommand(command, msg, args, prefix);
41 + } catch (e) {
42 + console.error(e);
13 } 43 }
14 }); 44 });
15 45
......