Skip to content

Commit 8bdbbc0

Browse files
authored
Merge pull request #809 from jappeace/dubtrack
Make dubtrack configurable as well
2 parents a57eb40 + c10a24c commit 8bdbbc0

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed

src/Bot.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ builtinCommands =
485485
[ ("link", setNoTrustLinkReplyCommand)
486486
, ("command", setNoTrustCommandReplyCommand)
487487
])
488+
, ("dubtrack", setDubtrackRoom)
488489
]))
489490
, ( "version"
490491
, mkBuiltinCommand

src/Bot/Dubtrack.hs

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
module Bot.Dubtrack where
66

77
import Bot.Replies
8+
import Control.Monad
89
import Data.Aeson
910
import Data.Aeson.Types
11+
import qualified Data.Map as Map
12+
import Data.Maybe
13+
import qualified Data.Proxy as P
1014
import qualified Data.Text as T
1115
import Effect
12-
import Network.HTTP.Simple
16+
import Entity
17+
import Property
1318
import Reaction
1419
import Text.InterpolatedString.QM
1520
import Transport
@@ -63,17 +68,40 @@ songLink (songType -> SongTypeSoundcloud) =
6368
"Soundcloud links are not supported yet"
6469
songLink _ = error "This should never happen Kappa"
6570

66-
-- TODO(#221): Dubtrack room is hardcode
71+
newtype DubtrackRoom = DubtrackRoom
72+
{ unName :: T.Text
73+
}
74+
75+
instance IsEntity DubtrackRoom where
76+
nameOfEntity _ = "DubtrackRoom"
77+
toProperties reply = Map.fromList [("name", PropertyText $ unName reply)]
78+
fromProperties = fmap DubtrackRoom . extractProperty "name"
79+
80+
getRoom :: Effect (Maybe (Entity DubtrackRoom))
81+
getRoom = listToMaybe <$> selectEntities P.Proxy (Take 1 All)
82+
83+
setDubtrackRoom :: Reaction Message T.Text
84+
setDubtrackRoom =
85+
liftR
86+
(\msg -> do
87+
mayReply <- getRoom
88+
case mayReply of
89+
Just reply ->
90+
void $ updateEntityById $ (\a -> a {unName = msg}) <$> reply
91+
Nothing -> void $ createEntity P.Proxy $ DubtrackRoom msg) $
92+
cmapR (const "Updated room for dubtrack") $ Reaction replyMessage
93+
6794
currentSongCommand :: Reaction Message ()
6895
currentSongCommand =
69-
Reaction $ \Message {messageSender = sender} -> do
70-
request <- parseRequest "https://api.dubtrack.fm/room/tsoding"
71-
response <- eitherDecode . getResponseBody <$> httpRequest request
72-
case response of
73-
Left message -> errorEff $ T.pack message
74-
Right dubtrackResponse ->
75-
maybe
76-
(replyToSender sender "Nothing is playing right now")
77-
(\song ->
78-
replyToSender sender [qms|❝{songName song}❞: {songLink song}|])
79-
(roomCurrentSong $ drData dubtrackResponse)
96+
liftR (const getRoom) $
97+
replyOnNothing
98+
[qms|Dubtrack room not set, a mod can run
99+
'!config dubtrack <room-name>' to set it|] $
100+
cmapR (T.unpack . urlOfRoom . entityPayload) $
101+
jsonHttpRequestReaction $
102+
cmapR (roomCurrentSong . drData) $
103+
replyOnNothing "Nothing is playing right now" $
104+
cmapR (\song -> [qms|❝{songName song}❞: {songLink song}|]) $
105+
Reaction replyMessage
106+
where
107+
urlOfRoom = ("https://api.dubtrack.fm/room/" <>) . unName

0 commit comments

Comments
 (0)