diff options
| author | LLLL Colonq <llll@colonq> | 2024-04-19 02:08:00 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2024-04-19 02:08:00 -0400 |
| commit | 432ff585d9fa0aafcf898a2e8e8be2d5b4524874 (patch) | |
| tree | 0518eab5945ade61fefae3fc5843b3e7f5647834 /fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs | |
| parent | 9d875ab8fb539246e3aea0aae58d2c9f227c8276 (diff) | |
Multi-bridge functionality
Diffstat (limited to 'fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs')
| -rw-r--r-- | fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs b/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs index b1e6c43..c3232cb 100644 --- a/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs +++ b/fig-bridge-irc-discord/src/Fig/Bridge/IRCDiscord.hs @@ -4,11 +4,14 @@ module Fig.Bridge.IRCDiscord where import Fig.Prelude +import qualified Data.List as List + +import Fig.Bridge.IRCDiscord.Utils import Fig.Utils.SExpr import Fig.Bus.Client -bridge :: (Text, Text) -> IO () -bridge busAddr = do +bridge :: Config -> (Text, Text) -> IO () +bridge cfg busAddr = do busClient busAddr (\cmds -> do cmds.subscribe [sexp|(monitor irc chat incoming)|] @@ -16,17 +19,39 @@ bridge busAddr = do ) (\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 - ] + SExprList [ev, tchan, user, _, msg] + | ev == [sexp|(monitor irc chat incoming)|] + , SExprString chan <- tchan -> + case List.find ((== chan) . snd) cfg.mapping of + Nothing -> log $ mconcat + [ "Message on unmapped IRC channel: " <> tshow chan + ] + Just (dchan, _) -> do + log $ mconcat + [ "Incoming message on IRC channel " <> tshow chan + , ", bridging to Discord channel " <> tshow dchan + ] + cmds.publish [sexp|(monitor discord chat outgoing)|] + [ SExprInteger $ fromIntegral dchan + , user + , msg + ] + | ev == [sexp|(monitor discord chat incoming)|] + , SExprInteger chan <- tchan -> + case List.find ((== fromInteger chan) . fst) cfg.mapping of + Nothing -> log $ mconcat + [ "Message on unmapped Discord channel: " <> tshow chan + ] + Just (_, ichan) -> do + log $ mconcat + [ "Incoming message on Discord channel " <> tshow chan + , ", bridging to IRC channel " <> ichan + ] + cmds.publish [sexp|(monitor irc chat outgoing)|] + [ SExprString ichan + , user + , msg + ] _ -> log $ "Invalid message: " <> tshow d ) (pure ()) |
