mirror-nourybot/internal/commands/download.go

235 lines
6.6 KiB
Go
Raw Normal View History

2023-10-03 17:23:52 +02:00
package commands
import (
"context"
"fmt"
"io"
"os"
"github.com/gempir/go-twitch-irc/v4"
"github.com/google/uuid"
"github.com/wader/goutubedl"
"go.uber.org/zap"
)
2023-10-05 19:33:07 +02:00
type Downloader struct {
TwitchClient *twitch.Client
2023-10-03 17:23:52 +02:00
Log *zap.SugaredLogger
}
2023-10-05 19:33:07 +02:00
func NewDownload(destination, target, link string, tc *twitch.Client, log *zap.SugaredLogger) {
dl := &Downloader{
TwitchClient: tc,
2023-10-03 17:23:52 +02:00
Log: log,
}
2023-10-05 19:33:07 +02:00
switch destination {
case "catbox":
dl.CatboxDownload(target, link)
2023-10-05 20:21:23 +02:00
case "yaf":
dl.YafDownload(target, link)
case "kappa":
dl.KappaDownload(target, link)
case "gofile":
dl.GofileDownload(target, link)
2023-10-05 19:33:07 +02:00
}
2023-10-03 17:23:52 +02:00
}
2023-10-05 20:21:23 +02:00
func (dl *Downloader) YafDownload(target, link string) {
2023-10-03 17:23:52 +02:00
goutubedl.Path = "yt-dlp"
2023-10-05 20:21:23 +02:00
dl.TwitchClient.Say(target, "Downloading... dankCircle")
result, err := goutubedl.New(context.Background(), link, goutubedl.Options{})
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
rExt := result.Info.Ext
downloadResult, err := result.Download(context.Background(), "best")
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
dl.TwitchClient.Say(target, "Downloaded.")
uuidFilename, err := uuid.NewUUID()
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
fileName := fmt.Sprintf("%s.%s", uuidFilename, rExt)
f, err := os.Create(fileName)
dl.TwitchClient.Say(target, fmt.Sprintf("Filename: %s", fileName))
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
defer f.Close()
if _, err = io.Copy(f, downloadResult); err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
downloadResult.Close()
f.Close()
// duration := 5 * time.Second
// dl.twitchClient.Say(target, "ResidentSleeper ..")
// time.Sleep(duration)
go NewUpload("yaf", fileName, target, dl.TwitchClient, dl.Log)
}
func (dl *Downloader) KappaDownload(target, link string) {
goutubedl.Path = "yt-dlp"
dl.TwitchClient.Say(target, "Downloading... dankCircle")
result, err := goutubedl.New(context.Background(), link, goutubedl.Options{})
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
rExt := result.Info.Ext
downloadResult, err := result.Download(context.Background(), "best")
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
dl.TwitchClient.Say(target, "Downloaded.")
uuidFilename, err := uuid.NewUUID()
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
fileName := fmt.Sprintf("%s.%s", uuidFilename, rExt)
f, err := os.Create(fileName)
dl.TwitchClient.Say(target, fmt.Sprintf("Filename: %s", fileName))
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
defer f.Close()
if _, err = io.Copy(f, downloadResult); err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 20:21:23 +02:00
}
downloadResult.Close()
f.Close()
// duration := 5 * time.Second
// dl.twitchClient.Say(target, "ResidentSleeper ..")
// time.Sleep(duration)
go NewUpload("kappa", fileName, target, dl.TwitchClient, dl.Log)
}
func (dl *Downloader) GofileDownload(target, link string) {
goutubedl.Path = "yt-dlp"
dl.TwitchClient.Say(target, "Downloading... dankCircle")
2023-10-03 17:23:52 +02:00
result, err := goutubedl.New(context.Background(), link, goutubedl.Options{})
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
2023-10-05 20:40:09 +02:00
safeFilename := fmt.Sprintf("download_%s", result.Info.Title)
rExt := result.Info.Ext
2023-10-03 17:23:52 +02:00
downloadResult, err := result.Download(context.Background(), "best")
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
2023-10-05 19:33:07 +02:00
dl.TwitchClient.Say(target, "Downloaded.")
2023-10-05 20:40:09 +02:00
fileName := fmt.Sprintf("%s.%s", safeFilename, rExt)
2023-10-05 19:33:07 +02:00
f, err := os.Create(fileName)
dl.TwitchClient.Say(target, fmt.Sprintf("Filename: %s", fileName))
2023-10-03 17:23:52 +02:00
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
defer f.Close()
if _, err = io.Copy(f, downloadResult); err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
downloadResult.Close()
f.Close()
2023-10-05 11:58:19 +02:00
// duration := 5 * time.Second
// dl.twitchClient.Say(target, "ResidentSleeper ..")
// time.Sleep(duration)
2023-10-03 17:23:52 +02:00
2023-10-05 20:21:23 +02:00
go NewUpload("gofile", fileName, target, dl.TwitchClient, dl.Log)
2023-10-03 17:23:52 +02:00
}
2023-10-05 19:33:07 +02:00
func (dl *Downloader) CatboxDownload(target, link string) {
goutubedl.Path = "yt-dlp"
var fileName string
dl.TwitchClient.Say(target, "Downloading... dankCircle")
result, err := goutubedl.New(context.Background(), link, goutubedl.Options{})
2023-10-03 17:23:52 +02:00
if err != nil {
2023-10-05 19:33:07 +02:00
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
2023-10-05 19:33:07 +02:00
// I don't know why but I need to set it to mp4, otherwise if
// I use `result.Into.Ext` catbox won't play the video in the
// browser and say this message:
// `No video with supported format and MIME type found.`
rExt := "mp4"
downloadResult, err := result.Download(context.Background(), "best")
if err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 11:58:19 +02:00
}
2023-10-05 19:33:07 +02:00
dl.TwitchClient.Say(target, "Downloaded.")
uuidFilename, err := uuid.NewUUID()
2023-10-03 17:23:52 +02:00
if err != nil {
2023-10-05 19:33:07 +02:00
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
2023-10-05 19:33:07 +02:00
fileName = fmt.Sprintf("%s.%s", uuidFilename, rExt)
f, err := os.Create(fileName)
dl.TwitchClient.Say(target, fmt.Sprintf("Filename: %s", fileName))
2023-10-03 17:23:52 +02:00
if err != nil {
2023-10-05 19:33:07 +02:00
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-05 19:33:07 +02:00
}
defer f.Close()
if _, err = io.Copy(f, downloadResult); err != nil {
dl.Log.Errorln(err)
2023-10-05 20:40:09 +02:00
dl.TwitchClient.Say(target, fmt.Sprintf("Something went wrong FeelsBadMan: %q", err))
return
2023-10-03 17:23:52 +02:00
}
2023-10-05 19:33:07 +02:00
downloadResult.Close()
f.Close()
2023-10-03 17:23:52 +02:00
2023-10-05 19:33:07 +02:00
go NewUpload("catbox", fileName, target, dl.TwitchClient, dl.Log)
2023-10-03 17:23:52 +02:00
}