parent
0de98e8f18
commit
ca6ef0f166
@ -0,0 +1,35 @@ |
||||
{-# LANGUAGE FlexibleContexts #-} |
||||
|
||||
module Network.IRC.Handlers (coreMsgHandlerNames, mkMsgHandler) where |
||||
|
||||
import qualified Network.IRC.Handlers.Auth as Auth |
||||
import qualified Network.IRC.Handlers.Core as Core |
||||
import qualified Network.IRC.Handlers.Greet as Greet |
||||
import qualified Network.IRC.Handlers.MessageLogger as Logger |
||||
import qualified Network.IRC.Handlers.NickTracker as NickTracker |
||||
import qualified Network.IRC.Handlers.SongSearch as SongSearch |
||||
|
||||
import ClassyPrelude |
||||
import Control.Concurrent.Lifted (Chan) |
||||
|
||||
import Network.IRC.Types |
||||
|
||||
coreMsgHandlerNames :: [Text] |
||||
coreMsgHandlerNames = ["pingpong", "help"] |
||||
|
||||
mkMsgHandler :: BotConfig -> Chan SomeEvent -> MsgHandlerName -> IO (Maybe MsgHandler) |
||||
mkMsgHandler botConfig eventChan name = |
||||
flip (`foldM` Nothing) handlerMakers $ \finalHandler handler -> |
||||
case finalHandler of |
||||
Just _ -> return finalHandler |
||||
Nothing -> handler botConfig eventChan name |
||||
|
||||
where |
||||
handlerMakers = [ |
||||
Auth.mkMsgHandler |
||||
, Core.mkMsgHandler |
||||
, Greet.mkMsgHandler |
||||
, Logger.mkMsgHandler |
||||
, NickTracker.mkMsgHandler |
||||
, SongSearch.mkMsgHandler |
||||
] |
@ -0,0 +1,32 @@ |
||||
module Network.IRC.Handlers.Greet (mkMsgHandler) where |
||||
|
||||
import ClassyPrelude |
||||
import Control.Concurrent.Lifted (Chan) |
||||
import Control.Monad.Reader (ask) |
||||
|
||||
import Network.IRC.Types |
||||
import Network.IRC.Util |
||||
|
||||
mkMsgHandler :: BotConfig -> Chan SomeEvent -> MsgHandlerName -> IO (Maybe MsgHandler) |
||||
mkMsgHandler _ _ "greeter" = return . Just $ newMsgHandler { onMessage = greeter } |
||||
mkMsgHandler _ _ "welcomer" = return . Just $ newMsgHandler { onMessage = welcomer } |
||||
mkMsgHandler _ _ _ = return Nothing |
||||
|
||||
greeter :: MonadMsgHandler m => Message -> m (Maybe Command) |
||||
greeter Message { msgDetails = ChannelMsg { .. }, .. } = |
||||
return . map (ChannelMsgReply . (++ userNick user) . (++ " ")) . find (== clean msg) $ greetings |
||||
where |
||||
greetings = [ "hi", "hello", "hey", "sup", "bye" |
||||
, "good morning", "good evening", "good night" ] |
||||
greeter _ = return Nothing |
||||
|
||||
welcomer :: MonadMsgHandler m => Message -> m (Maybe Command) |
||||
welcomer Message { msgDetails = JoinMsg { .. }, .. } = do |
||||
BotConfig { .. } <- ask |
||||
if userNick user /= botNick |
||||
then return . Just . ChannelMsgReply $ "welcome back " ++ userNick user |
||||
else return Nothing |
||||
|
||||
welcomer _ = return Nothing |
||||
|
||||
|
@ -0,0 +1,90 @@ |
||||
-- Initial hask-irc.cabal generated by cabal init. For further |
||||
-- documentation, see http://haskell.org/cabal/users-guide/ |
||||
|
||||
-- The name of the package. |
||||
name: hask-irc-handlers |
||||
|
||||
-- The package version. See the Haskell package versioning policy (PVP) |
||||
-- for standards guiding when and how versions should be incremented. |
||||
-- http://www.haskell.org/haskellwiki/Package_versioning_policy |
||||
-- PVP summary: +-+------- breaking API changes |
||||
-- | | +----- non-breaking API additions |
||||
-- | | | +--- code changes with no API change |
||||
version: 0.1.0 |
||||
|
||||
-- A short (one-line) description of the package. |
||||
synopsis: A simple extensible IRC bot |
||||
|
||||
-- A longer description of the package. |
||||
-- description: |
||||
|
||||
-- URL for the project homepage or repository. |
||||
homepage: https://github.com/abhin4v/hask-irc |
||||
|
||||
-- The license under which the package is released. |
||||
license: Apache-2.0 |
||||
|
||||
-- The file containing the license text. |
||||
license-file: ../LICENSE |
||||
|
||||
-- The package author(s). |
||||
author: Abhinav Sarkar |
||||
|
||||
-- An email address to which users can send suggestions, bug reports, and |
||||
-- patches. |
||||
maintainer: abhinav@abhinavsarkar.net |
||||
|
||||
-- A copyright notice. |
||||
-- copyright: |
||||
|
||||
category: Network, IRC |
||||
|
||||
build-type: Simple |
||||
|
||||
-- Extra files to be distributed with the package, such as examples or a |
||||
-- README. |
||||
-- extra-source-files: |
||||
|
||||
-- Constraint on the version of Cabal needed to build this package. |
||||
cabal-version: >=1.10 |
||||
|
||||
library |
||||
default-extensions: NoImplicitPrelude, OverloadedStrings, RecordWildCards, ScopedTypeVariables, |
||||
BangPatterns, TupleSections, NamedFieldPuns, GeneralizedNewtypeDeriving, |
||||
DeriveDataTypeable |
||||
|
||||
build-depends: base >=4.5 && <4.8, |
||||
hask-irc-core ==0.1.0, |
||||
text >=0.11 && <0.12, |
||||
mtl >=2.1 && <2.2, |
||||
configurator >=0.2 && <0.3, |
||||
time >=1.4 && <1.5, |
||||
curl-aeson >=0.0.3 && <0.1, |
||||
aeson >=0.6.0.0 && <0.7, |
||||
HTTP >=4000 && <5000, |
||||
classy-prelude >=0.9 && <1.0, |
||||
text-format >=0.3 && <0.4, |
||||
filepath >=1.3 && <1.4, |
||||
directory >=1.2 && <1.3, |
||||
lifted-base >=0.2 && <0.3, |
||||
convertible >=1.1 && <1.2, |
||||
hslogger >=1.2 && <1.3, |
||||
hslogger-template >=2.0 && <2.1, |
||||
ixset >=1.0 && <1.1, |
||||
acid-state >=0.12 && <0.13, |
||||
safecopy >=0.8 && <0.9, |
||||
uuid >=1.3 && <1.4 |
||||
|
||||
exposed-modules: Network.IRC.Handlers, |
||||
Network.IRC.Handlers.Auth, |
||||
Network.IRC.Handlers.Auth.Types, |
||||
Network.IRC.Handlers.Core, |
||||
Network.IRC.Handlers.Greet, |
||||
Network.IRC.Handlers.MessageLogger, |
||||
Network.IRC.Handlers.NickTracker, |
||||
Network.IRC.Handlers.NickTracker.Types, |
||||
Network.IRC.Handlers.SongSearch |
||||
|
||||
default-language: Haskell2010 |
||||
|
||||
ghc-options: -Wall -fno-warn-unused-do-bind -O2 -funbox-strict-fields -fno-warn-orphans |
Loading…
Reference in new issue