2020-04-14 18:27:51 +02:00
//META{"name":"DisplayLargeMessages","authorId":"278543574059057154","invite":"Jx3TjNS","donate":"https://www.paypal.me/MircoWittrien","patreon":"https://www.patreon.com/MircoWittrien","website":"https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/DisplayLargeMessages","source":"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Plugins/DisplayLargeMessages/DisplayLargeMessages.plugin.js"}*//
var DisplayLargeMessages = ( _ => {
2020-05-23 11:45:38 +02:00
var encodedMessages , requestedMessages , oldMessages , updateTimeout ;
2020-04-14 18:27:51 +02:00
return class DisplayLargeMessages {
getName ( ) { return "DisplayLargeMessages" ; }
2020-05-23 13:21:27 +02:00
getVersion ( ) { return "1.0.4" ; }
2020-04-14 18:27:51 +02:00
getAuthor ( ) { return "DevilBro" ; }
getDescription ( ) { return "Injects the contents of large messages that were sent by discord via 'message.txt'." ; }
constructor ( ) {
2020-04-19 14:01:52 +02:00
this . changelog = {
2020-05-23 11:45:38 +02:00
"added" : [ [ "Remove injection" , "You can now revert the on-demand injection after you clicked the inject button in the attachment, via clicking the newly loaded message and choosing 'unload'" ] ]
2020-04-19 14:01:52 +02:00
} ;
2020-04-14 18:27:51 +02:00
this . patchedModules = {
2020-04-19 14:01:52 +02:00
before : {
Messages : "render" ,
} ,
2020-04-14 18:27:51 +02:00
after : {
2020-04-19 14:01:52 +02:00
Attachment : "default"
2020-04-14 18:27:51 +02:00
}
} ;
}
initConstructor ( ) {
encodedMessages = { } ;
2020-04-19 14:01:52 +02:00
requestedMessages = [ ] ;
2020-05-23 11:45:38 +02:00
oldMessages = { } ;
2020-04-19 14:01:52 +02:00
this . css = `
$ { BDFDB . dotCN . _displaylargemessagesinjectbutton } {
2020-05-23 11:45:38 +02:00
color : var ( -- interactive - normal ) ;
2020-04-19 14:01:52 +02:00
cursor : pointer ;
margin - left : 4 px ;
}
$ { BDFDB . dotCN . _displaylargemessagesinjectbutton } : hover {
2020-05-23 11:45:38 +02:00
color : var ( -- interactive - hover ) ;
2020-04-19 14:01:52 +02:00
} ` ;
this . defaults = {
settings : {
onDemand : { value : false , description : "Inject the content of 'message.txt' on demand instead of automatically" }
} ,
amounts : {
maxFileSize : { value : 10 , min : 0 , description : "Max Filesize a fill will be read automatically" , note : "in KB / 0 = inject all / ignored in On-Demand" }
}
} ;
}
getSettingsPanel ( collapseStates = { } ) {
if ( ! window . BDFDB || typeof BDFDB != "object" || ! BDFDB . loaded || ! this . started ) return ;
let settings = BDFDB . DataUtils . get ( this , "settings" ) ;
let amounts = BDFDB . DataUtils . get ( this , "amounts" ) ;
let settingsPanel , settingsItems = [ ] ;
for ( let key in settings ) settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
className : BDFDB . disCN . marginbottom8 ,
type : "Switch" ,
plugin : this ,
keys : [ "settings" , key ] ,
label : this . defaults . settings [ key ] . description ,
value : settings [ key ] ,
onChange : _ => {
if ( key == "onDemand" ) BDFDB . PluginUtils . refreshSettingsPanel ( this , settingsPanel , collapseStates ) ;
}
} ) ) ;
for ( let key in amounts ) settingsItems . push ( BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SettingsSaveItem , {
className : BDFDB . disCN . marginbottom8 ,
type : "TextInput" ,
childProps : {
type : "number"
} ,
plugin : this ,
keys : [ "amounts" , key ] ,
disabled : key == "maxFileSize" && settings . onDemand ,
label : this . defaults . amounts [ key ] . description ,
note : this . defaults . amounts [ key ] . note ,
basis : "20%" ,
min : this . defaults . amounts [ key ] . min ,
max : this . defaults . amounts [ key ] . max ,
value : amounts [ key ]
} ) ) ;
return settingsPanel = BDFDB . PluginUtils . createSettingsPanel ( this , settingsItems ) ;
2020-04-14 18:27:51 +02:00
}
// Legacy
load ( ) { }
start ( ) {
if ( ! window . BDFDB ) window . BDFDB = { myPlugins : { } } ;
if ( window . BDFDB && window . BDFDB . myPlugins && typeof window . BDFDB . myPlugins == "object" ) window . BDFDB . myPlugins [ this . getName ( ) ] = this ;
let libraryScript = document . querySelector ( "head script#BDFDBLibraryScript" ) ;
if ( ! libraryScript || ( performance . now ( ) - libraryScript . getAttribute ( "date" ) ) > 600000 ) {
if ( libraryScript ) libraryScript . remove ( ) ;
libraryScript = document . createElement ( "script" ) ;
libraryScript . setAttribute ( "id" , "BDFDBLibraryScript" ) ;
libraryScript . setAttribute ( "type" , "text/javascript" ) ;
libraryScript . setAttribute ( "src" , "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.min.js" ) ;
libraryScript . setAttribute ( "date" , performance . now ( ) ) ;
libraryScript . addEventListener ( "load" , _ => { this . initialize ( ) ; } ) ;
document . head . appendChild ( libraryScript ) ;
}
else if ( window . BDFDB && typeof BDFDB === "object" && BDFDB . loaded ) this . initialize ( ) ;
this . startTimeout = setTimeout ( _ => {
try { return this . initialize ( ) ; }
catch ( err ) { console . error ( ` %c[ ${ this . getName ( ) } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "Fatal Error: Could not initiate plugin! " + err ) ; }
} , 30000 ) ;
}
initialize ( ) {
if ( window . BDFDB && typeof BDFDB === "object" && BDFDB . loaded ) {
if ( this . started ) return ;
BDFDB . PluginUtils . init ( this ) ;
2020-04-19 14:01:52 +02:00
BDFDB . ModuleUtils . patch ( this , BDFDB . LibraryModules . MessageUtils , "startEditMessage" , { before : e => {
let encodedContent = encodedMessages [ e . methodArguments [ 1 ] ] ;
if ( encodedContent != null ) e . methodArguments [ 2 ] = encodedContent . content ;
} } ) ;
BDFDB . ModuleUtils . patch ( this , BDFDB . LibraryModules . MessageUtils , "editMessage" , { before : e => {
let encodedContent = encodedMessages [ e . methodArguments [ 1 ] ] ;
2020-05-23 11:45:38 +02:00
let oldMessage = oldMessages [ e . methodArguments [ 1 ] ] ;
2020-04-19 14:01:52 +02:00
if ( encodedContent != null ) encodedContent . content = e . methodArguments [ 2 ] . content ;
2020-05-23 11:45:38 +02:00
if ( oldMessage != null ) oldMessage . content = e . methodArguments [ 2 ] . content ;
2020-04-19 14:01:52 +02:00
} } ) ;
2020-04-14 18:27:51 +02:00
2020-04-19 14:01:52 +02:00
this . forceUpdateAll ( ) ;
2020-04-14 18:27:51 +02:00
}
else console . error ( ` %c[ ${ this . getName ( ) } ]%c ` , "color: #3a71c1; font-weight: 700;" , "" , "Fatal Error: Could not load BD functions!" ) ;
}
stop ( ) {
if ( window . BDFDB && typeof BDFDB === "object" && BDFDB . loaded ) {
this . stopping = true ;
2020-04-19 14:01:52 +02:00
this . forceUpdateAll ( ) ;
2020-04-14 18:27:51 +02:00
BDFDB . PluginUtils . clear ( this ) ;
}
}
// Begin of own functions
2020-04-19 14:01:52 +02:00
onSettingsClosed ( ) {
if ( this . SettingsUpdated ) {
delete this . SettingsUpdated ;
encodedMessages = { } ;
requestedMessages = [ ] ;
this . forceUpdateAll ( ) ;
}
}
2020-05-23 11:45:38 +02:00
onMessageContextMenu ( e ) {
if ( e . instance . props . message && ! requestedMessages . includes ( e . instance . props . message . id ) ) {
let encodedContent = encodedMessages [ e . instance . props . message . id ] ;
if ( encodedContent ) {
let [ children , index ] = BDFDB . ContextMenuUtils . findItem ( e . returnvalue , { id : "devmode-copy-id" , group : true } ) ;
children . splice ( index > - 1 ? index : 0 , 0 , BDFDB . ContextMenuUtils . createItem ( BDFDB . LibraryComponents . MenuItems . MenuGroup , {
children : BDFDB . ContextMenuUtils . createItem ( BDFDB . LibraryComponents . MenuItems . MenuItem , {
label : this . labels . context _uninjectattchment _text ,
id : BDFDB . ContextMenuUtils . createItemId ( this . name , "uninject-attachment" ) ,
action : _ => {
BDFDB . ContextMenuUtils . close ( e . instance ) ;
delete encodedMessages [ e . instance . props . message . id ] ;
BDFDB . ModuleUtils . forceAllUpdates ( this , [ "Messages" , "Attachment" ] ) ;
}
} )
} ) ) ;
}
}
}
2020-04-14 18:27:51 +02:00
processMessages ( e ) {
2020-04-19 14:01:52 +02:00
let settings = BDFDB . DataUtils . get ( this , "settings" ) ;
let amounts = BDFDB . DataUtils . get ( this , "amounts" ) ;
2020-05-23 11:45:38 +02:00
e . instance . props . channelStream = [ ] . concat ( e . instance . props . channelStream ) ;
for ( let i in e . instance . props . channelStream ) {
let message = e . instance . props . channelStream [ i ] . content ;
if ( message ) {
2020-05-23 14:00:14 +02:00
if ( BDFDB . ArrayUtils . is ( message . attachments ) ) this . checkMessage ( e . instance , e . instance . props . channelStream [ i ] , message , settings , amounts ) ;
else if ( BDFDB . ArrayUtils . is ( message ) ) for ( let j in message ) {
let childMessage = message [ j ] . content ;
if ( childMessage && BDFDB . ArrayUtils . is ( childMessage . attachments ) ) this . checkMessage ( e . instance , message [ j ] , childMessage , settings , amounts ) ;
2020-04-19 14:01:52 +02:00
}
2020-04-14 18:27:51 +02:00
}
}
}
2020-04-19 14:01:52 +02:00
2020-05-23 14:00:14 +02:00
checkMessage ( instance , stream , message , settings , amounts ) {
let encodedContent = encodedMessages [ message . id ] ;
if ( encodedContent != null ) {
if ( message . content . indexOf ( encodedContent . attachment ) == - 1 ) {
stream . content . content = ( message . content && ( message . content + "\n\n" ) || "" ) + encodedContent . attachment ;
stream . content . attachments = message . attachments . filter ( n => n . filename != "message.txt" ) ;
}
}
else if ( oldMessages [ message . id ] && Object . keys ( message ) . some ( key => ! BDFDB . equals ( oldMessages [ message . id ] [ key ] , message [ key ] ) ) ) {
stream . content . content = oldMessages [ message . id ] . content ;
stream . content . attachments = oldMessages [ message . id ] . attachments ;
delete oldMessages [ message . id ] ;
}
else if ( ! settings . onDemand && ! requestedMessages . includes ( message . id ) ) for ( let attachment of message . attachments ) {
if ( attachment . filename == "message.txt" && ( ! amounts . maxFileSize || ( amounts . maxFileSize >= attachment . size / 1024 ) ) ) {
requestedMessages . push ( message . id ) ;
BDFDB . LibraryRequires . request ( attachment . url , ( error , response , body ) => {
encodedMessages [ message . id ] = {
content : message . content || "" ,
attachment : body || ""
} ;
BDFDB . TimeUtils . clear ( updateTimeout ) ;
updateTimeout = BDFDB . TimeUtils . timeout ( _ => { BDFDB . ReactUtils . forceUpdate ( instance ) ; } , 1000 ) ;
} ) ;
}
}
}
2020-04-19 14:01:52 +02:00
processAttachment ( e ) {
if ( e . instance . props . filename == "message.txt" ) {
let settings = BDFDB . DataUtils . get ( this , "settings" ) ;
let amounts = BDFDB . DataUtils . get ( this , "amounts" ) ;
if ( settings . onDemand || amounts . maxFileSize && ( amounts . maxFileSize < e . instance . props . size / 1024 ) ) e . returnvalue . props . children . splice ( 2 , 0 , BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . TooltipContainer , {
2020-05-23 11:45:38 +02:00
text : this . labels . button _injectattchment _text ,
2020-04-19 14:01:52 +02:00
children : BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . Anchor , {
rel : "noreferrer noopener" ,
target : "_blank" ,
children : BDFDB . ReactUtils . createElement ( BDFDB . LibraryComponents . SvgIcon , {
className : BDFDB . disCN . _displaylargemessagesinjectbutton ,
2020-04-19 14:48:46 +02:00
name : BDFDB . LibraryComponents . SvgIcon . Names . RAW _TEXT ,
width : 20 ,
height : 20
2020-04-19 14:01:52 +02:00
} ) ,
onClick : event => {
BDFDB . ListenerUtils . stopEvent ( event ) ;
2020-04-19 14:48:46 +02:00
let target = event . target ;
let message = BDFDB . ReactUtils . findValue ( target , "message" , { up : true } ) ;
2020-04-19 14:01:52 +02:00
if ( message ) BDFDB . LibraryRequires . request ( e . instance . props . url , ( error , response , body ) => {
2020-05-23 11:45:38 +02:00
oldMessages [ message . id ] = new BDFDB . DiscordObjects . Message ( message ) ;
2020-04-19 14:01:52 +02:00
encodedMessages [ message . id ] = {
content : message . content || "" ,
attachment : body || ""
} ;
2020-05-23 11:45:38 +02:00
BDFDB . ModuleUtils . forceAllUpdates ( this , "Messages" ) ;
2020-04-19 14:01:52 +02:00
} ) ;
}
} )
} ) ) ;
}
}
forceUpdateAll ( ) {
BDFDB . ModuleUtils . forceAllUpdates ( this ) ;
BDFDB . MessageUtils . rerenderAll ( ) ;
}
2020-05-23 11:45:38 +02:00
setLabelsByLanguage ( ) {
switch ( BDFDB . LanguageUtils . getLanguage ( ) . id ) {
case "hr" : //croatian
return {
context _uninjectattchment _text : "Uklonite učitani sadržaj poruke" ,
button _injectattchment _text : "Učitajte sadržaj poruke"
} ;
case "da" : //danish
return {
context _uninjectattchment _text : "Fjern indlæst meddelelsesindhold" ,
button _injectattchment _text : "Indlæs meddelelsesindhold"
} ;
case "de" : //german
return {
context _uninjectattchment _text : "Geladenen Nachrichteninhalt entfernen" ,
button _injectattchment _text : "Nachrichteninhalt laden"
} ;
case "es" : //spanish
return {
context _uninjectattchment _text : "Eliminar contenido del mensaje cargado" ,
button _injectattchment _text : "Cargar contenido del mensaje"
} ;
case "fr" : //french
return {
context _uninjectattchment _text : "Supprimer le contenu du message chargé" ,
button _injectattchment _text : "Charger le contenu du message"
} ;
case "it" : //italian
return {
context _uninjectattchment _text : "Rimuovi il contenuto del messaggio caricato" ,
button _injectattchment _text : "Carica il contenuto del messaggio"
} ;
case "nl" : //dutch
return {
context _uninjectattchment _text : "Verwijder geladen berichtinhoud" ,
button _injectattchment _text : "Laad berichtinhoud"
} ;
case "no" : //norwegian
return {
context _uninjectattchment _text : "Fjern lastet meldingens innhold" ,
button _injectattchment _text : "Last inn meldingens innhold"
} ;
case "pl" : //polish
return {
context _uninjectattchment _text : "Usuń załadowaną treść wiadomości" ,
button _injectattchment _text : "Załaduj treść wiadomości"
} ;
case "pt-BR" : //portuguese (brazil)
return {
context _uninjectattchment _text : "Remover o conteúdo da mensagem carregada" ,
button _injectattchment _text : "Carregar conteúdo da mensagem"
} ;
case "fi" : //finnish
return {
context _uninjectattchment _text : "Poista ladattu viestin sisältö" ,
button _injectattchment _text : "Lataa viestin sisältö"
} ;
case "sv" : //swedish
return {
context _uninjectattchment _text : "Ta bort laddat meddelandeinnehåll" ,
button _injectattchment _text : "Ladda meddelandets innehåll"
} ;
case "tr" : //turkish
return {
context _uninjectattchment _text : "Yüklenen mesaj içeriğini kaldı r" ,
button _injectattchment _text : "Mesaj içeriğini yükle"
} ;
case "cs" : //czech
return {
context _uninjectattchment _text : "Odebrat načtený obsah zprávy" ,
button _injectattchment _text : "Načíst obsah zprávy"
} ;
case "bg" : //bulgarian
return {
context _uninjectattchment _text : "Премахнете зареденото съдържание на съобщението" ,
button _injectattchment _text : "Заредете съдържание на съобщението"
} ;
case "ru" : //russian
return {
context _uninjectattchment _text : "Удалить загруженное содержимое сообщения" ,
button _injectattchment _text : "Загрузить содержимое сообщения"
} ;
case "uk" : //ukrainian
return {
context _uninjectattchment _text : "Видаліть завантажений вміст повідомлення" ,
button _injectattchment _text : "Завантажте вміст повідомлення"
} ;
case "ja" : //japanese
return {
context _uninjectattchment _text : "ロードされたメッセージコンテンツを削除する" ,
button _injectattchment _text : "メッセージの内容を読み込む"
} ;
case "zh-TW" : //chinese (traditional)
return {
context _uninjectattchment _text : "刪除已加載的郵件內容" ,
button _injectattchment _text : "加載消息內容"
} ;
case "ko" : //korean
return {
context _uninjectattchment _text : "로드 된 메시지 내용 제거" ,
button _injectattchment _text : "메시지 내용로드"
} ;
default : //default: english
return {
context _uninjectattchment _text : "Remove loaded message content" ,
button _injectattchment _text : "Load message content"
} ;
}
}
2020-04-14 18:27:51 +02:00
}
} ) ( ) ;