Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

100 lignes
3.0KB

  1. {-# LANGUAGE OverloadedStrings #-}
  2. module IrcBot.MessageParser where
  3. import Data.List
  4. import Data.Maybe
  5. import IrcBot.RandomFileFinder
  6. import IrcBot.RemoteUploader
  7. getNthElementFromString :: String -> Int -> Char
  8. getNthElementFromString stringData step = stringData !! step
  9. slice :: Int -> Int -> String -> String
  10. slice start end = take (end-start-1) . drop (start+1)
  11. parseMessageMeta :: String -> String
  12. parseMessageMeta messageMeta = do
  13. let startEndIndexes = elemIndices ':' messageMeta
  14. if length startEndIndexes >= 2 then do
  15. let startIndex = startEndIndexes !! 0
  16. let endIndex = startEndIndexes !! 1
  17. slice (startIndex) (endIndex) messageMeta
  18. else ""
  19. parseMessageTargetFromMeta :: [String] -> String
  20. parseMessageTargetFromMeta messageMetaArray = do
  21. if (length messageMetaArray) >= 3
  22. then
  23. messageMetaArray !! 2
  24. else
  25. ""
  26. -- :YOUR_NICK!~YOUR_NICK@YOUR_IP PRIVMSG #91623_my_test_channel :TEXT MESSAGE
  27. parseMessageType :: [String] -> String
  28. parseMessageType messageMetaArray = do
  29. if(length messageMetaArray) >= 3
  30. then
  31. messageMetaArray !! 1
  32. else
  33. ""
  34. targetDeterminer :: String -> String -> String
  35. targetDeterminer nickName channelName = do
  36. if (length channelName) > 1 then channelName else nickName
  37. parseNick :: String -> String
  38. parseNick dataString =
  39. do
  40. let startIndex = elemIndex ':' dataString
  41. let endIndex = elemIndex '!' dataString
  42. if startIndex /= Nothing && endIndex /= Nothing
  43. then
  44. slice (fromJust startIndex) (fromJust endIndex) dataString
  45. else ""
  46. parseChannelName :: String -> String
  47. parseChannelName dataString =
  48. do
  49. let startIndex = elemIndex '#' dataString
  50. let dropppedString = drop (fromJust startIndex) dataString
  51. let endIndex = elemIndex ' ' dropppedString
  52. if startIndex /= Nothing && endIndex /= Nothing
  53. then
  54. take (fromJust endIndex) dropppedString
  55. else ""
  56. parseMessageText :: String -> String
  57. parseMessageText dataString =
  58. do
  59. (drop 1 (unwords (drop 3 (words dataString))))
  60. basicRandomImplementation :: String -> IO String
  61. basicRandomImplementation basicInput = do
  62. let parameters = (words basicInput)
  63. print ".random parameters: "
  64. print parameters
  65. if length parameters > 1 then
  66. do
  67. let directoryName = parameters !! 1
  68. getRandomFile directoryName >>= \randomFileName -> uploadLocalFile randomFileName
  69. else
  70. getRandomFile "maidos" >>= \randomFileName -> uploadLocalFile randomFileName