--
-- Provides interface to messages, message pipes
--
module Lambdabot.Message
    ( Message(..)
    ) where

import Lambdabot.Nick

-- TODO: probably remove "Show a" later (used only to implement @echo)
class Show a => Message a where
    -- | extracts the tag of the server involved in a given message
    server      :: a -> String

    -- | extracts the nickname involved in a given message.
    nick        :: a -> Nick

    -- | 'fullName' extracts the full user name involved in a given message.
    fullName    :: a -> String

    -- | 'channels' extracts the channels a Message operate on.
    channels    :: a -> [Nick]

    -- TODO: there must be a better way of handling this ...
    lambdabotName :: a -> Nick