diff --git a/.env b/.env deleted file mode 100644 index e69de29..0000000 diff --git a/.gitignore b/.gitignore index 0c2ad09..6a349bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.env +*.env +*.db \ No newline at end of file diff --git a/bot.py b/bot.py index d21704e..1ba207f 100644 --- a/bot.py +++ b/bot.py @@ -2,6 +2,13 @@ import discord from discord.ext import commands import os from dotenv import load_dotenv +import sqlite3 +import re +import threading +import requests +import time +import sys + class Bot(commands.Bot): def __init__(self, intents: discord.Intents, **kwargs): @@ -17,13 +24,49 @@ bot = Bot(intents=intents) client = discord.Client(intents=intents) token = os.getenv("token") status = os.getenv("status") +url_status = "Unknown" +url = "https://oss-auth.blinklab.com/" +stop_event = threading.Event() + +def matches_wildcard(code, wildcard_code): + pattern = wildcard_code.replace('X', '[0-9]') + return re.fullmatch(pattern, str(code)) is not None + +def get_error_message(code): + # Connect to the SQLite database + conn = sqlite3.connect('error_codes.db') + cursor = conn.cursor() + + # Check for exact matches + cursor.execute('SELECT message FROM error_codes WHERE code = ?', (str(code),)) + result = cursor.fetchone() + + if result: + return f"{code}: {result[0]}" + + # Check for wildcard matches + cursor.execute('SELECT code, message FROM error_codes') + for row in cursor.fetchall(): + if matches_wildcard(code, row[0]): + return f"{code}: {row[1]}" + + return f"{code}: Error code not found." + +def check_url(): + global url_status # Declare the global variable to modify it + try: + response = requests.get(url, verify=False, timeout=10) # Disable SSL verification and set a timeout + url_status = ":green_square: Up" # If we get a response, set status to "Up" + except requests.exceptions.RequestException: + url_status = ":red_square: Down" # If there's an exception, set status to "Down" @bot.hybrid_command(name="status",description="Gets the status of WiiMart") async def statusy(ctx): + check_url() if status == "Not Set": - await ctx.send("The status hasnt been set by an admin yet, please check again later.") + await ctx.send(f"WiiMart Status: {url_status}\nAdmin Status: :person_shrugging: Currently Unset") else: - await ctx.send(f"The Current status is: {status}") + await ctx.send(f"WiiMart Status: {url_status}\nAdmin Status: {status}") @bot.hybrid_command(name="setstatus",description="Sets the current server status to your liking") @commands.has_any_role("Owner", "Admin", "Moderators") @@ -31,6 +74,20 @@ async def setstatus(ctx, stat: str): global status status = stat await ctx.send(f"Status has been set to: {status}") - +@bot.hybrid_command(name="unsetstatus", description="Unsets the current status") +@commands.has_any_role("Owner", "Admin", "Moderators") +async def unset(ctx): + global status + status = "Not Set" + await ctx.send("Status has been unset.") + +@bot.hybrid_command(name="error", description="Gets the error message linked with the shop error code") +async def geterror(ctx, errorcode: commands.Range[int, 204000, 250943]): + try: + errormessage = get_error_message(errorcode) + except ValueError: + errormessage = "Error Code was not found." + await ctx.send(errormessage) + bot.run(token) \ No newline at end of file