import Control.Applicative
import qualified Control.Monad as CM
import qualified Data.Map as DM
-from Control.Monad import class Monad, instance Monad Maybe, >>=
+from Control.Monad import class Monad(bind), instance Monad Maybe, >>=
from Text.Encodings.UrlEncoding import urlEncode
import System.CommandLine
import Internet.HTTP
import IRC
import IRCBot
+import StdMisc, StdDebug
+
shorten :: String *World -> (String, *World)
shorten s w
# s = if (startsWith "http://" s) s (if (startsWith "https://" s) s ("http://" + s))
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)
Start w
# ([arg0:args], w) = getCommandLine w
# (io, w) = stdio w
+# io = io <<< "\n"
# bs = parseCLI args
//| 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
-= (Nothing, w)//= (merr, snd $ fclose io w)
+= (merr, snd $ fclose io w)
where
parseCLI :: [String] -> MaybeErrorString BotSettings
parseCLI [] = Ok
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 strf pref m (io, w) = (io, w)
-// # (t, w) = localTime w
-// = (io <<< strfTime strf t <<< pref <<< toString m, w)
+ log :: String String IRCMessage (!*File, !*World) -> (!*File, !*World)
+ log strf pref m (io, w)
+ #! (t, w) = localTime w
+ = (io <<< strfTime strf t <<< pref <<< toString m, w)
process` :: (Maybe (Either IRCUser String)) IRCCommand *World -> (Maybe [IRCCommand], *World)
process` (Just (Left user)) (PRIVMSG t m) 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