code: func (cm *ChanMode) String() string {
  	if cm == nil {
  		return "No modes set"
  	}
  	str := "+"
  	a := make([]string, 0)
  	v := reflect.Indirect(reflect.ValueOf(cm))
  	t := v.Type()
  	for i := 0; i < v.NumField(); i++ {
  		switch f := v.Field(i); f.Kind() {
  		case reflect.Bool:
  			if f.Bool() {
  				str += ChanModeToString[t.Field(i).Name]
  			}
  		case reflect.String:
  			if f.String() != "" {
  				str += ChanModeToString[t.Field(i).Name]
  				a = append(a, f.String())
  			}
  		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  			if f.Int() != 0 {
  				str += ChanModeToString[t.Field(i).Name]
  				a = append(a, strconv.FormatInt(f.Int(), 10))
  			}
  		}
  	}
  	for _, s := range a {
  		if s != "" {
  			str += " " + s
  		}
  	}
  	if str == "+" {
  		str = "No modes set"
  	}
  	return str
  }
docs: // Returns a string representing the channel modes. Looks like:
  //	+npk key