Use Reflection, deleted any wpm references from plugin api for now
This commit is contained in:
parent
5c493d413b
commit
f46694f2d0
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
import { Patcher, MonkeyPatch, WebpackModules, ReactComponents } from 'modules';
|
import { Patcher, MonkeyPatch, Reflection, ReactComponents } from 'modules';
|
||||||
|
|
||||||
const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)`);
|
const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)`);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ export default new class TwentyFourHour extends BuiltinModule {
|
||||||
|
|
||||||
async enabled(e) {
|
async enabled(e) {
|
||||||
if (Patcher.getPatchesByCaller('BD:TwentyFourHour').length) return;
|
if (Patcher.getPatchesByCaller('BD:TwentyFourHour').length) return;
|
||||||
const TimeFormatter = WebpackModules.getModuleByName('TimeFormatter');
|
const { TimeFormatter } = Reflection.modules;
|
||||||
MonkeyPatch('BD:TwentyFourHour', TimeFormatter).after('calendarFormat', (thisObject, args, returnValue) => {
|
MonkeyPatch('BD:TwentyFourHour', TimeFormatter).after('calendarFormat', (thisObject, args, returnValue) => {
|
||||||
const matched = returnValue.match(twelveHour);
|
const matched = returnValue.match(twelveHour);
|
||||||
if (!matched || matched.length != 4) return;
|
if (!matched || matched.length != 4) return;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
import { Patcher, MonkeyPatch, WebpackModules, ReactComponents } from 'modules';
|
import { Patcher, MonkeyPatch, Reflection, ReactComponents } from 'modules';
|
||||||
|
|
||||||
export default new class BlockedMessages extends BuiltinModule {
|
export default new class BlockedMessages extends BuiltinModule {
|
||||||
|
|
||||||
|
@ -18,16 +18,16 @@ export default new class BlockedMessages extends BuiltinModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
static isBlocked(id) {
|
static isBlocked(id) {
|
||||||
const RelationshipStore = WebpackModules.getModuleByName('RelationshipStore');
|
const { RelationshipStore } = Reflection.modules;
|
||||||
return RelationshipStore.isBlocked(id);
|
return RelationshipStore.isBlocked(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async enabled(e) {
|
async enabled(e) {
|
||||||
if (Patcher.getPatchesByCaller('BD:BlockedMessages').length) return;
|
if (Patcher.getPatchesByCaller('BD:BlockedMessages').length) return;
|
||||||
const MessageActions = WebpackModules.getModuleByName('MessageActions');
|
const { MessageActions } = Reflection.modules;
|
||||||
MonkeyPatch('BD:BlockedMessages', MessageActions).instead('receiveMessage', this.processMessage);
|
MonkeyPatch('BD:BlockedMessages', MessageActions).instead('receiveMessage', this.processMessage);
|
||||||
|
|
||||||
const MessageListComponents = WebpackModules.getModuleByProps(['BlockedMessageGroup']);
|
const MessageListComponents = Reflection.module.byProps('BlockedMessageGroup');
|
||||||
MessageListComponents.OriginalBlockedMessageGroup = MessageListComponents.BlockedMessageGroup;
|
MessageListComponents.OriginalBlockedMessageGroup = MessageListComponents.BlockedMessageGroup;
|
||||||
MessageListComponents.BlockedMessageGroup = () => {return null;};
|
MessageListComponents.BlockedMessageGroup = () => {return null;};
|
||||||
this.cancelBlockedMessages = () => {
|
this.cancelBlockedMessages = () => {
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
|
|
||||||
import { Utils } from 'common';
|
import { Utils } from 'common';
|
||||||
import { Settings, Patcher, MonkeyPatch, WebpackModules, ReactComponents, DiscordApi } from 'modules';
|
import { Settings, Patcher, MonkeyPatch, Reflection, ReactComponents, DiscordApi } from 'modules';
|
||||||
|
|
||||||
export default new class ColoredText extends BuiltinModule {
|
export default new class ColoredText extends BuiltinModule {
|
||||||
|
|
||||||
|
@ -44,13 +44,13 @@ export default new class ColoredText extends BuiltinModule {
|
||||||
async enabled(e) {
|
async enabled(e) {
|
||||||
if (Patcher.getPatchesByCaller('BD:ColoredText').length) return;
|
if (Patcher.getPatchesByCaller('BD:ColoredText').length) return;
|
||||||
this.intensitySetting.on('setting-updated', this._intensityUpdated);
|
this.intensitySetting.on('setting-updated', this._intensityUpdated);
|
||||||
this.MessageContent = await ReactComponents.getComponent('MessageContent', { selector: WebpackModules.getSelector('container', 'containerCozy', 'containerCompact', 'edited') });
|
this.MessageContent = await ReactComponents.getComponent('MessageContent', { selector: Reflection.resolve('container', 'containerCozy', 'containerCompact', 'edited').selector });
|
||||||
MonkeyPatch('BD:ColoredText', this.MessageContent.component.prototype).after('render', this.injectColoredText);
|
MonkeyPatch('BD:ColoredText', this.MessageContent.component.prototype).after('render', this.injectColoredText);
|
||||||
this.MessageContent.forceUpdateAll();
|
this.MessageContent.forceUpdateAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
injectColoredText(thisObject, args, returnValue) {
|
injectColoredText(thisObject, args, returnValue) {
|
||||||
const TinyColor = WebpackModules.getModuleByName('TinyColor');
|
const { TinyColor } = Reflection.modules;
|
||||||
const markup = Utils.findInReactTree(returnValue, m => m && m.props && m.props.className && m.props.className.includes('da-markup'));
|
const markup = Utils.findInReactTree(returnValue, m => m && m.props && m.props.className && m.props.className.includes('da-markup'));
|
||||||
const roleColor = thisObject.props.message.colorString;
|
const roleColor = thisObject.props.message.colorString;
|
||||||
if (markup && roleColor) markup.props.style = {color: TinyColor.mix(roleColor, this.defaultColor, this.intensity)};
|
if (markup && roleColor) markup.props.style = {color: TinyColor.mix(roleColor, this.defaultColor, this.intensity)};
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
import { Settings, Cache, Events } from 'modules';
|
import { Settings, Cache, Events } from 'modules';
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
import { WebpackModules, ReactComponents, MonkeyPatch, Patcher, DiscordApi, Security } from 'modules';
|
import { Reflection, ReactComponents, MonkeyPatch, Patcher, DiscordApi, Security } from 'modules';
|
||||||
import { VueInjector, Reflection, Modals, Toasts } from 'ui';
|
import { VueInjector, Modals, Toasts } from 'ui';
|
||||||
import { ClientLogger as Logger, ClientIPC } from 'common';
|
import { ClientLogger as Logger, ClientIPC } from 'common';
|
||||||
import { request } from 'vendor';
|
import { request } from 'vendor';
|
||||||
import { Utils } from 'common';
|
import { Utils } from 'common';
|
||||||
|
@ -45,8 +45,7 @@ export default new class E2EE extends BuiltinModule {
|
||||||
Events.on('discord:MESSAGE_CREATE', this.handlePublicKey);
|
Events.on('discord:MESSAGE_CREATE', this.handlePublicKey);
|
||||||
this.patchDispatcher();
|
this.patchDispatcher();
|
||||||
this.patchMessageContent();
|
this.patchMessageContent();
|
||||||
const selector = `.${WebpackModules.getClassName('channelTextArea', 'emojiButton')}`;
|
const cta = await ReactComponents.getComponent('ChannelTextArea', { selector: Reflection.resolve('channelTextArea', 'emojiButton').selector });
|
||||||
const cta = await ReactComponents.getComponent('ChannelTextArea', { selector });
|
|
||||||
this.patchChannelTextArea(cta);
|
this.patchChannelTextArea(cta);
|
||||||
this.patchChannelTextAreaSubmit(cta);
|
this.patchChannelTextAreaSubmit(cta);
|
||||||
cta.forceUpdateAll();
|
cta.forceUpdateAll();
|
||||||
|
@ -188,7 +187,7 @@ export default new class E2EE extends BuiltinModule {
|
||||||
if (!ECDH_STORAGE.hasOwnProperty(channelId)) {
|
if (!ECDH_STORAGE.hasOwnProperty(channelId)) {
|
||||||
const publicKeyMessage = `\`\`\`\n-----BEGIN PUBLIC KEY-----\n${this.createKeyExchange(channelId)}\n-----END PUBLIC KEY-----\n\`\`\``;
|
const publicKeyMessage = `\`\`\`\n-----BEGIN PUBLIC KEY-----\n${this.createKeyExchange(channelId)}\n-----END PUBLIC KEY-----\n\`\`\``;
|
||||||
if (this.encryptNewMessages) this.encryptNewMessages = false;
|
if (this.encryptNewMessages) this.encryptNewMessages = false;
|
||||||
WebpackModules.getModuleByName('DraftActions').saveDraft(channelId, publicKeyMessage);
|
Reflection.modules.DraftActions.saveDraft(channelId, publicKeyMessage);
|
||||||
}
|
}
|
||||||
const secret = this.computeSecret(channelId, key);
|
const secret = this.computeSecret(channelId, key);
|
||||||
this.setKey(channelId, secret);
|
this.setKey(channelId, secret);
|
||||||
|
@ -202,7 +201,7 @@ export default new class E2EE extends BuiltinModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
patchDispatcher() {
|
patchDispatcher() {
|
||||||
const Dispatcher = WebpackModules.getModuleByName('Dispatcher');
|
const { Dispatcher } = Reflection.modules;
|
||||||
MonkeyPatch('BD:E2EE', Dispatcher).before('dispatch', (_, [event]) => {
|
MonkeyPatch('BD:E2EE', Dispatcher).before('dispatch', (_, [event]) => {
|
||||||
if (event.type !== 'MESSAGE_CREATE') return;
|
if (event.type !== 'MESSAGE_CREATE') return;
|
||||||
|
|
||||||
|
@ -216,9 +215,8 @@ export default new class E2EE extends BuiltinModule {
|
||||||
decrypt = this.decrypt(this.decrypt(this.decrypt(seed, this.master), key), event.message.content);
|
decrypt = this.decrypt(this.decrypt(this.decrypt(seed, this.master), key), event.message.content);
|
||||||
} catch (err) { return } // Ignore errors such as non empty
|
} catch (err) { return } // Ignore errors such as non empty
|
||||||
|
|
||||||
const MessageParser = WebpackModules.getModuleByName('MessageParser');
|
const { MessageParser, Permissions, DiscordConstants } = Reflection.modules;
|
||||||
const Permissions = WebpackModules.getModuleByName('GuildPermissions');
|
|
||||||
const DiscordConstants = WebpackModules.getModuleByName('DiscordConstants');
|
|
||||||
const currentChannel = DiscordApi.Channel.fromId(event.message.channel_id).discordObject;
|
const currentChannel = DiscordApi.Channel.fromId(event.message.channel_id).discordObject;
|
||||||
|
|
||||||
// Create a generic message object to parse mentions with
|
// Create a generic message object to parse mentions with
|
||||||
|
@ -234,11 +232,10 @@ export default new class E2EE extends BuiltinModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
async patchMessageContent() {
|
async patchMessageContent() {
|
||||||
const selector = `.${WebpackModules.getClassName('container', 'containerCozy', 'containerCompact', 'edited')}`;
|
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector: Reflection.resolve('container', 'containerCozy', 'containerCompact', 'edited').selector });
|
||||||
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector });
|
|
||||||
MonkeyPatch('BD:E2EE', MessageContent.component.prototype).before('render', this.beforeRenderMessageContent.bind(this));
|
MonkeyPatch('BD:E2EE', MessageContent.component.prototype).before('render', this.beforeRenderMessageContent.bind(this));
|
||||||
MonkeyPatch('BD:E2EE', MessageContent.component.prototype).after('render', this.renderMessageContent.bind(this));
|
MonkeyPatch('BD:E2EE', MessageContent.component.prototype).after('render', this.renderMessageContent.bind(this));
|
||||||
const ImageWrapper = await ReactComponents.getComponent('ImageWrapper', { selector: `.${WebpackModules.getClassName('imageWrapper')}` });
|
const ImageWrapper = await ReactComponents.getComponent('ImageWrapper', { selector: Reflection.resolve('imageWrapper').selector });
|
||||||
MonkeyPatch('BD:E2EE', ImageWrapper.component.prototype).before('render', this.beforeRenderImageWrapper.bind(this));
|
MonkeyPatch('BD:E2EE', ImageWrapper.component.prototype).before('render', this.beforeRenderImageWrapper.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,10 +245,7 @@ export default new class E2EE extends BuiltinModule {
|
||||||
const key = this.getKey(component.props.message.channel_id);
|
const key = this.getKey(component.props.message.channel_id);
|
||||||
if (!key) return; // We don't have a key for this channel
|
if (!key) return; // We don't have a key for this channel
|
||||||
|
|
||||||
const Message = WebpackModules.getModuleByPrototypes(['isMentioned']);
|
const { Message, MessageParser, Permissions, DiscordConstants } = Reflection.modules;
|
||||||
const MessageParser = WebpackModules.getModuleByName('MessageParser');
|
|
||||||
const Permissions = WebpackModules.getModuleByName('GuildPermissions');
|
|
||||||
const DiscordConstants = WebpackModules.getModuleByName('DiscordConstants');
|
|
||||||
const currentChannel = DiscordApi.Channel.fromId(component.props.message.channel_id).discordObject;
|
const currentChannel = DiscordApi.Channel.fromId(component.props.message.channel_id).discordObject;
|
||||||
|
|
||||||
if (typeof component.props.message.content !== 'string') return; // Ignore any non string content
|
if (typeof component.props.message.content !== 'string') return; // Ignore any non string content
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { Utils, FileUtils, ClientIPC } from 'common';
|
import { Utils, FileUtils, ClientIPC } from 'common';
|
||||||
import { E2EE } from 'builtin';
|
import { E2EE } from 'builtin';
|
||||||
import { DiscordApi, WebpackModules } from 'modules';
|
import { DiscordApi, Reflection } from 'modules';
|
||||||
import { Toasts } from 'ui';
|
import { Toasts } from 'ui';
|
||||||
import { MiLock, MiImagePlus, MiIcVpnKey } from '../ui/components/common/MaterialIcon';
|
import { MiLock, MiImagePlus, MiIcVpnKey } from '../ui/components/common/MaterialIcon';
|
||||||
|
|
||||||
|
@ -61,8 +61,8 @@
|
||||||
if (!dialogResult || !dialogResult.length) return;
|
if (!dialogResult || !dialogResult.length) return;
|
||||||
|
|
||||||
const readFile = await FileUtils.readFileBuffer(dialogResult[0]);
|
const readFile = await FileUtils.readFileBuffer(dialogResult[0]);
|
||||||
const FileActions = WebpackModules.getModuleByProps(['makeFile']);
|
const FileActions = Reflection.module.byProps('makeFile');
|
||||||
const Uploader = WebpackModules.getModuleByProps(['instantBatchUpload']);
|
const Uploader = Reflection.module.byProps('instantBatchUpload');
|
||||||
|
|
||||||
const img = await Utils.getImageFromBuffer(readFile);
|
const img = await Utils.getImageFromBuffer(readFile);
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
E2EE.preExchangeState = E2EE.encryptNewMessages;
|
E2EE.preExchangeState = E2EE.encryptNewMessages;
|
||||||
E2EE.encryptNewMessages = false; // Disable encrypting new messages so we won't encrypt public keys
|
E2EE.encryptNewMessages = false; // Disable encrypting new messages so we won't encrypt public keys
|
||||||
const publicKeyMessage = `\`\`\`\n-----BEGIN PUBLIC KEY-----\n${keyExchange}\n-----END PUBLIC KEY-----\n\`\`\``;
|
const publicKeyMessage = `\`\`\`\n-----BEGIN PUBLIC KEY-----\n${keyExchange}\n-----END PUBLIC KEY-----\n\`\`\``;
|
||||||
WebpackModules.getModuleByName('DraftActions').saveDraft(DiscordApi.currentChannel.id, publicKeyMessage);
|
Reflection.modules.DraftActions.saveDraft(DiscordApi.currentChannel.id, publicKeyMessage);
|
||||||
Toasts.info('Key exchange started. Expires in 30 seconds');
|
Toasts.info('Key exchange started. Expires in 30 seconds');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,7 +13,7 @@ import path from 'path';
|
||||||
import { request } from 'vendor';
|
import { request } from 'vendor';
|
||||||
|
|
||||||
import { Utils, FileUtils, ClientLogger as Logger } from 'common';
|
import { Utils, FileUtils, ClientLogger as Logger } from 'common';
|
||||||
import { DiscordApi, Settings, Globals, WebpackModules, ReactComponents, MonkeyPatch, Cache, Patcher, Database } from 'modules';
|
import { DiscordApi, Settings, Globals, Reflection, ReactComponents, MonkeyPatch, Cache, Patcher, Database } from 'modules';
|
||||||
import { VueInjector, DiscordContextMenu } from 'ui';
|
import { VueInjector, DiscordContextMenu } from 'ui';
|
||||||
|
|
||||||
import Emote from './EmoteComponent.js';
|
import Emote from './EmoteComponent.js';
|
||||||
|
@ -79,7 +79,7 @@ export default new class EmoteModule extends BuiltinModule {
|
||||||
|
|
||||||
this.patchMessageContent();
|
this.patchMessageContent();
|
||||||
this.patchSendAndEdit();
|
this.patchSendAndEdit();
|
||||||
const ImageWrapper = await ReactComponents.getComponent('ImageWrapper', { selector: WebpackModules.getSelector('imageWrapper') });
|
const ImageWrapper = await ReactComponents.getComponent('ImageWrapper', { selector: Reflection.resolve('imageWrapper').selector });
|
||||||
MonkeyPatch('BD:EMOTEMODULE', ImageWrapper.component.prototype).after('render', this.beforeRenderImageWrapper.bind(this));
|
MonkeyPatch('BD:EMOTEMODULE', ImageWrapper.component.prototype).after('render', this.beforeRenderImageWrapper.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ export default new class EmoteModule extends BuiltinModule {
|
||||||
* Patches MessageContent render method
|
* Patches MessageContent render method
|
||||||
*/
|
*/
|
||||||
async patchMessageContent() {
|
async patchMessageContent() {
|
||||||
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector: WebpackModules.getSelector('container', 'containerCozy', 'containerCompact', 'edited') });
|
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector: Reflection.resolve('container', 'containerCozy', 'containerCompact', 'edited').selector });
|
||||||
MonkeyPatch('BD:EMOTEMODULE', MessageContent.component.prototype).after('render', this.afterRenderMessageContent.bind(this));
|
MonkeyPatch('BD:EMOTEMODULE', MessageContent.component.prototype).after('render', this.afterRenderMessageContent.bind(this));
|
||||||
MessageContent.forceUpdateAll();
|
MessageContent.forceUpdateAll();
|
||||||
}
|
}
|
||||||
|
@ -177,8 +177,9 @@ export default new class EmoteModule extends BuiltinModule {
|
||||||
* Patches MessageActions send and edit
|
* Patches MessageActions send and edit
|
||||||
*/
|
*/
|
||||||
patchSendAndEdit() {
|
patchSendAndEdit() {
|
||||||
MonkeyPatch('BD:EMOTEMODULE', WebpackModules.getModuleByName('MessageActions')).instead('sendMessage', this.handleSendMessage.bind(this));
|
const { MessageActions } = Reflection.modules;
|
||||||
MonkeyPatch('BD:EMOTEMODULE', WebpackModules.getModuleByName('MessageActions')).instead('editMessage', this.handleEditMessage.bind(this));
|
MonkeyPatch('BD:EMOTEMODULE', MessageActions).instead('sendMessage', this.handleSendMessage.bind(this));
|
||||||
|
MonkeyPatch('BD:EMOTEMODULE', MessageActions).instead('editMessage', this.handleEditMessage.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -213,8 +214,8 @@ export default new class EmoteModule extends BuiltinModule {
|
||||||
if (!emote) return orig(...args);
|
if (!emote) return orig(...args);
|
||||||
this.addToMostUsed(emote);
|
this.addToMostUsed(emote);
|
||||||
|
|
||||||
const FileActions = WebpackModules.getModuleByProps(['makeFile']);
|
const FileActions = Reflection.module.byProps('makeFile');
|
||||||
const Uploader = WebpackModules.getModuleByProps(['instantBatchUpload']);
|
const Uploader = Reflection.module.byProps('instantBatchUpload');
|
||||||
|
|
||||||
request.get(emote.props.src, { encoding: 'binary' }).then(res => {
|
request.get(emote.props.src, { encoding: 'binary' }).then(res => {
|
||||||
const arr = new Uint8Array(new ArrayBuffer(res.length));
|
const arr = new Uint8Array(new ArrayBuffer(res.length));
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
import { Patcher, MonkeyPatch, WebpackModules } from 'modules';
|
import { Patcher, MonkeyPatch, Reflection } from 'modules';
|
||||||
|
|
||||||
export default new class KillClyde extends BuiltinModule {
|
export default new class KillClyde extends BuiltinModule {
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ export default new class KillClyde extends BuiltinModule {
|
||||||
|
|
||||||
async enabled(e) {
|
async enabled(e) {
|
||||||
if (Patcher.getPatchesByCaller('BD:KillClyde').length) return;
|
if (Patcher.getPatchesByCaller('BD:KillClyde').length) return;
|
||||||
const MessageActions = WebpackModules.getModuleByName('MessageActions');
|
const { MessageActions } = Reflection.modules;
|
||||||
MonkeyPatch('BD:KillClyde', MessageActions).instead('sendBotMessage', void 0);
|
MonkeyPatch('BD:KillClyde', MessageActions).instead('sendBotMessage', void 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
|
|
||||||
import { Patcher, MonkeyPatch, WebpackModules } from 'modules';
|
import { Patcher, MonkeyPatch, Reflection } from 'modules';
|
||||||
|
|
||||||
export default new class E2EE extends BuiltinModule {
|
export default new class E2EE extends BuiltinModule {
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ export default new class E2EE extends BuiltinModule {
|
||||||
|
|
||||||
enabled(e) {
|
enabled(e) {
|
||||||
if (Patcher.getPatchesByCaller('BD:TrackingProtection').length) return;
|
if (Patcher.getPatchesByCaller('BD:TrackingProtection').length) return;
|
||||||
const trackingModule = WebpackModules.getModuleByProps(['track']);
|
const trackingModule = Reflection.module.byProps('track');
|
||||||
if (!trackingModule) return; // TODO Log it
|
if (!trackingModule) return; // TODO Log it
|
||||||
MonkeyPatch('BD:TrackingProtection', trackingModule).instead('track', this.track);
|
MonkeyPatch('BD:TrackingProtection', trackingModule).instead('track', this.track);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import BuiltinModule from './BuiltinModule';
|
import BuiltinModule from './BuiltinModule';
|
||||||
import { WebpackModules } from 'modules';
|
import { Reflection } from 'modules';
|
||||||
|
|
||||||
export default new class VoiceDisconnect extends BuiltinModule {
|
export default new class VoiceDisconnect extends BuiltinModule {
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ export default new class VoiceDisconnect extends BuiltinModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
listener() {
|
listener() {
|
||||||
const VoiceChannelActions = WebpackModules.getModuleByName('VoiceChannelActions');
|
const { VoiceChannelActions } = Reflection.modules;
|
||||||
VoiceChannelActions.selectVoiceChannel(null, null);
|
VoiceChannelActions.selectVoiceChannel(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
import { DOM, BdUI, BdMenu, Modals, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
|
import { DOM, BdUI, BdMenu, Modals, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
|
||||||
import BdCss from './styles/index.scss';
|
import BdCss from './styles/index.scss';
|
||||||
import { Events, CssEditor, Globals, Settings, Database, Updater, ModuleManager, PluginManager, ThemeManager, ExtModuleManager, Vendor, WebpackModules, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi, BdWebApi, Connectivity, Cache, Reflection } from 'modules';
|
import { Events, CssEditor, Globals, Settings, Database, Updater, ModuleManager, PluginManager, ThemeManager, ExtModuleManager, Vendor, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi, BdWebApi, Connectivity, Cache, Reflection } from 'modules';
|
||||||
import { ClientLogger as Logger, ClientIPC, Utils } from 'common';
|
import { ClientLogger as Logger, ClientIPC, Utils } from 'common';
|
||||||
import { BuiltinManager, EmoteModule, ReactDevtoolsModule, VueDevtoolsModule, TrackingProtection, E2EE } from 'builtin';
|
import { BuiltinManager, EmoteModule, ReactDevtoolsModule, VueDevtoolsModule, TrackingProtection, E2EE } from 'builtin';
|
||||||
import electron from 'electron';
|
import electron from 'electron';
|
||||||
|
@ -34,7 +34,7 @@ class BetterDiscord {
|
||||||
ModuleManager, PluginManager, ThemeManager, ExtModuleManager,
|
ModuleManager, PluginManager, ThemeManager, ExtModuleManager,
|
||||||
Vendor,
|
Vendor,
|
||||||
|
|
||||||
WebpackModules, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi,
|
Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi,
|
||||||
EmoteModule,
|
EmoteModule,
|
||||||
BdWebApi,
|
BdWebApi,
|
||||||
Connectivity,
|
Connectivity,
|
||||||
|
@ -49,7 +49,7 @@ class BetterDiscord {
|
||||||
module: Globals.require.cache[__filename],
|
module: Globals.require.cache[__filename],
|
||||||
require: Globals.require,
|
require: Globals.require,
|
||||||
webpack_require: __webpack_require__, // eslint-disable-line no-undef
|
webpack_require: __webpack_require__, // eslint-disable-line no-undef
|
||||||
get discord_require() { return WebpackModules.require }
|
get discord_require() { return Reflection.require }
|
||||||
};
|
};
|
||||||
|
|
||||||
const developermode = Settings.getSetting('core', 'advanced', 'developer-mode');
|
const developermode = Settings.getSetting('core', 'advanced', 'developer-mode');
|
||||||
|
|
|
@ -10,11 +10,11 @@
|
||||||
|
|
||||||
import { List } from 'structs';
|
import { List } from 'structs';
|
||||||
import { User, Channel, Guild, Message } from 'discordstructs';
|
import { User, Channel, Guild, Message } from 'discordstructs';
|
||||||
import { WebpackModules } from './webpackmodules';
|
import Reflection from './reflection/index';
|
||||||
|
|
||||||
export const Modules = {
|
export const Modules = {
|
||||||
_getModule(name) {
|
_getModule(name) {
|
||||||
const foundModule = WebpackModules.getModuleByName(name);
|
const foundModule = Reflection.module.byName(name);
|
||||||
if (!foundModule) return null;
|
if (!foundModule) return null;
|
||||||
delete this[name];
|
delete this[name];
|
||||||
return this[name] = foundModule;
|
return this[name] = foundModule;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { WebpackModules } from './webpackmodules';
|
import Reflection from './reflection/index';
|
||||||
import { MonkeyPatch } from './patcher';
|
import { MonkeyPatch } from './patcher';
|
||||||
import Events from './events';
|
import Events from './events';
|
||||||
import EventListener from './eventlistener';
|
import EventListener from './eventlistener';
|
||||||
|
@ -37,7 +37,7 @@ export default class extends EventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
hook() {
|
hook() {
|
||||||
const Events = WebpackModules.getModuleByName('Events');
|
const { Events } = Reflection.modules;
|
||||||
MonkeyPatch('BD:EVENTS', Events.prototype).after('emit', (obj, args, retVal) => {
|
MonkeyPatch('BD:EVENTS', Events.prototype).after('emit', (obj, args, retVal) => {
|
||||||
const eventId = args.length >= 3 ? args[2].id || -1 : -1;
|
const eventId = args.length >= 3 ? args[2].id || -1 : -1;
|
||||||
if (eventId === this.ignoreMultiple) return;
|
if (eventId === this.ignoreMultiple) return;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { WebpackModules } from './webpackmodules';
|
import Reflection from './reflection/index';
|
||||||
import { ClientLogger as Logger } from 'common';
|
import { ClientLogger as Logger } from 'common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,7 +64,7 @@ export class Patcher {
|
||||||
|
|
||||||
static resolveModule(module) {
|
static resolveModule(module) {
|
||||||
if (module instanceof Function || (module instanceof Object)) return module;
|
if (module instanceof Function || (module instanceof Object)) return module;
|
||||||
if (typeof module === 'string') return WebpackModules.getModuleByName(module);
|
if (typeof module === 'string') return Reflection.module.byName(module);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
import { EmoteModule } from 'builtin';
|
import { EmoteModule } from 'builtin';
|
||||||
import { SettingsSet, SettingsCategory, Setting, SettingsScheme } from 'structs';
|
import { SettingsSet, SettingsCategory, Setting, SettingsScheme } from 'structs';
|
||||||
import { BdMenu, Modals, DOM, DOMObserver, Reflection, VueInjector, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
|
import { BdMenu, Modals, DOM, DOMObserver, VueInjector, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
|
||||||
import * as CommonComponents from 'commoncomponents';
|
import * as CommonComponents from 'commoncomponents';
|
||||||
import { Utils, Filters, ClientLogger as Logger, ClientIPC, AsyncEventEmitter } from 'common';
|
import { Utils, Filters, ClientLogger as Logger, ClientIPC, AsyncEventEmitter } from 'common';
|
||||||
import Settings from './settings';
|
import Settings from './settings';
|
||||||
|
@ -19,7 +19,7 @@ import PluginManager from './pluginmanager';
|
||||||
import ThemeManager from './thememanager';
|
import ThemeManager from './thememanager';
|
||||||
import Events from './events';
|
import Events from './events';
|
||||||
import EventsWrapper from './eventswrapper';
|
import EventsWrapper from './eventswrapper';
|
||||||
import { WebpackModules } from './webpackmodules';
|
import Reflection from './reflection/index';
|
||||||
import DiscordApi from './discordapi';
|
import DiscordApi from './discordapi';
|
||||||
import { ReactComponents, ReactHelpers } from './reactcomponents';
|
import { ReactComponents, ReactHelpers } from './reactcomponents';
|
||||||
import { Patcher, MonkeyPatch } from './patcher';
|
import { Patcher, MonkeyPatch } from './patcher';
|
||||||
|
@ -542,92 +542,6 @@ export default class PluginApi {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* WebpackModules
|
|
||||||
*/
|
|
||||||
|
|
||||||
get webpackRequire() {
|
|
||||||
return WebpackModules.require;
|
|
||||||
}
|
|
||||||
getWebpackModule(filter, first = true) {
|
|
||||||
return WebpackModules.getModule(filter, first);
|
|
||||||
}
|
|
||||||
getWebpackModuleByName(name, fallback) {
|
|
||||||
return WebpackModules.getModuleByName(name, fallback);
|
|
||||||
}
|
|
||||||
getWebpackModuleByDisplayName(name) {
|
|
||||||
return WebpackModules.getModuleByDisplayName(name);
|
|
||||||
}
|
|
||||||
getWebpackModuleByRegex(regex) {
|
|
||||||
return WebpackModules.getModuleByRegex(regex, true);
|
|
||||||
}
|
|
||||||
getWebpackModulesByRegex(regex) {
|
|
||||||
return WebpackModules.getModuleByRegex(regex, false);
|
|
||||||
}
|
|
||||||
getWebpackModuleByProperties(...props) {
|
|
||||||
return WebpackModules.getModuleByProps(props, true);
|
|
||||||
}
|
|
||||||
getWebpackModuleByPrototypeFields(...props) {
|
|
||||||
return WebpackModules.getModuleByPrototypes(props, true);
|
|
||||||
}
|
|
||||||
getWebpackModulesByProperties(...props) {
|
|
||||||
return WebpackModules.getModuleByProps(props, false);
|
|
||||||
}
|
|
||||||
getWebpackModulesByPrototypeFields(...props) {
|
|
||||||
return WebpackModules.getModuleByPrototypes(props, false);
|
|
||||||
}
|
|
||||||
waitForWebpackModule(filter) {
|
|
||||||
return WebpackModules.waitForModule(filter);
|
|
||||||
}
|
|
||||||
waitForWebpackModuleByName(name, fallback) {
|
|
||||||
return WebpackModules.waitForModuleByName(name, fallback);
|
|
||||||
}
|
|
||||||
waitForWebpackModuleByDisplayName(name) {
|
|
||||||
return WebpackModules.waitForModuleByDisplayName(name);
|
|
||||||
}
|
|
||||||
waitForWebpackModuleByRegex(regex) {
|
|
||||||
return WebpackModules.waitForModuleByRegex(regex);
|
|
||||||
}
|
|
||||||
waitForWebpackModuleByProperties(...props) {
|
|
||||||
return WebpackModules.waitForModuleByProps(props);
|
|
||||||
}
|
|
||||||
waitForWebpackModuleByPrototypeFields(...props) {
|
|
||||||
return WebpackModules.waitForModuleByPrototypes(props);
|
|
||||||
}
|
|
||||||
getWebpackClassName(...classes) {
|
|
||||||
return WebpackModules.getClassName(...classes);
|
|
||||||
}
|
|
||||||
waitForWebpackClassName(...classes) {
|
|
||||||
return WebpackModules.waitForClassName(...classes);
|
|
||||||
}
|
|
||||||
get WebpackModules() {
|
|
||||||
return new Proxy({
|
|
||||||
getModule: this.getWebpackModule.bind(this),
|
|
||||||
getModuleByName: this.getWebpackModuleByName.bind(this),
|
|
||||||
getModuleByDisplayName: this.getWebpackModuleByDisplayName.bind(this),
|
|
||||||
getModuleByRegex: this.getWebpackModuleByRegex.bind(this),
|
|
||||||
getModulesByRegex: this.getWebpackModulesByRegex.bind(this),
|
|
||||||
getModuleByProperties: this.getWebpackModuleByProperties.bind(this),
|
|
||||||
getModuleByPrototypeFields: this.getWebpackModuleByPrototypeFields.bind(this),
|
|
||||||
getModulesByProperties: this.getWebpackModulesByProperties.bind(this),
|
|
||||||
getModulesByPrototypeFields: this.getWebpackModulesByPrototypeFields.bind(this),
|
|
||||||
waitForModule: this.waitForWebpackModule.bind(this),
|
|
||||||
waitForModuleByName: this.waitForWebpackModuleByName.bind(this),
|
|
||||||
waitForModuleByDisplayName: this.waitForWebpackModuleByDisplayName.bind(this),
|
|
||||||
waitForModuleByRegex: this.waitForWebpackModuleByRegex.bind(this),
|
|
||||||
waitForModuleByProperties: this.waitForWebpackModuleByProperties.bind(this),
|
|
||||||
waitForModuleByPrototypeFields: this.waitForWebpackModuleByPrototypeFields.bind(this),
|
|
||||||
getClassName: this.getWebpackClassName.bind(this),
|
|
||||||
waitForClassName: this.waitForWebpackClassName.bind(this),
|
|
||||||
get KnownModules() { return WebpackModules.KnownModules },
|
|
||||||
get require() { return WebpackModules.require }
|
|
||||||
}, {
|
|
||||||
get(WebpackModules, property) {
|
|
||||||
return WebpackModules[property] || WebpackModules.getModuleByName(property);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Patcher
|
* Patcher
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { DOM, Reflection, Modals } from 'ui';
|
import { DOM, Modals } from 'ui';
|
||||||
import { Utils, Filters, ClientLogger as Logger } from 'common';
|
import { Utils, Filters, ClientLogger as Logger } from 'common';
|
||||||
import { MonkeyPatch } from './patcher';
|
import { MonkeyPatch } from './patcher';
|
||||||
import { WebpackModules } from './webpackmodules';
|
import Reflection from './reflection/index';
|
||||||
import DiscordApi from './discordapi';
|
import DiscordApi from './discordapi';
|
||||||
|
|
||||||
class Helpers {
|
class Helpers {
|
||||||
|
@ -153,11 +153,11 @@ class Helpers {
|
||||||
}
|
}
|
||||||
|
|
||||||
static get React() {
|
static get React() {
|
||||||
return WebpackModules.getModuleByName('React');
|
return Reflection.modules.React;
|
||||||
}
|
}
|
||||||
|
|
||||||
static get ReactDOM() {
|
static get ReactDOM() {
|
||||||
return WebpackModules.getModuleByName('ReactDOM');
|
return Reflection.modules.ReactDOM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ class ReactComponent {
|
||||||
forceUpdateAll() {
|
forceUpdateAll() {
|
||||||
if (!this.important || !this.important.selector) return;
|
if (!this.important || !this.important.selector) return;
|
||||||
for (const e of document.querySelectorAll(this.important.selector)) {
|
for (const e of document.querySelectorAll(this.important.selector)) {
|
||||||
Reflection(e).forceUpdate(this);
|
Reflection.DOM(e).forceUpdate(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ export class ReactComponents {
|
||||||
|
|
||||||
let component, reflect;
|
let component, reflect;
|
||||||
for (const element of elements) {
|
for (const element of elements) {
|
||||||
reflect = Reflection(element);
|
reflect = Reflection.DOM(element);
|
||||||
component = filter ? reflect.components.find(filter) : reflect.component;
|
component = filter ? reflect.components.find(filter) : reflect.component;
|
||||||
if (component) break;
|
if (component) break;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +310,7 @@ export class ReactAutoPatcher {
|
||||||
* Also patches some known components.
|
* Also patches some known components.
|
||||||
*/
|
*/
|
||||||
static async autoPatch() {
|
static async autoPatch() {
|
||||||
const React = await WebpackModules.waitForModuleByName('React');
|
const React = await Reflection.module.waitForModuleByName('React');
|
||||||
|
|
||||||
this.unpatchCreateElement = MonkeyPatch('BD:ReactComponents:createElement', React).before('createElement', (component, args) => ReactComponents.push(args[0]));
|
this.unpatchCreateElement = MonkeyPatch('BD:ReactComponents:createElement', React).before('createElement', (component, args) => ReactComponents.push(args[0]));
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchMessage() {
|
static async patchMessage() {
|
||||||
const selector = `.${WebpackModules.getClassName('message', 'messageCozy', 'messageCompact')}`;
|
const { selector } = Reflection.resolve('message', 'messageCozy', 'messageCompact');
|
||||||
this.Message = await ReactComponents.getComponent('Message', {selector}, m => m.prototype && m.prototype.renderCozy);
|
this.Message = await ReactComponents.getComponent('Message', {selector}, m => m.prototype && m.prototype.renderCozy);
|
||||||
|
|
||||||
this.unpatchMessageRender = MonkeyPatch('BD:ReactComponents', this.Message.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchMessageRender = MonkeyPatch('BD:ReactComponents', this.Message.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -350,7 +350,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchMessageGroup() {
|
static async patchMessageGroup() {
|
||||||
const selector = `.${WebpackModules.getClassName('container', 'message', 'messageCozy')}`;
|
const { selector } = Reflection.resolve('container', 'message', 'messageCozy');
|
||||||
this.MessageGroup = await ReactComponents.getComponent('MessageGroup', {selector});
|
this.MessageGroup = await ReactComponents.getComponent('MessageGroup', {selector});
|
||||||
|
|
||||||
this.unpatchMessageGroupRender = MonkeyPatch('BD:ReactComponents', this.MessageGroup.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchMessageGroupRender = MonkeyPatch('BD:ReactComponents', this.MessageGroup.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -368,7 +368,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchChannelMember() {
|
static async patchChannelMember() {
|
||||||
const selector = `.${WebpackModules.getClassName('member', 'memberInner', 'activity')}`;
|
const { selector } = Reflection.resolve('member', 'memberInner', 'activity');
|
||||||
this.ChannelMember = await ReactComponents.getComponent('ChannelMember', {selector}, m => m.prototype.renderActivity);
|
this.ChannelMember = await ReactComponents.getComponent('ChannelMember', {selector}, m => m.prototype.renderActivity);
|
||||||
|
|
||||||
this.unpatchChannelMemberRender = MonkeyPatch('BD:ReactComponents', this.ChannelMember.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchChannelMemberRender = MonkeyPatch('BD:ReactComponents', this.ChannelMember.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -384,7 +384,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchGuild() {
|
static async patchGuild() {
|
||||||
const selector = `div.${WebpackModules.getClassName('guild', 'guildsWrapper')}:not(:first-child)`;
|
const selector = `div.${Reflection.resolve('guild', 'guildsWrapper').className}:not(:first-child)`;
|
||||||
this.Guild = await ReactComponents.getComponent('Guild', {selector}, m => m.prototype.renderBadge);
|
this.Guild = await ReactComponents.getComponent('Guild', {selector}, m => m.prototype.renderBadge);
|
||||||
|
|
||||||
this.unpatchGuild = MonkeyPatch('BD:ReactComponents', this.Guild.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchGuild = MonkeyPatch('BD:ReactComponents', this.Guild.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -421,7 +421,7 @@ export class ReactAutoPatcher {
|
||||||
* The GuildTextChannel component represents a text channel in the guild channel list.
|
* The GuildTextChannel component represents a text channel in the guild channel list.
|
||||||
*/
|
*/
|
||||||
static async patchGuildTextChannel() {
|
static async patchGuildTextChannel() {
|
||||||
const selector = `.${WebpackModules.getClassName('containerDefault', 'actionIcon')}`;
|
const { selector } = Reflection.resolve('containerDefault', 'actionIcon');
|
||||||
this.GuildTextChannel = await ReactComponents.getComponent('GuildTextChannel', {selector}, c => c.prototype.renderMentionBadge);
|
this.GuildTextChannel = await ReactComponents.getComponent('GuildTextChannel', {selector}, c => c.prototype.renderMentionBadge);
|
||||||
|
|
||||||
this.unpatchGuildTextChannel = MonkeyPatch('BD:ReactComponents', this.GuildTextChannel.component.prototype).after('render', this._afterChannelRender);
|
this.unpatchGuildTextChannel = MonkeyPatch('BD:ReactComponents', this.GuildTextChannel.component.prototype).after('render', this._afterChannelRender);
|
||||||
|
@ -433,7 +433,7 @@ export class ReactAutoPatcher {
|
||||||
* The GuildVoiceChannel component represents a voice channel in the guild channel list.
|
* The GuildVoiceChannel component represents a voice channel in the guild channel list.
|
||||||
*/
|
*/
|
||||||
static async patchGuildVoiceChannel() {
|
static async patchGuildVoiceChannel() {
|
||||||
const selector = `.${WebpackModules.getClassName('containerDefault', 'actionIcon')}`;
|
const { selector } = Reflection.resolve('containerDefault', 'actionIcon');
|
||||||
this.GuildVoiceChannel = await ReactComponents.getComponent('GuildVoiceChannel', {selector}, c => c.prototype.handleVoiceConnect);
|
this.GuildVoiceChannel = await ReactComponents.getComponent('GuildVoiceChannel', {selector}, c => c.prototype.handleVoiceConnect);
|
||||||
|
|
||||||
this.unpatchGuildVoiceChannel = MonkeyPatch('BD:ReactComponents', this.GuildVoiceChannel.component.prototype).after('render', this._afterChannelRender);
|
this.unpatchGuildVoiceChannel = MonkeyPatch('BD:ReactComponents', this.GuildVoiceChannel.component.prototype).after('render', this._afterChannelRender);
|
||||||
|
@ -467,7 +467,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchUserProfileModal() {
|
static async patchUserProfileModal() {
|
||||||
const selector = `.${WebpackModules.getClassName('root', 'topSectionNormal')}`;
|
const { selector } = Reflection.resolve('root', 'topSectionNormal');
|
||||||
this.UserProfileModal = await ReactComponents.getComponent('UserProfileModal', {selector}, Filters.byPrototypeFields(['renderHeader', 'renderBadges']));
|
this.UserProfileModal = await ReactComponents.getComponent('UserProfileModal', {selector}, Filters.byPrototypeFields(['renderHeader', 'renderBadges']));
|
||||||
|
|
||||||
this.unpatchUserProfileModal = MonkeyPatch('BD:ReactComponents', this.UserProfileModal.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchUserProfileModal = MonkeyPatch('BD:ReactComponents', this.UserProfileModal.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -482,7 +482,7 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchUserPopout() {
|
static async patchUserPopout() {
|
||||||
const selector = `.${WebpackModules.getClassName('userPopout', 'headerNormal')}`;
|
const { selector } = Reflection.resolve('userPopout', 'headerNormal');
|
||||||
this.UserPopout = await ReactComponents.getComponent('UserPopout', {selector});
|
this.UserPopout = await ReactComponents.getComponent('UserPopout', {selector});
|
||||||
|
|
||||||
this.unpatchUserPopout = MonkeyPatch('BD:ReactComponents', this.UserPopout.component.prototype).after('render', (component, args, retVal) => {
|
this.unpatchUserPopout = MonkeyPatch('BD:ReactComponents', this.UserPopout.component.prototype).after('render', (component, args, retVal) => {
|
||||||
|
@ -501,10 +501,10 @@ export class ReactAutoPatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async patchUploadArea() {
|
static async patchUploadArea() {
|
||||||
const selector = `.${WebpackModules.getClassName('uploadArea')}`;
|
const { selector } = Reflection.resolve('uploadArea');
|
||||||
this.UploadArea = await ReactComponents.getComponent('UploadArea', {selector});
|
this.UploadArea = await ReactComponents.getComponent('UploadArea', {selector});
|
||||||
|
|
||||||
const reflect = Reflection(selector);
|
const reflect = Reflection.DOM(selector);
|
||||||
const stateNode = reflect.getComponentStateNode(this.UploadArea);
|
const stateNode = reflect.getComponentStateNode(this.UploadArea);
|
||||||
const callback = function(e) {
|
const callback = function(e) {
|
||||||
if (!e.dataTransfer.files.length || !e.dataTransfer.files[0].name.endsWith('.bd')) return;
|
if (!e.dataTransfer.files.length || !e.dataTransfer.files[0].name.endsWith('.bd')) return;
|
||||||
|
|
|
@ -37,4 +37,8 @@ export default class Reflection {
|
||||||
static get DOM() {
|
static get DOM() {
|
||||||
return DOM;
|
return DOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static get require() {
|
||||||
|
return Module.require;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Settings, Globals, WebpackModules, ReactComponents, MonkeyPatch, Cache } from 'modules';
|
import { Settings, Globals, Reflection, ReactComponents, MonkeyPatch, Cache } from 'modules';
|
||||||
import { VueInjector } from 'ui';
|
import { VueInjector } from 'ui';
|
||||||
|
|
||||||
import AutocompleteComponent from './components/common/Autocomplete.vue';
|
import AutocompleteComponent from './components/common/Autocomplete.vue';
|
||||||
|
@ -11,7 +11,7 @@ export default new class Autocomplete {
|
||||||
}
|
}
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
this.cta = await ReactComponents.getComponent('ChannelTextArea', { selector: WebpackModules.getSelector('channelTextArea', 'emojiButton') });
|
this.cta = await ReactComponents.getComponent('ChannelTextArea', { selector: Reflection.resolve('channelTextArea', 'emojiButton').selector });
|
||||||
MonkeyPatch('BD:Autocomplete', this.cta.component.prototype).after('render', this.channelTextAreaAfterRender.bind(this));
|
MonkeyPatch('BD:Autocomplete', this.cta.component.prototype).after('render', this.channelTextAreaAfterRender.bind(this));
|
||||||
this.initialized = true;
|
this.initialized = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Module, WebpackModules } from 'modules';
|
import { Module, Reflection } from 'modules';
|
||||||
|
|
||||||
const normalizedPrefix = 'da';
|
const normalizedPrefix = 'da';
|
||||||
const randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);
|
const randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);
|
||||||
|
@ -16,7 +16,7 @@ const randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(
|
||||||
export default class ClassNormaliser extends Module {
|
export default class ClassNormaliser extends Module {
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this.patchClassModules(WebpackModules.getModule(this.moduleFilter.bind(this), false));
|
this.patchClassModules(Reflection.module.getModule(this.moduleFilter.bind(this), false));
|
||||||
this.normalizeElement(document.querySelector('#app-mount'));
|
this.normalizeElement(document.querySelector('#app-mount'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// Imports
|
// Imports
|
||||||
import { WebpackModules } from 'modules';
|
import { Reflection } from 'modules';
|
||||||
import { BdMenu } from 'ui';
|
import { BdMenu } from 'ui';
|
||||||
import { shell } from 'electron';
|
import { shell } from 'electron';
|
||||||
import { MiGithubCircle, MiWeb, MiTwitterCircle, MiDiscord } from '../common';
|
import { MiGithubCircle, MiWeb, MiTwitterCircle, MiDiscord } from '../common';
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
},
|
},
|
||||||
openUserProfileModal(discord_id) {
|
openUserProfileModal(discord_id) {
|
||||||
WebpackModules.getModuleByName('UserProfileModal').open(discord_id);
|
Reflection.modules.UserProfileModal.open(discord_id);
|
||||||
BdMenu.close();
|
BdMenu.close();
|
||||||
},
|
},
|
||||||
openGitHub() {
|
openGitHub() {
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { WebpackModules } from 'modules';
|
|
||||||
export default {
|
export default {
|
||||||
props: ['item'],
|
props: ['item'],
|
||||||
data() {
|
data() {
|
||||||
|
@ -44,7 +43,6 @@
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
resolveThumb() {
|
resolveThumb() {
|
||||||
window.momentTest = WebpackModules;
|
|
||||||
return `${this.item.repository.rawUri}/${this.item.files.previews[0].thumb}`;
|
return `${this.item.repository.rawUri}/${this.item.files.previews[0].thumb}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,8 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { WebpackModules, DiscordApi, Events } from 'modules';
|
import { Reflection, DiscordApi, Events } from 'modules';
|
||||||
let wtf = null;
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Utils, ClientLogger as Logger } from 'common';
|
import { Utils, ClientLogger as Logger } from 'common';
|
||||||
import { ReactComponents, WebpackModules, MonkeyPatch } from 'modules';
|
import { ReactComponents, Reflection, MonkeyPatch } from 'modules';
|
||||||
import { VueInjector, Toasts } from 'ui';
|
import { VueInjector, Toasts } from 'ui';
|
||||||
import CMGroup from './components/contextmenu/Group.vue';
|
import CMGroup from './components/contextmenu/Group.vue';
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ export class DiscordContextMenu {
|
||||||
if (this.patched) return;
|
if (this.patched) return;
|
||||||
this.patched = true;
|
this.patched = true;
|
||||||
const self = this;
|
const self = this;
|
||||||
MonkeyPatch('BD:DiscordCMOCM', WebpackModules.getModuleByProps(['openContextMenu'])).instead('openContextMenu', (_, [e, fn], originalFn) => {
|
MonkeyPatch('BD:DiscordCMOCM', Reflection.module.byProps('openContextMenu')).instead('openContextMenu', (_, [e, fn], originalFn) => {
|
||||||
const overrideFn = function () {
|
const overrideFn = function () {
|
||||||
const res = fn.apply(this, arguments);
|
const res = fn.apply(this, arguments);
|
||||||
if (!res.hasOwnProperty('type')) return res;
|
if (!res.hasOwnProperty('type')) return res;
|
||||||
|
@ -96,7 +96,7 @@ export class DiscordContextMenu {
|
||||||
target,
|
target,
|
||||||
top,
|
top,
|
||||||
left,
|
left,
|
||||||
closeMenu: () => WebpackModules.getModuleByProps(['closeContextMenu']).closeContextMenu(),
|
closeMenu: () => Reflection.module.byProps('closeContextMenu').closeContextMenu(),
|
||||||
items: typeof menu.items === 'function' ? menu.items(target) : menu.items
|
items: typeof menu.items === 'function' ? menu.items(target) : menu.items
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Module, ReactComponents, ReactHelpers, MonkeyPatch, WebpackModules } from 'modules';
|
import { Module, ReactComponents, ReactHelpers, MonkeyPatch, Reflection } from 'modules';
|
||||||
import { Reflection } from 'ui';
|
|
||||||
import { ClientLogger as Logger } from 'common';
|
import { ClientLogger as Logger } from 'common';
|
||||||
import { BdBadge } from './components/bd';
|
import { BdBadge } from './components/bd';
|
||||||
import VueInjector from './vueinjector';
|
import VueInjector from './vueinjector';
|
||||||
|
@ -88,7 +87,7 @@ export default class extends Module {
|
||||||
async patchNameTag() {
|
async patchNameTag() {
|
||||||
if (this.PatchedNameTag) return this.PatchedNameTag;
|
if (this.PatchedNameTag) return this.PatchedNameTag;
|
||||||
|
|
||||||
const selector = `.${WebpackModules.getClassName('nameTag', 'username', 'discriminator', 'ownerIcon')}`;
|
const selector = Reflection.resolve('nameTag', 'username', 'discriminator', 'ownerIcon').selector;
|
||||||
const NameTag = await ReactComponents.getComponent('NameTag', {selector});
|
const NameTag = await ReactComponents.getComponent('NameTag', {selector});
|
||||||
|
|
||||||
this.PatchedNameTag = class extends NameTag.component {
|
this.PatchedNameTag = class extends NameTag.component {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { WebpackModules } from 'modules';
|
import { Reflection } from 'modules';
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
|
||||||
export default class {
|
export default class {
|
||||||
|
@ -37,15 +37,14 @@ export default class {
|
||||||
* @return {React.Element}
|
* @return {React.Element}
|
||||||
*/
|
*/
|
||||||
static createReactElement(component, props, mountAtTop) {
|
static createReactElement(component, props, mountAtTop) {
|
||||||
const React = WebpackModules.getModuleByName('React');
|
const { React } = Reflection.modules;
|
||||||
return React.createElement(this.ReactCompatibility, {component, mountAtTop, props});
|
return React.createElement(this.ReactCompatibility, {component, mountAtTop, props});
|
||||||
}
|
}
|
||||||
|
|
||||||
static get ReactCompatibility() {
|
static get ReactCompatibility() {
|
||||||
if (this._ReactCompatibility) return this._ReactCompatibility;
|
if (this._ReactCompatibility) return this._ReactCompatibility;
|
||||||
|
|
||||||
const React = WebpackModules.getModuleByName('React');
|
const { React, ReactDOM} = Reflection.modules;
|
||||||
const ReactDOM = WebpackModules.getModuleByName('ReactDOM');
|
|
||||||
|
|
||||||
return this._ReactCompatibility = class VueComponent extends React.Component {
|
return this._ReactCompatibility = class VueComponent extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
|
@ -105,12 +104,12 @@ export const ReactComponent = {
|
||||||
return createElement('div');
|
return createElement('div');
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
const { React, ReactDOM } = WebpackModules;
|
const { React, ReactDOM } = Reflection.modules;
|
||||||
|
|
||||||
ReactDOM.unmountComponentAtNode(this.$el);
|
ReactDOM.unmountComponentAtNode(this.$el);
|
||||||
ReactDOM.render(this.reactElement || React.createElement(this.component, this.componentProps, ...(this.componentChildren || [])), this.$el);
|
ReactDOM.render(this.reactElement || React.createElement(this.component, this.componentProps, ...(this.componentChildren || [])), this.$el);
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
WebpackModules.ReactDOM.unmountComponentAtNode(this.$el);
|
Reflection.modules.ReactDOM.unmountComponentAtNode(this.$el);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue