Working
This commit is contained in:
99
master-bot/discord_api.py
Normal file
99
master-bot/discord_api.py
Normal 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)
|
||||
Reference in New Issue
Block a user