1 |
import DiscordClient from "../client/Client"; |
import { MessageEmbed, WebhookClient } from "discord.js"; |
|
import { Guild } from "discord.js"; |
|
2 |
import { appendFile } from "fs/promises"; |
import { appendFile } from "fs/promises"; |
3 |
|
import path from "path"; |
4 |
|
import Service from "../utils/structures/Service"; |
5 |
|
import { splitMessage } from "../utils/util"; |
6 |
|
|
7 |
export enum LogLevel { |
export enum LogLevel { |
8 |
LOG = 'log', |
LOG = 'log', |
12 |
ERROR = 'error' |
ERROR = 'error' |
13 |
} |
} |
14 |
|
|
15 |
export default class DebugLogger { |
export default class DebugLogger extends Service { |
16 |
private joinLeaveLogFile = __dirname + '/../../logs/join-leave.log'; |
private joinLeaveLogFile = path.join(process.env.SUDO_PREFIX ?? (__dirname + '/../../'), 'logs/join-leave.log'); |
17 |
private appLogFile = __dirname + '/../../logs/app.log'; |
private appLogFile = path.join(process.env.SUDO_PREFIX ?? (__dirname + '/../../'), 'logs/app.log'); |
18 |
|
|
|
constructor(protected client: DiscordClient) { |
|
|
|
|
|
} |
|
|
|
|
19 |
async logApp(level: LogLevel, message: string) { |
async logApp(level: LogLevel, message: string) { |
20 |
await this.log(this.appLogFile, level, message); |
await this.log(this.appLogFile, level, message); |
21 |
} |
} |
27 |
async log(stream: string, level: LogLevel, message: string) { |
async log(stream: string, level: LogLevel, message: string) { |
28 |
await appendFile(stream, `[${new Date().toISOString()}] [${level}] ${message}\n`); |
await appendFile(stream, `[${new Date().toISOString()}] [${level}] ${message}\n`); |
29 |
} |
} |
30 |
|
|
31 |
|
async logToHomeServer(message: string, logLevel: LogLevel = LogLevel.ERROR) { |
32 |
|
if (!process.env.DEBUG_WEKHOOK_URL) |
33 |
|
return; |
34 |
|
|
35 |
|
const webhookClient = new WebhookClient({ url: process.env.DEBUG_WEKHOOK_URL! }); |
36 |
|
const splitted = splitMessage(message); |
37 |
|
const embed = new MessageEmbed({ |
38 |
|
color: logLevel === LogLevel.WARN ? 'GOLD' : 0xf14a60, |
39 |
|
title: logLevel === LogLevel.WARN ? 'Core Warning' : 'Fatal Error', |
40 |
|
description: splitted.shift(), |
41 |
|
}); |
42 |
|
|
43 |
|
if (splitted.length === 0) { |
44 |
|
embed.setTimestamp(); |
45 |
|
} |
46 |
|
|
47 |
|
try { |
48 |
|
await webhookClient.send({ |
49 |
|
embeds: [ |
50 |
|
embed |
51 |
|
] |
52 |
|
}); |
53 |
|
|
54 |
|
for (const index in splitted) { |
55 |
|
const embed = new MessageEmbed({ |
56 |
|
color: logLevel === LogLevel.WARN ? 'GOLD' : 0xf14a60, |
57 |
|
description: splitted[index], |
58 |
|
}); |
59 |
|
|
60 |
|
if (parseInt(index) === (splitted.length - 1)) { |
61 |
|
embed.setTimestamp(); |
62 |
|
} |
63 |
|
|
64 |
|
await webhookClient.send({ |
65 |
|
embeds: [ |
66 |
|
embed |
67 |
|
] |
68 |
|
}); |
69 |
|
} |
70 |
|
|
71 |
|
await webhookClient.destroy(); |
72 |
|
} |
73 |
|
catch (e) { |
74 |
|
console.log(e); |
75 |
|
} |
76 |
|
} |
77 |
} |
} |