aboutsummaryrefslogtreecommitdiffstats
path: root/src/Lib.hs
diff options
context:
space:
mode:
authorTeddy Wing2017-08-02 22:17:50 +0200
committerTeddy Wing2017-08-02 22:17:50 +0200
commitff00355ade021d3e06d55017c5337f488474e5cb (patch)
tree10447734a4fc9004ffddee0fea2d116c3c8069f5 /src/Lib.hs
parent34bf6e470f498bb0cfa97c91e55221a67e06f2f1 (diff)
downloadsorbot-ff00355ade021d3e06d55017c5337f488474e5cb.tar.bz2
Connect plugins to the database
The GitHub Commit plugin needs access to the database in order to work properly. Include 'sqlite-simple' to give us access to the database and have it transform rows into Haskell objects. This change has the unfortunate effect of forcing us to make `PluginAction` an IO type. This means we'll need to make all our plugin action functions use IO, even the pure ones. `PluginAction` now takes a database connection as a second argument, and returns an `IO String`. I don't like the fact that the database argument is effectively hard-coded. Thus the TODO note to try to make a type class to replace it so we can pass a null database connection when it isn't needed. Eventually, if more things like this need to be passed into the function, we might consider making a new struct type for the purpose. In order to be able to use the `query_` function, which takes a String-like `Query`, we have to declare `OverloadedStrings`. Now in `gitHubCommitAction` we take the database connection as an argument, select a row (for now it's always the first one to test this out), and send back a GitHub commit URL (if a record matched, otherwise return an empty string). Eventually we'll want to make this more real by selecting the row corresponding to the channel in `message`. Also, instead of returning an empty string, we should be returning an `Either`, so the error state is clear. Update the `ChannelRepoUrl` data constructor to use record syntax so we can name its fields.
Diffstat (limited to 'src/Lib.hs')
-rw-r--r--src/Lib.hs7
1 files changed, 6 insertions, 1 deletions
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