@@ -183,6 +183,7 @@ class Interaction(Generic[ClientT]):
183183 "_state" ,
184184 "_session" ,
185185 "_original_response" ,
186+ "_guild" ,
186187 "_cs_response" ,
187188 "_cs_followup" ,
188189 "_cs_me" ,
@@ -203,6 +204,7 @@ def __init__(self, *, data: InteractionPayload, state: ConnectionState) -> None:
203204 self .version : int = data ["version" ]
204205 self .application_id : int = int (data ["application_id" ])
205206 self .guild_id : Optional [int ] = utils ._get_as_snowflake (data , "guild_id" )
207+ self ._guild = data .get ("guild" )
206208
207209 self .locale : Locale = try_enum (Locale , data ["locale" ])
208210 guild_locale = data .get ("guild_locale" )
@@ -216,18 +218,12 @@ def __init__(self, *, data: InteractionPayload, state: ConnectionState) -> None:
216218 self .author : Union [User , Member ] = MISSING
217219
218220 guild_fallback : Optional [Union [Guild , Object ]] = None
219- if self .guild_id :
220- guild_fallback = self .guild or Object (self .guild_id )
221-
222- if guild_fallback and (member := data .get ("member" )):
223- self .author = (
224- isinstance (guild_fallback , Guild )
225- and guild_fallback .get_member (int (member ["user" ]["id" ]))
226- or Member (
227- state = self ._state ,
228- guild = guild_fallback , # type: ignore # may be `Object`
229- data = member ,
230- )
221+
222+ if self .guild_id and (guild := self .guild ) and (member := data .get ("member" )):
223+ self .author = guild .get_member (int (member ["user" ]["id" ])) or Member (
224+ state = self ._state ,
225+ guild = guild ,
226+ data = member ,
231227 )
232228 self ._permissions = int (member .get ("permissions" , 0 ))
233229 elif user := data .get ("user" ):
@@ -263,8 +259,20 @@ def user(self) -> Union[User, Member]:
263259
264260 @property
265261 def guild (self ) -> Optional [Guild ]:
266- """Optional[:class:`Guild`]: The guild the interaction was sent from."""
267- return self ._state ._get_guild (self .guild_id )
262+ """Optional[:class:`Guild`]: The guild the interaction was sent from.
263+
264+ .. versionchanged:: 2.10
265+ Returns a :class:`Guild` object when the guild could not be resolved from cache.
266+ This object is created from the data provided by Discord, but it is not complete.
267+ The only populated attributes are:
268+ - :attr:`Guild.id`
269+ - :attr:`Guild.locale`
270+ - :attr:`Guild.features`
271+ """
272+ if self .guild_id is None :
273+ return None
274+
275+ return self ._state ._get_guild (self .guild_id ) or Guild (data = self ._guild , state = self ._state )
268276
269277 @utils .cached_slot_property ("_cs_me" )
270278 def me (self ) -> Union [Member , ClientUser ]:
0 commit comments