aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sorbot.cabal1
-rw-r--r--src/Lib.hs7
-rw-r--r--src/Plugin/Base.hs5
-rw-r--r--src/Plugin/GitHubCommit.hs25
4 files changed, 33 insertions, 5 deletions
diff --git a/sorbot.cabal b/sorbot.cabal
index bebe09c..ba34ed4 100644
--- a/sorbot.cabal
+++ b/sorbot.cabal
@@ -22,6 +22,7 @@ library
, Plugin.GitHubCommit
build-depends: base >= 4.7 && < 5
, regex-tdfa
+ , sqlite-simple
default-language: Haskell2010
executable sorbot-exe
diff --git a/src/Lib.hs b/src/Lib.hs
index 63fd3b8..b98c18d 100644
--- a/src/Lib.hs
+++ b/src/Lib.hs
@@ -2,6 +2,8 @@ module Lib
( someFunc
) where
+import Database.SQLite.Simple
+
import Message
import Plugin
@@ -13,4 +15,7 @@ someFunc = do
, nick = "anon"
}
Just plugin = matchPlugin message
- putStrLn $ performPlugin plugin message
+ dbConn <- open "db/sorbot_development.sqlite3"
+ response <- performPlugin plugin message dbConn
+ putStrLn response
+ close dbConn
diff --git a/src/Plugin/Base.hs b/src/Plugin/Base.hs
index c85f53a..b752fd1 100644
--- a/src/Plugin/Base.hs
+++ b/src/Plugin/Base.hs
@@ -4,9 +4,12 @@ module Plugin.Base
, Plugin(..)
) where
+import Database.SQLite.Simple
+
import Message
-type PluginAction = Message -> String
+-- TODO: Replace Connection with a type class
+type PluginAction = Message -> Connection -> IO String
data Plugin = Plugin
{ matchRegex :: String
diff --git a/src/Plugin/GitHubCommit.hs b/src/Plugin/GitHubCommit.hs
index 4175fb8..ec6684d 100644
--- a/src/Plugin/GitHubCommit.hs
+++ b/src/Plugin/GitHubCommit.hs
@@ -1,7 +1,11 @@
+{-# LANGUAGE OverloadedStrings #-}
+
module Plugin.GitHubCommit
( gitHubCommit
) where
+import Database.SQLite.Simple
+import Database.SQLite.Simple.FromRow
import Text.Regex.TDFA
import qualified Message as M
@@ -12,16 +16,31 @@ gitHubCommit = Plugin
, perform = gitHubCommitAction
}
+-- gitHubCommitAction :: IO PluginAction
+-- gitHubCommitAction :: M.Message -> Connection -> IO String
gitHubCommitAction :: PluginAction
-gitHubCommitAction message =
- "https://github.com/" ++ M.text message =~ matchRegex gitHubCommit
+gitHubCommitAction message dbConn = do
+ rs <- query_ dbConn "SELECT id, channel, repo_url \
+ \ FROM plugin_github_commit_channel_repo_urls \
+ \ LIMIT 1" :: IO [ChannelRepoUrl]
+ return $ response rs
+ where
+ response [] = ""
+ response (r:rs) =
+ repoUrl r ++ "/commits/" ++ M.text message =~ matchRegex gitHubCommit
+-- TODO: Make an Either type for plugins to return errors
type Id = Int
type RepoUrl = String
-- | A type to match the database table for this plugin.
-data ChannelRepoUrl = ChannelRepoUrl Id M.Channel RepoUrl deriving (Show)
+-- data ChannelRepoUrl = ChannelRepoUrl Id M.Channel RepoUrl deriving (Show)
+data ChannelRepoUrl = ChannelRepoUrl
+ { id :: Id
+ , channel :: M.Channel
+ , repoUrl :: RepoUrl
+ } deriving (Show)
instance FromRow ChannelRepoUrl where
fromRow = ChannelRepoUrl <$> field <*> field <*> field