added proper logging to most of the code
This commit is contained in:
parent
65c6020e49
commit
7d4c9c5ab9
21 changed files with 218 additions and 283 deletions
|
@ -2,7 +2,7 @@ package notify
|
|||
|
||||
import (
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
"log"
|
||||
"github.com/rs/zerolog/log"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -11,6 +11,7 @@ import (
|
|||
)
|
||||
|
||||
func Reminder(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
||||
log.Debug().Str("args", update.Message.CommandArguments()).Msg("parsing new reminder")
|
||||
commandArgs := strings.Fields(update.Message.CommandArguments())
|
||||
|
||||
var timeArg string
|
||||
|
@ -20,6 +21,7 @@ func Reminder(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
|||
timeArg = strings.ToLower(commandArgs[0])
|
||||
textArg = strings.Replace(update.Message.CommandArguments(), timeArg, "", 1)
|
||||
} else {
|
||||
log.Error().Str("args", update.Message.CommandArguments()).Msg("invalid new reminder")
|
||||
message := tgbotapi.MessageConfig{
|
||||
BaseChat: tgbotapi.BaseChat{ChatID: update.Message.Chat.ID, ReplyToMessageID: update.Message.MessageID},
|
||||
ParseMode: "html",
|
||||
|
@ -30,11 +32,10 @@ func Reminder(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
|||
return
|
||||
}
|
||||
|
||||
log.Println("[notify] Attempting to set reminder for user " + strconv.FormatInt(update.Message.From.ID, 10) + " in chat " + strconv.FormatInt(update.Message.Chat.ID, 10) + " with arguments " + timeArg)
|
||||
|
||||
isValidFormat := regexp.MustCompile(`(?m)^\d{1,3}[mhd]$`)
|
||||
|
||||
if !isValidFormat.MatchString(timeArg) {
|
||||
log.Error().Str("args", update.Message.CommandArguments()).Msg("invalid new reminder")
|
||||
message := tgbotapi.MessageConfig{
|
||||
BaseChat: tgbotapi.BaseChat{ChatID: update.Message.Chat.ID, ReplyToMessageID: update.Message.MessageID},
|
||||
ParseMode: "html",
|
||||
|
@ -64,9 +65,7 @@ func Reminder(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
|||
|
||||
notifyTime := time.Now().UTC().Add(time.Duration(number) * modifyTime)
|
||||
|
||||
var reminder reminderConfig
|
||||
|
||||
reminder = reminderConfig{
|
||||
reminder := reminderConfig{
|
||||
updateID: update.UpdateID,
|
||||
notifyTime: notifyTime.Unix(),
|
||||
chatID: update.Message.Chat.ID,
|
||||
|
@ -75,6 +74,8 @@ func Reminder(update tgbotapi.Update, bot *tgbotapi.BotAPI) {
|
|||
reminderText: textArg,
|
||||
}
|
||||
|
||||
log.Info().Int("ID", reminder.updateID).Int64("chat", reminder.chatID).Int64("user", reminder.userID).Int64("time", reminder.notifyTime).Msg("adding new reminder")
|
||||
|
||||
sqlAddReminder(reminder)
|
||||
|
||||
message := tgbotapi.MessageConfig{
|
||||
|
@ -95,17 +96,19 @@ func NotifyHandler(bot *tgbotapi.BotAPI) {
|
|||
|
||||
for updateID, reminderTime := range reminders {
|
||||
if reminderTime <= time.Now().UTC().Unix() {
|
||||
log.Info().Int("ID", updateID).Msg("reminder is due")
|
||||
details := sqlGetReminderDetails(updateID)
|
||||
|
||||
message := tgbotapi.MessageConfig{
|
||||
BaseChat: tgbotapi.BaseChat{ChatID: details.chatID, ReplyToMessageID: details.messageToReplyToID},
|
||||
ParseMode: "html",
|
||||
DisableWebPagePreview: false,
|
||||
|
||||
Text: details.reminderText,
|
||||
Text: "Reminder: " + details.reminderText,
|
||||
}
|
||||
log.Info().Int64("chat", details.chatID).Int64("user", details.userID).Str("text", details.reminderText).Msg("sent reminder")
|
||||
|
||||
botIO.SendMessage(message, bot)
|
||||
|
||||
sqlDeleteReminder(updateID)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,7 @@ package notify
|
|||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"strconv"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
var notifySetReminder *sql.Stmt
|
||||
|
@ -13,61 +12,69 @@ var notifyDeleteReminder *sql.Stmt
|
|||
|
||||
func InitDB() {
|
||||
const dbPath string = "./bloater.db"
|
||||
log.Info().Str("dbpath", dbPath).Msg("init database")
|
||||
db, err := sql.Open("sqlite3", dbPath)
|
||||
if err != nil {
|
||||
log.Panicf("Failed to open sqlite database: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to open sqlite database")
|
||||
}
|
||||
|
||||
_, err = db.Exec("CREATE TABLE IF NOT EXISTS notify (updateID INTEGER,notifyTime INTEGER,chatID INTEGER, userID INTEGER,messageToReplyToID INTEGER,notifyText TEXT)")
|
||||
if err != nil {
|
||||
log.Panicf("Failed to create table: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to create table")
|
||||
}
|
||||
log.Println("[notify.sql] Created sqlite table in database at " + dbPath)
|
||||
|
||||
notifySetReminder, err = db.Prepare("INSERT OR REPLACE INTO notify (updateID,notifyTime,chatID, userID,messageToReplyToID,notifyText) values (?,?,?,?,?,?)")
|
||||
|
||||
if err != nil {
|
||||
log.Panicf("Failed to prepare sql insert: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to create sql statement")
|
||||
}
|
||||
|
||||
notifyGetReminders, err = db.Prepare("SELECT updateID,notifyTime FROM notify")
|
||||
|
||||
if err != nil {
|
||||
log.Panicf("Failed to prepare sql select: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to create sql statement")
|
||||
}
|
||||
|
||||
notifyGetReminderDetails, err = db.Prepare("SELECT chatID, userID,messageToReplyToID,notifyText FROM notify WHERE updateID=?")
|
||||
|
||||
if err != nil {
|
||||
log.Panicf("Failed to prepare sql select: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to create sql statement")
|
||||
}
|
||||
|
||||
notifyDeleteReminder, err = db.Prepare("DELETE FROM notify WHERE updateID=?")
|
||||
|
||||
if err != nil {
|
||||
log.Panicf("Failed to prepare sql select: %v\n", err)
|
||||
log.Panic().Err(err).Msg("failed to create sql statement")
|
||||
}
|
||||
|
||||
log.Info().Msg("init database: done")
|
||||
}
|
||||
|
||||
func sqlDeleteReminder(updateID int) {
|
||||
_, err := notifyDeleteReminder.Exec(updateID)
|
||||
if err != nil {
|
||||
log.Panicf("Failed to delete reminder: %v\n", err)
|
||||
log.Error().Err(err).Msg("failed to execute SQL to delete reminder")
|
||||
return
|
||||
}
|
||||
|
||||
log.Debug().Msg("executed SQL to delete reminder")
|
||||
}
|
||||
|
||||
func sqlAddReminder(reminder reminderConfig) {
|
||||
_, err := notifySetReminder.Exec(reminder.updateID, reminder.notifyTime, reminder.chatID, reminder.userID, reminder.messageToReplyToID, reminder.reminderText)
|
||||
if err != nil {
|
||||
log.Panicf("Failed to set add reminder: %v\n", err)
|
||||
log.Error().Err(err).Msg("failed to execute SQL to add reminder")
|
||||
return
|
||||
}
|
||||
log.Println("[notify.sql] Set new reminder for " + strconv.FormatInt(reminder.userID, 10) + " in chat " + strconv.FormatInt(reminder.chatID, 10))
|
||||
|
||||
log.Debug().Msg("executed SQL to add reminder")
|
||||
}
|
||||
|
||||
func sqlGetReminders() (reminders map[int]int64) {
|
||||
rows, err := notifyGetReminders.Query()
|
||||
if err != nil {
|
||||
log.Panicf("Failed to query reminders: %v\n", err)
|
||||
log.Error().Err(err).Msg("failed to execute SQL to get reminder")
|
||||
return
|
||||
}
|
||||
|
||||
reminders = make(map[int]int64)
|
||||
|
@ -78,11 +85,13 @@ func sqlGetReminders() (reminders map[int]int64) {
|
|||
case nil:
|
||||
reminders[c] = b
|
||||
default:
|
||||
log.Panicf("Failed to query gaypoints: %v\n", err)
|
||||
log.Error().Err(err).Msg("failed to parse SQL to get reminder")
|
||||
return
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
log.Debug().Msg("executed SQL to get reminders")
|
||||
return reminders
|
||||
}
|
||||
|
||||
|
@ -93,9 +102,10 @@ func sqlGetReminderDetails(updateID int) (reminder reminderConfig) {
|
|||
case nil:
|
||||
break
|
||||
default:
|
||||
log.Panicf("Failed to get reminder details: %v\n", err)
|
||||
log.Error().Err(err).Msg("failed to execute SQL to get reminder details")
|
||||
return
|
||||
|
||||
}
|
||||
log.Println("[notify.sql] Got reminder details for update ID" + string(rune(updateID)))
|
||||
log.Debug().Msg("executed SQL to get reminder details")
|
||||
return reminder
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue