diff options
| author | LLLL Colonq <llll@colonq> | 2024-11-07 20:17:37 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2024-11-07 20:18:09 -0500 |
| commit | 7b9c006b580652dccb7a49685e1860b8e98b86c2 (patch) | |
| tree | 4496885bf44d149381408f28f30931207fd963ec /fig-monitor-discord | |
| parent | c55bd5242e3f823699dff7e4815afec63b168453 (diff) | |
Relay bot messages on Discord, other than our own
Diffstat (limited to 'fig-monitor-discord')
| -rw-r--r-- | fig-monitor-discord/src/Fig/Monitor/Discord.hs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fig-monitor-discord/src/Fig/Monitor/Discord.hs b/fig-monitor-discord/src/Fig/Monitor/Discord.hs index aa7d01c..2c80757 100644 --- a/fig-monitor-discord/src/Fig/Monitor/Discord.hs +++ b/fig-monitor-discord/src/Fig/Monitor/Discord.hs @@ -8,6 +8,7 @@ import Control.Monad (unless) import Control.Monad.Reader (runReaderT) import qualified Control.Concurrent.Async as Async import qualified Control.Concurrent.Chan as Chan +import qualified Control.Concurrent.MVar as MVar import qualified Data.Text as Text import qualified Data.ByteString.Base64 as BS.Base64 @@ -43,6 +44,7 @@ stickerUrl sid ty = base <> sid <> "." <> ext discordBot :: Config -> (Text, Text) -> IO () discordBot cfg busAddr = do outgoing <- Chan.newChan @OutgoingMessage + ourId <- MVar.newEmptyMVar busClient busAddr (\cmds -> do cmds.subscribe [sexp|(monitor discord chat outgoing)|] @@ -57,6 +59,10 @@ discordBot cfg busAddr = do , updateStatusOptsAFK = False } Dis.sendCommand (Dis.UpdateStatus opts) + Dis.restCall Dis.GetCurrentUser >>= \case + Left e -> log $ "failed to retrieve discord user: " <> tshow e + Right u -> liftIO . MVar.putMVar ourId $ Dis.userId u + log "Initialized Discord bot" dst <- ask liftIO . void . Async.async . forever $ flip runReaderT dst do o <- liftIO $ Chan.readChan outgoing @@ -76,7 +82,8 @@ discordBot cfg busAddr = do log $ tshow resp Dis.InteractionCreate cmd@Dis.InteractionApplicationCommand{} -> do void . Dis.restCall . Dis.CreateInteractionResponse (Dis.interactionId cmd) (Dis.interactionToken cmd) $ Dis.interactionResponseBasic "pong" - Dis.MessageCreate m -> + Dis.MessageCreate m -> do + botId <- liftIO $ MVar.readMVar ourId let chan = Dis.messageChannelId m auth = Dis.messageAuthor m @@ -120,7 +127,8 @@ discordBot cfg busAddr = do snm -> snm ) <> " (" <> stickerUrl (tshow . Dis.unId $ Dis.stickerItemId sticker) (Dis.stickerItemFormatType sticker) <> ")" _ -> msgReplacedEmotes - in unless (Dis.userIsBot auth) do + -- in unless (Dis.userIsBot auth) do + unless (Dis.userId auth == botId) do log $ "Received: " <> processedMsg <> " (from " <> name <> ")" liftIO $ cmds.publish [sexp|(monitor discord chat incoming)|] [ SExprInteger . fromIntegral . Dis.unSnowflake $ Dis.unId chan |
