diff --git a/LICENSE b/LICENSE index 48c81d2..79946c7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2025 WiiMart - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -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 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. +MIT License + +Copyright (c) 2025 WiiMart + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +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 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. diff --git a/README.md b/README.md index 4d09f89..4ee0ec5 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,73 @@ -# WiiMart Discord Bot - - - -This is a Discord bot built using the `discord.py` library that provides functionalities for managing and querying error codes related to a specific service. The bot can respond to commands, check the status of a service, and manage error codes stored in a SQLite database. - -## Features - -- Query error messages based on error codes. -- Set and unset the bot's status. -- Check the status of a service. -- Uses SQLite for storing error codes and messages. -- Uses MySQL for managing friend codes. - -## Requirements - -- Python 3.8 or higher -- `discord.py` library -- `python-dotenv` for environment variable management -- `requests` for making HTTP requests -- SQLite for database management (for error codes) -- MySQL connector for managing friend codes - -## Installation - -1. **Clone the repository**: - `git clone https://github.com/WiiMart/WiiMartBot.git` - `cd WiiMartBot` - -2. **Install the required packages**: - `pip install discord.py python-dotenv requests mysql-connector-python` - -3. **Create a `.env` file** in the root directory of your project with the following format: -``` -token=your token here -status="Not Set" -mqlu=mysqluser -mqlp=mysqlpassword -mqld=mysqldb -mqur=mysqlurl -mqpo=mysqlport -``` - -## Usage - -1. **Run the bot**: -`python bot.py` - -2. **Commands**: -- `/status`: Check the current status of the service. -- `/setstatus `: Set the current status of the bot (requires Admin role). -- `/unsetstatus`: Unset the current status of the bot (requires Admin role). -- `/error `: Get the error message linked with the specified error code. -- `/addfc `: Adds your friend code to the lists of friendcodes. -- `/forceaddfc `: Adds the users friendcode to the lists of friendcodes (requires Admin role). -- `/getfc `: Gets the friend code of the specified user. - -## Database Management - -The bot uses a SQLite database to store error codes and their corresponding messages. The database is created and populated automatically when the bot starts. - -The MySQL database is to store friend codes from users. It is not automatically populated, a table with usersfc is needed, with 2 collums, one for the userid as varchar of 20 and one for their friend code as fc as a varcahr of 16. - -### Error Codes Format - -The error codes are defined in the script and can include: -- Standalone codes (e.g., `204013`) -- Ranges (e.g., `204019-204041`), which will be expanded into individual codes. -- Wildcard codes (e.g., `2056XX`), which can match multiple codes. - -*WiiMart is not affiliated with Nintendo or any related parties.* - -*To contact, please send an email to support@wiimart.org* +# WiiMart Discord Bot + + + +This is a Discord bot built using the `discord.py` library that provides functionalities for managing and querying error codes related to a specific service. The bot can respond to commands, check the status of a service, and manage error codes stored in a SQLite database. + +## Features + +- Query error messages based on error codes. +- Set and unset the bot's status. +- Check the status of a service. +- Uses SQLite for storing error codes and messages. +- Uses MySQL for managing friend codes. + +## Requirements + +- Python 3.8 or higher +- `discord.py` library +- `python-dotenv` for environment variable management +- `requests` for making HTTP requests +- SQLite for database management (for error codes) +- MySQL connector for managing friend codes + +## Installation + +1. **Clone the repository**: + `git clone https://github.com/WiiMart/WiiMartBot.git` + `cd WiiMartBot` + +2. **Install the required packages**: + `pip install discord.py python-dotenv requests mysql-connector-python` + +3. **Create a `.env` file** in the root directory of your project with the following format: +``` +token=your token here +status="Not Set" +mqlu=mysqluser +mqlp=mysqlpassword +mqld=mysqldb +mqur=mysqlurl +mqpo=mysqlport +``` + +## Usage + +1. **Run the bot**: +`python bot.py` + +2. **Commands**: +- `/status`: Check the current status of the service. +- `/setstatus `: Set the current status of the bot (requires Admin role). +- `/unsetstatus`: Unset the current status of the bot (requires Admin role). +- `/error `: Get the error message linked with the specified error code. +- `/addfc `: Adds your friend code to the lists of friendcodes. +- `/forceaddfc `: Adds the users friendcode to the lists of friendcodes (requires Admin role). +- `/getfc `: Gets the friend code of the specified user. + +## Database Management + +The bot uses a SQLite database to store error codes and their corresponding messages. The database is created and populated automatically when the bot starts. + +The MySQL database is to store friend codes from users. It is not automatically populated, a table with usersfc is needed, with 2 collums, one for the userid as varchar of 20 and one for their friend code as fc as a varcahr of 16. + +### Error Codes Format + +The error codes are defined in the script and can include: +- Standalone codes (e.g., `204013`) +- Ranges (e.g., `204019-204041`), which will be expanded into individual codes. +- Wildcard codes (e.g., `2056XX`), which can match multiple codes. + +*WiiMart is not affiliated with Nintendo or any related parties.* + +*To contact, please send an email to support@wiimart.org* diff --git a/bot.py b/bot.py index 311eaf2..2bb6218 100644 --- a/bot.py +++ b/bot.py @@ -8,6 +8,7 @@ import logging import os import sqlite3 import mysql.connector +import sys from discord.ext import commands from mysql.connector import Error from dotenv import load_dotenv @@ -19,7 +20,7 @@ class ColoredFormatter(logging.Formatter): """Adds colors to log levels""" COLORS = { 'DEBUG': Fore.CYAN, - 'INFO': Fore.GREEN, + 'INFO': Fore.BLUE, 'WARNING': Fore.YELLOW, 'ERROR': Fore.RED, 'CRITICAL': Fore.RED + Style.BRIGHT @@ -33,10 +34,10 @@ class ColoredFormatter(logging.Formatter): # Your original config with colors added logging.basicConfig( - level=logging.INFO, + level=logging.DEBUG, format='%(levelname)s at %(asctime)s : %(message)s', datefmt='%H:%M:%S', - handlers=[logging.StreamHandler()] + handlers=[logging.StreamHandler(sys.stderr)] ) # Apply the colored formatter @@ -52,7 +53,7 @@ for handler in logger.handlers: TAILSCALE_IP1 = "100.118.134.32" TAILSCALE_IP2 = "100.95.192.63" -LOCK_PORT = 30000 +LOCK_PORT = 30000 TIMEOUT = 5.0 CHECK_INTERVAL = 10 @@ -110,7 +111,7 @@ class LeaderElection: try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) - s.connect((TAILSCALE_IP1, LOCK_PORT)) + s.connect((TAILSCALE_IP2, LOCK_PORT)) return True except (ConnectionRefusedError, socket.timeout, OSError): return False @@ -130,7 +131,7 @@ def health_check(leader_election): try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(TIMEOUT) - s.connect((TAILSCALE_IP2, LOCK_PORT)) + s.connect((TAILSCALE_IP1, LOCK_PORT)) except: # Lost leadership #print("Lost leadership") diff --git a/requirements.txt b/requirements.txt index 63b1b71..12d924b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -discord.py -dotenv -requests -sqlite3 +discord.py +dotenv +requests +sqlite3 colorama \ No newline at end of file