Modules/FreeNitro/index.js

80 lines
2.6 KiB
JavaScript
Raw Normal View History

2021-03-22 13:46:52 +00:00
import * as webpackModules from '@goosemod/webpack';
2021-03-03 09:20:20 +00:00
2021-03-22 13:46:52 +00:00
var searchHook;
2021-03-03 09:20:20 +00:00
var parseHook;
var useEmojiSelectHandlerHook;
2021-03-22 13:46:52 +00:00
const emojisModule = webpackModules.findByProps('getDisambiguatedEmojiContext', 'search');
const messageEmojiParserModule = webpackModules.findByProps(
'parse',
'parsePreprocessor',
'unparse',
);
2021-03-03 09:20:20 +00:00
const emojiPickerModule = webpackModules.findByProps('useEmojiSelectHandler');
let originalFunctions = {
2021-03-22 13:46:52 +00:00
original_search: undefined,
original_parse: undefined,
original_useEmojiSelectHandler: undefined,
2021-03-03 09:20:20 +00:00
};
export default {
2021-03-22 13:46:52 +00:00
goosemodHandlers: {
onImport: async () => {
searchHook = originalFunctions.original_search = emojisModule.search;
emojisModule.search = function () {
return searchHook.apply(this, arguments);
};
2021-03-03 09:20:20 +00:00
2021-03-22 13:46:52 +00:00
parseHook = originalFunctions.original_parse = messageEmojiParserModule.parse;
messageEmojiParserModule.parse = function () {
return parseHook.apply(this, arguments);
};
useEmojiSelectHandlerHook = originalFunctions.original_useEmojiSelectHandler =
emojiPickerModule.useEmojiSelectHandler;
emojiPickerModule.useEmojiSelectHandler = function () {
return useEmojiSelectHandlerHook.apply(this, arguments);
};
searchHook = function () {
let result = originalFunctions.original_search.apply(this, arguments);
result.unlocked.push(...result.locked);
result.locked = [];
return result;
};
parseHook = function () {
let result = originalFunctions.original_parse.apply(this, arguments);
if (result.invalidEmojis.length !== 0) {
for (let emoji of result.invalidEmojis) {
result.content = result.content.replace(
`<${emoji.animated ? 'a' : ''}:${emoji.originalName || emoji.name}:${emoji.id}>`,
`${emoji.url}&size=64&width=16`,
);
}
result.invalidEmojis = [];
}
return result;
};
useEmojiSelectHandlerHook = function (args) {
const { onSelectEmoji, closePopout } = args;
return function (data, state) {
const emoji = data.emoji;
if (emoji != null && emoji.available) {
onSelectEmoji(emoji, state.isFinalSelection);
if (state.isFinalSelection) closePopout();
}
};
};
},
onRemove: async () => {
searchHook = originalFunctions.original_search;
parseHook = originalFunctions.original_parse;
useEmojiSelectHandlerHook = originalFunctions.original_useEmojiSelectHandler;
},
},
2021-03-03 09:20:20 +00:00
};