open Lwt module C = Irc_client_lwt.Client let host = "irc.freenode.net" let port = 6667 let realname = "CheeseBot" let nick = "cheesebot" let username = nick let channel = "#cheeseburger" let string_opt_to_string = function | None -> "None" | Some s -> Printf.sprintf "Some %s" s let string_list_to_string string_list = Printf.sprintf "[%s]" (String.concat "; " string_list) let evaluate_string_opt = function | None -> None | Some s -> Evaluate.evaluate s let callback ~connection ~result = let open Irc_message in match result with | Message {prefix=prefix; command=command; params=params; trail=trail} -> begin Lwt_io.printf "Got message: prefix=%s; command=%s; params=%s; trail=%s\n" (string_opt_to_string prefix) command (string_list_to_string params) (string_opt_to_string trail); match command with | "PRIVMSG" -> begin let response = evaluate_string_opt trail in match response with | None -> Lwt.return_unit | Some s -> C.send_privmsg ~connection ~target:channel ~message:s end | _ -> Lwt.return_unit end | Parse_error (raw, error) -> Lwt_io.printf "Failed to parse \"%s\" because: %s" raw error let lwt_main = Lwt_unix.gethostbyname host >>= fun he -> C.connect ~addr:(he.Lwt_unix.h_addr_list.(0)) ~port ~username ~mode:0 ~realname ~nick ~password:"cheese" () >>= fun connection -> Lwt_io.printl "Connected" >>= fun () -> C.send_join ~connection ~channel >>= fun () -> C.listen ~connection ~callback >>= fun () -> C.send_quit ~connection let () = Lwt_main.run lwt_main