Skip to content

Commit

Permalink
Merge pull request #153 from stijndcl/3.1.1
Browse files Browse the repository at this point in the history
v3.1.1
  • Loading branch information
stijndcl authored Nov 2, 2022
2 parents 87e5b1b + 465456f commit c1721b9
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 19 deletions.
14 changes: 1 addition & 13 deletions didier/cogs/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def cog_load(self) -> None:
if settings.BIRTHDAY_ANNOUNCEMENT_CHANNEL is not None:
self.check_birthdays.start()

# Only pull free gmaes if a channel was provided
# Only pull free games if a channel was provided
if settings.FREE_GAMES_CHANNEL is not None:
self.pull_free_games.start()

Expand All @@ -73,10 +73,8 @@ def cog_load(self) -> None:
self.remove_old_ufora_announcements.start()

# Start other tasks
self.init_schedules.start()
self.reminders.start()
self.reset_wordle_word.start()
self.pull_schedules.start()

@overrides
def cog_unload(self) -> None:
Expand Down Expand Up @@ -135,16 +133,6 @@ async def check_birthdays(self, **kwargs):
async def _before_check_birthdays(self):
await self.client.wait_until_ready()

@tasks.loop(count=1)
async def init_schedules(self, **kwargs):
"""Tasks that loads the schedules in memory on startup"""
_ = kwargs
await self.client.load_schedules()

@init_schedules.before_loop
async def _before_init_schedules(self):
await self.client.wait_until_ready()

@tasks.loop(minutes=15)
async def pull_free_games(self, **kwargs):
"""Task that checks for free games occasionally"""
Expand Down
29 changes: 23 additions & 6 deletions didier/didier.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import discord
from aiohttp import ClientSession
from discord.app_commands import AppCommandError
from discord.ext import commands
from sqlalchemy.ext.asyncio import AsyncSession

Expand Down Expand Up @@ -246,17 +245,28 @@ async def on_app_command_completion(
async with self.postgres_session as session:
await command_stats.register_command_invocation(session, ctx, command, tz_aware_now())

async def on_app_command_error(self, interaction: discord.Interaction, exception: AppCommandError):
async def on_app_command_error(self, interaction: discord.Interaction, exception: Exception):
"""Event triggered when an application command errors"""
# If commands have their own error handler, let it handle the error instead
if hasattr(interaction.command, "on_error"):
return

if isinstance(exception, (NoMatch, discord.app_commands.CommandInvokeError)):
# Unwrap exception
if isinstance(exception, discord.app_commands.CommandInvokeError):
exception = exception.original

if isinstance(exception, (NoMatch, HTTPException)):
if interaction.response.is_done():
return await interaction.response.send_message(str(exception.original), ephemeral=True)
return await interaction.response.send_message(str(exception), ephemeral=True)
else:
return await interaction.followup.send(str(exception.original), ephemeral=True)
return await interaction.followup.send(str(exception), ephemeral=True)

await interaction.response.send_message("Something went wrong processing this command.", ephemeral=True)

if settings.ERRORS_CHANNEL is not None:
embed = create_error_embed(await commands.Context.from_interaction(interaction), exception)
channel = self.get_channel(settings.ERRORS_CHANNEL)
await channel.send(embed=embed)

async def on_command_completion(self, ctx: commands.Context):
"""Event triggered when a message command completes successfully"""
Expand All @@ -279,6 +289,10 @@ async def on_command_error(self, ctx: commands.Context, exception: commands.Comm
if hasattr(ctx.command, "on_error"):
return

# Hybrid command errors are wrapped in an additional error, so wrap it back out
if isinstance(exception, commands.HybridCommandError):
exception = exception.original

# Ignore exceptions that aren't important
if isinstance(
exception,
Expand All @@ -291,7 +305,10 @@ async def on_command_error(self, ctx: commands.Context, exception: commands.Comm
return

# Responses to things that go wrong during processing of commands
if isinstance(exception, commands.CommandInvokeError) and isinstance(
if isinstance(
exception,
(discord.app_commands.CommandInvokeError, commands.CommandInvokeError),
) and isinstance(
exception.original,
(
NoMatch,
Expand Down
4 changes: 4 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
async def run_bot():
"""Run Didier"""
didier = Didier()

# Schedules are quite heavy - do this once before connecting
await didier.load_schedules()

try:
await didier.start(settings.DISCORD_TOKEN)
finally:
Expand Down

0 comments on commit c1721b9

Please sign in to comment.