mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 05:42:06 +08:00
- 数据库: - 从Database实例中移除AddKeyword和RemoveKeyword中的错误返回值。现在只在发生错误时返回错误。 - 为RemoveKeyword添加受影响行数的返回值,以判断关键词是否被成功删除。 - 优化AddPromptReply和DeletePromptReply,使用事务确保数据的一致性和完整性。 - 调整GetAllPromptReplies以强制刷新缓存并更新缓存时间。 - 核心: - 重构init.go中的全局变量初始化,移除多余注释。 - 在main.go中添加数据库关闭操作,确保资源在程序结束时被正确释放。 - 链接过滤器: - 重构LinkFilter服务,移除数据库实例字段。 - 更新LinkFilter中的数据加载和关键词操作,使用core包中的数据库方法。 - 添加LinkFilter的Close方法以关闭数据库连接。 - 消息处理器: - 移除message_handler.go中handleUpdate和handleAdminCommand中的数据库参数。 - 更新RunMessageHandler以初始化数据库并确保在结束时关闭连接。 - 调整handleListKeywords、handleAddKeyword、handleDeleteKeyword、handleDeleteContainingKeyword、handleListWhitelist、handleAddWhitelist和handleDeleteWhitelist,移除数据库参数。 - 提示回复: - 在prompt_reply.go中移除全局数据库变量。 - 更新SetPromptReply和DeletePromptReply,使用core.DB代替db。 - 调整GetPromptReply和ListPromptReplies使用更新后的数据库访问方法。 这些更改优化了代码结构,减少了全局状态,并提高了数据库操作的可靠性。
104 lines
2.2 KiB
Go
104 lines
2.2 KiB
Go
package core
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
)
|
|
|
|
var (
|
|
Bot *tgbotapi.BotAPI
|
|
BOT_TOKEN string
|
|
ChatID int64
|
|
ADMIN_ID int64
|
|
Symbols []string
|
|
SingaporeTZ *time.Location
|
|
DB_FILE string
|
|
DEBUG_MODE bool
|
|
err error
|
|
DB *Database
|
|
)
|
|
|
|
func IsAdmin(userID int64) bool {
|
|
return userID == ADMIN_ID
|
|
}
|
|
func mustParseInt64(s string) (int64, error) {
|
|
if s == "" {
|
|
return 0, fmt.Errorf("空字符串")
|
|
}
|
|
|
|
value, err := strconv.ParseInt(s, 10, 64)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("未能将'%s'解析为 int64: %v", s, err)
|
|
}
|
|
|
|
return value, nil
|
|
}
|
|
func Init() error {
|
|
var err error
|
|
|
|
// 从环境变量获取 BOT_TOKEN
|
|
BOT_TOKEN = os.Getenv("BOT_TOKEN")
|
|
if BOT_TOKEN == "" {
|
|
return fmt.Errorf("BOT_TOKEN 环境变量未设置")
|
|
}
|
|
|
|
// 从环境变量获取 ADMIN_ID
|
|
adminIDStr := os.Getenv("ADMIN_ID")
|
|
ADMIN_ID, err = mustParseInt64(adminIDStr)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid ADMIN_ID: %v", err)
|
|
}
|
|
|
|
// 初始化数据库
|
|
DB_FILE = filepath.Join("/app/data", "q58.db")
|
|
DB, err = NewDatabase()
|
|
if err != nil {
|
|
return fmt.Errorf("初始化数据库失败: %v", err)
|
|
}
|
|
|
|
// 从环境变量中读取调试模式设置
|
|
DEBUG_MODE = os.Getenv("DEBUG_MODE") == "true"
|
|
|
|
// 设置时区
|
|
loc := time.FixedZone("Asia/Singapore", 8*60*60)
|
|
time.Local = loc
|
|
|
|
// 初始化 Chat ID
|
|
chatIDStr := os.Getenv("CHAT_ID")
|
|
ChatID, err = mustParseInt64(chatIDStr)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid CHAT_ID: %v", err)
|
|
}
|
|
|
|
// 初始化 Symbols
|
|
symbolsRaw := strings.Split(os.Getenv("SYMBOLS"), ",")
|
|
Symbols = make([]string, len(symbolsRaw))
|
|
for i, s := range symbolsRaw {
|
|
Symbols[i] = strings.ReplaceAll(s, "/", "")
|
|
}
|
|
|
|
// 初始化新加坡时区
|
|
SingaporeTZ, err = time.LoadLocation("Asia/Singapore")
|
|
if err != nil {
|
|
log.Printf("加载新加坡时区时出错: %v", err)
|
|
log.Println("回落至 UTC+8")
|
|
SingaporeTZ = time.FixedZone("Asia/Singapore", 8*60*60)
|
|
}
|
|
|
|
// 初始化 Bot API
|
|
Bot, err = tgbotapi.NewBotAPI(BOT_TOKEN)
|
|
if err != nil {
|
|
return fmt.Errorf("创建 Bot API 失败: %v", err)
|
|
}
|
|
|
|
log.Printf("账户已授权 %s", Bot.Self.UserName)
|
|
return nil
|
|
}
|