diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9e0e268 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,347 @@ +# ๐Ÿค Contributing to Microsoft Rewards Script + +
+ +Microsoft Rewards Script Logo + +**Thank you for considering contributing to this project!** + +
+ +--- + +## ๐Ÿ“‹ Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [How Can I Contribute?](#how-can-i-contribute) +- [Development Setup](#development-setup) +- [Pull Request Process](#pull-request-process) +- [Coding Standards](#coding-standards) +- [Documentation](#documentation) + +--- + +## ๐Ÿค Code of Conduct + +This project follows a simple principle: **Be respectful and constructive**. + +- Treat all contributors with respect +- Welcome newcomers and help them learn +- Focus on constructive feedback +- Keep discussions professional and on-topic + +--- + +## ๐Ÿ’ก How Can I Contribute? + +### ๐Ÿ› Reporting Bugs + +Before creating a bug report: +- Check existing issues to avoid duplicates +- Gather diagnostic information (see [Diagnostics Guide](docs/diagnostics.md)) + +**Good bug reports include:** +- Clear title and description +- Steps to reproduce +- Expected vs actual behavior +- Environment details (OS, Node.js version, script version) +- Logs and screenshots (remember to redact sensitive info!) + +### โœจ Suggesting Features + +Feature suggestions are welcome! Please: +- Check if the feature already exists or is planned +- Explain the use case and benefits +- Consider backward compatibility +- Be open to discussion and alternatives + +### ๐Ÿ“ Improving Documentation + +Documentation improvements are highly valued: +- Fix typos or unclear instructions +- Add examples or clarifications +- Translate content (if applicable) +- Update outdated information + +### ๐Ÿ’ป Code Contributions + +Contributions to the codebase are welcome! See [Development Setup](#development-setup) below. + +--- + +## ๐Ÿ› ๏ธ Development Setup + +### Prerequisites + +- Node.js 20+ (version 22 recommended) +- Git +- A code editor (VS Code recommended) + +### Getting Started + +1. **Fork the repository** on GitHub + +2. **Clone your fork:** + ```bash + git clone https://github.com/YOUR_USERNAME/Microsoft-Rewards-Bot.git + cd Microsoft-Rewards-Bot + ``` + +3. **Install dependencies:** + ```bash + npm install + ``` + +4. **Set up configuration:** + ```bash + cp src/accounts.example.jsonc src/accounts.jsonc + # Edit accounts.jsonc with test credentials + ``` + +5. **Build the project:** + ```bash + npm run build + ``` + +6. **Run in development mode:** + ```bash + npm run dev + ``` + +### Project Structure + +``` +src/ +โ”œโ”€โ”€ browser/ # Browser automation (Playwright) +โ”œโ”€โ”€ functions/ # Core features (activities, login, workers) +โ”‚ โ””โ”€โ”€ activities/ # Individual activity handlers +โ”œโ”€โ”€ interface/ # TypeScript interfaces +โ””โ”€โ”€ util/ # Utility classes (logging, analytics, etc.) +``` + +--- + +## ๐Ÿ”„ Pull Request Process + +### Before Submitting + +1. **Create a feature branch:** + ```bash + git checkout -b feature/your-feature-name + ``` + +2. **Make your changes:** + - Write clean, documented code + - Follow existing code style + - Add comments for complex logic + +3. **Test your changes:** + ```bash + npm run build + npm run start + ``` + +4. **Commit your changes:** + ```bash + git add . + git commit -m "feat: add amazing new feature" + ``` + + Use conventional commits: + - `feat:` for new features + - `fix:` for bug fixes + - `docs:` for documentation + - `refactor:` for code refactoring + - `test:` for tests + - `chore:` for maintenance tasks + +### Submitting the PR + +1. **Push to your fork:** + ```bash + git push origin feature/your-feature-name + ``` + +2. **Create a Pull Request** on GitHub: + - Provide a clear title and description + - Reference any related issues + - Explain what changed and why + - Include screenshots/examples if applicable + +3. **Respond to feedback:** + - Be open to suggestions + - Make requested changes promptly + - Keep the discussion focused and professional + +### PR Review Process + +- Maintainers will review your PR as soon as possible +- Changes may be requested before merging +- Once approved, a maintainer will merge your contribution + +--- + +## ๐Ÿ“ Coding Standards + +### TypeScript Style + +- **Indentation:** 2 spaces (no tabs) +- **Quotes:** Single quotes for strings +- **Semicolons:** Required +- **Naming:** + - `camelCase` for variables and functions + - `PascalCase` for classes and interfaces + - `UPPER_CASE` for constants + +### Best Practices + +- Write self-documenting code with clear variable names +- Add comments for complex logic +- Keep functions small and focused (single responsibility) +- Handle errors gracefully +- Avoid code duplication +- Use TypeScript types properly (avoid `any` when possible) + +### Example + +```typescript +// โœ… Good +async function calculateRewardPoints(account: Account): Promise { + try { + const points = await fetchPointsFromAPI(account); + return points; + } catch (error) { + this.log.error('POINTS-FETCH', `Failed to fetch points: ${error.message}`); + return 0; + } +} + +// โŒ Bad +async function calc(a: any): Promise { + const p = await fetch(a); + return p; +} +``` + +--- + +## ๐Ÿ“š Documentation + +### Documentation Standards + +- Keep documentation clear and concise +- Use examples wherever possible +- Update documentation when changing functionality +- Follow the existing documentation structure + +### Documentation Files + +- `README.md` โ€” Main project overview and quick start +- `docs/*.md` โ€” Detailed guides for specific topics +- Code comments โ€” Inline documentation for complex logic + +### Writing Style + +- Use clear, simple language +- Break complex topics into steps +- Include code examples +- Add visual aids (screenshots, diagrams) when helpful +- Use emojis sparingly for visual navigation + +--- + +## ๐Ÿงช Testing + +Currently, this project doesn't have a formal test suite. If you'd like to contribute tests: + +- Use a testing framework (Jest, Mocha, etc.) +- Write unit tests for utility functions +- Consider integration tests for critical flows +- Document how to run tests + +--- + +## ๐Ÿ› Debugging + +When debugging issues: + +1. Enable diagnostics in `config.jsonc`: + ```jsonc + { + "diagnostics": { + "enabled": true, + "saveScreenshot": true, + "saveHtml": true + } + } + ``` + +2. Check logs in the console and `reports/` folder + +3. Use VS Code debugger with launch configuration + +--- + +## ๐Ÿ’ฌ Getting Help + +- **Discord:** [Join our community](https://discord.gg/h6Z69ZPPCz) +- **GitHub Issues:** Ask questions or report problems +- **Documentation:** Check the [docs folder](docs/index.md) + +--- + +## ๐ŸŽฏ Contribution Ideas + +Not sure where to start? Here are some ideas: + +### Beginner-Friendly + +- Fix typos in documentation +- Improve error messages +- Add code comments +- Create examples or tutorials + +### Intermediate + +- Refactor complex functions +- Improve error handling +- Add new configuration options +- Optimize performance + +### Advanced + +- Implement new activity types +- Enhance anti-detection mechanisms +- Add comprehensive testing +- Improve Docker deployment + +--- + +## ๐Ÿ™ Recognition + +Contributors will be: +- Listed in the project's contributors page +- Mentioned in release notes (for significant contributions) +- Appreciated by the community! ๐ŸŒŸ + +--- + +## ๐Ÿ“„ License + +--- + +## ๐Ÿ“„ License + +By contributing, you agree that your contributions will be licensed under the same [Non-Commercial Personal Use License](LICENSE) as the project. + +--- + +--- + +
+ +**Thank you for contributing!** ๐ŸŽ‰ + +[Back to README](README.md) โ€ข [Documentation](docs/index.md) โ€ข [Discord](https://discord.gg/h6Z69ZPPCz) + +
diff --git a/LICENSE b/LICENSE index 53ec19a..75cea4d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,43 +1,108 @@ -PROPRIETARY LICENSE +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 InternationalNON-COMMERCIAL PERSONAL USE LICENSE -Copyright (c) 2024-2025 LightZirconite and Contributors -All rights reserved. + +Copyright (c) 2025 Light60-1Copyright (c) 2024-2025 TheNetsky and Contributors + +Originally forked from Light60-1/Microsoft-Rewards-Rewi + +This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 + +International License. To view a copy of this license, visit:All rights reserved. + +http://creativecommons.org/licenses/by-nc-sa/4.0/ TERMS AND CONDITIONS: +================================================================================ + 1. PERMITTED USE: - - You may download and use this software for personal, non-commercial purposes. + +YOU ARE FREE TO: - You may download and use this software for personal, non-commercial purposes. + - You may modify the source code for your own personal use. - - You may submit pull requests (PRs) to the official repository to propose improvements. + + โ€ข Share โ€” copy and redistribute the material in any medium or format - You may submit pull requests (PRs) to the official repository to propose improvements. + + โ€ข Adapt โ€” remix, transform, and build upon the material 2. PROHIBITED ACTIONS: - - You may NOT redistribute this software, modified or unmodified, in any form. + +The licensor cannot revoke these freedoms as long as you follow the license terms. - You may NOT redistribute this software, modified or unmodified, in any form. + - You may NOT share, publish, or distribute your modifications publicly. - - You may NOT use this software for commercial purposes. + +================================================================================ - You may NOT use this software for commercial purposes. + - You may NOT sublicense, sell, rent, or lease this software. - - You may NOT create derivative works for public distribution. + +UNDER THE FOLLOWING TERMS: - You may NOT create derivative works for public distribution. + - You may NOT remove or modify this license or copyright notices. -3. CONTRIBUTIONS: - - By submitting a pull request, you grant the copyright holder the right to use, + โ€ข Attribution โ€” You must give appropriate credit, provide a link to the license, + + and indicate if changes were made. You may do so in any reasonable manner, but3. CONTRIBUTIONS: + + not in any way that suggests the licensor endorses you or your use. - By submitting a pull request, you grant the copyright holder the right to use, + modify, and distribute your contributions under this license. - - You retain no rights to your contributions once merged into the official repository. -4. DISCLAIMER: + โ€ข NonCommercial โ€” You may NOT use the material for commercial purposes. - You retain no rights to your contributions once merged into the official repository. + + This includes selling, renting, licensing for profit, or using in any + + revenue-generating context without explicit written permission.4. DISCLAIMER: + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + + โ€ข ShareAlike โ€” If you remix, transform, or build upon the material, you must INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + + distribute your contributions under the same license as the original. PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -5. TERMINATION: + โ€ข No additional restrictions โ€” You may not apply legal terms or technological OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + + measures that legally restrict others from doing anything the license permits. SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +================================================================================5. TERMINATION: + This license is effective until terminated. Your rights under this license will - terminate automatically without notice if you fail to comply with any term herein. -6. GOVERNING LAW: - This license shall be governed by and construed in accordance with applicable laws, - without regard to its conflict of law provisions. +DISCLAIMER: terminate automatically without notice if you fail to comply with any term herein. -For permissions beyond the scope of this license, please contact the copyright holder. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR6. GOVERNING LAW: + +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, This license shall be governed by and construed in accordance with applicable laws, + +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE without regard to its conflict of law provisions. + +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,For permissions beyond the scope of this license, please contact the copyright holder. + +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +================================================================================ + +MICROSOFT REWARDS TERMS: + +This software automates interactions with Microsoft Rewards, which may violate +Microsoft's Terms of Service. Use at your own risk. The authors: + + โ€ข Are NOT responsible for account suspensions or bans + โ€ข Do NOT encourage violating terms of service + โ€ข Provide this for educational purposes ONLY + +By using this software, you acknowledge and accept all risks. + +================================================================================ + +For commercial licensing inquiries or permissions beyond this license: +https://github.com/Light60-1/Microsoft-Rewards-Bot/issues diff --git a/NOTICE b/NOTICE index 3cc9ba6..dc30fe7 100644 --- a/NOTICE +++ b/NOTICE @@ -1,127 +1,49 @@ -# IMPORTANT LEGAL NOTICES +Microsoft Rewards Bot +Copyright (c) 2025 Light60-1 -## ๐Ÿšจ Terms of Service Violation Warning +This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 +International License. See LICENSE file for details. -**Using this software violates Microsoft's Terms of Service.** +================================================================================ -Microsoft Rewards explicitly prohibits: -- Automated point collection -- Bot usage for completing tasks -- Any form of automation on their platform +IMPORTANT LEGAL NOTICES -### Potential Consequences: -- โŒ **Immediate account suspension** -- โŒ **Permanent ban from Microsoft Rewards** -- โŒ **Forfeiture of all accumulated points** -- โŒ **Loss of redemption history** -- โš ๏ธ Possible restrictions on other Microsoft services +๐Ÿšจ USE AT YOUR OWN RISK ---- +This software automates interactions with Microsoft Rewards, which may violate +Microsoft's Terms of Service. Potential consequences include: -## ๐Ÿข Proprietary License - Restricted Use + โ€ข Account suspension or permanent ban + โ€ข Loss of accumulated points and rewards + โ€ข Restriction from Microsoft services -This software is licensed under a **PROPRIETARY LICENSE** with strict restrictions. - -### โœ… Permitted Activities: -- Download and use for personal, non-commercial purposes -- Modify the source code for your own personal use -- Submit pull requests to the official repository - -### โŒ Prohibited Activities: -- Redistributing this software (modified or unmodified) -- Sharing or publishing your modifications publicly -- Using this software for commercial purposes -- Selling, renting, or leasing this software -- Creating derivative works for public distribution -- Removing or modifying license or copyright notices - ---- - -## โš–๏ธ Legal Disclaimer - -### No Warranty -This software is provided "AS IS" without any warranty of any kind. - -### No Liability The authors and contributors: -- Are NOT responsible for account suspensions -- Are NOT responsible for lost points or rewards -- Are NOT responsible for any damages -- Do NOT encourage ToS violations -- Provide this for educational purposes ONLY + โ€ข Are NOT responsible for any actions taken by Microsoft + โ€ข Do NOT encourage violating terms of service + โ€ข Provide this for EDUCATIONAL purposes only -### Your Responsibility -You are solely responsible for: -- Your use of this software -- Compliance with Microsoft's policies -- Any consequences from automation -- Legal implications in your jurisdiction +================================================================================ ---- +THIRD-PARTY SOFTWARE -## ๐ŸŽ“ Educational Purpose Statement +This project uses open-source libraries: + โ€ข Playwright (Apache-2.0) + โ€ข ReBrowser-Playwright (Apache-2.0) + โ€ข Cheerio (MIT) + โ€ข Axios (MIT) + โ€ข And others (see package.json) -This project is developed and maintained for **educational purposes**: -- To demonstrate browser automation techniques -- To showcase TypeScript and Playwright capabilities -- To teach software architecture patterns -- To explore anti-detection methodologies +All trademarks and service marks are the property of their respective owners. -**The authors do not condone using this software in violation of any Terms of Service.** +================================================================================ ---- +PRIVACY & DATA -## ๐Ÿ”’ Privacy & Security +This software stores credentials locally only. No data is sent to third parties +except as required for Microsoft Rewards functionality. You are responsible for +securing your configuration files. -### Your Data: -- This software stores credentials **locally only** -- No data is sent to third parties -- Sessions are stored in the `sessions/` folder -- You can delete all data by removing local files +================================================================================ -### Third-Party Services: -- Google Trends (for search queries) -- Bing Search (for automation) -- Discord/NTFY (optional, for notifications) - -### Your Responsibility: -- Protect your `accounts.json` file -- Use strong passwords -- Enable 2FA where possible -- Don't share your configuration publicly - ---- - -## ๐ŸŒ Geographic Restrictions - -Microsoft Rewards availability and terms vary by region: -- Available in select countries only -- Region-specific earning rates -- Local laws may apply -- Check your local regulations - -**By using this software, you confirm:** -1. Microsoft Rewards is available in your region -2. You understand the risks of automation -3. You accept full responsibility for your actions -4. You will not use this for commercial purposes - ---- - -## ๐Ÿ“ž Contact & Reporting - -**Questions about licensing?** -Open an issue at: https://github.com/LightZirconite/Microsoft-Rewards-Rewi/issues - -**Found a security issue?** -See: SECURITY.md - -**General discussion?** -Join Discord: https://discord.gg/kn3695Kx32 - ---- - -**Last Updated:** October 2025 -**Applies to:** Microsoft Rewards Script V2.1.5 and later - -**BY USING THIS SOFTWARE, YOU ACKNOWLEDGE THAT YOU HAVE READ AND UNDERSTOOD THESE NOTICES.** +For issues, questions, or contributions: +https://github.com/Light60-1/Microsoft-Rewards-Bot diff --git a/README.md b/README.md index 8ae8037..7b3dfea 100644 --- a/README.md +++ b/README.md @@ -1,353 +1,247 @@ -# Microsoft-Rewards-Rewi +
-[![Discord](https://img.shields.io/badge/๐Ÿ’ฌ_Join_Discord-7289DA?style=for-the-badge&logo=discord)](https://discord.gg/kn3695Kx32) -[![GitHub](https://img.shields.io/badge/โญ_Star_Project-yellow?style=for-the-badge&logo=github)](https://github.com/LightZirconite/Microsoft-Rewards-Rewi) +Microsoft Rewards Bot Logo + +# Microsoft Rewards Bot + +**Automate your Microsoft Rewards points collection effortlessly** + +[![Discord](https://img.shields.io/badge/๐Ÿ’ฌ_Join_Discord-7289DA?style=for-the-badge&logo=discord)](https://discord.gg/h6Z69ZPPCz) +[![GitHub](https://img.shields.io/badge/โญ_Star_Project-yellow?style=for-the-badge&logo=github)](https://github.com/Light60-1/Microsoft-Rewards-Bot) +[![Version](https://img.shields.io/badge/version-2.51.0-blue?style=for-the-badge)](https://github.com/Light60-1/Microsoft-Rewards-Bot/releases) +[![License](https://img.shields.io/badge/license-CC_BY--NC--SA_4.0-green?style=for-the-badge)](LICENSE) + +
--- -# ๐Ÿš€ Quick Setup (Recommended) +## About -**Easiest way to get started โ€” download and run:** +This TypeScript-based automation bot helps you maximize your **Microsoft Rewards** points by automatically completing daily tasks, searches, quizzes, and promotional offers. Designed with sophisticated anti-detection measures and human-like behavior patterns to ensure safe, reliable operation. + +### โœจ Key Features + +- ๏ฟฝ **Automated Searches** โ€” Desktop and mobile Bing searches with natural patterns +- ๐Ÿ“… **Daily Activities** โ€” Quizzes, polls, daily sets, and punch cards +- ๐Ÿค– **Human-like Behavior** โ€” Advanced humanization system to avoid detection +- ๐Ÿ›ก๏ธ **Risk Management** โ€” Built-in ban detection and prediction with ML algorithms +- ๐Ÿ“Š **Analytics Dashboard** โ€” Track performance and points collection over time +- โฐ **Smart Scheduling** โ€” Built-in scheduler with timezone support +- ๐Ÿ”” **Notifications** โ€” Discord webhooks and NTFY push alerts +- ๐Ÿณ **Docker Support** โ€” Easy containerized deployment +- ๐Ÿ” **Multi-Account** โ€” Manage multiple accounts with parallel execution +- ๐ŸŒ **Proxy Support** โ€” Optional proxy configuration for enhanced privacy + +--- + +## ๐Ÿš€ Quick Start + +### Prerequisites + +- **Node.js 20+** (version 22 recommended) โ€” [Download here](https://nodejs.org/) +- **Git** for cloning the repository +- **Microsoft account(s)** with email and password + +### Installation + +**The automated setup script handles everything for you:** 1. **Clone the repository:** ```bash - git clone https://github.com/LightZirconite/Microsoft-Rewards-Rewi.git - cd Microsoft-Rewards-Rewi + git clone https://github.com/Light60-1/Microsoft-Rewards-Bot.git + cd Microsoft-Rewards-Bot ``` 2. **Run the setup script:** - - * **Windows:** double-click `setup/setup.bat` or run it from a command prompt - * **Linux / macOS / WSL:** + - **Windows:** Double-click `setup/setup.bat` or run in PowerShell: + ```powershell + .\setup\setup.bat + ``` + - **Linux / macOS / WSL:** ```bash bash setup/setup.sh ``` - * **Alternative (any platform):** + - **Or use npm:** ```bash npm run setup ``` -3. **Follow the setup prompts.** The script will: - * Rename `accounts.example.jsonc` โ†’ `accounts.jsonc` - * Ask for Microsoft account credentials - * Remind you to review `config.jsonc` - * Install dependencies (`npm install`) - * Build the project (`npm run build`) - * Optionally start the script +3. **The setup wizard will:** + - โœ… Create and configure `accounts.jsonc` with your credentials + - โœ… Install all dependencies automatically + - โœ… Build the TypeScript project + - โœ… Optionally start the script immediately -**That's it โ€” the setup script handles the rest.** +**That's it! You're ready to start earning points.** ๐ŸŽ‰ --- -# โš™๏ธ Advanced Setup Options +## ๐Ÿ“š Documentation -### Nix Users +For detailed configuration, advanced features, and troubleshooting, visit our comprehensive documentation: -1. Install Nix from [https://nixos.org/](https://nixos.org/) -2. Run: - ```bash - ./run.sh - ``` +**๐Ÿ‘‰ [Complete Documentation](docs/index.md)** -### Manual Setup (if setup script fails) +### Quick Links -1. Copy `src/accounts.example.jsonc` โ†’ `src/accounts.jsonc` and add your accounts. -2. Edit `src/config.jsonc` as needed. -3. Install dependencies: - ```bash - npm install - ``` -4. Build: - ```bash - npm run build - ``` -5. Start: - ```bash - npm run start - ``` +| Topic | Description | +|-------|-------------| +| **[Getting Started](docs/getting-started.md)** | Detailed installation and first-run guide | +| **[Configuration](docs/config.md)** | Complete configuration options reference | +| **[Accounts & 2FA](docs/accounts.md)** | Setting up accounts with TOTP authentication | +| **[Scheduling](docs/schedule.md)** | Automated daily execution setup | +| **[Docker Deployment](docs/docker.md)** | Running in containers | +| **[Humanization](docs/humanization.md)** | Anti-detection and natural behavior | +| **[Notifications](docs/conclusionwebhook.md)** | Discord webhooks and NTFY setup | +| **[Proxy Setup](docs/proxy.md)** | Configuring proxies for privacy | +| **[Diagnostics](docs/diagnostics.md)** | Troubleshooting and debugging | --- -# ๐Ÿณ Docker Setup (Experimental) +## ๏ฟฝ Docker Quick Start -**Before starting:** +For containerized deployment with automatic scheduling: -* Remove local `/node_modules` and `/dist` if you previously built. -* Remove old Docker volumes when upgrading from older versions. -* You can reuse older `accounts.jsonc`. +```bash +# Ensure accounts.jsonc exists in src/ +docker compose up -d -**Quick Docker (recommended for scheduling):** - -1. Clone the repository and configure `accounts.jsonc` (or rename from `accounts.example.jsonc`). -2. Ensure `config.jsonc` has `"headless": true` in browser settings. -3. Edit `compose.yaml`: - * Set `TZ` (timezone) - * **Choose scheduling mode:** - * **Option A (default):** Built-in scheduler โ€” configure `schedule` in `config.jsonc` - * **Option B (cron):** Uncomment `USE_CRON: "true"` and set `CRON_SCHEDULE` - * Optional: `RUN_ON_START=true` (runs once immediately on container start) -4. Start: - ```bash - docker compose up -d - ``` -5. Monitor: - ```bash - docker logs -f microsoft-rewards-script - ``` - -### Scheduling Options - -**Built-in Scheduler (Default):** -```yaml -# In docker-compose.yml - no cron variables needed -environment: - TZ: "Europe/Paris" +# View logs +docker logs -f microsoft-rewards-script ``` + +**๐Ÿ“– [Full Docker Guide](docs/docker.md)** + +--- + +## โš™๏ธ Configuration Highlights + +The script works great with default settings, but you can customize everything in `src/config.jsonc`: + ```jsonc -// In config.jsonc { + "humanization": { + "enabled": true, // Enable natural behavior patterns + "stopOnBan": true // Stop on ban detection + }, "schedule": { - "enabled": true, - "time24": "09:00", - "timeZone": "Europe/Paris" + "enabled": true, // Built-in scheduler + "time24": "09:00", // Daily run time + "timeZone": "Europe/Paris" // Your timezone + }, + "workers": { + "doDesktopSearch": true, // Desktop Bing searches + "doMobileSearch": true, // Mobile Bing searches + "doDailySet": true, // Daily tasks and quizzes + "doMorePromotions": true, // Promotional offers + "doPunchCards": true // Multi-day challenges + }, + "execution": { + "clusters": 1, // Parallel account processing + "runOnZeroPoints": false // Skip when no points available } } ``` -**Native Cron (Traditional):** -```yaml -# In docker-compose.yml -environment: - TZ: "Europe/Paris" - USE_CRON: "true" - CRON_SCHEDULE: "0 9,16,21 * * *" # 9 AM, 4 PM, 9 PM - RUN_ON_START: "true" -``` - -Use [crontab.guru](https://crontab.guru) for cron syntax help. - -**See [Docker Documentation](docs/docker.md) for detailed setup and troubleshooting.** +**๐Ÿ“– [Complete Configuration Guide](docs/config.md)** --- -# ๐Ÿ“‹ Usage Notes +## ๐ŸŽฏ What Gets Automated -* **Headless=false cleanup:** If you stop the script without closing browser windows, use Task Manager or run `npm run kill-chrome-win` (Windows) to close leftover instances. -* **Scheduling advice:** Run at least once or twice daily. Use `"runOnZeroPoints": false` in config to skip runs when no points are available. -* **Multiple accounts:** Use `clusters` in `config.jsonc` to run accounts in parallel. -* **Built-in scheduler:** Enable `schedule.enabled` in `config.jsonc` to run automatically without external cron jobs. +The script automatically completes: + +- โœ… **Desktop Searches** โ€” 30+ searches on Bing (desktop user-agent) +- โœ… **Mobile Searches** โ€” 20+ searches on Bing (mobile user-agent) +- โœ… **Daily Set** โ€” Quizzes, polls, and daily activities +- โœ… **More Activities** โ€” Promotional tasks and special offers +- โœ… **Punch Cards** โ€” Multi-day challenges and bonus tasks +- โœ… **Daily Check-in** โ€” Simple check-in for bonus points +- โœ… **Read to Earn** โ€” Article reading tasks + +All while maintaining **natural behavior patterns** to minimize detection risk. --- -# โš™๏ธ Configuration Reference +## ๐Ÿ’ก Usage Tips -Edit `src/config.jsonc` to customize behavior. See the [full configuration documentation](docs/config.md) for detailed explanations. - -
-Core Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `baseURL` | Microsoft Rewards URL | `https://rewards.bing.com` | -| `sessionPath` | Session/fingerprint storage | `sessions` | -| `browser.headless` | Run browser in background | `false` | -| `browser.globalTimeout` | Max timeout for operations | `30s` | -| `execution.parallel` | Run mobile/desktop tasks at once | `false` | -| `execution.runOnZeroPoints` | Run when no points available | `false` | -| `execution.clusters` | Concurrent account instances | `1` | -| `execution.passesPerRun` | How many times to process each account | `3` | - -
- -
-Fingerprint Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `fingerprinting.saveFingerprint.mobile` | Reuse mobile fingerprint | `true` | -| `fingerprinting.saveFingerprint.desktop` | Reuse desktop fingerprint | `true` | - -
- -
-Task Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `workers.doDailySet` | Complete daily set | `true` | -| `workers.doMorePromotions` | Complete promotional offers | `true` | -| `workers.doPunchCards` | Complete punchcard tasks | `true` | -| `workers.doDesktopSearch` | Perform desktop searches | `true` | -| `workers.doMobileSearch` | Perform mobile searches | `true` | -| `workers.doDailyCheckIn` | Complete daily check-in | `true` | -| `workers.doReadToEarn` | Complete read-to-earn tasks | `true` | -| `workers.bundleDailySetWithSearch` | Run desktop searches after Daily Set | `true` | - -
- -
-Search Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `search.useLocalQueries` | Use locale-specific query sources | `true` | -| `search.settings.useGeoLocaleQueries` | Use region-specific queries | `true` | -| `search.settings.scrollRandomResults` | Random scrolling on results | `true` | -| `search.settings.clickRandomResults` | Random link clicks | `true` | -| `search.settings.retryMobileSearchAmount` | Mobile retry attempts | `2` | -| `search.settings.delay.min` | Minimum delay between searches | `1min` | -| `search.settings.delay.max` | Maximum delay between searches | `5min` | - -
- -
-Query Diversity Engine - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `queryDiversity.enabled` | Multi-source query generation | `true` | -| `queryDiversity.sources` | Available query sources | `["google-trends", "reddit", "local-fallback"]` | -| `queryDiversity.maxQueriesPerSource` | Max queries per source | `10` | -| `queryDiversity.cacheMinutes` | Cache duration in minutes | `30` | - -
- -
-Humanization & Natural Behavior - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `humanization.enabled` | Enable human-like behavior patterns | `true` | -| `humanization.stopOnBan` | Stop processing accounts on ban detection | `true` | -| `humanization.immediateBanAlert` | Send immediate alert on ban | `true` | -| `humanization.actionDelay.min` | Minimum action delay (ms) | `500` | -| `humanization.actionDelay.max` | Maximum action delay (ms) | `2200` | -| `humanization.gestureMoveProb` | Mouse gesture probability | `0.65` | -| `humanization.gestureScrollProb` | Scroll gesture probability | `0.4` | -| `vacation.enabled` | Monthly vacation mode | `true` | -| `vacation.minDays` | Minimum vacation days per month | `2` | -| `vacation.maxDays` | Maximum vacation days per month | `4` | - -
- -
-Risk Management & Security - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `riskManagement.enabled` | Dynamic delay adjustment | `true` | -| `riskManagement.autoAdjustDelays` | Auto-adjust delays on risk detection | `true` | -| `riskManagement.stopOnCritical` | Stop on critical risk level | `false` | -| `riskManagement.banPrediction` | ML-based ban prediction | `true` | -| `riskManagement.riskThreshold` | Risk threshold (0-100) | `75` | - -
- -
-Scheduling (Built-in) - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `schedule.enabled` | Enable built-in scheduler | `false` | -| `schedule.useAmPm` | Use 12-hour time format | `false` | -| `schedule.time12` | Time in 12-hour format | `9:00 AM` | -| `schedule.time24` | Time in 24-hour format | `09:00` | -| `schedule.timeZone` | IANA timezone | `Europe/Paris` | -| `schedule.runImmediatelyOnStart` | Run on process start | `false` | - -
- -
-Job State Management - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `jobState.enabled` | Save state to avoid duplicate work | `true` | -| `jobState.dir` | Custom state directory | `""` | - -
- -
-Proxy Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `proxy.proxyGoogleTrends` | Proxy Google Trends requests | `true` | -| `proxy.proxyBingTerms` | Proxy Bing Terms requests | `true` | - -
- -
-Notification Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `webhook.enabled` | Enable Discord webhook | `false` | -| `webhook.url` | Discord webhook URL | `""` | -| `conclusionWebhook.enabled` | Summary-only webhook | `false` | -| `conclusionWebhook.url` | Summary webhook URL | `""` | -| `ntfy.enabled` | Enable NTFY notifications | `false` | -| `ntfy.url` | NTFY server URL | `""` | -| `ntfy.topic` | NTFY topic | `rewards` | -| `ntfy.authToken` | NTFY auth token | `""` | - -
- -
-Logging & Diagnostics - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `logging.excludeFunc` | Exclude log categories | `["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"]` | -| `logging.webhookExcludeFunc` | Exclude from webhook logs | `["SEARCH-CLOSE-TABS", "LOGIN-NO-PROMPT", "FLOW"]` | -| `logging.redactEmails` | Redact email addresses in logs | `true` | -| `diagnostics.enabled` | Capture diagnostic data | `true` | -| `diagnostics.saveScreenshot` | Save screenshots on failure | `true` | -| `diagnostics.saveHtml` | Save HTML on failure | `true` | -| `diagnostics.maxPerRun` | Max diagnostics per run | `2` | -| `diagnostics.retentionDays` | Days to keep diagnostics | `7` | - -
- -
-Analytics - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `analytics.enabled` | Performance dashboard tracking | `true` | -| `analytics.retentionDays` | Data retention period | `30` | -| `analytics.exportMarkdown` | Generate markdown reports | `true` | -| `analytics.webhookSummary` | Send analytics via webhook | `true` | - -
- -
-Update Settings - -| Setting | Description | Default | -| ------- | ----------- | ------- | -| `update.git` | Enable git auto-update | `true` | -| `update.docker` | Enable docker auto-update | `false` | -| `update.scriptPath` | Custom updater script path | `setup/update/update.mjs` | -| `update.autoUpdateConfig` | Auto-merge config changes | `true` | -| `update.autoUpdateAccounts` | Auto-merge account changes | `true` | - -
+- **Run regularly:** Set up the built-in scheduler for daily automation +- **Use humanization:** Always keep `humanization.enabled: true` for safety +- **Monitor logs:** Check for ban warnings and adjust settings if needed +- **Multiple accounts:** Use the `clusters` setting to run accounts in parallel +- **Start small:** Test with one account before scaling up +- **Review diagnostics:** Enable screenshot/HTML capture for troubleshooting --- -# ๐Ÿ“š Documentation +## ๐Ÿ†˜ Getting Help -For detailed information about configuration, features, and advanced usage, please refer to the documentation in the `docs/` folder. Start with `docs/index.md` for an overview and navigation to specific topics. +- ๐Ÿ’ฌ **[Join our Discord](https://discord.gg/h6Z69ZPPCz)** โ€” Community support and updates +- ๐Ÿ“– **[Documentation Hub](docs/index.md)** โ€” Complete guides and references +- ๐Ÿ› **[Report Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)** โ€” Bug reports and feature requests +- ๐Ÿ“ง **[Diagnostics Guide](docs/diagnostics.md)** โ€” Troubleshooting steps --- -# โš ๏ธ Disclaimer +## โš ๏ธ Disclaimer -**Use at your own risk.** Automation may violate Microsoft's Terms of Service and can result in suspension or permanent banning of your Microsoft Rewards account. This project is provided **for educational purposes only**. The developer is **not responsible** for any actions taken by Microsoft against your account. +**Use at your own risk.** This script automates interactions with Microsoft Rewards, which may violate [Microsoft's Terms of Service](https://www.microsoft.com/en-us/servicesagreement/). Using automation tools can result in: + +- โš ๏ธ Account suspension or permanent ban +- ๐Ÿšซ Loss of accumulated points and rewards +- ๐Ÿ”’ Restriction from future participation + +**This project is provided for educational and research purposes only.** The developers and contributors: +- Are **not responsible** for any actions taken by Microsoft against your account +- Do **not encourage** violating terms of service +- Provide **no guarantees** regarding account safety + +**Use responsibly and at your own discretion.** --- -# ๐Ÿ“„ License +## ๐Ÿ“„ License -This project is licensed under a **PROPRIETARY** license. See [LICENSE](LICENSE) for details. +This project is licensed under the **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License**. + +**You may:** +- โœ… Use for personal, non-commercial purposes +- โœ… Modify the code for your own use +- โœ… Share with others (with same restrictions) +- โœ… Submit improvements via pull requests + +**You may NOT:** +- โŒ Use for commercial purposes +- โŒ Sell or monetize this software +- โŒ Remove license/copyright notices + +See [LICENSE](LICENSE) for complete terms. + +--- + +## ๐Ÿ™ Acknowledgments + +- Built with [Playwright](https://playwright.dev/) and [ReBrowser](https://github.com/rebrowser/rebrowser-playwright) +- Thanks to all [contributors](https://github.com/Light60-1/Microsoft-Rewards-Bot/graphs/contributors) +- Community support via [Discord](https://discord.gg/h6Z69ZPPCz) + +--- + +## ๐ŸŒŸ Support the Project + +If you find this project helpful: + +- โญ **Star the repository** on GitHub +- ๐Ÿ’ฌ **Join our Discord** community +- ๐Ÿ› **Report bugs** and suggest features +- ๐Ÿ“– **Contribute** to documentation + +--- + +
+ +**Made with โค๏ธ by the community** + +[Documentation](docs/index.md) โ€ข [Discord](https://discord.gg/h6Z69ZPPCz) โ€ข [Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues) + +
diff --git a/SECURITY.md b/SECURITY.md index 7e431c0..416e25e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -352,8 +352,8 @@ Security contributors will be credited in the changelog (with permission).โ€” St ## ๐Ÿ“ž Contact - **Security issues:** Open a GitHub issue with "Security" label -- **General support:** [Discord community](https://discord.gg/kn3695Kx32) -- **Bug reports:** [GitHub Issues](https://github.com/LightZirconite/Microsoft-Rewards-Rewi/issues) +- **General support:** [Discord community](https://discord.gg/h6Z69ZPPCz) +- **Bug reports:** [GitHub Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues) --- diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 0000000..8e9ad77 --- /dev/null +++ b/assets/README.md @@ -0,0 +1,82 @@ +# ๐ŸŽจ Assets Directory + +This folder contains visual assets for the Microsoft Rewards Script project. + +## ๐Ÿ“ Contents + +### `logo.png` +**The official project mascot and logo** + +- **Dimensions:** Original size preserved +- **Format:** PNG with transparency +- **Usage:** + - README.md header (200px width) + - Documentation pages (120-150px width) + - Social media and promotional materials + +## ๐Ÿ“ Logo Usage Guidelines + +### Recommended Sizes + +| Context | Recommended Width | Example | +|---------|------------------|---------| +| Main README | 200px | `` | +| Documentation pages | 120-150px | `` | +| GitHub social preview | 1200x630px | Resize as needed | +| Favicon | 32x32px or 64x64px | Convert to ICO format | + +### Usage Examples + +**In README.md (root):** +```markdown +
+Microsoft Rewards Script Logo +
+``` + +**In docs/*.md files:** +```markdown +
+Microsoft Rewards Script Logo +
+``` + +**In HTML:** +```html +Microsoft Rewards Script Logo +``` + +## ๐ŸŽจ Design Notes + +The logo represents the project's mascot and serves as the visual identity for: +- Documentation headers +- Community presence (Discord, etc.) +- Project branding +- Social media + +## ๐Ÿ“ Attribution + +Logo created for the Microsoft Rewards Script project. + +## ๐Ÿ”’ Usage Rights + +This logo is part of the Microsoft Rewards Script project and follows the same [LICENSE](../LICENSE) as the project code. + +--- + +## ๐Ÿ–ผ๏ธ Future Assets + +This directory may be expanded to include: +- Screenshots for documentation +- Diagrams and flowcharts +- Favicon files +- Social media banners +- Tutorial images + +--- + +
+ +**[โ† Back to README](../README.md)** + +
diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000..188f4b0 Binary files /dev/null and b/assets/logo.png differ diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 0000000..f5268ae --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,325 @@ +# โ“ Frequently Asked Questions (FAQ) + +
+ +**Quick answers to common questions** + +[๐Ÿ“š Back to Documentation Hub](index.md) + +
+ +--- + +## ๐Ÿ“‹ Table of Contents + +- [General Questions](#general-questions) +- [Installation & Setup](#installation--setup) +- [Configuration](#configuration) +- [Troubleshooting](#troubleshooting) +- [Safety & Security](#safety--security) +- [Features & Functionality](#features--functionality) + +--- + +## General Questions + +### What is this project? + +This is an automated script that completes Microsoft Rewards tasks to earn points. It uses Playwright to control a browser and perform searches, quizzes, and other activities automatically. + +### Is this legal? + +The script itself is legal software. However, using automation tools may violate Microsoft's Terms of Service, which could result in account suspension or ban. **Use at your own risk.** + +### Will I get banned? + +There's always a risk when using automation. The script includes humanization features and anti-detection measures to reduce risk, but we cannot guarantee account safety. Many users have used it successfully for extended periods, but results vary. + +### How many points can I earn per day? + +Typically 150-300 points per day per account, depending on available activities and your region. This varies by country and account type. + +### How long does a run take? + +Usually 5-15 minutes per account, depending on: +- Number of searches required +- Available daily activities +- Humanization delay settings +- Internet speed + +--- + +## Installation & Setup + +### What are the system requirements? + +- **Node.js 20+** (version 22 recommended) +- **2 GB RAM minimum** (4 GB recommended) +- **Windows, macOS, or Linux** +- **Stable internet connection** + +### Do I need to install a browser? + +No! Playwright downloads Chromium automatically during setup. You don't need Chrome or Edge installed. + +### Can I use this on a Raspberry Pi? + +Yes, but performance may be limited. Headless mode is recommended for resource-constrained devices. + +### How do I update to the latest version? + +```bash +# Using Git +git pull origin main +npm install +npm run build + +# Or run the update script +npm run setup +``` + +### Can I run this on a server 24/7? + +Yes! Use Docker with the built-in scheduler for unattended operation. See the [Docker Guide](docker.md). + +--- + +## Configuration + +### Where do I put my Microsoft credentials? + +In `src/accounts.jsonc`. Copy `src/accounts.example.jsonc` as a template. + +โš ๏ธ **Never commit this file to Git!** It should be in `.gitignore`. + +### Do I need to enable 2FA/TOTP? + +Not required, but **highly recommended** for: +- Automated login without manual code entry +- Better security +- 24/7 scheduler compatibility + +See the [Accounts & 2FA Guide](accounts.md). + +### How do I schedule automatic runs? + +Enable the built-in scheduler in `src/config.jsonc`: + +```jsonc +{ + "schedule": { + "enabled": true, + "time24": "09:00", + "timeZone": "America/New_York" + } +} +``` + +Then run: `npm run start:schedule` + +See the [Scheduling Guide](schedule.md). + +### Can I run multiple accounts? + +Yes! Add multiple entries to `accounts.jsonc` and adjust the `clusters` setting: + +```jsonc +{ + "execution": { + "clusters": 2 // Run 2 accounts in parallel + } +} +``` + +### Should I use headless mode? + +- **Headless (`true`):** Background operation, required for Docker, lower resource usage +- **Non-headless (`false`):** See what the bot is doing, easier debugging + +For production/automated runs, use headless mode. + +--- + +## Troubleshooting + +### The script won't start + +1. **Check Node.js version:** `node --version` (must be 20+) +2. **Rebuild:** `npm run build` +3. **Check accounts.jsonc:** Valid JSON format? +4. **Review logs:** Look for error messages + +### Login fails constantly + +- **Wrong credentials:** Double-check email/password +- **2FA issues:** Verify TOTP secret is correct +- **Account locked:** Check Microsoft account security page +- **Recovery email mismatch:** Ensure recovery email matches account settings + +See [Accounts Troubleshooting](accounts.md#troubleshooting). + +### No points are earned + +- **Already completed:** Tasks may be done for the day +- **Region restrictions:** Some activities vary by country +- **Account level:** New accounts may have limited activities +- **Ban/suspension:** Check account status on Microsoft Rewards + +### Browser crashes or freezes + +- **Increase timeout:** Adjust `browser.globalTimeout` in config +- **Reduce load:** Lower `clusters` value +- **Update dependencies:** `npm install` +- **Check system resources:** Ensure adequate RAM + +### Docker container exits immediately + +1. **Check logs:** `docker logs microsoft-rewards-script` +2. **Verify mounts:** Ensure `accounts.jsonc` exists and is mounted +3. **Check config:** `headless` must be `true` for Docker +4. **Review environment variables:** Timezone, cron settings + +See [Docker Troubleshooting](docker.md#troubleshooting). + +### "Command not found" errors + +Ensure you're in the project directory and have run `npm install`. + +--- + +## Safety & Security + +### How can I minimize ban risk? + +1. **Enable humanization:** Keep `humanization.enabled: true` +2. **Use reasonable delays:** Don't make searches too fast +3. **Run consistently:** Daily runs at similar times +4. **Start with one account:** Test before scaling +5. **Monitor for warnings:** Check logs regularly +6. **Use vacation mode:** Enable random off-days + +See [Humanization Guide](humanization.md). + +### Is my data safe? + +- **No telemetry:** The script doesn't send data anywhere except Microsoft +- **Local storage:** Credentials stay on your machine +- **Open source:** You can audit the code + +See [Security Policy](../SECURITY.md). + +### Can Microsoft detect this? + +The script uses advanced anti-detection techniques: +- Browser fingerprinting management +- Human-like mouse movements and delays +- Natural search patterns +- Randomized timing + +However, **no detection evasion is foolproof**. Always use at your own risk. + +### Should I use a proxy? + +Not required for most users. Consider a proxy if: +- Running many accounts from one IP +- Want extra privacy layer +- Your IP is rate-limited + +See [Proxy Guide](proxy.md). + +--- + +## Features & Functionality + +### What tasks does the script complete? + +- โœ… Desktop searches (30+) +- โœ… Mobile searches (20+) +- โœ… Daily set activities (quizzes, polls) +- โœ… More activities (promotional offers) +- โœ… Punch cards (multi-day challenges) +- โœ… Daily check-in +- โœ… Read to Earn articles + +Configure in `config.jsonc` under `workers`. + +### Can I disable specific activities? + +Yes! In `config.jsonc`: + +```jsonc +{ + "workers": { + "doDesktopSearch": true, + "doMobileSearch": false, // Disable mobile searches + "doDailySet": true, + "doMorePromotions": false // Disable promotions + } +} +``` + +### How does the query generation work? + +The script uses multiple sources for search queries: +- **Google Trends:** Current trending topics +- **Reddit:** Popular posts from various subreddits +- **Local fallback:** Pre-defined queries + +This creates diverse, natural-looking search patterns. + +See [Query Diversity Engine](config.md#query-diversity-engine). + +### What is "Buy Mode"? + +A manual purchase assistant that monitors your points in real-time while you redeem rewards. Not fully automatedโ€”you control the redemption. + +See [Buy Mode Guide](buy-mode.md). + +### Can I get notifications? + +Yes! The script supports: +- **Discord Webhooks:** Summary messages in Discord +- **NTFY:** Push notifications to mobile + +See [Notifications Guide](conclusionwebhook.md) and [NTFY Guide](ntfy.md). + +### What are "clusters"? + +Clusters allow running multiple accounts in parallel using separate processes. Higher values = more accounts simultaneously (but more resource usage). + +```jsonc +{ + "execution": { + "clusters": 3 // Run 3 accounts at once + } +} +``` + +### How does the risk management system work? + +The script includes: +- **Ban detection:** Monitors for suspension indicators +- **Risk prediction:** ML-based ban probability scoring +- **Adaptive delays:** Automatically adjusts timing based on risk +- **Emergency stop:** Halts execution on critical risk + +See [Configuration Guide](config.md#risk-management--security). + +--- + +## Still Have Questions? + +- ๐Ÿ’ฌ **[Join our Discord](https://discord.gg/h6Z69ZPPCz)** โ€” Ask the community +- ๐Ÿ“– **[Documentation Hub](index.md)** โ€” Browse all guides +- ๐Ÿ› **[GitHub Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)** โ€” Report problems +- ๐Ÿ“ง **[Diagnostics Guide](diagnostics.md)** โ€” Debug issues + +--- + +
+ +**Didn't find your answer?** [Ask on Discord](https://discord.gg/h6Z69ZPPCz) or [open an issue](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)! + +[โ† Back to Documentation](index.md) + +
diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..0d88cb4 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,103 @@ +# ๐Ÿ“š Documentation Directory + +This folder contains comprehensive documentation for the Microsoft Rewards Script project. + +## ๐Ÿ“‹ Documentation Structure + +### ๐Ÿš€ Getting Started +- **[index.md](index.md)** โ€” Documentation hub and navigation +- **[getting-started.md](getting-started.md)** โ€” Complete setup guide for beginners +- **[FAQ.md](FAQ.md)** โ€” Frequently asked questions + +### โš™๏ธ Configuration +- **[config.md](config.md)** โ€” Complete configuration reference +- **[accounts.md](accounts.md)** โ€” Account setup and 2FA/TOTP configuration +- **[schedule.md](schedule.md)** โ€” Automated scheduling setup + +### ๐Ÿ”ง Features +- **[humanization.md](humanization.md)** โ€” Anti-detection and natural behavior +- **[jobstate.md](jobstate.md)** โ€” Job state management +- **[buy-mode.md](buy-mode.md)** โ€” Manual purchase monitoring + +### ๐Ÿ”” Integrations +- **[conclusionwebhook.md](conclusionwebhook.md)** โ€” Discord webhook setup +- **[ntfy.md](ntfy.md)** โ€” NTFY push notification setup +- **[proxy.md](proxy.md)** โ€” Proxy configuration + +### ๐Ÿณ Deployment +- **[docker.md](docker.md)** โ€” Docker deployment guide +- **[update.md](update.md)** โ€” Update and upgrade guide + +### ๐Ÿ› ๏ธ Maintenance +- **[diagnostics.md](diagnostics.md)** โ€” Troubleshooting and debugging +- **[security.md](security.md)** โ€” Security and privacy guidelines +- **[git-conflict-resolution.md](git-conflict-resolution.md)** โ€” Resolving Git conflicts + +## ๐ŸŽฏ Quick Navigation by Use Case + +### "I just installed the script" +1. [Getting Started](getting-started.md) +2. [Accounts Setup](accounts.md) +3. [Basic Configuration](config.md#quick-start) + +### "I want automated daily runs" +1. [Scheduling](schedule.md) +2. [Docker Deployment](docker.md) (optional) +3. [Humanization](humanization.md) + +### "I need notifications" +- [Discord Webhooks](conclusionwebhook.md) +- [NTFY Push Alerts](ntfy.md) + +### "Something's not working" +1. [FAQ](FAQ.md) +2. [Diagnostics](diagnostics.md) +3. [Security Guide](security.md) (if banned) + +## ๐Ÿ“ Documentation Standards + +All documentation in this project follows these principles: + +- **Clear and concise** โ€” No unnecessary jargon +- **Example-driven** โ€” Code samples for every feature +- **Up-to-date** โ€” Reflects current functionality +- **Well-structured** โ€” Easy navigation with TOC +- **Beginner-friendly** โ€” Assumes minimal technical knowledge + +## ๐Ÿค Contributing to Documentation + +Documentation improvements are always welcome! See [CONTRIBUTING.md](../CONTRIBUTING.md) for guidelines. + +### How to Help + +- Fix typos or unclear instructions +- Add missing examples +- Improve explanations +- Translate to other languages +- Update outdated information + +## ๐Ÿ“– Documentation Format + +All docs use **Markdown** format with: +- Clear hierarchical headings +- Code blocks with syntax highlighting +- Tables for configuration options +- Emojis for visual navigation +- Internal links for cross-references + +## ๐Ÿ”— External Resources + +- **[Main README](../README.md)** โ€” Project overview +- **[Contributing Guide](../CONTRIBUTING.md)** โ€” How to contribute +- **[Security Policy](../SECURITY.md)** โ€” Security and privacy +- **[Changelog](../CHANGELOG.md)** โ€” Version history + +--- + +
+ +**[Start Reading โ†’](index.md)** + +Need help? [Join our Discord](https://discord.gg/h6Z69ZPPCz) + +
diff --git a/docs/getting-started.md b/docs/getting-started.md index e32e279..96cbcfc 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,7 +1,9 @@ -# ๐Ÿš€ Getting Started -
+Microsoft Rewards Script Logo + +# ๐Ÿš€ Getting Started + **๐ŸŽฏ From zero to earning Microsoft Rewards points in minutes** *Complete setup guide for beginners* @@ -123,7 +125,7 @@ Once running, explore these guides: **Login issues?** โ†’ [Accounts & 2FA Setup](./accounts.md) **Want Docker?** โ†’ [Container Guide](./docker.md) -**Found a bug?** [Report it here](https://github.com/TheNetsky/Microsoft-Rewards-Script/issues) +**Found a bug?** [Report it here](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues) **Need support?** [Join our Discord](https://discord.gg/KRBFxxsU) --- diff --git a/docs/git-conflict-resolution.md b/docs/git-conflict-resolution.md index c243ab6..5261578 100644 --- a/docs/git-conflict-resolution.md +++ b/docs/git-conflict-resolution.md @@ -167,9 +167,9 @@ cp src/accounts.json ~/backup-accounts.json # Nuclear option: fresh clone cd .. -rm -rf Microsoft-Rewards-Rewi -git clone https://github.com/Light60-1/Microsoft-Rewards-Rewi.git -cd Microsoft-Rewards-Rewi +rm -rf Microsoft-Rewards-Bot +git clone https://github.com/Light60-1/Microsoft-Rewards-Bot.git +cd Microsoft-Rewards-Bot # Restore your files cp ~/backup-config.jsonc src/config.jsonc diff --git a/docs/index.md b/docs/index.md index ebcba98..0466aa2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,15 @@ +
+ +Microsoft Rewards Script Logo + # ๐Ÿ“š Documentation Hub **Complete guide to automate Microsoft Rewards** +[โ† Back to README](../README.md) + +
+ --- ## ๐Ÿš€ Start Here (In Order) @@ -34,6 +42,9 @@ ## ๐Ÿ“– All Documentation +### Quick References +- [โ“ FAQ (Frequently Asked Questions)](./FAQ.md) โ€” Quick answers to common questions + ### Configuration & Setup - [Complete Configuration Reference](./config.md) โ€” All options explained - [Scheduler Setup](./schedule.md) โ€” Automated timing @@ -50,9 +61,10 @@ **Technical issue?** โ†’ [Diagnostics Guide](./diagnostics.md) **Login problem?** โ†’ [Accounts & 2FA](./accounts.md#troubleshooting) -**Banned?** โ†’ [Security Guide](./security.md) +**Banned?** โ†’ [Security Guide](./security.md) +**Want to contribute?** โ†’ [Contributing Guide](../CONTRIBUTING.md) -**Join Discord** โ†’ [Support Server](https://discord.gg/kn3695Kx32) +**Join Discord** โ†’ [Support Server](https://discord.gg/h6Z69ZPPCz) --- diff --git a/package-lock.json b/package-lock.json index e4f73e5..2f1dc05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { - "name": "microsoft-rewards-rewi", - "version": "2.50.5", + "name": "microsoft-rewards-script", + "version": "2.51.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "microsoft-rewards-rewi", - "version": "2.50.3", - "license": "PROPRIETARY", + "name": "microsoft-rewards-script", + "version": "2.51.0", + "license": "SEE LICENSE IN LICENSE", "dependencies": { "axios": "^1.8.4", "chalk": "^4.1.2", @@ -38,7 +38,7 @@ }, "funding": { "type": "github", - "url": "https://github.com/sponsors/Light60-1" + "url": "https://github.com/sponsors/TheNetsky" } }, "node_modules/@cspotcode/source-map-support": { diff --git a/package.json b/package.json index 2fea4c3..d799c3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "microsoft-rewards-rewi", - "version": "2.50.5", + "name": "microsoft-rewards-script", + "version": "2.51.0", "description": "Automatically do tasks for Microsoft Rewards but in TS!", "private": true, "main": "index.js", @@ -9,12 +9,12 @@ }, "repository": { "type": "git", - "url": "https://github.com/Light60-1/Microsoft-Rewards-Rewi.git" + "url": "https://github.com/Light60-1/Microsoft-Rewards-Bot.git" }, "bugs": { - "url": "https://github.com/Light60-1/Microsoft-Rewards-Rewi/issues" + "url": "https://github.com/Light60-1/Microsoft-Rewards-Bot/issues" }, - "homepage": "https://github.com/Light60-1/Microsoft-Rewards-Rewi#readme", + "homepage": "https://github.com/Light60-1/Microsoft-Rewards-Bot#readme", "scripts": { "clean": "rimraf dist", "pre-build": "npm i && npm run clean && node -e \"process.exit(process.env.SKIP_PLAYWRIGHT_INSTALL?0:1)\" || npx playwright install chromium", @@ -29,7 +29,7 @@ "prepare": "npm run build", "setup": "node ./setup/update/setup.mjs", "kill-chrome-win": "powershell -Command \"Get-Process | Where-Object { $_.MainModule.FileVersionInfo.FileDescription -eq 'Google Chrome for Testing' } | ForEach-Object { Stop-Process -Id $_.Id -Force }\"", - "create-docker": "docker build -t microsoft-rewards-rewi-docker ." + "create-docker": "docker build -t microsoft-rewards-script-docker ." }, "keywords": [ "Bing Rewards", @@ -42,9 +42,9 @@ ], "author": "Light60-1", "contributors": [ - "Microsoft-Rewards-Rewi (https://github.com/Light60-1/Microsoft-Rewards-Rewi)" + "Microsoft Rewards Bot Community (https://github.com/Light60-1/Microsoft-Rewards-Bot/graphs/contributors)" ], - "license": "PROPRIETARY", + "license": "CC-BY-NC-SA-4.0", "funding": { "type": "github", "url": "https://github.com/sponsors/Light60-1" diff --git a/src/config.jsonc b/src/config.jsonc index 6e267aa..926d1fe 100644 --- a/src/config.jsonc +++ b/src/config.jsonc @@ -109,8 +109,8 @@ "retryMobileSearchAmount": 2, // Delay between searches "delay": { - "min": "40sec", - "max": "1min" + "min": "3min", + "max": "5min" } } }, diff --git a/src/constants.ts b/src/constants.ts index b3c1f2a..a461325 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -85,5 +85,5 @@ export const DISCORD = { COLOR_ORANGE: 0xFFA500, COLOR_BLUE: 0x3498DB, COLOR_GREEN: 0x00D26A, - AVATAR_URL: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png?ex=68fbd83e&is=68fa86be&hm=ccddee9430de1fff90c1c3750907c13a60d1da29f13617a5dbbdc642f243f5b9&=&format=png&quality=lossless&width=968&height=968' + AVATAR_URL: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076' } as const diff --git a/src/functions/Login.ts b/src/functions/Login.ts index c04d77b..d530a23 100644 --- a/src/functions/Login.ts +++ b/src/functions/Login.ts @@ -1256,7 +1256,7 @@ export class Login { } private getDocsUrl(anchor?: string) { - const base = process.env.DOCS_BASE?.trim() || 'https://github.com/LightZirconite/Microsoft-Rewards-Script-Private/blob/v2/docs/security.md' + const base = process.env.DOCS_BASE?.trim() || 'https://github.com/Light60-1/Microsoft-Rewards-Bot/blob/main/docs/security.md' const map: Record = { 'recovery-email-mismatch':'#recovery-email-mismatch', 'we-cant-sign-you-in':'#we-cant-sign-you-in-blocked' diff --git a/src/functions/activities/SearchOnBing.ts b/src/functions/activities/SearchOnBing.ts index 4d7d0ce..1661704 100644 --- a/src/functions/activities/SearchOnBing.ts +++ b/src/functions/activities/SearchOnBing.ts @@ -62,7 +62,7 @@ export class SearchOnBing extends Workers { // Fetch from the repo directly so the user doesn't need to redownload the script for the new activities const response = await this.bot.axios.request({ method: 'GET', - url: 'https://raw.githubusercontent.com/LightZirconite/Microsoft-Rewards-Rewi/refs/heads/main/src/functions/queries.json' + url: 'https://raw.githubusercontent.com/Light60-1/Microsoft-Rewards-Bot/refs/heads/main/src/functions/queries.json' }) queries = response.data } diff --git a/src/index.ts b/src/index.ts index 4ee9e16..33a34b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -414,73 +414,47 @@ export class MicrosoftRewardsBot { if (this.config.clusters > 1 && !cluster.isPrimary) return const banner = ` - โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— - โ•‘ โ•‘ - โ•‘ โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ•‘ - โ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ• โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘ - โ•‘ โ–ˆโ–ˆโ•”โ–ˆโ–ˆโ–ˆโ–ˆโ•”โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•‘ โ–ˆโ•— โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘ - โ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ• โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ•‘ - โ•‘ โ–ˆโ–ˆโ•‘ โ•šโ•โ• โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ•šโ–ˆโ–ˆโ–ˆโ•”โ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ•‘ - โ•‘ โ•šโ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•šโ•โ•โ• โ•šโ•โ• โ•‘ - โ•‘ โ•‘ - โ•‘ TypeScript โ€ข Playwright โ€ข Intelligent Automation โ•‘ - โ•‘ โ•‘ - โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— + โ•‘ โ•‘ + โ•‘ Microsoft Rewards Bot v${this.getVersion().padEnd(5)} โ•‘ + โ•‘ Automated Points Collection System โ•‘ + โ•‘ โ•‘ + โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• ` const buyModeBanner = ` - โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— - โ•‘ โ•‘ - โ•‘ โ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•— โ•‘ - โ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ• โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•”โ• โ•‘ - โ•‘ โ–ˆโ–ˆโ•”โ–ˆโ–ˆโ–ˆโ–ˆโ•”โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ•‘ - โ•‘ โ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ•šโ–ˆโ–ˆโ•”โ• โ•‘ - โ•‘ โ–ˆโ–ˆโ•‘ โ•šโ•โ• โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ• โ–ˆโ–ˆโ•‘ โ•‘ - โ•‘ โ•šโ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•‘ - โ•‘ โ•‘ - โ•‘ Manual Purchase Mode โ€ข Passive Monitoring โ•‘ - โ•‘ โ•‘ - โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• + โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•— + โ•‘ โ•‘ + โ•‘ Microsoft Rewards Bot - Manual Mode โ•‘ + โ•‘ Interactive Browsing Session โ•‘ + โ•‘ โ•‘ + โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• ` - // Read package version and build banner info - const pkgPath = path.join(__dirname, '../', 'package.json') - let version = 'unknown' - try { - if (fs.existsSync(pkgPath)) { - const raw = fs.readFileSync(pkgPath, 'utf-8') - const pkg = JSON.parse(raw) - version = pkg.version || version - } - } catch { - // Ignore version read errors - } - - // Display appropriate banner based on mode + const version = this.getVersion() const displayBanner = this.buyMode.enabled ? buyModeBanner : banner console.log(displayBanner) - console.log('='.repeat(80)) + console.log('โ”€'.repeat(60)) if (this.buyMode.enabled) { - console.log(` Version: ${version} | Process: ${process.pid} | Buy Mode: Active`) - console.log(` Target: ${this.buyMode.email || 'First account'} | Documentation: buy-mode.md`) + console.log(` Version ${version} | PID ${process.pid} | Manual Session`) + console.log(` Target: ${this.buyMode.email || 'First account'}`) } else { - console.log(` Version: ${version} | Process: ${process.pid} | Clusters: ${this.config.clusters}`) - // Replace visibility/parallel with concise enabled feature status + console.log(` Version ${version} | PID ${process.pid} | Workers: ${this.config.clusters}`) + const upd = this.config.update || {} const updTargets: string[] = [] if (upd.git !== false) updTargets.push('Git') if (upd.docker) updTargets.push('Docker') if (updTargets.length > 0) { - console.log(` Update: ${updTargets.join(', ')}`) + console.log(` Auto-Update: ${updTargets.join(', ')}`) } const sched = this.config.schedule || {} const schedEnabled = !!sched.enabled if (!schedEnabled) { - console.log(' Schedule: OFF') + console.log(' Scheduler: Disabled') } else { - // Determine active format + time string to display const tz = sched.timeZone || 'UTC' let formatName = '' let timeShown = '' @@ -490,22 +464,33 @@ export class MicrosoftRewardsBot { const time24Val = typeof srec['time24'] === 'string' ? String(srec['time24']) : undefined if (useAmPmVal === true) { - formatName = 'AM/PM' + formatName = '12h' timeShown = time12Val || sched.time || '9:00 AM' } else if (useAmPmVal === false) { formatName = '24h' timeShown = time24Val || sched.time || '09:00' } else { - // Back-compat: infer from provided fields if possible if (time24Val && time24Val.trim()) { formatName = '24h'; timeShown = time24Val } - else if (time12Val && time12Val.trim()) { formatName = 'AM/PM'; timeShown = time12Val } - else { formatName = 'legacy'; timeShown = sched.time || '09:00' } + else if (time12Val && time12Val.trim()) { formatName = '12h'; timeShown = time12Val } + else { formatName = 'auto'; timeShown = sched.time || '09:00' } } - console.log(` Schedule: ON โ€” ${formatName} โ€ข ${timeShown} โ€ข TZ=${tz}`) + console.log(` Scheduler: ${timeShown} (${formatName}, ${tz})`) } } - console.log('='.repeat(80) + '\n') - } + console.log('โ”€'.repeat(60) + '\n') + } + + private getVersion(): string { + try { + const pkgPath = path.join(__dirname, '../', 'package.json') + if (fs.existsSync(pkgPath)) { + const raw = fs.readFileSync(pkgPath, 'utf-8') + const pkg = JSON.parse(raw) + return pkg.version || '2.51.0' + } + } catch { /* ignore */ } + return '2.51.0' + } // Return summaries (used when clusters==1) public getSummaries() { @@ -895,10 +880,10 @@ export class MicrosoftRewardsBot { } // If any account is flagged compromised, do NOT exit; keep the process alive so the browser stays open if (this.compromisedModeActive || this.globalStandby.active) { - log('main','SECURITY','Compromised or banned detected. Global standby engaged: we will NOT proceed to other accounts until resolved. Keeping process alive. Press CTRL+C to exit when done. Security check by @Light','warn','yellow') + log('main','SECURITY','Security alert active. Process kept alive for manual review. Press CTRL+C to exit when done.','warn','yellow') // Periodic heartbeat with cleanup on exit const standbyInterval = setInterval(() => { - log('main','SECURITY','Still in standby: session(s) held open for manual recovery / review...','warn','yellow') + log('main','SECURITY','Standby mode active: sessions kept open for review...','warn','yellow') }, 5 * 60 * 1000) // Cleanup on process exit @@ -993,13 +978,13 @@ export class MicrosoftRewardsBot { if (this.compromisedModeActive) { // User wants the page to remain open for manual recovery. Do not proceed to tasks. const reason = this.compromisedReason || 'security-issue' - log(this.isMobile, 'SECURITY', `Account flagged as compromised (${reason}). Leaving the browser open and skipping all activities for ${account.email}. Security check by @Light`, 'warn', 'yellow') + log(this.isMobile, 'SECURITY', `Account security check failed (${reason}). Browser kept open for manual review: ${account.email}`, 'warn', 'yellow') try { const { ConclusionWebhook } = await import('./util/ConclusionWebhook') await ConclusionWebhook( this.config, - '๐Ÿ” Security Alert (Post-Login)', - `**Account:** ${account.email}\n**Reason:** ${reason}\n**Action:** Leaving browser open; skipping tasks\n\n_Security check by @Light_`, + '๐Ÿ” Security Check', + `**Account:** ${account.email}\n**Status:** ${reason}\n**Action:** Browser kept open, activities paused`, undefined, 0xFFAA00 ) @@ -1096,13 +1081,13 @@ export class MicrosoftRewardsBot { await this.login.login(this.homePage, account.email, account.password, account.totp) if (this.compromisedModeActive) { const reason = this.compromisedReason || 'security-issue' - log(this.isMobile, 'SECURITY', `Account flagged as compromised (${reason}). Leaving mobile browser open and skipping mobile activities for ${account.email}. Security check by @Light`, 'warn', 'yellow') + log(this.isMobile, 'SECURITY', `Mobile security check failed (${reason}). Browser kept open for manual review: ${account.email}`, 'warn', 'yellow') try { const { ConclusionWebhook } = await import('./util/ConclusionWebhook') await ConclusionWebhook( this.config, - '๐Ÿ” Security Alert (Mobile)', - `**Account:** ${account.email}\n**Reason:** ${reason}\n**Action:** Leaving mobile browser open; skipping tasks\n\n_Security check by @Light_`, + '๐Ÿ” Security Check (Mobile)', + `**Account:** ${account.email}\n**Status:** ${reason}\n**Action:** Browser kept open, mobile activities paused`, undefined, 0xFFAA00 ) @@ -1313,14 +1298,14 @@ export class MicrosoftRewardsBot { const globalStatsValue = globalLines.join('\n') const fields: { name: string; value: string; inline?: boolean }[] = [ - { name: '๐Ÿ“Š Run Totals', value: globalStatsValue, inline: false } + { name: '๐Ÿ“Š Summary', value: globalStatsValue, inline: false } ] if (accountChunks.length === 0) { - fields.push({ name: '๐Ÿงพ Account Overview', value: '_No account results recorded_', inline: false }) + fields.push({ name: '๐Ÿ“‹ Accounts', value: '_No results recorded_', inline: false }) } else { accountChunks.forEach((chunk, index) => { - const name = accountChunks.length === 1 ? '๐Ÿงพ Account Overview' : `๐Ÿงพ Account Overview (part ${index + 1})` + const name = accountChunks.length === 1 ? '๐Ÿ“‹ Accounts' : `๐Ÿ“‹ Accounts (${index + 1}/${accountChunks.length})` fields.push({ name, value: ['```', ...chunk, '```'].join('\n'), inline: false }) }) } @@ -1329,8 +1314,8 @@ export class MicrosoftRewardsBot { if (conclusionWebhookEnabled || ntfyEnabled || webhookEnabled) { await ConclusionWebhook( cfg, - '๐ŸŽฏ MS Rewi - Daily Summary', - `**v${version}** โ€ข Run ${this.runId}`, + 'โœ… Daily Run Complete', + `**v${version}** โ€ข ${this.runId}`, fields, accountsWithErrors > 0 ? DISCORD.COLOR_ORANGE : DISCORD.COLOR_GREEN ) @@ -1427,7 +1412,7 @@ export class MicrosoftRewardsBot { const { ConclusionWebhook } = await import('./util/ConclusionWebhook') await ConclusionWebhook( this.config, - '๐Ÿ“ˆ Analytics Snapshot', + '๐Ÿ“ˆ Performance Report', ['```markdown', markdown, '```'].join('\n'), undefined, DISCORD.COLOR_BLUE @@ -1474,13 +1459,13 @@ export class MicrosoftRewardsBot { const { ConclusionWebhook } = await import('./util/ConclusionWebhook') await ConclusionWebhook( this.config, - '๐Ÿšจ Global Security Standby Engaged', - `@everyone\n\n**Account:** ${email}\n**Reason:** ${reason}\n**Action:** Pausing all further accounts. We will not proceed until this is resolved.\n\n_Security check by @Light_`, + '๐Ÿšจ Critical Security Alert', + `@everyone\n\n**Account:** ${email}\n**Issue:** ${reason}\n**Status:** All accounts paused pending review`, undefined, DISCORD.COLOR_RED ) } catch (e) { - log('main','ALERT',`Failed to send standby alert: ${e instanceof Error ? e.message : e}`,'warn') + log('main','ALERT',`Failed to send alert: ${e instanceof Error ? e.message : e}`,'warn') } } } diff --git a/src/util/ConclusionWebhook.ts b/src/util/ConclusionWebhook.ts index 0f6d106..7291de0 100644 --- a/src/util/ConclusionWebhook.ts +++ b/src/util/ConclusionWebhook.ts @@ -51,7 +51,7 @@ export async function ConclusionWebhook( color: color || 0x0078D4, timestamp: new Date().toISOString(), thumbnail: { - url: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png' + url: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076' } } @@ -60,8 +60,8 @@ export async function ConclusionWebhook( } const payload: WebhookPayload = { - username: 'MS Rewi ๐ŸŽฎ', - avatar_url: 'https://media.discordapp.net/attachments/1430643658788438144/1430644205344133290/rewi-v1.png', + username: 'MS Rewi', + avatar_url: 'https://media.discordapp.net/attachments/1421163952972369931/1434299121098952958/v2.50.5.png?ex=6907d2a6&is=69068126&hm=1a11362e2c2c40fc9f8b67762abf17e5bae72e4b70567d4331de195a880ba043&=&format=png&quality=lossless&width=1024&height=1076', embeds: [embed] }