2323"""
2424
2525from collections import OrderedDict , defaultdict , deque
26- from typing import Deque , Protocol , TypeVar
26+ from typing import TYPE_CHECKING , Deque , Protocol , TypeVar
2727
2828from discord import utils
29- from discord .app .state import ConnectionState
3029from discord .member import Member
3130from discord .message import Message
3231
33- from ..abc import MessageableChannel , PrivateChannel
3432from ..channel import DMChannel
3533from ..emoji import AppEmoji , GuildEmoji
3634from ..guild import Guild
4543from ..ui .view import View
4644from ..user import User
4745
46+ if TYPE_CHECKING :
47+ from discord .app .state import ConnectionState
48+
49+ from ..abc import MessageableChannel , PrivateChannel
50+
4851T = TypeVar ("T" )
4952
5053
5154class Cache (Protocol ):
55+ def __init__ (self ):
56+ self .__state : ConnectionState | None = None
57+
58+ @property
59+ def _state (self ) -> "ConnectionState" :
60+ if self .__state is None :
61+ raise RuntimeError ("Cache state has not been initialized." )
62+ return self .__state
63+
64+ @_state .setter
65+ def _state (self , state : "ConnectionState" ) -> None :
66+ self .__state = state
67+
5268 # users
5369 async def get_all_users (self ) -> list [User ]: ...
5470
@@ -114,17 +130,17 @@ async def store_poll(self, poll: Poll, message_id: int) -> None: ...
114130
115131 # private channels
116132
117- async def get_private_channels (self ) -> list [PrivateChannel ]: ...
133+ async def get_private_channels (self ) -> " list[PrivateChannel]" : ...
118134
119- async def get_private_channel (self , channel_id : int ) -> PrivateChannel : ...
135+ async def get_private_channel (self , channel_id : int ) -> " PrivateChannel" : ...
120136
121- async def get_private_channel_by_user (self , user_id : int ) -> PrivateChannel | None : ...
137+ async def get_private_channel_by_user (self , user_id : int ) -> " PrivateChannel | None" : ...
122138
123- async def store_private_channel (self , channel : PrivateChannel ) -> None : ...
139+ async def store_private_channel (self , channel : " PrivateChannel" ) -> None : ...
124140
125141 # messages
126142
127- async def store_message (self , message : MessagePayload , channel : MessageableChannel ) -> Message : ...
143+ async def store_message (self , message : MessagePayload , channel : " MessageableChannel" ) -> Message : ...
128144
129145 async def upsert_message (self , message : Message ) -> None : ...
130146
@@ -152,8 +168,8 @@ async def clear(self, views: bool = True) -> None: ...
152168
153169
154170class MemoryCache (Cache ):
155- def __init__ (self , max_messages : int | None = None , * , state : ConnectionState ) :
156- self ._state = state
171+ def __init__ (self , max_messages : int | None = None ) -> None :
172+ self .__state : ConnectionState | None = None
157173 self .max_messages = max_messages
158174 self ._users : dict [int , User ] = {}
159175 self ._guilds : dict [int , Guild ] = {}
@@ -312,10 +328,10 @@ async def store_poll(self, poll: Poll, message_id: int) -> None:
312328
313329 # private channels
314330
315- async def get_private_channels (self ) -> list [PrivateChannel ]:
331+ async def get_private_channels (self ) -> " list[PrivateChannel]" :
316332 return list (self ._private_channels .values ())
317333
318- async def get_private_channel (self , channel_id : int ) -> PrivateChannel | None :
334+ async def get_private_channel (self , channel_id : int ) -> " PrivateChannel | None" :
319335 try :
320336 channel = self ._private_channels [channel_id ]
321337 except KeyError :
@@ -324,7 +340,7 @@ async def get_private_channel(self, channel_id: int) -> PrivateChannel | None:
324340 self ._private_channels .move_to_end (channel_id )
325341 return channel
326342
327- async def store_private_channel (self , channel : PrivateChannel ) -> None :
343+ async def store_private_channel (self , channel : " PrivateChannel" ) -> None :
328344 channel_id = channel .id
329345 self ._private_channels [channel_id ] = channel
330346
@@ -336,15 +352,15 @@ async def store_private_channel(self, channel: PrivateChannel) -> None:
336352 if isinstance (channel , DMChannel ) and channel .recipient :
337353 self ._private_channels_by_user [channel .recipient .id ] = channel
338354
339- async def get_private_channel_by_user (self , user_id : int ) -> PrivateChannel | None :
355+ async def get_private_channel_by_user (self , user_id : int ) -> " PrivateChannel | None" :
340356 return self ._private_channels_by_user .get (user_id )
341357
342358 # messages
343359
344360 async def upsert_message (self , message : Message ) -> None :
345361 self ._messages .append (message )
346362
347- async def store_message (self , message : MessagePayload , channel : MessageableChannel ) -> Message :
363+ async def store_message (self , message : MessagePayload , channel : " MessageableChannel" ) -> Message :
348364 msg = await Message ._from_data (state = self ._state , channel = channel , data = message )
349365 self ._messages .append (msg )
350366 return msg
0 commit comments