diff options
author | tv <tv@krebsco.de> | 2019-01-23 00:02:42 +0100 |
---|---|---|
committer | tv <tv@krebsco.de> | 2019-01-23 00:57:36 +0100 |
commit | d40815fd56bf1895af89b72b1171675a2e0ae5f7 (patch) | |
tree | 83b96a701f16b13915836c3a6c94463732a9f6d8 /src/Reaktor/Nick.hs | |
parent | a00da57346c195b1b15d1c6aca2891483901aae6 (diff) |
src: use more simple functionsv0.1.0
Diffstat (limited to 'src/Reaktor/Nick.hs')
-rw-r--r-- | src/Reaktor/Nick.hs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Reaktor/Nick.hs b/src/Reaktor/Nick.hs new file mode 100644 index 0000000..591ea4b --- /dev/null +++ b/src/Reaktor/Nick.hs @@ -0,0 +1,44 @@ +module Reaktor.Nick where + +import Data.ByteString.Char8.Extended (ByteString) +import qualified Data.ByteString.Char8.Extended as BS +import Data.Char (chr) +import Data.Char (isDigit) +import System.Random (getStdRandom, randomR) + + +getNext :: ByteString -> ByteString +getNext nick_ = nick' + where + splitNick s = + (prefix, maybe 0 fst (BS.readInt suffix)) + where + prefix = BS.take (BS.length s - BS.length suffix) s + suffix = BS.reverse . BS.takeWhile isDigit . BS.reverse $ s + (nickPrefix, nickSuffix) = splitNick nick_ + nick' = nickPrefix <> (BS.pack . show $ nickSuffix + 1) + + +getRandom :: IO ByteString +getRandom = do + h_chr <- getRandomChar nickhead + t_len <- getStdRandom (randomR (4,8)) :: IO Int + t_str <- mapM (const $ getRandomChar nicktail) [1..t_len] + return $ BS.pack (h_chr:t_str) + where + getRandomChar cs = (cs!!) <$> getStdRandom (randomR (0, length cs - 1)) + + -- RFC2812 (doesn't work with charybdis) + --nickhead = letters <> specials + --nicktail = letters <> digits <> specials <> minus + --letters = map chr $ [0x41..0x5A] <> [0x61..0x7A] + --digits = map chr $ [0x30..0x39] + --specials = map chr $ [0x5B..0x60] <> [0x7B..0x7D] + --minus = map chr $ [0x2D] + + -- RFC1459 + nickhead = letters + nicktail = letters <> number <> special + letters = map chr $ [0x41..0x5A] <> [0x61..0x7A] + number = map chr $ [0x30..0x39] + special = map chr $ [0x5B..0x60] <> [0x7B..0x7D] <> [0x2D] |