Some refactoring
parent
0d8e7ae973
commit
7a93179468
|
@ -58,6 +58,7 @@ pingPong state IdleMsg { .. } | even (convert msgTime :: Int) = do
|
|||
if addUTCTime limit lastComm < msgTime
|
||||
then return . Just . PingCmd . pack . formatTime defaultTimeLocale "%s" $ msgTime
|
||||
else return Nothing
|
||||
|
||||
pingPong _ _ = return Nothing
|
||||
|
||||
greeter :: MonadMsgHandler m => Message -> m (Maybe Command)
|
||||
|
|
|
@ -35,9 +35,6 @@ getByCanonicalNick canonicalNick = do
|
|||
NickTracking { .. } <- ask
|
||||
return . IS.toList $ nickTracking @= canonicalNick
|
||||
|
||||
--getLastSeenOn :: CanonicalNick -> Query NickTracking LastSeenOn
|
||||
--getLastSeenOn = liftM (minimumEx . map lastSeenOn) . getByCanonicalNick
|
||||
|
||||
saveNickTrack :: NickTrack -> Update NickTracking ()
|
||||
saveNickTrack nt = do
|
||||
NickTracking { .. } <- get
|
||||
|
@ -87,38 +84,37 @@ nickTrackerMsg state = go
|
|||
|
||||
commands = [ ("!nick", handleNickCommand)
|
||||
, ("!seen", handleSeenCommand) ]
|
||||
|
||||
handleCommands message = case find ((`isPrefixOf` message) . fst) commands of
|
||||
Nothing -> return Nothing
|
||||
Just (_, handler) -> handler state message
|
||||
|
||||
withCanonicalNick :: MonadMsgHandler m => IORef (AcidState NickTracking)
|
||||
-> Text
|
||||
-> (AcidState NickTracking -> Text -> CanonicalNick -> IO Text)
|
||||
withNickTracks :: MonadMsgHandler m
|
||||
=> IORef (AcidState NickTracking) -> Text -> (Text -> [NickTrack] -> IO Text)
|
||||
-> m (Maybe Command)
|
||||
withCanonicalNick state msg f = liftIO $ do
|
||||
withNickTracks state msg f = liftIO $ do
|
||||
acid <- readIORef state
|
||||
let nck = clean . unwords . drop 1 . words $ msg
|
||||
mcn <- liftM (map canonicalNick) . query acid . GetByNick $ Nick nck
|
||||
let nick = clean . unwords . drop 1 . words $ msg
|
||||
mcn <- liftM (map canonicalNick) . query acid . GetByNick $ Nick nick
|
||||
resp <- case mcn of
|
||||
Nothing -> return $ "Unknown nick: " ++ nck
|
||||
Just cn -> liftIO $ f acid nck cn
|
||||
Nothing -> return $ "Unknown nick: " ++ nick
|
||||
Just cn -> liftIO $ query acid (GetByCanonicalNick cn) >>= f nick
|
||||
return . Just . ChannelMsgReply $ resp
|
||||
|
||||
handleNickCommand :: MonadMsgHandler m => IORef(AcidState NickTracking) -> Text -> m (Maybe Command)
|
||||
handleNickCommand state msg = withCanonicalNick state msg $ \acid nck canonicalNick -> do
|
||||
nicks <- liftM (map ((\(Nick n) -> n) . nick)) . query acid . GetByCanonicalNick $ canonicalNick
|
||||
handleNickCommand state msg = withNickTracks state msg $ \nck nickTracks -> do
|
||||
let nicks = map ((\(Nick n) -> n) . nick) nickTracks
|
||||
if length nicks == 1
|
||||
then return $ nck ++ " has only one nick"
|
||||
else return $ nck ++ "'s other nicks are: " ++ intercalate ", " (filter (/= nck) nicks)
|
||||
|
||||
handleSeenCommand :: MonadMsgHandler m => IORef(AcidState NickTracking) -> Text -> m (Maybe Command)
|
||||
handleSeenCommand state msg = withCanonicalNick state msg $ \acid nick canonicalNick -> do
|
||||
nts <- query acid . GetByCanonicalNick $ canonicalNick
|
||||
handleSeenCommand state msg = withNickTracks state msg $ \nick nickTracks -> do
|
||||
let NickTrack { lastSeenOn = LastSeenOn lastSeenOn'
|
||||
, nick = Nick lastSeenAs } = maximumByEx (comparing lastSeenOn) nts
|
||||
, nick = Nick lastSeenAs } = maximumByEx (comparing lastSeenOn) nickTracks
|
||||
let NickTrack { lastMessageOn = lastMessageOn'
|
||||
, lastMessage = lastMessage'
|
||||
, nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nts
|
||||
, nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nickTracks
|
||||
|
||||
return $ nick ++ " was last seen on " ++ fmtTime lastSeenOn' ++
|
||||
(if nick /= lastSeenAs then " as " ++ lastSeenAs else "") ++
|
||||
|
|
Loading…
Reference in New Issue