aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2017-09-11 00:39:40 +0200
committerTeddy Wing2017-09-13 04:46:26 +0200
commit613e0d9a67d29b2bb27efd7ca993d4108724b30a (patch)
tree35b0c86ca986d2526676a74e96e8a1a82e16a4c0 /src
parent8e0f025188e55b7463707205174c54cbbf8255d3 (diff)
downloadsorbot-613e0d9a67d29b2bb27efd7ca993d4108724b30a.tar.bz2
GitHubCommit: Try to add `Bot` monad
This is an attempt at wrapping the functions in this plugin with the new `Bot` monad. It didn't go very well. These changes are the result of some initial code and then a lot of fiddling to try to resolve compiler errors, many of which are still present. The ultimate goal is to be able to wrap the functions in `Bot` so that we can use the language configuration option to determine which translation to use. Thanks to 'dmwit' on Freenode#haskell for looking at my code and giving me suggestions for my type errors.
Diffstat (limited to 'src')
-rw-r--r--src/I18n.hs6
-rw-r--r--src/Plugin/GitHubCommit.hs42
2 files changed, 33 insertions, 15 deletions
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/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