11# Copyright (c) NiceBots.xyz
22# SPDX-License-Identifier: MIT
33
4+ import contextlib
45from logging import getLogger
56from typing import TYPE_CHECKING , Any , override
67
78import aiocache
89import discord
9- from discord import Message
10+ from discord import Interaction , Message , WebhookMessage
1011from discord .ext import bridge
1112from discord .ext .bridge import (
1213 BridgeExtContext ,
1314)
1415
1516from src .i18n .classes import ExtensionTranslation , TranslationWrapper , apply_locale
1617
18+ if TYPE_CHECKING :
19+ from src .database .models import Guild , User
20+
1721logger = getLogger ("bot" )
1822
1923
@@ -22,6 +26,8 @@ def __init__(self, bot: "Bot", interaction: discord.Interaction) -> None:
2226 self .translations : TranslationWrapper = TranslationWrapper ({}, "en-US" ) # empty placeholder
2327 super ().__init__ (bot = bot , interaction = interaction )
2428 self .bot : Bot
29+ self .user_obj : User | None = None
30+ self .guild_obj : Guild | None = None
2531
2632 @override
2733 def __setattr__ (self , key : Any , value : Any ) -> None :
@@ -33,22 +39,42 @@ def __setattr__(self, key: Any, value: Any) -> None:
3339 super ().__setattr__ (key , value )
3440
3541
42+ async def remove_reaction (user : discord .User , message : discord .Message , emoji : str ) -> None :
43+ await message .remove_reaction (emoji , user )
44+
45+
3646class ExtContext (bridge .BridgeExtContext ):
3747 def __init__ (self , ** kwargs : Any ) -> None :
3848 self .translations : TranslationWrapper = TranslationWrapper ({}, "en-US" ) # empty placeholder
3949 super ().__init__ (** kwargs )
4050 self .bot : Bot
51+ self .user_obj : User | None = None
52+ self .guild_obj : Guild | None = None
4153
4254 def load_translations (self ) -> None :
4355 if hasattr (self .command , "translations" ) and self .command .translations : # pyright: ignore[reportUnknownArgumentType,reportOptionalMemberAccess,reportAttributeAccessIssue]
4456 locale : str | None = None
4557 if guild := self .guild :
4658 locale = guild .preferred_locale
4759 self .translations = apply_locale (
48- self .command .translations ,
60+ self .command .translations , # pyright: ignore [reportAttributeAccessIssue, reportOptionalMemberAccess, reportUnknownArgumentType]
4961 locale ,
5062 )
5163
64+ @override
65+ async def defer (self , * args : Any , ** kwargs : Any ) -> None :
66+ await super ().defer (* args , ** kwargs )
67+ with contextlib .suppress (Exception ):
68+ await self .message .add_reaction ("🔄" )
69+
70+ @override
71+ async def respond (self , * args : Any , ** kwargs : Any ) -> "Interaction | WebhookMessage | Message" :
72+ r = await super ().respond (* args , ** kwargs )
73+ with contextlib .suppress (Exception ):
74+ if self .me :
75+ await remove_reaction (self .me , self .message , "🔄" )
76+ return r
77+
5278
5379class Bot (bridge .Bot ):
5480 def __init__ (
0 commit comments