mirror of
https://github.com/chenasraf/venom.git
synced 2026-05-17 17:28:08 +00:00
refactor: re-implement logger
This commit is contained in:
@@ -1,34 +0,0 @@
|
||||
import path from 'path';
|
||||
import winston from 'winston';
|
||||
|
||||
import LogLevel from '../../../../src/types/LogLevel';
|
||||
|
||||
import ConfigService from './config.service';
|
||||
|
||||
export default class LoggerService {
|
||||
private _logger: winston.Logger;
|
||||
|
||||
constructor(private _configService: ConfigService) {
|
||||
this._logger = winston.createLogger({
|
||||
level: this._configService.get('LOG_LEVEL'),
|
||||
format: winston.format.json(),
|
||||
transports: [
|
||||
new winston.transports.File({
|
||||
filename: path.resolve(__dirname, '../../', 'logs', 'error.log'),
|
||||
level: 'error',
|
||||
}),
|
||||
new winston.transports.Console({
|
||||
format: winston.format.simple(),
|
||||
}),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
log(level: LogLevel, message: string, payload?: unknown): void {
|
||||
if (this._logger[level]) {
|
||||
this._logger.log(level, message, payload);
|
||||
} else {
|
||||
this._logger.info(message, payload);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,8 @@
|
||||
"discord.js": "^14.15.3",
|
||||
"dotenv": "^16.4.5",
|
||||
"mongodb": "^6.8.0",
|
||||
"nanoid": "^5.0.7"
|
||||
"nanoid": "^5.0.7",
|
||||
"winston": "^3.13.1"
|
||||
},
|
||||
"nodemonConfig": {
|
||||
"ignore": [
|
||||
|
||||
199
pnpm-lock.yaml
generated
199
pnpm-lock.yaml
generated
@@ -20,6 +20,9 @@ importers:
|
||||
nanoid:
|
||||
specifier: ^5.0.7
|
||||
version: 5.0.7
|
||||
winston:
|
||||
specifier: ^3.13.1
|
||||
version: 3.13.1
|
||||
devDependencies:
|
||||
'@eslint/js':
|
||||
specifier: ^9.8.0
|
||||
@@ -45,6 +48,13 @@ importers:
|
||||
|
||||
packages:
|
||||
|
||||
'@colors/colors@1.6.0':
|
||||
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
|
||||
engines: {node: '>=0.1.90'}
|
||||
|
||||
'@dabh/diagnostics@2.0.3':
|
||||
resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==}
|
||||
|
||||
'@discordjs/builders@1.8.2':
|
||||
resolution: {integrity: sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==}
|
||||
engines: {node: '>=16.11.0'}
|
||||
@@ -282,6 +292,9 @@ packages:
|
||||
'@types/tough-cookie@4.0.5':
|
||||
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
|
||||
|
||||
'@types/triple-beam@1.3.5':
|
||||
resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
|
||||
|
||||
'@types/webidl-conversions@7.0.3':
|
||||
resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
|
||||
|
||||
@@ -392,6 +405,9 @@ packages:
|
||||
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
async@3.2.5:
|
||||
resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
|
||||
|
||||
asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
|
||||
@@ -428,13 +444,28 @@ packages:
|
||||
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
|
||||
engines: {node: '>= 8.10.0'}
|
||||
|
||||
color-convert@1.9.3:
|
||||
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
|
||||
|
||||
color-convert@2.0.1:
|
||||
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
||||
engines: {node: '>=7.0.0'}
|
||||
|
||||
color-name@1.1.3:
|
||||
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
|
||||
|
||||
color-name@1.1.4:
|
||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
|
||||
color-string@1.9.1:
|
||||
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
|
||||
|
||||
color@3.2.1:
|
||||
resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
|
||||
|
||||
colorspace@1.1.4:
|
||||
resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
|
||||
|
||||
combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
@@ -505,6 +536,9 @@ packages:
|
||||
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
enabled@2.0.0:
|
||||
resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
|
||||
|
||||
entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
@@ -567,6 +601,9 @@ packages:
|
||||
fastq@1.17.1:
|
||||
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
|
||||
|
||||
fecha@4.2.3:
|
||||
resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
|
||||
|
||||
file-entry-cache@6.0.1:
|
||||
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
@@ -586,6 +623,9 @@ packages:
|
||||
flatted@3.3.1:
|
||||
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
|
||||
|
||||
fn.name@1.1.0:
|
||||
resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
|
||||
|
||||
form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -670,6 +710,9 @@ packages:
|
||||
inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
|
||||
is-arrayish@0.3.2:
|
||||
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
||||
|
||||
is-binary-path@2.1.0:
|
||||
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -693,6 +736,10 @@ packages:
|
||||
is-potential-custom-element-name@1.0.1:
|
||||
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
||||
|
||||
is-stream@2.0.1:
|
||||
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
isexe@2.0.0:
|
||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||
|
||||
@@ -721,6 +768,9 @@ packages:
|
||||
keyv@4.5.4:
|
||||
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
|
||||
|
||||
kuler@2.0.0:
|
||||
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
|
||||
|
||||
levn@0.4.1:
|
||||
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -738,6 +788,10 @@ packages:
|
||||
lodash@4.17.21:
|
||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||
|
||||
logform@2.6.1:
|
||||
resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
||||
magic-bytes.js@1.10.0:
|
||||
resolution: {integrity: sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==}
|
||||
|
||||
@@ -823,6 +877,9 @@ packages:
|
||||
once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
|
||||
one-time@1.0.0:
|
||||
resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
|
||||
|
||||
optionator@0.9.4:
|
||||
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -882,6 +939,10 @@ packages:
|
||||
queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
||||
readable-stream@3.6.2:
|
||||
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
readdirp@3.6.0:
|
||||
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
@@ -914,6 +975,13 @@ packages:
|
||||
run-parallel@1.2.0:
|
||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||
|
||||
safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
|
||||
safe-stable-stringify@2.4.3:
|
||||
resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
|
||||
@@ -934,6 +1002,9 @@ packages:
|
||||
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
simple-swizzle@0.2.2:
|
||||
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
|
||||
|
||||
simple-update-notifier@2.0.0:
|
||||
resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -945,9 +1016,15 @@ packages:
|
||||
sparse-bitfield@3.0.3:
|
||||
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
|
||||
|
||||
stack-trace@0.0.10:
|
||||
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
|
||||
|
||||
stream-transform@3.3.2:
|
||||
resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==}
|
||||
|
||||
string_decoder@1.3.0:
|
||||
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
|
||||
|
||||
strip-ansi@6.0.1:
|
||||
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -967,6 +1044,9 @@ packages:
|
||||
symbol-tree@3.2.4:
|
||||
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
|
||||
|
||||
text-hex@1.0.0:
|
||||
resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
|
||||
|
||||
text-table@0.2.0:
|
||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||
|
||||
@@ -990,6 +1070,10 @@ packages:
|
||||
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
triple-beam@1.4.1:
|
||||
resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==}
|
||||
engines: {node: '>= 14.0.0'}
|
||||
|
||||
ts-api-utils@1.3.0:
|
||||
resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
|
||||
engines: {node: '>=16'}
|
||||
@@ -1050,6 +1134,9 @@ packages:
|
||||
url-parse@1.5.10:
|
||||
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
|
||||
|
||||
util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
|
||||
w3c-xmlserializer@5.0.0:
|
||||
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -1079,6 +1166,14 @@ packages:
|
||||
engines: {node: '>= 8'}
|
||||
hasBin: true
|
||||
|
||||
winston-transport@4.7.1:
|
||||
resolution: {integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
||||
winston@3.13.1:
|
||||
resolution: {integrity: sha512-SvZit7VFNvXRzbqGHsv5KSmgbEYR5EiQfDAL9gxYkRqa934Hnk++zze0wANKtMHcy/gI4W/3xmSDwlhf865WGw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
||||
word-wrap@1.2.5:
|
||||
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -1111,6 +1206,14 @@ packages:
|
||||
|
||||
snapshots:
|
||||
|
||||
'@colors/colors@1.6.0': {}
|
||||
|
||||
'@dabh/diagnostics@2.0.3':
|
||||
dependencies:
|
||||
colorspace: 1.1.4
|
||||
enabled: 2.0.0
|
||||
kuler: 2.0.0
|
||||
|
||||
'@discordjs/builders@1.8.2':
|
||||
dependencies:
|
||||
'@discordjs/formatters': 0.4.0
|
||||
@@ -1301,6 +1404,8 @@ snapshots:
|
||||
|
||||
'@types/tough-cookie@4.0.5': {}
|
||||
|
||||
'@types/triple-beam@1.3.5': {}
|
||||
|
||||
'@types/webidl-conversions@7.0.3': {}
|
||||
|
||||
'@types/whatwg-url@11.0.5':
|
||||
@@ -1430,6 +1535,8 @@ snapshots:
|
||||
|
||||
array-union@2.1.0: {}
|
||||
|
||||
async@3.2.5: {}
|
||||
|
||||
asynckit@0.4.0: {}
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
@@ -1470,12 +1577,33 @@ snapshots:
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
color-convert@1.9.3:
|
||||
dependencies:
|
||||
color-name: 1.1.3
|
||||
|
||||
color-convert@2.0.1:
|
||||
dependencies:
|
||||
color-name: 1.1.4
|
||||
|
||||
color-name@1.1.3: {}
|
||||
|
||||
color-name@1.1.4: {}
|
||||
|
||||
color-string@1.9.1:
|
||||
dependencies:
|
||||
color-name: 1.1.4
|
||||
simple-swizzle: 0.2.2
|
||||
|
||||
color@3.2.1:
|
||||
dependencies:
|
||||
color-convert: 1.9.3
|
||||
color-string: 1.9.1
|
||||
|
||||
colorspace@1.1.4:
|
||||
dependencies:
|
||||
color: 3.2.1
|
||||
text-hex: 1.0.0
|
||||
|
||||
combined-stream@1.0.8:
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
@@ -1552,6 +1680,8 @@ snapshots:
|
||||
|
||||
dotenv@16.4.5: {}
|
||||
|
||||
enabled@2.0.0: {}
|
||||
|
||||
entities@4.5.0: {}
|
||||
|
||||
esbuild@0.21.5:
|
||||
@@ -1668,6 +1798,8 @@ snapshots:
|
||||
dependencies:
|
||||
reusify: 1.0.4
|
||||
|
||||
fecha@4.2.3: {}
|
||||
|
||||
file-entry-cache@6.0.1:
|
||||
dependencies:
|
||||
flat-cache: 3.2.0
|
||||
@@ -1689,6 +1821,8 @@ snapshots:
|
||||
|
||||
flatted@3.3.1: {}
|
||||
|
||||
fn.name@1.1.0: {}
|
||||
|
||||
form-data@4.0.0:
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
@@ -1780,6 +1914,8 @@ snapshots:
|
||||
|
||||
inherits@2.0.4: {}
|
||||
|
||||
is-arrayish@0.3.2: {}
|
||||
|
||||
is-binary-path@2.1.0:
|
||||
dependencies:
|
||||
binary-extensions: 2.3.0
|
||||
@@ -1796,6 +1932,8 @@ snapshots:
|
||||
|
||||
is-potential-custom-element-name@1.0.1: {}
|
||||
|
||||
is-stream@2.0.1: {}
|
||||
|
||||
isexe@2.0.0: {}
|
||||
|
||||
js-yaml@4.1.0:
|
||||
@@ -1840,6 +1978,8 @@ snapshots:
|
||||
dependencies:
|
||||
json-buffer: 3.0.1
|
||||
|
||||
kuler@2.0.0: {}
|
||||
|
||||
levn@0.4.1:
|
||||
dependencies:
|
||||
prelude-ls: 1.2.1
|
||||
@@ -1855,6 +1995,15 @@ snapshots:
|
||||
|
||||
lodash@4.17.21: {}
|
||||
|
||||
logform@2.6.1:
|
||||
dependencies:
|
||||
'@colors/colors': 1.6.0
|
||||
'@types/triple-beam': 1.3.5
|
||||
fecha: 4.2.3
|
||||
ms: 2.1.2
|
||||
safe-stable-stringify: 2.4.3
|
||||
triple-beam: 1.4.1
|
||||
|
||||
magic-bytes.js@1.10.0: {}
|
||||
|
||||
memory-pager@1.5.0: {}
|
||||
@@ -1918,6 +2067,10 @@ snapshots:
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
|
||||
one-time@1.0.0:
|
||||
dependencies:
|
||||
fn.name: 1.1.0
|
||||
|
||||
optionator@0.9.4:
|
||||
dependencies:
|
||||
deep-is: 0.1.4
|
||||
@@ -1965,6 +2118,12 @@ snapshots:
|
||||
|
||||
queue-microtask@1.2.3: {}
|
||||
|
||||
readable-stream@3.6.2:
|
||||
dependencies:
|
||||
inherits: 2.0.4
|
||||
string_decoder: 1.3.0
|
||||
util-deprecate: 1.0.2
|
||||
|
||||
readdirp@3.6.0:
|
||||
dependencies:
|
||||
picomatch: 2.3.1
|
||||
@@ -1989,6 +2148,10 @@ snapshots:
|
||||
dependencies:
|
||||
queue-microtask: 1.2.3
|
||||
|
||||
safe-buffer@5.2.1: {}
|
||||
|
||||
safe-stable-stringify@2.4.3: {}
|
||||
|
||||
safer-buffer@2.1.2: {}
|
||||
|
||||
saxes@6.0.0:
|
||||
@@ -2003,6 +2166,10 @@ snapshots:
|
||||
|
||||
shebang-regex@3.0.0: {}
|
||||
|
||||
simple-swizzle@0.2.2:
|
||||
dependencies:
|
||||
is-arrayish: 0.3.2
|
||||
|
||||
simple-update-notifier@2.0.0:
|
||||
dependencies:
|
||||
semver: 7.6.3
|
||||
@@ -2013,8 +2180,14 @@ snapshots:
|
||||
dependencies:
|
||||
memory-pager: 1.5.0
|
||||
|
||||
stack-trace@0.0.10: {}
|
||||
|
||||
stream-transform@3.3.2: {}
|
||||
|
||||
string_decoder@1.3.0:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
strip-ansi@6.0.1:
|
||||
dependencies:
|
||||
ansi-regex: 5.0.1
|
||||
@@ -2031,6 +2204,8 @@ snapshots:
|
||||
|
||||
symbol-tree@3.2.4: {}
|
||||
|
||||
text-hex@1.0.0: {}
|
||||
|
||||
text-table@0.2.0: {}
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
@@ -2054,6 +2229,8 @@ snapshots:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
triple-beam@1.4.1: {}
|
||||
|
||||
ts-api-utils@1.3.0(typescript@5.5.4):
|
||||
dependencies:
|
||||
typescript: 5.5.4
|
||||
@@ -2105,6 +2282,8 @@ snapshots:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
|
||||
util-deprecate@1.0.2: {}
|
||||
|
||||
w3c-xmlserializer@5.0.0:
|
||||
dependencies:
|
||||
xml-name-validator: 5.0.0
|
||||
@@ -2131,6 +2310,26 @@ snapshots:
|
||||
dependencies:
|
||||
isexe: 2.0.0
|
||||
|
||||
winston-transport@4.7.1:
|
||||
dependencies:
|
||||
logform: 2.6.1
|
||||
readable-stream: 3.6.2
|
||||
triple-beam: 1.4.1
|
||||
|
||||
winston@3.13.1:
|
||||
dependencies:
|
||||
'@colors/colors': 1.6.0
|
||||
'@dabh/diagnostics': 2.0.3
|
||||
async: 3.2.5
|
||||
is-stream: 2.0.1
|
||||
logform: 2.6.1
|
||||
one-time: 1.0.0
|
||||
readable-stream: 3.6.2
|
||||
safe-stable-stringify: 2.4.3
|
||||
stack-trace: 0.0.10
|
||||
triple-beam: 1.4.1
|
||||
winston-transport: 4.7.1
|
||||
|
||||
word-wrap@1.2.5: {}
|
||||
|
||||
wrappy@1.0.2: {}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import Discord from 'discord.js'
|
||||
import { command, commands } from '@/core/commands'
|
||||
import { BOT_PREFIX } from '@/env'
|
||||
import { logger } from '@/core/logger'
|
||||
|
||||
export default command({
|
||||
command: 'help',
|
||||
@@ -62,7 +63,7 @@ export default command({
|
||||
try {
|
||||
return message.reply(data.join('\n'))
|
||||
} catch (error) {
|
||||
console.log('error', `Could not send help DM to ${message.author.tag}.\n`, error)
|
||||
logger.error(`Could not send help DM to ${message.author.tag}.\n`, error)
|
||||
|
||||
return message.reply("it seems like I can't DM you! Do you have DMs disabled?")
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Message } from 'discord.js'
|
||||
import path from 'node:path'
|
||||
import fs from 'node:fs/promises'
|
||||
import { BOT_TRIGGERS } from '@/env'
|
||||
import { logger } from './logger'
|
||||
|
||||
export interface Command {
|
||||
command: string
|
||||
@@ -19,7 +20,7 @@ export async function loadCommands(): Promise<Command[]> {
|
||||
const files = await fs.readdir(dir)
|
||||
for (const file of files) {
|
||||
const command = (await import(path.resolve(dir, file))).default
|
||||
console.log('Command loaded:', command.command)
|
||||
logger.debug('Command loaded:', command.command)
|
||||
_commands[command.command] = command
|
||||
}
|
||||
return Object.values(_commands)
|
||||
|
||||
67
src/core/logger.ts
Normal file
67
src/core/logger.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { LOG_LEVEL } from '@/env'
|
||||
import path from 'path'
|
||||
import winston from 'winston'
|
||||
import util from 'node:util'
|
||||
|
||||
const _logger = winston.createLogger({
|
||||
level: LOG_LEVEL,
|
||||
format: winston.format.json(),
|
||||
transports: [
|
||||
new winston.transports.File({
|
||||
filename: path.resolve(process.cwd(), 'logs', 'error.log'),
|
||||
level: 'error',
|
||||
format: winston.format.uncolorize(),
|
||||
}),
|
||||
new winston.transports.Console({
|
||||
format: winston.format.printf((i) => {
|
||||
const colorMap: Record<LogLevel, number> = {
|
||||
error: 31, // red
|
||||
warn: 33, // yellow
|
||||
info: 36, // cyan
|
||||
verbose: 32, // green
|
||||
debug: 34, // blue
|
||||
silly: 35, // magenta
|
||||
}
|
||||
const color = `\x1b[${colorMap[i.level as LogLevel]}m[`
|
||||
const level = i.level.toUpperCase().padEnd(7, ' ')
|
||||
return `${color}${level}] ${i.message}`
|
||||
}),
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
export type LogLevel = 'error' | 'warn' | 'info' | 'verbose' | 'debug' | 'silly'
|
||||
|
||||
function _log(level: LogLevel, ...message: unknown[]): void {
|
||||
const parsed =
|
||||
`[${new Date().toISOString()}] ` +
|
||||
message
|
||||
.map((x) => (typeof x === 'object' ? util.inspect(x, { depth: null }) : x?.toString()))
|
||||
.join(' ')
|
||||
if (_logger[level]) {
|
||||
_logger.log(level, parsed)
|
||||
} else {
|
||||
_logger.info(parsed)
|
||||
}
|
||||
}
|
||||
|
||||
export function log(...message: unknown[]): void {
|
||||
_log('info', ...message)
|
||||
}
|
||||
|
||||
export function warn(...message: unknown[]): void {
|
||||
_log('warn', ...message)
|
||||
}
|
||||
|
||||
export function error(...message: unknown[]): void {
|
||||
_log('error', ...message)
|
||||
}
|
||||
|
||||
export function info(...message: unknown[]): void {
|
||||
_log('info', ...message)
|
||||
}
|
||||
export function debug(...message: unknown[]): void {
|
||||
_log('debug', ...message)
|
||||
}
|
||||
|
||||
export const logger = Object.assign(_log, { log, warn, error, info, debug })
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Client, Events, GatewayIntentBits } from 'discord.js'
|
||||
import { BOT_TRIGGERS, DISCORD_TOKEN } from '@/env'
|
||||
import { loadCommands, parseArguments, parseCommand } from '@/core/commands'
|
||||
import { logger } from '@/core/logger'
|
||||
|
||||
const client = new Client({
|
||||
intents: [
|
||||
@@ -11,17 +12,17 @@ const client = new Client({
|
||||
})
|
||||
|
||||
loadCommands().then((commands) =>
|
||||
console.log('Commands loaded:', commands.map((c) => c.command).join(', ')),
|
||||
logger.log('Commands loaded:', commands.map((c) => c.command).join(', ')),
|
||||
)
|
||||
|
||||
client.once(Events.ClientReady, (readyClient) => {
|
||||
console.log('Ready! Logged in as', readyClient.user.tag)
|
||||
logger.log('Ready! Logged in as', readyClient.user.tag)
|
||||
readyClient.on(Events.MessageCreate, (message) => {
|
||||
console.log('Message received:', message.content, 'from', message.author)
|
||||
logger.log('Message received:', message.content, 'from', message.author)
|
||||
|
||||
for (const prefix of BOT_TRIGGERS) {
|
||||
if (message.content.startsWith(prefix)) {
|
||||
console.log('Command received:', message.content, 'from', message.author)
|
||||
logger.log('Command received:', message.content, 'from', message.author)
|
||||
const command = parseCommand(message.content)
|
||||
const [cmdName, ...args] = parseArguments(message.content)
|
||||
if (command) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import path from 'node:path'
|
||||
import { JSDOM } from 'jsdom'
|
||||
import { Quote } from '@/commands/quotes.command'
|
||||
import { nanoid } from 'nanoid'
|
||||
import { logger } from '@/core/logger'
|
||||
|
||||
const PAGE_SIZE = 15
|
||||
const MAX_PAGE = 35
|
||||
@@ -28,7 +29,7 @@ async function run(): Promise<void> {
|
||||
|
||||
for (let i = 0; i < PAGE_SIZE * MAX_PAGE; i += PAGE_SIZE) {
|
||||
const urlWithPage = `${url}&st=${i}`
|
||||
console.log(`fetching: ${urlWithPage}`)
|
||||
logger.log(`fetching: ${urlWithPage}`)
|
||||
|
||||
const headers = new Headers()
|
||||
headers.set('Cookie', process.env.CA_SCRAPER_COOKIE!)
|
||||
@@ -46,13 +47,13 @@ async function run(): Promise<void> {
|
||||
const author = (row.querySelector('td:first-child') as HTMLElement).innerText
|
||||
const quote = (row.querySelector('td:nth-child(2)') as HTMLElement).innerText
|
||||
if (!author && !quote) continue
|
||||
console.log(`Found: ${author}: "${quote}"`)
|
||||
logger.log(`Found: ${author}: "${quote}"`)
|
||||
quotes.push({ author, quote, uid: nanoid() })
|
||||
}
|
||||
return quotes
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error)
|
||||
logger.error(error)
|
||||
return [] as Quote[]
|
||||
}),
|
||||
)
|
||||
@@ -61,7 +62,7 @@ async function run(): Promise<void> {
|
||||
await Promise.all(promises)
|
||||
|
||||
await fs.writeFile(path.join(outputDir, 'quotes.json'), JSON.stringify(quotes))
|
||||
console.log('Wrote output.')
|
||||
logger.log('Wrote output.')
|
||||
|
||||
const csvOut = [['author', 'quote']]
|
||||
for (const row of quotes) {
|
||||
@@ -77,7 +78,7 @@ async function run(): Promise<void> {
|
||||
stringify(quotes, async (err, out) => {
|
||||
if (err) throw err
|
||||
await fs.writeFile(path.join(outputDir, 'quotes.csv'), out)
|
||||
console.log('Wrote output.')
|
||||
logger.log('Wrote output.')
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import path from 'node:path'
|
||||
import { Quote } from '@/commands/quotes.command'
|
||||
import { nanoid } from 'nanoid'
|
||||
import { db } from '@/core/db'
|
||||
import { logger } from '@/core/logger'
|
||||
|
||||
async function run(): Promise<void> {
|
||||
const outputDir = path.join(__dirname, '..', 'outputs')
|
||||
@@ -11,15 +12,15 @@ async function run(): Promise<void> {
|
||||
const data = await fs.readFile(path.join(outputDir, 'quotes_clean.csv'))
|
||||
parse(data.toString(), { columns: true }, async (csvErr, rows: Quote[]) => {
|
||||
if (csvErr) throw csvErr
|
||||
console.log('Start dumping...')
|
||||
logger.log('Start dumping...')
|
||||
|
||||
try {
|
||||
await db
|
||||
.collection<Quote>('quotes')
|
||||
.insertMany(rows.map((row) => ({ ...row, uid: nanoid() })))
|
||||
console.log('Done dumping.')
|
||||
logger.log('Done dumping.')
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
logger.error(error)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user