- Telegram integration for customer statistics - MCP server implementation with rate limiting - Cache system for performance optimization - Multi-language support - RESTful API endpoints 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package telegram
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/gotd/td/tg"
|
|
)
|
|
|
|
func extractMessages(resp tg.MessagesMessagesClass) ([]*tg.Message, error) {
|
|
switch v := resp.(type) {
|
|
case *tg.MessagesMessages:
|
|
return filterMessages(v.Messages), nil
|
|
case *tg.MessagesMessagesSlice:
|
|
return filterMessages(v.Messages), nil
|
|
case *tg.MessagesChannelMessages:
|
|
return filterMessages(v.Messages), nil
|
|
case *tg.MessagesMessagesNotModified:
|
|
return nil, fmt.Errorf("messages not modified")
|
|
default:
|
|
return nil, fmt.Errorf("unsupported response type %T", resp)
|
|
}
|
|
}
|
|
|
|
func filterMessages(values []tg.MessageClass) []*tg.Message {
|
|
result := make([]*tg.Message, 0, len(values))
|
|
for _, m := range values {
|
|
if msg, ok := m.(*tg.Message); ok {
|
|
result = append(result, msg)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func extractMessageByID(resp tg.MessagesMessagesClass, id int) (*tg.Message, error) {
|
|
messages, err := extractMessages(resp)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, msg := range messages {
|
|
if msg.ID == id {
|
|
return msg, nil
|
|
}
|
|
}
|
|
return nil, fmt.Errorf("message %d not found", id)
|
|
}
|
|
|
|
func isFromBot(msg *tg.Message, botID int64) bool {
|
|
if msg == nil || msg.Out {
|
|
return false
|
|
}
|
|
|
|
if peer, ok := msg.GetPeerID().(*tg.PeerUser); ok && peer.UserID == botID {
|
|
return true
|
|
}
|
|
|
|
if fromClass, ok := msg.GetFromID(); ok {
|
|
if from, ok := fromClass.(*tg.PeerUser); ok && from.UserID == botID {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|