aboutsummaryrefslogtreecommitdiffstats
path: root/src/IRC.hs
blob: b0a623bd28f3d765021e118b2c6a9429a4756b8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{-# LANGUAGE OverloadedStrings #-}

module IRC
    ( -- connectIRC
    ) where

-- import Control.Monad (sequence_)
-- import Control.Monad.IO.Class (liftIO)
-- import Control.Monad.Trans.Class (lift)
-- import Control.Monad.Trans.Maybe (MaybeT(MaybeT), runMaybeT)
-- import qualified Data.ByteString as B
-- import qualified Data.Text as T
--
-- import qualified Network.IRC.Client as IRC
--
-- -- import Bot (Bot)
-- import Bot (Bot, runBot)
-- import Message
-- import Plugin (matchPlugin, performPlugin)
-- import Plugin.Base (queryOnly)
--
-- connectIRC :: B.ByteString -> Int -> T.Text -> IO ()
-- connectIRC host port nick = do
--     conn <- IRC.connectWithTLS host port 0.2
--     let cfg = IRC.defaultIRCConf nick
--     let cfg' = cfg
--             {
--               IRC._eventHandlers = handlePrivmsg : IRC._eventHandlers cfg
--             , IRC._channels = ["#test-chan-13513"]
--             }
--     IRC.start conn cfg'
--
-- handlePrivmsg :: IRC.EventHandler s
-- handlePrivmsg = IRC.EventHandler
--     { IRC._description = ""
--     , IRC._matchType = IRC.EPrivmsg
--     , IRC._eventFunc = \evt -> dispatchEvent evt
--     }
--   where
--     dispatchEvent :: IRC.UnicodeEvent -> IRC.StatefulIRC s ()
--     dispatchEvent (IRC.Event _ (IRC.User nick) (IRC.Privmsg _ (Right msg))) = do
--         let message = Message
--                 { text    = msg
--                 , channel = nick
--                 , nick    = nick
--                 }
--         response <- lift $ runMaybeT $ privmsgFromPlugin message
--         case response of
--             Nothing -> return ()
--             Just r  -> sequence_ r
--     dispatchEvent (IRC.Event
--       _ (IRC.Channel chan nick) (IRC.Privmsg _ (Right msg))) = do
--         let message = Message
--                 { text    = msg
--                 , channel = chan
--                 , nick    = nick
--                 }
--         case messageForBot message of
--             Nothing      -> return ()
--             Just message -> do
--                 response <- lift $ runMaybeT $ privmsgFromPlugin message
--                 case response of
--                     Nothing -> return ()
--                     Just r  -> sequence_ r
--
-- privmsgFromPlugin :: Message -> MaybeT Bot [IRC.StatefulIRC s ()]
-- privmsgFromPlugin message = do
--     plugin <- liftMaybe $ matchPlugin message
--     response <- lift $ performPlugin plugin message
--     -- plugin' <- liftMaybe plugin
--     return $ case response of
--         Left err -> [IRC.send $ IRC.Privmsg
--             (toChannel plugin message)
--             (Right err)]
--         Right r  -> map
--             (\r -> IRC.send $ IRC.Privmsg
--                 (toChannel plugin message)
--                 (Right r) )
--             (splitAtNewlines $ splitLongLines r)
--   where
--     liftMaybe = MaybeT . return
--
--     -- IRC only permits 512 bytes per line. Use less to allow for protocol
--     -- information that gets sent in addition to the message content.
--     splitLongLines txt = T.chunksOf 400 txt
--
--     splitAtNewlines lst = foldr (\s acc -> (T.lines s) ++ acc) [] lst
--
--     toChannel plugin message = case queryOnly plugin of
--         False -> channel message
--         True  -> nick message
--
-- messageForBot :: Message -> Maybe Message
-- messageForBot m = case T.stripPrefix "sorbot: " (text m) of
--     Nothing -> Nothing
--     Just t  -> Just m { text = t }