56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { join } from 'path';
|
|
import fs from 'fs';
|
|
import { IcyNetUser } from '../../common/types/user';
|
|
|
|
export class Logger {
|
|
private _stream!: fs.WriteStream;
|
|
|
|
constructor(private _path = join(process.cwd(), 'chat.log')) {}
|
|
|
|
initialize() {
|
|
this._stream = fs.createWriteStream(this._path, {
|
|
flags: 'a',
|
|
encoding: 'utf-8',
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Write a chat message to the log file.
|
|
* @param user Sender
|
|
* @param message Message
|
|
*/
|
|
writeChat(user: IcyNetUser, message: string) {
|
|
const date = this._createTimestamp(new Date());
|
|
const userStamp = `${user.display_name}:${user.id}`;
|
|
const fullStamp = `${date} <${userStamp}> ${message}`;
|
|
this._stream.write(`${fullStamp}\n`);
|
|
}
|
|
|
|
/**
|
|
* Write a server event to the log file.
|
|
* @param event Event name
|
|
* @param message Event description
|
|
*/
|
|
writeEvent(event: string, message: string) {
|
|
const date = this._createTimestamp(new Date());
|
|
this._stream.write(`${date} %EVENT:${event}% ${message}\n`);
|
|
}
|
|
|
|
/**
|
|
* Returns timestamp in `YYYY/MM/DD HH:mm:ss` format.
|
|
* @param date Message time
|
|
* @returns Message timestamp
|
|
*/
|
|
private _createTimestamp(date: Date): string {
|
|
const az = (n: number) => n.toString().padStart(2, '0');
|
|
const dateStamp = [date.getFullYear(), date.getMonth() + 1, date.getDate()]
|
|
.map(az)
|
|
.join('/');
|
|
|
|
const timeStamp = [date.getHours(), date.getMinutes(), date.getSeconds()]
|
|
.map(az)
|
|
.join(':');
|
|
return `[${dateStamp} ${timeStamp}]`;
|
|
}
|
|
}
|