diff options
| author | Teddy Wing | 2017-09-11 00:39:40 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2017-09-13 04:46:26 +0200 | 
| commit | 613e0d9a67d29b2bb27efd7ca993d4108724b30a (patch) | |
| tree | 35b0c86ca986d2526676a74e96e8a1a82e16a4c0 /src | |
| parent | 8e0f025188e55b7463707205174c54cbbf8255d3 (diff) | |
| download | sorbot-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.hs | 6 | ||||
| -rw-r--r-- | src/Plugin/GitHubCommit.hs | 42 | 
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 | 
