diff --git a/bot/app.py b/bot/app.py index 3ee763b..6ab298b 100644 --- a/bot/app.py +++ b/bot/app.py @@ -1,3 +1,4 @@ +import time import discord, asyncio import os from discord.ext import commands @@ -11,13 +12,22 @@ intents.dm_messages = True app = commands.Bot(command_prefix=",", intents=intents) app.db = database.controller.Database("database.db") - # load cogs async def load_cogs(): for filename in os.listdir("bot/commands"): if filename.endswith(".py"): await app.load_extension(f"bot.commands.{filename[:-3]}") +async def time_to_bereal(): + # Get subscribers + subscribers = app.db.get_subscribers() + + # Send message to all subscribers + for subscriber in subscribers: + user = await app.fetch_user(subscriber.user_id) + await user.send(f"# :warning: It's time to BeReal.\nOpen BeReal. to post what you are doing right now.\n") + +app.time_to_bereal = time_to_bereal @app.event async def on_ready(): diff --git a/database/controller.py b/database/controller.py index cb18825..bdd0bb0 100644 --- a/database/controller.py +++ b/database/controller.py @@ -24,7 +24,7 @@ class Database: def get_subscribers(self): cursor = db.cursor() - cursor.execute("SELECT user_id FROM subscribers") + cursor.execute("SELECT * FROM subscribers") result = cursor.fetchall() return [Subscriber(id=row[0], user_id=row[1], since=row[2]) for row in result] diff --git a/main.py b/main.py index 6d5c2a0..bbfaa12 100644 --- a/main.py +++ b/main.py @@ -4,14 +4,15 @@ from dotenv import load_dotenv load_dotenv() from bot.app import app -from webserver.webapp import webapp +from webserver.webapp import WebServer PORT = os.environ.get("PORT") @app.listen() async def on_ready(): - app.loop.create_task(webapp.run_task("0.0.0.0", PORT)) + webapp = WebServer(app) + webapp.start(loop=app.loop) app.run(os.environ.get("DISCORD_TOKEN")) diff --git a/webserver/page/bereal_time.py b/webserver/page/bereal_time.py deleted file mode 100644 index c151c17..0000000 --- a/webserver/page/bereal_time.py +++ /dev/null @@ -1,19 +0,0 @@ -from quart import Blueprint, render_template, jsonify, request - -bereal_time = Blueprint("bereal_time", __name__, template_folder="templates") - - -@bereal_time.route("/post", methods=["POST"]) -async def time_to_bereal(): - # May be coming from those IPs: - # 66.228.40.136 (us-east1.dbsrv.net) - # 2600:3c03::f03c:92ff:febe:a263/64 - # fe80::f03c:92ff:febe:a263/64 - - data = await request.get_json() - return {"error": 200, "message": "Success"} - - -@bereal_time.errorhandler(405) -async def method_not_allowed(e): - return jsonify({"error": 405, "message": "Method not allowed"}), 405 diff --git a/webserver/webapp.py b/webserver/webapp.py index b217873..c5d54b6 100644 --- a/webserver/webapp.py +++ b/webserver/webapp.py @@ -1,6 +1,32 @@ from quart import Quart +from discord.ext import commands +import asyncio +import os, dotenv -from webserver.page.bereal_time import bereal_time +dotenv.load_dotenv() -webapp = Quart(__name__) -webapp.register_blueprint(bereal_time, url_prefix="/time_to_bereal") +from quart import request, jsonify +class WebServer: + def __init__(self, bot: commands.Bot): + self.bot = bot + + webserver = Quart(__name__) + + @webserver.route("/time_to_bereal/post", methods=["POST"]) + async def time_to_bereal(): + # May be coming from those IPs: + # 66.228.40.136 (us-east1.dbsrv.net) + # 2600:3c03::f03c:92ff:febe:a263/64 + # fe80::f03c:92ff:febe:a263/64 + + data = await request.get_json() + + task = asyncio.create_task(self.bot.time_to_bereal()) # Start asynchronous processing + return jsonify({"error": 200, "message": "Success"}) + + self.webserver = webserver + + def start(self, loop): + loop.create_task(self.webserver.run_task("0.0.0.0", os.environ.get('PORT'), False)) + +