From 2aeb4afa29e3028ae44f01bbb5f2e51a1058aaff Mon Sep 17 00:00:00 2001 From: iyear Date: Wed, 14 Sep 2022 09:19:51 +0800 Subject: [PATCH] feat(cmd): add chat ls --- app/chat/ls.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ cmd/chat/chat.go | 15 ++++++++++++++ cmd/chat/ls.go | 25 +++++++++++++++++++++++ cmd/root.go | 3 ++- 4 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 app/chat/ls.go create mode 100644 cmd/chat/chat.go create mode 100644 cmd/chat/ls.go diff --git a/app/chat/ls.go b/app/chat/ls.go new file mode 100644 index 0000000..d7850cf --- /dev/null +++ b/app/chat/ls.go @@ -0,0 +1,52 @@ +package chat + +import ( + "context" + "fmt" + "github.com/gotd/contrib/middleware/floodwait" + "github.com/gotd/contrib/middleware/ratelimit" + "github.com/gotd/td/telegram/query" + "github.com/iyear/tdl/app/internal/tgc" + "github.com/iyear/tdl/pkg/consts" + "github.com/iyear/tdl/pkg/kv" + "github.com/iyear/tdl/pkg/utils" + "golang.org/x/time/rate" + "time" +) + +func List(ctx context.Context, ns, proxy string) error { + kvd, err := kv.New(kv.Options{ + Path: consts.KVPath, + NS: ns, + }) + if err != nil { + return err + } + + c := tgc.New(proxy, kvd, false, floodwait.NewSimpleWaiter(), ratelimit.New(rate.Every(time.Millisecond*400), 2)) + + return c.Run(ctx, func(ctx context.Context) error { + + dialogs, err := query.GetDialogs(c.API()).BatchSize(100).Collect(ctx) + if err != nil { + return err + } + + blocked, err := utils.Telegram.GetBlockedDialogs(ctx, c.API()) + if err != nil { + return err + } + + for _, dialog := range dialogs { + id := utils.Telegram.GetInputPeerID(dialog.Peer) + + if _, ok := blocked[id]; ok { + continue + } + + fmt.Printf("ID: %d, Title: %s, Type: %s\n", id, utils.Telegram.GetPeerName(id, dialog.Entities), utils.Telegram.GetPeerType(id, dialog.Entities)) + } + + return nil + }) +} diff --git a/cmd/chat/chat.go b/cmd/chat/chat.go new file mode 100644 index 0000000..0335126 --- /dev/null +++ b/cmd/chat/chat.go @@ -0,0 +1,15 @@ +package chat + +import ( + "github.com/spf13/cobra" +) + +var Cmd = &cobra.Command{ + Use: "chat", + Short: "A set of chat tools", + Example: "", +} + +func init() { + Cmd.AddCommand(cmdList) +} diff --git a/cmd/chat/ls.go b/cmd/chat/ls.go new file mode 100644 index 0000000..b6c747a --- /dev/null +++ b/cmd/chat/ls.go @@ -0,0 +1,25 @@ +package chat + +import ( + "github.com/iyear/tdl/app/chat" + "github.com/spf13/cobra" +) + +var cmdList = &cobra.Command{ + Use: "ls", + Short: "List your all chats with info", + Example: "", + RunE: func(cmd *cobra.Command, args []string) error { + proxy, err := cmd.Flags().GetString("proxy") + if err != nil { + return err + } + + ns, err := cmd.Flags().GetString("ns") + if err != nil { + return err + } + + return chat.List(cmd.Context(), ns, proxy) + }, +} diff --git a/cmd/root.go b/cmd/root.go index 3e11915..d5a9241 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/fatih/color" + "github.com/iyear/tdl/cmd/chat" "github.com/iyear/tdl/cmd/dl" "github.com/iyear/tdl/cmd/login" "github.com/iyear/tdl/cmd/version" @@ -26,7 +27,7 @@ var cmd = &cobra.Command{ } func init() { - cmd.AddCommand(version.Cmd, login.Cmd, dl.CmdDL) + cmd.AddCommand(version.Cmd, login.Cmd, dl.CmdDL, chat.Cmd) cmd.PersistentFlags().String("proxy", "", "proxy address, only socks5 is supported, format: protocol://username:password@host:port") cmd.PersistentFlags().StringP("ns", "n", "", "namespace for Telegram session")