chore: translate some import log to cn

This commit is contained in:
krau
2025-02-19 12:36:48 +08:00
parent c4eb824457
commit 3a1b8f34ea
7 changed files with 64 additions and 55 deletions

View File

@@ -14,11 +14,11 @@ import (
func InitAll() { func InitAll() {
if err := config.Init(); err != nil { if err := config.Init(); err != nil {
fmt.Println("Failed to init config: ", err) fmt.Println("加载配置文件失败: ", err)
os.Exit(1) os.Exit(1)
} }
logger.InitLogger() logger.InitLogger()
logger.L.Info("Starting SaveAny-Bot...") logger.L.Info("正在启动 SaveAny-Bot...")
storage.LoadStorages() storage.LoadStorages()
common.Init() common.Init()
dao.Init() dao.Init()

View File

@@ -27,7 +27,7 @@ func newProxyDialer(proxyUrl string) (proxy.Dialer, error) {
} }
func Init() { func Init() {
logger.L.Info("Initializing client...") logger.L.Info("初始化 Telegram 客户端...")
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel() defer cancel()
resultChan := make(chan struct { resultChan := make(chan struct {
@@ -76,7 +76,6 @@ func Init() {
{Command: "silent", Description: "开启/关闭静默模式"}, {Command: "silent", Description: "开启/关闭静默模式"},
{Command: "storage", Description: "设置默认存储端"}, {Command: "storage", Description: "设置默认存储端"},
{Command: "save", Description: "保存所回复的文件"}, {Command: "save", Description: "保存所回复的文件"},
{Command: "path", Description: "更改保存路径配置"},
}, },
}) })
resultChan <- struct { resultChan <- struct {
@@ -87,15 +86,15 @@ func Init() {
select { select {
case <-ctx.Done(): case <-ctx.Done():
logger.L.Fatal("Failed to initialize client: timeout") logger.L.Fatal("初始化客户端失败: 超时")
os.Exit(1) os.Exit(1)
case result := <-resultChan: case result := <-resultChan:
if result.err != nil { if result.err != nil {
logger.L.Fatalf("Failed to initialize client: %s", result.err) logger.L.Fatalf("初始化客户端失败: %s", result.err)
os.Exit(1) os.Exit(1)
} }
Client = result.client Client = result.client
RegisterHandlers(Client.Dispatcher) RegisterHandlers(Client.Dispatcher)
logger.L.Info("Client initialized") logger.L.Info("客户端初始化完成")
} }
} }

View File

@@ -32,25 +32,25 @@ func handleLinkMessage(ctx *ext.Context, update *ext.Update) error {
} }
messageID, err := strconv.Atoi(strSlice[2]) messageID, err := strconv.Atoi(strSlice[2])
if err != nil { if err != nil {
logger.L.Errorf("Failed to parse message ID: %s", err) logger.L.Errorf("解析消息 ID 失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("Failed to parse message ID"), nil) ctx.Reply(update, ext.ReplyTextString("无法解析消息 ID"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
chatUsername := strSlice[1] chatUsername := strSlice[1]
linkChat, err := ctx.ResolveUsername(chatUsername) linkChat, err := ctx.ResolveUsername(chatUsername)
if err != nil { if err != nil {
logger.L.Errorf("Failed to resolve chat ID: %s", err) logger.L.Errorf("解析 Chat ID 失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("Failed to resolve chat ID"), nil) ctx.Reply(update, ext.ReplyTextString("无法解析 Chat ID"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
if linkChat == nil { if linkChat == nil {
logger.L.Errorf("Cannot find chat: %s", chatUsername) logger.L.Errorf("无法找到聊天: %s", chatUsername)
ctx.Reply(update, ext.ReplyTextString("Cannot find chat"), nil) ctx.Reply(update, ext.ReplyTextString("无法找到聊天"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
user, err := dao.GetUserByChatID(update.GetUserChat().GetID()) user, err := dao.GetUserByChatID(update.GetUserChat().GetID())
if err != nil { if err != nil {
logger.L.Errorf("Failed to get user: %s", err) logger.L.Errorf("获取用户失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil) ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -62,19 +62,19 @@ func handleLinkMessage(ctx *ext.Context, update *ext.Update) error {
} }
replied, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件..."), nil) replied, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件..."), nil)
if err != nil { if err != nil {
logger.L.Errorf("Failed to reply: %s", err) logger.L.Errorf("回复失败: %s", err)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
file, err := FileFromMessage(ctx, linkChat.GetID(), messageID, "") file, err := FileFromMessage(ctx, linkChat.GetID(), messageID, "")
if err != nil { if err != nil {
logger.L.Errorf("Failed to get file from message: %s", err) logger.L.Errorf("获取文件失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("获取文件失败: "+err.Error()), nil) ctx.Reply(update, ext.ReplyTextString("获取文件失败: "+err.Error()), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
// TODO: Better file name // TODO: Better file name
if file.FileName == "" { if file.FileName == "" {
logger.L.Warnf("Empty file name, use generated name") logger.L.Warnf("文件名为空,使用生成的名称")
file.FileName = fmt.Sprintf("%d_%d_%s", linkChat.GetID(), messageID, file.Hash()) file.FileName = fmt.Sprintf("%d_%d_%s", linkChat.GetID(), messageID, file.Hash())
} }
@@ -87,7 +87,7 @@ func handleLinkMessage(ctx *ext.Context, update *ext.Update) error {
ReplyChatID: update.GetUserChat().GetID(), ReplyChatID: update.GetUserChat().GetID(),
} }
if err := dao.SaveReceivedFile(receivedFile); err != nil { if err := dao.SaveReceivedFile(receivedFile); err != nil {
logger.L.Errorf("Failed to save received file: %s", err) logger.L.Errorf("保存接收的文件失败: %s", err)
ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{ ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{
Message: "无法保存文件: " + err.Error(), Message: "无法保存文件: " + err.Error(),
ID: replied.ID, ID: replied.ID,

View File

@@ -31,7 +31,7 @@ func RegisterHandlers(dispatcher dispatcher.Dispatcher) {
dispatcher.AddHandler(handlers.NewCommand("save", saveCmd)) dispatcher.AddHandler(handlers.NewCommand("save", saveCmd))
linkRegexFilter, err := filters.Message.Regex(linkRegexString) linkRegexFilter, err := filters.Message.Regex(linkRegexString)
if err != nil { if err != nil {
logger.L.Panicf("Failed to create regex filter: %s", err) logger.L.Panicf("创建正则表达式过滤器失败: %s", err)
} }
dispatcher.AddHandler(handlers.NewMessage(linkRegexFilter, handleLinkMessage)) dispatcher.AddHandler(handlers.NewMessage(linkRegexFilter, handleLinkMessage))
dispatcher.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix("add"), AddToQueue)) dispatcher.AddHandler(handlers.NewCallbackQuery(filters.CallbackQuery.Prefix("add"), AddToQueue))
@@ -55,7 +55,7 @@ func checkPermission(ctx *ext.Context, update *ext.Update) error {
func start(ctx *ext.Context, update *ext.Update) error { func start(ctx *ext.Context, update *ext.Update) error {
if err := dao.CreateUser(update.GetUserChat().GetID()); err != nil { if err := dao.CreateUser(update.GetUserChat().GetID()); err != nil {
logger.L.Errorf("Failed to create user: %s", err) logger.L.Errorf("创建用户失败: %s", err)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
return help(ctx, update) return help(ctx, update)
@@ -85,12 +85,13 @@ func help(ctx *ext.Context, update *ext.Update) error {
func silent(ctx *ext.Context, update *ext.Update) error { func silent(ctx *ext.Context, update *ext.Update) error {
user, err := dao.GetUserByChatID(update.GetUserChat().GetID()) user, err := dao.GetUserByChatID(update.GetUserChat().GetID())
if err != nil { if err != nil {
logger.L.Errorf("Failed to get user: %s", err) logger.L.Errorf("获取用户失败: %s", err)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
user.Silent = !user.Silent user.Silent = !user.Silent
if err := dao.UpdateUser(user); err != nil { if err := dao.UpdateUser(user); err != nil {
logger.L.Errorf("Failed to update user: %s", err) logger.L.Errorf("更新用户失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("更新用户失败"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
ctx.Reply(update, ext.ReplyTextString(fmt.Sprintf("已%s静默模式", map[bool]string{true: "开启", false: "关闭"}[user.Silent])), nil) ctx.Reply(update, ext.ReplyTextString(fmt.Sprintf("已%s静默模式", map[bool]string{true: "开启", false: "关闭"}[user.Silent])), nil)
@@ -116,7 +117,7 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
user, err := dao.GetUserByChatID(update.GetUserChat().GetID()) user, err := dao.GetUserByChatID(update.GetUserChat().GetID())
if err != nil { if err != nil {
logger.L.Errorf("Failed to get user: %s", err) logger.L.Errorf("获取用户失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil) ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -130,7 +131,7 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
msg, err := GetTGMessage(ctx, update.EffectiveChat().GetID(), replyToMsgID) msg, err := GetTGMessage(ctx, update.EffectiveChat().GetID(), replyToMsgID)
if err != nil { if err != nil {
logger.L.Errorf("Failed to get message: %s", err) logger.L.Errorf("获取消息失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("无法获取消息"), nil) ctx.Reply(update, ext.ReplyTextString("无法获取消息"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -143,7 +144,7 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
replied, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件信息..."), nil) replied, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件信息..."), nil)
if err != nil { if err != nil {
logger.L.Errorf("Failed to reply: %s", err) logger.L.Errorf("回复失败: %s", err)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -152,7 +153,7 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
file, err := FileFromMessage(ctx, update.EffectiveChat().GetID(), msg.ID, customFileName) file, err := FileFromMessage(ctx, update.EffectiveChat().GetID(), msg.ID, customFileName)
if err != nil { if err != nil {
logger.L.Errorf("Failed to get file from message: %s", err) logger.L.Errorf("获取文件失败: %s", err)
ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{ ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{
Message: fmt.Sprintf("获取文件失败: %s", err), Message: fmt.Sprintf("获取文件失败: %s", err),
ID: replied.ID, ID: replied.ID,
@@ -174,12 +175,12 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
} }
if err := dao.SaveReceivedFile(receivedFile); err != nil { if err := dao.SaveReceivedFile(receivedFile); err != nil {
logger.L.Errorf("Failed to save received file: %s", err) logger.L.Errorf("保存接收的文件失败: %s", err)
if _, err := ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{ if _, err := ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{
Message: fmt.Sprintf("Failed to save received file: %s", err), Message: fmt.Sprintf("保存接收的文件失败: %s", err),
ID: replied.ID, ID: replied.ID,
}); err != nil { }); err != nil {
logger.L.Errorf("Failed to edit message: %s", err) logger.L.Errorf("编辑消息失败: %s", err)
} }
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -202,7 +203,7 @@ func saveCmd(ctx *ext.Context, update *ext.Update) error {
func storageCmd(ctx *ext.Context, update *ext.Update) error { func storageCmd(ctx *ext.Context, update *ext.Update) error {
user, err := dao.GetUserByChatID(update.GetUserChat().GetID()) user, err := dao.GetUserByChatID(update.GetUserChat().GetID())
if err != nil { if err != nil {
logger.L.Errorf("Failed to get user: %s", err) logger.L.Errorf("获取用户失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil) ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -236,7 +237,7 @@ func setDefaultStorage(ctx *ext.Context, update *ext.Update) error {
selectedStorage, err := storage.GetStorageByName(storageName) selectedStorage, err := storage.GetStorageByName(storageName)
if err != nil { if err != nil {
logger.L.Errorf("failed to get storage: %s", err) logger.L.Errorf("获取指定存储失败: %s", err)
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{ ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
QueryID: update.CallbackQuery.QueryID, QueryID: update.CallbackQuery.QueryID,
Alert: true, Alert: true,
@@ -286,7 +287,7 @@ func handleFileMessage(ctx *ext.Context, update *ext.Update) error {
user, err := dao.GetUserByChatID(update.GetUserChat().GetID()) user, err := dao.GetUserByChatID(update.GetUserChat().GetID())
if err != nil { if err != nil {
logger.L.Errorf("Failed to get user: %s", err) logger.L.Errorf("获取用户失败: %s", err)
ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil) ctx.Reply(update, ext.ReplyTextString("获取用户失败"), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -298,13 +299,13 @@ func handleFileMessage(ctx *ext.Context, update *ext.Update) error {
msg, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件信息..."), nil) msg, err := ctx.Reply(update, ext.ReplyTextString("正在获取文件信息..."), nil)
if err != nil { if err != nil {
logger.L.Errorf("Failed to reply: %s", err) logger.L.Errorf("回复失败: %s", err)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
media := update.EffectiveMessage.Media media := update.EffectiveMessage.Media
file, err := FileFromMedia(media, "") file, err := FileFromMedia(media, "")
if err != nil { if err != nil {
logger.L.Errorf("Failed to get file from media: %s", err) logger.L.Errorf("获取文件失败: %s", err)
ctx.Reply(update, ext.ReplyTextString(fmt.Sprintf("获取文件失败: %s", err)), nil) ctx.Reply(update, ext.ReplyTextString(fmt.Sprintf("获取文件失败: %s", err)), nil)
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -320,12 +321,12 @@ func handleFileMessage(ctx *ext.Context, update *ext.Update) error {
ReplyMessageID: msg.ID, ReplyMessageID: msg.ID,
ReplyChatID: update.GetUserChat().GetID(), ReplyChatID: update.GetUserChat().GetID(),
}); err != nil { }); err != nil {
logger.L.Errorf("Failed to add received file: %s", err) logger.L.Errorf("添加接收的文件失败: %s", err)
if _, err := ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{ if _, err := ctx.EditMessage(update.EffectiveChat().GetID(), &tg.MessagesEditMessageRequest{
Message: fmt.Sprintf("Failed to add received file: %s", err), Message: fmt.Sprintf("添加接收的文件失败: %s", err),
ID: msg.ID, ID: msg.ID,
}); err != nil { }); err != nil {
logger.L.Errorf("Failed to edit message: %s", err) logger.L.Errorf("编辑消息失败: %s", err)
} }
return dispatcher.EndGroups return dispatcher.EndGroups
} }
@@ -362,7 +363,7 @@ func AddToQueue(ctx *ext.Context, update *ext.Update) error {
storageNameHash := args[3] storageNameHash := args[3]
storageName := storageHashName[storageNameHash] storageName := storageHashName[storageNameHash]
if storageName == "" { if storageName == "" {
logger.L.Errorf("Unknown storage name hash: %d", storageNameHash) logger.L.Errorf("未知存储位置哈希: %d", storageNameHash)
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{ ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
QueryID: update.CallbackQuery.QueryID, QueryID: update.CallbackQuery.QueryID,
Alert: true, Alert: true,
@@ -374,7 +375,7 @@ func AddToQueue(ctx *ext.Context, update *ext.Update) error {
logger.L.Tracef("Got add to queue: chatID: %d, messageID: %d, storage: %s", fileChatID, fileMessageID, storageName) logger.L.Tracef("Got add to queue: chatID: %d, messageID: %d, storage: %s", fileChatID, fileMessageID, storageName)
record, err := dao.GetReceivedFileByChatAndMessageID(int64(fileChatID), fileMessageID) record, err := dao.GetReceivedFileByChatAndMessageID(int64(fileChatID), fileMessageID)
if err != nil { if err != nil {
logger.L.Errorf("Failed to get received file: %s", err) logger.L.Errorf("获取记录失败: %s", err)
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{ ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
QueryID: update.CallbackQuery.QueryID, QueryID: update.CallbackQuery.QueryID,
Alert: true, Alert: true,
@@ -386,12 +387,12 @@ func AddToQueue(ctx *ext.Context, update *ext.Update) error {
if update.CallbackQuery.MsgID != record.ReplyMessageID { if update.CallbackQuery.MsgID != record.ReplyMessageID {
record.ReplyMessageID = update.CallbackQuery.MsgID record.ReplyMessageID = update.CallbackQuery.MsgID
if err := dao.SaveReceivedFile(record); err != nil { if err := dao.SaveReceivedFile(record); err != nil {
logger.L.Errorf("Failed to update received file: %s", err) logger.L.Errorf("更新接收的文件失败: %s", err)
} }
} }
file, err := FileFromMessage(ctx, record.ChatID, record.MessageID, record.FileName) file, err := FileFromMessage(ctx, record.ChatID, record.MessageID, record.FileName)
if err != nil { if err != nil {
logger.L.Errorf("Failed to get file from message: %s", err) logger.L.Errorf("获取消息中的文件失败: %s", err)
ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{ ctx.AnswerCallback(&tg.MessagesSetBotCallbackAnswerRequest{
QueryID: update.CallbackQuery.QueryID, QueryID: update.CallbackQuery.QueryID,
Alert: true, Alert: true,

View File

@@ -31,10 +31,10 @@ func processPendingTask(task *types.Task) error {
cacheDestPath := filepath.Join(config.Cfg.Temp.BasePath, task.FileName()) cacheDestPath := filepath.Join(config.Cfg.Temp.BasePath, task.FileName())
cacheDestPath, err := filepath.Abs(cacheDestPath) cacheDestPath, err := filepath.Abs(cacheDestPath)
if err != nil { if err != nil {
return fmt.Errorf("failed to get absolute path: %w", err) return fmt.Errorf("处理路径失败: %w", err)
} }
if err := fileutil.CreateDir(filepath.Dir(cacheDestPath)); err != nil { if err := fileutil.CreateDir(filepath.Dir(cacheDestPath)); err != nil {
return fmt.Errorf("failed to create directory: %w", err) return fmt.Errorf("创建目录失败: %w", err)
} }
if task.StoragePath == "" { if task.StoragePath == "" {
@@ -80,18 +80,18 @@ func processPendingTask(task *types.Task) error {
0, task.File.FileSize-1, task.File.FileSize, 0, task.File.FileSize-1, task.File.FileSize,
progressCallback, task.File.FileSize/100) progressCallback, task.File.FileSize/100)
if err != nil { if err != nil {
return fmt.Errorf("failed to create reader: %w", err) return fmt.Errorf("创建下载失败: %w", err)
} }
defer readCloser.Close() defer readCloser.Close()
dest, err := os.Create(cacheDestPath) dest, err := os.Create(cacheDestPath)
if err != nil { if err != nil {
return fmt.Errorf("failed to create file: %w", err) return fmt.Errorf("创建文件失败: %w", err)
} }
defer dest.Close() defer dest.Close()
task.StartTime = time.Now() task.StartTime = time.Now()
if _, err := io.CopyN(dest, readCloser, task.File.FileSize); err != nil { if _, err := io.CopyN(dest, readCloser, task.File.FileSize); err != nil {
return fmt.Errorf("failed to download file: %w", err) return fmt.Errorf("下载文件失败: %w", err)
} }
defer cleanCacheFile(cacheDestPath) defer cleanCacheFile(cacheDestPath)
if path.Ext(task.FileName()) == "" { if path.Ext(task.FileName()) == "" {

9
storage/errs.go Normal file
View File

@@ -0,0 +1,9 @@
package storage
import (
"errors"
)
var (
ErrStorageNameEmpty = errors.New("storage name is empty")
)

View File

@@ -25,7 +25,7 @@ var Storages = make(map[string]Storage)
// GetStorageByName returns storage by name from cache or creates new one // GetStorageByName returns storage by name from cache or creates new one
func GetStorageByName(name string) (Storage, error) { func GetStorageByName(name string) (Storage, error) {
if name == "" { if name == "" {
return nil, fmt.Errorf("storage name is required") return nil, ErrStorageNameEmpty
} }
storage, ok := Storages[name] storage, ok := Storages[name]
@@ -34,7 +34,7 @@ func GetStorageByName(name string) (Storage, error) {
} }
cfg := config.Cfg.GetStorageByName(name) cfg := config.Cfg.GetStorageByName(name)
if cfg == nil { if cfg == nil {
return nil, fmt.Errorf("storage %s not found", name) return nil, fmt.Errorf("未找到存储 %s", name)
} }
storage, err := NewStorage(cfg) storage, err := NewStorage(cfg)
@@ -48,11 +48,11 @@ func GetStorageByName(name string) (Storage, error) {
// 检查 user 是否可用指定的 storage, 若不可用则返回未找到错误 // 检查 user 是否可用指定的 storage, 若不可用则返回未找到错误
func GetStorageByUserIDAndName(chatID int64, name string) (Storage, error) { func GetStorageByUserIDAndName(chatID int64, name string) (Storage, error) {
if name == "" { if name == "" {
return nil, fmt.Errorf("storage name is required") return nil, ErrStorageNameEmpty
} }
if !config.Cfg.HasStorage(chatID, name) { if !config.Cfg.HasStorage(chatID, name) {
return nil, fmt.Errorf("storage %s not found for user %d", name, chatID) return nil, fmt.Errorf("没有找到用户 %d 的存储 %s", chatID, name)
} }
return GetStorageByName(name) return GetStorageByName(name)
@@ -81,24 +81,24 @@ var storageConstructors = map[string]StorageConstructor{
func NewStorage(cfg config.StorageConfig) (Storage, error) { func NewStorage(cfg config.StorageConfig) (Storage, error) {
constructor, ok := storageConstructors[string(cfg.GetType())] constructor, ok := storageConstructors[string(cfg.GetType())]
if !ok { if !ok {
return nil, fmt.Errorf("unsupported storage type: %s", cfg.GetType()) return nil, fmt.Errorf("不支持的存储类型: %s", cfg.GetType())
} }
storage := constructor() storage := constructor()
if err := storage.Init(cfg); err != nil { if err := storage.Init(cfg); err != nil {
return nil, fmt.Errorf("failed to init %s storage: %w", cfg.GetName(), err) return nil, fmt.Errorf("初始化 %s 存储失败: %w", cfg.GetName(), err)
} }
return storage, nil return storage, nil
} }
func LoadStorages() { func LoadStorages() {
logger.L.Info("Loading storages") logger.L.Info("加载存储...")
for _, storage := range config.Cfg.Storages { for _, storage := range config.Cfg.Storages {
_, err := GetStorageByName(storage.GetName()) _, err := GetStorageByName(storage.GetName())
if err != nil { if err != nil {
logger.L.Errorf("Failed to load storage %s: %v", storage.GetName(), err) logger.L.Errorf("加载存储 %s 失败: %v", storage.GetName(), err)
} }
} }
logger.L.Infof("Successfully loaded %d storages", len(Storages)) logger.L.Infof("成功加载 %d 个存储", len(Storages))
} }