#!/usr/bin/env python3.12 import importlib import urllib.parse import regex import logging import json import os import random import aiosqlite as sqlite3 from typing import Any, Annotated from fastapi import FastAPI, Form, HTTPException from pydantic import BaseModel class RandMsg(FastAPI): def __init__(self, app: FastAPI, util, constants): self.app = app self.util = util self.constants = constants self.endpoint_name = "randmsg" app.add_api_route("/%s/" % self.endpoint_name, self.randmsg_handler, methods=["POST"]) async def randmsg_handler(self): """ Get a randomly generated message """ random.seed() db_rand_selected = random.choice([0, 1, 3]) title_attr = "Unknown" match db_rand_selected: case 0: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "qajoke.db") # For qajoke db db_query = "SELECT id, ('Q: ' || question || '
A: ' || answer) FROM jokes ORDER BY RANDOM() LIMIT 1" # For qajoke db title_attr = "QA Joke DB" case 1: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "randmsg.db") # For randmsg db db_query = "SELECT id, msg FROM msgs WHERE LENGTH(msg) <= 180 ORDER BY RANDOM() LIMIT 1" # For randmsg db title_attr = "Random Msg DB" case 2: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "trump.db") # For Trump Tweet DB db_query = "SELECT id, content FROM tweets ORDER BY RANDOM() LIMIT 1" # For Trump Tweet DB title_attr = "Trump Tweet DB" case 3: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "philo.db") # For Philo DB db_query = "SELECT id, (content || '
- ' || speaker) FROM quotes ORDER BY RANDOM() LIMIT 1" # For Philo DB title_attr = "Philosophical Quotes DB" case 4: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "hate.db") # For Hate DB db_query = """SELECT id, ("" || comment) FROM hate_speech WHERE length(comment) <= 180 ORDER BY RANDOM() LIMIT 1""" title_attr = "Hate Speech DB" case 5: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "rjokes.db") # r/jokes DB db_query = """SELECT id, (title || "
" || body) FROM jokes WHERE score >= 10000 ORDER BY RANDOM() LIMIT 1""" title_attr = "r/jokes DB" case 6: randmsg_db_path = os.path.join("/", "var", "lib", "singerdbs", "donnies.db") # Donnies DB random.seed() twilight_or_mice = random.choice(["twilight", "mice"]) db_query = f"SELECT id, text FROM {twilight_or_mice} ORDER BY RANDOM() LIMIT 1" title_attr = "Donnies DB" async with sqlite3.connect(database=randmsg_db_path, timeout=1) as _db: async with _db.execute(db_query) as _cursor: result = await _cursor.fetchone() (result_id, result_msg) = result result_msg = result_msg.strip() return { "id": result_id, "msg": result_msg, 'title': title_attr }