anchor.diff:      post(new LineSentEvent(this, line));
     }
   
  +  /**
  +   * Joins the specified [channel]
  +   */
     void join(String channel) => send("JOIN ${channel}");
   
  +  /**
  +   * Parts the specified [channel]
  +   */
     void part(String channel) => send("PART ${channel}");
   
  +  /**
  +   * Gets a Channel object for the channel's [name]
  +   */
     Channel channel(String name) => channels.firstWhere((channel) => channel.name == name, orElse: () => null);
   
  +  /**
  +   * Changes the Client's Nickname
  +   */
     void changeNickname(String nickname) {
       _nickname = nickname;
       send("NICK ${nickname}");
     }
   
  +  /**
  +   * Identifies the user with the [nickserv].
  +   * the default [username] is your configured username.
  +   * the default [password] is password
  +   * the default [nickserv] is NickServ
  +   */
     void identify({String username: "PLEASE_INJECT_DEFAULT", String password: "password", String nickserv: "NickServ"}) {
       if (username == "PLEASE_INJECT_DEFAULT") {
         username = config.username;
  
positive.code:     message(nickserv, "identify ${username} ${password}");
    }
  
    void disconnect({String reason: "Client Disconnecting", bool force: false}) {
      send("QUIT :${reason}");
      if (force) _socket.close();
    }
  
    @override
    void post(Event event) {
      if (event is ErrorEvent) {
  
negative.code: part of irc;
  
  /**
   * IRC Client is the most important class in irc.dart
   *
   *      var config = new BotConfig(
   *        nickname: "DartBot",
   *        host: "irc.esper.net",
   *        port: 6667
   *      );
   *      var client = new Client(config);
   *      // Use Client
   */
  class Client extends EventDispatcher {
    BotConfig config;
  
    /**
     * Channels that the Client is in.
     */
    List<Channel> channels = [];
  
    /**
     * WHOIS Implementation Builder Storage
     */
    Map<String, WhoisBuilder> _whois_builders;
  
    /**
     * Socket used for Communication between server and client
     */
    Socket _socket;
  
    /**
     * Flag for if the Client has sent a ReadyEvent
     */
    bool _ready = false;
  
    /**
     * Flag for if the Client has received any data from the server yet
     */
    bool _receivedAny = false;
  
    /**
     * Privately Stored Nickname
     */
    String _nickname;
  
    /**
     * The Client's Nickname
     */
    String get nickname => _nickname;
  
    /**
     * Flog for if the Client has hit an error
     */
    bool _errored = false;
  
    /**
     * IRC Parser to use
     */
    final IrcParser parser;
  
    /**
     * Creates a new IRC Client using the specified configuration
     * If parser is specified, then the parser is used for the current client
     */
    Client(BotConfig config, [IrcParser parser])
        : this.parser = parser == null ? new RegexIrcParser() : parser {
      this.config = config;
  