aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sorbot.cabal2
-rw-r--r--src/Lib.hs4
-rw-r--r--src/Plugin.hs10
-rw-r--r--src/Plugin/Base.hs8
-rw-r--r--src/Plugin/GitHubCommit.hs2
-rw-r--r--src/Plugin/GitRemoteSetOrigin.hs2
-rw-r--r--src/Plugin/Help.hs25
-rw-r--r--src/Plugin/PluginList.hs15
8 files changed, 56 insertions, 12 deletions
diff --git a/sorbot.cabal b/sorbot.cabal
index 69ef437..62de431 100644
--- a/sorbot.cabal
+++ b/sorbot.cabal
@@ -24,6 +24,8 @@ library
, Plugin.Base
, Plugin.GitHubCommit
, Plugin.GitRemoteSetOrigin
+ , Plugin.Help
+ , Plugin.PluginList
build-depends: base >= 4.7 && < 5
, bytestring
, irc-client
diff --git a/src/Lib.hs b/src/Lib.hs
index b34100e..f08b289 100644
--- a/src/Lib.hs
+++ b/src/Lib.hs
@@ -13,5 +13,5 @@ import Plugin
someFunc :: IO ()
someFunc = do
- -- connectIRC "irc.freenode.net" 6697 "test-bot-7890asdf"
- parseOptions
+ connectIRC "irc.freenode.net" 6697 "test-bot-7890asdf"
+ -- parseOptions
diff --git a/src/Plugin.hs b/src/Plugin.hs
index a9918fc..30b5ab8 100644
--- a/src/Plugin.hs
+++ b/src/Plugin.hs
@@ -10,8 +10,8 @@ import Text.Regex.TDFA
import qualified Message as M
import Plugin.Base
-import Plugin.GitHubCommit
-import Plugin.GitRemoteSetOrigin
+import qualified Plugin.PluginList as PL (plugins)
+import Plugin.Help
-- | Get the first plugin that matches the given message text.
matchPlugin :: M.Message -> Maybe Plugin
@@ -29,9 +29,5 @@ matchPlugins message plugins =
performPlugin :: Plugin -> PluginAction
performPlugin p message = perform p $ message
--- | The list of plugins to load
plugins :: [Plugin]
-plugins =
- [ gitHubCommit
- , gitRemoteSetOrigin
- ]
+plugins = PL.plugins ++ [help]
diff --git a/src/Plugin/Base.hs b/src/Plugin/Base.hs
index 62900c7..ac67e71 100644
--- a/src/Plugin/Base.hs
+++ b/src/Plugin/Base.hs
@@ -13,9 +13,11 @@ import Message
type PluginAction = Message -> IO (Either T.Text T.Text)
data Plugin = Plugin
- { matchRegex :: String
- , perform :: PluginAction
+ { matchRegex :: String
+ , perform :: PluginAction
+ , command :: T.Text
+ , description :: T.Text
}
instance Show Plugin where
- show (Plugin r p) = "matchRegex = " ++ r
+ show (Plugin r _ _ _) = "matchRegex = " ++ r
diff --git a/src/Plugin/GitHubCommit.hs b/src/Plugin/GitHubCommit.hs
index 8b43b57..c4dd2ca 100644
--- a/src/Plugin/GitHubCommit.hs
+++ b/src/Plugin/GitHubCommit.hs
@@ -17,6 +17,8 @@ import Plugin.Base
gitHubCommit = Plugin
{ matchRegex = "^[0-9a-f]{40}$"
, perform = gitHubCommitAction
+ , command = "GIT_SHA"
+ , description = "Generate a commit URL based on the given SHA."
}
gitHubCommitAction :: PluginAction
diff --git a/src/Plugin/GitRemoteSetOrigin.hs b/src/Plugin/GitRemoteSetOrigin.hs
index 208ab9f..5b2aad2 100644
--- a/src/Plugin/GitRemoteSetOrigin.hs
+++ b/src/Plugin/GitRemoteSetOrigin.hs
@@ -16,6 +16,8 @@ import Plugin.Base
gitRemoteSetOrigin = Plugin
{ matchRegex = "^git remote set origin ([^ ]+)$"
, perform = gitRemoteSetOriginAction
+ , command = "git remote set origin URL"
+ , description = "Set the git remote URL for this channel."
}
gitRemoteSetOriginAction :: PluginAction
diff --git a/src/Plugin/Help.hs b/src/Plugin/Help.hs
new file mode 100644
index 0000000..57e106d
--- /dev/null
+++ b/src/Plugin/Help.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Plugin.Help
+ ( help
+ ) where
+
+import qualified Data.Text as T
+
+import qualified Plugin.PluginList as PL (plugins)
+import Plugin.Base
+
+help = Plugin
+ { matchRegex = "^help$"
+ , perform = helpAction
+ , command = "help"
+ , description = "Show a list of available bot commands."
+ }
+
+helpAction :: PluginAction
+helpAction _ = do
+ return $ Right $ T.concat
+ [command p `T.append` "\t" `T.append` description p | p <- plugins]
+
+plugins :: [Plugin]
+plugins = PL.plugins ++ [help]
diff --git a/src/Plugin/PluginList.hs b/src/Plugin/PluginList.hs
new file mode 100644
index 0000000..21f3893
--- /dev/null
+++ b/src/Plugin/PluginList.hs
@@ -0,0 +1,15 @@
+module Plugin.PluginList
+ ( plugins
+ ) where
+
+import Plugin.Base (Plugin)
+import Plugin.GitHubCommit
+import Plugin.GitRemoteSetOrigin
+
+-- | The list of plugins to load, minus the Help plugin, which would otherwise
+-- cause a circular import.
+plugins :: [Plugin]
+plugins =
+ [ gitHubCommit
+ , gitRemoteSetOrigin
+ ]