This commit is contained in:
2024-09-23 01:28:03 +02:00
parent 672651c08c
commit 82f0f6f511
10 changed files with 284 additions and 0 deletions

99
master-bot/discord_api.py Normal file
View File

@@ -0,0 +1,99 @@
import nextcord
from nextcord.ext import commands, application_checks
import tiss
cache = {}
def run(token: str, config: dict):
bot = commands.Bot()
def get_channel(id):
global cache
if id not in cache:
cache[id] = bot.get_channel(id)
return cache[id]
@bot.slash_command(description="Manager master channels")
@application_checks.has_guild_permissions(administrator=True)
async def master(
interaction: nextcord.Interaction,
):
pass
@master.subcommand(description="Sync Master LVA with Channel")
@application_checks.has_guild_permissions(administrator=True)
async def sync(
interaction: nextcord.Interaction,
link: str = nextcord.SlashOption(description="Enter TISS link")
):
lva_code = tiss.TISS.get_code_from_any(link)
if lva_code == None:
await interaction.send("Invalid TISS link", ephemeral=True)
return
try:
lva = tiss.TISS.get_lva(lva_code)
except:
await interaction.send("Could not fetch TISS data", ephemeral=True)
return
if lva is None:
await interaction.send("Could not fetch TISS data", ephemeral=True)
return
forum = get_channel(config["channels"]["forum"])
# Get forum data
# Get tags
tags_available = forum.available_tags
thread_tags = []
config_curricula = config["curricula"]
# This should work? but doesn't somehow
# for curriculum in lva.curricula:
# if curriculum in config_curricula:
# print(f"Curriculum found: {curriculum}")
# try:
# print(f"Looking for id {config_curricula[curriculum]}")
# tags.append(forum.get_tag(id = config_curricula[curriculum]))
# print("Tag found")
# except:
# print(f"Tag not found for curriculum {curriculum}")
# else:
# print(f"Curriculum not found: {curriculum}")
for curriculum in config_curricula:
if curriculum in lva.curricula:
# Find the tag in the available tags
tag = next(x for x in tags_available if x.id == config_curricula[curriculum])
if tag is not None:
thread_tags.append(tag)
# Get name
thread_name = f"{lva.type} {lva.name} ({lva.id_pretty()})"
# Get content
thread_content = tiss.TISS.get_anonymous_tiss_link(lva.id)
# Determine if the thread already exists
for thread in forum.threads:
# Does the thread name contain the LVA code?
if lva.id_pretty() in thread.name:
await thread.edit(name = thread_name, applied_tags = thread_tags)
message = await thread.fetch_message(thread.id)
await message.edit(content = thread_content)
await interaction.send(f"Existing forum thread has been synced {thread.jump_url}", ephemeral=False)
return
# If it doesn't exist, create a new thread
thread = await forum.create_thread(name = thread_name, content = thread_content, applied_tags = thread_tags)
reply_message = f"Forum channel created! {thread.jump_url}{" No tags were found, are you sure this was a Master LVA?" if len(thread_tags) == 0 else ""}"
await interaction.send(reply_message, ephemeral=False)
bot.run(token)