parent
d7a2fd7261
commit
79ccbdbc0f
@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "github.com/mattn/go-sqlite3" // the _ in front allows us to use the standard sql package
|
||||
"database/sql"
|
||||
"log"
|
||||
"strings"
|
||||
"math/rand"
|
||||
)
|
||||
|
||||
const (
|
||||
DBFileName string = "dunks.db"
|
||||
DBVersion int = 1
|
||||
)
|
||||
|
||||
var (
|
||||
DBConn *sql.DB
|
||||
)
|
||||
|
||||
|
||||
/*
|
||||
in our init we check and see if the DB exists (or needs to be upgraded
|
||||
|
||||
-- DB Schema --
|
||||
meta: GuildID Text Unique, Version int
|
||||
guild tables: SubmittedBy Text, Dunk text unique
|
||||
*/
|
||||
func init() {
|
||||
var err error
|
||||
|
||||
if DBConn, err = sql.Open("sqlite3", DBFileName); err != nil {
|
||||
log.Fatal("couldn't open DB", err)
|
||||
} else if err = DBConn.Ping(); err != nil {
|
||||
log.Fatal("can't ping db", err)
|
||||
}
|
||||
|
||||
if res, err := DBConn.Query("SELECT Version FROM dunks_meta LIMIT 1"); err != nil {
|
||||
log.Println("running initial DB setup")
|
||||
|
||||
if _, err = DBConn.Exec("CREATE TABLE dunks_meta(GuildID text unique, Version int)"); err != nil {
|
||||
DBConn.Close()
|
||||
log.Fatal("couldn't create table", err)
|
||||
}
|
||||
} else {
|
||||
defer res.Close()
|
||||
res.Next()
|
||||
log.Println("checking for and running migrations if needed")
|
||||
|
||||
var dbver int
|
||||
if res.Scan(&dbver); dbver < DBVersion {
|
||||
res.Close()
|
||||
RunMigrations()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MIGRATION CODE GOES HERE IF IT'S NEEDED
|
||||
func RunMigrations() {}
|
||||
|
||||
// code that adds a new saying into the db for a guild
|
||||
// returns an error if something went wrong adding it to the db
|
||||
func AddDunk(guildID, authorID, text string) error {
|
||||
var tableName string = "dunks_" + guildID
|
||||
|
||||
_, err := DBConn.Exec("INSERT INTO TABLE " + tableName + " VALUES($1, $2)",
|
||||
authorID, text)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// creates a new table of dunks for a guild
|
||||
func CreateGuildTable(guildID string) error {
|
||||
var err error
|
||||
var tableName string = "dunks_" + guildID
|
||||
_, err = DBConn.Exec("CREATE TABLE IF NOT EXISTS " + tableName + "(SubmittedBy Text, Dunk Text Unique)")
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// returns a dunk
|
||||
// if withDad is false then only a dunk that doesn't have the word "Dad" in it is returned
|
||||
func GetDunk(guildID string, withDad bool) string {
|
||||
var tableName string = "dunks_" + guildID
|
||||
dunks := make([]string, 0)
|
||||
|
||||
if query, err := DBConn.Query("SELECT Dunk from " + tableName + ""); err == nil {
|
||||
defer query.Close()
|
||||
for query.Next() {
|
||||
var d string
|
||||
|
||||
query.Scan(&d)
|
||||
|
||||
if (!withDad && (strings.Contains(d, "Dad") || strings.Contains(d, "dad"))) || withDad {
|
||||
dunks = append(dunks, d)
|
||||
}
|
||||
}
|
||||
|
||||
return dunks[rand.Intn(len(dunks))]
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
Loading…
Reference in New Issue