Files
discord-markov/discord_markov/__main__.py
Alek Ratzloff 7f9714263d 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>
2022-10-22 18:00:52 -07:00

90 lines
2.7 KiB
Python

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)