From 892af35ea399ab92d3c48f346f32c8980ef77f75 Mon Sep 17 00:00:00 2001 From: Nulo Date: Thu, 28 Dec 2023 23:11:52 -0300 Subject: [PATCH] usar cobalt para tiktok + subir imagenes con audio --- common/main.go | 7 +++- instagram/main.go | 4 +-- main.go | 40 ++++++++++++++++++---- tiktok/cobalt.go | 84 +++++++++++++++++++++++++++++++++++++++++++++++ tiktok/main.go | 4 +-- tiktok/tikmate.go | 2 +- 6 files changed, 128 insertions(+), 13 deletions(-) create mode 100644 tiktok/cobalt.go diff --git a/common/main.go b/common/main.go index 77ea85b..da91d17 100644 --- a/common/main.go +++ b/common/main.go @@ -8,9 +8,14 @@ type Responder interface { Respond(url *url.URL) (*Uploadable, Error) } type Uploadable struct { - Url string + VideoUrl string + *ImagesWithAudio Caption string } +type ImagesWithAudio struct { + ImageUrls []string + AudioUrl string +} type Error uint8 diff --git a/instagram/main.go b/instagram/main.go index aad4367..1a5e6b9 100644 --- a/instagram/main.go +++ b/instagram/main.go @@ -33,7 +33,7 @@ func (r *Instagram) Respond(url *url.URL) (*common.Uploadable, common.Error) { } return &common.Uploadable{ - Url: lookup.VideoUrl, - Caption: "instagram.com/" + lookup.Author, + VideoUrl: lookup.VideoUrl, + Caption: "instagram.com/" + lookup.Author, }, common.OK } diff --git a/main.go b/main.go index bc21010..09fa470 100644 --- a/main.go +++ b/main.go @@ -95,13 +95,39 @@ func (config Config) handleMessage(bot *tgbotapi.BotAPI, update tgbotapi.Update) } if uploadable != nil { - res := tgbotapi.NewVideo(update.Message.Chat.ID, FileURL(uploadable.Url)) - res.ReplyToMessageID = update.Message.MessageID - res.Caption = uploadable.Caption - _, err := bot.Send(res) - if err != nil { - log.Println("Error subiendo", url.String(), err) - bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), ".")) + if uploadable.ImagesWithAudio != nil { + var files []interface{} + for _, u := range uploadable.ImagesWithAudio.ImageUrls { + files = append(files, + tgbotapi.NewInputMediaPhoto(tgbotapi.FileURL(u)), + ) + } + log.Println(files) + mediaGroup := tgbotapi.NewMediaGroup(update.Message.Chat.ID, files) + mediaGroup.ReplyToMessageID = update.Message.MessageID + + msgs, err := bot.SendMediaGroup(mediaGroup) + if err != nil { + log.Println("Error subiendo", url.String(), err) + bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), ".")) + } + res := tgbotapi.NewAudio(update.Message.Chat.ID, FileURL(uploadable.AudioUrl)) + res.ReplyToMessageID = msgs[0].MessageID + _, err = bot.Send(res) + if err != nil { + log.Println("Error subiendo", url.String(), err) + bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), ".")) + } + } else { + res := tgbotapi.NewVideo(update.Message.Chat.ID, FileURL(uploadable.VideoUrl)) + res.ReplyToMessageID = update.Message.MessageID + res.Caption = uploadable.Caption + _, err := bot.Send(res) + if err != nil { + log.Println("Error subiendo", url.String(), err) + bot.Send(respondWithMany(update.Message, "Hubo un error al descargar ", url.String(), ".")) + } + } } diff --git a/tiktok/cobalt.go b/tiktok/cobalt.go new file mode 100644 index 0000000..db60149 --- /dev/null +++ b/tiktok/cobalt.go @@ -0,0 +1,84 @@ +package tiktok + +import ( + "bytes" + "encoding/json" + "errors" + "net/http" + + "nulo.in/dlbot/common" +) + +// https://github.com/wukko/cobalt/blob/current/docs/api.md + +type jsonRequest struct { + Url string `json:"url"` +} + +type jsonResponse struct { + Status string `json:"status"` + Text string `json:"text"` + Url string `json:"url"` + PickerType string `json:"pickerType"` + Picker []struct { + Url string `json:"url"` + } `json:"picker"` + AudioUrl string `json:"audio"` +} + +func (r *TikTok) cobaltLookup(urlS string) (*common.Uploadable, error) { + jsonReq := jsonRequest{ + Url: urlS, + } + reqByt, err := json.Marshal(jsonReq) + if err != nil { + return nil, err + } + + req, err := http.NewRequest( + "POST", + "https://co.wuk.sh/api/json", + bytes.NewReader(reqByt), + ) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") + resp, err := r.Client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + var jsonRes jsonResponse + err = json.NewDecoder(resp.Body).Decode(&jsonRes) + if err != nil { + return nil, err + } + + if jsonRes.Status == "error" { + return nil, errors.New("cobalt error: " + jsonRes.Text) + } + + if len(jsonRes.Url) > 0 { + return &common.Uploadable{ + VideoUrl: jsonRes.Url, + }, nil + } + if len(jsonRes.AudioUrl) > 0 && jsonRes.PickerType == "images" && len(jsonRes.Picker) > 0 { + var imageUrls []string + for _, i := range jsonRes.Picker { + imageUrls = append(imageUrls, i.Url) + } + + return &common.Uploadable{ + ImagesWithAudio: &common.ImagesWithAudio{ + AudioUrl: jsonRes.AudioUrl, + ImageUrls: imageUrls, + }, + }, nil + } + + return nil, errors.New("Faltan datos de cobalt") +} diff --git a/tiktok/main.go b/tiktok/main.go index d73a78c..fcf9bc7 100644 --- a/tiktok/main.go +++ b/tiktok/main.go @@ -28,11 +28,11 @@ func (r *TikTok) Respond(url *url.URL) (*common.Uploadable, common.Error) { urlString := url.String() - lookup, err := r.lookup(urlString) + lookup, err := r.cobaltLookup(urlString) if err != nil { log.Println(err) return nil, common.HadError } - return &common.Uploadable{Url: lookup}, common.OK + return lookup, common.OK } diff --git a/tiktok/tikmate.go b/tiktok/tikmate.go index c1482e0..0a28df4 100644 --- a/tiktok/tikmate.go +++ b/tiktok/tikmate.go @@ -42,5 +42,5 @@ func (r *TikTok) lookup(urlS string) (string, error) { if !lookup.Success { return "", errors.New(lookup.Message) } - return "https://tikmate.app/download/" + lookup.Token + "/" + lookup.ID + ".mp4?hd=1", nil + return "https://tikmate.app/download/" + lookup.Token + "/" + lookup.ID + ".mp4", nil }