diff --git a/main.py b/main.py index 3255ec3..a54a2aa 100644 --- a/main.py +++ b/main.py @@ -24,6 +24,7 @@ from src.feriadoES import feriadoESfun from src.feriadoMX import feriadoMXfun from src.feriadoUY import feriadoUYfun +from src.feriadoBO import feriadoBOfun from src.birras import birrasfunc from src.karma import karmagiversfunc, karmarankfunc, karmauserfunc from src.help import helpfunc @@ -53,6 +54,7 @@ from src.ctxcommands.ctxferiadomx import feriadomxfunctx from src.ctxcommands.ctxferiadouy import feriadouyfunctx from src.ctxcommands.ctxferiadoes import feriadoesfunctx +from src.ctxcommands.ctxferiadobo import feriadobofunctx from src.ctxcommands.ctxbirras import birrasfunctx from src.ctxcommands.ctxfulbo import fulbofunctx from src.ctxcommands.ctxhelp import helpfunctx @@ -314,7 +316,7 @@ async def on_command_error(ctx, error): FechaActual = datetime.now() mensajeayuda_general = """Informacion general sobre los comandos del bot de Sysarmy - !caucho !dolar !cripto !euro !pesos !fulbo !clima !subte !underground !feriadoar !feriadocl !feriadoes !feriadomx !feriadouy !q !qsearch !qadd !rank !kgivers !kgiven !karma !nerdearla !jobs !f1 + !caucho !dolar !cripto !euro !pesos !fulbo !clima !subte !underground !feriadoar !feriadocl !feriadoes !feriadomx !feriadouy !feriadobo !q !qsearch !qadd !rank !kgivers !kgiven !karma !nerdearla !jobs !f1 Mas detalles en el canal #help-bot-commands de Discord, dentro de la seccion de Welcome! - o ejecutando /help desde Discord""" # Custom error handling - si !help se manda vacio sin especificar comando, manda un mensaje de ayuda general @@ -689,7 +691,11 @@ async def feriadouy(ctx): @bot.command() async def feriadomx(ctx): - await feriadomxfunctx(ctx) + await feriadomxfunctx(ctx) + +@bot.command() +async def feriadobo(ctx): + await feriadobofunctx(ctx) # COMANDO SUBTE @bot.command() @@ -924,6 +930,15 @@ async def feriadosmx(interaction: Interaction): except: print(f"Limite de API calls excedido. Ultimo call hecho por {interaction.user}") await interaction.response.send_message("Comando /feriadoar: Limite de API calls excedido. Sori el CTO no nos dio budget.") + +# COMANDO FERIADO BOLIVIA +@bot.tree.command(name="feriadobo", description="Proximos feriados en Bolivia") +async def feriadosbo(interaction: Interaction): + try: + await interaction.response.send_message(embed= await feriadoBOfun(interaction)) + except: + print(f"Limite de API calls excedido. Ultimo call hecho por {interaction.user}") + await interaction.response.send_message("Comando /feriadoar: Limite de API calls excedido. Sori el CTO no nos dio budget.") # COMANDO KARMA RANK @bot.tree.command(name="karmarank", description="Ranking top 10 usuarios") diff --git a/readme.md b/readme.md index 5e69030..e25cd98 100644 --- a/readme.md +++ b/readme.md @@ -44,7 +44,7 @@ El comando help detalla instrucciones de uso para cada uno. Comandos incluidos: - - De feriados --> !feriadomx !feriadoar !feriadouy !feriadocl !feriadoes + - De feriados --> !feriadomx !feriadoar !feriadouy !feriadocl !feriadoes !feriadobo - Lifestyle --> !underground !subte !clima !fulbo !flip !shrug !f1 - Economia --> !caucho !cripto !dolar !euro !pesos - Karma --> !rank !karma !kgiven !kgivers diff --git a/src/ctxcommands/ctxferiadobo.py b/src/ctxcommands/ctxferiadobo.py new file mode 100644 index 0000000..27a534d --- /dev/null +++ b/src/ctxcommands/ctxferiadobo.py @@ -0,0 +1,58 @@ +import requests +import discord +import datetime +import json +from ratelimit import limits + +quince_minutos = 900 + +# Limitamos las API calls por las dudas. Esta libreria es medio negra. Lo dejamos asi por ahora, Mariano del futuro lo va a hacer manual +@limits(calls=15, period=quince_minutos) +async def feriadobofunctx(ctx): + today = datetime.date.today() + anio = datetime.date.today().year + + # Llama a la API + response = requests.get(f"https://date.nager.at/api/v3/PublicHolidays/{anio}/BO") + try: + if response.status_code == 200: + + # Carga el JSON en Python dictionaro + json_feriado = json.loads(response.text) + feriadosAR = response.json() + dicferiados = [] + + for dia in feriadosAR: + nombre = dia["localName"] + fecha_str = dia["date"] + fecha = datetime.datetime.strptime(fecha_str, '%Y-%m-%d').date() #Convierte fecha para poder chequearla con la fecha de hoy + feriado = {"nombre": nombre, "fecha": fecha} + dicferiados.append(feriado) + + # Compara fecha de los feriados con la actual para devolver solo las fechas que se vienen + proximos_feriados = [feriado for feriado in dicferiados if feriado['fecha'] >= today] + + # Log + FechaActual = datetime.datetime.now() + print(FechaActual) + print(f"Comando FeriadoBO ejecutado") + + # Se crea el mensaje con los feriados + message = "Próximos feriados en Bolivia:\n" + + for feriado in proximos_feriados[:3]: + message += f"{feriado['fecha']} - {feriado['nombre']}\n" + + await ctx.send(message) + + else: + print(f"Error: {response.status_code}. Pincho la API.") + print(f"Error en la API {response.status_code}") + + # En caso de error en la API, se imprime el mensaje + await ctx.send('Error en la API. Por favor avisar a algun root') + + except Exception as e: + print(f"Error en la API: {e}") + + \ No newline at end of file diff --git a/src/ctxcommands/ctxhelp.py b/src/ctxcommands/ctxhelp.py index 49c9016..1128f28 100644 --- a/src/ctxcommands/ctxhelp.py +++ b/src/ctxcommands/ctxhelp.py @@ -10,7 +10,7 @@ async def helpfunctx(ctx, texto): if texto is None: mensajeayuda_general = """Informacion general sobre los comandos del bot de Sysarmy - !dolar !cripto !euro !fulbo !pesos !clima !subte !underground !feriadoar !feriadocl !feriadoes !feriadomx !feriadouy !q !qsearch !qadd !rank !kgivers !kgiven !karma !birras !flip !shrug !nerdearla !jobs !f1 !mundial + !dolar !cripto !euro !fulbo !pesos !clima !subte !underground !feriadoar !feriadocl !feriadoes !feriadomx !feriadouy !feriadobo !q !qsearch !qadd !rank !kgivers !kgiven !karma !birras !flip !shrug !nerdearla !jobs !f1 !mundial Mas detalles en el canal #help-bot-commands de Discord, dentro de la seccion de Welcome! - o ejecutando /help desde Discord""" await ctx.send(mensajeayuda_general) @@ -41,8 +41,8 @@ async def helpfunctx(ctx, texto): elif texto == "dolar": await ctx.send("Pone !dolar y te da los precios de la timba. Opcionalmente se puede especifica el valor en pesos, Ej: '!dolar 500'") - elif texto in ["feriado", "feriadoar", "feriadomx", "feriadoes", "feriadocl", "feriadouy"]: - await ctx.send("Pone !feriadouy !feriadoar !feriadocl !feriadoes !feriadomx y te da los proximos feriados para el pais seleccionado. No requiere argumentos") + elif texto in ["feriado", "feriadoar", "feriadomx", "feriadoes", "feriadocl", "feriadouy", "feriadobo"]: + await ctx.send("Pone !feriadouy !feriadoar !feriadocl !feriadoes !feriadomx !feriadobo y te da los proximos feriados para el pais seleccionado. No requiere argumentos") elif texto == "euro": await ctx.send("Pone !euro y te da los precios de la timba. No requiere argumentos") diff --git a/src/feriadoBO.py b/src/feriadoBO.py new file mode 100644 index 0000000..f941a7e --- /dev/null +++ b/src/feriadoBO.py @@ -0,0 +1,59 @@ +import requests +import discord +from discord import Embed +import datetime +import json +from ratelimit import limits + +quince_minutos = 900 + +# Limitamos las API calls por las dudas. Esta libreria es medio negra. Lo dejamos asi por ahora, Mariano del futuro lo va a hacer manual +@limits(calls=15, period=quince_minutos) +async def feriadoBOfun(interaction): + today = datetime.date.today() + anio = datetime.date.today().year + + # Llama a la API + response = requests.get(f"https://date.nager.at/api/v3/PublicHolidays/{anio}/BO") + try: + if response.status_code == 200: + + # Carga el JSON en Python dictionaro + json_feriado = json.loads(response.text) + feriadosAR = response.json() + dicferiados = [] + + for dia in feriadosAR: + nombre = dia["localName"] + fecha_str = dia["date"] + fecha = datetime.datetime.strptime(fecha_str, '%Y-%m-%d').date() #Convierte fecha para poder chequearla con la fecha de hoy + feriado = {"nombre": nombre, "fecha": fecha} + dicferiados.append(feriado) + + # Compara fecha de los feriados con la actual para devolver solo las fechas que se vienen + proximos_feriados = [feriado for feriado in dicferiados if feriado['fecha'] >= today] + + # Log + FechaActual = datetime.datetime.now() + print(FechaActual) + print(f"Comando FeriadoBO ejecutado por {interaction.user}") + + # Se crea el embed con los feriados + embed = Embed(title=f"Proximos feriados en Bolivia", description=f"A pedido de {interaction.user}", color = discord.Color.green()) + + for feriado in proximos_feriados[:3]: + embed.add_field(name =f"{feriado['fecha']}", value =f"{feriado['nombre']}", inline=False) + return embed + else: + print(f"Error: {response.status_code}. Pincho la API.") + print(f"Error en la API {response.status_code}") + + # En caso de error en la API, se imprime el mensaje + embed = Embed(title=f"Error en la API", description=f"Se ha producido un error", color = discord.Color.green()) + embed.add_field(name = "Error", value =f"Avisar a algun root",inline=True) + return embed + + except Exception as e: + print(f"Error en la API: {e}") + + \ No newline at end of file