Initial commit: FunStat MCP Server Go implementation
- 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>
This commit is contained in:
63
internal/telegram/messages.go
Normal file
63
internal/telegram/messages.go
Normal file
@@ -0,0 +1,63 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user