2018-04-22 03:46:11 +00:00
/ *
EndPwn Stage 2 Shared
Copyright 2018 EndPwn Project
Permission is hereby granted , free of charge , to any person obtaining a copy of this software and associated documentation files ( the "Software" ) , to deal in the Software without restriction , including without limitation the rights to use , copy , modify , merge , publish , distribute , sublicense , and / or sell copies of the Software , and to permit persons to whom the Software is furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED "AS IS" , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE .
https : //github.com/endpwn/
* /
2018-04-28 12:50:04 +00:00
function _ _epprint ( str ) {
console . log ( ` %c[EndPwn]%c ` + str , 'font-weight:bold;color:#0cc' , '' ) ;
}
2018-04-22 03:46:11 +00:00
( ( ) => {
// define this with a default value as a fallback
var _ _goodies = {
guilds : [ ] ,
bots : [ ] ,
users : { }
} ;
2018-04-22 15:59:10 +00:00
function fetchGoodies ( ) {
// fetch goodies.json
2018-05-08 00:09:17 +00:00
_ _epprint ( 'fetching endpwn cutomizer data from server...' ) ;
2018-04-22 15:59:10 +00:00
fetch ( 'https://endpwn.cathoderay.tube/goodies.json?_=' + Date . now ( ) )
. then ( x => x . json ( ) )
. then ( r => _ _goodies = r ) ;
}
2018-04-25 02:51:36 +00:00
2018-04-22 15:59:10 +00:00
// Fetch goodies now and every half hour
fetchGoodies ( ) ;
setInterval ( fetchGoodies , 1800000 ) ;
2018-04-22 03:46:11 +00:00
2018-04-22 04:05:47 +00:00
// early init payload
document . addEventListener ( 'ep-prepared' , ( ) => {
2018-04-28 12:50:04 +00:00
// disable that obnoxious warning about not pasting shit in the console
_ _epprint ( 'disabling self xss warning...' ) ;
$api . util . findFuncExports ( 'consoleWarning' ) . consoleWarning = e => { } ;
2018-04-28 13:58:23 +00:00
// fuck sentry
_ _epprint ( 'fucking sentry...' ) ;
2018-04-28 12:42:43 +00:00
var sentry = wc . findCache ( '_originalConsoleMethods' ) [ 0 ] . exports ;
window . console = Object . assign ( window . console , sentry . _originalConsoleMethods ) ; // console
sentry . _wrappedBuiltIns . forEach ( x => x [ 0 ] [ x [ 1 ] ] = x [ 2 ] ) ; // other stuff
2018-04-28 14:05:22 +00:00
sentry . _breadcrumbEventHandler = ( ) => ( ) => { } ; // break most event logging
sentry . captureBreadcrumb = ( ) => { } ; // disable breadcrumb logging
2018-04-28 12:20:35 +00:00
2018-04-22 04:05:47 +00:00
// fetch the changelog
2018-04-28 12:50:04 +00:00
_ _epprint ( 'injecting changelog...' ) ;
2018-04-22 04:05:47 +00:00
fetch ( 'https://endpwn.github.io/changelog.md?_=' + Date . now ( ) ) . then ( r => r . text ( ) ) . then ( l => {
2018-04-22 04:41:03 +00:00
// we're racing discord's initialization procedures; try and hit a timing sweetspot
2018-04-22 05:27:32 +00:00
setTimeout ( function ( ) {
2018-04-22 04:05:47 +00:00
2018-04-22 05:27:32 +00:00
try {
2018-04-22 04:05:47 +00:00
2018-04-22 05:27:32 +00:00
// get the changelog object
var log = $api . util . findFuncExports ( 'changeLog' ) ;
var data = l . split ( ';;' ) ;
2018-04-22 04:41:03 +00:00
2018-04-22 05:27:32 +00:00
// set the date
if ( log . changeLog . date <= data [ 0 ] )
log . changeLog . date = data [ 0 ] ;
2018-04-22 04:41:03 +00:00
2018-04-22 05:27:32 +00:00
// prepend to the changelog body
log . changeLog . body = data [ 1 ] + '\n\n' + log . changeLog . body ;
}
catch ( e ) {
// it failed, try again in 10 ms
2018-04-22 10:07:01 +00:00
setTimeout ( arguments . callee , 100 ) ;
2018-04-22 05:27:32 +00:00
}
} , 100 ) ;
2018-04-22 04:05:47 +00:00
} ) ;
} ) ;
// post-init payload
2018-04-22 03:46:11 +00:00
document . addEventListener ( 'ep-ready' , ( ) => {
2018-04-25 03:28:54 +00:00
// disable analytics
2018-04-28 12:50:04 +00:00
_ _epprint ( 'disabling analytics...' ) ;
2018-04-28 00:23:51 +00:00
$api . util . findFuncExports ( "AnalyticEventConfigs" ) . default . track = ( ) => { } ;
2018-04-25 03:28:54 +00:00
2018-04-22 03:46:11 +00:00
// enable experiments
2018-04-28 12:50:04 +00:00
_ _epprint ( 'enabling experiments menu...' ) ;
2018-04-22 03:46:11 +00:00
$api . util . findFuncExports ( 'isDeveloper' ) . _ _defineGetter _ _ ( 'isDeveloper' , ( ) => true ) ;
2018-05-08 00:09:17 +00:00
// apply custom discrims/bot tags/badges/server verif from EndPwn Customizer (endpwn.cathoderay.tube)
_ _epprint ( 'initializing endpwn cutomizer...' ) ;
// add the endpwn dev badge to the class obfuscation table
wc . findFunc ( 'profileBadges:"profileBadges' ) [ 0 ] . exports [ 'profileBadgeEndpwn' ] = 'profileBadgeEndPwn' ;
// apply the css for endpwn dev badges
var badgecss = document . createElement ( "style" ) ;
badgecss . type = "text/css" ;
badgecss . innerHTML = ".profileBadgeEndPwn{background-image:url(https://dr1ft.xyz/sigma_solid.svg);background-position:center;background-repeat:no-repeat;width:16px;height:16px}" ;
document . body . appendChild ( badgecss ) ;
// hook getUser() so we can apply custom discrims/bot tags/badges
2018-04-22 03:46:11 +00:00
$api . util . wrapAfter (
"wc.findCache('getUser')[0].exports.getUser" ,
x => {
if ( x === undefined || x === null ) return ;
if ( _ _goodies . bots . contains ( x . id ) ) x . bot = true ;
if ( _ _goodies . users [ x . id ] !== undefined ) x . discriminator = _ _goodies . users [ x . id ] ;
2018-05-08 00:11:28 +00:00
if ( _ _goodies . devs . contains ( x . id ) ) x . flags += x . flags & 4096 ? 0 : 4096 ;
2018-04-22 03:46:11 +00:00
return x ;
}
) ;
2018-05-08 00:09:17 +00:00
// hook getGuild() so we can verify servers
2018-04-22 03:46:11 +00:00
$api . util . wrapAfter (
"wc.findCache('getGuild')[0].exports.getGuild" ,
x => {
if ( x === undefined || x === null ) return ;
if ( _ _goodies . guilds . contains ( x . id ) ) x . features . add ( 'VERIFIED' ) ;
return x ;
}
) ;
2018-04-25 02:51:36 +00:00
// check for epapi updates
2018-04-25 03:45:52 +00:00
if ( $api . lite || ! fs . existsSync ( $api . data + '/DONTUPDATE' ) )
2018-04-25 03:07:04 +00:00
( function ( ) {
2018-04-25 02:51:36 +00:00
2018-04-28 12:50:04 +00:00
_ _epprint ( 'checking for EPAPI updates...' ) ;
2018-04-26 11:33:21 +00:00
2018-04-25 03:07:04 +00:00
// fetch the latest build of epapi
fetch ( 'https://endpwn.github.io/epapi/epapi.js?_=' + Date . now ( ) ) . then ( x => x . text ( ) ) . then ( x => {
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// check the version
if ( kparse ( x ) . version > $api . version ) {
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// if the version on the server is newer, pester the user
$api . ui . showDialog ( {
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
title : 'EndPwn3: EPAPI Update Available' ,
body : 'An update to EPAPI has been released. It is recommended that you restart your client in order to gain access to new features and maintain compatibility.' ,
confirmText : 'Restart Now' , cancelText : 'Later' ,
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// user pressed "Restart Now"
onConfirm : ( ) => {
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// refresh the page if we're running in a browser, reboot the app if we're running outside of lite mode
2018-04-25 03:33:10 +00:00
reload ( ) ;
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
} ,
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// they pressed "Later", for some reason
onCancel : ( ) => {
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
// bother them again in 6 hrs (* 60 min * 60 sec * 1000 ms)
setTimeout ( arguments . callee , 6 * 60 * 60 * 1000 ) ;
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
}
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
} ) ;
}
2018-04-29 14:13:57 +00:00
else setTimeout ( arguments . callee , 6 * 60 * 60 * 1000 ) ;
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
} ) ;
2018-04-25 02:51:36 +00:00
2018-04-25 03:07:04 +00:00
} ) ( ) ;
2018-04-25 02:51:36 +00:00
2018-04-22 03:46:11 +00:00
} ) ;
2018-04-22 15:59:10 +00:00
} ) ( ) ;