2020-10-20 23:25:34 +02:00
/ * *
* @ name ForceImagePreviews
2021-03-05 13:26:41 +01:00
* @ author DevilBro
2020-10-20 23:25:34 +02:00
* @ authorId 278543574059057154
2021-03-05 13:26:41 +01:00
* @ version 1.2 . 0
* @ description Forces unrendered embedded Image Previews to render . Caution : Externals Images can contain malicious code and reveal your IP !
2020-10-20 23:25:34 +02:00
* @ invite Jx3TjNS
2020-11-19 16:45:36 +01:00
* @ donate https : //www.paypal.me/MircoWittrien
* @ patreon https : //www.patreon.com/MircoWittrien
2021-03-09 15:10:55 +01:00
* @ website https : //mwittrien.github.io/
* @ source https : //github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/ForceImagePreviews/
2021-03-10 09:17:37 +01:00
* @ updateUrl https : //mwittrien.github.io/BetterDiscordAddons/Plugins/ForceImagePreviews/ForceImagePreviews.plugin.js
2020-10-20 23:25:34 +02:00
* /
2018-10-11 10:21:26 +02:00
2020-09-19 20:49:33 +02:00
module . exports = ( _ => {
2020-10-09 21:09:35 +02:00
const config = {
2020-09-19 20:49:33 +02:00
"info" : {
"name" : "ForceImagePreviews" ,
"author" : "DevilBro" ,
"version" : "1.2.0" ,
2021-03-04 12:15:46 +01:00
"description" : "Forces unrendered embedded Image Previews to render. Caution: Externals Images can contain malicious code and reveal your IP!"
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
} ;
2020-11-13 19:47:44 +01:00
2021-08-11 17:33:29 +02:00
return ( window . Lightcord && ! Node . prototype . isPrototypeOf ( window . Lightcord ) || window . LightCord && ! Node . prototype . isPrototypeOf ( window . LightCord ) ) ? class {
2021-06-15 13:42:02 +02:00
getName ( ) { return config . info . name ; }
getAuthor ( ) { return config . info . author ; }
getVersion ( ) { return config . info . version ; }
getDescription ( ) { return "Do not use LightCord!" ; }
load ( ) { BdApi . alert ( "Attention!" , "By using LightCord you are risking your Discord Account, due to using a 3rd Party Client. Switch to an official Discord Client (https://discord.com/) with the proper BD Injection (https://betterdiscord.app/)" ) ; }
start ( ) { }
stop ( ) { }
} : ! window . BDFDB _Global || ( ! window . BDFDB _Global . loaded && ! window . BDFDB _Global . started ) ? class {
2021-01-06 12:38:36 +01:00
getName ( ) { return config . info . name ; }
getAuthor ( ) { return config . info . author ; }
getVersion ( ) { return config . info . version ; }
2021-02-01 17:13:13 +01:00
getDescription ( ) { return ` The Library Plugin needed for ${ config . info . name } is missing. Open the Plugin Settings to download it. \n \n ${ config . info . description } ` ; }
downloadLibrary ( ) {
require ( "request" ) . get ( "https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js" , ( e , r , b ) => {
2021-03-05 13:14:18 +01:00
if ( ! e && b && r . statusCode == 200 ) require ( "fs" ) . writeFile ( require ( "path" ) . join ( BdApi . Plugins . folder , "0BDFDB.plugin.js" ) , b , _ => BdApi . showToast ( "Finished downloading BDFDB Library" , { type : "success" } ) ) ;
2021-03-06 14:59:48 +01:00
else BdApi . alert ( "Error" , "Could not download BDFDB Library Plugin. Try again later or download it manually from GitHub: https://mwittrien.github.io/downloader/?library" ) ;
2021-02-01 17:13:13 +01:00
} ) ;
}
2020-08-25 22:50:57 +02:00
2021-01-06 12:38:36 +01:00
load ( ) {
2020-11-19 16:51:14 +01:00
if ( ! window . BDFDB _Global || ! Array . isArray ( window . BDFDB _Global . pluginQueue ) ) window . BDFDB _Global = Object . assign ( { } , window . BDFDB _Global , { pluginQueue : [ ] } ) ;
2020-09-19 20:49:33 +02:00
if ( ! window . BDFDB _Global . downloadModal ) {
window . BDFDB _Global . downloadModal = true ;
2021-01-14 16:14:44 +01:00
BdApi . showConfirmationModal ( "Library Missing" , ` The Library Plugin needed for ${ config . info . name } is missing. Please click "Download Now" to install it. ` , {
2020-09-19 20:49:33 +02:00
confirmText : "Download Now" ,
cancelText : "Cancel" ,
onCancel : _ => { delete window . BDFDB _Global . downloadModal ; } ,
2020-09-20 08:15:13 +02:00
onConfirm : _ => {
delete window . BDFDB _Global . downloadModal ;
2021-02-01 17:13:13 +01:00
this . downloadLibrary ( ) ;
2020-09-20 08:15:13 +02:00
}
2020-09-19 20:49:33 +02:00
} ) ;
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
if ( ! window . BDFDB _Global . pluginQueue . includes ( config . info . name ) ) window . BDFDB _Global . pluginQueue . push ( config . info . name ) ;
2020-10-09 21:09:35 +02:00
}
2021-01-06 12:38:36 +01:00
start ( ) { this . load ( ) ; }
stop ( ) { }
getSettingsPanel ( ) {
2020-11-28 23:12:09 +01:00
let template = document . createElement ( "template" ) ;
2021-01-14 16:14:44 +01:00
template . innerHTML = ` <div style="color: var(--header-primary); font-size: 16px; font-weight: 300; white-space: pre; line-height: 22px;">The Library Plugin needed for ${ config . info . name } is missing. \n Please click <a style="font-weight: 500;">Download Now</a> to install it.</div> ` ;
2021-02-01 17:13:13 +01:00
template . content . firstElementChild . querySelector ( "a" ) . addEventListener ( "click" , this . downloadLibrary ) ;
2020-11-28 23:12:09 +01:00
return template . content . firstElementChild ;
}
2020-10-09 21:09:35 +02:00
} : ( ( [ Plugin , BDFDB ] ) => {
2020-09-19 20:49:33 +02:00
var loadedEmbeds , requestedEmbeds ;
2020-10-09 21:09:35 +02:00
return class ForceImagePreviews extends Plugin {
2021-01-06 12:38:36 +01:00
onLoad ( ) {
2020-09-19 20:49:33 +02:00
loadedEmbeds = { } ;
requestedEmbeds = [ ] ;
2020-02-04 08:20:40 +01:00
2020-09-19 20:49:33 +02:00
this . patchedModules = {
before : {
SimpleMessageAccessories : "default"
}
} ;
}
2021-01-06 12:38:36 +01:00
onStart ( ) {
2020-09-11 19:31:36 +02:00
BDFDB . PatchUtils . forceAllUpdates ( this ) ;
2020-03-16 11:01:36 +01:00
BDFDB . MessageUtils . rerenderAll ( ) ;
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
2021-01-06 12:38:36 +01:00
onStop ( ) {
2020-09-11 19:31:36 +02:00
BDFDB . PatchUtils . forceAllUpdates ( this ) ;
2020-03-16 11:01:36 +01:00
BDFDB . MessageUtils . rerenderAll ( ) ;
2020-02-04 08:20:40 +01:00
}
2020-09-19 20:49:33 +02:00
processSimpleMessageAccessories ( e ) {
if ( e . instance . props . message && e . instance . props . message . content ) {
let message = new BDFDB . DiscordObjects . Message ( e . instance . props . message ) ;
2020-11-19 16:45:36 +01:00
for ( let link of e . instance . props . message . content . split ( /\n|\s|\r|\t|\0/g ) ) if ( link . indexOf ( "https://" ) > - 1 || link . indexOf ( "http://" ) > - 1 ) {
2020-09-19 20:49:33 +02:00
link = link . indexOf ( "<" ) == 0 && link . indexOf ( ">" ) == link . length - 1 ? link . slice ( 1 , - 1 ) : link ;
if ( ! this . isEmbedded ( message . embeds , link ) ) {
if ( ! requestedEmbeds . includes ( link ) ) {
requestedEmbeds . push ( link ) ;
BDFDB . LibraryRequires . request ( link , ( error , response , result ) => {
if ( response && response . headers [ "content-type" ] && response . headers [ "content-type" ] . indexOf ( "image" ) > - 1 ) {
let imageThrowaway = document . createElement ( "img" ) ;
imageThrowaway . src = link ;
imageThrowaway . onload = _ => {
if ( ! this . isEmbedded ( message . embeds , link ) ) {
loadedEmbeds [ link ] = {
image : {
url : link ,
proxyURL : link ,
height : imageThrowaway . naturalHeight ,
width : imageThrowaway . naturalWidth
} ,
type : "image" ,
url : link
} ;
message . embeds . push ( loadedEmbeds [ link ] ) ;
BDFDB . ReactUtils . forceUpdate ( e . instance ) ;
}
} ;
}
else if ( response && response . headers [ "server" ] && response . headers [ "server" ] . toLowerCase ( ) . indexOf ( "youtube" ) > - 1 && result . indexOf ( "yt-user-info" ) > - 1 ) {
2020-08-25 22:50:57 +02:00
if ( ! this . isEmbedded ( message . embeds , link ) ) {
2020-09-19 20:49:33 +02:00
result = result . replace ( /[\r|\n|\t]|[\s]{2,}/g , "" ) ;
let width = result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<meta itemprop="width" content="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ;
let height = result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<meta itemprop="height" content="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ;
let thumbnail = result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<link itemprop="thumbnailUrl" href="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ;
2020-08-25 22:50:57 +02:00
loadedEmbeds [ link ] = {
2020-09-19 20:49:33 +02:00
author : {
name : result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<div class="yt-user-info"><a href="' ) , "i" ) ) [ 1 ] . split ( '>' ) [ 1 ] . split ( '<' ) [ 0 ] ,
2020-11-19 16:45:36 +01:00
url : ` https://www.youtube.com ${ result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<div class="yt-user-info"><a href="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] } `
2020-09-19 20:49:33 +02:00
} ,
color : "#ff0000" ,
provider : {
name : "YouTube" ,
2020-11-19 16:45:36 +01:00
url : "https://www.youtube.com/"
2020-09-19 20:49:33 +02:00
} ,
2020-11-19 16:51:14 +01:00
rawDescription : result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<meta property="og: description" content="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ,
rawTitle : result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<meta property="og: title" content="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ,
2020-09-19 20:49:33 +02:00
thumbnail : {
url : thumbnail ,
proxyURL : thumbnail ,
width : width ,
height : height
2020-08-25 22:50:57 +02:00
} ,
2020-09-19 20:49:33 +02:00
type : "video" ,
url : link ,
video : {
url : result . split ( new RegExp ( BDFDB . StringUtils . regEscape ( '<link itemprop="embedUrl" href="' ) , "i" ) ) [ 1 ] . split ( '"' ) [ 0 ] ,
width : width ,
height : height
}
2020-08-25 22:50:57 +02:00
} ;
message . embeds . push ( loadedEmbeds [ link ] ) ;
BDFDB . ReactUtils . forceUpdate ( e . instance ) ;
}
}
2020-09-19 20:49:33 +02:00
} ) ;
}
else if ( loadedEmbeds [ link ] ) message . embeds . push ( loadedEmbeds [ link ] ) ;
2020-02-04 08:20:40 +01:00
}
2018-10-11 10:21:26 +02:00
}
2020-09-19 20:49:33 +02:00
e . instance . props . message = message ;
2018-10-11 10:21:26 +02:00
}
2020-03-17 08:58:51 +01:00
}
2020-09-19 20:49:33 +02:00
isEmbedded ( embeds , link ) {
if ( link . indexOf ( "youtube." ) > - 1 || link . indexOf ( "youtu.be" ) > - 1 ) {
let videoId = ( link . split ( "watch?v=" ) [ 1 ] || link . split ( "?" ) [ 0 ] . split ( "/" ) . pop ( ) || "" ) . split ( "&" ) . shift ( ) ;
if ( videoId ) for ( let embed of embeds ) if ( embed . url == link || embed . video && embed . url . indexOf ( videoId ) > - 1 ) return true ;
}
else {
for ( let embed of embeds ) if ( embed . url == link || embed . image && embed . image . url == link ) return true ;
}
return false ;
2020-03-17 08:58:51 +01:00
}
2020-09-19 20:49:33 +02:00
} ;
2020-10-09 21:09:35 +02:00
} ) ( window . BDFDB _Global . PluginUtils . buildPlugin ( config ) ) ;
2020-09-19 20:49:33 +02:00
} ) ( ) ;