code: func (rtm *RTM) handleEvent(typeStr string, event json.RawMessage) {
  	v, exists := EventMapping[typeStr]
  	if !exists {
  		rtm.Debugf("RTM Error - received unmapped event %q: %s\n", typeStr, string(event))
  		err := fmt.Errorf("RTM Error: Received unmapped event %q: %s", typeStr, string(event))
  		rtm.IncomingEvents <- RTMEvent{"unmarshalling_error", &UnmarshallingErrorEvent{err}}
  		return
  	}
  	t := reflect.TypeOf(v)
  	recvEvent := reflect.New(t).Interface()
  	err := json.Unmarshal(event, recvEvent)
  	if err != nil {
  		rtm.Debugf("RTM Error, could not unmarshall event %q: %s\n", typeStr, string(event))
  		err := fmt.Errorf("RTM Error: Could not unmarshall event %q: %s", typeStr, string(event))
  		rtm.IncomingEvents <- RTMEvent{"unmarshalling_error", &UnmarshallingErrorEvent{err}}
  		return
  	}
  	rtm.IncomingEvents <- RTMEvent{typeStr, recvEvent}
  }
docs: // handleEvent is the "default" response to an event that does not have a
  // special case. It matches the command's name to a mapping of defined events
  // and then sends the corresponding event struct to the IncomingEvents channel.
  // If the event type is not found or the event cannot be unmarshalled into the
  // correct struct then this sends an UnmarshallingErrorEvent to the
  // IncomingEvents channel.