diff options
| -rw-r--r-- | HsBot/Callbacks/MessageCounter.hs | 6 | ||||
| -rw-r--r-- | HsBot/IRC/User.hs | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/HsBot/Callbacks/MessageCounter.hs b/HsBot/Callbacks/MessageCounter.hs index f285ec6..2b5482e 100644 --- a/HsBot/Callbacks/MessageCounter.hs +++ b/HsBot/Callbacks/MessageCounter.hs @@ -7,5 +7,7 @@ import HsBot.IRC.User messageCounter :: String -> SendMessage -> Env -> IO Env messageCounter str sendMessage (Env state conf) = do - let users' = users state - return (Env state { users = users' } conf) + return (Env state { users = users' } conf) + where + update user = user { userMessages = 1 + userMessages user } + users' = usersUpdate (currentSender state) (users state) update diff --git a/HsBot/IRC/User.hs b/HsBot/IRC/User.hs index 2569043..3c9bb3b 100644 --- a/HsBot/IRC/User.hs +++ b/HsBot/IRC/User.hs @@ -41,9 +41,19 @@ userGetIfExists name (x:xs) | userName x == name = Just x | otherwise = userGetIfExists name xs +userDeleteIfExists :: String -> [User] -> [User] +userDeleteIfExists name [] = [] +userDeleteIfExists name (x:xs) + | userName x == name = xs + | otherwise = x : userDeleteIfExists name xs + userGet :: String -> [User] -> (User, [User]) userGet name xs = case userGetIfExists name xs of - Just user -> (user, xs) + Just user -> (user, user : xs) Nothing -> let user = userMakeDefault name in (user, user : xs) +usersUpdate :: String -> [User] -> (User -> User) -> [User] +usersUpdate name xs update = + let (user, _) = userGet name xs + in (update user) : (userDeleteIfExists name xs) |
