From ab527bf7c619f8c69709d7c61b367f7cbfdf3116 Mon Sep 17 00:00:00 2001 From: Logan Gartner Date: Sun, 17 Jul 2022 17:07:01 -0600 Subject: [PATCH] Added URL replacer, bot now acts on nonvideo tweets, general fixes Bot now replaces Twitter links with Nitter links Fixed sending empty file when all video formats are too big Bot no longer throws error when checking to see if a tweet contains a video --- main.go | 81 ++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/main.go b/main.go index 068befe..b075788 100644 --- a/main.go +++ b/main.go @@ -7,9 +7,10 @@ import ( "os" "os/signal" "syscall" - "strings" + //"strings" "regexp" "context" + "net/http" "github.com/bwmarrin/discordgo" "github.com/wader/goutubedl" @@ -156,44 +157,70 @@ func messageCreate(session *discordgo.Session, message *discordgo.MessageCreate) if output, _ := regexp.MatchString("(http.*twitter.com/.*/status)|(http.*t.co/.*)", url); output { log.Println("Cringe twitter post detected.") + if shortned, _ := regexp.MatchString("http.*t.co/.*", url); shortned { + log.Println("Short URL detected. Getting long version.") + + request, _ := http.NewRequest("GET", url, nil) + + client := &http.Client{} + resp, err := client.Do(request) + if err != nil { + log.Println(err) + continue + } + + log.Printf("Found new URL: %s", resp.Request.URL.String()) + url = resp.Request.URL.String() + } + + response.Content = response.Content + regexp.MustCompile("https://twitter.com/").ReplaceAllString(url, "https://nitter.pussthecat.org/") + + goutubedl.Path = "yt-dlp" result, err := goutubedl.New(context.Background(), url, goutubedl.Options{}) if err != nil { + // Probably no videos in it, don't care - log.Println(err) + if noVideo, _ := regexp.MatchString(".*There's no video in this tweet.*", err.Error()); ! noVideo { + log.Println(err) + } + //session.ChannelMessageSend(message.ChannelID, err.Error()) continue - } + } else { + // Get rid of the stupid short URL that Shitter appends to everything + //response.Content = response.Content + fmt.Sprintf("\"%s\"\n", strings.Trim(regexp.MustCompile("https://t.co/.*").ReplaceAllString(result.Info.Description, ""), " ")) // Still ugly - // Get rid of the stupid short URL that Shitter appends to everything - response.Content = response.Content + fmt.Sprintf("\"%s\"\n", strings.Trim(regexp.MustCompile("https://t.co/.*").ReplaceAllString(result.Info.Description, ""), " ")) // Still ugly + var choice goutubedl.Format + for i := len(result.Formats())-1; i >= 0; i-- { + size := result.Formats()[i].FilesizeApprox + if size < 8*1024*1024 { + choice = result.Formats()[i] + log.Printf("Choice: %s | Size: %fM\n", choice.FormatID, size/1024/1024) + break + } + } - var choice goutubedl.Format - for i := len(result.Formats())-1; i >= 0; i-- { - size := result.Formats()[i].FilesizeApprox - if size < 8*1024*1024 { - choice = result.Formats()[i] - log.Printf("Choice: %s | Size: %fM\n", choice.FormatID, size/1024/1024) - break + + if len(choice.FormatID) > 0 { + downloadResult, err := result.Download(context.Background(), choice.FormatID) + if err != nil { + log.Println(err) + //session.ChannelMessageSend(message.ChannelID, err.Error()) + continue + } + + response.Files = append(response.Files, &discordgo.File { + Name: fmt.Sprintf("%s.%s", result.Info.ID, choice.Ext), + ContentType: "text/plain", // This is of course not true, but Discord doesn't give a shit + Reader: downloadResult, + }) + + defer downloadResult.Close() } } - downloadResult, err := result.Download(context.Background(), choice.FormatID) - if err != nil { - log.Println(err) - //session.ChannelMessageSend(message.ChannelID, err.Error()) - continue - } - - response.Files = append(response.Files, &discordgo.File { - Name: fmt.Sprintf("%s.%s", result.Info.ID, choice.Ext), - ContentType: "text/plain", // This is of course not true, but Discord doesn't give a shit - Reader: downloadResult, - }) - respond = true - - defer downloadResult.Close() } } if respond {