diff options
| author | Teddy Wing | 2017-08-12 20:04:14 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2017-08-12 20:04:14 +0200 | 
| commit | 59d7bdb0d4252288c600a0e97ed15a3494a9d1ee (patch) | |
| tree | ae6833a6bf98e72e0fe3dc240121c8040b69259d | |
| parent | 983ede99bf5861bb52b163da846767e5de12ef07 (diff) | |
| download | sorbot-59d7bdb0d4252288c600a0e97ed15a3494a9d1ee.tar.bz2 | |
Set up basic IRC support
Add the 'irc-client' package to facilitate communication over IRC.
Copy the example from:
http://hackage.haskell.org/package/irc-client-0.4.4.4/docs/Network-IRC-Client.html
which connects to a network. We specify a channel to join, and what do
you know, it works! Pretty cool.
Commented out the code that runs the GitHub Commit plugin for now while
testing this.
Add the `OverloadedStrings` extension so we can write string literals
but have them converted into the appropriate `Data.Text` and
`Data.ByteString` types required by the IRC library.
| -rw-r--r-- | sorbot.cabal | 3 | ||||
| -rw-r--r-- | src/Lib.hs | 41 | 
2 files changed, 32 insertions, 12 deletions
| diff --git a/sorbot.cabal b/sorbot.cabal index ba34ed4..8b29113 100644 --- a/sorbot.cabal +++ b/sorbot.cabal @@ -21,8 +21,11 @@ library                       , Plugin.Base                       , Plugin.GitHubCommit    build-depends:       base >= 4.7 && < 5 +                     , bytestring +                     , irc-client                       , regex-tdfa                       , sqlite-simple +                     , text    default-language:    Haskell2010  executable sorbot-exe @@ -1,23 +1,40 @@ +{-# LANGUAGE OverloadedStrings #-} +  module Lib      ( someFunc      ) where +import qualified Data.ByteString as B +import qualified Data.Text as T +  import Database.SQLite.Simple +import Network.IRC.Client  import Message  import Plugin  someFunc :: IO ()  someFunc = do -    let message = Message -            { text    = "75ac7b18a009ffe7a77a17a61d95c01395f36b44" -            , channel = "#a-channel" -            , nick    = "anon" -            } -        Just plugin = matchPlugin message -    dbConn <- open "db/sorbot_development.sqlite3" -    response <- performPlugin plugin message dbConn -    putStrLn $ case response of -        Left e  -> e -        Right r -> r -    close dbConn +    connectIRC "irc.freenode.net" 6697 "test-bot-7890asdf" +    -- let message = Message +    --         { text    = "75ac7b18a009ffe7a77a17a61d95c01395f36b44" +    --         , channel = "#a-channel" +    --         , nick    = "anon" +    --         } +    --     Just plugin = matchPlugin message +    -- dbConn <- open "db/sorbot_development.sqlite3" +    -- response <- performPlugin plugin message dbConn +    -- putStrLn $ case response of +    --     Left e  -> e +    --     Right r -> r +    -- close dbConn + +connectIRC :: B.ByteString -> Int -> T.Text -> IO () +connectIRC host port nick = do +    conn <- connectWithTLS host port 1 +    let cfg = defaultIRCConf nick +    -- let cfg' = cfg { _eventHandlers = yourCustomEventHandlers : _eventHandlers cfg } +    let cfg' = cfg { +          _channels = ["#test-chan-13513"] +        } +    start conn cfg' | 
