diff --git a/cogs/other.py b/cogs/other.py index efddcab..83c5ed4 100644 --- a/cogs/other.py +++ b/cogs/other.py @@ -2,6 +2,7 @@ import discord from discord.ext import commands from data.embeds.snipe import EditSnipe, DeleteSnipe +from data.links import get_link_for from data.menus import custom_commands from data.snipe import Action, Snipe from decorators import help @@ -17,6 +18,19 @@ class Other(commands.Cog): def cog_check(self, _): return not self.client.locked + @commands.command(name="Link", usage="[Naam]") + @help.Category(category=Category.Other) + async def link(self, ctx, name: str): + """ + Send commonly used links + """ + match = get_link_for(name) + + if match is None: + return await ctx.reply(f"Geen match gevonden voor \"{name}\".", mention_author=False, delete_after=15) + + return await ctx.reply(match, mention_author=False) + @commands.command(name="Custom") @help.Category(category=Category.Didier) async def list_custom(self, ctx): diff --git a/cogs/school.py b/cogs/school.py index 51066f2..e2fc347 100644 --- a/cogs/school.py +++ b/cogs/school.py @@ -1,4 +1,5 @@ from data import schedule +from data.courses import find_course_from_name from data.embeds.deadlines import Deadlines from data.embeds.food import Menu from decorators import help @@ -85,6 +86,23 @@ class School(commands.Cog): await message.pin(reason=f"Didier Pin door {ctx.author.display_name}") await ctx.message.add_reaction("✅") + @commands.command(name="Fiche", usage="[Vak]", aliases=["guide", "studiefiche"]) + @help.Category(category=Category.School) + async def study_guide(self, ctx, name: str): + """ + Send links to study guides + """ + # Find code corresponding to the search query + course = find_course_from_name(name) + + # Code not found + if course is None: + return await ctx.reply(f"Onbekend vak: \"{name}\".", mention_author=False, delete_after=15) + + # Get the guide for the current year + year = 2018 + int(config.get("year")) + return await ctx.reply(f"https://studiekiezer.ugent.be/studiefiche/nl/{course.code}/{year}", mention_author=False) + @commands.command(name="Deadlines", aliases=["dl"]) @help.Category(category=Category.School) async def deadlines(self, ctx): diff --git a/cogs/slash/other_slash.py b/cogs/slash/other_slash.py index 39350c7..1e6f12d 100644 --- a/cogs/slash/other_slash.py +++ b/cogs/slash/other_slash.py @@ -1,9 +1,16 @@ from discord.ext import commands -from discord.commands import slash_command, ApplicationContext +from discord.commands import slash_command, ApplicationContext, AutocompleteContext, Option from requests import get +from data.links import load_all_links, get_link_for from startup.didier import Didier +links = load_all_links() + + +def link_autocomplete(ctx: AutocompleteContext) -> list[str]: + return [link for link in links if link.lower().startswith(ctx.value.lower())] + class OtherSlash(commands.Cog): def __init__(self, client: Didier): @@ -18,6 +25,17 @@ class OtherSlash(commands.Cog): else: await ctx.respond("Uh oh API down.") + @slash_command(name="link", description="Shortcut voor nuttige links.") + async def _link_slash(self, ctx: ApplicationContext, + name: Option(str, description="Naam van de link.", required=True, + autocomplete=link_autocomplete)): + match = get_link_for(name) + + if match is None: + return await ctx.respond(f"Geen match gevonden voor \"{name}\".") + + return await ctx.respond(match) + def setup(client: Didier): client.add_cog(OtherSlash(client)) diff --git a/data/links.py b/data/links.py new file mode 100644 index 0000000..a994123 --- /dev/null +++ b/data/links.py @@ -0,0 +1,16 @@ +import json +from typing import Optional + + +def load_all_links() -> dict[str, str]: + with open("files/links.json", "r") as file: + return json.load(file) + + +def get_link_for(name: str) -> Optional[str]: + links = load_all_links() + for link in links: + if link.lower() == name.lower(): + return links[link] + + return None diff --git a/files/help.json b/files/help.json index c15ecb7..95f6be3 100644 --- a/files/help.json +++ b/files/help.json @@ -44,9 +44,10 @@ "faq": "Stuurt een lijst van alle FAQ's in [Categorie] naar jouw DM's.\nGeef geen categorie op om een lijst van categorieën te krijgen.\nIndien je een of meerdere personen tagt, wordt de lijst naar hun DM's gestuurd in plaats van de jouwe.", "faq add": "Voegt een vraag & antwoord toe aan FAQ [Categorie].\nIndien je geen vraag & antwoord opgeeft, maakt het een categorie aan.", "faq quote": "Stuurt een specifieke entry uit de FAQ in het huidige channel in plaats van de hele lijst naar iemand's DM's.", + "fiche": "Stuurt de URL naar de studiefiche voor [Vak]. Veelgebruikte afkortingen van vakken werken ook.\n\nVoorbeeld: Funcprog, FP, InfoSec, SEL2, ...", "github": "Stuurt de GitHub link van [Persoon] indien je iemand tagt, zoniet een lijst van GitHubs van mensen uit deze Discord.\nIndien je jouw eigen GitHub hier graag bij zou zetten, gebruik je ``GitHub Add`` of kan ke een DM sturen naar DJ STIJN.", "github add": "Voegt jouw eigen GitHub toe aan de lijst.\nZowel ``github.com/username`` als ``username`` werken.", - "give": "Geef [Persoon] [Aantal] van jouw eigen Didier Dinks.", + "give": "Geeft [Persoon] [Aantal] van jouw eigen Didier Dinks.", "google": "Geeft de eerste 10 zoekresultaten voor [Query] op Google.", "hangman": "Raad [Letter]. Indien je geen letter opgeeft, toont het de status van de huidige Hangman game indien er een bezig is.", "hangman start": "Start een nieuwe Hangman game indien er nog geen bezig is. Indien je geen woord opgeeft, wordt er een willekeurig woord gekozen.\n**Indien je wel een woord opgeeft, werkt dit enkel in DM.**", @@ -62,7 +63,8 @@ "jpl update": "Haalt de nieuwe code voor de competitie van dit jaar op.", "leaderboard": "Bekijk de Top 10 van [Categorie].\nIndien je geen categorie opgeeft krijg je een lijst van categorieën.", "les": "Bekijk het lessenrooster voor [Dag].\nIndien je geen dag opgeeft, is dit standaard vandaag.\nLes Morgen/Overmorgen werkt ook.", - "lmgtfy": "Stuur iemand een LMGTFY link wanneer ze je een domme vraag stellen in plaats van het zelf op te zoeken.\nQueries met spaties moeten **niet** tussen aanhalingstekens staan.", + "link": "Stuurt de link die overeenkomt met [Naam].", + "lmgtfy": "Stuurt iemand een LMGTFY link wanneer ze je een domme vraag stellen in plaats van het zelf op te zoeken.\nQueries met spaties moeten **niet** tussen aanhalingstekens staan.", "load": "Laadt [Cog] in.", "load all": "Laadt alle cogs in.", "lost": "Bekijk het aantal Didier Dinks die al verloren zijn door gambling.", diff --git a/files/links.json b/files/links.json new file mode 100644 index 0000000..520e847 --- /dev/null +++ b/files/links.json @@ -0,0 +1,3 @@ +{ + "DERP": "https://github.ugent.be/DERP" +} \ No newline at end of file