summaryrefslogtreecommitdiff
path: root/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs
blob: b1e6c43fc7e6f3e83f6a1b0dc116e819f0617b20 (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
{-# Language QuasiQuotes #-}

module Fig.Bridge.IRCDiscord where

import Fig.Prelude

import Fig.Utils.SExpr
import Fig.Bus.Client

bridge :: (Text, Text) -> IO ()
bridge busAddr = do
  busClient busAddr
    (\cmds -> do
        cmds.subscribe [sexp|(monitor irc chat incoming)|]
        cmds.subscribe [sexp|(monitor discord chat incoming)|]
    )
    (\cmds d -> do
        case d of
          SExprList [ev, user, _, msg]
            | ev == [sexp|(monitor irc chat incoming)|] ->
              cmds.publish [sexp|(monitor discord chat outgoing)|]
                [ user
                , msg
                ]
            | ev == [sexp|(monitor discord chat incoming)|] ->
              cmds.publish [sexp|(monitor irc chat outgoing)|]
                [ user
                , msg
                ]
          _ -> log $ "Invalid message: " <> tshow d
    )
    (pure ())