mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-17 10:27:03 -04:00
Add nitro bypass (#4)
This commit is contained in:
parent
a7ccbcfca4
commit
c3ff092162
11 changed files with 204 additions and 42 deletions
|
@ -1,16 +0,0 @@
|
|||
import definePlugin from "../utils/types";
|
||||
|
||||
export default definePlugin({
|
||||
name: "MessageClicksApi",
|
||||
description: "Api required by anything using message click actions",
|
||||
author: "Vendicated",
|
||||
patches: [{
|
||||
find: "if(e.altKey){",
|
||||
replacement: {
|
||||
match: /\.useClickMessage=function\((.{1,2}),(.{1,2})\).+?function\((.{1,2})\){/,
|
||||
replace: (m, message, channel, event) =>
|
||||
// the message param is shadowed by the event param, so need to alias them
|
||||
`${m.replace("{", `{var _msg=${message};var _chan=${channel};`)}Vencord.Api.MessageClicks._handleClick(_msg, _chan, ${event});`
|
||||
}
|
||||
}]
|
||||
});
|
28
src/plugins/apiMessageEvents.ts
Normal file
28
src/plugins/apiMessageEvents.ts
Normal file
|
@ -0,0 +1,28 @@
|
|||
import definePlugin from "../utils/types";
|
||||
|
||||
export default definePlugin({
|
||||
name: "MessageEventsAPI",
|
||||
description: "Api required by anything using message events.",
|
||||
author: "ArjixWasTaken",
|
||||
patches: [
|
||||
{
|
||||
find: "sendMessage:function",
|
||||
replacement: [{
|
||||
match: /(?<=sendMessage:function\(.{1,2},.{1,2},.{1,2},.{1,2}\)){/,
|
||||
replace: "{Vencord.Api.MessageEvents._handlePreSend(...arguments);"
|
||||
}, {
|
||||
match: /(?<=editMessage:function\(.{1,2},.{1,2},.{1,2}\)){/,
|
||||
replace: "{Vencord.Api.MessageEvents._handlePreEdit(...arguments);"
|
||||
}]
|
||||
},
|
||||
{
|
||||
find: "if(e.altKey){",
|
||||
replacement: {
|
||||
match: /\.useClickMessage=function\((.{1,2}),(.{1,2})\).+?function\((.{1,2})\){/,
|
||||
replace: (m, message, channel, event) =>
|
||||
// the message param is shadowed by the event param, so need to alias them
|
||||
`${m.replace("{", `{var _msg=${message};var _chan=${channel};`)}Vencord.Api.MessageEvents._handleClick(_msg, _chan, ${event});`
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
|
@ -1,4 +1,4 @@
|
|||
import { MessageClicks } from "../api";
|
||||
import { addClickListener } from "../api/MessageEvents";
|
||||
import definePlugin from "../utils/types";
|
||||
import { find, findByProps } from "../webpack";
|
||||
|
||||
|
@ -21,7 +21,7 @@ export default definePlugin({
|
|||
if (e.key === "Backspace") isDeletePressed = false;
|
||||
});
|
||||
|
||||
MessageClicks.addListener((msg, chan, event) => {
|
||||
addClickListener((msg, chan, event) => {
|
||||
const isMe = msg.author.id === getCurrentUser().id;
|
||||
if (!isDeletePressed) {
|
||||
if (isMe && event.detail >= 2) {
|
||||
|
|
58
src/plugins/nitroBypass.ts
Normal file
58
src/plugins/nitroBypass.ts
Normal file
|
@ -0,0 +1,58 @@
|
|||
import { addPreSendListener, addPreEditListener } from "../api/MessageEvents";
|
||||
import { findByProps } from "../utils/webpack";
|
||||
import definePlugin from "../utils/types"
|
||||
|
||||
export default definePlugin({
|
||||
name: "Nitro Bypass",
|
||||
author: "ArjixWasTaken",
|
||||
description: "Allows you to stream in nitro quality and send fake emojis.",
|
||||
patches: [
|
||||
{
|
||||
find: `canUseAnimatedEmojis:function`,
|
||||
replacement: [
|
||||
"canUseAnimatedEmojis",
|
||||
"canUseEmojisEverywhere",
|
||||
"canUseHigherFramerate"
|
||||
].map(func => {
|
||||
return {
|
||||
match: new RegExp(`${func}:function\\(.+?}`),
|
||||
replace: `${func}:function (e) { return true; }`
|
||||
}
|
||||
})
|
||||
},
|
||||
],
|
||||
start() {
|
||||
const { getCustomEmojiById } = findByProps("getCustomEmojiById");
|
||||
|
||||
// Remove any nitro requirements for any of the streaming settings.
|
||||
findByProps("ApplicationStreamPresets")
|
||||
.ApplicationStreamSettingRequirements
|
||||
.forEach(x => {
|
||||
delete x.userPremiumType;
|
||||
delete x.guildPremiumTier
|
||||
});
|
||||
|
||||
addPreSendListener((_, messageObj) => {
|
||||
const guildId = window.location.href.split("channels/")[1].split("/")[0];
|
||||
for (const emoji of messageObj.validNonShortcutEmojis) {
|
||||
if (!emoji.require_colons) continue;
|
||||
if (emoji.guildId === guildId && !emoji.animated) continue;
|
||||
|
||||
const emojiString = `<${emoji.animated ? 'a' : ''}:${emoji.originalName || emoji.name}:${emoji.id}>`;
|
||||
const url = emoji.url.replace(/\?size=[0-9]+/, `?size=48`);
|
||||
messageObj.content = messageObj.content.replace(emojiString, ` ${url} `);
|
||||
}
|
||||
})
|
||||
addPreEditListener((_, __, messageObj) => {
|
||||
const guildId = window.location.href.split("channels/")[1].split("/")[0];
|
||||
|
||||
for (const [emojiStr, _, emojiId] of messageObj.content.matchAll(/(?<!\\)<a?:(\w+):(\d+)>/ig)) {
|
||||
const emoji = getCustomEmojiById(emojiId);
|
||||
if (emoji == null || (emoji.guildId === guildId && !emoji.animated)) continue;
|
||||
|
||||
const url = emoji.url.replace(/\?size=[0-9]+/, `?size=48`);
|
||||
messageObj.content = messageObj.content.replace(emojiStr, ` ${url} `);
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue