2020-05-16 23:24:51 +02:00
const ModuleLoader = require ( "./loaders/modules" )
const { EventEmitter } = require ( "events" )
const Logger = require ( "./Logger" )
const fs = require ( "fs" )
const path = require ( "path" )
2020-05-20 21:37:39 +02:00
const electron = require ( "electron" )
2020-05-16 23:24:51 +02:00
const events = exports . events = new EventEmitter ( )
const logger = exports . logger = new Logger ( "LightCord" )
let hasInit = false
let tries = 0
exports . init = function ( ) {
if ( hasInit == true ) {
console . warn ( new Error ( "LightCord has already inited." ) )
return
}
hasInit = true
let readyInterval = setInterval ( ( ) => {
events . emit ( "debug" , ` [INIT] try ${ tries ++ } loading LightCord ` )
try {
if ( ! global . webpackJsonp ) return
if ( ! ModuleLoader . get ( 4 ) ) return
clearInterval ( readyInterval )
privateInit ( )
. then ( ( ) => {
console . log ( "Finished loading Lightcord." )
} )
} catch ( e ) {
console . error ( e )
}
} , 100 )
}
let hasPrivateInit = false
async function privateInit ( ) {
if ( ! hasInit ) return
if ( hasPrivateInit ) return
hasPrivateInit = true
//disabling sentry
BDModules . get ( e => e . getCurrentHub ) [ 0 ] . getCurrentHub ( ) . getClient ( ) . getOptions ( ) . enabled = false
let original = BDModules . get ( ( e ) => e . createSound ) [ 0 ] . createSound
BDModules . get ( ( e ) => e . createSound ) [ 0 ] . createSound = function ( sound ) {
let isCalling = sound === "call_ringing_beat" || sound === "call_ringing"
if ( isCalling ) {
let returned = original ( ... arguments )
Object . defineProperty ( returned , "name" , {
get ( ) {
2020-05-21 00:34:31 +02:00
return window . Lightcord . Settings . callRingingBeat ? "call_ringing_beat" : "call_ringing"
2020-05-16 23:24:51 +02:00
} ,
set ( data ) {
console . log ( "Attempting to set call_ringing value. Canceling " + data )
}
} )
console . log ( returned )
return returned
} else {
return original ( ... arguments )
}
}
let constants = ModuleLoader . get ( m => m . API _HOST ) [ 0 ]
2020-05-21 00:34:31 +02:00
let dispatcher = ModuleLoader . get ( m => m . Dispatcher && m . default && m . default . dispatch ) [ 0 ] . default
2020-05-16 23:24:51 +02:00
require ( "../../../../../BetterDiscordApp/css/main.css" )
require ( "./lightcord.css" )
window . $ = window . jQuery = require ( "./jquery.min.js" )
require ( "./ace.js" )
if ( ! fs . existsSync ( BetterDiscordConfig . dataPath ) ) fs . mkdirSync ( BetterDiscordConfig . dataPath , { recursive : true } )
let pluginPath = path . join ( BetterDiscordConfig . dataPath , "plugins" )
let themePath = path . join ( BetterDiscordConfig . dataPath , "themes" )
console . log ( ` Plugins: ${ pluginPath } \n Themes: ${ themePath } ` )
if ( ! fs . existsSync ( pluginPath ) ) fs . mkdirSync ( pluginPath , { recursive : true } )
if ( ! fs . existsSync ( themePath ) ) fs . mkdirSync ( themePath , { recursive : true } )
// setting Discord Internal Developer Mode for developement and test purposes.
Object . defineProperty ( ModuleLoader . get ( e => e . default && typeof e . default === "object" && ( "isDeveloper" in e . default ) ) [ 0 ] . default , "isDeveloper" , {
2020-05-21 00:34:31 +02:00
get ( ) { return ! ! window . Lightcord . Settings . devMode } ,
set ( data ) { return ! ! window . Lightcord . Settings . devMode }
2020-05-16 23:24:51 +02:00
} )
2020-05-18 20:34:26 +02:00
await ensureGuildClasses ( )
2020-05-21 00:34:31 +02:00
const Discord = require ( "../../../../../DiscordJS/dist" )
window . Lightcord = {
DiscordModules : {
dispatcher ,
constants
} ,
Settings : {
devMode : false ,
callRingingBeat : true
}
}
2020-05-21 01:09:03 +02:00
const BetterDiscord = window . BetterDiscord = window . mainCore = new ( require ( "../../../../../BetterDiscordApp/js/main" ) . default ) ( BetterDiscordConfig )
BetterDiscord . init ( )
events . emit ( "ready" )
2020-05-16 23:24:51 +02:00
}
require . extensions [ ".css" ] = ( m , filename ) => {
let content = fs . readFileSync ( filename , "binary" )
let style = document . createElement ( "style" )
style . id = btoa ( filename )
style . innerText = content
document . head . appendChild ( style )
m . exports = {
id : style . id ,
remove ( ) {
return style . remove ( )
}
}
return m . exports
}
const BetterDiscordConfig = window . BetterDiscordConfig = {
2020-05-20 21:37:39 +02:00
"branch" : "lightcord" ,
2020-05-16 23:24:51 +02:00
dataPath : ( process . platform == "win32" ? process . env . APPDATA : process . platform == "darwin" ? process . env . HOME + "/Library/Preferences" : process . env . XDG _CONFIG _HOME ? process . env . XDG _CONFIG _HOME : process . env . HOME + "/.config" ) + "/LightCord_BD/" ,
2020-05-20 21:37:39 +02:00
os : process . platform ,
2020-05-21 00:34:31 +02:00
latestVersion : "0.3.4" ,
version : "0.3.4"
2020-05-16 23:24:51 +02:00
}
2020-05-18 20:34:26 +02:00
function ensureGuildClasses ( ) {
return new Promise ( ( resolve ) => {
let classs = getGuildClasses ( )
if ( classs && classs . wrapper ) return resolve ( )
let intergay = setInterval ( ( ) => {
classs = getGuildClasses ( )
if ( classs && classs . wrapper ) {
clearInterval ( intergay )
resolve ( )
return
}
} , 200 ) ;
} )
}
function getGuildClasses ( ) {
const guildsWrapper = BDModules . get ( e => e . wrapper && e . unreadMentionsBar ) [ 0 ] ;
const guilds = BDModules . get ( e => e . guildsError && e . selected ) [ 0 ]
const pill = BDModules . get ( e => e . blobContainer ) [ 0 ]
return Object . assign ( { } , guildsWrapper , guilds , pill ) ;
2020-05-20 21:37:39 +02:00
}
let originalResolve = path . resolve
path . resolve = ( ... args ) => {
args = args . map ( e => {
if ( e === "BetterDiscord/" ) return "LightCord_BD/" // replacing default directory of BetterDiscord plugins/themes by lightcord's directory. Open an issue if that's a problem.
return e
} )
return originalResolve . call ( path , ... args )
}
2020-05-21 00:34:31 +02:00
path . originalResolve = originalResolve
window . ohgodohfuck = function ( ) {
let style = document . createElement ( "style" ) ; style . innerHTML = ` html:after{content:"";position:absolute;top:0;left:0 ;width:100vw;height:100vh;background-image:url("https://media.giphy.com/media/l378vg4Pm9LGnmD6M/giphy.gif");background-size:cover;background-position:center;background-color:transparent !important;opacity:0.9;mix-blend-mode:hue;z-index:999999999999;pointer-events:none}@keyframes ohgodohfuck{from{transform:rotateZ(0deg)}to{transform:rotateZ(360deg)}}#app-mount{animation:ohgodohfuck 5s infinite alternate} ` ; document . body . append ( style ) ; setTimeout ( ( ) => document . body . removeChild ( style ) , 5000 ) ;
}