implemented DM when it's time to BeReal.
This commit is contained in:
		
							
								
								
									
										12
									
								
								bot/app.py
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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<t:{int(time.time())}:R>")
 | 
			
		||||
 | 
			
		||||
app.time_to_bereal = time_to_bereal
 | 
			
		||||
 | 
			
		||||
@app.event
 | 
			
		||||
async def on_ready():
 | 
			
		||||
 
 | 
			
		||||
@@ -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]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								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"))
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,6 +1,32 @@
 | 
			
		||||
from quart import Quart
 | 
			
		||||
from discord.ext import commands
 | 
			
		||||
import asyncio
 | 
			
		||||
import os, dotenv
 | 
			
		||||
 | 
			
		||||
dotenv.load_dotenv()
 | 
			
		||||
 | 
			
		||||
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))
 | 
			
		||||
        
 | 
			
		||||
from webserver.page.bereal_time import bereal_time
 | 
			
		||||
        
 | 
			
		||||
webapp = Quart(__name__)
 | 
			
		||||
webapp.register_blueprint(bereal_time, url_prefix="/time_to_bereal")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user