1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package telegram
- import (
- "context"
- )
- // handleSingleMessages handle single messages not belongs to group.
- func (b *Bot) handleSingleMessages(ctx context.Context, messages []Message) error {
- var attachments []Attachment
- for _, message := range messages {
- attachment, err := b.downloadAttachment(ctx, &message)
- if err != nil {
- return err
- }
- if attachment != nil {
- attachments = append(attachments, *attachment)
- }
- err = b.handler.MessageHandle(ctx, b, message, attachments)
- if err != nil {
- return err
- }
- }
- return nil
- }
- // handleGroupMessages handle a message belongs to group.
- func (b *Bot) handleGroupMessages(ctx context.Context, groupMessages []Message) error {
- captions := make(map[string]string, len(groupMessages))
- messages := make(map[string]Message, len(groupMessages))
- attachments := make(map[string][]Attachment, len(groupMessages))
- // Group all captions, blobs and messages
- for _, message := range groupMessages {
- groupID := *message.MediaGroupID
- messages[groupID] = message
- if message.Caption != nil {
- captions[groupID] += *message.Caption
- }
- attachment, err := b.downloadAttachment(ctx, &message)
- if err != nil {
- return err
- }
- if attachment != nil {
- attachments[groupID] = append(attachments[groupID], *attachment)
- }
- }
- // Handle each group message
- for groupID, message := range messages {
- // replace Caption with all Caption in the group
- caption := captions[groupID]
- message.Caption = &caption
- err := b.handler.MessageHandle(ctx, b, message, attachments[groupID])
- if err != nil {
- return err
- }
- }
- return nil
- }
|