mirror of
https://github.com/krau/SaveAny-Bot.git
synced 2026-05-11 22:19:40 +08:00
feat: add command to sync peer chats with userbot
This commit is contained in:
@@ -31,13 +31,14 @@ var CommandHandlers = []DescCommandHandler{
|
|||||||
{"dl", i18nk.BotMsgCmdDl, handleDlCmd},
|
{"dl", i18nk.BotMsgCmdDl, handleDlCmd},
|
||||||
{"task", i18nk.BotMsgCmdTask, handleTaskCmd},
|
{"task", i18nk.BotMsgCmdTask, handleTaskCmd},
|
||||||
{"cancel", i18nk.BotMsgCmdCancel, handleCancelCmd},
|
{"cancel", i18nk.BotMsgCmdCancel, handleCancelCmd},
|
||||||
{"watch", i18nk.BotMsgCmdWatch, handleWatchCmd},
|
|
||||||
{"unwatch", i18nk.BotMsgCmdUnwatch, handleUnwatchCmd},
|
|
||||||
{"lswatch", i18nk.BotMsgCmdLswatch, handleLswatchCmd},
|
|
||||||
{"config", i18nk.BotMsgCmdConfig, handleConfigCmd},
|
{"config", i18nk.BotMsgCmdConfig, handleConfigCmd},
|
||||||
{"fnametmpl", i18nk.BotMsgCmdFnametmpl, handleConfigFnameTmpl},
|
{"fnametmpl", i18nk.BotMsgCmdFnametmpl, handleConfigFnameTmpl},
|
||||||
{"help", i18nk.BotMsgCmdHelp, handleHelpCmd},
|
{"help", i18nk.BotMsgCmdHelp, handleHelpCmd},
|
||||||
{"parser", i18nk.BotMsgCmdParser, handleParserCmd},
|
{"parser", i18nk.BotMsgCmdParser, handleParserCmd},
|
||||||
|
{"watch", i18nk.BotMsgCmdWatch, handleWatchCmd},
|
||||||
|
{"unwatch", i18nk.BotMsgCmdUnwatch, handleUnwatchCmd},
|
||||||
|
{"lswatch", i18nk.BotMsgCmdLswatch, handleLswatchCmd},
|
||||||
|
{"syncpeers", i18nk.BotMsgCmdSyncpeers, handleSyncpeersCmd},
|
||||||
{"update", i18nk.BotMsgCmdUpdate, handleUpdateCmd},
|
{"update", i18nk.BotMsgCmdUpdate, handleUpdateCmd},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
62
client/bot/handlers/sync_peers.go
Normal file
62
client/bot/handlers/sync_peers.go
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/celestix/gotgproto/dispatcher"
|
||||||
|
"github.com/celestix/gotgproto/ext"
|
||||||
|
"github.com/celestix/gotgproto/storage"
|
||||||
|
"github.com/charmbracelet/log"
|
||||||
|
"github.com/gotd/td/telegram/query/dialogs"
|
||||||
|
"github.com/krau/SaveAny-Bot/client/user"
|
||||||
|
"github.com/krau/SaveAny-Bot/common/i18n"
|
||||||
|
"github.com/krau/SaveAny-Bot/common/i18n/i18nk"
|
||||||
|
"github.com/krau/SaveAny-Bot/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
var syncpeerMu sync.Mutex
|
||||||
|
|
||||||
|
func handleSyncpeersCmd(ctx *ext.Context, u *ext.Update) error {
|
||||||
|
if !config.C().Telegram.Userbot.Enable {
|
||||||
|
return dispatcher.EndGroups
|
||||||
|
}
|
||||||
|
syncpeerMu.Lock()
|
||||||
|
defer syncpeerMu.Unlock()
|
||||||
|
uctx := user.GetCtx()
|
||||||
|
if uctx == nil {
|
||||||
|
return dispatcher.EndGroups
|
||||||
|
}
|
||||||
|
ctx.Reply(u, ext.ReplyTextString(i18n.T(i18nk.BotMsgSyncpeersStart)), nil)
|
||||||
|
tapi := uctx.Raw
|
||||||
|
peerStorage := uctx.PeerStorage
|
||||||
|
log.FromContext(ctx).Info("Starting to sync peers...")
|
||||||
|
count := 0
|
||||||
|
err := dialogs.NewQueryBuilder(tapi).GetDialogs().BatchSize(50).ForEach(ctx, func(ctx context.Context, e dialogs.Elem) error {
|
||||||
|
for cid, channel := range e.Entities.Channels() {
|
||||||
|
peerStorage.AddPeer(cid, channel.AccessHash, storage.TypeChannel, channel.Username)
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
for uid, user := range e.Entities.Users() {
|
||||||
|
peerStorage.AddPeer(uid, user.AccessHash, storage.TypeUser, user.Username)
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
for gid := range e.Entities.Chats() {
|
||||||
|
peerStorage.AddPeer(gid, storage.DefaultAccessHash, storage.TypeChat, storage.DefaultUsername)
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.FromContext(ctx).Error("Failed to sync peers", "error", err)
|
||||||
|
ctx.Reply(u, ext.ReplyTextString(i18n.T(i18nk.BotMsgSyncpeersFailed, map[string]any{
|
||||||
|
"Error": err.Error(),
|
||||||
|
})), nil)
|
||||||
|
return dispatcher.EndGroups
|
||||||
|
}
|
||||||
|
log.FromContext(ctx).Info("Finished syncing peers")
|
||||||
|
ctx.Reply(u, ext.ReplyTextString(i18n.T(i18nk.BotMsgSyncpeersSuccess, map[string]any{
|
||||||
|
"Count": count,
|
||||||
|
})), nil)
|
||||||
|
return dispatcher.EndGroups
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ const (
|
|||||||
BotMsgCmdSilent Key = "bot.msg.cmd.silent"
|
BotMsgCmdSilent Key = "bot.msg.cmd.silent"
|
||||||
BotMsgCmdStart Key = "bot.msg.cmd.start"
|
BotMsgCmdStart Key = "bot.msg.cmd.start"
|
||||||
BotMsgCmdStorage Key = "bot.msg.cmd.storage"
|
BotMsgCmdStorage Key = "bot.msg.cmd.storage"
|
||||||
|
BotMsgCmdSyncpeers Key = "bot.msg.cmd.syncpeers"
|
||||||
BotMsgCmdTask Key = "bot.msg.cmd.task"
|
BotMsgCmdTask Key = "bot.msg.cmd.task"
|
||||||
BotMsgCmdUnwatch Key = "bot.msg.cmd.unwatch"
|
BotMsgCmdUnwatch Key = "bot.msg.cmd.unwatch"
|
||||||
BotMsgCmdUpdate Key = "bot.msg.cmd.update"
|
BotMsgCmdUpdate Key = "bot.msg.cmd.update"
|
||||||
@@ -170,6 +171,9 @@ const (
|
|||||||
BotMsgSaveHelpText Key = "bot.msg.save_help_text"
|
BotMsgSaveHelpText Key = "bot.msg.save_help_text"
|
||||||
BotMsgStorageInfoFilenamePrefix Key = "bot.msg.storage.info_filename_prefix"
|
BotMsgStorageInfoFilenamePrefix Key = "bot.msg.storage.info_filename_prefix"
|
||||||
BotMsgStorageInfoPromptSelectStorage Key = "bot.msg.storage.info_prompt_select_storage"
|
BotMsgStorageInfoPromptSelectStorage Key = "bot.msg.storage.info_prompt_select_storage"
|
||||||
|
BotMsgSyncpeersFailed Key = "bot.msg.syncpeers.failed"
|
||||||
|
BotMsgSyncpeersStart Key = "bot.msg.syncpeers.start"
|
||||||
|
BotMsgSyncpeersSuccess Key = "bot.msg.syncpeers.success"
|
||||||
BotMsgTasksCancelFailed Key = "bot.msg.tasks.cancel_failed"
|
BotMsgTasksCancelFailed Key = "bot.msg.tasks.cancel_failed"
|
||||||
BotMsgTasksCancelRequestedPrefix Key = "bot.msg.tasks.cancel_requested_prefix"
|
BotMsgTasksCancelRequestedPrefix Key = "bot.msg.tasks.cancel_requested_prefix"
|
||||||
BotMsgTasksFieldCreated Key = "bot.msg.tasks.field_created"
|
BotMsgTasksFieldCreated Key = "bot.msg.tasks.field_created"
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ bot:
|
|||||||
/watch - Watch chats and auto save (UserBot)
|
/watch - Watch chats and auto save (UserBot)
|
||||||
/unwatch - Stop watching chats (UserBot)
|
/unwatch - Stop watching chats (UserBot)
|
||||||
/lswatch - List watched chats (UserBot)
|
/lswatch - List watched chats (UserBot)
|
||||||
|
/syncpeers - Sync peer chats (UserBot)
|
||||||
/update - Check and upgrade to latest version
|
/update - Check and upgrade to latest version
|
||||||
|
|
||||||
Usage guide: https://sabot.unv.app/usage
|
Usage guide: https://sabot.unv.app/usage
|
||||||
@@ -59,6 +60,7 @@ bot:
|
|||||||
help: "Show help"
|
help: "Show help"
|
||||||
parser: "Manage parsers"
|
parser: "Manage parsers"
|
||||||
update: "Check for updates"
|
update: "Check for updates"
|
||||||
|
syncpeers: "Sync peer chats (UserBot)"
|
||||||
save_help_text: |
|
save_help_text: |
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
@@ -323,3 +325,7 @@ bot:
|
|||||||
direct_start: "Starting download, total size: {{.SizeMB}} MB ({{.Count}} files)"
|
direct_start: "Starting download, total size: {{.SizeMB}} MB ({{.Count}} files)"
|
||||||
file_name_prefix: "Filename: "
|
file_name_prefix: "Filename: "
|
||||||
error_prefix: "\nError: "
|
error_prefix: "\nError: "
|
||||||
|
syncpeers:
|
||||||
|
start: "Starting to sync peers..."
|
||||||
|
done: "Peer sync completed, total {{.Count}} chats synced"
|
||||||
|
failed: "Peer sync failed: {{.Error}}"
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ bot:
|
|||||||
/watch - 监听聊天并自动保存 (UserBot)
|
/watch - 监听聊天并自动保存 (UserBot)
|
||||||
/unwatch - 取消监听聊天 (UserBot)
|
/unwatch - 取消监听聊天 (UserBot)
|
||||||
/lswatch - 列出正在监听的聊天 (UserBot)
|
/lswatch - 列出正在监听的聊天 (UserBot)
|
||||||
|
/syncpeers - 同步对话列表 (UserBot)
|
||||||
/update - 检查更新并升级
|
/update - 检查更新并升级
|
||||||
|
|
||||||
使用帮助: https://sabot.unv.app/usage
|
使用帮助: https://sabot.unv.app/usage
|
||||||
@@ -54,6 +55,7 @@ bot:
|
|||||||
watch: "监听聊天(UserBot)"
|
watch: "监听聊天(UserBot)"
|
||||||
unwatch: "取消监听聊天(UserBot)"
|
unwatch: "取消监听聊天(UserBot)"
|
||||||
lswatch: "列出监听的聊天(UserBot)"
|
lswatch: "列出监听的聊天(UserBot)"
|
||||||
|
syncpeers: "同步对话列表(UserBot)"
|
||||||
config: "修改配置"
|
config: "修改配置"
|
||||||
fnametmpl: "设置文件命名模板"
|
fnametmpl: "设置文件命名模板"
|
||||||
help: "显示帮助"
|
help: "显示帮助"
|
||||||
@@ -323,3 +325,7 @@ bot:
|
|||||||
direct_start: "开始下载, 总大小: {{.SizeMB}} MB ({{.Count}} 个文件)"
|
direct_start: "开始下载, 总大小: {{.SizeMB}} MB ({{.Count}} 个文件)"
|
||||||
file_name_prefix: "文件名: "
|
file_name_prefix: "文件名: "
|
||||||
error_prefix: "\n错误: "
|
error_prefix: "\n错误: "
|
||||||
|
syncpeers:
|
||||||
|
start: "正在同步对话列表..."
|
||||||
|
success: "对话列表同步完成, 共同步 {{.Count}} 个对话"
|
||||||
|
failed: "对话列表同步失败: {{.Error}}"
|
||||||
|
|||||||
Reference in New Issue
Block a user