module Network.IRC.Fun.Types
(
module Network.IRC.Fun.Types.Base
, Prefix (..)
, UserAddress (..)
, Target (..)
, Address (..)
, Host (..)
, Command (..)
, MaskPart (..)
, Mask (..)
, TargetMask (..)
, GenericMessage (..)
, SpecificMessage (..)
, MessageTarget (..)
, Query (..)
, Message (..)
, AnalysisError (..)
, ArgSpec (..)
, UserMode (..)
, ChannelMode (..)
, ChannelModeType (..)
, GenericReply (..)
, Reply (..)
, SpecificReply (..)
)
where
import Data.Text (Text)
import Network.IRC.Fun.Types.Base
data Prefix
= PrefixServer Hostname
| PrefixNick Nickname (Maybe Username) (Maybe Host)
deriving (Eq, Show)
data UserAddress = UserAddress Username (Maybe Host) deriving (Eq, Show)
data Target = NickTarget Nickname | ServerTarget Hostname deriving (Eq, Show)
data Address = IPv4 Text | IPv6 Text deriving (Eq, Show)
data Host = HostByName Hostname | HostByAddr Address | HostCloak Text
deriving (Eq, Show)
data Command = NamedCmd CmdName | NumericCmd CmdNumber
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 :: [Text]
}
deriving Show
data SpecificMessage = SpecificMessage (Maybe Prefix) Message deriving Show
data MessageTarget
= ChannelTarget Channel
| UserTarget (Maybe Nickname) (Maybe UserAddress) (Maybe Hostname)
| 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 Text
| QuitMessage (Maybe Comment)
| SQuitMessage Hostname Comment
| JoinMessage (Maybe ([Channel], [ChannelKey]))
| PartMessage [Channel] (Maybe Comment)
| ChannelModeMessage [ChannelMode] [ChannelMode]
| TopicMessage Channel (Maybe ChannelTopic)
| NamesMessage [Channel] (Maybe Hostname)
| ListMessage [Channel] (Maybe Hostname)
| InviteMessage Nickname Channel
| KickMessage [Channel] [Username] (Maybe Comment)
| PrivMsgMessage MessageTarget MsgContent
| PrivActionMessage MessageTarget MsgContent
| NoticeMessage MessageTarget MsgContent
| MotdMessage (Maybe Hostname)
| LusersMessage (Maybe (Mask, Maybe Hostname))
| VersionMessage (Maybe (Either Hostname Mask))
| StatsMessage (Maybe (Query, Maybe (Either Hostname Mask)))
| LinksMessage (Maybe (Maybe (Either Hostname Mask), Mask))
| TimeMessage (Maybe (Either Hostname Mask))
| ConnectMessage Hostname PortNumber (Either Hostname Mask)
| TraceMessage (Maybe Target)
| AdminMessage (Maybe Target)
| InfoMessage (Maybe Target)
| ServlistMessage (Maybe (Mask, Maybe Text))
| SQueryMessage ServiceName MsgContent
| WhoMessage (Maybe (Mask, Bool))
| WhoisMessage (Maybe Hostname) [Mask]
| WhowasMessage [Nickname] (Maybe (Int, Maybe Hostname))
| KillMessage Nickname Comment
| PingMessage Hostname (Maybe Hostname)
| PongMessage Hostname (Maybe Hostname)
| ErrorMessage Text
| AwayMessage (Maybe MsgContent)
| RehashMessage
| DieMessage
| RestartMessage
| SummonMessage Username (Maybe (Hostname, Maybe Channel))
| UsersMessage (Maybe Hostname)
| WallopsMessage MsgContent
| 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 [Text]
| 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 :: Hostname
, grCode :: CmdNumber
, 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 Channel [(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 Hostname Target Reply deriving 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 Text) (Maybe Text)
| OtherError Text
deriving (Show)