44 "context"
55 "encoding/json"
66 "fmt"
7+ "strings"
78 "time"
89
910 "github.com/gotd/td/telegram/message"
@@ -28,10 +29,9 @@ func (c *Client) GetHistory(args HistoryArguments) (*mcp.ToolResponse, error) {
2829 if err := client .Run (context .Background (), func (ctx context.Context ) (err error ) {
2930 api := client .API ()
3031
31- sender := message .NewSender (api )
32- inputPeer , err := sender .Resolve (args .Name ).AsInputPeer (ctx )
32+ inputPeer , err := getInputPeerFromName (ctx , api , args .Name )
3333 if err != nil {
34- return fmt .Errorf ("failed to resolve name: %w" , err )
34+ return fmt .Errorf ("get inputPeer from name: %w" , err )
3535 }
3636
3737 messagesClass , err = api .MessagesGetHistory (ctx , & tg.MessagesGetHistoryRequest {
@@ -69,6 +69,37 @@ func (c *Client) GetHistory(args HistoryArguments) (*mcp.ToolResponse, error) {
6969 return mcp .NewToolResponse (mcp .NewTextContent (string (jsonData ))), nil
7070}
7171
72+ func getInputPeerFromName (ctx context.Context , api * tg.Client , name string ) (tg.InputPeerClass , error ) {
73+ isCustom := strings .Contains (name , "[" ) && strings .Contains (name , "]" )
74+
75+ switch {
76+ case strings .HasPrefix (name , "chn" ) && isCustom :
77+ var channelPeer tg.InputPeerChannel
78+ _ , err := fmt .Sscanf (name , "chn[%d:%d]" , & channelPeer .ChannelID , & channelPeer .AccessHash )
79+ if err != nil {
80+ return nil , errors .Wrapf (err , "scan channel peer(%q)" , name )
81+ }
82+
83+ return & channelPeer , nil
84+ case strings .HasPrefix (name , "cht" ) && isCustom :
85+ var chatPeer tg.InputPeerChat
86+ _ , err := fmt .Sscanf (name , "cht[%d]" , & chatPeer .ChatID )
87+ if err != nil {
88+ return nil , errors .Wrapf (err , "scan chat peer(%q)" , name )
89+ }
90+
91+ return & chatPeer , nil
92+ default :
93+ sender := message .NewSender (api )
94+ inputPeer , err := sender .Resolve (name ).AsInputPeer (ctx )
95+ if err != nil {
96+ return nil , fmt .Errorf ("failed to resolve name: %w" , err )
97+ }
98+
99+ return inputPeer , nil
100+ }
101+ }
102+
72103type history struct {
73104 tg.MessagesMessages
74105 users map [int64 ]* tg.User
0 commit comments