7a04f298d2
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
163 lines
4.4 KiB
Go
163 lines
4.4 KiB
Go
package message
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/go-faster/errors"
|
|
|
|
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
|
|
)
|
|
|
|
// PhotoBuilder is a Photo media option.
|
|
type PhotoBuilder struct {
|
|
photo tg.InputMediaPhoto
|
|
caption []StyledTextOption
|
|
}
|
|
|
|
// TTL sets time to live of self-destructing photo.
|
|
func (u *PhotoBuilder) TTL(ttl time.Duration) *PhotoBuilder {
|
|
return u.TTLSeconds(int(ttl.Seconds()))
|
|
}
|
|
|
|
// TTLSeconds sets time to live in seconds of self-destructing photo.
|
|
func (u *PhotoBuilder) TTLSeconds(ttl int) *PhotoBuilder {
|
|
u.photo.TTLSeconds = ttl
|
|
return u
|
|
}
|
|
|
|
// apply implements MediaOption.
|
|
func (u *PhotoBuilder) apply(ctx context.Context, b *multiMediaBuilder) error {
|
|
return Media(&u.photo, u.caption...).apply(ctx, b)
|
|
}
|
|
|
|
// applyMulti implements MultiMediaOption.
|
|
func (u *PhotoBuilder) applyMulti(ctx context.Context, b *multiMediaBuilder) error {
|
|
return u.apply(ctx, b)
|
|
}
|
|
|
|
// Photo adds photo attachment.
|
|
func Photo(photo FileLocation, caption ...StyledTextOption) *PhotoBuilder {
|
|
v := new(tg.InputPhoto)
|
|
v.FillFrom(photo)
|
|
|
|
return &PhotoBuilder{
|
|
photo: tg.InputMediaPhoto{
|
|
ID: v,
|
|
},
|
|
caption: caption,
|
|
}
|
|
}
|
|
|
|
// Photo sends photo.
|
|
func (b *Builder) Photo(
|
|
ctx context.Context,
|
|
photo FileLocation, caption ...StyledTextOption,
|
|
) (tg.UpdatesClass, error) {
|
|
return b.Media(ctx, Photo(photo, caption...))
|
|
}
|
|
|
|
// PhotoExternalBuilder is a PhotoExternal media option.
|
|
type PhotoExternalBuilder struct {
|
|
doc tg.InputMediaPhotoExternal
|
|
caption []StyledTextOption
|
|
}
|
|
|
|
// TTL sets time to live of self-destructing document.
|
|
func (u *PhotoExternalBuilder) TTL(ttl time.Duration) *PhotoExternalBuilder {
|
|
return u.TTLSeconds(int(ttl.Seconds()))
|
|
}
|
|
|
|
// TTLSeconds sets time to live in seconds of self-destructing document.
|
|
func (u *PhotoExternalBuilder) TTLSeconds(ttl int) *PhotoExternalBuilder {
|
|
u.doc.TTLSeconds = ttl
|
|
return u
|
|
}
|
|
|
|
// apply implements MediaOption.
|
|
func (u *PhotoExternalBuilder) apply(ctx context.Context, b *multiMediaBuilder) error {
|
|
return Media(&u.doc, u.caption...).apply(ctx, b)
|
|
}
|
|
|
|
// PhotoExternal adds photo attachment which will be downloaded by the Telegram servers.
|
|
func PhotoExternal(url string, caption ...StyledTextOption) *PhotoExternalBuilder {
|
|
return &PhotoExternalBuilder{
|
|
doc: tg.InputMediaPhotoExternal{
|
|
URL: url,
|
|
},
|
|
caption: caption,
|
|
}
|
|
}
|
|
|
|
// PhotoExternal sends photo attachment which will be downloaded by the Telegram servers.
|
|
func (b *Builder) PhotoExternal(
|
|
ctx context.Context,
|
|
url string, caption ...StyledTextOption,
|
|
) (tg.UpdatesClass, error) {
|
|
return b.Media(ctx, PhotoExternal(url, caption...))
|
|
}
|
|
|
|
// UploadedPhotoBuilder is a UploadedPhoto media option.
|
|
type UploadedPhotoBuilder struct {
|
|
photo tg.InputMediaUploadedPhoto
|
|
caption []StyledTextOption
|
|
}
|
|
|
|
// Stickers adds attached mask stickers.
|
|
func (u *UploadedPhotoBuilder) Stickers(stickers ...FileLocation) *UploadedPhotoBuilder {
|
|
u.photo.Stickers = append(u.photo.Stickers, inputDocuments(stickers...)...)
|
|
return u
|
|
}
|
|
|
|
// TTL sets time to live of self-destructing photo.
|
|
func (u *UploadedPhotoBuilder) TTL(ttl time.Duration) *UploadedPhotoBuilder {
|
|
return u.TTLSeconds(int(ttl.Seconds()))
|
|
}
|
|
|
|
// TTLSeconds sets time to live in seconds of self-destructing photo.
|
|
func (u *UploadedPhotoBuilder) TTLSeconds(ttl int) *UploadedPhotoBuilder {
|
|
u.photo.TTLSeconds = ttl
|
|
return u
|
|
}
|
|
|
|
// apply implements MediaOption.
|
|
func (u *UploadedPhotoBuilder) apply(ctx context.Context, b *multiMediaBuilder) error {
|
|
return Media(&u.photo, u.caption...).apply(ctx, b)
|
|
}
|
|
|
|
// applyMulti implements MultiMediaOption.
|
|
func (u *UploadedPhotoBuilder) applyMulti(ctx context.Context, b *multiMediaBuilder) error {
|
|
m, err := b.sender.uploadMedia(ctx, &tg.MessagesUploadMediaRequest{
|
|
Peer: b.peer,
|
|
Media: &u.photo,
|
|
})
|
|
if err != nil {
|
|
return errors.Wrap(err, "upload media")
|
|
}
|
|
|
|
input, err := convertMessageMediaToInput(m)
|
|
if err != nil {
|
|
return errors.Wrap(err, "convert")
|
|
}
|
|
|
|
return Media(input, u.caption...).apply(ctx, b)
|
|
}
|
|
|
|
// UploadedPhoto adds photo attachment.
|
|
func UploadedPhoto(file tg.InputFileClass, caption ...StyledTextOption) *UploadedPhotoBuilder {
|
|
return &UploadedPhotoBuilder{
|
|
photo: tg.InputMediaUploadedPhoto{
|
|
File: file,
|
|
},
|
|
caption: caption,
|
|
}
|
|
}
|
|
|
|
// UploadedPhoto sends uploaded file as photo.
|
|
func (b *Builder) UploadedPhoto(
|
|
ctx context.Context,
|
|
file tg.InputFileClass, caption ...StyledTextOption,
|
|
) (tg.UpdatesClass, error) {
|
|
return b.Media(ctx, UploadedPhoto(file, caption...))
|
|
}
|