From 2269fcdbf8db0783c2c7e978ed187102774ba18a Mon Sep 17 00:00:00 2001
From: dnns01 <git@dnns01.de>
Date: Tue, 20 Dec 2022 14:46:12 +0100
Subject: [PATCH] Fix permissions for /schedule commands and let loop wait for
 the next full hour

---
 extensions/schedule.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/extensions/schedule.py b/extensions/schedule.py
index d02487f..1e9859d 100644
--- a/extensions/schedule.py
+++ b/extensions/schedule.py
@@ -1,3 +1,4 @@
+import asyncio
 import base64
 import json
 import os
@@ -38,7 +39,8 @@ def remove_cancelled_streams(user, segments):
 
 
 @app_commands.guild_only
-@app_commands.default_permissions(manage_server=True)
+@app_commands.default_permissions(manage_guild=True)
+@app_commands.checks.has_permissions(manage_guild=True)
 class TwitchSchedule(commands.GroupCog, name="schedule"):
     def __init__(self, bot):
         self.bot = bot
@@ -50,6 +52,8 @@ class TwitchSchedule(commands.GroupCog, name="schedule"):
     @app_commands.describe(twitch_channel="Twitch channel to add",
                            emoji="Emoji to be used for this channels entries in schedule",
                            update_schedule="Define whether schedule should be updated or not.")
+    @app_commands.default_permissions(manage_guild=True)
+    @app_commands.checks.has_permissions(manage_guild=True)
     async def cmd_add(self, interaction: Interaction, twitch_channel: str, emoji: str, update_schedule: bool = False):
         await interaction.response.defer(ephemeral=True)
         user = await self.twitch_client.fetch_users(names=[twitch_channel])
@@ -72,6 +76,8 @@ class TwitchSchedule(commands.GroupCog, name="schedule"):
     @app_commands.command(name="remove", description="Remove Twitch Channel from Schedule")
     @app_commands.describe(twitch_channel="Twitch Channel to remove",
                            update_schedule="Define whether Schedule should be updated or not.")
+    @app_commands.default_permissions(manage_guild=True)
+    @app_commands.checks.has_permissions(manage_guild=True)
     async def cmd_remove(self, interaction: Interaction, twitch_channel: str, update_schedule: bool = False):
         await interaction.response.defer(ephemeral=True)
         user = await self.twitch_client.fetch_users(names=[twitch_channel])
@@ -92,6 +98,8 @@ class TwitchSchedule(commands.GroupCog, name="schedule"):
             content=f"Twitch Kanal ist kein Teil des Kalenders.")
 
     @app_commands.command(name="update", description="Force to update the schedule")
+    @app_commands.default_permissions(manage_guild=True)
+    @app_commands.checks.has_permissions(manage_guild=True)
     async def cmd_update(self, interaction: Interaction):
         await interaction.response.defer(ephemeral=True)
         await self.update_schedule()
@@ -101,6 +109,13 @@ class TwitchSchedule(commands.GroupCog, name="schedule"):
     async def update_task(self):
         await self.update_schedule()
 
+    @update_task.before_loop
+    async def before_update_task(self):
+        await self.bot.wait_until_ready()
+        now = datetime.now()
+        diff = (datetime(year=now.year, month=now.month, day=now.day, hour=now.hour) + timedelta(hours=1)) - now
+        await asyncio.sleep(diff.seconds)
+
     async def update_schedule(self):
         await self.update_database()
         calendar_week, start_day = get_calendar_week()
-- 
GitLab