import IRC
import IRCBot
-TIMEOUT :== Just 10000
-SERVER :== "irc.freenode.net"
+import StdMisc, StdDebug
shorten :: String *World -> (String, *World)
shorten s w
cloogle :: String *World -> (String, *World)
cloogle data w
-# (mer, w) = doHTTPRequestL
+# (mer, w) = doHTTPRequestFollowRedirects
{ newHTTPRequest
& req_path = "/api.php"
, req_query = "?str=" + urlEncode data
# resp = fromOk mer
= case fromJSON $ fromString resp.HTTPResponse.rsp_data of
Nothing = ("couldn't parse json", w)
+ Just {return=127} = ("No results for " + data, w)
Just clr = ("Results for " + data + " -- https://cloogle.org/#" +
replaceSubString "+" "%20" (urlEncode data) + "\n" +
processResults clr, w)
= join "\n" (map maxWidth lines)
maxWidth :: String -> String
- maxWidth s
- | size s > 80 = subString 0 77 s + "..."
- = s
+ maxWidth s = if (size s > 80) (subString 0 77 s + "...") s
:: BotSettings =
{ bs_nick :: String
, bs_strftime :: String
}
-//Start :: *World -> (MaybeErrorString (), *World)
+Start :: *World -> (Maybe String, *World)
Start w
# ([arg0:args], w) = getCommandLine w
# (io, w) = stdio w
+# io = io <<< "\n"
# bs = parseCLI args
-| isError bs = (Error $ "\n" +++ fromError bs +++ "\n", snd $ fclose io w)
+//| isError bs = (Just $ "\n" +++ fromError bs +++ "\n", snd $ fclose io w)
# (Ok bs) = bs
# (merr, io, w) = bot (bs.bs_server, bs.bs_port) (startup bs) shutdown io (process bs.bs_strftime) w
-= (maybe (Ok ()) Error merr, snd $ fclose io w)
+= (Nothing, w)//= (merr, snd $ fclose io w)
where
parseCLI :: [String] -> MaybeErrorString BotSettings
parseCLI [] = Ok
[JOIN (CSepList bs.bs_autojoin) Nothing]
shutdown = map toPrefix [QUIT $ Just "Bye"]
- //process :: String IRCMessage *File *World -> (Maybe [IRCMessage], *File, *World)
+ process :: String !IRCMessage *File !*World -> (Maybe [IRCMessage], *File, !*World)
process strf im io w
- # (io, w) = log strf " (r): " im (io, w)
+ #! (io, w) = log strf " (r): " im (io, w)
= case im.irc_command of
Left numr = (Just [], io, w)
Right cmd = case process` im.irc_prefix cmd w of
(Nothing, w) = (Nothing, io, w)
(Just cs, w)
# msgs = map toPrefix cs
- # (io, w) = foldr (log strf " (s): ") (io, w) msgs
+// #! (io, w) = foldr (log strf " (s): ") (io, w) msgs
= (Just msgs, io, w)
- //log :: String String IRCMessage (*File, *World) -> (*File, *World)
+ log :: String String IRCMessage (!*File, !*World) -> (!*File, !*World)
log strf pref m (io, w)
- # (t, w) = localTime w
+ #! (t, w) = localTime w
= (io <<< strfTime strf t <<< pref <<< toString m, w)
- //process` :: (Maybe (Either IRCUser String)) IRCCommand *World -> (Maybe [IRCCommand], *World)
+ process` :: (Maybe (Either IRCUser String)) IRCCommand *World -> (Maybe [IRCCommand], *World)
process` (Just (Left user)) (PRIVMSG t m) w
| m == "!restart" = (Nothing, w)
| m.[0] == '!'
# (msgs, w) = realProcess (split " " $ m % (1, size m)) w
= (Just $ map reply msgs, w)
+ | m % (0,4) == "\001PING" = (Just [reply m], w)
= (Just [], w)
where
reply = case (\(CSepList [t:_]) -> t.[0]) t of
process` _ (PING t mt) w = (Just [PONG t mt], w)
process` _ _ w = (Just [], w)
- //realProcess :: [String] *World -> ([String], *World)
+ realProcess :: [String] *World -> ([String], *World)
realProcess ["help",x:xs] w = ((case x of
"help" =
[ "Usage: !help [ARG]"