summaryrefslogtreecommitdiff
path: root/fig-monitor-irc
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-04-19 02:08:00 -0400
committerLLLL Colonq <llll@colonq>2024-04-19 02:08:00 -0400
commit432ff585d9fa0aafcf898a2e8e8be2d5b4524874 (patch)
tree0518eab5945ade61fefae3fc5843b3e7f5647834 /fig-monitor-irc
parent9d875ab8fb539246e3aea0aae58d2c9f227c8276 (diff)
Multi-bridge functionality
Diffstat (limited to 'fig-monitor-irc')
-rw-r--r--fig-monitor-irc/src/Fig/Monitor/IRC.hs23
-rw-r--r--fig-monitor-irc/src/Fig/Monitor/IRC/Utils.hs2
2 files changed, 10 insertions, 15 deletions
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{..}