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
This commit is contained in:
Logan G 2022-07-17 17:07:01 -06:00
parent 97e0eaf46b
commit ab527bf7c6
Signed by: logan
GPG key ID: E328528C921E7A7A

81
main.go
View file

@ -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 {