Port over local repo
This commit is contained in:
commit
676b6aa8ea
21 changed files with 1121 additions and 0 deletions
95
src/bot.py
Normal file
95
src/bot.py
Normal file
|
@ -0,0 +1,95 @@
|
|||
# General libraries needed
|
||||
import os
|
||||
import asyncio
|
||||
|
||||
# Discord libraries needed
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
# Helper that identifies intents
|
||||
from helpers.intent import match_intent
|
||||
|
||||
# Helper for logging
|
||||
from helpers.logger import get_logger
|
||||
|
||||
# Initiate logger
|
||||
logger = get_logger("bxt")
|
||||
|
||||
class DiscordBot:
|
||||
def __init__(self):
|
||||
# Load logger
|
||||
self.logger = logger
|
||||
self.logger.info("🚀 Logger successfully initialized")
|
||||
|
||||
# Get log level desired
|
||||
self.LOG_LEVEL = os.environ.get('LOG_LEVEL', 'DEBUG').upper()
|
||||
|
||||
self.DISCORD_TOKEN = os.environ.get('DISCORD_TOKEN')
|
||||
self.REDIS_SERVER = os.environ.get('REDIS_SERVER', 'localhost')
|
||||
self.REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
|
||||
self.REDIS_CONF_DB = os.environ.get('REDIS_CONF_DB', '1')
|
||||
self.REDIS_DATA_DB = os.environ.get('REDIS_DATA_DB', '0')
|
||||
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
intents.guilds = True
|
||||
intents.members = True
|
||||
intents.voice_states = True
|
||||
|
||||
self.bot = commands.Bot(command_prefix="!", intents=intents)
|
||||
|
||||
# Register events
|
||||
self.bot.event(self.on_message)
|
||||
self.bot.event(self.on_ready)
|
||||
|
||||
async def on_message(self, message):
|
||||
if message.author == self.bot.user:
|
||||
return
|
||||
|
||||
bot_mention = f"<@{self.bot.user.id}>"
|
||||
content = message.content.strip()
|
||||
|
||||
# Only handle if in guild and message mentions bot at start or end,
|
||||
# or if it's a DM (no guild)
|
||||
if message.guild and not (content.startswith(bot_mention) or content.endswith(bot_mention)):
|
||||
return
|
||||
|
||||
# Remove bot mention from content
|
||||
content = content.replace(bot_mention, "").strip()
|
||||
|
||||
# Split message content into lines and process each
|
||||
lines = [line.strip() for line in content.split('\n') if line.strip()]
|
||||
|
||||
ctx = await self.bot.get_context(message)
|
||||
|
||||
handled_any = False
|
||||
for line in lines:
|
||||
func, doc = match_intent(line)
|
||||
if func:
|
||||
handled_any = True
|
||||
try:
|
||||
await func(ctx, doc)
|
||||
except Exception as e:
|
||||
self.logger.debug(f"Error running intent handler: {e}")
|
||||
else:
|
||||
await message.channel.send(f"Sorry, I didn't understand that: `{line}`")
|
||||
|
||||
await self.bot.process_commands(message)
|
||||
|
||||
async def on_ready(self):
|
||||
self.logger.info(f"Logged in as {self.bot.user} (ID: {self.bot.user.id})")
|
||||
|
||||
async def start(self):
|
||||
# Load cogs (adjust the names/paths to your setup)
|
||||
await self.bot.load_extension("cogs.cogcontrol")
|
||||
await self.bot.load_extension("cogs.admin")
|
||||
await self.bot.load_extension("cogs.guild")
|
||||
await self.bot.load_extension("cogs.autovoicechannel")
|
||||
|
||||
await self.bot.start(self.DISCORD_TOKEN)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
discord_bot = DiscordBot()
|
||||
asyncio.run(discord_bot.start())
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue