Q58Bot/core/init.go
wood chen a093f712f8 数据库与关键词管理功能的增强
- 扩展了数据库模式,为关键词添加了新字段:is_link、is_auto_added和added_at。
- 实现了新的关键词管理方法,包括AddKeyword的更新,使其能够设置链接和自动添加标记。
- 开发了CleanupExpiredLinks方法来删除过期的自动添加链接。
- 导入了time包以支持新字段的Timestamp默认值。
- 进行了迁移脚本的开发和执行,以无缝过渡到新的数据库结构。
- 更新了关键词检索方法,以支持新的关键词属性。
- 在消息处理和链接过滤服务中调整了关键词的添加逻辑。
- 重构了/list命令的响应,以区分手动添加的关键词和自动添加的链接。
- 优化了/add命令,以正确处理新的关键词属性。

注意:这些更改需要在已有的数据库中执行适当的迁移脚本,以避免数据丢失或结构冲突。
2024-09-28 15:28:26 +08:00

92 lines
2.0 KiB
Go

package core
import (
"fmt"
"log"
"os"
"path/filepath"
"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 Init() 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)
}
// 执行数据迁移
err = DB.MigrateExistingKeywords()
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
}