UNPKG

@develable/rutapbot-d20

Version:

[KR] Rutap Bot will makes your discord life better!

86 lines (78 loc) 5.68 kB
// node_modules const Discord = require("discord.js"); const fs = require('fs'); // 자체 모듈 const timestamp = require('../../lib/timestamp.js'); const err_module = require('./../../lib/err_perform.js'); const rutap = require('./../../lib/rutapcommands.js'); // settings const d_settings = require('./../../settings/default_settings.js'); // 명령어 모듈 한정 :: 명령어 설명 정의 exports.dscr = { description : `사용 가능한 명령어를 모두 출력합니다.\n\`${d_settings.normal_prefix}도움말 <명령어>\`를 입력하여 설명이나 예제를 볼 수 있습니다.`, use : [`${d_settings.normal_prefix}도움말`, `${d_settings.normal_prefix}도움말 <명령어>`] }; // 명령어 치면 돌아가는 구역 exports.run = async (dscl, message, args, opti) => { let HelpEmbed = new Discord.RichEmbed() .setFooter(`© 2018-2020 Develable.\n${timestamp.returntime()}`) .setColor(d_settings.embed_color); if (!args[1]) { HelpEmbed.setTitle(`${dscl.user.username} 도움말!`); HelpEmbed.setDescription(`자세한 설명을 확인하려면 \`${d_settings.normal_prefix}도움말 <명령어>\`를 입력합니다.\n\n\`<>\` : 필수 입력 사항\n\`[]\` : 선택 입력 사항\n\`A|B\` : A와 B중 택1`); // 2020-03-06 여기 수정할 필요 없이 그냥 애가 자동으로 폴더 읽어와서 명령어 나열해주는거 필요함! // 2020-03-09 일단 구현은 했는데 1200자 넘어갔을때 대응 필요!! let badmin = ""; for (const nlist of fs.readdirSync('./src/commands/bot_admin')) { badmin = badmin + `\`${d_settings.admin_prefix} ` + nlist.replace('.js', '') + "` "; } let sadmin = ""; for (const nlist of fs.readdirSync('./src/commands/server_admin')) { sadmin = sadmin + `\`${d_settings.normal_prefix}` + nlist.replace('.js', '') + "` "; } let normal_c = ""; for (const nlist of fs.readdirSync('./src/commands/normal')) { normal_c = normal_c + `\`${d_settings.normal_prefix}` + nlist.replace('.js', '') + "` "; } HelpEmbed.addField("일반 명령어", normal_c, false); HelpEmbed.addField("서버 관리자 명령어", sadmin, false); HelpEmbed.addField("봇 관리자 명령어", badmin, false); message.channel.send(HelpEmbed); } else { // 2020-03-09 일반 명령어는 프리픽스 붙일 필요 없는데 사람들이 붙일 거 같음 리플 필요 let cmdtype = -1; let cmd = (args[1] == d_settings.admin_prefix) ? args[2].toLowerCase() : args[1].toLowerCase(); let normalcommands = fs.readdirSync('./src/commands/normal'); let servercommands = fs.readdirSync('./src/commands/server_admin'); let botadmincommands = fs.readdirSync('./src/commands/bot_admin'); let cmdpath = ''; await normalcommands.some((item) => { if (cmd == item.split('.js')[0]) cmdtype = 0; }); await servercommands.some((item) => { if (cmd == item.split('.js')[0]) cmdtype = 1; }); await botadmincommands.some((item) => { if (cmd == item.split('.js')[0]) cmdtype = 2;}); // 2020-03-06 권한 없으면 리턴 대신 warning 띄어주고 명령어 설명 넣어줬음 /*if (cmdtype == 1 && !message.guild.member(message.author).hasPermission('ADMINISTRATOR')) return message.reply('관리자 권한을 갖고 있지 않습니다.'); else if (cmdtype == 2 && !rutap.isBotAdmin(message.author.id)) return message.reply('당신은 봇 관리자가 아닙니다!'); else cmdpath = ((cmdtype == 0) ? `./../normal/${cmd}.js` : ((cmdtype == 1) ? `./../server_admin/${cmd}.js` : ((cmdtype == 2) ? `./../bot_admin/${cmd}.js` : '존재하지 않는 명령어')));*/ let warn = ""; if (cmdtype == 1 && !message.guild.member(message.author).hasPermission('ADMINISTRATOR')) warn = "\n\n**해당 명령어는 서버 관리자 명령어입니다.\n당신은 현재 서버 관리 권한이 없습니다**"; else if (cmdtype == 2 && !rutap.isBotAdmin(message.author.id)) warn = "\n\n**해당 명령어는 봇 관리자 명령어입니다.\n당신은 현재 봇 관리 권한이 없습니다**"; cmdpath = ((cmdtype == 0) ? `./../normal/${cmd}.js` : ((cmdtype == 1) ? `./../server_admin/${cmd}.js` : ((cmdtype == 2) ? `./../bot_admin/${cmd}.js` : '존재하지 않는 명령어'))); try { if (opti.nodesetting.cmdar) delete require.cache[require.resolve(cmdpath)]; // node ./src/rutap.js -ar (auto reload) let command = require(cmdpath); HelpEmbed.setDescription(`\`<>\` : 필수 입력 사항\n\`[]\` : 선택 입력 사항\n\`A|B\` : A와 B중 택1${warn}`); HelpEmbed.addField('명령어 설명', `\`\`\`${command.dscr.description}\`\`\``); let commanduse = ''; command.dscr.use.forEach((item) => { commanduse = commanduse + '`' + item + '`' + '\n'; }); commanduse = commanduse.slice(0, -1); HelpEmbed.addField('명령어 사용 방법', commanduse); message.channel.send(HelpEmbed); } catch (err) { if (err.message.indexOf("Cannot find module") != -1) { message.reply(`존재하지 않는 명령어 입니다.\n\`${d_settings.normal_prefix}도움말\`을 입력하여 명령어를 찾아보세요.`); } else { err_module.performerr(dscl, message, opti, `./src/commands/normal/도움말.js :: ${err}`); } } } };