|
68 | 68 | if typing.TYPE_CHECKING:
|
69 | 69 | ValueT = typing.TypeVar("ValueT")
|
70 | 70 | EntityT = typing.TypeVar("EntityT")
|
71 |
| - UndefinedNoneSnowflakeMapping = undefined.UndefinedNoneOr[typing.Mapping[snowflakes.Snowflake, EntityT]] |
| 71 | + UndefinedSnowflakeMapping = undefined.UndefinedOr[typing.Mapping[snowflakes.Snowflake, EntityT]] |
72 | 72 |
|
73 | 73 |
|
74 | 74 | _LOGGER: typing.Final[logging.Logger] = logging.getLogger("hikari.entity_factory")
|
@@ -190,47 +190,42 @@ class _UserFields:
|
190 | 190 | @attr_extensions.with_copy
|
191 | 191 | @attr.define(weakref_slot=False)
|
192 | 192 | class _GatewayGuildDefinition(entity_factory.GatewayGuildDefinition):
|
193 |
| - """A structure for handling entities within guild create and update events.""" |
194 |
| - |
195 | 193 | id: snowflakes.Snowflake = attr.field()
|
196 | 194 | _payload: data_binding.JSONObject = attr.field()
|
197 | 195 | _entity_factory: EntityFactoryImpl = attr.field()
|
198 | 196 | # These will get deserialized as needed
|
199 |
| - _channels: UndefinedNoneSnowflakeMapping[channel_models.GuildChannel] = attr.field( |
| 197 | + _channels: UndefinedSnowflakeMapping[channel_models.GuildChannel] = attr.field( |
200 | 198 | init=False, default=undefined.UNDEFINED
|
201 | 199 | )
|
202 | 200 | _guild: undefined.UndefinedOr[guild_models.GatewayGuild] = attr.field(init=False, default=undefined.UNDEFINED)
|
203 |
| - _emojis: undefined.UndefinedOr[typing.Mapping[emoji_models.KnownCustomEmoji]] = attr.field( |
204 |
| - init=False, default=undefined.UNDEFINED |
205 |
| - ) |
206 |
| - _members: UndefinedNoneSnowflakeMapping[guild_models.Member] = attr.field(init=False, default=undefined.UNDEFINED) |
207 |
| - _presences: UndefinedNoneSnowflakeMapping[presence_models.MemberPresence] = attr.field( |
| 201 | + _emojis: UndefinedSnowflakeMapping[emoji_models.KnownCustomEmoji] = attr.field( |
208 | 202 | init=False, default=undefined.UNDEFINED
|
209 | 203 | )
|
210 |
| - _roles: undefined.UndefinedOr[typing.Mapping[snowflakes.Snowflake, guild_models.Role]] = attr.field( |
| 204 | + _members: UndefinedSnowflakeMapping[guild_models.Member] = attr.field(init=False, default=undefined.UNDEFINED) |
| 205 | + _presences: UndefinedSnowflakeMapping[presence_models.MemberPresence] = attr.field( |
211 | 206 | init=False, default=undefined.UNDEFINED
|
212 | 207 | )
|
213 |
| - _voice_states: UndefinedNoneSnowflakeMapping[voice_models.VoiceState] = attr.field( |
| 208 | + _roles: UndefinedSnowflakeMapping[guild_models.Role] = attr.field(init=False, default=undefined.UNDEFINED) |
| 209 | + _voice_states: UndefinedSnowflakeMapping[voice_models.VoiceState] = attr.field( |
214 | 210 | init=False, default=undefined.UNDEFINED
|
215 | 211 | )
|
216 | 212 |
|
217 |
| - def channels(self) -> typing.Optional[typing.Mapping[snowflakes.Snowflake, channel_models.GuildChannel]]: |
| 213 | + def channels(self) -> typing.Mapping[snowflakes.Snowflake, channel_models.GuildChannel]: |
218 | 214 | if self._channels is undefined.UNDEFINED:
|
219 |
| - if "channels" in self._payload: |
220 |
| - self._channels = {} |
| 215 | + if "channels" not in self._payload: |
| 216 | + raise LookupError("'channels' not in payload") |
221 | 217 |
|
222 |
| - for channel_payload in self._payload["channels"]: |
223 |
| - try: |
224 |
| - channel = self._entity_factory.deserialize_channel(channel_payload, guild_id=self.id) |
225 |
| - except errors.UnrecognisedEntityError: |
226 |
| - # Ignore the channel, this has already been logged |
227 |
| - continue |
| 218 | + self._channels = {} |
228 | 219 |
|
229 |
| - assert isinstance(channel, channel_models.GuildChannel) |
230 |
| - self._channels[channel.id] = channel |
| 220 | + for channel_payload in self._payload["channels"]: |
| 221 | + try: |
| 222 | + channel = self._entity_factory.deserialize_channel(channel_payload, guild_id=self.id) |
| 223 | + except errors.UnrecognisedEntityError: |
| 224 | + # Ignore the channel, this has already been logged |
| 225 | + continue |
231 | 226 |
|
232 |
| - else: |
233 |
| - self._channels = None |
| 227 | + assert isinstance(channel, channel_models.GuildChannel) |
| 228 | + self._channels[channel.id] = channel |
234 | 229 |
|
235 | 230 | return self._channels
|
236 | 231 |
|
@@ -286,66 +281,55 @@ def guild(self) -> guild_models.GatewayGuild:
|
286 | 281 |
|
287 | 282 | return self._guild
|
288 | 283 |
|
289 |
| - def members(self) -> typing.Optional[typing.Mapping[snowflakes.Snowflake, guild_models.Member]]: |
| 284 | + def members(self) -> typing.Mapping[snowflakes.Snowflake, guild_models.Member]: |
290 | 285 | if self._members is undefined.UNDEFINED:
|
291 |
| - if "members" in self._payload: |
292 |
| - self._members = { |
293 |
| - snowflakes.Snowflake(m["user"]["id"]): self._entity_factory.deserialize_member(m, guild_id=self.id) |
294 |
| - for m in self._payload["members"] |
295 |
| - } |
296 |
| - |
297 |
| - for member_payload in self._payload["members"]: |
298 |
| - member = self._entity_factory.deserialize_member(member_payload, guild_id=self.id) |
299 |
| - self._members[member.user.id] = member |
300 |
| - else: |
301 |
| - self._members = None |
| 286 | + if "members" not in self._payload: |
| 287 | + raise LookupError("'members' not in payload") |
| 288 | + |
| 289 | + self._members = { |
| 290 | + snowflakes.Snowflake(m["user"]["id"]): self._entity_factory.deserialize_member(m, guild_id=self.id) |
| 291 | + for m in self._payload["members"] |
| 292 | + } |
302 | 293 |
|
303 | 294 | return self._members
|
304 | 295 |
|
305 |
| - def presences(self) -> typing.Optional[typing.Mapping[snowflakes.Snowflake, presence_models.MemberPresence]]: |
| 296 | + def presences(self) -> typing.Mapping[snowflakes.Snowflake, presence_models.MemberPresence]: |
306 | 297 | if self._presences is undefined.UNDEFINED:
|
307 |
| - if "presences" in self._payload: |
308 |
| - self._presences = { |
309 |
| - snowflakes.Snowflake(p["user"]["id"]): self._entity_factory.deserialize_member_presence( |
310 |
| - p, guild_id=self.id |
311 |
| - ) |
312 |
| - for p in self._payload["presences"] |
313 |
| - } |
| 298 | + if "presences" not in self._payload: |
| 299 | + raise LookupError("'presences' not in payload") |
314 | 300 |
|
315 |
| - for presence_payload in self._payload["presences"]: |
316 |
| - presence = self._entity_factory.deserialize_member_presence(presence_payload, guild_id=self.id) |
317 |
| - self._presences[presence.user_id] = presence |
318 |
| - else: |
319 |
| - self._presences = None |
| 301 | + self._presences = { |
| 302 | + snowflakes.Snowflake(p["user"]["id"]): self._entity_factory.deserialize_member_presence( |
| 303 | + p, guild_id=self.id |
| 304 | + ) |
| 305 | + for p in self._payload["presences"] |
| 306 | + } |
320 | 307 |
|
321 | 308 | return self._presences
|
322 | 309 |
|
323 | 310 | def roles(self) -> typing.Mapping[snowflakes.Snowflake, guild_models.Role]:
|
324 |
| - if self._roles is None: |
325 |
| - if self._roles is undefined.UNDEFINED: |
326 |
| - self._roles = { |
327 |
| - snowflakes.Snowflake(r["id"]): self._entity_factory.deserialize_role(r, guild_id=self.id) |
328 |
| - for r in self._payload["roles"] |
329 |
| - } |
| 311 | + if self._roles is undefined.UNDEFINED: |
| 312 | + self._roles = { |
| 313 | + snowflakes.Snowflake(r["id"]): self._entity_factory.deserialize_role(r, guild_id=self.id) |
| 314 | + for r in self._payload["roles"] |
| 315 | + } |
330 | 316 |
|
331 | 317 | return self._roles
|
332 | 318 |
|
333 |
| - def voice_states(self) -> typing.Optional[typing.Mapping[snowflakes.Snowflake, voice_models.VoiceState]]: |
| 319 | + def voice_states(self) -> typing.Mapping[snowflakes.Snowflake, voice_models.VoiceState]: |
334 | 320 | if self._voice_states is undefined.UNDEFINED:
|
335 |
| - if "voice_states" in self._payload: |
336 |
| - members = self.members() |
337 |
| - assert members is not None, "voice_states present but not members?" |
338 |
| - self._voice_states = {} |
339 |
| - |
340 |
| - for voice_state_payload in self._payload["voice_states"]: |
341 |
| - member = members[snowflakes.Snowflake(voice_state_payload["user_id"])] |
342 |
| - voice_state = self._entity_factory.deserialize_voice_state( |
343 |
| - voice_state_payload, guild_id=self.id, member=member |
344 |
| - ) |
345 |
| - self._voice_states[voice_state.user_id] = voice_state |
| 321 | + if "voice_states" not in self._payload: |
| 322 | + raise LookupError("'voice_states' not in payload") |
346 | 323 |
|
347 |
| - else: |
348 |
| - self._voice_states = None |
| 324 | + members = self.members() |
| 325 | + self._voice_states = {} |
| 326 | + |
| 327 | + for voice_state_payload in self._payload["voice_states"]: |
| 328 | + member = members[snowflakes.Snowflake(voice_state_payload["user_id"])] |
| 329 | + voice_state = self._entity_factory.deserialize_voice_state( |
| 330 | + voice_state_payload, guild_id=self.id, member=member |
| 331 | + ) |
| 332 | + self._voice_states[voice_state.user_id] = voice_state |
349 | 333 |
|
350 | 334 | return self._voice_states
|
351 | 335 |
|
|
0 commit comments