media: handle polls
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
@@ -90,6 +90,20 @@ func (mc *MessageConverter) ToMatrix(ctx context.Context, portal *bridgev2.Porta
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
cm.Parts = append(cm.Parts, location)
|
cm.Parts = append(cm.Parts, location)
|
||||||
|
case tg.MessageMediaPollTypeID:
|
||||||
|
cm.Parts = append(cm.Parts, mc.convertPoll(media))
|
||||||
|
// case tg.MessageMediaDiceTypeID:
|
||||||
|
// cm.Parts = append(cm.Parts, mc.convertDice(media))
|
||||||
|
// case tg.MessageMediaGameTypeID:
|
||||||
|
// cm.Parts = append(cm.Parts, mc.convertGame(media))
|
||||||
|
// case tg.MessageMediaStoryTypeID:
|
||||||
|
// cm.Parts = append(cm.Parts, mc.convertStory(media))
|
||||||
|
// case tg.MessageMediaInvoiceTypeID:
|
||||||
|
// cm.Parts = append(cm.Parts, mc.convertInvoice(media))
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
// case tg.MessageMediaGiveawayTypeID:
|
||||||
|
// case tg.MessageMediaGiveawayResultsTypeID:
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unsupported media type %T", media)
|
return nil, fmt.Errorf("unsupported media type %T", media)
|
||||||
}
|
}
|
||||||
@@ -180,16 +194,6 @@ func (mc *MessageConverter) convertMediaRequiringUpload(ctx context.Context, por
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO all of these
|
|
||||||
// case *tg.MessageMediaUnsupported: // messageMediaUnsupported#9f84f49e
|
|
||||||
// case *tg.MessageMediaGame: // messageMediaGame#fdb19008
|
|
||||||
// case *tg.MessageMediaInvoice: // messageMediaInvoice#f6a548d3
|
|
||||||
// case *tg.MessageMediaPoll: // messageMediaPoll#4bd6e798
|
|
||||||
// case *tg.MessageMediaDice: // messageMediaDice#3f7ee58b
|
|
||||||
// case *tg.MessageMediaStory: // messageMediaStory#68cb6283
|
|
||||||
// case *tg.MessageMediaGiveaway: // messageMediaGiveaway#daad85b0
|
|
||||||
// case *tg.MessageMediaGiveawayResults: // messageMediaGiveawayResults#c6991068
|
|
||||||
default:
|
default:
|
||||||
return nil, nil, fmt.Errorf("unhandled media type %T", media)
|
return nil, nil, fmt.Errorf("unhandled media type %T", media)
|
||||||
}
|
}
|
||||||
@@ -238,16 +242,6 @@ func (mc *MessageConverter) convertMediaRequiringUpload(ctx context.Context, por
|
|||||||
|
|
||||||
mimeType = document.GetMimeType()
|
mimeType = document.GetMimeType()
|
||||||
data, err = download.DownloadDocument(ctx, mc.client.API(), document)
|
data, err = download.DownloadDocument(ctx, mc.client.API(), document)
|
||||||
|
|
||||||
// TODO all of these
|
|
||||||
// case *tg.MessageMediaUnsupported: // messageMediaUnsupported#9f84f49e
|
|
||||||
// case *tg.MessageMediaGame: // messageMediaGame#fdb19008
|
|
||||||
// case *tg.MessageMediaInvoice: // messageMediaInvoice#f6a548d3
|
|
||||||
// case *tg.MessageMediaPoll: // messageMediaPoll#4bd6e798
|
|
||||||
// case *tg.MessageMediaDice: // messageMediaDice#3f7ee58b
|
|
||||||
// case *tg.MessageMediaStory: // messageMediaStory#68cb6283
|
|
||||||
// case *tg.MessageMediaGiveaway: // messageMediaGiveaway#daad85b0
|
|
||||||
// case *tg.MessageMediaGiveawayResults: // messageMediaGiveawayResults#c6991068
|
|
||||||
default:
|
default:
|
||||||
return nil, nil, fmt.Errorf("unhandled media type %T", media)
|
return nil, nil, fmt.Errorf("unhandled media type %T", media)
|
||||||
}
|
}
|
||||||
@@ -390,3 +384,26 @@ func (mc *MessageConverter) convertLocation(media tg.MessageMediaClass) (*bridge
|
|||||||
Extra: extra,
|
Extra: extra,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (mc *MessageConverter) convertPoll(media tg.MessageMediaClass) *bridgev2.ConvertedMessagePart {
|
||||||
|
// TODO (PLAT-25224) make this richer in the future once megabridge has support for polls
|
||||||
|
|
||||||
|
poll := media.(*tg.MessageMediaPoll)
|
||||||
|
var textAnswers []string
|
||||||
|
var htmlAnswers strings.Builder
|
||||||
|
for i, opt := range poll.Poll.Answers {
|
||||||
|
textAnswers = append(textAnswers, fmt.Sprintf("%d. %s", i+1, opt.Text.Text))
|
||||||
|
htmlAnswers.WriteString(fmt.Sprintf("<li>%s</li>", opt.Text.Text))
|
||||||
|
}
|
||||||
|
|
||||||
|
return &bridgev2.ConvertedMessagePart{
|
||||||
|
ID: networkid.PartID("poll"),
|
||||||
|
Type: event.EventMessage,
|
||||||
|
Content: &event.MessageEventContent{
|
||||||
|
MsgType: event.MsgText,
|
||||||
|
Body: fmt.Sprintf("Poll: %s\n%s\nOpen the Telegram app to vote.", poll.Poll.Question.Text, strings.Join(textAnswers, "\n")),
|
||||||
|
Format: event.FormatHTML,
|
||||||
|
FormattedBody: fmt.Sprintf(`<strong>Poll</strong>: %s<ol>%s</ol>Open the Telegram app to vote.`, poll.Poll.Question.Text, htmlAnswers.String()),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user