From 432ff585d9fa0aafcf898a2e8e8be2d5b4524874 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Fri, 19 Apr 2024 02:08:00 -0400 Subject: Multi-bridge functionality --- fig-monitor-irc/src/Fig/Monitor/IRC.hs | 23 ++++++++++------------- fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs | 2 -- 2 files changed, 10 insertions(+), 15 deletions(-) (limited to 'fig-monitor-irc/src') diff --git a/fig-monitor-irc/src/Fig/Monitor/IRC.hs b/fig-monitor-irc/src/Fig/Monitor/IRC.hs index 08ddf24..c84b2f4 100644 --- a/fig-monitor-irc/src/Fig/Monitor/IRC.hs +++ b/fig-monitor-irc/src/Fig/Monitor/IRC.hs @@ -20,15 +20,11 @@ import Fig.Bus.Client import Fig.Monitor.IRC.Utils data OutgoingMessage = OutgoingMessage - { user :: Text + { chan :: Text + , user :: Text , msg :: Text } -srcUser :: IRC.Source a -> Maybe a -srcUser (IRC.Channel _ user) = Just user -srcUser (IRC.User user) = Just user -srcUser _ = Nothing - ircBot :: Config -> (Text, Text) -> IO () ircBot cfg busAddr = do outgoing <- Chan.newChan @OutgoingMessage @@ -37,7 +33,7 @@ ircBot cfg busAddr = do ( Conc.readMVar mircst >>= \ircst -> forever $ do o <- liftIO $ Chan.readChan outgoing log $ "Sending: " <> o.msg <> " (from " <> o.user <> ")" - let msg = IRC.Privmsg cfg.sendchannel . Right . Text.take 400 $ mconcat + let msg = IRC.Privmsg o.chan . Right . Text.take 400 $ mconcat [ "<", o.user, "> " , Text.replace "\n" " " o.msg ] @@ -53,15 +49,16 @@ ircBot cfg busAddr = do | IRC.Privmsg _ (Right msg) <- ev ^. IRC.message -> Just msg | otherwise -> Nothing ) - ( \src msg -> case srcUser src of - Just user -> do + ( \src msg -> case src of + IRC.Channel chan user -> do log $ "Received: " <> msg <> " (from " <> user <> ")" liftIO $ cmds.publish [sexp|(monitor irc chat incoming)|] - [ SExprString . BS.Base64.encodeBase64 . encodeUtf8 $ user + [ SExprString chan + , SExprString . BS.Base64.encodeBase64 . encodeUtf8 $ user , SExprList [] , SExprString . BS.Base64.encodeBase64 . encodeUtf8 $ msg ] - Nothing -> pure () + _ -> pure () ) ircst <- IRC.newIRCState ( IRC.tlsConnection (IRC.WithDefaultConfig (encodeUtf8 cfg.host) cfg.port) @@ -78,11 +75,11 @@ ircBot cfg busAddr = do ) (\_cmds d -> do case d of - SExprList [ev, SExprString euser, SExprString emsg] + SExprList [ev, SExprString chan, SExprString euser, SExprString emsg] | ev == [sexp|(monitor irc chat outgoing)|] , Right user <- decodeUtf8 <$> BS.Base64.decodeBase64 (encodeUtf8 euser) , Right msg <- decodeUtf8 <$> BS.Base64.decodeBase64 (encodeUtf8 emsg) -> do - Chan.writeChan outgoing OutgoingMessage { user = user, msg = msg } + Chan.writeChan outgoing OutgoingMessage { chan, user, msg = msg } _ -> log $ "Invalid outgoing message: " <> tshow d ) (pure ()) diff --git a/fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs b/fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs index 2cf46b1..b117662 100644 --- a/fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs +++ b/fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs @@ -18,7 +18,6 @@ data Config = Config { host :: Text , port :: Int , nick :: Text - , sendchannel :: Text , channels :: [Text] } deriving (Show, Eq, Ord) @@ -27,7 +26,6 @@ configCodec = do host <- Toml.text "host" Toml..= (\a -> a.host) port <- Toml.int "port" Toml..= (\a -> a.port) nick <- Toml.text "nick" Toml..= (\a -> a.nick) - sendchannel <- Toml.text "sendchannel" Toml..= (\a -> a.sendchannel) channels <- Toml.arrayOf Toml._Text "channels" Toml..= (\a -> a.channels) pure $ Config{..} -- cgit v1.2.3