diff options
| author | pb <pb@9f8f72e9-4bf4-416e-b76e-7d4203597157> | 2010-05-15 16:35:02 +0000 |
|---|---|---|
| committer | pb <pb@9f8f72e9-4bf4-416e-b76e-7d4203597157> | 2010-05-15 16:35:02 +0000 |
| commit | ad2e856414300fafee5ab4afd4f2356b0c2fd159 (patch) | |
| tree | 8a6fd6436771f4c1536b84f21ca8c5be632c0df8 | |
| parent | 1d6e13ef4e50ae53c52b2ce289881a071ecf942e (diff) | |
implemented callback MessageCounter.
it counts each message a user has posted @ channel
git-svn-id: https://ssl.buetow.org/repos/hsbot/trunk@59 9f8f72e9-4bf4-416e-b76e-7d4203597157
| -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) |
