add NOTICE command
This commit is contained in:
parent
41bf46b8dc
commit
8acfc89f0d
|
@ -73,7 +73,7 @@ let away nick text = "301", [nick; text]
|
||||||
let nosuchnick tgt = "401", [tgt; "No such nick/channel"]
|
let nosuchnick tgt = "401", [tgt; "No such nick/channel"]
|
||||||
let nosuchchannel tgt = "403", [tgt; "No such channel"]
|
let nosuchchannel tgt = "403", [tgt; "No such channel"]
|
||||||
let cannotsendtochan tgt = "404", [tgt; "Cannot send to channel"]
|
let cannotsendtochan tgt = "404", [tgt; "Cannot send to channel"]
|
||||||
let norecipient = "411", ["No recipient given (PRIVMSG)"]
|
let norecipient cmd = "411", [Fmt.str "No recipient given (%s)" cmd]
|
||||||
let notexttosend = "412", ["No text to send"]
|
let notexttosend = "412", ["No text to send"]
|
||||||
let unknowncommand cmd = "421", [cmd; "Unknown command"]
|
let unknowncommand cmd = "421", [cmd; "Unknown command"]
|
||||||
let nonicknamegiven = "431", ["No nickname given"]
|
let nonicknamegiven = "431", ["No nickname given"]
|
||||||
|
@ -282,7 +282,7 @@ let on_msg_mode t name args =
|
||||||
|
|
||||||
(* messages and channels *)
|
(* messages and channels *)
|
||||||
|
|
||||||
let on_privmsg_chan from chan =
|
let send_to_chan ~from chan =
|
||||||
let cannot_send =
|
let cannot_send =
|
||||||
try
|
try
|
||||||
let mem = Router.membership chan from in
|
let mem = Router.membership chan from in
|
||||||
|
@ -300,25 +300,25 @@ let on_privmsg_chan from chan =
|
||||||
else
|
else
|
||||||
Ok (Chan.name chan, [`to_chan chan])
|
Ok (Chan.name chan, [`to_chan chan])
|
||||||
|
|
||||||
let on_privmsg_user _from user =
|
let send_to_user user =
|
||||||
match User.away user with
|
match User.away user with
|
||||||
| Some text ->
|
| Some text ->
|
||||||
Error (away (User.nick user) text)
|
Error (away (User.nick user) text)
|
||||||
| None ->
|
| None ->
|
||||||
Ok (User.nick user, [`to_user user])
|
Ok (User.nick user, [`to_user user])
|
||||||
|
|
||||||
let on_msg_privmsg t tgt txt =
|
let on_msg_privmsg ?(cmd = "PRIVMSG") t tgt txt =
|
||||||
let* me = require_registered t in
|
let* me = require_registered t in
|
||||||
let* name, tgts =
|
let* name, tgts =
|
||||||
try
|
try
|
||||||
match name_type tgt with
|
match name_type tgt with
|
||||||
| `chan -> on_privmsg_chan me (Router.find_chan t.router tgt)
|
| `chan -> send_to_chan (Router.find_chan t.router tgt) ~from:me
|
||||||
| `nick -> on_privmsg_user me (Router.find_user t.router tgt)
|
| `nick -> send_to_user (Router.find_user t.router tgt)
|
||||||
| `invalid -> raise Not_found
|
| `invalid -> raise Not_found
|
||||||
with Not_found ->
|
with Not_found ->
|
||||||
Error (nosuchnick tgt)
|
Error (nosuchnick tgt)
|
||||||
in
|
in
|
||||||
let msg = Msg.make "PRIVMSG" [name; txt] ~always_trailing:true in
|
let msg = Msg.make cmd [name; txt] ~always_trailing:true in
|
||||||
Router.relay msg ~from:me tgts;
|
Router.relay msg ~from:me tgts;
|
||||||
Ok ()
|
Ok ()
|
||||||
|
|
||||||
|
@ -920,10 +920,6 @@ let dispatch t = function
|
||||||
| "HELP", args -> on_msg_help t (concat_args args)
|
| "HELP", args -> on_msg_help t (concat_args args)
|
||||||
| "PING", args -> on_msg_ping t (concat_args args)
|
| "PING", args -> on_msg_ping t (concat_args args)
|
||||||
| "PONG", args -> on_msg_pong t (concat_args args)
|
| "PONG", args -> on_msg_pong t (concat_args args)
|
||||||
| "PRIVMSG", ([] | "" :: _) -> Error norecipient
|
|
||||||
| "PRIVMSG", ([_] | _ :: "" :: _) -> Error notexttosend
|
|
||||||
| "PRIVMSG", tgt :: msg :: _ -> on_msg_privmsg t tgt msg
|
|
||||||
(* TODO: "NOTICE" *)
|
|
||||||
| "JOIN", tgt :: _ when tgt <> "" -> on_msg_join t tgt
|
| "JOIN", tgt :: _ when tgt <> "" -> on_msg_join t tgt
|
||||||
| "JOIN 0", _ -> (* hack; see split_command_params *) on_msg_join_0 t
|
| "JOIN 0", _ -> (* hack; see split_command_params *) on_msg_join_0 t
|
||||||
| "NAMES", tgt :: _ when tgt <> "" -> on_msg_names t tgt
|
| "NAMES", tgt :: _ when tgt <> "" -> on_msg_names t tgt
|
||||||
|
@ -944,6 +940,14 @@ let dispatch t = function
|
||||||
Error (needmoreparams cmd)
|
Error (needmoreparams cmd)
|
||||||
| ("CONNECT" | "KILL" | "REHASH" | "RESTART" | "STATS" | "SQUIT" | "WALLOPS"), _ ->
|
| ("CONNECT" | "KILL" | "REHASH" | "RESTART" | "STATS" | "SQUIT" | "WALLOPS"), _ ->
|
||||||
Error noprivileges
|
Error noprivileges
|
||||||
|
|
||||||
|
| ("PRIVMSG" | "NOTICE") as cmd, args ->
|
||||||
|
begin match args with
|
||||||
|
| [] | "" :: _ -> Error (norecipient cmd)
|
||||||
|
| [_] | _ :: "" :: _ -> Error notexttosend
|
||||||
|
| tgt :: msg :: _ -> on_msg_privmsg t tgt msg ~cmd
|
||||||
|
end
|
||||||
|
|
||||||
(* TODO: "LIST" *)
|
(* TODO: "LIST" *)
|
||||||
| cmd, _ ->
|
| cmd, _ ->
|
||||||
Error (unknowncommand cmd)
|
Error (unknowncommand cmd)
|
||||||
|
|
Loading…
Reference in New Issue