From c8a58ab8ba379f9db3fccb452a53d20a44c79e76 Mon Sep 17 00:00:00 2001 From: TheTipo01 <10187614+TheTipo01@users.noreply.github.com> Date: Wed, 16 Mar 2022 18:48:52 +0100 Subject: [PATCH] refactor: auto-save every 5minutes --- database.go | 5 ++++- main.go | 3 +++ markov.go | 19 +++++++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/database.go b/database.go index 926f0ba..940a386 100644 --- a/database.go +++ b/database.go @@ -40,7 +40,6 @@ func addMessage(m *discordgo.Message) { if !m.Author.Bot { server[m.GuildID].model.Add(strings.Split(m.Content, " ")) - saveModel(m.GuildID) } } else { _, err = db.Exec("INSERT INTO messages (guildID, channelID, messageID, message) VALUES (?, ?, ?, ?)", m.GuildID, m.ChannelID, m.ID, inJSON) @@ -250,6 +249,10 @@ func loadScheduler(s *discordgo.Session) { lit.Debug("Added cronjob for server %s", guildID) } + _, _ = cron.Every(5).Minute().Do(func() { + saveAllModels() + }) + // And start the scheduler cron.StartAsync() } diff --git a/main.go b/main.go index 785b522..8bdc287 100644 --- a/main.go +++ b/main.go @@ -115,6 +115,9 @@ func main() { // Cleanly close down the Discord session. _ = dg.Close() + + saveAllModels() + // And the database connection _ = db.Close() } diff --git a/markov.go b/markov.go index e6602e4..c2b2936 100644 --- a/markov.go +++ b/markov.go @@ -52,12 +52,23 @@ func buildModel(guildID string) *gomarkov.Chain { // saveModel updates the model on the database func saveModel(guildID string) { - data, _ := json.Marshal(server[guildID].model) + if server[guildID] != nil { + data, _ := json.Marshal(server[guildID].model) - _, err := db.Exec("UPDATE servers SET model=? WHERE id=?", data, guildID) + _, err := db.Exec("UPDATE servers SET model=? WHERE id=?", data, guildID) - if err != nil { - lit.Error("Error updating model: %s", err.Error()) + if err != nil { + lit.Error("Error updating model: %s", err.Error()) + } + } else { + lit.Warn("Server map for guild %s is nil", guildID) + } +} + +// saveAllModels saves all the models in the map server +func saveAllModels() { + for guildID, _ := range server { + saveModel(guildID) } }