diff --git a/.eslintrc.json b/.eslintrc.json index 76548097..7d832ed8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,4 +1,9 @@ { + /* + 3urobeat's EsLint Config. Requires eslint & eslint-plugin-jsdoc to be installed as devDependencies. + https://github.com/3urobeat + */ + "env": { "commonjs": true, "es6": true, diff --git a/README.md b/README.md index c911d52e..6919ebda 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
[![YouTube](https://img.shields.io/badge/YouTube-Tutorial-red)](https://youtu.be/8J78rC9Z28U) -[![nodejs](https://img.shields.io/badge/node.js-v14-brightgreen)](https://nodejs.org/) +[![nodejs](https://img.shields.io/badge/node.js-v16-brightgreen)](https://nodejs.org/) [![Star](https://img.shields.io/badge/-Give%20this%20repo%20a%20star!-yellow)](https://github.com/3urobeat/steam-comment-service-bot) [![Steam Group](https://img.shields.io/badge/Steam%20Group-Join!-blue)](https://steamcommunity.com/groups/3urobeatGroup) [![Donate](https://img.shields.io/badge/Donate-%241-orange)](https://github.com/sponsors/3urobeat) @@ -18,7 +18,7 @@

Introduction • - Setup & Config Guide • + Setup & Configuration GuideWikiGet HelpLicense @@ -28,9 +28,12 @@   -## **Introduction** + + +## ✨ **Introduction** +**Features:** * Request profile, group, screenshot, artwork, guide or discussion comments directly from the Steam Chat * Manage hundreds of Steam accounts with ease and control them from **one** terminal and Steam Chat * No need of having a Steam Client installed - perfect for hosting on a server @@ -46,21 +49,19 @@ If you would like to rather follow a video than these written instructions, clic   -## Setup & Config Guide: + + +## 🚀 Setup & Configuration Guide: Follow the Wiki's [**Setup Guide by clicking here**](./docs/wiki/setup_guide.md) to get started! This process is pretty simple and should not take you long! -**Disclaimer!** -> I, 3urobeat (the developer), am not responsible and cannot be held liable for any action the operator/user of this bot uses it for. -> By using this application you agree to not misuse it! -   -## Additional Information: +## 💡 Additional Information:

[![Sponsor](https://img.shields.io/badge/Sponsor-%241-orange)](https://github.com/sponsors/3urobeat) ![Star](https://img.shields.io/github/stars/3urobeat/steam-comment-service-bot) -> If you like this project please consider donating a dollar by clicking on the **Sponsor** badge and by giving this repository a **Star** at the top! +> If you like this project please consider donating a dollar by clicking on the **Sponsor** badge and by giving this repository a **Star** at the top! Thank you so much!
@@ -90,4 +91,4 @@ When using this project as a whole you are only allowed to edit the config files #### **Credits & Donations** Thank you [DoctorMcKay](https://github.com/DoctorMcKay) for creating the [steam-user](https://github.com/DoctorMcKay/node-steam-user) and [steamcommunity](https://github.com/DoctorMcKay/node-steamcommunity) libraries which this project heavily depends on! -Thank you so much to every single one who donated a dollar or two; there are now too many names to list them one by one! ❤️ \ No newline at end of file +Thank you so much to every single one who donated a dollar or two; there are now too many names to list them one by one! ❤️ diff --git a/docs/dev/bot/bot.md b/docs/dev/bot/bot.md index bf9fab54..74bec244 100644 --- a/docs/dev/bot/bot.md +++ b/docs/dev/bot/bot.md @@ -10,4 +10,11 @@ The bot object itself handles events for this specific account (e.g. chat messag   Every function and object property is documented with JsDocs in the implementation file. -Please check them out using your IntelliSense or by clicking the button in the top right corner of this page. \ No newline at end of file +Please check them out using your IntelliSense or by clicking the button in the top right corner of this page. + +  + +### index +Each bot account gets an index assigned during the first login. +The index property must match to the index of the corresponding entry inside the `data.logininfo` array. +Should you want to modify the account order during runtime, you must also make the same change in the logininfo array. \ No newline at end of file diff --git a/docs/dev/dataManager/dataManager.md b/docs/dev/dataManager/dataManager.md index 97ea3814..d42d74a6 100644 --- a/docs/dev/dataManager/dataManager.md +++ b/docs/dev/dataManager/dataManager.md @@ -15,6 +15,11 @@ Please check them out using your IntelliSense or by clicking the button in the t   +### logininfo +Array of objects storing the login information of every bot account. +The index property must match to the index of the corresponding bot account. +Should you want to modify the account order during runtime, you must also make the same change in this array. + ### lang Object storing all supported languages and their strings used for responding to a user. diff --git a/docs/wiki/changelogs/CHANGELOG_v2.14.md b/docs/wiki/changelogs/CHANGELOG_v2.14.md index 804b1a16..d98d64a5 100644 --- a/docs/wiki/changelogs/CHANGELOG_v2.14.md +++ b/docs/wiki/changelogs/CHANGELOG_v2.14.md @@ -5,6 +5,7 @@ **Current** - [2.14.0](#2.14.0) +- [2.14.1](#2.14.1)   @@ -225,4 +226,41 @@ If you are using a `customlang.json`, make sure to read the language string chan -  \ No newline at end of file +Commit: [b4072cf](https://github.com/3urobeat/steam-comment-service-bot/commit/b4072cf) + +  + + + +## **2023-12-28, Version 2.14.1** +**Additions:** +- Added logging of username in friendMessage event +- Added logging of friend relationship status in friendMessage and steamChatInteraction handlers +- Added [official discord plugin](https://github.com/3urobeat/steam-comment-bot-discord-plugin) to default package set +- Added a few emojis to the README.md to visually break up the wall of text +- Added a deprecation warning to `logininfo.json` import; please use `accounts.txt` + +**Fixes:** +- Fixed data integrity check failing when using an absolute path [#217](https://github.com/3urobeat/steam-comment-service-bot/issues/217) by forcing working dir to `__dirname` in `start.js` +- Fixed two dependency errors on initial start caused by outdated node.js version +- Fixed `downloadUpdate()` deleting ratingHistory & userSetting database contents (whoops, sorry!) +- Fixed plugin config not being updated when plugin data directory of previously installed plugin has been deleted +- Fixed TypeError and missing license detected when null was provided in `config.json` `childaccplayinggames` +- Fixed comments not allowed on friendsonly profiles + - Profile visibility is now handled better in general +- Fixed dataImport not resolving language correctly on restore + +**Changes:** +- **Bumped minimum supported node.js version to v16.0.0!** + - This fixes the two aforementioned dependency issues on initial start +- Improved how logininfo object is accessed during login and clarified index -> accountName association in wiki +- Failed follow request now inserts user into `ratingHistory.db` anyway because enum 2 is also used for a duplicate request +- Simplified inserting user into `lastcomment.db` database on friend request accept +- Improved language string `failedcmdnothingfound` to include all request types; russian translation update by [@sashascurtu](https://github.com/sashascurtu) +- Ignored `package-lock.json` in dataIntegrity check system +- Removed a few unnecessary last iteration checks when nothing async was happening +- Made `aggregatePluginConfig()` private +- Updated every file header to ISO date and update copyright date +- Wiki: Improved `unfriendtime` config key explanation +- Updated dependencies +- Minor other changes diff --git a/docs/wiki/config_doc.md b/docs/wiki/config_doc.md index 9b97cbea..1c3bdea5 100644 --- a/docs/wiki/config_doc.md +++ b/docs/wiki/config_doc.md @@ -20,11 +20,11 @@ This is the full documentation to customize your `config.json`. | maxRequests | Number | Defines how many comments/likes/favs a normal user can request from your bot. Will automatically use accounts multiple times if it is greater than the amount of accounts logged in. | | maxOwnerRequests | Number | Defines how many comments/likes/favs owners can request (every user in the ownerid list below). Will automatically use accounts multiple times if it is greater than the amount of accounts logged in. | | randomizeAccounts | true or false | Defines if the order of accounts used to comment should be randomized. Default: false | -| unfriendtime | Days | Number of days the bot will wait before unfriending someone who hasn't requested a comment in that time period except the owner. Set to 0 to disable. | +| unfriendtime | Days | Amount of days after which the bot will unfriend an inactive user (activity is measured using when they last started a request). Does not unfriend owners. Set to 0 to disable. | | playinggames | `["custom game", game id, game id, ...]` | This custom text will be shown on your profile as the name of a game you are playing. The bot will play the set game ids. Don't provide a string to disable the custom game text. | | childaccplayinggames | `["custom game", game id, game id, ...]`

or

`[{ "myacc1": ["Specific Game", 730], "myacc25": [] }, "General Game", 440]` | Same behaviour as playinggames but sets the status and games for all child accounts.
Use the second syntax to set specific games for specific child accounts.
Replace "myacc1" etc. with the username of the corresponding account.

This example will display "Specific Game" game & idle CS2 only for account "myacc1", idle nothing for account "myacc25" and display "General Game" & idle TF2 for all other accounts. | | yourgroup | "url to group" | Advertise your group with the !group command. Leave it empty (like this: "") to disable the command. | | botsgroupid | "url to group" | All bot accounts will join this group. Disable this feature by leaving the brackets empty (like this: ""). | | acceptgroupinvites | true or false | Defines if the bots will accept group invites from other users. A group invite from the main bot will always be accepted. | | owner | "url to profile" | Advertise your own profile with the !owner command. Leave it empty (like this: "") to disable the command. | -| ownerid | ["profile link or id1", "id2"] | Sets these users as owners. Needs to be set to use the bot. You can set profile links or ids like in the example to have multiple owners. | \ No newline at end of file +| ownerid | ["profile link or id1", "id2"] | Sets these users as owners. Needs to be set to use the bot. You can set profile links or ids like in the example to have multiple owners. | diff --git a/docs/wiki/setup_guide.md b/docs/wiki/setup_guide.md index 15d7dbc2..6d9465c5 100644 --- a/docs/wiki/setup_guide.md +++ b/docs/wiki/setup_guide.md @@ -30,7 +30,7 @@ Every headline on this page also contains a YouTube badge which will take you to Click here: [Download](https://github.com/3urobeat/steam-comment-service-bot/archive/master.zip) Extract the zip and open the `steam-comment-service-bot` folder. -You need to have at least node.js version 14.15.0 installed: [Download](https://nodejs.org) +You need to have at least node.js version 16.0.0 installed: [Download](https://nodejs.org) If you already have node installed, check the version number by running `node --version` in your console or terminal. If you need a tutorial for this specific node part, [click here.](https://youtu.be/8J78rC9Z28U?t=60) diff --git a/package-lock.json b/package-lock.json index 81eba3c1..386b3e8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,32 +1,33 @@ { "name": "steam-comment-service-bot", - "version": "2.14.0", + "version": "2.14.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "steam-comment-service-bot", - "version": "2.14.0", + "version": "2.14.1", "license": "GPL-3.0", "dependencies": { - "@seald-io/nedb": "^4.0.2", - "@types/tail": "^2.2.2", + "@seald-io/nedb": "^4.0.3", + "@types/tail": "^2.2.3", "download": "^8.0.0", "htmlparser2": "^9.0.0", "https": "^1.0.0", "output-logger": "^2.3.7", "request": "^2.88.2", + "steam-comment-bot-discord-plugin": "^1.0.1", "steam-comment-bot-rest": "^1.1.0", "steam-comment-bot-webserver": "file:plugins/steam-comment-bot-webserver-1.0.0.tgz", - "steam-session": "^1.6.0", - "steam-user": "^5.0.1", - "steamcommunity": "^3.47.1", + "steam-session": "^1.7.1", + "steam-user": "^5.0.4", + "steamcommunity": "^3.48.0", "steamid": "^2.0.0", "steamid-resolver": "^1.3.4" }, "devDependencies": { - "eslint": "^8.52.0", - "eslint-plugin-jsdoc": "^46.8.2", + "eslint": "^8.56.0", + "eslint-plugin-jsdoc": "^46.9.1", "tsd-jsdoc": "^2.5.0" } }, @@ -40,9 +41,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "peer": true, "bin": { @@ -65,6 +66,104 @@ "resolved": "https://registry.npmjs.org/@bbob/plugin-helper/-/plugin-helper-2.9.0.tgz", "integrity": "sha512-idpUcNQ2co6T1oU/7/DG/ZRfipSSkTn9Ozw9f5vaXH7nzV3qhqZnhFVlHTzGGnRlzKlBwWOBzOdWi4Zeqg1c5A==" }, + "node_modules/@discordjs/builders": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz", + "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==", + "dependencies": { + "@discordjs/formatters": "^0.3.3", + "@discordjs/util": "^1.0.2", + "@sapphire/shapeshift": "^3.9.3", + "discord-api-types": "0.37.61", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz", + "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==", + "dependencies": { + "discord-api-types": "0.37.61" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@discordjs/util": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz", + "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz", + "integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.9", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "tslib": "^2.6.2", + "ws": "^8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, "node_modules/@doctormckay/stats-reporter": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@doctormckay/stats-reporter/-/stats-reporter-1.0.5.tgz", @@ -74,9 +173,9 @@ } }, "node_modules/@doctormckay/stdlib": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@doctormckay/stdlib/-/stdlib-2.9.0.tgz", - "integrity": "sha512-5lG6MYx749UgPpsCJ9zceERU/Bd7847Tpsy03gdrBI7FLLkrHLYT1dh8QQNz7OLLfxnN0xgAzZXu0nZhwsiVZg==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@doctormckay/stdlib/-/stdlib-2.9.1.tgz", + "integrity": "sha512-o/gEe6iTMMLQgJytfpYehAQVTvUsEyPiOOM66ATmzRlHgXdvj9XD5SWjd+DqHZqd5zv6RCC2pO4ktqfMnFU7vA==", "dependencies": { "psl": "^1.9.0" }, @@ -95,12 +194,12 @@ "integrity": "sha512-F+sL1YmebZTY2CnjoR9BXFEULpq7y8dxyLx48LZVa0BSDseXdLG/DtPISfM1iNv1XKCeiBzVNfAT/MOQ69v1Zw==" }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.40.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz", - "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==", + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", + "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", "dev": true, "dependencies": { - "comment-parser": "1.4.0", + "comment-parser": "1.4.1", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" }, @@ -124,18 +223,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -156,14 +255,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -286,15 +393,45 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.1.tgz", + "integrity": "sha512-1RdpsmDQR/aWfp8oJzPtn4dNQrbpqSL5PIA0uAB/XwerPXUf994Ug1au1e7uGcD7ei8/F63UDjr5GWps1g/HxQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.5.tgz", + "integrity": "sha512-AGdHe+51gF7D3W8hBfuSFLBocURDCXVQczScTHXDS3RpNjNgrktIx/amlz5y8nHhm8SAdFt/X8EF8ZSfjJ0tnA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@seald-io/binary-search-tree": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" }, "node_modules/@seald-io/nedb": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", - "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.3.tgz", + "integrity": "sha512-ik4rn0Ks8q1VEzhe6qFh9/MBrw77ym1OZxF2mBS6/H8cr4lpNhCvF8FqB901Oft1CSP50LL0ay4QQCU3xqn+Ew==", "dependencies": { "@seald-io/binary-search-tree": "^1.0.3", "localforage": "^1.9.0", @@ -324,32 +461,32 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", - "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bytebuffer": { - "version": "5.0.46", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.46.tgz", - "integrity": "sha512-QxINdj2nX5ITZfRk4fOZza9IGVJ0QLBeVIuUcEEcmTm1MyPn0PRiK+tf8K7XXwJ+fjT9S5aKt+z78NlCm2RNtA==", + "version": "5.0.48", + "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.48.tgz", + "integrity": "sha512-ormKm68NtTOtR8C/4jyRJEYbwKABXRkHHR/1fmkiuFbCQkltgtXSUGfldCSmJzvuyJvmBzWjBbOi79Ry/oJQug==", "dependencies": { "@types/long": "^3.0.0", "@types/node": "*" } }, "node_modules/@types/caseless": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.4.tgz", - "integrity": "sha512-2in/lrHRNmDvHPgyormtEralhPcN3An1gLjJzj2Bw145VBxkQ75JEXW6CTdMAwShiHQcYsl2d10IjQSdJSJz4g==" + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" }, "node_modules/@types/connect": { - "version": "3.4.37", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", - "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } @@ -360,17 +497,17 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.15", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", - "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/express": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", - "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -379,9 +516,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.39", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", - "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -390,22 +527,22 @@ } }, "node_modules/@types/file-manager": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/file-manager/-/file-manager-2.0.2.tgz", - "integrity": "sha512-G4MGSeQ0tOuK5f5ApSb9ft5z0hpLaVP4yOzDspNPjyVmNSKpFWGb1vVCurJ83X+ydUpZd3yR/hie9xFJLbgCeg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/file-manager/-/file-manager-2.0.3.tgz", + "integrity": "sha512-gEq6de+iMbjmkL3Wj183JQ651h9b331wQ3svXp2K6RkgBg+TtiyIZTMols/a3UtXllVV9kSelz/N3Rgh0n6S4g==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/http-errors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", - "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/linkify-it": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz", - "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", "dev": true, "peer": true }, @@ -426,39 +563,39 @@ } }, "node_modules/@types/mdurl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz", - "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", "dev": true, "peer": true }, "node_modules/@types/mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/node": { - "version": "20.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", - "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/qs": { - "version": "6.9.9", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", - "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==" + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/range-parser": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", - "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/request": { - "version": "2.48.11", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", - "integrity": "sha512-HuihY1+Vss5RS9ZHzRyTGIzwPTdrJBkCm/mAeLRYrOQu/MGqyezKXWOK1VhCnR+SDbp9G2mRUP+OVEqCrzpcfA==", + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -480,18 +617,18 @@ } }, "node_modules/@types/send": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", - "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", - "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -499,9 +636,9 @@ } }, "node_modules/@types/steam-user": { - "version": "4.26.6", - "resolved": "https://registry.npmjs.org/@types/steam-user/-/steam-user-4.26.6.tgz", - "integrity": "sha512-+3gCVc8zsCMt9IRbSS1bhBBsTyzYX1GxreiqBx2Uz+MO3YDxx47E+3aTafqsFWXGOy+jbu6q+kAqVrPtHpaQYg==", + "version": "4.26.8", + "resolved": "https://registry.npmjs.org/@types/steam-user/-/steam-user-4.26.8.tgz", + "integrity": "sha512-LAQzr++DYyG8DJfuGOC7V2LC1H0jrLwR7Z5ibUCffWtoq7UHrdWNW1JJbgOZZY2diSQbX81DfHryb/jcjGgm+Q==", "dependencies": { "@types/bytebuffer": "*", "@types/file-manager": "*", @@ -510,9 +647,9 @@ } }, "node_modules/@types/steamcommunity": { - "version": "3.43.4", - "resolved": "https://registry.npmjs.org/@types/steamcommunity/-/steamcommunity-3.43.4.tgz", - "integrity": "sha512-wmLGf5GfhKs/tWr3jppppiOmbzdYsDucnmS1lCcDmvXysiMIEhIL60Y8g7BU337dKyBzyotlWRMjae0UU4cGvA==", + "version": "3.43.6", + "resolved": "https://registry.npmjs.org/@types/steamcommunity/-/steamcommunity-3.43.6.tgz", + "integrity": "sha512-IwVjm+500EXBINdHi0DmxpFWPks/fF2/s/1XSXOSM/MiF9CqRXNRRnV4o6PJLLnoHY+gK5tLmvb3LCdsWIZcDA==", "dependencies": { "@types/node": "*", "@types/request": "*", @@ -520,19 +657,27 @@ } }, "node_modules/@types/steamid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/steamid/-/steamid-2.0.2.tgz", - "integrity": "sha512-dCXjh122ilAmmpmiCNfxzjXpT/V9dpGhekXa24+EUX0vOxaSapW3UDEV7K8QrfZtzxGUFvxt515KJkdneZEMLQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/steamid/-/steamid-2.0.3.tgz", + "integrity": "sha512-ozNMQViUYLU+NBN4v7X0bV1O8uTL1bA+WvfHtt9IKcydS4tyYKH7w1vq+xcPGWGL0PRhGtY7C1Zhaeyj2IsETw==" }, "node_modules/@types/tail": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@types/tail/-/tail-2.2.2.tgz", - "integrity": "sha512-+CjjgMFjIVgTYsJXWNpAKVRerFWc9c+GTMzY/336fSW6BhY5TJwo2CNYJiNq7mO9rBHmtmpceKf2DnkrnaR3Vg==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/tail/-/tail-2.2.3.tgz", + "integrity": "sha512-Hnf352egOlDR4nVTaGX0t/kmTNXHMdovF2C7PVDFtHTHJPFmIspOI1b86vEOxU7SfCq/dADS7ptbqgG/WGGxnA==" }, "node_modules/@types/tough-cookie": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", - "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, + "node_modules/@types/ws": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -540,6 +685,15 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", + "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -553,9 +707,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -724,9 +878,9 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", + "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -1206,9 +1360,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/comment-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz", - "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -1579,6 +1733,35 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" + }, + "node_modules/discord.js": { + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz", + "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==", + "dependencies": { + "@discordjs/builders": "^1.7.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.3.3", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@discordjs/ws": "^1.0.2", + "@sapphire/snowflake": "3.5.1", + "@types/ws": "8.5.9", + "discord-api-types": "0.37.61", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "2.6.2", + "undici": "5.27.2", + "ws": "8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1704,9 +1887,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", - "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -1739,6 +1922,26 @@ "node": ">= 0.6" } }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1768,15 +1971,15 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -1823,20 +2026,20 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "46.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz", - "integrity": "sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==", + "version": "46.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.9.1.tgz", + "integrity": "sha512-11Ox5LCl2wY7gGkp9UOyew70o9qvii1daAH+h/MFobRVRNcy7sVlH+jm0HQdgcvcru6285GvpjpUyoa051j03Q==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.40.1", + "@es-joy/jsdoccomment": "~0.41.0", "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.0", + "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", "is-builtin-module": "^3.2.1", "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1" + "spdx-expression-parse": "^4.0.0" }, "engines": { "node": ">=16" @@ -2133,9 +2336,9 @@ } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2256,9 +2459,9 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { "flatted": "^3.2.9", @@ -2266,7 +2469,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -2443,9 +2646,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2717,9 +2920,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -3235,6 +3438,11 @@ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==" }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, "node_modules/lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", @@ -3273,6 +3481,11 @@ "lzma.js": "bin/lzma.js" } }, + "node_modules/magic-bytes.js": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.7.0.tgz", + "integrity": "sha512-YzVU2+/hrjwx8xcgAw+ffNq3jkactpj+f1iSL4LonrFKhvnwDzHSqtFdk/MMRP53y9ScouJ7cKEnqYsJwsHoYA==" + }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -3836,9 +4049,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -4240,6 +4453,26 @@ "ws": "~8.11.0" } }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -4318,9 +4551,9 @@ "dev": true }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -4442,6 +4675,15 @@ "cuint": "^0.2.1" } }, + "node_modules/steam-comment-bot-discord-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/steam-comment-bot-discord-plugin/-/steam-comment-bot-discord-plugin-1.0.1.tgz", + "integrity": "sha512-ZYRNAztqz/X0Cdod5fu5B6jHZJbiQyqh9OeBLUas8FxAQR+dQjv6FaVJDwfSSwkid8HI9nmofjwDhnhKf4Uchw==", + "dependencies": { + "discord.js": "^14.14.1", + "output-logger": "^2.3.7" + } + }, "node_modules/steam-comment-bot-rest": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/steam-comment-bot-rest/-/steam-comment-bot-rest-1.1.0.tgz", @@ -4473,9 +4715,9 @@ } }, "node_modules/steam-session": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/steam-session/-/steam-session-1.6.0.tgz", - "integrity": "sha512-28bTCqxP27hcVRSwMW60tVKQeosFJiNcjJYGJ3yb15IrGFWQAJqHFTRmVZIUYTTMxUiFgv+5ns9dpLXz+eA7DA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/steam-session/-/steam-session-1.7.1.tgz", + "integrity": "sha512-igdcAFlhFVHnpk2+Wy6iI91qDC0FoqmKmShoSVhKH+UvNWDzrHgOza1mq9jPRi/uBfVuVAe1dpUbtEShiprXzg==", "dependencies": { "@doctormckay/stdlib": "^2.9.0", "@doctormckay/user-agents": "^1.0.0", @@ -4501,12 +4743,12 @@ } }, "node_modules/steam-user": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/steam-user/-/steam-user-5.0.1.tgz", - "integrity": "sha512-kH0u0v4qobbnkxDcWyZNoAvOkbCJH9KBbRGRssSfkmAX4fZZQYlJfJwvojL0DIRJr6/3C4tycqXCHYW0+B1Xlg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/steam-user/-/steam-user-5.0.4.tgz", + "integrity": "sha512-Pod3Q6JhAl/g6znn3b418mJK8A5r3n5HlLv60Qd3tDPI47jGlA+hrwWzyb816d7zrRphTPfyNVpHwpneoA8Y7g==", "dependencies": { "@bbob/parser": "^2.2.0", - "@doctormckay/stdlib": "^2.7.1", + "@doctormckay/stdlib": "^2.9.1", "@doctormckay/steam-crypto": "^1.2.0", "adm-zip": "^0.5.10", "binarykvparser": "^2.2.0", @@ -4517,7 +4759,7 @@ "protobufjs": "^7.2.4", "socks-proxy-agent": "^7.0.0", "steam-appticket": "^1.0.1", - "steam-session": "^1.3.4", + "steam-session": "^1.7.0", "steam-totp": "^2.0.1", "steamid": "^2.0.0", "websocket13": "^4.0.0" @@ -4527,9 +4769,9 @@ } }, "node_modules/steamcommunity": { - "version": "3.47.1", - "resolved": "https://registry.npmjs.org/steamcommunity/-/steamcommunity-3.47.1.tgz", - "integrity": "sha512-1XRfFunFnCxt3Ww5tvCKeZJtAMUmz4e8JJI1kC7BX2EN4wBhTNZCbzhz4ZvJxUw9WZMG47UQ2ajpmcditCCe8w==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/steamcommunity/-/steamcommunity-3.48.0.tgz", + "integrity": "sha512-cSGewca8ld8o2c0asGcoOV4571U57lxYsXHuvoX65KSIEhGIV0ase6hQhtoGmSld/rPE4LLlvxx2pym92ZHR9w==", "dependencies": { "@doctormckay/user-agents": "^1.0.0", "async": "^2.6.3", @@ -4795,6 +5037,11 @@ "node": ">=0.8.0" } }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==" + }, "node_modules/tsc-watch": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-6.0.4.tgz", @@ -4840,6 +5087,11 @@ "node": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -4893,9 +5145,9 @@ } }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4927,10 +5179,21 @@ "dev": true, "peer": true }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unpipe": { "version": "1.0.0", @@ -5088,15 +5351,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/package.json b/package.json index 29b24197..83292d6e 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,30 @@ { "name": "steam-comment-service-bot", - "version": "2.14.0", - "description": "Steam Multi Account Manager with built-in comment, like & favorite commands and extensive plugin support.", + "version": "2.14.1", + "description": "The most advanced Steam Multi Account Manager with built-in comment, like & favorite commands and extensive plugin support.", "main": "start.js", "dependencies": { - "@seald-io/nedb": "^4.0.2", - "@types/tail": "^2.2.2", + "@seald-io/nedb": "^4.0.3", + "@types/tail": "^2.2.3", "download": "^8.0.0", "htmlparser2": "^9.0.0", "https": "^1.0.0", "output-logger": "^2.3.7", "request": "^2.88.2", + "steam-comment-bot-discord-plugin": "^1.0.1", "steam-comment-bot-rest": "^1.1.0", "steam-comment-bot-webserver": "file:plugins/steam-comment-bot-webserver-1.0.0.tgz", - "steam-session": "^1.6.0", - "steam-user": "^5.0.1", - "steamcommunity": "^3.47.1", + "steam-session": "^1.7.1", + "steam-user": "^5.0.4", + "steamcommunity": "^3.48.0", "steamid": "^2.0.0", "steamid-resolver": "^1.3.4" }, "scripts": { "start": "node start.js", - "dev": "npm run types ; node scripts/generateFileStructure.js && node start", - "types": "jsdoc -t node_modules/tsd-jsdoc/dist -r src/. -d types" + "dev": "node scripts/generateFileStructure.js && node start", + "types": "jsdoc -t node_modules/tsd-jsdoc/dist -r src/. -d types ; node scripts/generateFileStructure.js", + "deps": "ncu -u && npm update" }, "author": "3urobeat", "license": "GPL-3.0", @@ -32,8 +34,8 @@ "homepage": "https://github.com/3urobeat", "repository": "https://github.com/3urobeat/steam-comment-service-bot", "devDependencies": { - "eslint": "^8.52.0", - "eslint-plugin-jsdoc": "^46.8.2", + "eslint": "^8.56.0", + "eslint-plugin-jsdoc": "^46.9.1", "tsd-jsdoc": "^2.5.0" }, "types": "./types/types.d.ts" diff --git a/scripts/checkTranslationKeys.js b/scripts/checkTranslationKeys.js index 5b30787f..87e6de35 100644 --- a/scripts/checkTranslationKeys.js +++ b/scripts/checkTranslationKeys.js @@ -1,10 +1,10 @@ /* * File: checkTranslationKeys.js * Project: steam-comment-service-bot - * Created Date: 13.09.2023 21:58:32 + * Created Date: 2023-09-13 21:58:32 * Author: 3urobeat * - * Last Modified: 13.09.2023 22:30:34 + * Last Modified: 2023-12-27 13:56:28 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -57,4 +57,4 @@ translations.forEach((name) => { langKeys.forEach((e) => { if (!engKeys.includes(e)) console.log(`Language '${name}' contains obsolete/misnamed key '${e}'.`); }); -}); \ No newline at end of file +}); diff --git a/scripts/generateFileStructure.js b/scripts/generateFileStructure.js index 845ad231..afb843c1 100644 --- a/scripts/generateFileStructure.js +++ b/scripts/generateFileStructure.js @@ -1,10 +1,10 @@ /* * File: generateFileStructure.js * Project: steam-comment-service-bot - * Created Date: 02.09.2023 14:41:54 + * Created Date: 2023-09-02 14:41:54 * Author: 3urobeat * - * Last Modified: 09.09.2023 15:15:20 + * Last Modified: 2023-12-27 13:56:44 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -28,9 +28,9 @@ const crypto = require("crypto"); const ignore = [ ".git", "node_modules", "backup", "plugins", // Folders - "accounts.txt", "config.json", "proxies.txt", "quotes.txt", "advancedconfig.json", "config.json", "customlang.json", // Config files + "logininfo.json", "accounts.txt", "config.json", "proxies.txt", "quotes.txt", "advancedconfig.json", "config.json", "customlang.json", // Config files "output.txt", "src/data/cache.json", "src/data/data.json", "src/data/fileStructure.json", "src/data/lastcomment.db", "src/data/ratingHistory.db", "src/data/tokens.db", "src/data/userSettings.db", // Files changing at runtime - "comment-service-bot.code-workspace" // Misc + "comment-service-bot.code-workspace", "package-lock.json" // Misc ]; const output = []; @@ -85,4 +85,4 @@ function searchFolderRecursiveSync(src, firstCall) { } } -searchFolderRecursiveSync("./", true); \ No newline at end of file +searchFolderRecursiveSync("./", true); diff --git a/scripts/langStringsChangeDetector.js b/scripts/langStringsChangeDetector.js index adf2bb88..a8b01034 100644 --- a/scripts/langStringsChangeDetector.js +++ b/scripts/langStringsChangeDetector.js @@ -1,10 +1,10 @@ /* * File: langStringsChangeDetector.js * Project: steam-comment-service-bot - * Created Date: 05.06.2023 13:59:22 + * Created Date: 2023-06-05 13:59:22 * Author: 3urobeat * - * Last Modified: 09.09.2023 12:47:40 + * Last Modified: 2023-12-28 21:07:27 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -22,7 +22,7 @@ // Load files const oldLang = require("./oldLang.json"); -const newLang = require("./newLang.json"); +const newLang = require("../src/data/lang/english.json"); // Check for additions @@ -48,4 +48,4 @@ Object.keys(newLang).forEach((e, i) => { } }); } -}); \ No newline at end of file +}); diff --git a/src/bot/EStatus.js b/src/bot/EStatus.js index 0d0d3972..4023e206 100644 --- a/src/bot/EStatus.js +++ b/src/bot/EStatus.js @@ -1,10 +1,10 @@ /* * File: EStatus.js * Project: steam-comment-service-bot - * Created Date: 29.05.2023 16:55:46 + * Created Date: 2023-05-29 16:55:46 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 13:59:12 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -30,4 +30,4 @@ module.exports = { "1": "ONLINE", "2": "ERROR", "3": "SKIPPED" -}; \ No newline at end of file +}; diff --git a/src/bot/bot.js b/src/bot/bot.js index 9d97cbc2..1a1e9044 100644 --- a/src/bot/bot.js +++ b/src/bot/bot.js @@ -1,13 +1,13 @@ /* * File: bot.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:26:46 + * Last Modified: 2023-12-27 13:59:28 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -40,7 +40,7 @@ const Bot = function(controller, index) { this.controller = controller; /** - * Reference to the controller object + * Reference to the DataManager object * @type {DataManager} */ this.data = controller.data; @@ -69,7 +69,7 @@ const Bot = function(controller, index) { * Additional login related information for this bot account */ this.loginData = { - logOnOptions: controller.data.logininfo[index], // TODO: This could be an issue later when the index could change at runtime + logOnOptions: controller.data.logininfo.find((e) => e.index == index), // TODO: This could be an issue later when the index could change at runtime logOnTries: 0, relogTries: 0, // Amount of times logOns have been retried after relogTimeout. handleRelog() attempts to cycle proxies after enough failures waitingFor2FA: false, // Set by sessionHandler's handle2FA helper to prevent handleLoginTimeout from triggering @@ -280,4 +280,4 @@ Bot.prototype.sendChatMessage = function(_this, resInfo, txt, retry, part = 0) { * @param {number} timeout Time in ms after which the Promise will be resolved if user does not respond. Pass 0 to disable (not recommended) * @returns {Promise.} Resolved with `String` on response or `null` on timeout. */ -Bot.prototype.readChatMessage = function(steamID64, timeout) {}; // eslint-disable-line \ No newline at end of file +Bot.prototype.readChatMessage = function(steamID64, timeout) {}; // eslint-disable-line diff --git a/src/bot/events/debug.js b/src/bot/events/debug.js index f463e71e..44eb6b06 100644 --- a/src/bot/events/debug.js +++ b/src/bot/events/debug.js @@ -1,10 +1,10 @@ /* * File: debug.js * Project: steam-comment-service-bot - * Created Date: 18.05.2023 11:27:11 + * Created Date: 2023-05-18 11:27:11 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 13:58:15 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -35,4 +35,4 @@ Bot.prototype._attachSteamDebugEvent = function() { }); } -}; \ No newline at end of file +}; diff --git a/src/bot/events/disconnected.js b/src/bot/events/disconnected.js index 383c5e5c..bcaf135b 100644 --- a/src/bot/events/disconnected.js +++ b/src/bot/events/disconnected.js @@ -1,13 +1,13 @@ /* * File: disconnected.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 15.10.2023 17:04:54 + * Last Modified: 2023-12-27 13:58:37 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/bot/events/error.js b/src/bot/events/error.js index 3246a063..604fed01 100644 --- a/src/bot/events/error.js +++ b/src/bot/events/error.js @@ -1,13 +1,13 @@ /* * File: error.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 20.10.2023 20:04:41 + * Last Modified: 2023-12-27 13:58:54 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -106,4 +106,4 @@ Bot.prototype._attachSteamErrorEvent = function() { }); -}; \ No newline at end of file +}; diff --git a/src/bot/events/friendMessage.js b/src/bot/events/friendMessage.js index 0c31f271..e0297d7d 100644 --- a/src/bot/events/friendMessage.js +++ b/src/bot/events/friendMessage.js @@ -1,13 +1,13 @@ /* * File: friendMessage.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:34:51 + * Last Modified: 2023-12-27 14:01:11 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -15,7 +15,8 @@ */ -const SteamID = require("steamid"); +const SteamUser = require("steam-user"); +const SteamID = require("steamid"); const Bot = require("../bot.js"); @@ -30,7 +31,13 @@ Bot.prototype._attachSteamFriendMessageEvent = function() { let steamID = msg.steamid_friend; let steamID64 = new SteamID(String(steamID)).getSteamID64(); - let resInfo = { userID: steamID64, cmdprefix: "!", fromSteamChat: true }; // Object required for sendChatMessage(), our commandHandler respondModule implementation + let username = this.user.users[steamID64].player_name; + + let relationshipStatus = SteamUser.EFriendRelationship.None; + if (this.user.myFriends[steamID64]) relationshipStatus = SteamUser.EFriendRelationship[this.user.myFriends[steamID64]]; + + let resInfo = { userID: steamID64, cmdprefix: "!", fromSteamChat: true }; // Object required for sendChatMessage(), our commandHandler respondModule implementation + // Check if another friendMessage handler is currently active if (this.friendMessageBlock.includes(steamID64)) return logger("debug", `[${this.logPrefix}] Ignoring friendMessage event from ${steamID64} as user is on friendMessageBlock list.`); @@ -41,8 +48,8 @@ Bot.prototype._attachSteamFriendMessageEvent = function() { // Log friend message but cut it if it is >= 75 chars - if (message.length >= 75) logger("info", `[${this.logPrefix}] Friend message from ${steamID64}: ${message.slice(0, 75) + "..."}`); - else logger("info", `[${this.logPrefix}] Friend message from ${steamID64}: ${message}`); + if (message.length >= 75) logger("info", `[${this.logPrefix}] Message from '${username}' (${steamID64}: ${relationshipStatus}): ${message.slice(0, 75) + "..."}`); + else logger("info", `[${this.logPrefix}] Message from '${username}' (${steamID64}: ${relationshipStatus}): ${message}`); // Sort out any chat messages not sent to the main bot @@ -95,4 +102,4 @@ Bot.prototype._attachSteamFriendMessageEvent = function() { if (!success) this.sendChatMessage(this, resInfo, await this.controller.data.getLang("commandnotfound", { "cmdprefix": resInfo.cmdprefix }, steamID64)); // Send cmd not found msg if runCommand() returned false }); -}; \ No newline at end of file +}; diff --git a/src/bot/events/loggedOn.js b/src/bot/events/loggedOn.js index 2d000450..71e045f9 100644 --- a/src/bot/events/loggedOn.js +++ b/src/bot/events/loggedOn.js @@ -1,13 +1,13 @@ /* * File: loggedOn.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:28:10 + * Last Modified: 2023-12-27 14:00:58 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/bot/events/relationship.js b/src/bot/events/relationship.js index db9ee8cb..524cc384 100644 --- a/src/bot/events/relationship.js +++ b/src/bot/events/relationship.js @@ -1,13 +1,13 @@ /* * File: relationship.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-28 18:01:04 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -43,13 +43,11 @@ Bot.prototype._attachSteamFriendRelationshipEvent = function() { // Add user to lastcomment database - let lastcommentobj = { - id: steamID64, - time: Date.now() - (this.controller.data.config.requestCooldown * 60000) // Subtract requestCooldown so that the user is able to use the command instantly - }; + let time = Date.now() - (this.controller.data.config.requestCooldown * 60000); // Subtract requestCooldown so that the user is able to use the command instantly; - this.controller.data.lastCommentDB.remove({ id: steamID64 }, {}, (err) => { if (err) logger("error", "Error removing duplicate steamid from lastcomment.db on friendRelationship! Error: " + err); }); // Remove any old entries - this.controller.data.lastCommentDB.insert(lastcommentobj, (err) => { if (err) logger("error", "Error inserting new user into lastcomment.db database! Error: " + err); }); + this.controller.data.lastCommentDB.update({ id: steamID64 }, { $set: { time: time } }, { upsert: true }, (err) => { + if (err) logger("error", "Error inserting new user into lastcomment.db database! Error: " + err); + }); // Invite user to yourgroup (and to my to make some stonks) @@ -101,4 +99,3 @@ Bot.prototype._attachSteamGroupRelationshipEvent = function() { }); }; - diff --git a/src/bot/events/webSession.js b/src/bot/events/webSession.js index d4e1f859..2bc263d1 100644 --- a/src/bot/events/webSession.js +++ b/src/bot/events/webSession.js @@ -1,13 +1,13 @@ /* * File: webSession.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 13:13:22 + * Last Modified: 2023-12-28 17:59:22 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -72,13 +72,11 @@ Bot.prototype._attachSteamWebSessionEvent = function() { // Add user to lastcomment database - let lastcommentobj = { - id: thisfriend, - time: Date.now() - (this.controller.data.config.requestCooldown * 60000) // Subtract requestCooldown so that the user is able to use the command instantly - }; + let time = Date.now() - (this.controller.data.config.requestCooldown * 60000); // Subtract requestCooldown so that the user is able to use the command instantly; - this.controller.data.lastCommentDB.remove({ id: thisfriend }, {}, (err) => { if (err) logger("error", "Error removing duplicate steamid from lastcomment.db on offline friend accept! Error: " + err); }); // Remove any old entries - this.controller.data.lastCommentDB.insert(lastcommentobj, (err) => { if (err) logger("error", "Error inserting new user into lastcomment.db database! Error: " + err); }); + this.controller.data.lastCommentDB.update({ id: thisfriend }, { $set: { time: time } }, { upsert: true }, (err) => { + if (err) logger("error", "Error inserting new user into lastcomment.db database! Error: " + err); + }); // Invite user to yourgroup (and to my to make some stonks) if (this.controller.data.cachefile.configgroup64id && Object.keys(this.user.myGroups).includes(this.controller.data.cachefile.configgroup64id)) { @@ -93,11 +91,11 @@ Bot.prototype._attachSteamWebSessionEvent = function() { } } + } - // Log info msg about ignored friend requests - if (i + 1 == Object.keys(this.user.myFriends).length && ignoredFriendRequests > 0) { - logger("info", `Ignored ${ignoredFriendRequests} pending friend request(s) because acceptFriendRequests is turned off in advancedconfig.json.`); - } + // Log info msg about ignored friend requests + if (ignoredFriendRequests > 0) { + logger("info", `Ignored ${ignoredFriendRequests} pending friend request(s) because acceptFriendRequests is turned off in advancedconfig.json.`); } // Groups: @@ -156,4 +154,4 @@ Bot.prototype._attachSteamWebSessionEvent = function() { }); -}; \ No newline at end of file +}; diff --git a/src/bot/helpers/checkMsgBlock.js b/src/bot/helpers/checkMsgBlock.js index 3aa6cbf9..443ad505 100644 --- a/src/bot/helpers/checkMsgBlock.js +++ b/src/bot/helpers/checkMsgBlock.js @@ -1,10 +1,10 @@ /* * File: checkMsgBlock.js * Project: steam-comment-service-bot - * Created Date: 20.03.2023 12:46:47 + * Created Date: 2023-03-20 12:46:47 * Author: 3urobeat * - * Last Modified: 10.09.2023 00:04:33 + * Last Modified: 2023-12-27 14:00:20 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -62,4 +62,4 @@ Bot.prototype.checkMsgBlock = async function(steamID64, message) { // Return false and let the event be handled if nothing from above already halted the execution return false; -}; \ No newline at end of file +}; diff --git a/src/bot/helpers/handleLoginTimeout.js b/src/bot/helpers/handleLoginTimeout.js index 043390bd..4a5ca15b 100644 --- a/src/bot/helpers/handleLoginTimeout.js +++ b/src/bot/helpers/handleLoginTimeout.js @@ -1,13 +1,13 @@ /* * File: handleLoginTimeout.js * Project: steam-comment-service-bot - * Created Date: 03.11.2022 12:27:46 + * Created Date: 2022-11-03 12:27:46 * Author: 3urobeat * - * Last Modified: 14.10.2023 14:44:01 + * Last Modified: 2023-12-27 14:00:08 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -71,4 +71,4 @@ Bot.prototype.handleLoginTimeout = function() { }, this.data.advancedconfig.loginTimeout); -}; \ No newline at end of file +}; diff --git a/src/bot/helpers/handleMissingGameLicenses.js b/src/bot/helpers/handleMissingGameLicenses.js index 3f73deef..3a182f66 100644 --- a/src/bot/helpers/handleMissingGameLicenses.js +++ b/src/bot/helpers/handleMissingGameLicenses.js @@ -1,10 +1,10 @@ /* * File: handleMissingGameLicenses.js * Project: steam-comment-service-bot - * Created Date: 29.06.2023 21:31:53 + * Created Date: 2023-06-29 21:31:53 * Author: 3urobeat * - * Last Modified: 14.10.2023 10:35:38 + * Last Modified: 2023-12-27 13:59:59 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -27,7 +27,7 @@ Bot.prototype.handleMissingGameLicenses = function() { // Check if user provided games specifically for this account. We only need to check this for child accounts let configChildGames = data.config.childaccplayinggames; - if (typeof configChildGames[0] == "object") { + if (typeof configChildGames[0] == "object" && configChildGames[0] != null) { // - typeof null == "object" if (Object.keys(configChildGames[0]).includes(this.loginData.logOnOptions.accountName)) configChildGames = configChildGames[0][this.loginData.logOnOptions.accountName]; // Get the specific settings for this account if included else configChildGames = configChildGames.slice(1); // ...otherwise remove object containing acc specific settings to use the generic ones @@ -40,7 +40,7 @@ Bot.prototype.handleMissingGameLicenses = function() { let options = { includePlayedFreeGames: true, - filterAppids: this.index == 0 ? data.config.playinggames.filter(e => !isNaN(e)) : configChildGames.filter(e => !isNaN(e)), // We only need to check for these appIDs. Filter custom game string + filterAppids: this.index == 0 ? data.config.playinggames.filter(e => !isNaN(e)) : configChildGames.filter(e => !isNaN(e) && e != null), // We only need to check for these appIDs. Filter custom game string and null values includeFreeSub: false }; @@ -94,4 +94,4 @@ Bot.prototype.handleMissingGameLicenses = function() { startPlaying(); } -}; \ No newline at end of file +}; diff --git a/src/bot/helpers/handleRelog.js b/src/bot/helpers/handleRelog.js index 76063182..1a0a0d05 100644 --- a/src/bot/helpers/handleRelog.js +++ b/src/bot/helpers/handleRelog.js @@ -1,10 +1,10 @@ /* * File: handleRelog.js * Project: steam-comment-service-bot - * Created Date: 05.10.2023 16:14:46 + * Created Date: 2023-10-05 16:14:46 * Author: 3urobeat * - * Last Modified: 15.10.2023 20:15:36 + * Last Modified: 2023-12-27 13:59:47 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -147,4 +147,4 @@ Bot.prototype.handleRelog = async function() { }, this.controller.data.advancedconfig.relogTimeout); -}; \ No newline at end of file +}; diff --git a/src/bot/helpers/steamChatInteraction.js b/src/bot/helpers/steamChatInteraction.js index 866e30de..1c12984d 100644 --- a/src/bot/helpers/steamChatInteraction.js +++ b/src/bot/helpers/steamChatInteraction.js @@ -1,10 +1,10 @@ /* * File: steamChatInteraction.js * Project: steam-comment-service-bot - * Created Date: 01.04.2023 21:09:00 + * Created Date: 2023-04-01 21:09:00 * Author: 3urobeat * - * Last Modified: 10.07.2023 09:29:15 + * Last Modified: 2023-12-27 13:59:39 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -40,6 +40,10 @@ Bot.prototype.sendChatMessage = function(_this, resInfo, txt, retry = 0, part = if (typeof txt !== "string") return logger("warn", "sendChatMessage() was called with txt that isn't a string! Ignoring call..."); let steamID64 = resInfo.userID; + let username = _this.user.users[steamID64].player_name; + + let relationshipStatus = SteamUser.EFriendRelationship.None; + if (_this.user.myFriends[steamID64]) relationshipStatus = SteamUser.EFriendRelationship[_this.user.myFriends[steamID64]]; // Allow resInfo to overwrite char limit of 750 chars let limit = 750; @@ -57,10 +61,10 @@ Bot.prototype.sendChatMessage = function(_this, resInfo, txt, retry = 0, part = // Log full message if in debug mode, otherwise log cut down version if (_this.controller.data.advancedconfig.printDebug) { - logger("debug", `[${_this.logPrefix}] Sending message (${thisPart.length} chars) to ${steamID64} (retry: ${retry}, part: ${part}): "${thisPart.replace(/\n/g, "\\n")}"`); + logger("debug", `[${_this.logPrefix}] Sending message (${thisPart.length} chars) to '${username}' (${steamID64}: ${relationshipStatus}) (retry: ${retry}, part: ${part}): "${thisPart.replace(/\n/g, "\\n")}"`); } else { - if (thisPart.length >= 75) logger("info", `[${_this.logPrefix}] Sending message to ${steamID64}: "${thisPart.slice(0, 75).replace(/\n/g, "\\n") + "..."}"`); - else logger("info", `[${_this.logPrefix}] Sending message to ${steamID64}: "${thisPart.replace(/\n/g, "\\n")}"`); + if (thisPart.length >= 75) logger("info", `[${_this.logPrefix}] Sending message to '${username}' (${steamID64}: ${relationshipStatus}): "${thisPart.slice(0, 75).replace(/\n/g, "\\n") + "..."}"`); + else logger("info", `[${_this.logPrefix}] Sending message to '${username}' (${steamID64}: ${relationshipStatus}): "${thisPart.replace(/\n/g, "\\n")}"`); } // Send part and call function again if this wasn't the last one @@ -162,4 +166,4 @@ Bot.prototype.readChatMessage = function(steamID64, timeout) { }, timeout); } }); -}; \ No newline at end of file +}; diff --git a/src/commands/commandHandler.js b/src/commands/commandHandler.js index fe5da09a..4f3d8319 100644 --- a/src/commands/commandHandler.js +++ b/src/commands/commandHandler.js @@ -1,10 +1,10 @@ /* * File: commandHandler.js * Project: steam-comment-service-bot - * Created Date: 01.04.2023 21:54:21 + * Created Date: 2023-04-01 21:54:21 * Author: 3urobeat * - * Last Modified: 10.09.2023 11:51:58 + * Last Modified: 2023-12-27 14:03:50 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -82,7 +82,7 @@ CommandHandler.prototype._importCoreCommands = function() { } // Iterate over all files in this dir - files.forEach((e, i) => { + files.forEach((e) => { let thisFile; // Try to load plugin @@ -92,17 +92,14 @@ CommandHandler.prototype._importCoreCommands = function() { // Push all exported commands in this file into the command list Object.values(thisFile).every(val => this.commands.push(val)); - } catch (err) { - logger("error", `Error loading core command '${e}'! ${err.stack}`, true); } - - if (i + 1 == files.length) { - logger("info", `CommandHandler: Successfully loaded ${this.commands.length} core commands!`, false, true, logger.animation("loading")); - resolve(); - } }); + + logger("info", `CommandHandler: Successfully loaded ${this.commands.length} core commands!`, false, true, logger.animation("loading")); + resolve(); + }); }); @@ -256,4 +253,4 @@ CommandHandler.prototype.reloadCommands = function() { }; -module.exports = CommandHandler; \ No newline at end of file +module.exports = CommandHandler; diff --git a/src/commands/core/block.js b/src/commands/core/block.js index cdb02179..88d056e3 100644 --- a/src/commands/core/block.js +++ b/src/commands/core/block.js @@ -1,13 +1,13 @@ /* * File: block.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 10.09.2023 00:18:49 + * Last Modified: 2023-12-27 14:08:09 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -108,4 +108,4 @@ module.exports.unblock = { logger("info", `Unblocked ${res} with all bot accounts.`); }); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/comment.js b/src/commands/core/comment.js index 593338fe..e1a07b67 100644 --- a/src/commands/core/comment.js +++ b/src/commands/core/comment.js @@ -1,13 +1,13 @@ /* * File: comment.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-28 22:58:36 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -90,6 +90,9 @@ module.exports.comment = { if (!maxRequestAmount && !numberOfComments && !quotesArr) return; // Looks like the helper aborted the request + // Deny request if profile is private + if (idType == "profilePrivate") return respond(await commandHandler.data.getLang("commentuserprofileprivate", null, requesterID)); + // Update receiverSteamID64 if profileID was returned if (profileID && profileID != requesterID) { @@ -162,7 +165,8 @@ module.exports.comment = { let commentArgs = {}; switch (activeRequestsObj.type) { - case "profileComment": + case "profilePublicComment": + case "profileFriendsonlyComment": postComment = commandHandler.controller.main.community.postUserComment; // Context of the correct bot account is applied later commentArgs = { receiverSteamID64: receiverSteamID64, quote: null }; break; @@ -219,32 +223,12 @@ module.exports.comment = { } - // Check if profile is private - if (idType == "profile") { - commandHandler.controller.main.community.getSteamUser(new SteamID(receiverSteamID64), async (err, user) => { - if (err) { - logger("warn", `[Main] Failed to check if ${receiverSteamID64} is private: ${err}\n Trying to comment anyway and hoping no error occurs...`); // This can happen sometimes and most of the times commenting will still work - } else { - logger("debug", "Successfully checked privacyState of receiving user: " + user.privacyState); - - if (user.privacyState != "public") return respond(await commandHandler.data.getLang("commentuserprofileprivate", null, requesterID)); // Only check if getting the Steam user's data didn't result in an error - } - - // Register this comment process in activeRequests - commandHandler.controller.activeRequests[receiverSteamID64] = activeRequestsObj; + // Register this comment process in activeRequests + commandHandler.controller.activeRequests[receiverSteamID64] = activeRequestsObj; - // Start commenting - logger("debug", "Made activeRequest entry for user, starting comment loop..."); - comment(commandHandler, resInfo, respond, postComment, commentArgs, receiverSteamID64); - }); - } else { - // Register this comment process in activeRequests - commandHandler.controller.activeRequests[receiverSteamID64] = activeRequestsObj; - - // Start commenting - logger("debug", "Made activeRequest entry for user, starting comment loop..."); - comment(commandHandler, resInfo, respond, postComment, commentArgs, receiverSteamID64); - } + // Start commenting + logger("debug", "Made activeRequest entry for user, starting comment loop..."); + comment(commandHandler, resInfo, respond, postComment, commentArgs, receiverSteamID64); } }; @@ -259,8 +243,8 @@ module.exports.comment = { * @param {string} receiverSteamID64 steamID64 of the profile to receive the comments */ async function comment(commandHandler, resInfo, respond, postComment, commentArgs, receiverSteamID64) { - let activeReqEntry = commandHandler.controller.activeRequests[receiverSteamID64]; // Make using the obj shorter - let requesterID = resInfo.userID; + let activeReqEntry = commandHandler.controller.activeRequests[receiverSteamID64]; // Make using the obj shorter + let requesterID = resInfo.userID; // Log request start and give user cooldown on the first iteration @@ -409,4 +393,4 @@ async function comment(commandHandler, resInfo, respond, postComment, commentArg commandHandler.controller.info.commentCounter += activeReqEntry.amount - activeReqEntry.amountBeforeRetry - Object.keys(activeReqEntry.failed).length; // Add numberOfComments of this attempt minus failedamount to commentCounter }); -} \ No newline at end of file +} diff --git a/src/commands/core/favorite.js b/src/commands/core/favorite.js index ecc96d1b..69fcf75f 100644 --- a/src/commands/core/favorite.js +++ b/src/commands/core/favorite.js @@ -1,10 +1,10 @@ /* * File: favorite.js * Project: steam-comment-service-bot - * Created Date: 02.06.2023 13:23:01 + * Created Date: 2023-06-02 13:23:01 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:07:57 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -157,7 +157,7 @@ module.exports.favorite = { if (!handleFavoriteIterationSkip(commandHandler, loop, bot, id)) return; // Skip iteration if false was returned /* --------- Try to favorite --------- */ - bot.community.favoriteSharedFile(sharedfile.id, sharedfile.appID, (error) => { + bot.community.favoriteSharedFile(sharedfile.id, sharedfile.appID, (error) => { // Note: Steam does not return an error for a duplicate request here /* --------- Handle errors thrown by this favorite attempt or update ratingHistory db and log success message --------- */ if (error) { @@ -399,4 +399,4 @@ module.exports.unfavorite = { }); }); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/follow.js b/src/commands/core/follow.js index 2ae43ad2..ad4abb58 100644 --- a/src/commands/core/follow.js +++ b/src/commands/core/follow.js @@ -1,10 +1,10 @@ /* * File: follow.js * Project: steam-comment-service-bot - * Created Date: 24.09.2023 15:04:33 + * Created Date: 2023-09-24 15:04:33 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:07:48 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -157,8 +157,9 @@ module.exports.follow = { /* --------- Handle errors thrown by this follow attempt or update ratingHistory db and log success message --------- */ if (error) { logFollowError(error, commandHandler, bot, id); + } - } else { + if (!error || error.eresult == 2) { // Steam returns Enum 2 ("Fail") for duplicate requests // Add follow entry commandHandler.data.ratingHistoryDB.insert({ id: id, accountName: activeReqEntry.accounts[i], type: idType + "Follow", time: Date.now() }, (err) => { @@ -168,6 +169,7 @@ module.exports.follow = { // Log success message if (commandHandler.data.proxies.length > 1) logger("info", `[${bot.logPrefix}] Sending follow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${idType} ${id} with proxy ${bot.loginData.proxyIndex}...`); else logger("info", `[${bot.logPrefix}] Sending follow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${idType} ${id}...`); + } // Continue with the next iteration @@ -341,8 +343,9 @@ module.exports.unfollow = { /* --------- Handle errors thrown by this unfollow attempt or update ratingHistory db and log success message --------- */ if (error) { logFollowError(error, commandHandler, bot, id); + } - } else { + if (!error || error.eresult == 2) { // Steam returns Enum 2 ("Fail") for duplicate requests // Remove follow entry commandHandler.data.ratingHistoryDB.remove({ id: id, accountName: activeReqEntry.accounts[i], type: idType + "Follow" }, (err) => { @@ -352,6 +355,7 @@ module.exports.unfollow = { // Log success message if (commandHandler.data.proxies.length > 1) logger("info", `[${bot.logPrefix}] Sending unfollow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${idType} ${id} with proxy ${bot.loginData.proxyIndex}...`); else logger("info", `[${bot.logPrefix}] Sending unfollow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${idType} ${id}...`); + } // Continue with the next iteration @@ -387,4 +391,4 @@ module.exports.unfollow = { }); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/friend.js b/src/commands/core/friend.js index aaef2c35..c88f1366 100644 --- a/src/commands/core/friend.js +++ b/src/commands/core/friend.js @@ -1,13 +1,13 @@ /* * File: friend.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 07.10.2023 23:34:56 + * Last Modified: 2023-12-27 14:07:36 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -222,4 +222,4 @@ module.exports.unfriendall = { } }, 30000); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/general.js b/src/commands/core/general.js index f9536798..7de6d4eb 100644 --- a/src/commands/core/general.js +++ b/src/commands/core/general.js @@ -1,13 +1,13 @@ /* * File: general.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 18.10.2023 23:07:24 + * Last Modified: 2023-12-27 14:07:20 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -77,7 +77,7 @@ module.exports.help = { '${resInfo.cmdprefix}abort' - ${await commandHandler.data.getLang("helpabort", null, requesterID)} '${resInfo.cmdprefix}about' - ${await commandHandler.data.getLang("helpabout", null, requesterID)} '${resInfo.cmdprefix}owner' - ${await commandHandler.data.getLang("helpowner", null, requesterID)} - + ${await commandHandler.data.getLang("helpreadothercmdshere", null, requesterID)} ' https://github.com/3urobeat/steam-comment-service-bot/blob/master/docs/wiki/commands_doc.md ' `.replace(/^( {4})+/gm, "")); // Remove all the whitespaces that are added by the proper code indentation here } diff --git a/src/commands/core/group.js b/src/commands/core/group.js index cc702cc7..4efdfbad 100644 --- a/src/commands/core/group.js +++ b/src/commands/core/group.js @@ -1,13 +1,13 @@ /* * File: group.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 07.10.2023 23:34:56 + * Last Modified: 2023-12-27 14:07:07 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -206,4 +206,4 @@ module.exports.leaveAllGroups = { } }, 15000); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/requests.js b/src/commands/core/requests.js index 6917f8ef..fbc36c53 100644 --- a/src/commands/core/requests.js +++ b/src/commands/core/requests.js @@ -1,13 +1,13 @@ /* * File: requests.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:06:52 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -139,7 +139,7 @@ module.exports.resetCooldown = { module.exports.failed = { names: ["failed"], - description: "See the exact errors of the last comment request on your profile or provide an ID to see the errors of the last request you started. Owners can also view errors for requests started by other users", + description: "Displays the exact errors of the last request for your profile. Alternatively provide an ID of a request you have started. Owners can also view errors for requests started by other users.", args: [ { name: "ID", @@ -194,7 +194,7 @@ module.exports.failed = { let messagestart = await commandHandler.data.getLang("failedcmdmsg", { "steamID64": userID, "requesttime": requestTime }, resInfo.userID); // Send message and limit to 500 chars as this call can cause many messages to be sent - respondModule(context, { prefix: "/pre", charLimit: 500, ...resInfo }, messagestart + "\nc = Comment, b = Bot, p = Proxy\n\n" + failedcommentsstr); // Pass new resInfo object which contains prefix and everything the original resInfo obj contained + respondModule(context, { prefix: "/pre", charLimit: 500, ...resInfo }, messagestart + "\ni = Index, b = Bot, p = Proxy\n\n" + failedcommentsstr); // Pass new resInfo object which contains prefix and everything the original resInfo obj contained }); } }; @@ -217,26 +217,22 @@ module.exports.sessions = { run: async (commandHandler, args, respondModule, context, resInfo) => { let respond = ((txt) => respondModule(context, resInfo, txt)); // Shorten each call + // Don't bother if there is no active request + if (Object.keys(commandHandler.controller.activeRequests).length == 0) return respond(await commandHandler.data.getLang("sessionscmdnosessions", null, resInfo.userID)); + + // Loop through every entry and push it to str let str = ""; - if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Only loop through object if it isn't empty - let objlength = Object.keys(commandHandler.controller.activeRequests).length; // Save this before the loop as deleting entries will change this number and lead to the loop finished check never triggering - - Object.keys(commandHandler.controller.activeRequests).forEach(async (e, i) => { - if (Date.now() < commandHandler.controller.activeRequests[e].until + (commandHandler.data.config.botaccountcooldown * 60000)) { // Check if entry is not finished yet - str += `- Status: ${commandHandler.controller.activeRequests[e].status} | ${commandHandler.controller.activeRequests[e].amount} iterations with ${commandHandler.controller.activeRequests[e].accounts.length} accounts by ${commandHandler.controller.activeRequests[e].requestedby} for ${commandHandler.controller.activeRequests[e].type} ${Object.keys(commandHandler.controller.activeRequests)[i]}\n`; - } else { - delete commandHandler.controller.activeRequests[e]; // Remove entry from object if it is finished to keep the object clean - } - - if (i == objlength - 1) { - if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Check if obj is still not empty - respond((await commandHandler.data.getLang("sessionscmdmsg", { "amount": Object.keys(commandHandler.controller.activeRequests).length }, resInfo.userID)) + "\n" + str); - } else { - respond(await commandHandler.data.getLang("sessionscmdnosessions", null, resInfo.userID)); - } - } - }); + Object.keys(commandHandler.controller.activeRequests).forEach((e, i) => { + if (Date.now() < commandHandler.controller.activeRequests[e].until + (commandHandler.data.config.botaccountcooldown * 60000)) { // Check if entry is not finished yet + str += `- Status: ${commandHandler.controller.activeRequests[e].status} | ${commandHandler.controller.activeRequests[e].amount} iterations with ${commandHandler.controller.activeRequests[e].accounts.length} accounts by ${commandHandler.controller.activeRequests[e].requestedby} for ${commandHandler.controller.activeRequests[e].type} ${Object.keys(commandHandler.controller.activeRequests)[i]}\n`; + } else { + delete commandHandler.controller.activeRequests[e]; // Remove entry from object if it is finished to keep the object clean + } + }); + + if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Check if obj is still not empty + respond((await commandHandler.data.getLang("sessionscmdmsg", { "amount": Object.keys(commandHandler.controller.activeRequests).length }, resInfo.userID)) + "\n" + str); } else { respond(await commandHandler.data.getLang("sessionscmdnosessions", null, resInfo.userID)); } @@ -260,33 +256,27 @@ module.exports.mySessions = { */ run: async (commandHandler, args, respondModule, context, resInfo) => { let respond = ((txt) => respondModule(context, resInfo, txt)); // Shorten each call - let str = ""; // Check for no userID as the default behavior might be unavailable when calling from outside of the Steam Chat if (!resInfo.userID) return respond(await commandHandler.data.getLang("nouserid")); // In this case the cmd doesn't have an ID param so send this message instead of noidparam - if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Only loop through object if it isn't empty - let objlength = Object.keys(commandHandler.controller.activeRequests).length; // Save this before the loop as deleting entries will change this number and lead to the loop finished check never triggering - - Object.keys(commandHandler.controller.activeRequests).forEach(async (e, i) => { - if (Date.now() < commandHandler.controller.activeRequests[e].until + (commandHandler.data.config.botaccountcooldown * 60000)) { // Check if entry is not finished yet - if (commandHandler.controller.activeRequests[e].requestedby == resInfo.userID) str += `- Status: ${commandHandler.controller.activeRequests[e].status} | ${commandHandler.controller.activeRequests[e].amount} iterations with ${commandHandler.controller.activeRequests[e].accounts.length} accounts by ${commandHandler.controller.activeRequests[e].requestedby} for ${commandHandler.controller.activeRequests[e].type} ${Object.keys(commandHandler.controller.activeRequests)[i]}`; - } else { - delete commandHandler.controller.activeRequests[e]; // Remove entry from object if it is finished to keep the object clean - } - - if (i == objlength - 1) { - if (i == objlength - 1) { - if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Check if obj is still not empty - respond((await commandHandler.data.getLang("sessionscmdmsg", { "amount": Object.keys(commandHandler.controller.activeRequests).length }, resInfo.userID)) + "\n" + str); - } else { - respond(await commandHandler.data.getLang("mysessionscmdnosessions", null, resInfo.userID)); - } - } - } - }); + if (Object.keys(commandHandler.controller.activeRequests).length == 0) return respond(await commandHandler.data.getLang("mysessionscmdnosessions", null, resInfo.userID)); + + // Loop through every entry requested by this user and push it to str + let str = ""; + + Object.keys(commandHandler.controller.activeRequests).forEach(async (e, i) => { + if (Date.now() < commandHandler.controller.activeRequests[e].until + (commandHandler.data.config.botaccountcooldown * 60000)) { // Check if entry is not finished yet + if (commandHandler.controller.activeRequests[e].requestedby == resInfo.userID) str += `- Status: ${commandHandler.controller.activeRequests[e].status} | ${commandHandler.controller.activeRequests[e].amount} iterations with ${commandHandler.controller.activeRequests[e].accounts.length} accounts by ${commandHandler.controller.activeRequests[e].requestedby} for ${commandHandler.controller.activeRequests[e].type} ${Object.keys(commandHandler.controller.activeRequests)[i]}`; + } else { + delete commandHandler.controller.activeRequests[e]; // Remove entry from object if it is finished to keep the object clean + } + }); + + if (Object.keys(commandHandler.controller.activeRequests).length > 0) { // Check if obj is still not empty + respond((await commandHandler.data.getLang("sessionscmdmsg", { "amount": Object.keys(commandHandler.controller.activeRequests).length }, resInfo.userID)) + "\n" + str); } else { respond(await commandHandler.data.getLang("mysessionscmdnosessions", null, resInfo.userID)); } } -}; \ No newline at end of file +}; diff --git a/src/commands/core/settings.js b/src/commands/core/settings.js index 1c8b9a6f..75ec0530 100644 --- a/src/commands/core/settings.js +++ b/src/commands/core/settings.js @@ -1,13 +1,13 @@ /* * File: settings.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 18.10.2023 23:07:24 + * Last Modified: 2023-12-27 14:06:35 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -217,4 +217,4 @@ module.exports.settings = { return; }); } -}; \ No newline at end of file +}; diff --git a/src/commands/core/system.js b/src/commands/core/system.js index fe5b22d8..5e0ae347 100644 --- a/src/commands/core/system.js +++ b/src/commands/core/system.js @@ -1,13 +1,13 @@ /* * File: system.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:28:46 + * Last Modified: 2023-12-27 14:06:22 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -226,4 +226,4 @@ module.exports.eval = { return; } } -}; \ No newline at end of file +}; diff --git a/src/commands/core/vote.js b/src/commands/core/vote.js index f3f351e7..5dc784f5 100644 --- a/src/commands/core/vote.js +++ b/src/commands/core/vote.js @@ -1,10 +1,10 @@ /* * File: vote.js * Project: steam-comment-service-bot - * Created Date: 28.05.2023 12:02:24 + * Created Date: 2023-05-28 12:02:24 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:06:11 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -157,7 +157,7 @@ module.exports.upvote = { if (!handleVoteIterationSkip(commandHandler, loop, bot, id)) return; // Skip iteration if false was returned /* --------- Try to vote --------- */ - bot.community.voteUpSharedFile(sharedfile.id, (error) => { + bot.community.voteUpSharedFile(sharedfile.id, (error) => { // Note: Steam does not return an error for a duplicate request here /* --------- Handle errors thrown by this vote attempt or update ratingHistory db and log success message --------- */ if (error) { @@ -352,7 +352,7 @@ module.exports.downvote = { if (!handleVoteIterationSkip(commandHandler, loop, bot, id)) return; // Skip iteration if false was returned /* --------- Try to vote --------- */ - bot.community.voteDownSharedFile(sharedfile.id, (error) => { + bot.community.voteDownSharedFile(sharedfile.id, (error) => { // Note: Steam does not return an error for a duplicate request here /* --------- Handle errors thrown by this vote attempt or update ratingHistory db and log success message --------- */ if (error) { @@ -409,4 +409,4 @@ module.exports.downvote = { }); }); } -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getCommentArgs.js b/src/commands/helpers/getCommentArgs.js index 1575319a..5397aa78 100644 --- a/src/commands/helpers/getCommentArgs.js +++ b/src/commands/helpers/getCommentArgs.js @@ -1,13 +1,13 @@ /* * File: getCommentArgs.js * Project: steam-comment-service-bot - * Created Date: 28.02.2022 11:55:06 + * Created Date: 2022-02-28 11:55:06 * Author: 3urobeat * - * Last Modified: 18.10.2023 23:07:24 + * Last Modified: 2023-12-28 21:29:17 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -15,9 +15,41 @@ */ +const SteamID = require("steamid"); + const CommandHandler = require("../commandHandler.js"); // eslint-disable-line +/** + * Helper function: Gets the visibility status of a profile and appends it to idType + * @param {CommandHandler} commandHandler The commandHandler object + * @param {string} steamID64 The steamID64 of the profile to check + * @param {string} type Type of steamID64, determined by handleSteamIdResolving(). Must be "profile", otherwise callback will be called instantly with this type param, unchanged. + * @param {function(string): void} callback Called on completion with your new idType + */ +function getVisibilityStatus(commandHandler, steamID64, type, callback) { + if (steamID64 && type == "profile") { + logger("debug", `CommandHandler getVisibilityStatus(): Getting visibility status of profile ${steamID64}...`); + + commandHandler.controller.main.community.getSteamUser(new SteamID(steamID64), async (err, user) => { + if (err || !user || !user.privacyState) { + logger("warn", `[Main] Failed to check if ${steamID64} is private: ${err}\n Assuming profile is public and hoping for the best...`); // This can happen sometimes and most of the times commenting will still work + + callback(type + "Public"); + } else { + logger("debug", "CommandHandler getVisibilityStatus(): Successfully checked privacyState of receiving user: " + user.privacyState); + + callback(type + user.privacyState[0].toUpperCase() + user.privacyState.slice(1)); // Append privacy state to type with the first letter capitalized + } + }); + } else { + logger("debug", `CommandHandler getVisibilityStatus(): Type '${type}' was provided, ignoring request...`); + + callback(type); + } +} + + /** * Retrieves arguments from a comment request. If request is invalid (for example too many comments requested) an error message will be sent * @param {CommandHandler} commandHandler The commandHandler object @@ -91,8 +123,11 @@ module.exports.getCommentArgs = (commandHandler, args, requesterID, resInfo, res return resolve(false); } - profileID = res; // Will be null on err - idType = type; // Update idType with what handleSteamIdResolving determined + // Get profile visibility status if profile. Resolving at the bottom will wait until profileID is set + getVisibilityStatus(commandHandler, res, type, (newType) => { + profileID = res; // Will be null on err + idType = newType; // Update idType with what handleSteamIdResolving determined + }); }); } else { @@ -104,8 +139,11 @@ module.exports.getCommentArgs = (commandHandler, args, requesterID, resInfo, res } else { logger("debug", "CommandHandler getCommentArgs(): No profileID parameter received, setting profileID to requesterID..."); - profileID = requesterID; - idType = "profile"; + // Get profile visibility status if profile. Resolving at the bottom will wait until profileID is set + getVisibilityStatus(commandHandler, requesterID, "profile", (newType) => { + profileID = requesterID; // Will be null on err + idType = newType; // Update idType with what handleSteamIdResolving determined + }); } @@ -122,7 +160,7 @@ module.exports.getCommentArgs = (commandHandler, args, requesterID, resInfo, res if (commandHandler.controller.getBots().length == 1 && maxRequestAmount == 1) { logger("debug", "CommandHandler getCommentArgs(): User didn't provide numberOfComments but maxRequestAmount is 1. Accepting request as numberOfComments = 1."); - numberOfComments = 1; // If only one account is active, set 1 automatically + numberOfComments = 1; // If only one account is active, set 1 automatically profileID = requesterID; // Define profileID so that the interval below resolves } else { logger("debug", `CommandHandler getCommentArgs(): User didn't provide numberOfComments and maxRequestAmount is ${maxRequestAmount} (> 1). Rejecting request.`); @@ -149,4 +187,4 @@ module.exports.getCommentArgs = (commandHandler, args, requesterID, resInfo, res })(); }); -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getCommentBots.js b/src/commands/helpers/getCommentBots.js index 3ece9cdc..ee13af89 100644 --- a/src/commands/helpers/getCommentBots.js +++ b/src/commands/helpers/getCommentBots.js @@ -1,10 +1,10 @@ /* * File: getCommentBots.js * Project: steam-comment-service-bot - * Created Date: 09.04.2023 12:49:53 + * Created Date: 2023-04-09 12:49:53 * Author: 3urobeat * - * Last Modified: 24.09.2023 13:12:26 + * Last Modified: 2023-12-28 22:40:34 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -15,6 +15,8 @@ */ +const { EFriendRelationship } = require("steam-user"); + const CommandHandler = require("../commandHandler.js"); // eslint-disable-line const { timeToString } = require("../../controller/helpers/misc.js"); @@ -24,7 +26,7 @@ const { timeToString } = require("../../controller/helpers/misc.js"); * @param {CommandHandler} commandHandler The commandHandler object * @param {number} numberOfComments Number of requested comments * @param {boolean} canBeLimited If the accounts are allowed to be limited - * @param {string} idType Type of the request. This can either be "profile", "group", "sharedfile" or "discussion". This is used to determine if limited accs need to be added first. + * @param {string} idType Type of the request. This can either be "profile(PrivacyState)", "group", "sharedfile" or "discussion". This is used to determine if limited accs need to be added first. * @param {string} receiverSteamID Optional: steamID64 of the receiving user. If set, accounts that are friend with the user will be prioritized and accsToAdd will be calculated. * @returns {{ accsNeeded: number, availableAccounts: Array., accsToAdd: Array., whenAvailable: number, whenAvailableStr: string }} `availableAccounts` contains all account names from bot object, `accsToAdd` account names which are limited and not friend, `whenAvailable` is a timestamp representing how long to wait until accsNeeded accounts will be available and `whenAvailableStr` is formatted human-readable as time from now */ @@ -93,8 +95,8 @@ module.exports.getAvailableBotsForCommenting = function(commandHandler, numberOf // Prioritize accounts the user is friend with if (receiverSteamID) { allAccounts = [ - ...allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] == 3), // Cool trick to get every acc with user as friend to the top - ...allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] != 3) // ...and every non-friend acc below + ...allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] == EFriendRelationship.Friend), // Cool trick to get every acc with user as friend to the top + ...allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] != EFriendRelationship.Friend) // ...and every non-friend acc below ]; } @@ -103,12 +105,14 @@ module.exports.getAvailableBotsForCommenting = function(commandHandler, numberOf if (allAccounts.length > accountsNeeded) allAccounts = allAccounts.slice(0, accountsNeeded); - // Filter all accounts needed for this request which must be added first if this is of type profile + // Filter all accounts needed for this request which must be added first let accsToAdd = []; - if (idType == "profile") { - accsToAdd = allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] != 3 && allAccsOnline[e].user.limitations.limited); - } + if (idType == "profilePublic") { // On a public profile only limited accounts need to be added + accsToAdd = allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] != EFriendRelationship.Friend && allAccsOnline[e].user.limitations.limited); + } else if (idType == "profileFriendsonly") { // On a friendsonly profile all accounts need to be added + accsToAdd = allAccounts.filter(e => allAccsOnline[e].user.myFriends[receiverSteamID] != EFriendRelationship.Friend); + } // Comments on private profiles are already blocked, no need to check for that here // Log debug values @@ -124,4 +128,4 @@ module.exports.getAvailableBotsForCommenting = function(commandHandler, numberOf "whenAvailableStr": whenAvailableStr }; -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getFavoriteBots.js b/src/commands/helpers/getFavoriteBots.js index 98225e74..923b8828 100644 --- a/src/commands/helpers/getFavoriteBots.js +++ b/src/commands/helpers/getFavoriteBots.js @@ -1,10 +1,10 @@ /* * File: getFavoriteBots.js * Project: steam-comment-service-bot - * Created Date: 02.06.2023 14:07:27 + * Created Date: 2023-06-02 14:07:27 * Author: 3urobeat * - * Last Modified: 25.09.2023 18:58:50 + * Last Modified: 2023-12-27 14:05:20 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -97,4 +97,4 @@ module.exports.getAvailableBotsForFavorizing = async (commandHandler, amount, id "whenAvailable": whenAvailable, "whenAvailableStr": whenAvailableStr }; -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getFollowArgs.js b/src/commands/helpers/getFollowArgs.js index 4a5dcf36..ee41af73 100644 --- a/src/commands/helpers/getFollowArgs.js +++ b/src/commands/helpers/getFollowArgs.js @@ -1,10 +1,10 @@ /* * File: getFollowArgs.js * Project: steam-comment-service-bot - * Created Date: 24.09.2023 16:10:36 + * Created Date: 2023-09-24 16:10:36 * Author: 3urobeat * - * Last Modified: 07.10.2023 23:34:56 + * Last Modified: 2023-12-27 14:05:13 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -89,4 +89,4 @@ module.exports.getFollowArgs = (commandHandler, args, cmd, resInfo, respond) => })(); }); -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getFollowBots.js b/src/commands/helpers/getFollowBots.js index 174fa838..b5e045ee 100644 --- a/src/commands/helpers/getFollowBots.js +++ b/src/commands/helpers/getFollowBots.js @@ -1,10 +1,10 @@ /* * File: getFollowBots.js * Project: steam-comment-service-bot - * Created Date: 24.09.2023 18:01:44 + * Created Date: 2023-09-24 18:01:44 * Author: 3urobeat * - * Last Modified: 26.09.2023 22:19:34 + * Last Modified: 2023-12-27 14:05:07 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -108,4 +108,4 @@ module.exports.getAvailableBotsForFollowing = async (commandHandler, amount, can "whenAvailable": whenAvailable, "whenAvailableStr": whenAvailableStr }; -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getSharedfileArgs.js b/src/commands/helpers/getSharedfileArgs.js index 463fd651..d3ac6717 100644 --- a/src/commands/helpers/getSharedfileArgs.js +++ b/src/commands/helpers/getSharedfileArgs.js @@ -1,10 +1,10 @@ /* * File: getSharedfileArgs.js * Project: steam-comment-service-bot - * Created Date: 28.05.2023 12:18:49 + * Created Date: 2023-05-28 12:18:49 * Author: 3urobeat * - * Last Modified: 24.09.2023 17:18:35 + * Last Modified: 2023-12-27 14:04:57 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -64,4 +64,4 @@ module.exports.getSharedfileArgs = (commandHandler, args, cmd, resInfo, respond) })(); }); -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/getVoteBots.js b/src/commands/helpers/getVoteBots.js index d2a40e74..684401c4 100644 --- a/src/commands/helpers/getVoteBots.js +++ b/src/commands/helpers/getVoteBots.js @@ -1,10 +1,10 @@ /* * File: getVoteBots.js * Project: steam-comment-service-bot - * Created Date: 28.05.2023 12:21:02 + * Created Date: 2023-05-28 12:21:02 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:31:54 + * Last Modified: 2023-12-27 14:04:48 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -98,4 +98,4 @@ module.exports.getAvailableBotsForVoting = async (commandHandler, amount, id, vo "whenAvailableStr": whenAvailableStr }; -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/handleCommentSkips.js b/src/commands/helpers/handleCommentSkips.js index cf995eab..eeab63fb 100644 --- a/src/commands/helpers/handleCommentSkips.js +++ b/src/commands/helpers/handleCommentSkips.js @@ -1,13 +1,13 @@ /* * File: handleCommentSkips.js * Project: steam-comment-service-bot - * Created Date: 28.02.2022 12:22:48 + * Created Date: 2022-02-28 12:22:48 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:33:05 + * Last Modified: 2023-12-27 14:04:37 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -33,7 +33,7 @@ module.exports.handleIterationSkip = (commandHandler, loop, bot, receiverSteamID // Check if no bot account was found if (!bot) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; logger("error", `[Bot ?] Error posting comment ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} to ${receiverSteamID64}: Bot account '${activeReqEntry.accounts[loop.index() % activeReqEntry.accounts.length]}' does not exist?! Skipping...`); loop.next(); @@ -42,7 +42,7 @@ module.exports.handleIterationSkip = (commandHandler, loop, bot, receiverSteamID // Check if bot account is offline if (bot.status != Bot.EStatus.ONLINE) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; logger("error", `[${bot.logPrefix}] Error posting comment ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} to ${receiverSteamID64}: Skipped because bot account is offline`); loop.next(); @@ -58,7 +58,7 @@ module.exports.handleIterationSkip = (commandHandler, loop, bot, receiverSteamID for (let i = activeReqEntry.thisIteration; i < activeReqEntry.amount; i++) { // Iterate over all remaining comments by starting with thisIteration till numberOfComments let thisbot = commandHandler.controller.getBots("*", true)[activeReqEntry.accounts[i % activeReqEntry.accounts.length]]; - activeReqEntry.failed[`c${i + 1} b${thisbot.index} p${thisbot.loginData.proxyIndex}`] = "Skipped because comment process was aborted"; + activeReqEntry.failed[`i${i + 1} b${thisbot.index} p${thisbot.loginData.proxyIndex}`] = "Skipped because comment process was aborted"; } } @@ -86,7 +86,7 @@ module.exports.handleIterationSkip = (commandHandler, loop, bot, receiverSteamID } // Check if this iteration would use a blocked proxy by checking for existing failed obj entry for this iteration - if (activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`]) { + if (activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`]) { logger("debug", "CommandHandler handleIterationSkip(): Iteration would use a failed proxy, skipping..."); loop.next(); return false; @@ -126,7 +126,7 @@ module.exports.logCommentError = (error, commandHandler, bot, receiverSteamID64) // Add to failed obj if proxies match if (thisbot.loginData.proxyIndex == bot.loginData.proxyIndex) { - activeReqEntry.failed[`c${i + 1} b${thisbot.index} p${thisbot.loginData.proxyIndex}`] = "Skipped because of previous HTTP error 429 on this IP"; + activeReqEntry.failed[`i${i + 1} b${thisbot.index} p${thisbot.loginData.proxyIndex}`] = "Skipped because of previous HTTP error 429 on this IP"; } } break; @@ -166,7 +166,7 @@ module.exports.logCommentError = (error, commandHandler, bot, receiverSteamID64) // Log error, add it to failed obj and continue with next iteration logger("error", `[${bot.logPrefix}] Error posting comment ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} to ${receiverSteamID64}${proxiesDescription}: ${error}`); - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error} [${description}]`; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error} [${description}]`; // Sort failed object to make it easier to read @@ -180,7 +180,7 @@ module.exports.logCommentError = (error, commandHandler, bot, receiverSteamID64) */ function sortFailedCommentsObject(failedObj) { let sortedvals = Object.keys(failedObj).sort((a, b) => { - return Number(a.split(" ")[0].replace("c", "")) - Number(b.split(" ")[0].replace("c", "")); + return Number(a.split(" ")[0].replace("i", "")) - Number(b.split(" ")[0].replace("i", "")); }); // Map sortedvals back to object if array is not empty - Credit: https://www.geeksforgeeks.org/how-to-create-an-object-from-two-arrays-in-javascript/ @@ -231,4 +231,4 @@ module.exports.failedCommentsObjToString = (obj) => { // Return string and remove trailing newline return str.trim(); -}; \ No newline at end of file +}; diff --git a/src/commands/helpers/handleFollowErrors.js b/src/commands/helpers/handleFollowErrors.js index 461e08ed..782d0cef 100644 --- a/src/commands/helpers/handleFollowErrors.js +++ b/src/commands/helpers/handleFollowErrors.js @@ -1,10 +1,10 @@ /* * File: handleFollowErrors.js * Project: steam-comment-service-bot - * Created Date: 24.09.2023 22:57:21 + * Created Date: 2023-09-24 22:57:21 * Author: 3urobeat * - * Last Modified: 25.09.2023 18:35:20 + * Last Modified: 2023-12-27 14:04:20 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -31,7 +31,7 @@ module.exports.handleFollowIterationSkip = function(commandHandler, loop, bot, i // Check if no bot account was found if (!bot) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; logger("error", `[Bot ?] Error while sending un-/follow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${id}: Bot account '${activeReqEntry.accounts[loop.index() % activeReqEntry.accounts.length]}' does not exist?! Skipping...`); loop.next(); @@ -40,7 +40,7 @@ module.exports.handleFollowIterationSkip = function(commandHandler, loop, bot, i // Check if bot account is offline if (bot.status != Bot.EStatus.ONLINE) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; logger("error", `[${bot.logPrefix}] Error while sending un-/follow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${id}: Skipped because bot account is offline`); loop.next(); @@ -70,7 +70,7 @@ module.exports.logFollowError = (error, commandHandler, bot, id) => { // Log error, add it to failed obj and continue with next iteration logger("error", `[${bot.logPrefix}] Error while sending un-/follow ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} for ${id}${proxiesDescription}: ${error}`); - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; // Sort failed object to make it easier to read @@ -84,11 +84,11 @@ module.exports.logFollowError = (error, commandHandler, bot, id) => { */ function sortFailedCommentsObject(failedObj) { let sortedvals = Object.keys(failedObj).sort((a, b) => { - return Number(a.split(" ")[0].replace("c", "")) - Number(b.split(" ")[0].replace("c", "")); + return Number(a.split(" ")[0].replace("i", "")) - Number(b.split(" ")[0].replace("i", "")); }); // Map sortedvals back to object if array is not empty - Credit: https://www.geeksforgeeks.org/how-to-create-an-object-from-two-arrays-in-javascript/ if (sortedvals.length > 0) failedObj = Object.assign(...sortedvals.map(k => ({ [k]: failedObj[k] }))); return failedObj; -} \ No newline at end of file +} diff --git a/src/commands/helpers/handleSharedfileErrors.js b/src/commands/helpers/handleSharedfileErrors.js index 8190b00c..10f51608 100644 --- a/src/commands/helpers/handleSharedfileErrors.js +++ b/src/commands/helpers/handleSharedfileErrors.js @@ -1,10 +1,10 @@ /* * File: handleSharedfileErrors.js * Project: steam-comment-service-bot - * Created Date: 31.05.2023 16:57:21 + * Created Date: 2023-05-31 16:57:21 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:51:58 + * Last Modified: 2023-12-27 14:04:08 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -31,7 +31,7 @@ module.exports.handleVoteIterationSkip = function(commandHandler, loop, bot, id) // Check if no bot account was found if (!bot) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; logger("error", `[Bot ?] Error while voting ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}: Bot account '${activeReqEntry.accounts[loop.index() % activeReqEntry.accounts.length]}' does not exist?! Skipping...`); loop.next(); @@ -40,7 +40,7 @@ module.exports.handleVoteIterationSkip = function(commandHandler, loop, bot, id) // Check if bot account is offline if (bot.status != Bot.EStatus.ONLINE) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; logger("error", `[${bot.logPrefix}] Error while voting ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}: Skipped because bot account is offline`); loop.next(); @@ -65,7 +65,7 @@ module.exports.handleFavoriteIterationSkip = function(commandHandler, loop, bot, // Check if no bot account was found if (!bot) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b? p?`] = "Skipped because bot account does not exist"; logger("error", `[Bot ?] Error while un-/favorizing ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}: Bot account '${activeReqEntry.accounts[loop.index() % activeReqEntry.accounts.length]}' does not exist?! Skipping...`); loop.next(); @@ -74,7 +74,7 @@ module.exports.handleFavoriteIterationSkip = function(commandHandler, loop, bot, // Check if bot account is offline if (bot.status != Bot.EStatus.ONLINE) { - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = "Skipped because bot account is offline"; logger("error", `[${bot.logPrefix}] Error while un-/favorizing ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}: Skipped because bot account is offline`); loop.next(); @@ -104,7 +104,7 @@ module.exports.logVoteError = (error, commandHandler, bot, id) => { // Log error, add it to failed obj and continue with next iteration logger("error", `[${bot.logPrefix}] Error while voting ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}${proxiesDescription}: ${error}`); - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; // Sort failed object to make it easier to read @@ -130,7 +130,7 @@ module.exports.logFavoriteError = (error, commandHandler, bot, id) => { // Log error, add it to failed obj and continue with next iteration logger("error", `[${bot.logPrefix}] Error while un-/favorizing ${activeReqEntry.thisIteration + 1}/${activeReqEntry.amount} on ${id}${proxiesDescription}: ${error}`); - activeReqEntry.failed[`c${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; + activeReqEntry.failed[`i${activeReqEntry.thisIteration + 1} b${bot.index} p${bot.loginData.proxyIndex}`] = `${error}`; // Sort failed object to make it easier to read @@ -144,11 +144,11 @@ module.exports.logFavoriteError = (error, commandHandler, bot, id) => { */ function sortFailedCommentsObject(failedObj) { let sortedvals = Object.keys(failedObj).sort((a, b) => { - return Number(a.split(" ")[0].replace("c", "")) - Number(b.split(" ")[0].replace("c", "")); + return Number(a.split(" ")[0].replace("i", "")) - Number(b.split(" ")[0].replace("i", "")); }); // Map sortedvals back to object if array is not empty - Credit: https://www.geeksforgeeks.org/how-to-create-an-object-from-two-arrays-in-javascript/ if (sortedvals.length > 0) failedObj = Object.assign(...sortedvals.map(k => ({ [k]: failedObj[k] }))); return failedObj; -} \ No newline at end of file +} diff --git a/src/controller/controller.js b/src/controller/controller.js index a8f26c8d..e9047462 100644 --- a/src/controller/controller.js +++ b/src/controller/controller.js @@ -1,13 +1,13 @@ /* * File: controller.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 15.10.2023 11:13:59 + * Last Modified: 2023-12-27 14:08:35 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -180,14 +180,14 @@ Controller.prototype._start = async function() { } - // Check for unsupported node.js version (<14.15.0) + // Check for unsupported node.js version (<16.0.0) let versionarr = process.version.replace("v", "").split("."); versionarr.forEach((e, i) => { if (e.length == 1 && parseInt(e) < 10) versionarr[i] = `0${e}`; }); // Put 0 in front of single digits - if (parseInt(versionarr.join("")) < 141500) { + if (parseInt(versionarr.join("")) < 160000) { logger("", "\n************************************************************************************\n", true); - logger("error", `This application requires at least node.js ${logger.colors.reset}v14.15.0${logger.colors.fgred} but you have ${logger.colors.reset}${process.version}${logger.colors.fgred} installed!\n Please update your node.js installation: ${logger.colors.reset} https://nodejs.org/`, true); + logger("error", `This application requires at least node.js ${logger.colors.reset}v16.0.0${logger.colors.fgred} but you have ${logger.colors.reset}${process.version}${logger.colors.fgred} installed!\n Please update your node.js installation: ${logger.colors.reset} https://nodejs.org/`, true); logger("", "\n************************************************************************************\n", true); return this.stop(); } @@ -478,4 +478,4 @@ Controller.prototype._loggerOptionsUpdateAfterConfigLoad = function(advancedconf /** * Internal: Logs all held back messages from logAfterReady array */ -Controller.prototype._loggerLogAfterReady = function() {}; // eslint-disable-line \ No newline at end of file +Controller.prototype._loggerLogAfterReady = function() {}; // eslint-disable-line diff --git a/src/controller/events/ready.js b/src/controller/events/ready.js index 5687af09..428ee14a 100644 --- a/src/controller/events/ready.js +++ b/src/controller/events/ready.js @@ -1,10 +1,10 @@ /* * File: ready.js * Project: steam-comment-service-bot - * Created Date: 29.03.2023 12:23:29 + * Created Date: 2023-03-29 12:23:29 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:55:18 + * Last Modified: 2023-12-27 14:10:12 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -53,7 +53,7 @@ Controller.prototype._readyEvent = function() { let limitedaccs = 0; let failedtocheck = 0; - this.getBots().forEach((e, i) => { + this.getBots().forEach((e) => { if (e.user.limitations && e.user.limitations.limited) { // Check if limitations obj is populated before accessing limited just to be sure. The ready event should not have been called if limitations is not populated but better safe than sorry limitedaccs++; } else { @@ -62,15 +62,12 @@ Controller.prototype._readyEvent = function() { failedtocheck++; } } + }); - // Check for last iteration - if (i + 1 == this.getBots().length) { - let failedtocheckmsg = ""; - if (failedtocheck > 0) failedtocheckmsg = `(Couldn't check ${failedtocheck} account(s))`; + let failedtocheckmsg = ""; + if (failedtocheck > 0) failedtocheckmsg = `(Couldn't check ${failedtocheck} account(s))`; - logger("", `${logger.colors.brfggreen}>${logger.colors.reset} ${limitedaccs}/${this.getBots().length} account(s) are ${logger.colors.fgred}limited${logger.colors.reset} ${failedtocheckmsg}`, true, false, null, false, true); - } - }); + logger("", `${logger.colors.brfggreen}>${logger.colors.reset} ${limitedaccs}/${this.getBots().length} account(s) are ${logger.colors.fgred}limited${logger.colors.reset} ${failedtocheckmsg}`, true, false, null, false, true); // Log warning message if automatic updater is turned off @@ -197,4 +194,4 @@ Controller.prototype._readyEvent = function() { // Emit ready event for plugins to use this.events.emit("ready"); -}; \ No newline at end of file +}; diff --git a/src/controller/events/statusUpdate.js b/src/controller/events/statusUpdate.js index f2b80bde..a23695fa 100644 --- a/src/controller/events/statusUpdate.js +++ b/src/controller/events/statusUpdate.js @@ -1,10 +1,10 @@ /* * File: statusUpdate.js * Project: steam-comment-service-bot - * Created Date: 30.03.2023 21:05:13 + * Created Date: 2023-03-30 21:05:13 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:36:26 + * Last Modified: 2023-12-27 14:10:00 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -35,4 +35,4 @@ Controller.prototype._statusUpdateEvent = function(bot, newStatus) { // Emit event this.events.emit("statusUpdate", bot, oldStatus, newStatus); -}; \ No newline at end of file +}; diff --git a/src/controller/events/steamGuardInput.js b/src/controller/events/steamGuardInput.js index f747a7d4..88ec7c16 100644 --- a/src/controller/events/steamGuardInput.js +++ b/src/controller/events/steamGuardInput.js @@ -1,10 +1,10 @@ /* * File: steamGuardInput.js * Project: steam-comment-service-bot - * Created Date: 04.06.2023 12:00:48 + * Created Date: 2023-06-04 12:00:48 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:36:34 + * Last Modified: 2023-12-27 14:09:45 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -32,4 +32,4 @@ Controller.prototype._steamGuardInputEvent = function(bot, submitCode) { // Emit event this.events.emit("steamGuardInput", bot, submitCode); -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/friendlist.js b/src/controller/helpers/friendlist.js index 174f7a26..e5bc302d 100644 --- a/src/controller/helpers/friendlist.js +++ b/src/controller/helpers/friendlist.js @@ -1,13 +1,13 @@ /* * File: friendlist.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:09:33 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/controller/helpers/getBots.js b/src/controller/helpers/getBots.js index 3a85498a..484cb936 100644 --- a/src/controller/helpers/getBots.js +++ b/src/controller/helpers/getBots.js @@ -1,10 +1,10 @@ /* * File: getBots.js * Project: steam-comment-service-bot - * Created Date: 02.05.2023 13:46:21 + * Created Date: 2023-05-02 13:46:21 * Author: 3urobeat * - * Last Modified: 17.10.2023 18:26:25 + * Last Modified: 2023-12-27 14:09:26 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -70,4 +70,4 @@ Controller.prototype.getBotsPerProxy = function(filterOffline = false) { // Return result return mappedProxies; -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/handleErrors.js b/src/controller/helpers/handleErrors.js index d98866f5..31ced52c 100644 --- a/src/controller/helpers/handleErrors.js +++ b/src/controller/helpers/handleErrors.js @@ -1,10 +1,10 @@ /* * File: handleErrors.js * Project: steam-comment-service-bot - * Created Date: 21.03.2023 22:53:37 + * Created Date: 2023-03-21 22:53:37 * Author: 3urobeat * - * Last Modified: 05.07.2023 10:48:43 + * Last Modified: 2023-12-27 14:09:15 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -68,4 +68,4 @@ Controller.prototype._handleErrors = function() { } }); -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/handleSteamIdResolving.js b/src/controller/helpers/handleSteamIdResolving.js index e2e5ab25..4504db54 100644 --- a/src/controller/helpers/handleSteamIdResolving.js +++ b/src/controller/helpers/handleSteamIdResolving.js @@ -1,13 +1,13 @@ /* * File: handleSteamIdResolving.js * Project: steam-comment-service-bot - * Created Date: 09.03.2022 12:58:17 + * Created Date: 2022-03-09 12:58:17 * Author: 3urobeat * - * Last Modified: 26.09.2023 20:52:22 + * Last Modified: 2023-12-27 14:09:07 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -204,4 +204,4 @@ Controller.prototype.handleSteamIdResolving = (str, expectedIdType, callback) => else handleResponse(null, str, idType); } -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/logger.js b/src/controller/helpers/logger.js index 7a003ae2..0b7592a7 100644 --- a/src/controller/helpers/logger.js +++ b/src/controller/helpers/logger.js @@ -1,13 +1,13 @@ /* * File: logger.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:39:07 + * Last Modified: 2023-12-27 14:09:00 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -101,4 +101,4 @@ Controller.prototype._loggerLogAfterReady = function() { // Clear content and prevent new entries logAfterReady = []; -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/misc.js b/src/controller/helpers/misc.js index 723f03db..0f7091c8 100644 --- a/src/controller/helpers/misc.js +++ b/src/controller/helpers/misc.js @@ -1,10 +1,10 @@ /* * File: misc.js * Project: steam-comment-service-bot - * Created Date: 25.03.2023 14:02:56 + * Created Date: 2023-03-25 14:02:56 * Author: 3urobeat * - * Last Modified: 08.10.2023 16:59:24 + * Last Modified: 2023-12-28 16:36:37 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -211,23 +211,51 @@ module.exports.cutStringsIntelligently = (txt, limit, cutChars, threshold) => { let lastIndex = 0; let result = []; - // Iterate over string until lastIndex reaches length of input string + // Regex-less version - Safe but can cut at places where a link is surrounded by "' " and " '" to avoid embedding in the Steam Chat. + // Iterate over string until lastIndex reaches length of input string. This whole algorithm could probably be replicated using RegEx but eeeehhhh while (lastIndex < txt.length - 1) { let cut = txt.slice(lastIndex, lastIndex + limit); // Get the next part by cutting from lastIndex to limit // Find the last occurrence of all cutChars and find the most recent one using Math.max() let lastOccurrence = Math.max(...cutChars.map(e => cut.lastIndexOf(e))); - // Check if cut maxes out limit, a last occurrence was found and is within threshold. If so, cut again, push to result and update lastIndex. If not, accept a word cut. + // Check if cut maxes out limit (if not we have reached the end and can push as is), + // a last occurrence was found and is within threshold. If so, cut again, push to result and update lastIndex. + // If not, accept a word cut. if (cut.length == limit && lastOccurrence >= 0 && (cut.length - lastOccurrence) < threshold) { - result.push(txt.slice(lastIndex, lastIndex + lastOccurrence).trim()); + result.push(txt.slice(lastIndex, lastIndex + lastOccurrence).trim()); // Does not cut into words lastIndex += lastOccurrence; } else { - result.push(cut.trim()); + result.push(cut.trim()); // Cuts into words lastIndex += limit - 1; } } + // Regex version - Only cuts when match is not surrounded by "'" and "URL" but does not (yet) support any other chars and is wonky - therefore disabled + /* let re = /(? prevLen + limit) { + result.push(txt.substring(prevLen, prevTemp.index)); // Cut only to index to ignore the space + prevLen = prevTemp.index + 1; + } + + prevTemp = temp; + + } + + // Push remaining + if (prevLen < txt.length) { + result.push(txt.substring(prevLen, txt.length)); + } */ + + // Return result return result; -}; \ No newline at end of file +}; diff --git a/src/controller/helpers/npminteraction.js b/src/controller/helpers/npminteraction.js index dbeb1bc6..5f4eb65f 100644 --- a/src/controller/helpers/npminteraction.js +++ b/src/controller/helpers/npminteraction.js @@ -1,13 +1,13 @@ /* * File: npminteraction.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 29.09.2023 16:51:36 + * Last Modified: 2023-12-27 14:08:40 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -15,6 +15,9 @@ */ +// **IMPORTANT NOTE**: This file cannot be moved because it is being accessed by the old updater during an update! + + const fs = require("fs"); const { exec } = require("child_process"); // Wanted to do it with the npm package but that didn't work out (BETA 2.8 b2) @@ -77,4 +80,4 @@ module.exports.updateFromPath = (path, callback) => { callback(null, stdout); }); -}; \ No newline at end of file +}; diff --git a/src/controller/login.js b/src/controller/login.js index 1dccf018..53b4d772 100644 --- a/src/controller/login.js +++ b/src/controller/login.js @@ -1,13 +1,13 @@ /* * File: login.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:52:52 + * Last Modified: 2023-12-27 14:08:30 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -75,14 +75,14 @@ Controller.prototype.login = function(firstLogin) { if (this.info.activeLogin) return logger("debug", "Controller login(): Login requested but there is already a login process active. Ignoring..."); else logger("debug", "Controller login(): Login requested, checking for any accounts currently offline..."); - // Get array of all account names - let allAccounts = this.data.logininfo.map((e) => e.accountName); + // Get array of all accounts + let allAccounts = [ ... this.data.logininfo ]; // Filter accounts which were skipped - allAccounts = allAccounts.filter(e => !this.info.skippedaccounts.includes(e)); + allAccounts = allAccounts.filter((e) => !this.info.skippedaccounts.includes(e.accountName)); // Filter accounts which are not offline - allAccounts = allAccounts.filter(e => !this.bots[e] || this.bots[e].status == Bot.EStatus.OFFLINE); // If no bot object exists yet the account must be offline + allAccounts = allAccounts.filter((e) => !this.bots[e.accountName] || this.bots[e.accountName].status == Bot.EStatus.OFFLINE); // If no bot object exists yet the account must be offline logger("debug", `Controller login(): Found ${allAccounts.length} account(s) which aren't logged in and weren't skipped`); @@ -93,7 +93,7 @@ Controller.prototype.login = function(firstLogin) { // Iterate over all accounts, use syncLoop() helper to make our job easier misc.syncLoop(allAccounts.length, (loop, i) => { - let k = this.data.logininfo.find((e) => e.accountName == allAccounts[i]); // Get logininfo for this account name + let thisAcc = allAccounts[i]; // Get logininfo for this account name // Calculate wait time let waitTime = (this.info.lastLoginTimestamp + this.data.advancedconfig.loginDelay) - Date.now(); @@ -105,23 +105,23 @@ Controller.prototype.login = function(firstLogin) { setTimeout(() => { // Check if no bot object entry exists for this account and create one - if (!this.bots[k.accountName]) { - logger("info", `Creating new bot object for ${k.accountName}...`, false, true, logger.animation("loading")); + if (!this.bots[thisAcc.accountName]) { + logger("info", `Creating new bot object for ${thisAcc.accountName}...`, false, true, logger.animation("loading")); - this.bots[k.accountName] = new Bot(this, k.index); // Create a new bot object for this account and store a reference to it + this.bots[thisAcc.accountName] = new Bot(this, thisAcc.index); // Create a new bot object for this account and store a reference to it } else { - logger("debug", `Found existing bot object for ${k.accountName}! Reusing it...`, false, true, logger.animation("loading")); + logger("debug", `Found existing bot object for ${thisAcc.accountName}! Reusing it...`, false, true, logger.animation("loading")); } - let thisbot = this.bots[k.accountName]; + let thisbot = this.bots[thisAcc.accountName]; // Reset logOnTries (do this here to guarantee a bot object exists for this account) thisbot.loginData.logOnTries = 0; // Generate steamGuardCode with shared secret if one was provided - if (k.sharedSecret) { - logger("debug", `Found shared_secret for bot${this.bots[k.accountName].index}! Generating AuthCode and adding it to logOnOptions...`); - k.steamGuardCode = SteamTotp.generateAuthCode(k.sharedSecret); + if (thisAcc.sharedSecret) { + logger("debug", `Found shared_secret for bot${this.bots[thisAcc.accountName].index}! Generating AuthCode and adding it to logOnOptions...`); + thisAcc.steamGuardCode = SteamTotp.generateAuthCode(thisAcc.sharedSecret); } // Login! @@ -143,9 +143,9 @@ Controller.prototype.login = function(firstLogin) { this.info.lastLoginTimestamp = Date.now(); // Populate this.main if we just logged in the first account - if (Object.keys(this.bots)[0] == k.accountName) this.main = thisbot; + if (Object.keys(this.bots)[0] == thisAcc.accountName) this.main = thisbot; - logger("debug", `Controller login(): bot${this.bots[k.accountName].index} changed status from OFFLINE to ${Bot.EStatus[thisbot.status]}! Continuing with next account...`); + logger("debug", `Controller login(): bot${this.bots[thisAcc.accountName].index} changed status from OFFLINE to ${Bot.EStatus[thisbot.status]}! Continuing with next account...`); // Check for last iteration, call again and emit ready event if (i + 1 == allAccounts.length) { @@ -162,4 +162,4 @@ Controller.prototype.login = function(firstLogin) { }, waitTime); }); -}; \ No newline at end of file +}; diff --git a/src/data/ascii.js b/src/data/ascii.js index 2fd47a70..f3ebbdff 100644 --- a/src/data/ascii.js +++ b/src/data/ascii.js @@ -1,13 +1,13 @@ /* * File: ascii.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:10:31 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -17,167 +17,167 @@ /* eslint-disable */ module.exports.hellothereascii = -` _ _ _ _ _ _ -| | | | | | | | | | | -| |_| | ___| | | ___ | |_| |__ ___ _ __ ___ +` _ _ _ _ _ _ +| | | | | | | | | | | +| |_| | ___| | | ___ | |_| |__ ___ _ __ ___ | _ |/ _ | | |/ _ \\ | __| '_ \\ / _ | '__/ _ \\ | | | | __| | | (_) | | |_| | | | __| | | __/ \\_| |_/\\___|_|_|\\___/ \\__|_| |_|\\___|_| \\___| - + General Kenobi ` module.exports.binaryascii = "01000011 01101111 01101101 01101101 01100101 01101110 01110100 01000010 01101111 01110100" module.exports.ascii = [ -` ______ ______ __ __ __ __ ______ __ __ ______ ______ ______ ______ -/\\ ___\\ /\\ __ \\ /\\ "-./ \\ /\\ "-./ \\ /\\ ___\\ /\\ "-.\\ \\ /\\__ _\\ /\\ == \\ /\\ __ \\ /\\__ _\\ -\\ \\ \\____ \\ \\ \\/\\ \\ \\ \\ \\-./\\ \\ \\ \\ \\-./\\ \\ \\ \\ __\\ \\ \\ \\-. \\ \\/_/\\ \\/ \\ \\ __< \\ \\ \\/\\ \\ \\/_/\\ \\/ - \\ \\_____\\ \\ \\_____\\ \\ \\_\\ \\ \\_\\ \\ \\_\\ \\ \\_\\ \\ \\_____\\ \\ \\_\\\\"\\_\\ \\ \\_\\ \\ \\_____\\ \\ \\_____\\ \\ \\_\\ +` ______ ______ __ __ __ __ ______ __ __ ______ ______ ______ ______ +/\\ ___\\ /\\ __ \\ /\\ "-./ \\ /\\ "-./ \\ /\\ ___\\ /\\ "-.\\ \\ /\\__ _\\ /\\ == \\ /\\ __ \\ /\\__ _\\ +\\ \\ \\____ \\ \\ \\/\\ \\ \\ \\ \\-./\\ \\ \\ \\ \\-./\\ \\ \\ \\ __\\ \\ \\ \\-. \\ \\/_/\\ \\/ \\ \\ __< \\ \\ \\/\\ \\ \\/_/\\ \\/ + \\ \\_____\\ \\ \\_____\\ \\ \\_\\ \\ \\_\\ \\ \\_\\ \\ \\_\\ \\ \\_____\\ \\ \\_\\\\"\\_\\ \\ \\_\\ \\ \\_____\\ \\ \\_____\\ \\ \\_\\ \\/_____/ \\/_____/ \\/_/ \\/_/ \\/_/ \\/_/ \\/_____/ \\/_/ \\/_/ \\/_/ \\/_____/ \\/_____/ \\/_/ `, -`_________ __ __________ __ -\\_ ___ \\ ____ _____ _____ ____ _____/ |_ \\______ \\ _____/ |_ +`_________ __ __________ __ +\\_ ___ \\ ____ _____ _____ ____ _____/ |_ \\______ \\ _____/ |_ / \\ \\/ / _ \\ / \\ / \\_/ __ \\ / \\ __\\ | | _// _ \\ __\\ -\\ \\___( <_> ) Y Y \\ Y Y \\ ___/| | \\ | | | ( <_> ) | - \\______ /\\____/|__|_| /__|_| /\\___ >___| /__| |______ /\\____/|__| +\\ \\___( <_> ) Y Y \\ Y Y \\ ___/| | \\ | | | ( <_> ) | + \\______ /\\____/|__|_| /__|_| /\\___ >___| /__| |______ /\\____/|__| \\/ \\/ \\/ \\/ \\/ \\/ `, -` ___ _____ __ __ __ __ ____ _ _ ____ ____ _____ ____ +` ___ _____ __ __ __ __ ____ _ _ ____ ____ _____ ____ / __)( _ )( \\/ )( \\/ )( ___)( \\( )(_ _) ( _ \\( _ )(_ _) -( (__ )(_)( ) ( ) ( )__) ) ( )( ) _ < )(_)( )( +( (__ )(_)( ) ( ) ( )__) ) ( )( ) _ < )(_)( )( \\___)(_____)(_/\\/\\_)(_/\\/\\_)(____)(_)\\_) (__) (____/(_____) (__) `, -` ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ - /\\ \\ /\\ \\ /\\__\\ /\\__\\ /\\ \\ /\\__\\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ - /::\\ \\ /::\\ \\ /::| | /::| | /::\\ \\ /::| | \\:\\ \\ /::\\ \\ /::\\ \\ \\:\\ \\ - /:/\\:\\ \\ /:/\\:\\ \\ /:|:| | /:|:| | /:/\\:\\ \\ /:|:| | \\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ \\:\\ \\ - /:/ \\:\\ \\ /:/ \\:\\ \\ /:/|:|__|__ /:/|:|__|__ /::\\~\\:\\ \\ /:/|:| |__ /::\\ \\ /::\\~\\:\\__\\ /:/ \\:\\ \\ /::\\ \\ +` ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ + /\\ \\ /\\ \\ /\\__\\ /\\__\\ /\\ \\ /\\__\\ /\\ \\ /\\ \\ /\\ \\ /\\ \\ + /::\\ \\ /::\\ \\ /::| | /::| | /::\\ \\ /::| | \\:\\ \\ /::\\ \\ /::\\ \\ \\:\\ \\ + /:/\\:\\ \\ /:/\\:\\ \\ /:|:| | /:|:| | /:/\\:\\ \\ /:|:| | \\:\\ \\ /:/\\:\\ \\ /:/\\:\\ \\ \\:\\ \\ + /:/ \\:\\ \\ /:/ \\:\\ \\ /:/|:|__|__ /:/|:|__|__ /::\\~\\:\\ \\ /:/|:| |__ /::\\ \\ /::\\~\\:\\__\\ /:/ \\:\\ \\ /::\\ \\ /:/__/ \\:\\__\\ /:/__/ \\:\\__\\ /:/ |::::\\__\\ /:/ |::::\\__\\ /:/\\:\\ \\:\\__\\ /:/ |:| /\\__\\ /:/\\:\\__\\ /:/\\:\\ \\:|__| /:/__/ \\:\\__\\ /:/\\:\\__\\ \\:\\ \\ \\/__/ \\:\\ \\ /:/ / \\/__/~~/:/ / \\/__/~~/:/ / \\:\\~\\:\\ \\/__/ \\/__|:|/:/ / /:/ \\/__/ \\:\\~\\:\\/:/ / \\:\\ \\ /:/ / /:/ \\/__/ - \\:\\ \\ \\:\\ /:/ / /:/ / /:/ / \\:\\ \\:\\__\\ |:/:/ / /:/ / \\:\\ \\::/ / \\:\\ /:/ / /:/ / - \\:\\ \\ \\:\\/:/ / /:/ / /:/ / \\:\\ \\/__/ |::/ / \\/__/ \\:\\/:/ / \\:\\/:/ / \\/__/ - \\:\\__\\ \\::/ / /:/ / /:/ / \\:\\__\\ /:/ / \\::/__/ \\::/ / + \\:\\ \\ \\:\\ /:/ / /:/ / /:/ / \\:\\ \\:\\__\\ |:/:/ / /:/ / \\:\\ \\::/ / \\:\\ /:/ / /:/ / + \\:\\ \\ \\:\\/:/ / /:/ / /:/ / \\:\\ \\/__/ |::/ / \\/__/ \\:\\/:/ / \\:\\/:/ / \\/__/ + \\:\\__\\ \\::/ / /:/ / /:/ / \\:\\__\\ /:/ / \\::/__/ \\::/ / \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ \\/__/ ~~ \\/__/ `, -` ______ __ ____ __ +` ______ __ ____ __ / ____/___ ____ ___ ____ ___ ___ ____ / /_ / __ )____ / /_ / / / __ \\/ __ __ \\/ __ __ \\/ _ \\/ __ \\/ __/ / __ / __ \\/ __/ -/ /___/ /_/ / / / / / / / / / / / __/ / / / /_ / /_/ / /_/ / /_ +/ /___/ /_/ / / / / / / / / / / / __/ / / / /_ / /_/ / /_/ / /_ \\____/\\____/_/ /_/ /_/_/ /_/ /_/\\___/_/ /_/\\__/ /_____/\\____/\\__/ `, `▄████▄ ▒█████ ███▄ ▄███▓ ███▄ ▄███▓▓█████ ███▄ █ ▄▄▄█████▓ ▄▄▄▄ ▒█████ ▄▄▄█████▓ ▒██▀ ▀█ ▒██▒ ██▒▓██▒▀█▀ ██▒▓██▒▀█▀ ██▒▓█ ▀ ██ ▀█ █ ▓ ██▒ ▓▒ ▓█████▄ ▒██▒ ██▒▓ ██▒ ▓▒ ▒▓█ ▄ ▒██░ ██▒▓██ ▓██░▓██ ▓██░▒███ ▓██ ▀█ ██▒▒ ▓██░ ▒░ ▒██▒ ▄██▒██░ ██▒▒ ▓██░ ▒░ -▒▓▓▄ ▄██▒▒██ ██░▒██ ▒██ ▒██ ▒██ ▒▓█ ▄ ▓██▒ ▐▌██▒░ ▓██▓ ░ ▒██░█▀ ▒██ ██░░ ▓██▓ ░ -▒ ▓███▀ ░░ ████▓▒░▒██▒ ░██▒▒██▒ ░██▒░▒████▒▒██░ ▓██░ ▒██▒ ░ ░▓█ ▀█▓░ ████▓▒░ ▒██▒ ░ -░ ░▒ ▒ ░░ ▒░▒░▒░ ░ ▒░ ░ ░░ ▒░ ░ ░░░ ▒░ ░░ ▒░ ▒ ▒ ▒ ░░ ░▒▓███▀▒░ ▒░▒░▒░ ▒ ░░ - ░ ▒ ░ ▒ ▒░ ░ ░ ░░ ░ ░ ░ ░ ░░ ░░ ░ ▒░ ░ ▒░▒ ░ ░ ▒ ▒░ ░ -░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ -░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +▒▓▓▄ ▄██▒▒██ ██░▒██ ▒██ ▒██ ▒██ ▒▓█ ▄ ▓██▒ ▐▌██▒░ ▓██▓ ░ ▒██░█▀ ▒██ ██░░ ▓██▓ ░ +▒ ▓███▀ ░░ ████▓▒░▒██▒ ░██▒▒██▒ ░██▒░▒████▒▒██░ ▓██░ ▒██▒ ░ ░▓█ ▀█▓░ ████▓▒░ ▒██▒ ░ +░ ░▒ ▒ ░░ ▒░▒░▒░ ░ ▒░ ░ ░░ ▒░ ░ ░░░ ▒░ ░░ ▒░ ▒ ▒ ▒ ░░ ░▒▓███▀▒░ ▒░▒░▒░ ▒ ░░ + ░ ▒ ░ ▒ ▒░ ░ ░ ░░ ░ ░ ░ ░ ░░ ░░ ░ ▒░ ░ ▒░▒ ░ ░ ▒ ▒░ ░ +░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ +░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ `, ` ██████╗ ██████╗ ███╗ ███╗███╗ ███╗███████╗███╗ ██╗████████╗ ██████╗ ██████╗ ████████╗ ██╔════╝██╔═══██╗████╗ ████║████╗ ████║██╔════╝████╗ ██║╚══██╔══╝ ██╔══██╗██╔═══██╗╚══██╔══╝ - ██║ ██║ ██║██╔████╔██║██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ██████╔╝██║ ██║ ██║ - ██║ ██║ ██║██║╚██╔╝██║██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ██╔══██╗██║ ██║ ██║ - ╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ██████╔╝╚██████╔╝ ██║ + ██║ ██║ ██║██╔████╔██║██╔████╔██║█████╗ ██╔██╗ ██║ ██║ ██████╔╝██║ ██║ ██║ + ██║ ██║ ██║██║╚██╔╝██║██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ ██╔══██╗██║ ██║ ██║ + ╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ ██████╔╝╚██████╔╝ ██║ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ `, -` ( ) ( ) - )\\ ) ) ( ( /( ( )\\ ( /( - (((_) ( ( ( ))\\ ( )\\()) )((_) ( )\\()) - )\\___ )\\ )\\ ' )\\ ' /((_) )\\ ) (_))/ ((_)_ )\\ (_))/ - ((/ __| ((_) _((_)) _((_)) (_)) _(_/( | |_ | _ ) ((_)| |_ - | (__ / _ \\| ' \\()| ' \\()/ -_)| ' \\))| _| | _ \\/ _ \\| _| +` ( ) ( ) + )\\ ) ) ( ( /( ( )\\ ( /( + (((_) ( ( ( ))\\ ( )\\()) )((_) ( )\\()) + )\\___ )\\ )\\ ' )\\ ' /((_) )\\ ) (_))/ ((_)_ )\\ (_))/ + ((/ __| ((_) _((_)) _((_)) (_)) _(_/( | |_ | _ ) ((_)| |_ + | (__ / _ \\| ' \\()| ' \\()/ -_)| ' \\))| _| | _ \\/ _ \\| _| \\___|\\___/|_|_|_| |_|_|_| \\___||_||_| \\__| |___/\\___/ \\__| `, -` .d8888b. 888 888888b. 888 -d88P Y88b 888 888 "88b 888 -888 888 888 888 .88P 888 -888 .d88b. 88888b.d88b. 88888b.d88b. .d88b. 88888b. 888888 8888888K. .d88b. 888888 -888 d88""88b 888 "888 "88b 888 "888 "88b d8P Y8b 888 "88b 888 888 "Y88b d88""88b 888 -888 888 888 888 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 888 -Y88b d88P Y88..88P 888 888 888 888 888 888 Y8b. 888 888 Y88b. 888 d88P Y88..88P Y88b. +` .d8888b. 888 888888b. 888 +d88P Y88b 888 888 "88b 888 +888 888 888 888 .88P 888 +888 .d88b. 88888b.d88b. 88888b.d88b. .d88b. 88888b. 888888 8888888K. .d88b. 888888 +888 d88""88b 888 "888 "88b 888 "888 "88b d8P Y8b 888 "88b 888 888 "Y88b d88""88b 888 +888 888 888 888 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 888 +Y88b d88P Y88..88P 888 888 888 888 888 888 Y8b. 888 888 Y88b. 888 d88P Y88..88P Y88b. "Y8888P" "Y88P" 888 888 888 888 888 888 "Y8888 888 888 "Y888 8888888P" "Y88P" "Y888 `, -` /$$$$$$ /$$ /$$$$$$$ /$$ - /$$__ $$ | $$ | $$__ $$ | $$ -| $$ \\__/ /$$$$$$ /$$$$$$/$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ \\ $$ /$$$$$$ /$$$$$$ -| $$ /$$__ $$| $$_ $$_ $$| $$_ $$_ $$ /$$__ $$| $$__ $$|_ $$_/ | $$$$$$$ /$$__ $$|_ $$_/ -| $$ | $$ \\ $$| $$ \\ $$ \\ $$| $$ \\ $$ \\ $$| $$$$$$$$| $$ \\ $$ | $$ | $$__ $$| $$ \\ $$ | $$ +` /$$$$$$ /$$ /$$$$$$$ /$$ + /$$__ $$ | $$ | $$__ $$ | $$ +| $$ \\__/ /$$$$$$ /$$$$$$/$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ \\ $$ /$$$$$$ /$$$$$$ +| $$ /$$__ $$| $$_ $$_ $$| $$_ $$_ $$ /$$__ $$| $$__ $$|_ $$_/ | $$$$$$$ /$$__ $$|_ $$_/ +| $$ | $$ \\ $$| $$ \\ $$ \\ $$| $$ \\ $$ \\ $$| $$$$$$$$| $$ \\ $$ | $$ | $$__ $$| $$ \\ $$ | $$ | $$ $$| $$ | $$| $$ | $$ | $$| $$ | $$ | $$| $$_____/| $$ | $$ | $$ /$$ | $$ \\ $$| $$ | $$ | $$ /$$ | $$$$$$/| $$$$$$/| $$ | $$ | $$| $$ | $$ | $$| $$$$$$$| $$ | $$ | $$$$/ | $$$$$$$/| $$$$$$/ | $$$$/ \\______/ \\______/ |__/ |__/ |__/|__/ |__/ |__/ \\_______/|__/ |__/ \\___/ |_______/ \\______/ \\___/ `, -` :::::::: :::::::: ::: ::: ::: ::: :::::::::: :::: ::: ::::::::::: ::::::::: :::::::: ::::::::::: - :+: :+: :+: :+: :+:+: :+:+: :+:+: :+:+: :+: :+:+: :+: :+: :+: :+: :+: :+: :+: - +:+ +:+ +:+ +:+ +:+:+ +:+ +:+ +:+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ - +#+ +#+ +:+ +#+ +:+ +#+ +#+ +:+ +#+ +#++:++# +#+ +:+ +#+ +#+ +#++:++#+ +#+ +:+ +#+ - +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+ +#+ +#+ +#+ +#+ +#+ -#+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+#+# #+# #+# #+# #+# #+# #+# +` :::::::: :::::::: ::: ::: ::: ::: :::::::::: :::: ::: ::::::::::: ::::::::: :::::::: ::::::::::: + :+: :+: :+: :+: :+:+: :+:+: :+:+: :+:+: :+: :+:+: :+: :+: :+: :+: :+: :+: :+: + +:+ +:+ +:+ +:+ +:+:+ +:+ +:+ +:+:+ +:+ +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ + +#+ +#+ +:+ +#+ +:+ +#+ +#+ +:+ +#+ +#++:++# +#+ +:+ +#+ +#+ +#++:++#+ +#+ +:+ +#+ + +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+#+# +#+ +#+ +#+ +#+ +#+ +#+ +#+# #+# #+# #+# #+# #+# #+# #+# #+# #+# #+#+# #+# #+# #+# #+# #+# #+# ######## ######## ### ### ### ### ########## ### #### ### ######### ######## ### `, -` _____ _ ____ _ - / ____| | | | _ \\ | | -| | ___ _ __ ___ _ __ ___ ___ _ __ | |_ | |_) | ___ | |_ +` _____ _ ____ _ + / ____| | | | _ \\ | | +| | ___ _ __ ___ _ __ ___ ___ _ __ | |_ | |_) | ___ | |_ | | / _ \\| '_ \` _ \\| '_ \` _ \\ / _ \\ '_ \\| __| | _ < / _ \\| __| -| |___| (_) | | | | | | | | | | | __/ | | | |_ | |_) | (_) | |_ +| |___| (_) | | | | | | | | | | | __/ | | | |_ | |_) | (_) | |_ \\_____\\___/|_| |_| |_|_| |_| |_|\\___|_| |_|\\__| |____/ \\___/ \\__|`, -` _|_|_| _| _|_|_| _| -_| _|_| _|_|_| _|_| _|_|_| _|_| _|_| _|_|_| _|_|_|_| _| _| _|_| _|_|_|_| -_| _| _| _| _| _| _| _| _| _|_|_|_| _| _| _| _|_|_| _| _| _| -_| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| +` _|_|_| _| _|_|_| _| +_| _|_| _|_|_| _|_| _|_|_| _|_| _|_| _|_|_| _|_|_|_| _| _| _|_| _|_|_|_| +_| _| _| _| _| _| _| _| _| _|_|_|_| _| _| _| _|_|_| _| _| _| +_| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _| _|_|_| _|_| _| _| _| _| _| _| _|_|_| _| _| _|_| _|_|_| _|_| _|_| `, -` .---. .----. .-. .-..-. .-..----..-. .-. .---. .----. .----. .---. +` .---. .----. .-. .-..-. .-..----..-. .-. .---. .----. .----. .---. / ___}/ {} \\| \`.\' || \`.\' || {_ | \`| |{_ _} | {} }/ {} \\{_ _} -\\ }\\ /| |\\ /| || |\\ /| || {__ | |\\ | | | | {} }\\ / | | +\\ }\\ /| |\\ /| || |\\ /| || {__ | |\\ | | | | {} }\\ / | | \`---' \`----' \`-' \` \`-'\`-' \` \`-'\`----'\`-' \`-' \`-' \`----' \`----' \`-' `, -` _____ _ _____ _ -| |___ _____ _____ ___ ___| |_ | __ |___| |_ +` _____ _ _____ _ +| |___ _____ _____ ___ ___| |_ | __ |___| |_ | --| . | | | -_| | _| | __ -| . | _| |_____|___|_|_|_|_|_|_|___|_|_|_| |_____|___|_| `, -` ______ _ ______ _ - .' ___ | / |_ |_ _ \\ / |_ -/ .' \\_| .--. _ .--..--. _ .--..--. .---. _ .--. \`| |-' | |_) | .--. \`| |-' -| | / .'\`\\ \\[ \`.-. .-. | [ \`.-. .-. |/ /__\\\\[ \`.-. | | | | __'. / .'\`\\ \\| | -\\ \`.___.'\\| \\__. | | | | | | | | | | | | || \\__., | | | | | |, _| |__) || \\__. || |, +` ______ _ ______ _ + .' ___ | / |_ |_ _ \\ / |_ +/ .' \\_| .--. _ .--..--. _ .--..--. .---. _ .--. \`| |-' | |_) | .--. \`| |-' +| | / .'\`\\ \\[ \`.-. .-. | [ \`.-. .-. |/ /__\\\\[ \`.-. | | | | __'. / .'\`\\ \\| | +\\ \`.___.'\\| \\__. | | | | | | | | | | | | || \\__., | | | | | |, _| |__) || \\__. || |, \`.____ .' '.__.' [___||__||__][___||__||__]'.__.'[___||__]\\__/ |_______/ '.__.' \\__/ `, -` ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ +` ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░▌ ▐░░▌▐░░▌ ▐░░▌▐░░░░░░░░░░░▌▐░░▌ ▐░▌▐░░░░░░░░░░░▌ ▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌ -▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░▌░▌ ▐░▐░▌▐░▌░▌ ▐░▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░▌░▌ ▐░▌ ▀▀▀▀█░█▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌ ▀▀▀▀█░█▀▀▀▀ -▐░▌ ▐░▌ ▐░▌▐░▌▐░▌ ▐░▌▐░▌▐░▌▐░▌ ▐░▌▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ -▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▐░▌ ▐░▌▐░▌ ▐░▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌ ▐░▌ -▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░▌ -▐░▌ ▐░▌ ▐░▌▐░▌ ▀ ▐░▌▐░▌ ▀ ▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░█▀▀▀▀▀▀▀█░▌▐░▌ ▐░▌ ▐░▌ -▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ -▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌ ▐░▌ -▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░░▌ ▐░▌ ▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌ ▐░▌ +▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░▌░▌ ▐░▐░▌▐░▌░▌ ▐░▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░▌░▌ ▐░▌ ▀▀▀▀█░█▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌ ▀▀▀▀█░█▀▀▀▀ +▐░▌ ▐░▌ ▐░▌▐░▌▐░▌ ▐░▌▐░▌▐░▌▐░▌ ▐░▌▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ +▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▐░▌ ▐░▌▐░▌ ▐░▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌ ▐░▌ +▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░▌ +▐░▌ ▐░▌ ▐░▌▐░▌ ▀ ▐░▌▐░▌ ▀ ▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░█▀▀▀▀▀▀▀█░▌▐░▌ ▐░▌ ▐░▌ +▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ +▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌ ▐░▌ +▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░░▌ ▐░▌ ▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌ ▐░▌ ▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ `, -` ▄▀▄▄▄▄ ▄▀▀▀▀▄ ▄▀▀▄ ▄▀▄ ▄▀▀▄ ▄▀▄ ▄▀▀█▄▄▄▄ ▄▀▀▄ ▀▄ ▄▀▀▀█▀▀▄ ▄▀▀█▄▄ ▄▀▀▀▀▄ ▄▀▀▀█▀▀▄ -█ █ ▌ █ █ █ █ ▀ █ █ █ ▀ █ ▐ ▄▀ ▐ █ █ █ █ █ █ ▐ ▐ ▄▀ █ █ █ █ █ ▐ -▐ █ █ █ ▐ █ █ ▐ █ █ █▄▄▄▄▄ ▐ █ ▀█ ▐ █ █▄▄▄▀ █ █ ▐ █ - █ ▀▄ ▄▀ █ █ █ █ █ ▌ █ █ █ █ █ ▀▄ ▄▀ █ - ▄▀▄▄▄▄▀ ▀▀▀▀ ▄▀ ▄▀ ▄▀ ▄▀ ▄▀▄▄▄▄ ▄▀ █ ▄▀ ▄▀▄▄▄▀ ▀▀▀▀ ▄▀ -█ ▐ █ █ █ █ █ ▐ █ ▐ █ █ ▐ █ +` ▄▀▄▄▄▄ ▄▀▀▀▀▄ ▄▀▀▄ ▄▀▄ ▄▀▀▄ ▄▀▄ ▄▀▀█▄▄▄▄ ▄▀▀▄ ▀▄ ▄▀▀▀█▀▀▄ ▄▀▀█▄▄ ▄▀▀▀▀▄ ▄▀▀▀█▀▀▄ +█ █ ▌ █ █ █ █ ▀ █ █ █ ▀ █ ▐ ▄▀ ▐ █ █ █ █ █ █ ▐ ▐ ▄▀ █ █ █ █ █ ▐ +▐ █ █ █ ▐ █ █ ▐ █ █ █▄▄▄▄▄ ▐ █ ▀█ ▐ █ █▄▄▄▀ █ █ ▐ █ + █ ▀▄ ▄▀ █ █ █ █ █ ▌ █ █ █ █ █ ▀▄ ▄▀ █ + ▄▀▄▄▄▄▀ ▀▀▀▀ ▄▀ ▄▀ ▄▀ ▄▀ ▄▀▄▄▄▄ ▄▀ █ ▄▀ ▄▀▄▄▄▀ ▀▀▀▀ ▄▀ +█ ▐ █ █ █ █ █ ▐ █ ▐ █ █ ▐ █ ▐ ▐ ▐ ▐ ▐ ▐ ▐ ▐ ▐ ▐ `, -` ___ . ____ . -.' \\ __. , _ , _ , _ , _ ___ , __ _/_ / \\ __. _/_ -| .' \\ |' \`|' \`. |' \`|' \`. .' \` |' \`. | |,_-< .' \\ | -| | | | | | | | | |----' | | | | \` | | | +` ___ . ____ . +.' \\ __. , _ , _ , _ , _ ___ , __ _/_ / \\ __. _/_ +| .' \\ |' \`|' \`. |' \`|' \`. .' \` |' \`. | |,_-< .' \\ | +| | | | | | | | | |----' | | | | \` | | | \`.__, \`._.' / ' / / ' / \`.___, / | \\__/ \`----' \`._.' \\__/`, ` _______ _____ _______ _______ _______ __ _ _______ ______ _____ _______ - | | | | | | | | | |______ | \\ | | |_____] | | | + | | | | | | | | | |______ | \\ | | |_____] | | | |_____ |_____| | | | | | | |______ | \\_| | |_____] |_____| | `, ` ___ ___ ___ ___ ___ ___ ____ __ __ ______ ____ ___ ______ // // \\\\ ||\\\\//|| ||\\\\//|| || ||\\ || | || | || )) // \\\\ | || | -(( (( )) || \\/ || || \\/ || ||== ||\\\\|| || ||=) (( )) || - \\\\__ \\\\_// || || || || ||___ || \\|| || ||_)) \\\\_// || `] \ No newline at end of file +(( (( )) || \\/ || || \\/ || ||== ||\\\\|| || ||=) (( )) || + \\\\__ \\\\_// || || || || ||___ || \\|| || ||_)) \\\\_// || `] diff --git a/src/data/data.json b/src/data/data.json index 024101b1..f0e62fe7 100644 --- a/src/data/data.json +++ b/src/data/data.json @@ -1,6 +1,6 @@ { - "version": "21400", - "versionstr": "2.14.0", + "version": "21401", + "versionstr": "2.14.1", "branch": "master", "filetostart": "./src/starter.js", "filetostarturl": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/master/src/starter.js", @@ -8,7 +8,7 @@ "aboutstr": "This bot was created by 3urobeat.\nGitHub: https://github.com/3urobeat/steam-comment-service-bot \nSteam: https://steamcommunity.com/id/3urobeat \nIf you like my work, any donation would be appreciated! https://github.com/sponsors/3urobeat", "firststart": true, "compatibilityfeaturedone": false, - "whatsnew": "Added support for commenting in discussions, following users/workshops/curators and setting specific games per account. Added a relogging system with proxy switching support, a multi-language system, fixed a lot of bugs and more. Read the full release notes on GitHub!", + "whatsnew": "Fixed a bunch of bugs and made a few minor improvements, for more details read the release notes on GitHub.", "timesloggedin": 0, "totallogintime": 0 -} \ No newline at end of file +} diff --git a/src/data/fileStructure.json b/src/data/fileStructure.json index 7c9e53dc..621590ff 100644 --- a/src/data/fileStructure.json +++ b/src/data/fileStructure.json @@ -3,7 +3,7 @@ { "path": ".eslintrc.json", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/.eslintrc.json", - "checksum": "c720367ec1727b2d3af2c42c495d0865" + "checksum": "982f55cc4c53137135b87df43bbfe9c8" }, { "path": ".github/FUNDING.yml", @@ -53,7 +53,7 @@ { "path": "README.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/README.md", - "checksum": "400ce1d775f3786989e41d968b8e7295" + "checksum": "1c634a89128ad04be9e9907ec88c1f0f" }, { "path": "docs/dev/README.md", @@ -63,7 +63,7 @@ { "path": "docs/dev/bot/bot.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/dev/bot/bot.md", - "checksum": "cb6e6d58e0e779126c26575540d9f43b" + "checksum": "7070464e4d00d676ce5b1ac5647ad503" }, { "path": "docs/dev/bot/events.md", @@ -93,7 +93,7 @@ { "path": "docs/dev/dataManager/dataManager.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/dev/dataManager/dataManager.md", - "checksum": "99f5cc5569781f8d8447a81e089402b1" + "checksum": "59fc158f4af273360ae91c4b69ba4e40" }, { "path": "docs/dev/introduction.md", @@ -178,7 +178,7 @@ { "path": "docs/wiki/changelogs/CHANGELOG_v2.14.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/wiki/changelogs/CHANGELOG_v2.14.md", - "checksum": "994078e01b7dba9748f597e7969935b3" + "checksum": "19dd048eb9cf59b294038e49eec788e8" }, { "path": "docs/wiki/changelogs/CHANGELOG_v2.2.md", @@ -228,7 +228,7 @@ { "path": "docs/wiki/config_doc.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/wiki/config_doc.md", - "checksum": "aa90b71640a8950d2e12fd39c015f5ea" + "checksum": "846b5f9f8451895a3c5b013239051497" }, { "path": "docs/wiki/contributing.md", @@ -263,7 +263,7 @@ { "path": "docs/wiki/setup_guide.md", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/wiki/setup_guide.md", - "checksum": "ec0468f2883394a8f059b74377808dd4" + "checksum": "1d613ba3d473233be385938090306010" }, { "path": "docs/wiki/steam_limitations.md", @@ -275,15 +275,10 @@ "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/docs/wiki/version_changelogs.md", "checksum": "41b3dd13d210e3d1196727eae8b31802" }, - { - "path": "package-lock.json", - "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/package-lock.json", - "checksum": "db7cdd56a8392cdf6fef204a219efb1f" - }, { "path": "package.json", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/package.json", - "checksum": "5d0abc6d4dd621aaa67b4adb1c49d4b2" + "checksum": "dbba3b2ff3a3a88733b9079f9fbd27c4" }, { "path": "scripts/README.md", @@ -293,342 +288,342 @@ { "path": "scripts/checkTranslationKeys.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/scripts/checkTranslationKeys.js", - "checksum": "b1249b82bd312cff9cd78c4bf7ed871d" + "checksum": "7c100ee6a3e88a657fbb02ae1a5717fc" }, { "path": "scripts/generateFileStructure.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/scripts/generateFileStructure.js", - "checksum": "cd95c47ae5b169d7ad0fa59074736e92" + "checksum": "ff69746274fcff8317dd610d0169a2e1" }, { "path": "scripts/langStringsChangeDetector.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/scripts/langStringsChangeDetector.js", - "checksum": "032e423242c502d5aa9281f47e33d14b" + "checksum": "94481e3c20d91c1fb37e8de4d0a4c688" }, { "path": "src/bot/EStatus.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/EStatus.js", - "checksum": "70f1dcd89d9cfb06fe95fd14af5c932b" + "checksum": "0a226a437dec1e418ca620458b014bcf" }, { "path": "src/bot/bot.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/bot.js", - "checksum": "9c696caf975f0362c57ffac73a522665" + "checksum": "c890207fe8d9b583be998e720e2d7340" }, { "path": "src/bot/events/debug.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/debug.js", - "checksum": "f464a1f981aa889138a7461c8adb5053" + "checksum": "701782dfea0c1c1d0feebb0c559ba60d" }, { "path": "src/bot/events/disconnected.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/disconnected.js", - "checksum": "df91bbc7cb99e19b0263caf705f37277" + "checksum": "38cf0c4ac7164d5cb902b65d287b902d" }, { "path": "src/bot/events/error.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/error.js", - "checksum": "0e11ff92d7b261c63ce56c65263b37fe" + "checksum": "179db7fd03f7a3cb7d9d9a352c940951" }, { "path": "src/bot/events/friendMessage.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/friendMessage.js", - "checksum": "662a8e4e64ca270f0efcbb688fb517ed" + "checksum": "c2e3dfe0487e2a3f06f29cdb28aa466d" }, { "path": "src/bot/events/loggedOn.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/loggedOn.js", - "checksum": "034a7e300486ba09afc59cd0e2b52d6b" + "checksum": "2d308b00408cde95cfc505e3c56f2e34" }, { "path": "src/bot/events/relationship.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/relationship.js", - "checksum": "c59e096971df409c17b07cf25c2ed167" + "checksum": "43b72701a9f85addc5564d21e15b95f3" }, { "path": "src/bot/events/webSession.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/events/webSession.js", - "checksum": "5ee6dbedbfbdb48981a0a87ae45fc31e" + "checksum": "cbe4ed7443ee4224fcdc94772c09bf5b" }, { "path": "src/bot/helpers/checkMsgBlock.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/helpers/checkMsgBlock.js", - "checksum": "12c1bb15717c09e15e91594dde46c44c" + "checksum": "a0c61d670db59f0e9dbc520178e38d6b" }, { "path": "src/bot/helpers/handleLoginTimeout.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/helpers/handleLoginTimeout.js", - "checksum": "08d684f7e3ea347fdd31a88e94aa461b" + "checksum": "fea372324447e5f9d16635295590aa39" }, { "path": "src/bot/helpers/handleMissingGameLicenses.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/helpers/handleMissingGameLicenses.js", - "checksum": "841bf2256855624b39a5370a67c09bc0" + "checksum": "972d35acb19963f5dd6519e3393ebd57" }, { "path": "src/bot/helpers/handleRelog.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/helpers/handleRelog.js", - "checksum": "a2412b836b5b1f1d904b53b65ebad3c0" + "checksum": "05712aba973391541848a6940b0de537" }, { "path": "src/bot/helpers/steamChatInteraction.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/bot/helpers/steamChatInteraction.js", - "checksum": "8fb070e6107bf3dc30f1655f555ab986" + "checksum": "f4d02006edf18f13699ef0b729cfe3d6" }, { "path": "src/commands/commandHandler.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/commandHandler.js", - "checksum": "106babe27b983ea4323ef749e34567bf" + "checksum": "f8121a8971aa90a7a23d985275082276" }, { "path": "src/commands/core/block.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/block.js", - "checksum": "3bc4016e65ec6d05115a94690cbfa9cf" + "checksum": "c8faefabe22526fee5443c0498199a93" }, { "path": "src/commands/core/comment.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/comment.js", - "checksum": "17a0106bd432bd48bb3fe4b31f0b45d1" + "checksum": "306bd429a323f88c659026174b07a5bb" }, { "path": "src/commands/core/favorite.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/favorite.js", - "checksum": "c04d5a5108404fe2c553ef1ebf9615bf" + "checksum": "0ff00460dff9ed1465fd69186839fbc0" }, { "path": "src/commands/core/follow.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/follow.js", - "checksum": "fc00572ec05fce0040ee0eb518e8fa1d" + "checksum": "0f58f7eb6fda41603dc523f3c841b525" }, { "path": "src/commands/core/friend.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/friend.js", - "checksum": "d8bd04d6886e7bacba67398ef399f956" + "checksum": "732cf0f2b83ff2e59133e9406052e72c" }, { "path": "src/commands/core/general.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/general.js", - "checksum": "e030175359d73498f73d4d5853670a98" + "checksum": "20c4d31d3de9cfa8aa91dae5de383bf4" }, { "path": "src/commands/core/group.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/group.js", - "checksum": "a8ff4e7451d846612be0b7cb0844d0ac" + "checksum": "a952ab3fae5ebd4fb7c6c1c01a520888" }, { "path": "src/commands/core/requests.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/requests.js", - "checksum": "18c4250b933248e4f720d7b26e290194" + "checksum": "1dbee24aa1241dfe9068f55776de6180" }, { "path": "src/commands/core/settings.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/settings.js", - "checksum": "dd9920d634a6e16ec557c481709eb8cb" + "checksum": "556c368995dfc46f1407dac4b97503d7" }, { "path": "src/commands/core/system.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/system.js", - "checksum": "8ff8780ee9d53d8aa7a2e582cc34817a" + "checksum": "2595f8390e934c80803197f32cd022ca" }, { "path": "src/commands/core/vote.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/core/vote.js", - "checksum": "c5f08b08c385d58c36040c3c94c7bdd8" + "checksum": "63849381edf672f9a3ae6eed39528773" }, { "path": "src/commands/helpers/getCommentArgs.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getCommentArgs.js", - "checksum": "3172adbc009ed93fcc42edb0582d7636" + "checksum": "430c20fdd211806b73c06668fc1cc0ab" }, { "path": "src/commands/helpers/getCommentBots.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getCommentBots.js", - "checksum": "eab2934e073186ad6e84ea8c3b1070d1" + "checksum": "5c0537846a858cfc79754dbfac1c1890" }, { "path": "src/commands/helpers/getFavoriteBots.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getFavoriteBots.js", - "checksum": "448123c44d0cad61817147848471e60b" + "checksum": "93d8d331be02808c8b4c008428e01529" }, { "path": "src/commands/helpers/getFollowArgs.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getFollowArgs.js", - "checksum": "0b6c69516ccd3252150e0c43dd5d7478" + "checksum": "e50be65b1eb493ef9e4604fcdf6b3482" }, { "path": "src/commands/helpers/getFollowBots.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getFollowBots.js", - "checksum": "8c6114bda954ef4b607cb3d5e2cda291" + "checksum": "0da28b42152314fe118120f15743b38a" }, { "path": "src/commands/helpers/getSharedfileArgs.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getSharedfileArgs.js", - "checksum": "62b349a43320987dbad52582c662d27a" + "checksum": "0ed99e47ef7e33f8c6769faf978b2f53" }, { "path": "src/commands/helpers/getVoteBots.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/getVoteBots.js", - "checksum": "05693ef2a455eb2f6cd631e728b66506" + "checksum": "1617d4324e49a44d2676d76b5a230d8e" }, { "path": "src/commands/helpers/handleCommentSkips.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/handleCommentSkips.js", - "checksum": "e655f536e02eb5d49258a175965f103c" + "checksum": "8279c8a9a1d624f2212050b5b98cbca2" }, { "path": "src/commands/helpers/handleFollowErrors.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/handleFollowErrors.js", - "checksum": "04b3bd7ca1886a82e188e9f79d650d54" + "checksum": "18054a4221e795a8c5530b5a55a014ae" }, { "path": "src/commands/helpers/handleSharedfileErrors.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/commands/helpers/handleSharedfileErrors.js", - "checksum": "f465cd711557a8ce0d5790a969aca793" + "checksum": "dcc7fe481a253191a3c215cdbc79240b" }, { "path": "src/controller/controller.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/controller.js", - "checksum": "3bc947b3df33b319add4c339e3f15a52" + "checksum": "d9f7edc22f1423165c4356004ddf6541" }, { "path": "src/controller/events/ready.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/events/ready.js", - "checksum": "de676915caebd1104ad694fa5e558171" + "checksum": "08816486d7ac88c60a60a8b31a557961" }, { "path": "src/controller/events/statusUpdate.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/events/statusUpdate.js", - "checksum": "9b69dfb942a73cd5c794f685af8e05af" + "checksum": "3fde1416ed5eaed0e74d3777477459a7" }, { "path": "src/controller/events/steamGuardInput.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/events/steamGuardInput.js", - "checksum": "dd3dbf7cbc552d46fb93e019d6a5184d" + "checksum": "df33797c6bf867a52adb5d7e39315e73" }, { "path": "src/controller/helpers/friendlist.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/friendlist.js", - "checksum": "115150407cf054d506eef7831e89022b" + "checksum": "4c63ef25e986890ece07f01d61d40faa" }, { "path": "src/controller/helpers/getBots.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/getBots.js", - "checksum": "f9239fdf6c149cedc79148e7a61dad41" + "checksum": "8a9769dcbf0beee3a81ace326ae5a2f0" }, { "path": "src/controller/helpers/handleErrors.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/handleErrors.js", - "checksum": "fbc07b473a36678f1efa80c0599ecb44" + "checksum": "5254f26c41c0824f399ab596cc691bc0" }, { "path": "src/controller/helpers/handleSteamIdResolving.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/handleSteamIdResolving.js", - "checksum": "e47fcc3f44e859835b8a9f7a332972eb" + "checksum": "6e5b20ebe630b88821bafaf38b020141" }, { "path": "src/controller/helpers/logger.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/logger.js", - "checksum": "fe031f28b56d5bad03ae3fdfdea7b75b" + "checksum": "d76294cfed2ebe6a03d3ab79815316a6" }, { "path": "src/controller/helpers/misc.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/misc.js", - "checksum": "af5f340609cdb8674df993e23b505c84" + "checksum": "9c67eb0be1e14576747ebec6a7267d9b" }, { "path": "src/controller/helpers/npminteraction.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/helpers/npminteraction.js", - "checksum": "7ffd76e47873baf32b9ae7f0a94e672a" + "checksum": "924edbaeb88926e0d466c74434ff1996" }, { "path": "src/controller/login.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/controller/login.js", - "checksum": "05987c04879a38d7e91f7a5edacd2084" + "checksum": "ea8f1c4b4435493ca1cd3c59eab28dbe" }, { "path": "src/data/ascii.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/data/ascii.js", - "checksum": "224d7d7d0aba4f32819838d19b4b8caf" + "checksum": "f3e6ac270923895a787d68bf96f0c0ce" }, { "path": "src/data/lang/english.json", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/data/lang/english.json", - "checksum": "609fb752852f8401ba5972668b74aa3c" + "checksum": "fdfdd40f94119931dfb91a65736b9c5d" }, { "path": "src/data/lang/russian.json", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/data/lang/russian.json", - "checksum": "44c2754b505bd61026848a9d4a09cbff" + "checksum": "878ca00a385d91db0ab9b644c3101512" }, { "path": "src/dataManager/dataCheck.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataCheck.js", - "checksum": "b5828e6f9ddfa5c042a5cbd282a34aa9" + "checksum": "ff7434e04ff818c76a7397d348c9ef9a" }, { "path": "src/dataManager/dataExport.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataExport.js", - "checksum": "40fc7a96f0c6052bd94c04fc11776fac" + "checksum": "2d82e0053f351a7d6c7fa854909a3dba" }, { "path": "src/dataManager/dataImport.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataImport.js", - "checksum": "ce6267ece2a38897e40a5ce64c9dd00b" + "checksum": "8a450cbc455fbef8eb6298820f5588ee" }, { "path": "src/dataManager/dataIntegrity.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataIntegrity.js", - "checksum": "24e166de510b5c3d85b3351f7da68713" + "checksum": "48cb100ddf80bc4dd1b8abf963219d78" }, { "path": "src/dataManager/dataManager.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataManager.js", - "checksum": "b5b8f046cb80752b54c01005b62ec078" + "checksum": "6aae5ec364eac7e03a66ab5f87cb973f" }, { "path": "src/dataManager/dataProcessing.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/dataProcessing.js", - "checksum": "e3927776806e2df7cda77eace731232d" + "checksum": "af2612047ec965f8531699cc287bf2c3" }, { "path": "src/dataManager/helpers/checkProxies.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/checkProxies.js", - "checksum": "3bc2af113f042ae303dc2f9de2db199c" + "checksum": "357670340be40f10eb1692a1f001881f" }, { "path": "src/dataManager/helpers/getLang.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/getLang.js", - "checksum": "cfd94dad095b3eb3fe7b879643ac6a54" + "checksum": "5f5ce750442ab1411544ddbedb03d2b7" }, { "path": "src/dataManager/helpers/getQuote.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/getQuote.js", - "checksum": "5290d6405e9280f22013e7d9ff935a88" + "checksum": "7b626a62ea9d40a524b4616d01b8fd97" }, { "path": "src/dataManager/helpers/handleCooldowns.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/handleCooldowns.js", - "checksum": "078a375e1fd1ee91c76a4d76de34d16c" + "checksum": "9b35a82aa2b29e9e8d566db0d406b13a" }, { "path": "src/dataManager/helpers/handleExpiringTokens.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/handleExpiringTokens.js", - "checksum": "7dcd29cf3d3e6ed985d636615248a4f9" + "checksum": "e8a6a11da0ff9f9e39856cc822bba3f5" }, { "path": "src/dataManager/helpers/misc.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/misc.js", - "checksum": "19a6b14ff0c46f18c0fb72ecbdb2b37d" + "checksum": "32544368771121102a46f2a75c3f5f41" }, { "path": "src/dataManager/helpers/refreshCache.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/refreshCache.js", - "checksum": "f9530c810fa48d6601a1295f5519adb3" + "checksum": "acb6ae61becdfe4613d2387f4660f8f5" }, { "path": "src/dataManager/helpers/repairFile.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/dataManager/helpers/repairFile.js", - "checksum": "775e0befcf862abe0d8b935b344542fa" + "checksum": "283942ba224a393abde0980f7ab3ef63" }, { "path": "src/libraryPatches/CSteamDiscussion.js", @@ -668,147 +663,147 @@ { "path": "src/pluginSystem/handlePluginData.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/pluginSystem/handlePluginData.js", - "checksum": "ae241fda64252cee0afd36c2f3268903" + "checksum": "c580d836d41f1fc4da1389d9c52242b9" }, { "path": "src/pluginSystem/loadPlugins.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/pluginSystem/loadPlugins.js", - "checksum": "683f03c09451de7a9ef93b8d37996a98" + "checksum": "eaadc56645b916db9cb59008388cefb4" }, { "path": "src/pluginSystem/pluginSystem.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/pluginSystem/pluginSystem.js", - "checksum": "69c2ae86e0509f67daecdd0ee8953ecf" + "checksum": "9c2a5ce9e09d8e522e32d02004f909e8" }, { "path": "src/sessions/events/sessionEvents.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/sessions/events/sessionEvents.js", - "checksum": "88c4ee8faab2d785b1943dbdeda8ac9d" + "checksum": "154d157d344f48a24fe86fec2feef611" }, { "path": "src/sessions/helpers/handle2FA.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/sessions/helpers/handle2FA.js", - "checksum": "649d4f56aea9ba9042e9ab626a1f436c" + "checksum": "3fd6447478a9ff8959f08ba5d184ae3b" }, { "path": "src/sessions/helpers/handleCredentialsLoginError.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/sessions/helpers/handleCredentialsLoginError.js", - "checksum": "5a74b41057e2c269d1f8e251eb31ea8f" + "checksum": "09cb820d026ab9a2effa154338d3af98" }, { "path": "src/sessions/helpers/tokenStorageHandler.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/sessions/helpers/tokenStorageHandler.js", - "checksum": "b613b839ad476c6bc67d90904ed32a0c" + "checksum": "a10a7b59786805c59caacb1175347154" }, { "path": "src/sessions/sessionHandler.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/sessions/sessionHandler.js", - "checksum": "5fc33e7e7dc1ae8af292d129cd77d486" + "checksum": "1a28551f54c241c696d70ac66c070057" }, { "path": "src/starter.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/starter.js", - "checksum": "2a54dbf7a601a91b65b3db55e81ece7c" + "checksum": "b106db2dbc61e544e8f1eb37cba99d69" }, { "path": "src/updater/compatibility/2060.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2060.js", - "checksum": "1f75b416d4795c4533400f25acd41d93" + "checksum": "514238153f1c27b03fbc825370f25ef8" }, { "path": "src/updater/compatibility/2070.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2070.js", - "checksum": "65338b222f5a366251ad58bf1c7d15b3" + "checksum": "3dd17a2b268909673a7bfd706a879aaa" }, { "path": "src/updater/compatibility/2080.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2080.js", - "checksum": "b7613953b7a5e8854ba29ab8936fecd7" + "checksum": "8f56ff06cc0ef5a8aee6e3eb01abb5d9" }, { "path": "src/updater/compatibility/2100.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2100.js", - "checksum": "d9b1324e4253d4dc62baf25612376501" + "checksum": "be525b44dab67d30832a5e7b9a219a09" }, { "path": "src/updater/compatibility/2103.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2103.js", - "checksum": "62308e61461f6b9bd2c1689fe6f35962" + "checksum": "abf1e687bc94ae784406da1aa56a0a8c" }, { "path": "src/updater/compatibility/2104.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/2104.js", - "checksum": "9e00bc6b65df8fa30b0b75ef8a5d5835" + "checksum": "0e52117c2a3c2a8d854de384d4a94722" }, { "path": "src/updater/compatibility/21100.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/21100.js", - "checksum": "50e5f5aa9cd297a2251ff2853b51e36f" + "checksum": "3bb4455ad0a9ab426cd34cf5536c03aa" }, { "path": "src/updater/compatibility/21200.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/21200.js", - "checksum": "faf0ddc2b7d0453c0998fe47a40cffca" + "checksum": "41a0f507b86b1f4afa7cc99eff44b6cf" }, { "path": "src/updater/compatibility/21300.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/21300.js", - "checksum": "033c91364f191758b8b55b9ac15825b5" + "checksum": "e2e86c05da9fc16db4e91d63a5176576" }, { "path": "src/updater/compatibility/21400.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility/21400.js", - "checksum": "eb3f572a93c5a4163a3fbd5bfa42054c" + "checksum": "b6040d97f7a09ad5e6fc91167e486e4b" }, { "path": "src/updater/compatibility.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/compatibility.js", - "checksum": "4a7a25a98c8ecc45488ca4e503295d5d" + "checksum": "b8a36866188ae4304dfbcb4ebe8f3d80" }, { "path": "src/updater/helpers/checkForUpdate.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/checkForUpdate.js", - "checksum": "e076828239bdafa56e6d15ec0a459c42" + "checksum": "240bcc17d4c2019006184942b9a53169" }, { "path": "src/updater/helpers/createBackup.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/createBackup.js", - "checksum": "bb861304088be3a6261a33c5c17ebb63" + "checksum": "d767af9c5ae397bdfa7b386c2e4e49eb" }, { "path": "src/updater/helpers/customUpdateRules.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/customUpdateRules.js", - "checksum": "f11376db8f60880a9e92755fc6477dce" + "checksum": "2148b6eb0164503c3d0b4adbe8bfe757" }, { "path": "src/updater/helpers/downloadUpdate.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/downloadUpdate.js", - "checksum": "429959acf0bcbcda2b35b78f723c0e3d" + "checksum": "9be735b19ef5b1e73df74cae8c4fedc4" }, { "path": "src/updater/helpers/prepareUpdate.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/prepareUpdate.js", - "checksum": "966fe663568e3cac9af4f3f770f4b690" + "checksum": "eea0c957cfb4f73c15a0fdd78f6e9a68" }, { "path": "src/updater/helpers/restoreBackup.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/helpers/restoreBackup.js", - "checksum": "4b2f7486bac2595ba9b4669d902a7bdf" + "checksum": "02224a065b6b3cf13558e13c487511a3" }, { "path": "src/updater/updater.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/src/updater/updater.js", - "checksum": "76bb596b8ed3a050d07286a568b1590b" + "checksum": "9be1690b21717fd96f69c7dfbe02dc8f" }, { "path": "start.js", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/start.js", - "checksum": "351e75059b7221227c899256ef706de1" + "checksum": "afc9710e045984455ca0936fec484f1a" }, { "path": "types/types.d.ts", "url": "https://raw.githubusercontent.com/3urobeat/steam-comment-service-bot/beta-testing/types/types.d.ts", - "checksum": "9f2514ea4fcc1b47ba530b743e075444" + "checksum": "52f40a0f2dd86e0cbceb5d58f979eb6d" } ] } \ No newline at end of file diff --git a/src/data/lang/english.json b/src/data/lang/english.json index d0aee007..7680e140 100644 --- a/src/data/lang/english.json +++ b/src/data/lang/english.json @@ -23,7 +23,7 @@ "commenterroroccurred": "Oops, an error occurred! I sadly wasn't able to comment.", "commentprocessstarted": "Estimated wait time for ${numberOfComments} comments: ${waittime}.", "commentfailedcmdreference": "To get detailed information why which comment failed please type '${cmdprefix}failed'. You can read what probably caused your error here: https://github.com/3urobeat/steam-comment-service-bot/blob/master/docs/wiki/errors_doc.md", - + "comment429stop": "Stopped comment process because all proxies had a HTTP 429 (IP cooldown) error. Please try again later. Failed: ${failedamount}/${numberOfComments}", "commentretrying": "${failedamount}/${numberOfComments} comments have failed. I'm going to retry the failed comments in untilStr. (Attempt ${thisattempt}/${maxattempt})", "commentsuccess": "All comments have been sent. Failed: ${failedamount}/${numberOfComments}\nIf you are a nice person then please comment on my profile too!", @@ -109,7 +109,7 @@ "settingscmdvaluereset": "The DataManager rejected this change with this warning:", "settingscmdvaluechanged": "${targetkey} has been changed from ${oldvalue} to ${newvalue}.\nPlease remember that certain values might need a restart to take effect. You can do that by typing ${cmdprefix}restart.", - "failedcmdnothingfound": "I can't remember any failed comments on your/that ID.\nIf you requested comments for another profile, group, sharedfile or discussion then please provide that ID/URL as argument!", + "failedcmdnothingfound": "I can't remember any failed interactions on your/that ID.\nIf you requested something for another profile, group, sharedfile or discussion then please provide that ID/URL as argument!", "failedcmdmsg": "Your last request for '${steamID64}' finished at '${requesttime}' (GMT time) had these errors:", "sessionscmdnosessions": "There are currently no active sessions and no bot accounts on cooldown.", @@ -140,4 +140,4 @@ "evalcmdlogininfoblock": "Your code includes 'logininfo'. In order to protect passwords this is not allowed.", "childbotmessage": "This is one account running in a bot cluster.\nPlease add the main bot and send him a ${cmdprefix}help message.\nIf you want to check out what this is about, type: ${cmdprefix}about\nThis is the main bot account:" -} \ No newline at end of file +} diff --git a/src/data/lang/russian.json b/src/data/lang/russian.json index 6e1c193f..d15c743e 100644 --- a/src/data/lang/russian.json +++ b/src/data/lang/russian.json @@ -23,7 +23,7 @@ "commenterroroccurred": "Опаньки, произошла ошибка! К сожалению, я не смог её прокомментировать.", "commentprocessstarted": "Примерное время ожидания для ${numberOfComments} комментариев: ${waittime}.", "commentfailedcmdreference": "Чтобы получить подробную информацию о том, почему комментарий не сработал, введите «${cmdprefix}failed». Вы можете прочитать, что, вероятно, вызвало вашу ошибку, здесь: https://github.com/3urobeat/steam-comment-service-bot/blob/master/docs/wiki/errors_doc.md", - + "comment429stop": "Остановлен процесс комментирования, поскольку все прокси-серверы выдали ошибку HTTP 429 (восстановление IP). Пожалуйста, повторите попытку позже. Не удалось: ${failedamount}/${numberOfComments}", "commentretrying": "${failedamount}/${numberOfComments} комментариев были неудачными. Я собираюсь повторить попытку неудачных комментариев в untilStr. (Попытка ${thisattempt}/${maxattempt})", "commentsuccess": "Все комментарии были отправлены. Не удалось: ${failedamount}/${numberOfComments}\nЕсли вы хороший человек, то, пожалуйста, прокомментируйте и мой профиль!", @@ -109,7 +109,7 @@ "settingscmdvaluereset": "DataManager отклонил это изменение со следующим предупреждением:", "settingscmdvaluechanged": "${targetkey} был изменен со ${oldvalue} на ${newvalue}.\nПомните, что для вступления в силу некоторых значений может потребоваться перезапуск. Вы можете сделать это, введя ${cmdprefix}restart.", - "failedcmdnothingfound": "Я не могу вспомнить ни одного неудачного комментария на вашем/этом ID.\nЕсли вы запрашивали комментарии для другого профиля, группы, общего файла или обсуждения, пожалуйста, укажите этот ID/URL в качестве аргумента!", + "failedcmdnothingfound": "Я не могу вспомнить ни одного неудачного взаимодействия на вашем/этом ID.\nЕсли вы запрашивали что-то для другого профиля, группы, общего файла или обсуждения, пожалуйста, укажите этот ID/URL в качестве аргумента!", "failedcmdmsg": "Ваш последний запрос «${steamID64}», выполненный в «${requesttime}» (время GMT), содержал эти ошибки:", "sessionscmdnosessions": "В настоящее время нет активных сессий и нет бот-аккаунтов в режиме ожидания.", diff --git a/src/dataManager/dataCheck.js b/src/dataManager/dataCheck.js index 57b83df5..b597647a 100644 --- a/src/dataManager/dataCheck.js +++ b/src/dataManager/dataCheck.js @@ -1,10 +1,10 @@ /* * File: dataCheck.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:55:46 + * Last Modified: 2023-12-27 14:13:04 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -166,4 +166,4 @@ DataManager.prototype.checkData = function() { logger("debug", "DataManager checkData(): All checks ran successfully! Resolving promise..."); resolve(resolveMsg || null); }); -}; \ No newline at end of file +}; diff --git a/src/dataManager/dataExport.js b/src/dataManager/dataExport.js index 64163d0f..756ebc61 100644 --- a/src/dataManager/dataExport.js +++ b/src/dataManager/dataExport.js @@ -1,10 +1,10 @@ /* * File: dataExport.js * Project: steam-comment-service-bot - * Created Date: 04.07.2023 21:29:42 + * Created Date: 2023-07-04 21:29:42 * Author: 3urobeat * - * Last Modified: 24.07.2023 19:43:58 + * Last Modified: 2023-12-27 14:12:57 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -181,4 +181,4 @@ DataManager.prototype.writeQuotesToDisk = function() { }; -// No function to write language \ No newline at end of file +// No function to write language diff --git a/src/dataManager/dataImport.js b/src/dataManager/dataImport.js index 889350a1..097e6d61 100644 --- a/src/dataManager/dataImport.js +++ b/src/dataManager/dataImport.js @@ -1,13 +1,13 @@ /* * File: dataImport.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 21.10.2023 13:01:03 + * Last Modified: 2023-12-28 23:22:59 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -173,6 +173,10 @@ DataManager.prototype._importFromDisk = async function () { if (fs.existsSync("./logininfo.json")) { delete require.cache[require.resolve(srcdir + "/../logininfo.json")]; // Delete cache to enable reloading data + // Print deprecation warning once directly at boot and another time on ready + logger("warn", "The usage of 'logininfo.json' is deprecated, please consider moving your accounts to 'accounts.txt' instead!", true); + logger("warn", "The usage of 'logininfo.json' is deprecated, please consider moving your accounts to 'accounts.txt' instead!"); + let logininfoFile = require(srcdir + "/../logininfo.json"); // Reformat to use new logininfo object structure @@ -196,7 +200,7 @@ DataManager.prototype._importFromDisk = async function () { } // Create empty accounts.txt file if neither exist - if (!fs.existsSync("./accounts.txt")) _this._pullNewFile("accounts.txt", "./accounts.txt", () => {}, true); // Ignore resolve() param + if (!fs.existsSync("./accounts.txt") && !fs.existsSync("./logininfo.json")) _this._pullNewFile("accounts.txt", "./accounts.txt", () => {}, true); // Ignore resolve() param }); } @@ -290,8 +294,8 @@ DataManager.prototype._importFromDisk = async function () { logger("", "", true, true); // Pull the file directly from GitHub. - _this._pullNewFile("english.json", "./src/data/lang/english.json", resolve); // Only resolve for the default language - _this._pullNewFile("english.json", "./src/data/lang/russian.json", () => {}); + _this._pullNewFile("english.json", "./src/data/lang/english.json", (e) => resolve({ "english": e })); // Only resolve for the default language + _this._pullNewFile("russian.json", "./src/data/lang/russian.json", () => {}); } } }); diff --git a/src/dataManager/dataIntegrity.js b/src/dataManager/dataIntegrity.js index 64fe05c1..938c0ad0 100644 --- a/src/dataManager/dataIntegrity.js +++ b/src/dataManager/dataIntegrity.js @@ -1,10 +1,10 @@ /* * File: dataIntegrity.js * Project: steam-comment-service-bot - * Created Date: 03.09.2023 09:52:15 + * Created Date: 2023-09-03 09:52:15 * Author: 3urobeat * - * Last Modified: 05.09.2023 18:53:50 + * Last Modified: 2023-12-27 14:12:39 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -72,4 +72,4 @@ DataManager.prototype.verifyIntegrity = function() { })(); }); -}; \ No newline at end of file +}; diff --git a/src/dataManager/dataManager.js b/src/dataManager/dataManager.js index 7f1030e7..0d24651c 100644 --- a/src/dataManager/dataManager.js +++ b/src/dataManager/dataManager.js @@ -1,10 +1,10 @@ /* * File: dataManager.js * Project: steam-comment-service-bot - * Created Date: 21.03.2023 22:34:51 + * Created Date: 2023-03-21 22:34:51 * Author: 3urobeat * - * Last Modified: 21.10.2023 12:40:24 + * Last Modified: 2023-12-27 14:12:30 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -26,6 +26,7 @@ const Controller = require("../controller/controller.js"); // eslint-disable-lin * @param {Controller} controller Reference to the controller object */ const DataManager = function (controller) { + /** * Reference to the controller object * @type {Controller} diff --git a/src/dataManager/dataProcessing.js b/src/dataManager/dataProcessing.js index 7ad2b720..be159c2a 100644 --- a/src/dataManager/dataProcessing.js +++ b/src/dataManager/dataProcessing.js @@ -1,10 +1,10 @@ /* * File: dataProcessing.js * Project: steam-comment-service-bot - * Created Date: 27.03.2023 21:34:45 + * Created Date: 2023-03-27 21:34:45 * Author: 3urobeat * - * Last Modified: 05.09.2023 19:05:06 + * Last Modified: 2023-12-27 14:12:22 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -162,4 +162,4 @@ DataManager.prototype.processData = async function() { this.writeCachefileToDisk(); -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/checkProxies.js b/src/dataManager/helpers/checkProxies.js index bf0eaf34..e2b926a4 100644 --- a/src/dataManager/helpers/checkProxies.js +++ b/src/dataManager/helpers/checkProxies.js @@ -1,10 +1,10 @@ /* * File: checkProxies.js * Project: steam-comment-service-bot - * Created Date: 09.10.2023 21:08:13 + * Created Date: 2023-10-09 21:08:13 * Author: 3urobeat * - * Last Modified: 14.10.2023 10:41:56 + * Last Modified: 2023-12-27 14:14:31 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -61,4 +61,4 @@ DataManager.prototype.checkAllProxies = async function(ignoreLastCheckedWithin = // Await all promises so this function resolves when all proxies have been checked await Promise.all(promiseArr); -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/getLang.js b/src/dataManager/helpers/getLang.js index 5d0143ce..a8f5c858 100644 --- a/src/dataManager/helpers/getLang.js +++ b/src/dataManager/helpers/getLang.js @@ -1,10 +1,10 @@ /* * File: getLang.js * Project: steam-comment-service-bot - * Created Date: 09.09.2023 12:35:10 + * Created Date: 2023-09-09 12:35:10 * Author: 3urobeat * - * Last Modified: 10.09.2023 16:56:48 + * Last Modified: 2023-12-27 14:14:21 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -81,4 +81,4 @@ DataManager.prototype.getLang = async function(str, replace = null, userIDOrLang // Resolve with the resulting string return langStr; -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/getQuote.js b/src/dataManager/helpers/getQuote.js index f108194a..08dbf846 100644 --- a/src/dataManager/helpers/getQuote.js +++ b/src/dataManager/helpers/getQuote.js @@ -1,13 +1,13 @@ /* * File: getQuote.js * Project: steam-comment-service-bot - * Created Date: 02.03.2022 16:21:11 + * Created Date: 2022-03-02 16:21:11 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:27:09 + * Last Modified: 2023-12-27 14:14:11 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -66,4 +66,4 @@ DataManager.prototype.getQuote = function(quotesArr = null) { } }); -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/handleCooldowns.js b/src/dataManager/helpers/handleCooldowns.js index 38a3e8e5..4a0f614c 100644 --- a/src/dataManager/helpers/handleCooldowns.js +++ b/src/dataManager/helpers/handleCooldowns.js @@ -1,10 +1,10 @@ /* * File: handleCooldowns.js * Project: steam-comment-service-bot - * Created Date: 13.04.2023 17:58:23 + * Created Date: 2023-04-13 17:58:23 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:00:06 + * Last Modified: 2023-12-27 14:13:55 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -101,4 +101,4 @@ DataManager.prototype.setUserCooldown = function(id, timestamp) { if (err) logger("error", "Error adding cooldown to user in database! You should probably *not* ignore this error!\nError: " + err); }); -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/handleExpiringTokens.js b/src/dataManager/helpers/handleExpiringTokens.js index dfe7af47..d0f6c785 100644 --- a/src/dataManager/helpers/handleExpiringTokens.js +++ b/src/dataManager/helpers/handleExpiringTokens.js @@ -1,13 +1,13 @@ /* * File: handleExpiringTokens.js * Project: steam-comment-service-bot - * Created Date: 14.10.2022 14:58:25 + * Created Date: 2022-10-14 14:58:25 * Author: 3urobeat * - * Last Modified: 23.09.2023 13:06:53 + * Last Modified: 2023-12-27 14:13:44 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -139,20 +139,18 @@ DataManager.prototype._askForGetNewToken = function(expiring) { if (input.toLowerCase() == "y") { // Invalidate all tokens and log off if still online - Object.values(expiring).forEach((e, i) => { + Object.values(expiring).forEach((e) => { if (e.status == EStatus.ONLINE) e.user.logOff(); // Disconnected event won't trigger because activeLogin is already true _this.controller._statusUpdateEvent(e, EStatus.OFFLINE); // Set status of this account to offline e.sessionHandler.invalidateTokenInStorage(); // Invalidate token in storage - - // Check for last iteration and trigger login - if (i + 1 == Object.values(expiring).length) { - _this.controller.info.activeLogin = false; // Quick hack so that login() won't ignore our request, this will be updated again instantly and was only false to block new requests - _this.controller.login(); - } }); + // Trigger login + _this.controller.info.activeLogin = false; // Quick hack so that login() won't ignore our request, this will be updated again instantly and was only false to block new requests + _this.controller.login(); + } else { logger("info", "Asking again in 24 hours..."); diff --git a/src/dataManager/helpers/misc.js b/src/dataManager/helpers/misc.js index a9312f1d..7faeb284 100644 --- a/src/dataManager/helpers/misc.js +++ b/src/dataManager/helpers/misc.js @@ -1,10 +1,10 @@ /* * File: misc.js * Project: steam-comment-service-bot - * Created Date: 24.03.2023 18:58:55 + * Created Date: 2023-03-24 18:58:55 * Author: 3urobeat * - * Last Modified: 11.09.2023 19:49:25 + * Last Modified: 2023-12-27 14:13:35 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -32,11 +32,11 @@ DataManager.prototype.getLastCommentRequest = function(steamID64 = null) { let greatestValue = 0; this.lastCommentDB.find(searchFor, (err, docs) => { - docs.forEach((e, i) => { + docs.forEach((e) => { if (e.time > greatestValue) greatestValue = Number(e.time); // Check if this iteration is a new highscore - - if (i == docs.length - 1) resolve(greatestValue); // Resolve on the last iteration }); + + resolve(greatestValue); // Resolve when loop is done }); }); @@ -60,4 +60,4 @@ DataManager.prototype.decodeJWT = function(token) { logger("err", `Failed to decode JWT! Error: ${err}`, true); return null; } -}; \ No newline at end of file +}; diff --git a/src/dataManager/helpers/refreshCache.js b/src/dataManager/helpers/refreshCache.js index f558a7be..6fa27da7 100644 --- a/src/dataManager/helpers/refreshCache.js +++ b/src/dataManager/helpers/refreshCache.js @@ -1,10 +1,10 @@ /* * File: refreshCache.js * Project: steam-comment-service-bot - * Created Date: 29.03.2023 17:44:47 + * Created Date: 2023-03-29 17:44:47 * Author: 3urobeat * - * Last Modified: 05.09.2023 19:05:14 + * Last Modified: 2023-12-27 14:13:26 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat diff --git a/src/dataManager/helpers/repairFile.js b/src/dataManager/helpers/repairFile.js index e32ef9ba..afe81c9e 100644 --- a/src/dataManager/helpers/repairFile.js +++ b/src/dataManager/helpers/repairFile.js @@ -1,10 +1,10 @@ /* * File: repairFile.js * Project: steam-comment-service-bot - * Created Date: 22.03.2023 12:35:01 + * Created Date: 2023-03-22 12:35:01 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:59:23 + * Last Modified: 2023-12-27 14:13:14 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat diff --git a/src/pluginSystem/handlePluginData.js b/src/pluginSystem/handlePluginData.js index 239f1bb0..506b78dc 100644 --- a/src/pluginSystem/handlePluginData.js +++ b/src/pluginSystem/handlePluginData.js @@ -1,10 +1,10 @@ /* * File: handlePluginData.js * Project: steam-comment-service-bot - * Created Date: 04.06.2023 17:52:51 + * Created Date: 2023-06-04 17:52:51 * Author: 3urobeat * - * Last Modified: 15.09.2023 16:28:07 + * Last Modified: 2023-12-27 14:15:13 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -156,20 +156,21 @@ PluginSystem.prototype.loadPluginConfig = function (pluginName) { /** - * Integrates changes made to the config to the users config - * @param {string} pluginName + * Internal: Integrates changes made to a plugin's default config into the user's config + * @author JLCD + * @param {string} pluginName Name of your plugin + * @param {object} currentConfig Config file currently loaded for this plugin * @returns {Record} the config */ -PluginSystem.prototype.aggregatePluginConfig = function (pluginName) { - let path = this.getPluginDataPath(pluginName); - - if (!fs.existsSync(path + "config.json")) return; +PluginSystem.prototype._aggregatePluginConfig = function (pluginName, currentConfig) { + if (!pluginName || !currentConfig) return; if (!fs.existsSync(`${srcdir}/../node_modules/${pluginName}/config.json`)) return; - const standardConfig = require(`${srcdir}/../node_modules/${pluginName}/config.json`); - const config = require(path + "config.json"); - const aggregatedConfig = Object.assign(standardConfig, config); - fs.writeFileSync(path + "config.json", JSON.stringify(aggregatedConfig, null, 4)); + const standardConfig = require(`${srcdir}/../node_modules/${pluginName}/config.json`); + const aggregatedConfig = Object.assign(standardConfig, currentConfig); + + this.writePluginConfig(pluginName, aggregatedConfig); + return aggregatedConfig; }; diff --git a/src/pluginSystem/loadPlugins.js b/src/pluginSystem/loadPlugins.js index 7f982308..25ffefc4 100644 --- a/src/pluginSystem/loadPlugins.js +++ b/src/pluginSystem/loadPlugins.js @@ -1,10 +1,10 @@ /* * File: loadPlugins.js * Project: steam-comment-service-bot - * Created Date: 04.06.2023 15:37:17 + * Created Date: 2023-06-04 15:37:17 * Author: DerDeathraven * - * Last Modified: 05.07.2023 10:31:36 + * Last Modified: 2023-12-27 14:15:37 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -67,21 +67,29 @@ PluginSystem.prototype._loadPlugins = async function () { for (const plugin of initiatedPlugins) { const { pluginName, pluginInstance, pluginJson } = plugin; + // Skip iteration if plugin couldn't be instantiated if (!pluginInstance) { logger("warn", `Skipping plugin '${pluginName}'...`, false, false, null, true); // Force print now continue; } - let pluginConfig = {}; + // Attempt to load plugin config, skip in error + let pluginConfig = await this.loadPluginConfig(pluginName).catch((err) => logger("error", `The config of plugin '${pluginName}' is fucked, skipping plugin. ${err}`)); + + if (!pluginConfig) continue; + + // Handle plugin update by updating config file const lastSeenVersion = this.controller.data.cachefile.pluginVersions; if (lastSeenVersion && lastSeenVersion[pluginName] && lastSeenVersion[pluginName] !== pluginJson.version) { - logger("warn", `Plugin '${pluginName}' is outdated! Updating plugin...`, false, false, null, true); // Force print now - pluginConfig = this.aggregatePluginConfig(pluginName); - } else { - pluginConfig = await this.loadPluginConfig(pluginName).catch((err) => logger("error", `The config of plugin '${pluginName}' is fucked, skipping plugin. ${err}`)); + logger("warn", `Detected version change for plugin '${pluginName}'! Updating config...\n You might need to make changes and reload/restart the bot. Please check the plugin's release notes.`, false, false, null, true); // Force print now + pluginConfig = this._aggregatePluginConfig(pluginName, pluginConfig); } + // Update last seen version of this plugin + if (!lastSeenVersion) this.controller.data.cachefile.pluginVersions = {}; + this.controller.data.cachefile.pluginVersions[pluginName] = pluginJson.version; + // Skip plugin if it is disabled if (!pluginConfig || !pluginConfig.enabled) { logger("debug", `Plugin '${pluginName}' is disabled. Skipping plugin...`); @@ -99,9 +107,5 @@ PluginSystem.prototype._loadPlugins = async function () { // eslint-disable-line this.controller.events.on(event, (...args) => pluginInstance[event]?.call(pluginInstance, ...args)); }); - - // Update last seen version of this plugin name - if (!lastSeenVersion) this.controller.data.cachefile.pluginVersions = {}; - this.controller.data.cachefile.pluginVersions[pluginName] = pluginJson.version; } }; diff --git a/src/pluginSystem/pluginSystem.js b/src/pluginSystem/pluginSystem.js index c4c1b089..df8564a3 100644 --- a/src/pluginSystem/pluginSystem.js +++ b/src/pluginSystem/pluginSystem.js @@ -1,10 +1,10 @@ /* * File: pluginSystem.js * Project: steam-comment-service-bot - * Created Date: 19.03.2023 13:34:27 + * Created Date: 2023-03-19 13:34:27 * Author: 3urobeat * - * Last Modified: 15.09.2023 16:32:05 + * Last Modified: 2023-12-27 14:15:25 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -156,6 +156,15 @@ PluginSystem.prototype.deletePluginData = function (pluginName, filename) {}; // */ PluginSystem.prototype.loadPluginConfig = function (pluginName) {}; // eslint-disable-line +/** + * Internal: Integrates changes made to a plugin's default config into the user's config + * @author JLCD + * @param {string} pluginName Name of your plugin + * @param {object} currentConfig Config file currently loaded for this plugin + * @returns {Record} The updated config + */ +PluginSystem.prototype._aggregatePluginConfig = function (pluginName, currentConfig) {}; // eslint-disable-line + /** * Writes your plugin config changes to the filesystem. The object data will be processed to JSON. * @param {string} pluginName Name of your plugin @@ -163,9 +172,3 @@ PluginSystem.prototype.loadPluginConfig = function (pluginName) {}; // eslint-di * @returns {Promise.} Resolves on success, rejects otherwise with an error */ PluginSystem.prototype.writePluginConfig = function (pluginName, pluginConfig) {}; // eslint-disable-line -/** - * Integrates changes made to the config to the users config - * @param {string} pluginName Name of your plugin - * @returns {Record} the config - */ -PluginSystem.prototype.aggregatePluginConfig = function (pluginName) {}; // eslint-disable-line diff --git a/src/sessions/events/sessionEvents.js b/src/sessions/events/sessionEvents.js index 5a477689..f1627cf4 100644 --- a/src/sessions/events/sessionEvents.js +++ b/src/sessions/events/sessionEvents.js @@ -1,13 +1,13 @@ /* * File: sessionEvents.js * Project: steam-comment-service-bot - * Created Date: 09.10.2022 12:52:30 + * Created Date: 2022-10-09 12:52:30 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:16:21 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -60,4 +60,3 @@ SessionHandler.prototype._attachEvents = function() { }); }; - diff --git a/src/sessions/helpers/handle2FA.js b/src/sessions/helpers/handle2FA.js index 29a9b85a..74d886ea 100644 --- a/src/sessions/helpers/handle2FA.js +++ b/src/sessions/helpers/handle2FA.js @@ -1,13 +1,13 @@ /* * File: handle2FA.js * Project: steam-comment-service-bot - * Created Date: 09.10.2022 12:59:31 + * Created Date: 2022-10-09 12:59:31 * Author: 3urobeat * - * Last Modified: 04.07.2023 17:50:12 + * Last Modified: 2023-12-27 14:16:18 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -149,4 +149,4 @@ SessionHandler.prototype._acceptSteamGuardCode = function(code) { this._get2FAUserInput(); }); -}; \ No newline at end of file +}; diff --git a/src/sessions/helpers/handleCredentialsLoginError.js b/src/sessions/helpers/handleCredentialsLoginError.js index 6ca375ab..2ae94d48 100644 --- a/src/sessions/helpers/handleCredentialsLoginError.js +++ b/src/sessions/helpers/handleCredentialsLoginError.js @@ -1,13 +1,13 @@ /* * File: handleCredentialsLoginError.js * Project: steam-comment-service-bot - * Created Date: 09.10.2022 13:22:39 + * Created Date: 2022-10-09 13:22:39 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:16:15 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/sessions/helpers/tokenStorageHandler.js b/src/sessions/helpers/tokenStorageHandler.js index 766dc797..49092340 100644 --- a/src/sessions/helpers/tokenStorageHandler.js +++ b/src/sessions/helpers/tokenStorageHandler.js @@ -1,13 +1,13 @@ /* * File: tokenStorageHandler.js * Project: steam-comment-service-bot - * Created Date: 10.10.2022 12:53:20 + * Created Date: 2022-10-10 12:53:20 * Author: 3urobeat * - * Last Modified: 08.07.2023 00:36:49 + * Last Modified: 2023-12-27 14:16:11 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -53,6 +53,7 @@ SessionHandler.prototype._getTokenFromStorage = function(callback) { callback(null); } }); + }; diff --git a/src/sessions/sessionHandler.js b/src/sessions/sessionHandler.js index 5c8b0578..6246ae1e 100644 --- a/src/sessions/sessionHandler.js +++ b/src/sessions/sessionHandler.js @@ -1,13 +1,13 @@ /* * File: sessionHandler.js * Project: steam-comment-service-bot - * Created Date: 09.10.2022 12:47:27 + * Created Date: 2022-10-09 12:47:27 * Author: 3urobeat * - * Last Modified: 05.10.2023 19:34:45 + * Last Modified: 2023-12-27 14:16:05 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/starter.js b/src/starter.js index a1ca540f..3b9151d8 100644 --- a/src/starter.js +++ b/src/starter.js @@ -1,13 +1,13 @@ /* * File: starter.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 10:26:00 + * Created Date: 2021-07-10 10:26:00 * Author: 3urobeat * - * Last Modified: 29.09.2023 16:42:05 + * Last Modified: 2023-12-27 14:17:17 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. diff --git a/src/updater/compatibility.js b/src/updater/compatibility.js index a6642b06..0135dc7a 100644 --- a/src/updater/compatibility.js +++ b/src/updater/compatibility.js @@ -1,10 +1,10 @@ /* * File: compatibility.js * Project: steam-comment-service-bot - * Created Date: 04.05.2023 20:26:42 + * Created Date: 2023-05-04 20:26:42 * Author: 3urobeat * - * Last Modified: 28.09.2023 18:33:22 + * Last Modified: 2023-12-27 14:17:41 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -63,4 +63,4 @@ module.exports.runCompatibility = async (controller) => { })(); }); -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2060.js b/src/updater/compatibility/2060.js index d19c069b..c2993314 100644 --- a/src/updater/compatibility/2060.js +++ b/src/updater/compatibility/2060.js @@ -1,13 +1,13 @@ /* * File: 2060.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:49 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -67,4 +67,4 @@ module.exports.run = (controller, resolve) => { //eslint-disable-line module.exports.info = { "master": "2.6", "beta-testing": "2.6" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2070.js b/src/updater/compatibility/2070.js index fe480f7c..ea297113 100644 --- a/src/updater/compatibility/2070.js +++ b/src/updater/compatibility/2070.js @@ -1,13 +1,13 @@ /* * File: 2070.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:47 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -63,4 +63,4 @@ module.exports.run = (controller, resolve) => { //eslint-disable-line module.exports.info = { "master": "2.7", "beta-testing": "2.7" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2080.js b/src/updater/compatibility/2080.js index 4d7dee73..b416c973 100644 --- a/src/updater/compatibility/2080.js +++ b/src/updater/compatibility/2080.js @@ -1,13 +1,13 @@ /* * File: 2080.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:43 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -39,4 +39,4 @@ module.exports.run = (controller, resolve) => { //eslint-disable-line module.exports.info = { "master": "2.8", "beta-testing": "BETA 2.8 b3" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2100.js b/src/updater/compatibility/2100.js index ca94204a..34ef53f2 100644 --- a/src/updater/compatibility/2100.js +++ b/src/updater/compatibility/2100.js @@ -1,13 +1,13 @@ /* * File: 2100.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:40 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -50,4 +50,4 @@ module.exports.run = (controller, resolve) => { //eslint-disable-line module.exports.info = { "master": "2100", "beta-testing": "BETA 2.10 b5" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2103.js b/src/updater/compatibility/2103.js index 174c3388..0b13987d 100644 --- a/src/updater/compatibility/2103.js +++ b/src/updater/compatibility/2103.js @@ -1,13 +1,13 @@ /* * File: 2103.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:36 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -38,4 +38,4 @@ module.exports.run = (controller, resolve) => { module.exports.info = { "master": "2103", "beta-testing": "2103" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/2104.js b/src/updater/compatibility/2104.js index 1233dd0e..8859b8bd 100644 --- a/src/updater/compatibility/2104.js +++ b/src/updater/compatibility/2104.js @@ -1,13 +1,13 @@ /* * File: 2104.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:27 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -51,4 +51,4 @@ module.exports.run = (controller, resolve) => { module.exports.info = { "master": "2104", "beta-testing": "2104" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/21100.js b/src/updater/compatibility/21100.js index cad0935f..2d56596f 100644 --- a/src/updater/compatibility/21100.js +++ b/src/updater/compatibility/21100.js @@ -1,13 +1,13 @@ /* * File: 21100.js * Project: steam-comment-service-bot - * Created Date: 10.07.2021 22:30:00 + * Created Date: 2021-07-10 22:30:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:21 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -61,4 +61,4 @@ module.exports.run = (controller, resolve) => { //eslint-disable-line module.exports.info = { "master": "21100", "beta-testing": "2110b4" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/21200.js b/src/updater/compatibility/21200.js index 21bcf1fb..595976f5 100644 --- a/src/updater/compatibility/21200.js +++ b/src/updater/compatibility/21200.js @@ -1,13 +1,13 @@ /* * File: 21200.js * Project: steam-comment-service-bot - * Created Date: 23.02.2022 10:39:41 + * Created Date: 2022-02-23 10:39:41 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:15 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -59,4 +59,4 @@ module.exports.run = (controller, resolve) => { module.exports.info = { "master": "21200", "beta-testing": "21200b02" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/21300.js b/src/updater/compatibility/21300.js index 8fb84f01..19e186ec 100644 --- a/src/updater/compatibility/21300.js +++ b/src/updater/compatibility/21300.js @@ -1,10 +1,10 @@ /* * File: 21300.js * Project: steam-comment-service-bot - * Created Date: 02.06.2023 12:20:00 + * Created Date: 2023-06-02 12:20:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:20:07 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -78,4 +78,4 @@ module.exports.run = (controller, resolve) => { module.exports.info = { "master": "21300", "beta-testing": "21300b07" -}; \ No newline at end of file +}; diff --git a/src/updater/compatibility/21400.js b/src/updater/compatibility/21400.js index 9478a04b..3f45dca6 100644 --- a/src/updater/compatibility/21400.js +++ b/src/updater/compatibility/21400.js @@ -1,10 +1,10 @@ /* * File: 21400.js * Project: steam-comment-service-bot - * Created Date: 28.09.2023 17:27:08 + * Created Date: 2023-09-28 17:27:08 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:28:48 + * Last Modified: 2023-12-27 14:19:56 * Modified By: 3urobeat * * Copyright (c) 2023 3urobeat @@ -74,4 +74,4 @@ module.exports.run = (controller, resolve) => { module.exports.info = { "master": "21400", "beta-testing": "21400b03" -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/checkForUpdate.js b/src/updater/helpers/checkForUpdate.js index bff36a93..24ece378 100644 --- a/src/updater/helpers/checkForUpdate.js +++ b/src/updater/helpers/checkForUpdate.js @@ -1,13 +1,13 @@ /* * File: checkForUpdate.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 08.07.2023 00:36:54 + * Last Modified: 2023-12-27 14:19:44 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -65,4 +65,4 @@ module.exports.check = (datafile, branch, forceUpdate, callback) => { logger("error", "Updater checkForUpdate function Error: " + err, true); callback(false, {}); } -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/createBackup.js b/src/updater/helpers/createBackup.js index 5e4b029d..cdf56741 100644 --- a/src/updater/helpers/createBackup.js +++ b/src/updater/helpers/createBackup.js @@ -1,13 +1,13 @@ /* * File: createBackup.js * Project: steam-comment-service-bot - * Created Date: 26.02.2022 16:54:03 + * Created Date: 2022-02-26 16:54:03 * Author: 3urobeat * - * Last Modified: 02.09.2023 16:28:46 + * Last Modified: 2023-12-27 14:19:34 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -70,4 +70,4 @@ module.exports.run = () => { copyFolderRecursiveSync(".", "./backup", true); }); -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/customUpdateRules.js b/src/updater/helpers/customUpdateRules.js index 61fb63e5..a1087a60 100644 --- a/src/updater/helpers/customUpdateRules.js +++ b/src/updater/helpers/customUpdateRules.js @@ -1,13 +1,13 @@ /* * File: customUpdateRules.js * Project: steam-comment-service-bot - * Created Date: 22.02.2022 17:39:21 + * Created Date: 2022-02-22 17:39:21 * Author: 3urobeat * - * Last Modified: 19.10.2023 19:14:37 + * Last Modified: 2023-12-27 14:19:22 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -116,4 +116,4 @@ module.exports.customUpdateRules = (compatibilityfeaturedone, oldconfig, oldadva }); }); -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/downloadUpdate.js b/src/updater/helpers/downloadUpdate.js index 0f635fa2..37f66477 100644 --- a/src/updater/helpers/downloadUpdate.js +++ b/src/updater/helpers/downloadUpdate.js @@ -1,13 +1,13 @@ /* * File: downloadUpdate.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 29.06.2023 22:35:03 + * Last Modified: 2023-12-27 14:18:29 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -29,7 +29,7 @@ module.exports.startDownload = (controller) => { // Start by defining which files we should keep const dontDelete = [ - "./src/data/cache.json", "./src/data/lastcomment.db", "./src/data/tokens.db", "./output.txt", // Data stuff + "./src/data/cache.json", "./src/data/lastcomment.db", "./src/data/ratingHistory.db", "./src/data/tokens.db", "./src/data/userSettings.db", "./output.txt", // Data stuff "./accounts.txt", "./customlang.json", "./logininfo.json", "./proxies.txt", "./quotes.txt" // User config stuff ]; @@ -126,4 +126,4 @@ module.exports.startDownload = (controller) => { }); }); -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/prepareUpdate.js b/src/updater/helpers/prepareUpdate.js index 5859aa7c..08e5f04e 100644 --- a/src/updater/helpers/prepareUpdate.js +++ b/src/updater/helpers/prepareUpdate.js @@ -1,13 +1,13 @@ /* * File: prepareUpdate.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 02.09.2023 22:09:01 + * Last Modified: 2023-12-27 14:18:10 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -51,30 +51,26 @@ module.exports.run = (controller, respondModule, resInfo) => { }, 5000); } - function filterACPobj() { // Filters activeRequests object - let objlength = Object.keys(controller.activeRequests).length; // Save this before the loop as deleting entries will change this number and lead to the loop finished check never triggering - - Object.keys(controller.activeRequests).forEach((e, i) => { // Loop over obj to filter invalid/expired entries + // Loop over obj to filter invalid/expired entries + Object.keys(controller.activeRequests).forEach((e) => { if (controller.activeRequests[e].status != "active" || Date.now() > controller.activeRequests[e].until + (controller.data.config.botaccountcooldown * 60000)) { // Check if status is not active or if entry is finished (realistically the status can't be active and finished but it won't hurt to check both to avoid a possible bug) delete controller.activeRequests[e]; // Remove entry from object } + }); - if (i == objlength - 1) { - if (Object.keys(controller.activeRequests).length > 0) { // Check if obj is still not empty and recursively call this function again - setTimeout(() => { // Wait 2.5 sec and check again - filterACPobj(); - }, 2500); + if (Object.keys(controller.activeRequests).length > 0) { // Check if obj is still not empty and recursively call this function again + setTimeout(() => { // Wait 2.5 sec and check again + filterACPobj(); + }, 2500); - } else { // If the obj is now empty then lets continue + } else { // If the obj is now empty then lets continue - logger("info", "Active request finished. Starting to log off all accounts...", false, true, logger.animation("loading")); - if (respondModule) respondModule(resInfo, "Active request finished. Starting to log off all accounts..."); + logger("info", "Active request finished. Starting to log off all accounts...", false, true, logger.animation("loading")); + if (respondModule) respondModule(resInfo, "Active request finished. Starting to log off all accounts..."); - initiateUpdate(); - } - } - }); + initiateUpdate(); + } } /* eslint-enable no-inner-declarations, jsdoc/require-jsdoc */ @@ -101,4 +97,4 @@ module.exports.run = (controller, respondModule, resInfo) => { } }); -}; \ No newline at end of file +}; diff --git a/src/updater/helpers/restoreBackup.js b/src/updater/helpers/restoreBackup.js index 4f8d9803..17cdab3a 100644 --- a/src/updater/helpers/restoreBackup.js +++ b/src/updater/helpers/restoreBackup.js @@ -1,13 +1,13 @@ /* * File: restoreBackup.js * Project: steam-comment-service-bot - * Created Date: 26.02.2022 20:16:44 + * Created Date: 2022-02-26 20:16:44 * Author: 3urobeat * - * Last Modified: 04.07.2023 20:16:28 + * Last Modified: 2023-12-27 14:18:01 * Modified By: 3urobeat * - * Copyright (c) 2022 3urobeat + * Copyright (c) 2022 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -81,4 +81,4 @@ module.exports.run = () => { } }); -}; \ No newline at end of file +}; diff --git a/src/updater/updater.js b/src/updater/updater.js index c31ac2a9..dcdb8952 100644 --- a/src/updater/updater.js +++ b/src/updater/updater.js @@ -1,13 +1,13 @@ /* * File: updater.js * Project: steam-comment-service-bot - * Created Date: 09.07.2021 16:26:00 + * Created Date: 2021-07-09 16:26:00 * Author: 3urobeat * - * Last Modified: 10.09.2023 15:54:07 + * Last Modified: 2023-12-27 14:17:27 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2021 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -205,4 +205,4 @@ Updater.prototype.run = function(forceUpdate, respondModule, resInfo) { })(); }); -}; \ No newline at end of file +}; diff --git a/start.js b/start.js index aed97212..4bd7e33e 100644 --- a/start.js +++ b/start.js @@ -1,13 +1,13 @@ /* * File: start.js * Project: steam-comment-service-bot - * Created Date: 15.01.2020 10:38:00 + * Created Date: 2020-01-15 10:38:00 * Author: 3urobeat * - * Last Modified: 04.07.2023 19:46:02 + * Last Modified: 2023-12-27 13:57:29 * Modified By: 3urobeat * - * Copyright (c) 2021 3urobeat + * Copyright (c) 2020 - 2023 3urobeat * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -49,7 +49,12 @@ module.exports.restart = (args) => { }; -/* ---------- Get filetostart if it doesn't exist ---------- */ +/* ------------------ Entry point ------------------ */ + +// Force working directory to fix relative path issues when starting bot using absolute path. Fixes: https://github.com/3urobeat/steam-comment-service-bot/issues/217 +process.chdir(__dirname); + +// Get filetostart if it doesn't exist let fs = require("fs"); let extdata = getExtdata(); @@ -83,4 +88,4 @@ if (!fs.existsSync(extdata.filetostart)) { // Function that downloads filetostar require(extdata.filetostart).run(); // Start application } -// Code by: https://github.com/3urobeat/ \ No newline at end of file +// Code by: https://github.com/3urobeat/ diff --git a/types/types.d.ts b/types/types.d.ts index b5ff4711..235fa081 100644 --- a/types/types.d.ts +++ b/types/types.d.ts @@ -10,7 +10,7 @@ declare class Bot { */ controller: Controller; /** - * Reference to the controller object + * Reference to the DataManager object */ data: DataManager; /** @@ -300,6 +300,15 @@ declare type resInfo = { */ declare function comment(commandHandler: CommandHandler, resInfo: CommandHandler.resInfo, respond: (...params: any[]) => any, postComment: (...params: any[]) => any, commentArgs: any, receiverSteamID64: string): void; +/** + * Helper function: Gets the visibility status of a profile and appends it to idType + * @param commandHandler - The commandHandler object + * @param steamID64 - The steamID64 of the profile to check + * @param type - Type of steamID64, determined by handleSteamIdResolving(). Must be "profile", otherwise callback will be called instantly with this type param, unchanged. + * @param callback - Called on completion with your new idType + */ +declare function getVisibilityStatus(commandHandler: CommandHandler, steamID64: string, type: string, callback: (...params: any[]) => any): void; + /** * Retrieves arguments from a comment request. If request is invalid (for example too many comments requested) an error message will be sent * @param commandHandler - The commandHandler object @@ -316,7 +325,7 @@ declare function getCommentArgs(commandHandler: CommandHandler, args: any[], req * @param commandHandler - The commandHandler object * @param numberOfComments - Number of requested comments * @param canBeLimited - If the accounts are allowed to be limited - * @param idType - Type of the request. This can either be "profile", "group", "sharedfile" or "discussion". This is used to determine if limited accs need to be added first. + * @param idType - Type of the request. This can either be "profile(PrivacyState)", "group", "sharedfile" or "discussion". This is used to determine if limited accs need to be added first. * @param receiverSteamID - Optional: steamID64 of the receiving user. If set, accounts that are friend with the user will be prioritized and accsToAdd will be calculated. * @returns `availableAccounts` contains all account names from bot object, `accsToAdd` account names which are limited and not friend, `whenAvailable` is a timestamp representing how long to wait until accsNeeded accounts will be available and `whenAvailableStr` is formatted human-readable as time from now */ @@ -1238,10 +1247,12 @@ declare class PluginSystem { */ loadPluginConfig(pluginName: string): Promise; /** - * Integrates changes made to the config to the users config + * Internal: Integrates changes made to a plugin's default config into the user's config + * @param pluginName - Name of your plugin + * @param currentConfig - Config file currently loaded for this plugin * @returns the config */ - aggregatePluginConfig(pluginName: string): Record; + _aggregatePluginConfig(pluginName: string, currentConfig: any): Record; /** * Writes your plugin config changes to the filesystem. The object data will be processed to JSON. * @param pluginName - Name of your plugin @@ -1312,6 +1323,13 @@ declare class PluginSystem { * @returns Resolves with your plugin config processed from JSON to an object. If the config failed to load, the promise will be rejected with an error. */ loadPluginConfig(pluginName: string): Promise; + /** + * Internal: Integrates changes made to a plugin's default config into the user's config + * @param pluginName - Name of your plugin + * @param currentConfig - Config file currently loaded for this plugin + * @returns the config + */ + _aggregatePluginConfig(pluginName: string, currentConfig: any): Record; /** * Writes your plugin config changes to the filesystem. The object data will be processed to JSON. * @param pluginName - Name of your plugin @@ -1319,11 +1337,6 @@ declare class PluginSystem { * @returns Resolves on success, rejects otherwise with an error */ writePluginConfig(pluginName: string, pluginConfig: any): Promise; - /** - * Integrates changes made to the config to the users config - * @returns the config - */ - aggregatePluginConfig(pluginName: string): Record; } /**