summaryrefslogtreecommitdiff
path: root/fig-monitor-discord/src
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2024-11-07 20:17:37 -0500
committerLLLL Colonq <llll@colonq>2024-11-07 20:18:09 -0500
commit7b9c006b580652dccb7a49685e1860b8e98b86c2 (patch)
tree4496885bf44d149381408f28f30931207fd963ec /fig-monitor-discord/src
parentc55bd5242e3f823699dff7e4815afec63b168453 (diff)
Relay bot messages on Discord, other than our own
Diffstat (limited to 'fig-monitor-discord/src')
-rw-r--r--fig-monitor-discord/src/Fig/Monitor/Discord.hs12
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