Files
DiscordBot/bot_development.py
T

88 lines
2.9 KiB
Python
Executable File

# 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()