diff --git a/client/src/builtin/EmoteModule.js b/client/src/builtin/EmoteModule.js index a967ab60..1e96d5ac 100644 --- a/client/src/builtin/EmoteModule.js +++ b/client/src/builtin/EmoteModule.js @@ -21,7 +21,12 @@ export default class { static observe() { Events.on('server-switch', this.injectAll.bind(this)); Events.on('channel-switch', this.injectAll.bind(this)); - Events.on('new-message', e => console.log(e)); // TODO + Events.on('discord:MESSAGE_CREATE', e => { + // Assume that it's the last one for now since the event doesn't give the element + const query = document.querySelectorAll('.markup:not(.mutable)'); + if (!query) return; + this.injectMarkup(query[query.length - 1], true); + }); // TODO } static injectAll() { @@ -60,6 +65,7 @@ export default class { if (cn.className && cn.className.includes('mutable')) cc = cn; } if (cc) sibling.parentElement.removeChild(cc); + if (markup === true) markup = this.cloneMarkup(sibling); markup.clone = this.injectEmotes(markup.clone); sibling.parentElement.insertBefore(markup.clone, sibling); sibling.classList.add('shadow'); diff --git a/client/src/index.js b/client/src/index.js index d7938b7f..2a3da2cb 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -28,7 +28,7 @@ class BetterDiscord { window.bdmodals = Modals; window.bdlogs = Logger; window.emotes = EmoteModule; - + EmoteModule.observe(); DOM.injectStyle(BdCss, 'bdmain'); Events.on('global-ready', this.globalReady.bind(this)); } diff --git a/client/src/modules/eventhook.js b/client/src/modules/eventhook.js index 399fa6ac..54a69b43 100644 --- a/client/src/modules/eventhook.js +++ b/client/src/modules/eventhook.js @@ -11,6 +11,7 @@ import EventListener from './eventlistener'; import { Utils } from 'common'; import Events from './events'; +import WebpackModules from './webpackmodules'; import { MESSAGE_CREATE @@ -23,6 +24,10 @@ import { */ export default class extends EventListener { + init() { + this.hook(); + } + bindings() { this.hook = this.hook.bind(this); } @@ -33,9 +38,19 @@ export default class extends EventListener { ]; } - hook() {} + hook() { + const self = this; + const orig = this.eventsModule.prototype.emit; + this.eventsModule.prototype.emit = function (...args) { + orig.call(this, ...args); + self.wsc = this; + self.emit(...args); + } + } - get eventsModule() {} + get eventsModule() { + return WebpackModules.getModuleByPrototypes(['setMaxListeners', 'emit']); + } /** * Discord emit overload @@ -58,7 +73,7 @@ export default class extends EventListener { dispatch(e, d) { Events.emit('raw-event', { type: e, data: d }); - + let evt = null; switch (e) { case this.actions.READ: Events.emit('discord-ready'); @@ -74,7 +89,7 @@ export default class extends EventListener { }); break; case this.actions.MESSAGE_CREATE: - Events.emit('discord-event', { type: e, data: new MESSAGE_CREATE(d) }); + evt = { type: e, data: new MESSAGE_CREATE(d) }; break; case 'k': Events.emit('discord-event', { @@ -86,6 +101,7 @@ export default class extends EventListener { break; } + if (evt !== null) Events.emit(`discord:${evt.type}`, evt); } /**