Repository: interactions-py/interactions.py

Issue:
[BUG] interactions.SlashContext.expired: TypeError: can't compare offset-naive and offset-aware datetimes
### Library Version

5.11.0

### Describe the Bug

When i access the `interactions.SlashContext.expired` propety on a `ctx: interactions.SlashContext` object it raises an error
```
Lib\site-packages\interactions\models\internal\context.py", line 341, in expired
    return datetime.datetime.utcnow() > self.expires_at
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: can't compare offset-naive and offset-aware datetimes
```

### Steps to Reproduce

simply access this propety on a ctx object

### Expected Results

it should return a bool, True if its expired and False if its not

### Minimal Reproducible Code

```python
import interactions

@interactions.slash_command(name="ping",description=f"Test if the bot is responding")
async def ping_test(ctx: interactions.SlashContext):
    if ctx.expired:
        print('uh oh ive expired!')

bot = interactions.Client()
bot.start("token_here")
```


### Traceback

Ignoring exception in cmd `/ping`:
Traceback (most recent call last):
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\client\client.py", line 1900, in __dispatch_interaction
    response = await callback
               ^^^^^^^^^^^^^^
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\client\client.py", line 1771, in _run_slash_command
    return await command(ctx, **ctx.kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\models\internal\command.py", line 132, in __call__
    await self.call_callback(self.callback, context)
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\models\internal\application_commands.py", line 802, in call_callback
    return await self.call_with_binding(callback, ctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\models\internal\callback.py", line 43, in call_with_binding
    return await callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\coding_projects\Python_projects\eZwizard3-bot\main.py", line 5, in ping_test
    if ctx.expired:
       ^^^^^^^^^^^
  File "C:\Users\Gamer\AppData\Local\Programs\Python\Python311\Lib\site-packages\interactions\models\internal\context.py", line 341, in expired
    return datetime.datetime.utcnow() > self.expires_at
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: can't compare offset-naive and offset-aware datetimes

### Checklist

- [X] I have searched the open issues for duplicates.
- [X] I have shown the entire traceback, if possible.
- [X] I have removed my token from display, if visible.
- [X] I have attempted to debug this myself, and I believe this issue is with the library

### Additional Information

on line 341 in interactions\models\internal\context.py, you could try replacing the line with
```py
        return datetime.datetime.utcnow().timestamp() > self.expires_at.timestamp()
```
since i dont think timezone matters here (EDIT this does not work it always returns True after 3 seconds)


Discussion:

Resolving patch:
diff --git a/interactions/models/internal/context.py b/interactions/models/internal/context.py
--- a/interactions/models/internal/context.py
+++ b/interactions/models/internal/context.py
@@ -35,6 +35,7 @@
 )
 from interactions.models.discord.snowflake import Snowflake, Snowflake_Type, to_snowflake, to_optional_snowflake
 from interactions.models.discord.embed import Embed
+from interactions.models.discord.timestamp import Timestamp
 from interactions.models.internal.application_commands import (
     OptionType,
     CallbackType,
@@ -329,16 +330,16 @@ def command(self) -> InteractionCommand:
         return self.client._interaction_lookup[self._command_name]
 
     @property
-    def expires_at(self) -> typing.Optional[datetime.datetime]:
+    def expires_at(self) -> Timestamp:
         """The time at which the interaction expires."""
-        if self.responded:
+        if self.responded or self.deferred:
             return self.id.created_at + datetime.timedelta(minutes=15)
         return self.id.created_at + datetime.timedelta(seconds=3)
 
     @property
     def expired(self) -> bool:
         """Whether the interaction has expired."""
-        return datetime.datetime.utcnow() > self.expires_at
+        return Timestamp.utcnow() > self.expires_at
 
     @property
     def invoke_target(self) -> str:


Test patch: