aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-09-06 23:27:45 +0200
committerTeddy Wing2017-09-06 23:27:45 +0200
commit712dca5f860529c33ad19e7babf5c471181e2573 (patch)
tree35b0c86ca986d2526676a74e96e8a1a82e16a4c0
parent8e5b862c9171af8af7c6c0d0456ae67a9e737633 (diff)
downloadsorbot-tmp.tar.bz2
tmp; fix/rewordtmp
-rw-r--r--sorbot.cabal2
-rw-r--r--src/Bot.hs15
-rw-r--r--src/I18n.hs6
-rw-r--r--src/Plugin/Base.hs7
-rw-r--r--src/Plugin/GitHubCommit.hs42
5 files changed, 56 insertions, 16 deletions
diff --git a/sorbot.cabal b/sorbot.cabal
index 6761349..26ecb20 100644
--- a/sorbot.cabal
+++ b/sorbot.cabal
@@ -16,6 +16,7 @@ cabal-version: >=1.10
library
hs-source-dirs: src
exposed-modules: Lib
+ , Bot
, CliOptions
, I18n
, IRC
@@ -30,6 +31,7 @@ library
build-depends: base >= 4.7 && < 5
, bytestring
, irc-client
+ , mtl
, optparse-applicative
, regex-tdfa
, sqlite-simple
diff --git a/src/Bot.hs b/src/Bot.hs
new file mode 100644
index 0000000..a661ea4
--- /dev/null
+++ b/src/Bot.hs
@@ -0,0 +1,15 @@
+-- {-# LANGUAGE ConstraintKinds #-}
+-- {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+module Bot
+ ( Bot(..)
+ ) where
+
+import Control.Monad.Reader
+
+import CliOptions (Options)
+
+newtype Bot a = Bot
+ { runBot :: ReaderT Options IO a
+ } deriving (Monad, Functor, Applicative, MonadIO)
diff --git a/src/I18n.hs b/src/I18n.hs
index f7a4571..e587648 100644
--- a/src/I18n.hs
+++ b/src/I18n.hs
@@ -12,16 +12,20 @@ import qualified Data.Text as T
data Locale = EN | FR deriving (Show)
data Message
- = GitHubCommitRepoURLNotFound
+ = GitHubCommitDescription
+ | GitHubCommitRepoURLNotFound
| GitRemoteSetOriginUpdatedRepoURL T.Text
translate_en_US :: Message -> T.Text
+translate_en_US GitHubCommitDescription = "Generate a commit URL based on the given SHA."
translate_en_US GitHubCommitRepoURLNotFound = "I couldn't find a repo URL for \
\this channel. Try `git remote set origin REPO_URL`."
translate_en_US (GitRemoteSetOriginUpdatedRepoURL url) =
"I updated the channel's repo URL to '" `T.append` url `T.append` "'."
translate_fr_FR :: Message -> T.Text
+-- TODO: translate
+translate_fr_FR GitHubCommitDescription = "Generate a commit URL based on the given SHA."
translate_fr_FR GitHubCommitRepoURLNotFound = "Je n'ai pas trouvé une URL de \
\repo pour ce channel. Essaye `git remote set origin REPO_URL`."
translate_fr_FR (GitRemoteSetOriginUpdatedRepoURL url) =
diff --git a/src/Plugin/Base.hs b/src/Plugin/Base.hs
index d4194ee..1ef4cd2 100644
--- a/src/Plugin/Base.hs
+++ b/src/Plugin/Base.hs
@@ -7,13 +7,18 @@ module Plugin.Base
, defaultPlugin
) where
+import Control.Monad.Trans.Class (lift)
import qualified Data.Text as T
import Database.SQLite.Simple
+-- import Config (Config)
+import Bot (Bot(Bot))
import Message
-type PluginAction = Message -> IO (Either T.Text T.Text)
+type PluginAction = Message -> Bot (Either T.Text T.Text)
+
+-- newtype Foo = Config Plugin
data Plugin = Plugin
{ matchRegex :: String
diff --git a/src/Plugin/GitHubCommit.hs b/src/Plugin/GitHubCommit.hs
index ae9d68f..454e838 100644
--- a/src/Plugin/GitHubCommit.hs
+++ b/src/Plugin/GitHubCommit.hs
@@ -4,43 +4,57 @@ module Plugin.GitHubCommit
( gitHubCommit
) where
+import Control.Monad.IO.Class (liftIO)
+import Control.Monad.Trans.Class (lift)
+import Control.Monad.Trans.Reader (ask)
import qualified Data.Text as T
import Database.SQLite.Simple
import Database.SQLite.Simple.FromRow
import Text.Regex.TDFA
+-- import Config (Config(..))
+import Bot (Bot, runBot)
import I18n
import qualified Message as M
import qualified CliOptions as Cli (lang)
import Plugin.Base
-gitHubCommit = defaultPlugin
- { matchRegex = "^[0-9a-f]{40}$"
- , perform = gitHubCommitAction
- , command = "<git_sha>"
- , description = "Generate a commit URL based on the given SHA."
- }
+gitHubCommit :: Bot Plugin
+gitHubCommit = do
+ cfg <- ask
+ return $ defaultPlugin
+ { matchRegex = "^[0-9a-f]{40}$"
+ , perform = gitHubCommitAction
+ , command = "<git_sha>"
+ , description = translate (lang cfg) GitHubCommitDescription
+ -- "Generate a commit URL based on the given SHA."
+ }
gitHubCommitAction :: PluginAction
gitHubCommitAction message = do
- dbConn <- open "db/sorbot_development.sqlite3"
- rs <- query dbConn "SELECT repo_url \
+ dbConn <- liftIO $ open "db/sorbot_development.sqlite3"
+ rs <- liftIO $ query dbConn "SELECT repo_url \
\ FROM plugin_github_commit_channel_repo_urls \
\ WHERE channel = ? \
\ LIMIT 1"
(Only (M.channel message))
- :: IO [RepoUrlRow]
- close dbConn
+ :: Bot [RepoUrlRow]
+ liftIO $ close dbConn
- respond rs
+ liftIO $ respond rs
where
+ respond :: Bot (Either T.Text T.Text)
respond [] = do
lang <- Cli.lang
- return $ Left $ translate lang GitHubCommitRepoURLNotFound
- respond ((RepoUrlRow r):_) =
+ -- TODO: remove need for `lang`
+ return $ Left $ translate (lang cfg) GitHubCommitRepoURLNotFound
+ respond ((RepoUrlRow r):_) = do
+ -- bot <- ask
+ -- plugin <- runBot bot >>= gitHubCommit
+ plugin <- gitHubCommit
return $ Right $ r `T.append` "/commits/" `T.append` T.pack (
- M.textStr message =~ matchRegex gitHubCommit)
+ M.textStr message =~ matchRegex plugin)
type RepoUrl = T.Text