async def download_channels(self, guild_id: int) -> 'typing.List[dt_channel.Channel]': """ Downloads all the :class:`.Channel` for a Guild. :param guild_id: The ID of the guild to download channels for. :return: An iterable of :class:`.Channel` objects. """ channel_data = await self.http.get_guild_channels(guild_id=guild_id) channels = [] for datum in channel_data: channel = dt_channel.Channel(self, **datum) channel.guild_id = guild_id channels.append(channel) return channels
def from_guild_create(self, **data: dict) -> 'Guild': """ Populates the fields from a GUILD_CREATE event. :param data: The GUILD_CREATE data to use. """ self.unavailable = data.get("unavailable", False) if self.unavailable: # We can't use any of the extra data here, so don't bother. return self self.name = data.get("name") # type: str self.icon_hash = data.get("icon") # type: str self.splash_hash = data.get("splash") # type: str self.owner_id = int(data.get("owner_id", 0)) or None # type: int self._large = data.get("large", None) self.features = data.get("features", []) self.region = data.get("region") afk_channel_id = data.get("afk_channel_id", 0) if afk_channel_id: afk_channel_id = int(afk_channel_id) self.afk_channel_id = afk_channel_id self.afk_timeout = data.get("afk_timeout") self.verification_level = VerificationLevel(data.get("verification_level", 0)) self.mfa_level = MFALevel(data.get("mfa_level", 0)) self.notification_level = NotificationLevel(data.get("default_message_notifications", 0)) self.content_filter_level = ContentFilterLevel(data.get("explicit_content_filter", 0)) self.member_count = data.get("member_count", 0) # Create all the Role objects for the server. for role_data in data.get("roles", []): role_obj = dt_role.Role(self._bot, **role_data) role_obj.guild_id = self.id self._roles[role_obj.id] = role_obj # Create all the Member objects for the server. self._handle_member_chunk(data.get("members", [])) for presence in data.get("presences", []): member_id = int(presence["user"]["id"]) member_obj = self._members.get(member_id) if not member_obj: continue member_obj.presence = Presence(**presence) # Create all of the channel objects. for channel_data in data.get("channels", []): channel_obj = dt_channel.Channel(self._bot, **channel_data) self._channels[channel_obj.id] = channel_obj channel_obj.guild_id = self.id channel_obj._update_overwrites(channel_data.get("permission_overwrites", []), ) # Create all of the voice states. for vs_data in data.get("voice_states", []): user_id = int(vs_data.get("user_id", 0)) member = self.members.get(user_id) if not member: # o well continue voice_state = dt_vs.VoiceState(**vs_data, client=self._bot) self._voice_states[voice_state.user_id] = voice_state vs_channel = self._channels.get(int(vs_data.get("channel_id", 0))) if vs_channel is not None: voice_state.channel_id = vs_channel.id voice_state.guild_id = self.id # delegate to other function self._handle_emojis(data.get("emojis", []))