mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 13:52:07 +08:00
消息处理器启动时加载提示回复数据
消息处理器启动过程中现在会从数据库加载提示回复数据。这保证了在启动时,所有必要的回复数据都已准备好,提高了效率和用户体验。 更改包括在`RunMessageHandler`函数中加载数据,并在`PromptReplyManager`中实现数据的线程安全加载。
This commit is contained in:
parent
b153581254
commit
c5acd7cd7c
@ -115,6 +115,14 @@ func processMessage(bot *tgbotapi.BotAPI, message *tgbotapi.Message, linkFilter
|
|||||||
func RunMessageHandler() error {
|
func RunMessageHandler() error {
|
||||||
log.Println("消息处理器启动...")
|
log.Println("消息处理器启动...")
|
||||||
|
|
||||||
|
// 加载提示回复数据
|
||||||
|
err := prompt_reply.Manager.LoadDataFromDatabase()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("加载提示回复数据失败: %v", err)
|
||||||
|
// 考虑是否要因为这个错误停止启动
|
||||||
|
// return fmt.Errorf("加载提示回复数据失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
baseDelay := time.Second
|
baseDelay := time.Second
|
||||||
maxDelay := 5 * time.Minute
|
maxDelay := 5 * time.Minute
|
||||||
delay := baseDelay
|
delay := baseDelay
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/woodchen-ink/Q58Bot/core"
|
"github.com/woodchen-ink/Q58Bot/core"
|
||||||
@ -11,6 +12,33 @@ import (
|
|||||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type PromptReplyManager struct {
|
||||||
|
promptReplies map[string]string
|
||||||
|
mu sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
var Manager *PromptReplyManager
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Manager = &PromptReplyManager{
|
||||||
|
promptReplies: make(map[string]string),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (prm *PromptReplyManager) LoadDataFromDatabase() error {
|
||||||
|
prm.mu.Lock()
|
||||||
|
defer prm.mu.Unlock()
|
||||||
|
|
||||||
|
promptReplies, err := core.DB.GetAllPromptReplies()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
prm.promptReplies = promptReplies
|
||||||
|
|
||||||
|
log.Printf("提示回复: 已从数据库加载 %d 条提示回复", len(prm.promptReplies))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func SetPromptReply(prompt, reply string) error {
|
func SetPromptReply(prompt, reply string) error {
|
||||||
err := core.DB.AddPromptReply(prompt, reply)
|
err := core.DB.AddPromptReply(prompt, reply)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -18,14 +46,11 @@ func SetPromptReply(prompt, reply string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前所有的 prompt replies 来确认添加成功
|
Manager.mu.Lock()
|
||||||
promptReplies, err := core.DB.GetAllPromptReplies()
|
Manager.promptReplies[prompt] = reply
|
||||||
if err != nil {
|
Manager.mu.Unlock()
|
||||||
log.Printf("提示回复: %s 添加后获取提示回复列表出错: %v", time.Now().Format("2006/01/02 15:04:05"), err)
|
|
||||||
} else {
|
|
||||||
log.Printf("提示回复: %s 设置提示回复成功。当前提示回复数量: %d", time.Now().Format("2006/01/02 15:04:05"), len(promptReplies))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
log.Printf("提示回复: %s 设置提示回复成功。当前提示回复数量: %d", time.Now().Format("2006/01/02 15:04:05"), len(Manager.promptReplies))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,14 +61,11 @@ func DeletePromptReply(prompt string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前所有的 prompt replies 来确认删除成功
|
Manager.mu.Lock()
|
||||||
promptReplies, err := core.DB.GetAllPromptReplies()
|
delete(Manager.promptReplies, prompt)
|
||||||
if err != nil {
|
Manager.mu.Unlock()
|
||||||
log.Printf("提示回复: %s 删除后获取提示回复列表出错: %v", time.Now().Format("2006/01/02 15:04:05"), err)
|
|
||||||
} else {
|
|
||||||
log.Printf("提示回复: %s 删除提示回复成功。当前提示回复数量: %d", time.Now().Format("2006/01/02 15:04:05"), len(promptReplies))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
log.Printf("提示回复: %s 删除提示回复成功。当前提示回复数量: %d", time.Now().Format("2006/01/02 15:04:05"), len(Manager.promptReplies))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user