const fs = require('fs') const irc = require('irc'); const readline = require('readline') const model = 'user,date,message' const { dirname } = require('path'); const rootDir = dirname(require.main.filename); const settings = JSON.parse(fs.readFileSync(rootDir + '/settings.json')); let currentChannel = settings.channels[0] const client = new irc.Client(settings.server, settings.username, { channels: settings.channels, userName: 'gordown', realName: 'Gor Down', autoRejoin: true, retryCount: 100000000, retryDelay: 2*60*1000, port: 6697, secure: true, certExpired: true, selfSigned: true }); client.addListener('registered', () => { //////////////LISTENERS//////////////////// client.addListener('error', (message) => { console.log('Error: ' + message) }) client.addListener('message', function (from, channel, message) { if (channel === settings.username) return logMessage(from, channel, message) }); client.addListener('join', (channel, nick) => { logMessage(nick, channel, "Joined the channel") //I'M THE ANIME GIRL FAGGOT if (nick === settings.username) sendMessage(channel, "# Appears as Jhenna_Hina.http://www.mermeliz.com/hina/dl/Jhenna_Hina.AVB") }) client.addListener('part', (channel, nick, reason, _message) => { console.log(channel) logMessage(nick, channel, "Parted: " + reason) }) client.addListener('quit', (nick, reason, channels, _message) => { for(i in channels){ logMessage(nick, channels[i], "Left: " + reason) } }) client.addListener('kick', (channel, nick, by, reason, _message) => { logMessage(nick, channel, "Kicked by: " + by + ": " + reason) }) //////////////////////////////////////////////////////////////// ///LOGGING AND SHIT///////////////////////////////////////////// function logMessage(from, channel, message){ const currentDate = new Date(); ////////////////////////////////////////////////////////////////DATE FORMAT const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const day = String(currentDate.getDate()).padStart(2, '0'); const hours = String(currentDate.getHours()).padStart(2, '0'); const minutes = String(currentDate.getMinutes()).padStart(2, '0'); const seconds = String(currentDate.getSeconds()).padStart(2, '0'); //////////////////////////////////////////////////////////////// const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; const filename = rootDir + '/logs/' + channel + '.csv' if (!fs.existsSync(filename)){ fs.writeFileSync(filename, model) } fs.appendFileSync(filename, `\n${from},${formattedDate},"${message}"`) if(from !== settings.username)console.log(`${from}: ${message}`) } function sendMessage(channel, message){ logMessage(settings.username, channel, message) client.say(channel, message) } //////////////////////////////////////////////////////////////// //COMMAND LINE SHIT///////////////////////////////// const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function messagePrompt(){ rl.question(settings.username + ': ', (command) => { const split = command.split("!") const prefix = split[0] if(prefix === "g"){ const terminalCommand = split[1].split(' ')[0] const args = split[1].split(' ')[1] ? split[1].split(' ')[1] : "" switch (terminalCommand) { case "switch_channel": if (!args) { console.log("Arguments required"); break } if(!checkIfIsInChannelAndLog(args)) break currentChannel = args; console.log("Current Channel set to:", currentChannel); break; case "get_current_channel": console.log(currentChannel) break case "get_users": let channel = currentChannel if(args){ if(!checkIfIsInChannelAndLog(channel)) break channel = args } for (user in client.chans[channel].users){ console.log(user) } break } }else{ sendMessage(currentChannel, command) } messagePrompt() }); } rl.prompt(); messagePrompt() }) function checkIfIsInChannelAndLog(channel){ if(!client.chans[channel]){ console.log(`You're not in that channel!`); return false } return true }