Initial commit
The bot is currently working under 3.10, need to check out 3.9 next. Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
89
discord_markov/__main__.py
Normal file
89
discord_markov/__main__.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import logging
|
||||
import logging.handlers
|
||||
import os
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
import sys
|
||||
|
||||
import discord
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from .client import Client
|
||||
from .markov import Chain
|
||||
|
||||
################################################################################
|
||||
# Environment
|
||||
################################################################################
|
||||
load_dotenv()
|
||||
# More common values
|
||||
token = os.getenv("TOKEN")
|
||||
log = os.getenv("LOG", "stderr")
|
||||
loglevel = os.getenv("LOGLEVEL", "INFO")
|
||||
db_path = Path(os.getenv("DB_PATH", "markov.db"))
|
||||
|
||||
# Less common values
|
||||
sql_path = Path(os.getenv("SQL_PATH", "db.sql"))
|
||||
|
||||
if not token:
|
||||
print("ERROR: TOKEN environment variable not set. Exiting.")
|
||||
sys.exit(1)
|
||||
|
||||
if not sql_path.exists:
|
||||
print("ERROR: could not find database SQL file")
|
||||
sys.exit(1)
|
||||
|
||||
if loglevel.upper() not in ("DEBUG", "INFO", "WARNING", "WARN", "ERROR", "CRITICAL"):
|
||||
print(f"WARNING: unknown loglevel {loglevel} - defaulting to INFO")
|
||||
loglevel = "INFO"
|
||||
|
||||
|
||||
################################################################################
|
||||
# Logging setup
|
||||
################################################################################
|
||||
handler: logging.Handler
|
||||
|
||||
if log is None or log.lower() == "stderr":
|
||||
handler = logging.StreamHandler(sys.stderr)
|
||||
elif log.lower() == "stdout":
|
||||
handler = logging.StreamHandler(sys.stdout)
|
||||
else:
|
||||
# 5 megabytes per log
|
||||
MAX_LOG_SIZE = 5 * (2**20)
|
||||
# Keep up to 5 logs
|
||||
MAX_LOG_BACKUP = 5
|
||||
handler = logging.handlers.RotatingFileHandler(
|
||||
log, maxBytes=MAX_LOG_SIZE, backupCount=MAX_LOG_BACKUP
|
||||
)
|
||||
|
||||
# logging.basicConfig(
|
||||
# handlers=[handler],
|
||||
# format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||
# level=getattr(logging, loglevel),
|
||||
# )
|
||||
discord.utils.setup_logging(handler=handler, level=getattr(logging, loglevel))
|
||||
|
||||
db = sqlite3.connect(db_path)
|
||||
|
||||
################################################################################
|
||||
# Create the database
|
||||
################################################################################
|
||||
cursor = db.cursor()
|
||||
with open(sql_path) as fp:
|
||||
cursor.executescript(fp.read())
|
||||
cursor.close()
|
||||
db.commit()
|
||||
|
||||
################################################################################
|
||||
# Set up markov chain
|
||||
################################################################################
|
||||
chain = Chain(order=2, reply_chance=0.01, db=db)
|
||||
|
||||
################################################################################
|
||||
# Client setup and bot run
|
||||
################################################################################
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
intents.members = True
|
||||
|
||||
client = Client(db=db, chain=chain, intents=intents)
|
||||
client.run(token)
|
||||
Reference in New Issue
Block a user