UNPKG

@develable/rutapbot-d20

Version:

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

155 lines (136 loc) 8.76 kB
// node_modules const fs = require('fs'); const moment = require('moment'); var mkdirp = require('mkdirp'); // 자체 모듈 const fdload = require('./filedownload.js'); const err_module = require('./err_perform.js'); // settings const l_settings = require('../settings/log_settings.js'); const err_settings = require('../settings/err_settings.js'); // 자체 함수 function getfileSize(x) { var s = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; var e = Math.floor(Math.log(x) / Math.log(1024)); return (x / Math.pow(1024, e)).toFixed(2) + " " + s[e]; } exports.msglog = async (dscl, message) => { // 모듈 사용 안 할 경우 if (!l_settings.module_use) return; // 2020-04-20 지금 수정 못해서 임시 if (message.channel.type == 'dm') { console.log("DMChannel"); return; } /* [TASK] 폴더 Dir :: log_dir/id_'guild_name'/id_'channel_name'/[attachments] 메세지 로그는 날짜별로 구분 (폴더 Dir/log_yyyy_mm_dd.log) attachments 로그는 날짜별로 폴더 구분 (폴더 Dir/yyyy_mm_dd/msgid_filename.ext) */ let default_dir = `${l_settings.log_dir}/${message.guild.id}_${message.guild.name}/${message.channel.id}_${message.channel.name}`; let tod = moment().format('YYYY_MM_DD'); // 1차 검증 : 폴더 Dir 존재? try { fs.statSync(default_dir); //console.log(`${default_dir} 폴더 찾음.`); } catch (err) { if (err.code === 'ENOENT') { //console.log('file or directory does not exist'); //console.log(`${default_dir} 폴더 찾지 못함.`); try { mkdirp.sync(default_dir); //console.log(`${default_dir}폴더 생성 성공.`); } catch (err) { err_module.performerr(dscl, message, `log_perform.js ==> L50 예상하지 못한 오류. 상세 : ${err}`); return; } } else { err_module.performerr(dscl, message, `log_perform.js ==> L54 예상하지 못한 오류. 상세 : ${err}`); return; } } // 2차 검증 : 로그 파일 존재? try { fs.statSync(`${default_dir}/log_${tod}.log`); } catch (err) { if (err.code === 'ENOENT') { //console.log('file or directory does not exist'); fs.writeFileSync(`${default_dir}/log_${tod}.log`, 'NOTICE || Timezone은 서버를 기준으로 합니다. 24시간 기준입니다.\nNOTICE || 메시지 상의 줄바꿈은 /n으로 처리합니다.', (err) => { err_module.performerr(dscl, message, `${default_dir}/log_${tod}.log 파일 생성에 실패했습니다. (log_perform.js ==> L66) 상세 : ${err}`); return; }); console.log(`${default_dir}/log_${tod}.log 파일을 찾지 못하여, 파일을 새로 생성했습니다.`); } } // message.createdAt -> Ronly, Return Date. // Tue Mar 03 2020 18:44:53 GMT+0900 (Korean Standard Time) {} // hh(24):mm:ss let embed = "N"; if (message.embeds.length != 0) embed = "Y"; // array let attach = "N"; if (message.attachments.size != 0) attach = "Y"; // map fs.appendFileSync(`${default_dir}/log_${tod}.log`, `\n${message.createdAt.toTimeString().split(" ")[0]} || LOG-MSG || Embed : ${embed} || Attach : ${attach} || User : ${message.author.username}#${message.author.discriminator} (${message.author.id}) || msgid : ${message.id} || msg : ${message.content}`, (err) => { if (err) err_module.performerr(dscl, message, `${default_dir}/log_${tod}.log 에 메시지 로그를 작성하지 못했습니다. (log_perform.js ==> L82) 상세 : ${err}`); return; }); if (embed == "Y" && l_settings.include_embed) { for (const now of message.embeds) { let des = ""; let fdes = ""; if (! now.description == undefined) des = now.description.replace(/\r?\n/g, "/n"); if (! now.description == undefined) fdes = now.footer.text.replace(/\r?\n/g, "/n"); fs.appendFileSync(`${default_dir}/log_${tod}.log`, `\n${message.createdAt.toTimeString().split(" ")[0]} || LOG_EMBED for ${message.id} || Field : ${now.fields.length}개 || Type : ${now.type} || Color : ${now.hexColor} || Thumb : ${now.thumbnail} || Title : ${now.title} || Description : ${des} || Footer : [IMG] ${now.footer.iconURL} [TEXT] ${fdes}`, (err) => { if (err) err_module.performerr(dscl, message, `${default_dir}/log_${tod}.log 에 메시지 로그를 작성하지 못했습니다. (log_perform.js ==> L88) 상세 : ${err}`); return; }); // field Y? if (now.fields.length != 0) { for (const nfield of now.fields) { fs.appendFileSync(`${default_dir}/log_${tod}.log`, `\n${message.createdAt.toTimeString().split(" ")[0]} || LOG_EMBED_FIELD for ${message.id} || Name : ${nfield.name} || Value : ${nfield.value} || Inline : ${nfield.inline}`, (err) => { if (err) err_module.performerr(dscl, message, `${default_dir}/log_${tod}.log 에 메시지 로그를 작성하지 못했습니다. (log_perform.js ==> L94) 상세 : ${err}`); return; }); } } } } // 중간 관문 : 다운로드 허용함? + 첨부파일 있음? if (l_settings.download_media && attach == "Y") { // 3차 검증 : 다운로드 폴더 Dir 존재? let dload_dir = `${default_dir}/attachments/${tod}`; try { fs.statSync(dload_dir); } catch (err) { if (err.code === 'ENOENT') { //console.log('file or directory does not exist'); try { mkdirp.sync(dload_dir); } catch (err) { err_module.performerr(dscl, message, `${dload_dir} 에 폴더를 생성하지 못했습니다. (log_perform.js ==> L113) 상세 : ${err}`); return; } console.log(`${dload_dir} 폴더를 찾지 못하여, 폴더를 새로 생성했습니다.`); } } // 4차 : 링크와 함께 다운로드 떠넘기기 for (const natt of message.attachments.array()) { fs.appendFileSync(`${default_dir}/log_${tod}.log`, `\n${message.createdAt.toTimeString().split(" ")[0]} || LOG-ATTACH for ${message.id} || SAVE AT : ${dload_dir}/${message.id}_${natt.filename} || ID : ${natt.id} || Filename : ${natt.filename} || Size : ${getfileSize(natt.filesize)}`, (err) => { if (err) err_module.performerr(dscl, message, `${default_dir}/log_${tod}.log 에 메시지 로그를 작성하지 못했습니다. (log_perform.js ==> L122) 상세 : ${err}`); return; }); fdload.fdload_withfilename(natt.url, `${dload_dir}/${message.id}_${natt.filename}`) } } } // NOTICE :: 얘는 err_perform.js에서 호출하는 함수입니다 함부로 손대거나 호출하지 마세요!! exports.errlog = (message, errcode, e) => { try { fs.statSync(`${l_settings.log_dir}/${err_settings.err_name}`); } catch (err) { if (err.code === 'ENOENT') { //console.log('file or directory does not exist'); fs.writeFileSync(`${l_settings.log_dir}/${err_settings.err_name}`, `NOTICE || Timezone은 서버를 기준으로 합니다. 12시간 기준입니다.\nNOTICE || 메시지 상의 줄바꿈은 /n으로 처리합니다.\n${moment().format('YYYY/MM/DD a hh:mm:ss')} || INFO || 파일 새로 생성함`, function(err) { err_module.performerr(dscl, message, `${l_settings.log_dir}/${err_settings.err_name} 파일 생성에 실패했습니다. (log_perform.js ==> L137) 상세 : ${err}`); return; }); console.log(`${l_settings.log_dir}/${err_settings.err_name} 파일을 찾지 못하여, 파일을 새로 생성했습니다.`); } } fs.appendFileSync(`${l_settings.log_dir}/${err_settings.err_name}`, `\n${moment().format('YYYY/MM/DD a hh:mm:ss')} || INFO || Guild : ${message.guild.name} (${message.guild.id}) || Ch : ${message.channel.name} (${message.channel.id}) || User : ${message.author.username}#${message.author.discriminator} (${message.author.id}) || Msg : ${message.content.replace(/\r?\n/g, "/n")} || Code : ${errcode} || Inf : ${e}`, (err) => { if (err) err_module.performerr(dscl, message, `${l_settings.log_dir}/${err_settings.err_name} 에 애러 로그를 작성하지 못했습니다. (log_perform.js ==> L144) 상세 : ${err}`); return; }); console.log(`"${errcode}" 애러 로그가 ${l_settings.log_dir}/${err_settings.err_name} 에 작성되었습니다.`); }