Add cache to fetch_users (closes #171)
This commit is contained in:
parent
96ac519fde
commit
842896642e
@ -3,9 +3,9 @@ import logging
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from os import getenv, path
|
from os import getenv, path
|
||||||
from typing import Dict, Optional
|
from typing import Dict, Optional, Union
|
||||||
|
|
||||||
from disnake import Asset, Client, Guild
|
from disnake import Asset, Client, Guild, Intents, Member, User
|
||||||
from disnake.guild_scheduled_event import GuildScheduledEvent
|
from disnake.guild_scheduled_event import GuildScheduledEvent
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from ics import Calendar, ContentLine, Event
|
from ics import Calendar, ContentLine, Event
|
||||||
@ -36,13 +36,47 @@ API_BASE_URL = getenv("API_BASE_URL", "https://discordapp.com/api")
|
|||||||
AUTHORIZATION_BASE_URL = f"{API_BASE_URL}/oauth2/authorize"
|
AUTHORIZATION_BASE_URL = f"{API_BASE_URL}/oauth2/authorize"
|
||||||
TOKEN_URL = f"{API_BASE_URL}/oauth2/token"
|
TOKEN_URL = f"{API_BASE_URL}/oauth2/token"
|
||||||
|
|
||||||
|
CATALOG_CACHE = {}
|
||||||
|
EVENTS_CACHE = {}
|
||||||
|
|
||||||
|
|
||||||
class Discord(Client):
|
class Discord(Client):
|
||||||
async def on_ready(self):
|
async def on_ready(self):
|
||||||
print(f"Logged on as {self.user}!", flush=True)
|
print(f"Logged on as {self.user}!", flush=True)
|
||||||
|
|
||||||
|
for guild in self.guilds:
|
||||||
|
for scheduled_event in guild.scheduled_events:
|
||||||
|
EVENTS_CACHE[scheduled_event.id] = [
|
||||||
|
member.id
|
||||||
|
for member in await scheduled_event.fetch_users().flatten()
|
||||||
|
]
|
||||||
|
|
||||||
|
print("Events synchronised!", flush=True)
|
||||||
|
|
||||||
|
async def on_guild_scheduled_event_subscribe(
|
||||||
|
self, event: GuildScheduledEvent, user: Union[Member, User]
|
||||||
|
):
|
||||||
|
EVENTS_CACHE[event.id].append(user.id)
|
||||||
|
|
||||||
|
async def on_guild_scheduled_event_unsubscribe(
|
||||||
|
self, event: GuildScheduledEvent, user: Union[Member, User]
|
||||||
|
):
|
||||||
|
EVENTS_CACHE[event.id].remove(user.id)
|
||||||
|
|
||||||
|
async def on_guild_scheduled_event_create(self, event: GuildScheduledEvent):
|
||||||
|
EVENTS_CACHE[event.id] = [
|
||||||
|
member.id for member in await event.fetch_users().flatten()
|
||||||
|
]
|
||||||
|
|
||||||
|
async def on_guild_scheduled_event_delete(self, event: GuildScheduledEvent):
|
||||||
|
EVENTS_CACHE.pop(event.id)
|
||||||
|
|
||||||
|
|
||||||
|
intents = Intents.default()
|
||||||
|
intents.guild_scheduled_events = True
|
||||||
|
intents.members = True
|
||||||
|
client = Discord(intents=intents)
|
||||||
|
|
||||||
client = Discord()
|
|
||||||
app = Quart(__name__)
|
app = Quart(__name__)
|
||||||
app.config["SECRET_KEY"] = OAUTH2_CLIENT_SECRET
|
app.config["SECRET_KEY"] = OAUTH2_CLIENT_SECRET
|
||||||
app.config["EXPLAIN_TEMPLATE_LOADING"] = QUART_DEBUG
|
app.config["EXPLAIN_TEMPLATE_LOADING"] = QUART_DEBUG
|
||||||
@ -57,9 +91,6 @@ def get_guild_by_id(guild_id: str) -> Optional[Guild]:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
CATALOG_CACHE = {}
|
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(500)
|
@app.errorhandler(500)
|
||||||
async def errorhandler(error: Exception):
|
async def errorhandler(error: Exception):
|
||||||
print(f"\33[31m{error}\33[m", flush=True)
|
print(f"\33[31m{error}\33[m", flush=True)
|
||||||
@ -301,14 +332,10 @@ async def ical(entity_id: str):
|
|||||||
)
|
)
|
||||||
|
|
||||||
for guild in client.guilds:
|
for guild in client.guilds:
|
||||||
if await guild.get_or_fetch_member(int(entity_id)):
|
for scheduled_event in guild.scheduled_events:
|
||||||
for scheduled_event in guild.scheduled_events:
|
if user.id in EVENTS_CACHE[scheduled_event.id]:
|
||||||
if any(
|
event = make_event(scheduled_event)
|
||||||
user.id == member.id
|
calendar.events.append(event)
|
||||||
for member in await scheduled_event.fetch_users().flatten()
|
|
||||||
):
|
|
||||||
event = make_event(scheduled_event)
|
|
||||||
calendar.events.append(event)
|
|
||||||
|
|
||||||
return calendar.serialize()
|
return calendar.serialize()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user