# main.py import discord from discord.ext import commands import os from dotenv import load_dotenv from web.app import app from utils.sql_commands import initialize_database import threading def run_web(): try: # Prefer a production-ready WSGI server if available from waitress import serve serve(app, host="0.0.0.0", port=5000) except Exception: # Fall back to Flask dev server for local development only. print( "Warning: Running Flask development server. For production use a WSGI server (gunicorn, waitress, etc.)." ) app.run(debug=False, host="0.0.0.0", port=5000, use_reloader=False) class MyNewHelp(commands.MinimalHelpCommand): async def send_pages(self): destination = self.get_destination() for page in self.paginator.pages: emby = discord.Embed(description=page) await destination.send(embed=emby) class Client(commands.Bot): def __init__(self): super().__init__( command_prefix=["pY ", "PY ", "Py ", "py "], strip_after_prefix=True, case_insensitive=True, intents=discord.Intents.all(), help_command=MyNewHelp(), ) # Set your development guild ID here (as an integer) self.allowed_guild_id = 1381708059600097403 # PLEX self.add_check(self.guild_check) async def setup_hook(self): # overwriting a handler cogs_folder = f"{os.path.abspath(os.path.dirname(__file__))}/implementing" for filename in os.listdir(cogs_folder): if filename.endswith(".py"): try: await self.load_extension(f"implementing.{filename[:-3]}") except Exception as e: print(f"Failed to load {filename}: {e}") await self.tree.sync() print("Loaded cogs") async def on_message(self, message): # Ignore messages from bots if message.author.bot: return # Only respond in the allowed guild if message.guild and message.guild.id == self.allowed_guild_id: await self.process_commands(message) # Optionally, ignore DMs or messages from other guilds async def guild_check(self, ctx): return ctx.guild and ctx.guild.id == self.allowed_guild_id def main(): load_dotenv() initialize_database() client = Client() token = os.getenv("TOKEN") if not token: raise SystemExit("ERROR: TOKEN environment variable not set.") # Only start the web interface if explicitly enabled to avoid # running a dev server inside the bot process by default. if os.getenv("START_WEB") == "1": threading.Thread(target=run_web, daemon=False).start() client.run(token) if __name__ == "__main__": main()