sig
  type mode =
      Add_channel_mode of string * Irc.channel_mode
    | Remove_channel_mode of string * Irc.channel_mode
    | Add_user_mode of Irc.user_mode * string
    | Remove_user_mode of Irc.user_mode * string
  and channel_mode =
      Channel_mode_op of string
    | Channel_mode_private
    | Channel_mode_secret
    | Channel_mode_invite_only
    | Channel_mode_op_topic
    | Channel_mode_no_outside_messages
    | Channel_mode_moderated
    | Channel_mode_user_limit of int
    | Channel_mode_ban of string
    | Channel_mode_voice of string
    | Channel_mode_key
  and user_mode =
      User_mode_invisible
    | User_mode_server_notices
    | User_mode_wallops
    | User_mode_op
  type reply =
      Rpl_who
    | Rpl_end_of_who
    | Rpl_whois_channels
    | Rpl_name_reply
    | Rpl_MOTD_start
    | Rpl_MOTD
    | Rpl_end_of_MOTD
  type sender
  val string_of_sender : Irc.sender -> string
  val filter_stupid_mirc_color_codes : string -> string
  val color_text : int -> string -> string
  val bicolor_text : int -> int -> string -> string
  val bold_text : string -> string
  val underline_text : string -> string
  val reverse_text : string -> string
  val beep_text : unit -> string
  module type Client_params =
    sig
      val server : string
      val port : int
      val nick : string
      val realname : string
      val user : string
      val host : string
    end
  module Client :
    functor (P : Client_params->
      sig
        val connect : unit -> unit
        val disconnect : unit -> unit
        val event_loop : unit -> unit
        val join : string -> unit
        val part : string -> unit
        val quit : string -> unit
        val change_user : string -> string -> string -> unit
        val change_nick : string -> unit
        val kick : string -> string -> string -> unit
        val invite : string -> string -> unit
        val op : string -> string -> unit
        val set_away : string -> unit
        val set_back : unit -> unit
        val change_topic : string -> string -> unit
        val say : string -> string -> unit
        val notice : string -> string -> unit
        val ctcp_ping : string -> float -> unit
        val get_topic : string -> unit
        val change_mode : Irc.mode -> unit
        val get_chan_list : unit -> unit
        val get_version : unit -> unit
        val get_time : unit -> unit
        val get_info : unit -> unit
        val get_who : string -> unit
        val get_who_ircop : string -> unit
        val get_whois : string -> unit
        val get_whowas : string -> unit
        val ping : string -> unit
        val on_message :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_notice :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_mode : (Irc.sender -> Irc.mode -> unit) Pervasives.ref
        val on_nick : (Irc.sender -> string -> unit) Pervasives.ref
        val on_kick :
          (Irc.sender -> string -> string -> string option -> unit)
          Pervasives.ref
        val on_reply :
          (Irc.sender -> Irc.reply -> string array -> unit) Pervasives.ref
        val on_ctcp_version : (Irc.sender -> string -> unit) Pervasives.ref
        val on_ctcp_time : (Irc.sender -> string -> unit) Pervasives.ref
        val on_ctcp_ping :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_ctcp_action :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_ctcp : (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_ctcp_ping_reply :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_ctcp_reply :
          (Irc.sender -> string -> string -> unit) Pervasives.ref
        val on_ping : (Irc.sender -> string -> unit) Pervasives.ref
        val on_join : (Irc.sender -> string -> unit) Pervasives.ref
        val on_part :
          (Irc.sender -> string -> string option -> unit) Pervasives.ref
        val on_quit : (Irc.sender -> string option -> unit) Pervasives.ref
        val on_error : (Irc.sender -> string -> unit) Pervasives.ref
        val dump_everything : bool Pervasives.ref
      end
end