mirror of
https://github.com/idanoo/GoDiscMoji
synced 2025-07-01 10:22:14 +00:00
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
_ "github.com/golang-migrate/migrate/source/file"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
type Database struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
// InitDb - Initialize DB connection
|
|
func InitDb() (*Database, error) {
|
|
ddb := Database{}
|
|
|
|
db, err := sql.Open("sqlite3", "file:/data/db.sqlite?loc=auto")
|
|
if err != nil {
|
|
return &ddb, err
|
|
}
|
|
|
|
db.SetConnMaxLifetime(0)
|
|
db.SetMaxOpenConns(5)
|
|
db.SetMaxIdleConns(2)
|
|
|
|
err = db.Ping()
|
|
if err != nil {
|
|
return &ddb, err
|
|
}
|
|
|
|
ddb.db = db
|
|
|
|
return ddb.runMigrations()
|
|
}
|
|
|
|
// runMigrations - Run migrations for connection
|
|
func (db *Database) runMigrations() (*Database, error) {
|
|
_, err := db.db.Exec("CREATE TABLE IF NOT EXISTS `emoji_usage` (" +
|
|
"`id` INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
|
"`guild_id` TEXT, " +
|
|
"`channel_id` TEXT, " +
|
|
"`message_id` TEXT, " +
|
|
"`user_id` TEXT, " +
|
|
"`emoji_id` TEXT, " +
|
|
"`emoji_name` TEXT, " +
|
|
"`timestamp` DATETIME" +
|
|
")")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_emoji_usage_guild_id_user_id` ON `emoji_usage` (`guild_id`, `user_id`, `emoji_id`)")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_emoji_usage_message_id_user_id_emoji_id` ON `emoji_usage` (`message_id`, `user_id`, `guild_id`, `emoji_id`)")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
_, err = db.db.Exec("CREATE TABLE IF NOT EXISTS `auto_scrubber` (" +
|
|
"`id` INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
|
"`guild_id` TEXT, " +
|
|
"`user_id` TEXT, " +
|
|
"`duration` INT " +
|
|
")")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
_, err = db.db.Exec("CREATE INDEX IF NOT EXISTS `idx_auto_scrubber_guild_user` ON `auto_scrubber` (`guild_id`, `user_id`)")
|
|
if err != nil {
|
|
return db, err
|
|
}
|
|
|
|
// emojitest := map[string]string{
|
|
// "pepe_analyze": "579431592624390147",
|
|
// "kekw": "1317987954102112347",
|
|
// "pepe_kek": "1300985103182336010",
|
|
// "KEKW": "649918246119669770",
|
|
// }
|
|
|
|
// for name, id := range emojitest {
|
|
// _, err = db.db.Exec("UPDATE `emoji_usage` SET `emoji_id` = '" + id + "' WHERE `emoji_name` = '" + name + "'")
|
|
// if err != nil {
|
|
// return db, err
|
|
// }
|
|
// }
|
|
|
|
return db, nil
|
|
}
|
|
|
|
// CloseDbConn - Closes DB connection
|
|
func (db *Database) CloseDbConn() {
|
|
db.db.Close()
|
|
}
|