From f1b48d77dfccb36945837d3a6486e24c6eb283ac Mon Sep 17 00:00:00 2001 From: darkf Date: Sun, 27 Oct 2013 02:11:08 -0700 Subject: [PATCH] add isAdmin function --- irc.lamb | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/irc.lamb b/irc.lamb index 936d75b..dee36c7 100644 --- a/irc.lamb +++ b/irc.lamb @@ -1,3 +1,8 @@ +-- global data stuff + +-- nicks of administrators +ADMINS = ["darkf"]. + -- First we'll define some helper functions map(f, []) -> []. @@ -15,6 +20,12 @@ is_nothing(_) -> false. unwrap_maybe(("just", x)) -> x. +-- list membership test +is_member([], _) -> false. +is_member(x::xs, member) -> + if x == member then true + else is_member(xs, member). + -- association list -- insert a pair into a map @@ -58,6 +69,10 @@ ircnick'("!"::xs, acc) -> acc. ircnick'(x::xs, acc) -> ircnick'(xs, acc + x). ircnick(str) -> ircnick'(str, ""). +isAdmin(nick) -> do + is_member(ADMINS, nick) +end. + -- state getters getFactoids(state) -> do (factoids) = state; @@ -106,17 +121,24 @@ handleMessage(s, nick, chan, "$defact "::line) -> do setFactoids(s, map_insert(factoids, k, v)) end. -handleMessage(s, "darkf", chan, "$savefacts") -> do - saveFactoids(getFactoids(s)); - say(chan, "factoids saved."); +handleMessage(s, nick, chan, "$savefacts") -> do + if isAdmin(nick) then do + saveFactoids(getFactoids(s)); + say(chan, "factoids saved.") + end + else say(chan, nick + ": you are not an admin"); s end. handleMessage(s, nick, chan, "$ping") -> do say(chan, nick + ": pong"); s end. -handleMessage(s, "darkf", chan, "$quit") -> do - say(chan, "bye!"); - fputstr(sock, "QUIT\r\n"); - fclose(sock); + +handleMessage(s, nick, chan, "$quit") -> do + if isAdmin(nick) then do + say(chan, "bye!"); + fputstr(sock, "QUIT\r\n"); + fclose(sock) + end + else say(chan, nick + ": you are not an admin"); s end.