feat(cmd): add chat ls

This commit is contained in:
iyear 2022-09-14 09:19:51 +08:00
parent 28c31ab9dc
commit 2aeb4afa29
4 changed files with 94 additions and 1 deletions

52
app/chat/ls.go Normal file
View file

@ -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
})
}

15
cmd/chat/chat.go Normal file
View file

@ -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)
}

25
cmd/chat/ls.go Normal file
View file

@ -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)
},
}

View file

@ -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")