     /// GUILD_UPDATE
     case .guildUpdate:
       let guildId = GuildID(data["id"] as! String)!
-      let guild = self.sword.guilds[guildId]!
+      guard let guild = self.sword.guilds[guildId] else {
+        return
+      }
       guild.update(data) 
       self.sword.emit(.guildUpdate, with: guild)
 

    /// MESSAGE_DELETE
    case .messageDelete:
      let channelId = ChannelID(data["channel_id"] as! String)!
      let messageId = MessageID(data["id"] as! String)!
      self.sword.emit(
        .messageDelete,
        with: (messageId, self.sword.getChannel(for: channelId)!)
      )

    /// MESSAGE_BULK_DELETE
    case .messageDeleteBulk:
      let messageIds = (data["ids"] as! [String]).map({ MessageID($0)! })
      let channelId = ChannelID(data["channel_id"] as! String)!
      self.sword.emit(
        .messageDeleteBulk,
        with: (messageIds, self.sword.getChannel(for: channelId)!)
      )
      
    /// MESSAGE_REACTION_REMOVE_ALL
    case .messageReactionRemoveAll:
      let messageId = MessageID(data["message_id"] as! String)!
      let channelId = ChannelID(data["channel_id"] as! String)!
      self.sword.emit(
        .messageReactionRemoveAll,
        with: (messageId, self.sword.getChannel(for: channelId)!)
      )
      
    /// MESSAGE_UPDATE
    case .messageUpdate:

    /// GUILD_EMOJIS_UPDATE
    case .guildEmojisUpdate:
      let emojis = (data["emojis"] as! [[String: Any]]).map(Emoji.init)
      let guildId = GuildID(data["guild_id"] as! String)!
      guard let guild = self.sword.guilds[guildId] else {
        return
      }
      guild.emojis = emojis
      self.sword.emit(.guildEmojisUpdate, with: (guild, emojis))

    /// GUILD_INTEGRATIONS_UPDATE
    case .guildIntegrationsUpdate:
      let guildId = GuildID(data["guild_id"] as! String)!
      guard let guild = self.sword.guilds[guildId] else {
        return
      }
      self.sword.emit(.guildIntegrationsUpdate, with: guild)

    /// GUILD_MEMBER_ADD
    case .guildMemberAdd:
      let guildId = GuildID(data["guild_id"] as! String)!
      guard let guild = self.sword.guilds[guildId] else {
        return
      }
      let member = Member(self.sword, guild, data)
      guild.members[member.user.id] = member
      self.sword.emit(.guildMemberAdd, with: (guild, member))

    /// GUILD_MEMBER_REMOVE
    case .guildMemberRemove:
      let guildId = GuildID(data["guild_id"] as! String)!
      guard let guild = self.sword.guilds[guildId] else {
        return
      }
      let user = User(self.sword, data["user"] as! [String: Any])
      guild.members.removeValue(forKey: user.id)
      self.sword.emit(.guildMemberRemove, with: (guild, user))

    /// GUILD_MEMBERS_CHUNK
    case .guildMembersChunk:
      let guildId = GuildID(data["guild_id"] as! String)!
      guard let guild = self.sword.guilds[guildId] else {
        return
      }
      let members = data["members"] as! [[String: Any]]
      for member in members {
        let member = Member(self.sword, guild, member)
