code: func (line *Line) Public() bool {
  	switch line.Cmd {
  	case PRIVMSG, NOTICE, ACTION:
  		switch line.Args[0][0] {
  		case '#', '&', '+', '!':
  			return true
  		}
  	case CTCP, CTCPREPLY:
  		// CTCP prepends the CTCP verb to line.Args, thus for the message
  		//   :nick!user@host PRIVMSG #foo :\001BAR baz\001
  		// line.Args contains: []string{"BAR", "#foo", "baz"}
  		// TODO(fluffle): Arguably this is broken, and we should have
  		// line.Args containing: []string{"#foo", "BAR", "baz"}
  		// ... OR change conn.Ctcp()'s argument order to be consistent.
  		switch line.Args[1][0] {
  		case '#', '&', '+', '!':
  			return true
  		}
  	}
  	return false
  }
docs: // Public returns true if the line is the result of an IRC user sending
  // a message to a channel the client has joined instead of directly
  // to the client.
  //
  // NOTE: This is very permissive, allowing all 4 RFC channel types even if
  // your server doesn't technically support them.