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 { 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)`);
|
||||
|
||||
|
@ -21,7 +21,7 @@ export default new class TwentyFourHour extends BuiltinModule {
|
|||
|
||||
async enabled(e) {
|
||||
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) => {
|
||||
const matched = returnValue.match(twelveHour);
|
||||
if (!matched || matched.length != 4) return;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
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 {
|
||||
|
||||
|
@ -18,16 +18,16 @@ export default new class BlockedMessages extends BuiltinModule {
|
|||
}
|
||||
|
||||
static isBlocked(id) {
|
||||
const RelationshipStore = WebpackModules.getModuleByName('RelationshipStore');
|
||||
const { RelationshipStore } = Reflection.modules;
|
||||
return RelationshipStore.isBlocked(id);
|
||||
}
|
||||
|
||||
async enabled(e) {
|
||||
if (Patcher.getPatchesByCaller('BD:BlockedMessages').length) return;
|
||||
const MessageActions = WebpackModules.getModuleByName('MessageActions');
|
||||
const { MessageActions } = Reflection.modules;
|
||||
MonkeyPatch('BD:BlockedMessages', MessageActions).instead('receiveMessage', this.processMessage);
|
||||
|
||||
const MessageListComponents = WebpackModules.getModuleByProps(['BlockedMessageGroup']);
|
||||
const MessageListComponents = Reflection.module.byProps('BlockedMessageGroup');
|
||||
MessageListComponents.OriginalBlockedMessageGroup = MessageListComponents.BlockedMessageGroup;
|
||||
MessageListComponents.BlockedMessageGroup = () => {return null;};
|
||||
this.cancelBlockedMessages = () => {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
import BuiltinModule from './BuiltinModule';
|
||||
|
||||
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 {
|
||||
|
||||
|
@ -44,13 +44,13 @@ export default new class ColoredText extends BuiltinModule {
|
|||
async enabled(e) {
|
||||
if (Patcher.getPatchesByCaller('BD:ColoredText').length) return;
|
||||
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);
|
||||
this.MessageContent.forceUpdateAll();
|
||||
}
|
||||
|
||||
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 roleColor = thisObject.props.message.colorString;
|
||||
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 BuiltinModule from './BuiltinModule';
|
||||
import { WebpackModules, ReactComponents, MonkeyPatch, Patcher, DiscordApi, Security } from 'modules';
|
||||
import { VueInjector, Reflection, Modals, Toasts } from 'ui';
|
||||
import { Reflection, ReactComponents, MonkeyPatch, Patcher, DiscordApi, Security } from 'modules';
|
||||
import { VueInjector, Modals, Toasts } from 'ui';
|
||||
import { ClientLogger as Logger, ClientIPC } from 'common';
|
||||
import { request } from 'vendor';
|
||||
import { Utils } from 'common';
|
||||
|
@ -45,8 +45,7 @@ export default new class E2EE extends BuiltinModule {
|
|||
Events.on('discord:MESSAGE_CREATE', this.handlePublicKey);
|
||||
this.patchDispatcher();
|
||||
this.patchMessageContent();
|
||||
const selector = `.${WebpackModules.getClassName('channelTextArea', 'emojiButton')}`;
|
||||
const cta = await ReactComponents.getComponent('ChannelTextArea', { selector });
|
||||
const cta = await ReactComponents.getComponent('ChannelTextArea', { selector: Reflection.resolve('channelTextArea', 'emojiButton').selector });
|
||||
this.patchChannelTextArea(cta);
|
||||
this.patchChannelTextAreaSubmit(cta);
|
||||
cta.forceUpdateAll();
|
||||
|
@ -188,7 +187,7 @@ export default new class E2EE extends BuiltinModule {
|
|||
if (!ECDH_STORAGE.hasOwnProperty(channelId)) {
|
||||
const publicKeyMessage = `\`\`\`\n-----BEGIN PUBLIC KEY-----\n${this.createKeyExchange(channelId)}\n-----END PUBLIC KEY-----\n\`\`\``;
|
||||
if (this.encryptNewMessages) this.encryptNewMessages = false;
|
||||
WebpackModules.getModuleByName('DraftActions').saveDraft(channelId, publicKeyMessage);
|
||||
Reflection.modules.DraftActions.saveDraft(channelId, publicKeyMessage);
|
||||
}
|
||||
const secret = this.computeSecret(channelId, key);
|
||||
this.setKey(channelId, secret);
|
||||
|
@ -202,7 +201,7 @@ export default new class E2EE extends BuiltinModule {
|
|||
}
|
||||
|
||||
patchDispatcher() {
|
||||
const Dispatcher = WebpackModules.getModuleByName('Dispatcher');
|
||||
const { Dispatcher } = Reflection.modules;
|
||||
MonkeyPatch('BD:E2EE', Dispatcher).before('dispatch', (_, [event]) => {
|
||||
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);
|
||||
} catch (err) { return } // Ignore errors such as non empty
|
||||
|
||||
const MessageParser = WebpackModules.getModuleByName('MessageParser');
|
||||
const Permissions = WebpackModules.getModuleByName('GuildPermissions');
|
||||
const DiscordConstants = WebpackModules.getModuleByName('DiscordConstants');
|
||||
const { MessageParser, Permissions, DiscordConstants } = Reflection.modules;
|
||||
|
||||
const currentChannel = DiscordApi.Channel.fromId(event.message.channel_id).discordObject;
|
||||
|
||||
// Create a generic message object to parse mentions with
|
||||
|
@ -234,11 +232,10 @@ export default new class E2EE extends BuiltinModule {
|
|||
}
|
||||
|
||||
async patchMessageContent() {
|
||||
const selector = `.${WebpackModules.getClassName('container', 'containerCozy', 'containerCompact', 'edited')}`;
|
||||
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector });
|
||||
const MessageContent = await ReactComponents.getComponent('MessageContent', { selector: Reflection.resolve('container', 'containerCozy', 'containerCompact', 'edited').selector });
|
||||
MonkeyPatch('BD:E2EE', MessageContent.component.prototype).before('render', this.beforeRenderMessageContent.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));
|
||||
}
|
||||
|
||||
|
@ -248,10 +245,7 @@ export default new class E2EE extends BuiltinModule {
|
|||
const key = this.getKey(component.props.message.channel_id);
|
||||
if (!key) return; // We don't have a key for this channel
|
||||
|
||||
const Message = WebpackModules.getModuleByPrototypes(['isMentioned']);
|
||||
const MessageParser = WebpackModules.getModuleByName('MessageParser');
|
||||
const Permissions = WebpackModules.getModuleByName('GuildPermissions');
|
||||
const DiscordConstants = WebpackModules.getModuleByName('DiscordConstants');
|
||||
const { Message, MessageParser, Permissions, DiscordConstants } = Reflection.modules;
|
||||
const currentChannel = DiscordApi.Channel.fromId(component.props.message.channel_id).discordObject;
|
||||
|
||||
if (typeof component.props.message.content !== 'string') return; // Ignore any non string content
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<script>
|
||||
import { Utils, FileUtils, ClientIPC } from 'common';
|
||||
import { E2EE } from 'builtin';
|
||||
import { DiscordApi, WebpackModules } from 'modules';
|
||||
import { DiscordApi, Reflection } from 'modules';
|
||||
import { Toasts } from 'ui';
|
||||
import { MiLock, MiImagePlus, MiIcVpnKey } from '../ui/components/common/MaterialIcon';
|
||||
|
||||
|
@ -61,8 +61,8 @@
|
|||
if (!dialogResult || !dialogResult.length) return;
|
||||
|
||||
const readFile = await FileUtils.readFileBuffer(dialogResult[0]);
|
||||
const FileActions = WebpackModules.getModuleByProps(['makeFile']);
|
||||
const Uploader = WebpackModules.getModuleByProps(['instantBatchUpload']);
|
||||
const FileActions = Reflection.module.byProps('makeFile');
|
||||
const Uploader = Reflection.module.byProps('instantBatchUpload');
|
||||
|
||||
const img = await Utils.getImageFromBuffer(readFile);
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
|||
E2EE.preExchangeState = E2EE.encryptNewMessages;
|
||||
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\`\`\``;
|
||||
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');
|
||||
}
|
||||
},
|
||||
|
|
|
@ -13,7 +13,7 @@ import path from 'path';
|
|||
import { request } from 'vendor';
|
||||
|
||||
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 Emote from './EmoteComponent.js';
|
||||
|
@ -79,7 +79,7 @@ export default new class EmoteModule extends BuiltinModule {
|
|||
|
||||
this.patchMessageContent();
|
||||
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));
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@ export default new class EmoteModule extends BuiltinModule {
|
|||
* Patches MessageContent render method
|
||||
*/
|
||||
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));
|
||||
MessageContent.forceUpdateAll();
|
||||
}
|
||||
|
@ -177,8 +177,9 @@ export default new class EmoteModule extends BuiltinModule {
|
|||
* Patches MessageActions send and edit
|
||||
*/
|
||||
patchSendAndEdit() {
|
||||
MonkeyPatch('BD:EMOTEMODULE', WebpackModules.getModuleByName('MessageActions')).instead('sendMessage', this.handleSendMessage.bind(this));
|
||||
MonkeyPatch('BD:EMOTEMODULE', WebpackModules.getModuleByName('MessageActions')).instead('editMessage', this.handleEditMessage.bind(this));
|
||||
const { MessageActions } = Reflection.modules;
|
||||
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);
|
||||
this.addToMostUsed(emote);
|
||||
|
||||
const FileActions = WebpackModules.getModuleByProps(['makeFile']);
|
||||
const Uploader = WebpackModules.getModuleByProps(['instantBatchUpload']);
|
||||
const FileActions = Reflection.module.byProps('makeFile');
|
||||
const Uploader = Reflection.module.byProps('instantBatchUpload');
|
||||
|
||||
request.get(emote.props.src, { encoding: 'binary' }).then(res => {
|
||||
const arr = new Uint8Array(new ArrayBuffer(res.length));
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
import BuiltinModule from './BuiltinModule';
|
||||
import { Patcher, MonkeyPatch, WebpackModules } from 'modules';
|
||||
import { Patcher, MonkeyPatch, Reflection } from 'modules';
|
||||
|
||||
export default new class KillClyde extends BuiltinModule {
|
||||
|
||||
|
@ -19,7 +19,7 @@ export default new class KillClyde extends BuiltinModule {
|
|||
|
||||
async enabled(e) {
|
||||
if (Patcher.getPatchesByCaller('BD:KillClyde').length) return;
|
||||
const MessageActions = WebpackModules.getModuleByName('MessageActions');
|
||||
const { MessageActions } = Reflection.modules;
|
||||
MonkeyPatch('BD:KillClyde', MessageActions).instead('sendBotMessage', void 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
import BuiltinModule from './BuiltinModule';
|
||||
|
||||
import { Patcher, MonkeyPatch, WebpackModules } from 'modules';
|
||||
import { Patcher, MonkeyPatch, Reflection } from 'modules';
|
||||
|
||||
export default new class E2EE extends BuiltinModule {
|
||||
|
||||
|
@ -24,7 +24,7 @@ export default new class E2EE extends BuiltinModule {
|
|||
|
||||
enabled(e) {
|
||||
if (Patcher.getPatchesByCaller('BD:TrackingProtection').length) return;
|
||||
const trackingModule = WebpackModules.getModuleByProps(['track']);
|
||||
const trackingModule = Reflection.module.byProps('track');
|
||||
if (!trackingModule) return; // TODO Log it
|
||||
MonkeyPatch('BD:TrackingProtection', trackingModule).instead('track', this.track);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
import BuiltinModule from './BuiltinModule';
|
||||
import { WebpackModules } from 'modules';
|
||||
import { Reflection } from 'modules';
|
||||
|
||||
export default new class VoiceDisconnect extends BuiltinModule {
|
||||
|
||||
|
@ -22,7 +22,7 @@ export default new class VoiceDisconnect extends BuiltinModule {
|
|||
}
|
||||
|
||||
listener() {
|
||||
const VoiceChannelActions = WebpackModules.getModuleByName('VoiceChannelActions');
|
||||
const { VoiceChannelActions } = Reflection.modules;
|
||||
VoiceChannelActions.selectVoiceChannel(null, null);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
import { DOM, BdUI, BdMenu, Modals, Toasts, Notifications, BdContextMenu, DiscordContextMenu } from 'ui';
|
||||
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 { BuiltinManager, EmoteModule, ReactDevtoolsModule, VueDevtoolsModule, TrackingProtection, E2EE } from 'builtin';
|
||||
import electron from 'electron';
|
||||
|
@ -34,7 +34,7 @@ class BetterDiscord {
|
|||
ModuleManager, PluginManager, ThemeManager, ExtModuleManager,
|
||||
Vendor,
|
||||
|
||||
WebpackModules, Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi,
|
||||
Patcher, MonkeyPatch, ReactComponents, ReactHelpers, ReactAutoPatcher, DiscordApi,
|
||||
EmoteModule,
|
||||
BdWebApi,
|
||||
Connectivity,
|
||||
|
@ -49,7 +49,7 @@ class BetterDiscord {
|
|||
module: Globals.require.cache[__filename],
|
||||
require: Globals.require,
|
||||
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');
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
|
||||
import { List } from 'structs';
|
||||
import { User, Channel, Guild, Message } from 'discordstructs';
|
||||
import { WebpackModules } from './webpackmodules';
|
||||
import Reflection from './reflection/index';
|
||||
|
||||
export const Modules = {
|
||||
_getModule(name) {
|
||||
const foundModule = WebpackModules.getModuleByName(name);
|
||||
const foundModule = Reflection.module.byName(name);
|
||||
if (!foundModule) return null;
|
||||
delete this[name];
|
||||
return this[name] = foundModule;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { WebpackModules } from './webpackmodules';
|
||||
import Reflection from './reflection/index';
|
||||
import { MonkeyPatch } from './patcher';
|
||||
import Events from './events';
|
||||
import EventListener from './eventlistener';
|
||||
|
@ -37,7 +37,7 @@ export default class extends EventListener {
|
|||
}
|
||||
|
||||
hook() {
|
||||
const Events = WebpackModules.getModuleByName('Events');
|
||||
const { Events } = Reflection.modules;
|
||||
MonkeyPatch('BD:EVENTS', Events.prototype).after('emit', (obj, args, retVal) => {
|
||||
const eventId = args.length >= 3 ? args[2].id || -1 : -1;
|
||||
if (eventId === this.ignoreMultiple) return;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* 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';
|
||||
|
||||
/**
|
||||
|
@ -64,7 +64,7 @@ export class Patcher {
|
|||
|
||||
static resolveModule(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;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
import { EmoteModule } from 'builtin';
|
||||
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 { Utils, Filters, ClientLogger as Logger, ClientIPC, AsyncEventEmitter } from 'common';
|
||||
import Settings from './settings';
|
||||
|
@ -19,7 +19,7 @@ import PluginManager from './pluginmanager';
|
|||
import ThemeManager from './thememanager';
|
||||
import Events from './events';
|
||||
import EventsWrapper from './eventswrapper';
|
||||
import { WebpackModules } from './webpackmodules';
|
||||
import Reflection from './reflection/index';
|
||||
import DiscordApi from './discordapi';
|
||||
import { ReactComponents, ReactHelpers } from './reactcomponents';
|
||||
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
|
||||
*/
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
* 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 { MonkeyPatch } from './patcher';
|
||||
import { WebpackModules } from './webpackmodules';
|
||||
import Reflection from './reflection/index';
|
||||
import DiscordApi from './discordapi';
|
||||
|
||||
class Helpers {
|
||||
|
@ -153,11 +153,11 @@ class Helpers {
|
|||
}
|
||||
|
||||
static get React() {
|
||||
return WebpackModules.getModuleByName('React');
|
||||
return Reflection.modules.React;
|
||||
}
|
||||
|
||||
static get ReactDOM() {
|
||||
return WebpackModules.getModuleByName('ReactDOM');
|
||||
return Reflection.modules.ReactDOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ class ReactComponent {
|
|||
forceUpdateAll() {
|
||||
if (!this.important || !this.important.selector) return;
|
||||
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;
|
||||
for (const element of elements) {
|
||||
reflect = Reflection(element);
|
||||
reflect = Reflection.DOM(element);
|
||||
component = filter ? reflect.components.find(filter) : reflect.component;
|
||||
if (component) break;
|
||||
}
|
||||
|
@ -310,7 +310,7 @@ export class ReactAutoPatcher {
|
|||
* Also patches some known components.
|
||||
*/
|
||||
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]));
|
||||
|
||||
|
@ -326,7 +326,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
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.unpatchMessageRender = MonkeyPatch('BD:ReactComponents', this.Message.component.prototype).after('render', (component, args, retVal) => {
|
||||
|
@ -350,7 +350,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
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.unpatchMessageGroupRender = MonkeyPatch('BD:ReactComponents', this.MessageGroup.component.prototype).after('render', (component, args, retVal) => {
|
||||
|
@ -368,7 +368,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
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.unpatchChannelMemberRender = MonkeyPatch('BD:ReactComponents', this.ChannelMember.component.prototype).after('render', (component, args, retVal) => {
|
||||
|
@ -384,7 +384,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
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.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.
|
||||
*/
|
||||
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.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.
|
||||
*/
|
||||
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.unpatchGuildVoiceChannel = MonkeyPatch('BD:ReactComponents', this.GuildVoiceChannel.component.prototype).after('render', this._afterChannelRender);
|
||||
|
@ -467,7 +467,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
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.unpatchUserProfileModal = MonkeyPatch('BD:ReactComponents', this.UserProfileModal.component.prototype).after('render', (component, args, retVal) => {
|
||||
|
@ -482,7 +482,7 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
static async patchUserPopout() {
|
||||
const selector = `.${WebpackModules.getClassName('userPopout', 'headerNormal')}`;
|
||||
const { selector } = Reflection.resolve('userPopout', 'headerNormal');
|
||||
this.UserPopout = await ReactComponents.getComponent('UserPopout', {selector});
|
||||
|
||||
this.unpatchUserPopout = MonkeyPatch('BD:ReactComponents', this.UserPopout.component.prototype).after('render', (component, args, retVal) => {
|
||||
|
@ -501,10 +501,10 @@ export class ReactAutoPatcher {
|
|||
}
|
||||
|
||||
static async patchUploadArea() {
|
||||
const selector = `.${WebpackModules.getClassName('uploadArea')}`;
|
||||
const { selector } = Reflection.resolve('uploadArea');
|
||||
this.UploadArea = await ReactComponents.getComponent('UploadArea', {selector});
|
||||
|
||||
const reflect = Reflection(selector);
|
||||
const reflect = Reflection.DOM(selector);
|
||||
const stateNode = reflect.getComponentStateNode(this.UploadArea);
|
||||
const callback = function(e) {
|
||||
if (!e.dataTransfer.files.length || !e.dataTransfer.files[0].name.endsWith('.bd')) return;
|
||||
|
|
|
@ -37,4 +37,8 @@ export default class Reflection {
|
|||
static get 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 AutocompleteComponent from './components/common/Autocomplete.vue';
|
||||
|
@ -11,7 +11,7 @@ export default new class Autocomplete {
|
|||
}
|
||||
|
||||
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));
|
||||
this.initialized = true;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { Module, WebpackModules } from 'modules';
|
||||
import { Module, Reflection } from 'modules';
|
||||
|
||||
const normalizedPrefix = 'da';
|
||||
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 {
|
||||
|
||||
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'));
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
<script>
|
||||
// Imports
|
||||
import { WebpackModules } from 'modules';
|
||||
import { Reflection } from 'modules';
|
||||
import { BdMenu } from 'ui';
|
||||
import { shell } from 'electron';
|
||||
import { MiGithubCircle, MiWeb, MiTwitterCircle, MiDiscord } from '../common';
|
||||
|
@ -44,7 +44,7 @@
|
|||
e.preventDefault();
|
||||
},
|
||||
openUserProfileModal(discord_id) {
|
||||
WebpackModules.getModuleByName('UserProfileModal').open(discord_id);
|
||||
Reflection.modules.UserProfileModal.open(discord_id);
|
||||
BdMenu.close();
|
||||
},
|
||||
openGitHub() {
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { WebpackModules } from 'modules';
|
||||
export default {
|
||||
props: ['item'],
|
||||
data() {
|
||||
|
@ -44,7 +43,6 @@
|
|||
},
|
||||
methods: {
|
||||
resolveThumb() {
|
||||
window.momentTest = WebpackModules;
|
||||
return `${this.item.repository.rawUri}/${this.item.files.previews[0].thumb}`;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,8 +36,8 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { WebpackModules, DiscordApi, Events } from 'modules';
|
||||
let wtf = null;
|
||||
import { Reflection, DiscordApi, Events } from 'modules';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
*/
|
||||
|
||||
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 CMGroup from './components/contextmenu/Group.vue';
|
||||
|
||||
|
@ -70,7 +70,7 @@ export class DiscordContextMenu {
|
|||
if (this.patched) return;
|
||||
this.patched = true;
|
||||
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 res = fn.apply(this, arguments);
|
||||
if (!res.hasOwnProperty('type')) return res;
|
||||
|
@ -96,7 +96,7 @@ export class DiscordContextMenu {
|
|||
target,
|
||||
top,
|
||||
left,
|
||||
closeMenu: () => WebpackModules.getModuleByProps(['closeContextMenu']).closeContextMenu(),
|
||||
closeMenu: () => Reflection.module.byProps('closeContextMenu').closeContextMenu(),
|
||||
items: typeof menu.items === 'function' ? menu.items(target) : menu.items
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -8,8 +8,7 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { Module, ReactComponents, ReactHelpers, MonkeyPatch, WebpackModules } from 'modules';
|
||||
import { Reflection } from 'ui';
|
||||
import { Module, ReactComponents, ReactHelpers, MonkeyPatch, Reflection } from 'modules';
|
||||
import { ClientLogger as Logger } from 'common';
|
||||
import { BdBadge } from './components/bd';
|
||||
import VueInjector from './vueinjector';
|
||||
|
@ -88,7 +87,7 @@ export default class extends Module {
|
|||
async patchNameTag() {
|
||||
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});
|
||||
|
||||
this.PatchedNameTag = class extends NameTag.component {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import { WebpackModules } from 'modules';
|
||||
import { Reflection } from 'modules';
|
||||
import Vue from 'vue';
|
||||
|
||||
export default class {
|
||||
|
@ -37,15 +37,14 @@ export default class {
|
|||
* @return {React.Element}
|
||||
*/
|
||||
static createReactElement(component, props, mountAtTop) {
|
||||
const React = WebpackModules.getModuleByName('React');
|
||||
const { React } = Reflection.modules;
|
||||
return React.createElement(this.ReactCompatibility, {component, mountAtTop, props});
|
||||
}
|
||||
|
||||
static get ReactCompatibility() {
|
||||
if (this._ReactCompatibility) return this._ReactCompatibility;
|
||||
|
||||
const React = WebpackModules.getModuleByName('React');
|
||||
const ReactDOM = WebpackModules.getModuleByName('ReactDOM');
|
||||
const { React, ReactDOM} = Reflection.modules;
|
||||
|
||||
return this._ReactCompatibility = class VueComponent extends React.Component {
|
||||
render() {
|
||||
|
@ -105,12 +104,12 @@ export const ReactComponent = {
|
|||
return createElement('div');
|
||||
},
|
||||
mounted() {
|
||||
const { React, ReactDOM } = WebpackModules;
|
||||
const { React, ReactDOM } = Reflection.modules;
|
||||
|
||||
ReactDOM.unmountComponentAtNode(this.$el);
|
||||
ReactDOM.render(this.reactElement || React.createElement(this.component, this.componentProps, ...(this.componentChildren || [])), this.$el);
|
||||
},
|
||||
beforeDestroy() {
|
||||
WebpackModules.ReactDOM.unmountComponentAtNode(this.$el);
|
||||
Reflection.modules.ReactDOM.unmountComponentAtNode(this.$el);
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue