diff --git a/discord/guild.py b/discord/guild.py
index 5d7cb134d..ed2860bd9 100644
--- a/discord/guild.py
+++ b/discord/guild.py
@@ -249,10 +249,11 @@ class Guild(Hashable):
             for c in channels:
                 if c['type'] == ChannelType.text.value:
                     channel = TextChannel(guild=self, data=c, state=self._state)
-                else:
+                    self._add_channel(channel)
+                elif c['type'] == ChannelType.voice.value:
                     channel = VoiceChannel(guild=self, data=c, state=self._state)
+                    self._add_channel(channel)
 
-                self._add_channel(channel)
 
     @property
     def channels(self):
diff --git a/discord/state.py b/discord/state.py
index 0511b7545..c470d11cd 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -496,6 +496,10 @@ class ConnectionState:
             guild_id = utils._get_as_snowflake(data, 'guild_id')
             guild = self._get_guild(guild_id)
             if guild is not None:
+                if factory is None:
+                    log.warning('CHANNEL_CREATE referencing an unknown channel type %s. Discarding.', data['type'])
+                    return
+
                 channel = factory(guild=guild, state=self, data=data)
                 guild._add_channel(channel)
                 self.dispatch('guild_channel_create', channel)