module Network.IRC.Fun.Messages.Internal.Types
(
ServerName
, ServiceName
, UserName
, NickName
, ChannelName
, CommandName
, Parameter
, Password
, ChannelKey
, ChannelTopic
, RealName
, Comment
, PortNumber
, Regex
, Prefix (..)
, UserAddr (..)
, Target (..)
, Address (..)
, Host (..)
, Command (..)
, MaskPart (..)
, Mask (..)
, TargetMask (..)
, GenericMessage (..)
, SpecificMessage (..)
, MessageTarget (..)
, Message (..)
, AnalysisError (..)
, ArgSpec (..)
, UserMode (..)
, ChannelMode (..)
, ChannelModeType (..)
, CommandResponseCode (..)
, ErrorReplyCode (..)
, ReservedReplyCode (..)
, ReservedErrorCode (..)
, GenericReply (..)
, Reply (..)
, SpecificReply (..)
, Privilege (..)
, ChannelPrivacy (..)
)
where
import Text.Regex.Applicative (RE)
type ServerName = String
type ServiceName = String
type UserName = String
type NickName = String
type ChannelName = String
type CommandName = String
type Parameter = String
type Password = String
type ChannelKey = String
type ChannelTopic = String
type RealName = String
type Comment = String
type PortNumber = Int
type Regex = RE Char
data Prefix
= Server ServerName
| Nick NickName (Maybe UserName) (Maybe Host)
deriving (Eq, Show)
data UserAddr = UserAddr UserName (Maybe Host) deriving (Eq, Show)
data Target = NickTarget NickName | ServerTarget ServerName deriving (Eq, Show)
data Address = IPv4 String | IPv6 String deriving (Eq, Show)
data Host = HostName String | HostAddr Address | HostCloak String
deriving (Eq, Show)
data Command = StringCommand CommandName | NumericCommand Int
deriving (Eq, Show)
data MaskPart
= MaskChar Char
| MaskWildOne
| MaskWildMany
deriving (Eq, Show)
newtype Mask = Mask [MaskPart] deriving (Eq, Show)
data TargetMask
= HostMask Mask
| ServerMask Mask
deriving (Eq, Show)
data GenericMessage = GenericMessage
{ gmPrefix :: Maybe Prefix
, gmCommand :: Command
, gmParams :: [Parameter]
}
deriving Show
data SpecificMessage = SpecificMessage (Maybe Prefix) Message deriving Show
data MessageTarget
= ChannelTarget ChannelName
| UserTarget (Maybe NickName) (Maybe UserAddr) (Maybe ServerName)
| MaskTarget TargetMask
deriving Show
data Query
= Connections
| CommandUsage
| PrivilegedUsers
| Uptime
| OtherQuery Char
deriving Show
data Message
= PassMessage Password
| NickMessage NickName
| UserMessage UserName Bool Bool RealName
| OperMessage UserName Password
| UserModeMessage NickName [UserMode] [UserMode]
| ServiceMessage NickName Mask String
| QuitMessage (Maybe String)
| SQuitMessage ServerName String
| JoinMessage (Maybe ([ChannelName], [ChannelKey]))
| PartMessage [ChannelName] (Maybe String)
| ChannelModeMessage [ChannelMode] [ChannelMode]
| TopicMessage ChannelName (Maybe ChannelTopic)
| NamesMessage [ChannelName] (Maybe ServerName)
| ListMessage [ChannelName] (Maybe ServerName)
| InviteMessage NickName ChannelName
| KickMessage [ChannelName] [UserName] (Maybe Comment)
| PrivMsgMessage MessageTarget String
| PrivActionMessage MessageTarget String
| NoticeMessage MessageTarget String
| MotdMessage (Maybe ServerName)
| LusersMessage (Maybe (Mask, Maybe ServerName))
| VersionMessage (Maybe (Either ServerName Mask))
| StatsMessage (Maybe (Query, Maybe (Either ServerName Mask)))
| LinksMessage (Maybe (Maybe (Either ServerName Mask), Mask))
| TimeMessage (Maybe (Either ServerName Mask))
| ConnectMessage ServerName PortNumber (Either ServerName Mask)
| TraceMessage (Maybe Target)
| AdminMessage (Maybe Target)
| InfoMessage (Maybe Target)
| ServlistMessage (Maybe (Mask, Maybe String))
| SQueryMessage ServiceName String
| WhoMessage (Maybe (Mask, Bool))
| WhoisMessage (Maybe ServerName) [Mask]
| WhowasMessage [NickName] (Maybe (Int, Maybe ServerName))
| KillMessage NickName Comment
| PingMessage ServerName (Maybe ServerName)
| PongMessage ServerName (Maybe ServerName)
| ErrorMessage String
| AwayMessage (Maybe String)
| RehashMessage
| DieMessage
| RestartMessage
| SummonMessage UserName (Maybe (ServerName, Maybe ChannelName))
| UsersMessage (Maybe ServerName)
| WallopsMessage String
| UserhostMessage [NickName]
| IsonMessage [NickName]
deriving Show
data UserMode
= UModeInvisible
| UModeCallerID
| UModeSeeWallops
| UModeDeaf
| UModeNoForwarding
| UModeBlockUnidentified
| UModeConnectedViaSSL
| UModeAway
| UModeRestricted
| UModeOperator
| UModeLocalOperator
| UModeSeeNotices
| UModeOther Char
deriving (Eq, Show)
data ChannelMode
= CModeCreator
| CModeOperator
| CModeVoice
| CModeAnonymous
| CModeInviteOnly
| CModeModerated
| CModeNoMessagesFromOutside
| CModeQuiet
| CModePrivate
| CModeSecret
| CModeServerReop
| CModeTopicSettableByChannelOpOnly
| CModeKey (Maybe ChannelKey)
| CModeUserLimit (Maybe Int)
| CModeBanMask (Maybe Mask)
| CModeExceptionMask (Maybe Mask)
| CModeInvitationMask (Maybe Mask)
| CModeOther Char [String]
| CModeFreenodeQuiet (Maybe Mask)
deriving (Eq, Show)
data ChannelModeType
= ModeTypeList
| ModeTypeSetting
| ModeTypeMaybeSetting
| ModeTypeFlag
data CommandResponseCode
= ReplyWelcome
| ReplyYourHost
| ReplyCreated
| ReplyMyInfo
| ReplyBounce
| ReplyUserHost
| ReplyIsOn
| ReplyAway
| ReplyUnAway
| ReplyNoAway
| ReplyWhoIsUser
| ReplyWhoIsServer
| ReplyWhoIsOperator
| ReplyWhoIsIdle
| ReplyEndOfWhoIs
| ReplyWhoIsChannels
| ReplyWhoWasUser
| ReplyEndOfWhoWas
| ReplyListStart
| ReplyList
| ReplyListEnd
| ReplyUniqueOpIs
| ReplyChannelModeIs
| ReplyNoTopic
| ReplyTopic
| ReplyInviting
| ReplySummoning
| ReplyInviteList
| ReplyEndOfInviteList
| ReplyExceptList
| ReplyEndOfExceptList
| ReplyVersion
| ReplyWhoReply
| ReplyEndOfWho
| ReplyNameReply
| ReplyEndOfNames
| ReplyLinks
| ReplyEndOfLinks
| ReplyBanList
| ReplyEndOfBanList
| ReplyInfo
| ReplyEndOfInfo
| ReplyMotdStart
| ReplyMessageOfTheDay
| ReplyEndOfMessageOfTheDay
| ReplyYoureOper
| ReplyRehashing
| ReplyYoureService
| ReplyTime
| ReplyUsersStart
| ReplyUsers
| ReplyEndOfUsers
| ReplyNoUsers
| ReplyTraceLink
| ReplyTraceConnecting
| ReplyTraceHandshake
| ReplyTraceUnknown
| ReplyTraceOperator
| ReplyTraceUser
| ReplyTraceServer
| ReplyTraceService
| ReplyTraceNewType
| ReplyTraceClass
| ReplyTraceReconnect
| ReplyTraceLog
| ReplyTraceEnd
| ReplyStatsLinkInfo
| ReplyStatsCommands
| ReplyEndOfStats
| ReplyStatsUptime
| ReplyStatsOLine
| ReplyUModeIs
| ReplyServList
| ReplyServListEnd
| ReplyLuserClient
| ReplyLuserOp
| ReplyLuserUnknown
| ReplyLuserChannels
| ReplyLuserMe
| ReplyAdminMe
| ReplyAdminLocation1
| ReplyAdminLocation2
| ReplyAdminEmail
| ReplyTryAgain
| ReplyFreenodeISupport
deriving (Eq, Show)
data ErrorReplyCode
= ErrorNoSuchNick
| ErrorNoSuchServer
| ErrorNoSuchChannel
| ErrorCannotSendToChannel
| ErrorTooManyChannels
| ErrorWasNoSuchNick
| ErrorTooManyTargets
| ErrorNoSuchService
| ErrorNoOrigin
| ErrorNoRecipient
| ErrorNoTextToSend
| ErrorNoTopLevel
| ErrorWildTopLevel
| ErrorBadMask
| ErrorUnknownCommand
| ErrorNoMessageOfTheDay
| ErrorNoAdminInfo
| ErrorFileError
| ErrorNoNickNameGiven
| ErrorErroneousNickName
| ErrorNickNameInUse
| ErrorNickCollision
| ErrorUnavailableResource
| ErrorUserNotInChannel
| ErrorNotOnChannel
| ErrorUserOnChannel
| ErrorNoLogin
| ErrorSummonDisabled
| ErrorUsersDisabled
| ErrorNotRegistered
| ErrorNeedMoreParams
| ErrorAlreadyRegistered
| ErrorNoPermissionForHost
| ErrorPasswordMismatch
| ErrorYoureBannedCreep
| ErrorYouWillBeBanned
| ErrorKeySet
| ErrorChannelIsFull
| ErrorUnknownMode
| ErrorInviteOnlyChannel
| ErrorBannedFromChannel
| ErrorBadChannelKey
| ErrorBadChannelMask
| ErrorNoChannelModes
| ErrorBanListFull
| ErrorNoPrivileges
| ErrorChannelOpPrivilegesNeeded
| ErrorCantKillServer
| ErrorRestricted
| ErrorUniqueOpPrivilegesNeeded
| ErrorNoOperHost
| ErrorUModeUnknownFlag
| ErrorUsersDontMatch
deriving (Eq, Show)
data ReservedReplyCode
= ReservedReplyServiceInfo
| ReservedReplyEndOfServices
| ReservedReplyService
| ReservedReplyNone
| ReservedReplyWhoIsChannelOp
| ReservedReplyKillDone
| ReservedReplyClosing
| ReservedReplyCloseEnd
| ReservedReplyInfoStart
| ReservedReplyMyPortIs
| ReservedReplyStatsCLine
| ReservedReplyStatsNLine
| ReservedReplyStatsILine
| ReservedReplyStatsKLine
| ReservedReplyStatsQLine
| ReservedReplyStatsYLine
| ReservedReplyStatsVLine
| ReservedReplyStatsLLine
| ReservedReplyStatsHLine
| ReservedReplyStatsSLine
| ReservedReplyStatsPing
| ReservedReplyStatsBLine
| ReservedReplyStatsDLine
deriving (Eq, Show)
data ReservedErrorCode
= ReservedErrorNoServiceHost
deriving (Eq, Show)
data GenericReply = GenericReply
{ grSender :: ServerName
, grCode :: Int
, grTarget :: Target
, grParams :: [Parameter]
}
deriving Show
data Reply
= WelcomeReply
| YourHostReply
| CreatedReply
| MyInfoReply
| BounceReply
| ISupportReply
| UserHostReply
| IsOnReply
| AwayReply
| UnAwayReply
| NoAwayReply
| WhoIsUserReply
| WhoIsServerReply
| WhoIsOperatorReply
| WhoIsIdleReply
| EndOfWhoIsReply
| WhoIsChannelsReply
| WhoWasUserReply
| EndOfWhoWasReply
| ListStartReply
| ListReply
| ListEndReply
| UniqueOpIsReply
| ChannelModeIsReply
| NoTopicReply
| TopicReply
| InvitingReply
| SummoningReply
| InviteListReply
| EndOfInviteListReply
| ExceptListReply
| EndOfExceptListReply
| VersionReply
| WhoReply
| EndOfWhoReply
| NamesReply ChannelPrivacy ChannelName [(Privilege, NickName)]
| EndOfNamesReply
| LinksReply
| EndOfLinksReply
| BanListReply
| EndOfBanListReply
| InfoReply
| EndOfInfoReply
| MotdStartReply
| MessageOfTheDayReply
| EndOfMessageOfTheDayReply
| YoureOperReply
| RehashingReply
| YoureServiceReply
| TimeReply
| UsersStartReply
| UsersReply
| EndOfUsersReply
| NoUsersReply
| TraceLinkReply
| TraceConnectingReply
| TraceHandshakeReply
| TraceUnknownReply
| TraceOperatorReply
| TraceUserReply
| TraceServerReply
| TraceServiceReply
| TraceNewTypeReply
| TraceClassReply
| TraceReconnectReply
| TraceLogReply
| TraceEndReply
| StatsLinkInfoReply
| StatsCommandsReply
| EndOfStatsReply
| StatsUptimeReply
| StatsOLineReply
| UModeIsReply
| ServListReply
| ServListEndReply
| LuserClientReply
| LuserOpReply
| LuserUnknownReply
| LuserChannelsReply
| LuserMeReply
| AdminMeReply
| AdminLocation1Reply
| AdminLocation2Reply
| AdminEmailReply
| TryAgainReply
deriving (Eq, Show)
data SpecificReply = SpecificReply ServerName Target Reply deriving Show
data Privilege = Regular | Voice | Operator deriving (Eq, Show)
data ChannelPrivacy = Secret | Private | Public deriving (Eq, Show)
data ArgSpec
= Exactly Int
| AtLeast Int
| AtMost Int
| Between Int Int
| OneOf [Int]
deriving (Show)
data AnalysisError
= WrongNumArgs Int (Maybe ArgSpec)
| InvalidArg (Maybe Int) (Maybe String) (Maybe String)
| OtherError String
deriving (Show)