true-irc-logger/index.js
2024-12-01 02:18:38 -03:00

150 lines
5.1 KiB
JavaScript

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,
// 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
}