X-Git-Url: https://git.martlubbers.net/?p=cloogle-irc.git;a=blobdiff_plain;f=IRC.dcl;h=862c29b098afd423125eb71cf67639c0652729b4;hp=157b6d7ea415c3442150b7f875dc1d220bf34ff7;hb=9d3f47b4dfbfcda74e3615361e858d156e3ef395;hpb=d0094022a0169765678e500d2713db15433248bd diff --git a/IRC.dcl b/IRC.dcl index 157b6d7..862c29b 100644 --- a/IRC.dcl +++ b/IRC.dcl @@ -1,13 +1,82 @@ definition module IRC -from StdOverloaded import class fromInt, class toInt, class toString +from Data.Maybe import :: Maybe +from Data.Either import :: Either +from StdOverloaded import class fromInt, class toInt, class toString, class fromString +from Text.Parsers.Simple.Core import :: Error -:: IRCCommands = ADMIN | AWAY | CONNECT | DIE | ERROR | INFO | INVITE | ISON | - JOIN | KICK | KILL | LINKS | LIST | LUSERS | MODE | MOTD | NAMES | NICK | - NJOIN | NOTICE | OPER | PART | PASS | PING | PONG | PRIVMSG | QUIT | - REHASH | RESTART | SERVER | SERVICE | SERVLIST | SQUERY | SQUIRT | SQUIT | - STATS | SUMMON | TIME | TOPIC | TRACE | USER | USERHOST | USERS | VERSION | - WALLOPS | WHO | WHOIS | WHOWAS +:: IRCMessage = + { irc_prefix :: Maybe (Either IRCUser String) + , irc_command :: Either IRCNumReply IRCCommand} + +:: IRCNumReply = + { irc_reply :: IRCReplies + , irc_recipient :: String + , irc_message :: String + } + +:: IRCUser = + { irc_nick :: String + , irc_user :: Maybe String + , irc_host :: Maybe String + } + +parseIRCMessage :: String -> Either [Error] IRCMessage + +instance toString IRCCommand, IRCReplies, IRCErrors, IRCMessage, IRCUser, IRCNumReply +instance fromInt IRCReplies, IRCErrors +instance toInt IRCReplies, IRCErrors + +:: CSepList = CSepList [String] +:: IRCCommand + = ADMIN (Maybe String) + | AWAY String + | CONNECT String (Maybe (Int, Maybe String)) + | DIE + | ERROR String + | INFO (Maybe String) + | INVITE String String + | ISON [String] + | JOIN CSepList (Maybe String) + | KICK String String (Maybe String) + | KILL String String + | LINKS (Maybe (Maybe String, String)) + | LIST (Maybe (CSepList, Maybe String)) + | LUSERS (Maybe (String, Maybe String)) + | MODE String String (Maybe String) (Maybe String) (Maybe String) + | MOTD (Maybe String) + | NAMES CSepList + | NICK String (Maybe String) + | NJOIN + | NOTICE String String + | OPER String String + | PART CSepList + | PASS String + | PING String (Maybe String) + | PONG String (Maybe String) + | PRIVMSG CSepList String + | QUIT (Maybe String) + | REHASH + | RESTART + | SERVER + | SERVICE String String String String + | SERVLIST (Maybe (String, Maybe String)) + | SQUERY String String + | SQUIRT + | SQUIT String String + | STATS (Maybe (String, Maybe String)) + | SUMMON String (Maybe (String, Maybe String)) + | TIME (Maybe String) + | TOPIC String (Maybe String) + | TRACE (Maybe String) + | USER String String String String + | USERHOST CSepList + | USERS (Maybe String) + | VERSION (Maybe String) + | WALLOPS String + | WHO (Maybe String) + | WHOIS (Maybe String) String + | WHOWAS String (Maybe (String, Maybe String)) :: IRCReplies = RPL_WELCOME | RPL_YOURHOST | RPL_CREATED | RPL_MYINFO | RPL_BOUNCE | RPL_TRACELINK | RPL_TRACECONNECTING | RPL_TRACEHANDSHAKE | @@ -28,7 +97,7 @@ from StdOverloaded import class fromInt, class toInt, class toString RPL_ENDOFBANLIST | RPL_ENDOFWHOWAS | RPL_INFO | RPL_MOTD | RPL_ENDOFINFO | RPL_MOTDSTART | RPL_ENDOFMOTD | RPL_YOUREOPER | RPL_REHASHING | RPL_YOURESERVICE | RPL_TIME | RPL_USERSSTART | RPL_USERS | RPL_ENDOFUSERS | - RPL_NOUSERS + RPL_NOUSERS | RPL_UNKNOWN :: IRCErrors = ERR_NOSUCHNICK | ERR_NOSUCHSERVER | ERR_NOSUCHCHANNEL | ERR_CANNOTSENDTOCHAN | ERR_TOOMANYCHANNELS | ERR_WASNOSUCHNICK | @@ -40,13 +109,10 @@ from StdOverloaded import class fromInt, class toInt, class toString ERR_NOTONCHANNEL | ERR_USERONCHANNEL | ERR_NOLOGIN | ERR_SUMMONDISABLED | ERR_USERSDISABLED | ERR_NOTREGISTERED | ERR_NEEDMOREPARAMS | ERR_ALREADYREGISTRED | ERR_NOPERMFORHOST | ERR_PASSWDMISMATCH | - ERR_YOUREBANNEDCREEP | ERR_YOUWILLBEBANNED | ERR_KEYSET | ERR_CHANNELISFULL | - ERR_UNKNOWNMODE | ERR_INVITEONLYCHAN | ERR_BANNEDFROMCHAN | - ERR_BADCHANNELKEY | ERR_BADCHANMASK | ERR_NOCHANMODES | ERR_BANLISTFULL | - ERR_NOPRIVILEGES | ERR_CHANOPRIVSNEEDED | ERR_CANTKILLSERVER | - ERR_RESTRICTED | ERR_UNIQOPPRIVSNEEDED | ERR_NOOPERHOST | - ERR_UMODEUNKNOWNFLAG | ERR_USERSDONTMATCH - -instance toString IRCCommands, IRCReplies, IRCErrors -instance fromInt IRCReplies, IRCErrors -instance toInt IRCReplies, IRCErrors + ERR_YOUREBANNEDCREEP | ERR_YOUWILLBEBANNED | ERR_KEYSET | + ERR_CHANNELISFULL | ERR_UNKNOWNMODE | ERR_INVITEONLYCHAN | + ERR_BANNEDFROMCHAN | ERR_BADCHANNELKEY | ERR_BADCHANMASK | + ERR_NOCHANMODES | ERR_BANLISTFULL | ERR_NOPRIVILEGES | + ERR_CHANOPRIVSNEEDED | ERR_CANTKILLSERVER | ERR_RESTRICTED | + ERR_UNIQOPPRIVSNEEDED | ERR_NOOPERHOST | ERR_UMODEUNKNOWNFLAG | + ERR_USERSDONTMATCH | ERR_UNKNOWN