mirror of
https://github.com/LightZirconite/Microsoft-Rewards-Bot.git
synced 2026-01-09 17:06:15 +00:00
Add comprehensive FAQ and README documentation for Microsoft Rewards Script
- Created FAQ.md with detailed answers to common questions regarding the project, installation, configuration, troubleshooting, safety, and features. - Established README.md to serve as a documentation hub, outlining the structure and providing quick navigation links to various guides and resources.
This commit is contained in:
347
CONTRIBUTING.md
Normal file
347
CONTRIBUTING.md
Normal file
@@ -0,0 +1,347 @@
|
||||
# 🤝 Contributing to Microsoft Rewards Script
|
||||
|
||||
<div align="center">
|
||||
|
||||
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
|
||||
|
||||
**Thank you for considering contributing to this project!**
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📋 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<number> {
|
||||
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<any> {
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**Thank you for contributing!** 🎉
|
||||
|
||||
[Back to README](README.md) • [Documentation](docs/index.md) • [Discord](https://discord.gg/h6Z69ZPPCz)
|
||||
|
||||
</div>
|
||||
109
LICENSE
109
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
|
||||
|
||||
142
NOTICE
142
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
|
||||
|
||||
480
README.md
480
README.md
@@ -1,353 +1,247 @@
|
||||
# Microsoft-Rewards-Rewi
|
||||
<div align="center">
|
||||
|
||||
[](https://discord.gg/kn3695Kx32)
|
||||
[](https://github.com/LightZirconite/Microsoft-Rewards-Rewi)
|
||||
<img src="assets/logo.png" alt="Microsoft Rewards Bot Logo" width="200"/>
|
||||
|
||||
# Microsoft Rewards Bot
|
||||
|
||||
**Automate your Microsoft Rewards points collection effortlessly**
|
||||
|
||||
[](https://discord.gg/h6Z69ZPPCz)
|
||||
[](https://github.com/Light60-1/Microsoft-Rewards-Bot)
|
||||
[](https://github.com/Light60-1/Microsoft-Rewards-Bot/releases)
|
||||
[](LICENSE)
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
# 🚀 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
|
||||
|
||||
- <20> **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)
|
||||
## <20> 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.
|
||||
|
||||
<details>
|
||||
<summary><b>Core Settings</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Fingerprint Settings</b></summary>
|
||||
|
||||
| Setting | Description | Default |
|
||||
| ------- | ----------- | ------- |
|
||||
| `fingerprinting.saveFingerprint.mobile` | Reuse mobile fingerprint | `true` |
|
||||
| `fingerprinting.saveFingerprint.desktop` | Reuse desktop fingerprint | `true` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Task Settings</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Search Settings</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Query Diversity Engine</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Humanization & Natural Behavior</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Risk Management & Security</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Scheduling (Built-in)</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Job State Management</b></summary>
|
||||
|
||||
| Setting | Description | Default |
|
||||
| ------- | ----------- | ------- |
|
||||
| `jobState.enabled` | Save state to avoid duplicate work | `true` |
|
||||
| `jobState.dir` | Custom state directory | `""` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Proxy Settings</b></summary>
|
||||
|
||||
| Setting | Description | Default |
|
||||
| ------- | ----------- | ------- |
|
||||
| `proxy.proxyGoogleTrends` | Proxy Google Trends requests | `true` |
|
||||
| `proxy.proxyBingTerms` | Proxy Bing Terms requests | `true` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Notification Settings</b></summary>
|
||||
|
||||
| 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 | `""` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Logging & Diagnostics</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Analytics</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Update Settings</b></summary>
|
||||
|
||||
| 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` |
|
||||
|
||||
</details>
|
||||
- **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
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**Made with ❤️ by the community**
|
||||
|
||||
[Documentation](docs/index.md) • [Discord](https://discord.gg/h6Z69ZPPCz) • [Issues](https://github.com/Light60-1/Microsoft-Rewards-Bot/issues)
|
||||
|
||||
</div>
|
||||
|
||||
@@ -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)
|
||||
|
||||
---
|
||||
|
||||
|
||||
82
assets/README.md
Normal file
82
assets/README.md
Normal file
@@ -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 | `<img src="assets/logo.png" width="200"/>` |
|
||||
| Documentation pages | 120-150px | `<img src="../assets/logo.png" width="120"/>` |
|
||||
| GitHub social preview | 1200x630px | Resize as needed |
|
||||
| Favicon | 32x32px or 64x64px | Convert to ICO format |
|
||||
|
||||
### Usage Examples
|
||||
|
||||
**In README.md (root):**
|
||||
```markdown
|
||||
<div align="center">
|
||||
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" width="200"/>
|
||||
</div>
|
||||
```
|
||||
|
||||
**In docs/*.md files:**
|
||||
```markdown
|
||||
<div align="center">
|
||||
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
|
||||
</div>
|
||||
```
|
||||
|
||||
**In HTML:**
|
||||
```html
|
||||
<img src="assets/logo.png" alt="Microsoft Rewards Script Logo" style="width: 200px; display: block; margin: 0 auto;">
|
||||
```
|
||||
|
||||
## 🎨 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
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**[← Back to README](../README.md)**
|
||||
|
||||
</div>
|
||||
BIN
assets/logo.png
Normal file
BIN
assets/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 683 KiB |
325
docs/FAQ.md
Normal file
325
docs/FAQ.md
Normal file
@@ -0,0 +1,325 @@
|
||||
# ❓ Frequently Asked Questions (FAQ)
|
||||
|
||||
<div align="center">
|
||||
|
||||
**Quick answers to common questions**
|
||||
|
||||
[📚 Back to Documentation Hub](index.md)
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 📋 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
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**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)
|
||||
|
||||
</div>
|
||||
103
docs/README.md
Normal file
103
docs/README.md
Normal file
@@ -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
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**[Start Reading →](index.md)**
|
||||
|
||||
Need help? [Join our Discord](https://discord.gg/h6Z69ZPPCz)
|
||||
|
||||
</div>
|
||||
@@ -1,7 +1,9 @@
|
||||
# 🚀 Getting Started
|
||||
|
||||
<div align="center">
|
||||
|
||||
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="120"/>
|
||||
|
||||
# 🚀 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)
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../assets/logo.png" alt="Microsoft Rewards Script Logo" width="150"/>
|
||||
|
||||
# 📚 Documentation Hub
|
||||
|
||||
**Complete guide to automate Microsoft Rewards**
|
||||
|
||||
[← Back to README](../README.md)
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 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)
|
||||
|
||||
---
|
||||
|
||||
|
||||
12
package-lock.json
generated
12
package-lock.json
generated
@@ -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": {
|
||||
|
||||
16
package.json
16
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"
|
||||
|
||||
@@ -109,8 +109,8 @@
|
||||
"retryMobileSearchAmount": 2,
|
||||
// Delay between searches
|
||||
"delay": {
|
||||
"min": "40sec",
|
||||
"max": "1min"
|
||||
"min": "3min",
|
||||
"max": "5min"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<string,string> = {
|
||||
'recovery-email-mismatch':'#recovery-email-mismatch',
|
||||
'we-cant-sign-you-in':'#we-cant-sign-you-in-blocked'
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
125
src/index.ts
125
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')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user