mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-08 22:23:02 -04:00
Fixes For Canary
This commit is contained in:
parent
760d34ddc4
commit
d0a47aa602
7 changed files with 45 additions and 214 deletions
|
@ -11,7 +11,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch
|
||||||
### Extra included plugins
|
### Extra included plugins
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>164 additional plugins</summary>
|
<summary>163 additional plugins</summary>
|
||||||
|
|
||||||
### All Platforms
|
### All Platforms
|
||||||
|
|
||||||
|
@ -144,7 +144,6 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch
|
||||||
- StatusPresets by iamme
|
- StatusPresets by iamme
|
||||||
- SteamStatusSync by niko
|
- SteamStatusSync by niko
|
||||||
- StickerBlocker by Samwich
|
- StickerBlocker by Samwich
|
||||||
- SpoilerMessages by omaw
|
|
||||||
- TalkInReverse by Tolgchu
|
- TalkInReverse by Tolgchu
|
||||||
- TeX by Kyuuhachi
|
- TeX by Kyuuhachi
|
||||||
- TextToSpeech by Samwich
|
- TextToSpeech by Samwich
|
||||||
|
|
|
@ -152,7 +152,7 @@ export default definePlugin({
|
||||||
{
|
{
|
||||||
find: "._areActivitiesExperimentallyHidden=(",
|
find: "._areActivitiesExperimentallyHidden=(",
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /new Date\(\i\):null;/,
|
match: /BOOST_GEM_ICON\}\}\)\)\};/,
|
||||||
replace: "$&if($self.shouldHideUser(this.props.user.id, this.props.channel.id)) return null; "
|
replace: "$&if($self.shouldHideUser(this.props.user.id, this.props.channel.id)) return null; "
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -126,7 +126,6 @@ async function playSound(url: string) {
|
||||||
audio.remove();
|
audio.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "Demonstration",
|
name: "Demonstration",
|
||||||
description: "Plugin for taking theme screenshots - censors identifying images and text.",
|
description: "Plugin for taking theme screenshots - censors identifying images and text.",
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
import { Upload } from "@api/MessageEvents";
|
import { Upload } from "@api/MessageEvents";
|
||||||
import { Settings } from "@api/Settings";
|
import { Settings } from "@api/Settings";
|
||||||
import { spoiler } from "@equicordplugins/spoilerMessages";
|
|
||||||
import { tarExtMatcher } from "@plugins/anonymiseFileNames";
|
import { tarExtMatcher } from "@plugins/anonymiseFileNames";
|
||||||
import { EquicordDevs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { ReporterTestable } from "@utils/types";
|
import definePlugin, { ReporterTestable } from "@utils/types";
|
||||||
|
@ -36,33 +35,30 @@ export default definePlugin({
|
||||||
// Taken from AnonymiseFileNames
|
// Taken from AnonymiseFileNames
|
||||||
{
|
{
|
||||||
find: "instantBatchUpload:",
|
find: "instantBatchUpload:",
|
||||||
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled && !Settings.plugins.SpoilerMessages,
|
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /uploadFiles:(\i),/,
|
match: /uploadFiles:(\i),/,
|
||||||
replace:
|
replace:
|
||||||
"uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=$self.fixExt(f)),$1(...args)),",
|
"uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=$self.fixExt(f)),$1(...args)),",
|
||||||
},
|
},
|
||||||
|
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled,
|
||||||
},
|
},
|
||||||
// Also taken from AnonymiseFileNames
|
// Also taken from AnonymiseFileNames
|
||||||
{
|
{
|
||||||
find: 'addFilesTo:"message.attachments"',
|
find: 'addFilesTo:"message.attachments"',
|
||||||
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled && !Settings.plugins.SpoilerMessages,
|
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /(\i.uploadFiles\((\i),)/,
|
match: /(\i.uploadFiles\((\i),)/,
|
||||||
replace: "$2.forEach(f=>f.filename=$self.fixExt(f)),$1",
|
replace: "$2.forEach(f=>f.filename=$self.fixExt(f)),$1",
|
||||||
},
|
},
|
||||||
|
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled,
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
fixExt(upload: ExtUpload) {
|
fixExt(upload: ExtUpload) {
|
||||||
const file = upload.filename;
|
const file = upload.filename;
|
||||||
const tarMatch = tarExtMatcher.exec(file);
|
const tarMatch = tarExtMatcher.exec(file);
|
||||||
const extIdx = tarMatch?.index ?? file.lastIndexOf(".");
|
const extIdx = tarMatch?.index ?? file.lastIndexOf(".");
|
||||||
let fileName = extIdx !== -1 ? file.substring(0, extIdx) : "";
|
const fileName = extIdx !== -1 ? file.substring(0, extIdx) : "";
|
||||||
const ext = extIdx !== -1 ? file.slice(extIdx) : "";
|
const ext = extIdx !== -1 ? file.slice(extIdx) : "";
|
||||||
const newExt = reverseExtensionMap[ext] || ext;
|
const newExt = reverseExtensionMap[ext] || ext;
|
||||||
if (Settings.plugins.SpoilerMessages.enabled) {
|
|
||||||
fileName = spoiler(upload);
|
|
||||||
}
|
|
||||||
|
|
||||||
return fileName + newExt;
|
return fileName + newExt;
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,181 +0,0 @@
|
||||||
/*
|
|
||||||
* Vencord, a Discord client mod
|
|
||||||
* Copyright (c) 2024 Vendicated and contributors
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { addChatBarButton, ChatBarButton, ChatBarButtonFactory, removeChatBarButton } from "@api/ChatButtons";
|
|
||||||
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";
|
|
||||||
import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/ContextMenu";
|
|
||||||
import { addMessagePreSendListener, removeMessagePreSendListener, Upload } from "@api/MessageEvents";
|
|
||||||
import { definePluginSettings, Settings } from "@api/Settings";
|
|
||||||
import { reverseExtensionMap } from "@equicordplugins/fixFileExtensions";
|
|
||||||
import { tarExtMatcher } from "@plugins/anonymiseFileNames";
|
|
||||||
import { Devs, EquicordDevs } from "@utils/constants";
|
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
|
||||||
import { Menu, React } from "@webpack/common";
|
|
||||||
|
|
||||||
// thnx signature / anonymize code
|
|
||||||
type SpoilUpload = Upload;
|
|
||||||
const settings = definePluginSettings(
|
|
||||||
{
|
|
||||||
spoilerWords: {
|
|
||||||
type: OptionType.BOOLEAN,
|
|
||||||
default: true,
|
|
||||||
description: "This will add a spoiler for every word within the message / attachments.",
|
|
||||||
restartNeeded: true,
|
|
||||||
},
|
|
||||||
showIcon: {
|
|
||||||
type: OptionType.BOOLEAN,
|
|
||||||
default: true,
|
|
||||||
description: "Show an icon for toggling the plugin in the chat bar",
|
|
||||||
restartNeeded: true,
|
|
||||||
},
|
|
||||||
contextMenu: {
|
|
||||||
type: OptionType.BOOLEAN,
|
|
||||||
description: "Add option to toggle the functionality in the chat input context menu",
|
|
||||||
default: true
|
|
||||||
},
|
|
||||||
isEnabled: {
|
|
||||||
type: OptionType.BOOLEAN,
|
|
||||||
description: "Toggle functionality",
|
|
||||||
default: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const SpoilerToggle: ChatBarButtonFactory = ({ isMainChat }) => {
|
|
||||||
const { isEnabled, showIcon } = settings.use(["isEnabled", "showIcon"]);
|
|
||||||
const toggle = () => settings.store.isEnabled = !settings.store.isEnabled;
|
|
||||||
|
|
||||||
if (!isMainChat || !showIcon) return null;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<ChatBarButton
|
|
||||||
tooltip={isEnabled ? "Disable Spoiler Message" : "Enable Spoiler Message"}
|
|
||||||
onClick={toggle}
|
|
||||||
>
|
|
||||||
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style={{ scale: "1" }}>
|
|
||||||
<path fill="currentColor" mask="url(#spoiler-msg-mask)" d="M21.7 2.3a1 1 0 0 1 0 1.4l-4.92 4.93c-.12.12-.33.09-.41-.06-.23-.42-.52-.8-.85-1.13a.26.26 0 0 1-.01-.36l4.78-4.79a1 1 0 0 1 1.42 0ZM20 20.6c0 .26.36.45.55.27l1.16-1.16a1 1 0 0 0-1.42-1.42l-.4.41a.25.25 0 0 0-.07.24c.12.53.18 1.09.18 1.66ZM4 20.6c0 .2.02.4.05.6a.26.26 0 0 1-.07.23l-.27.28a1 1 0 0 1-1.42-1.42l1.35-1.34c.19-.19.53.01.48.27-.08.45-.12.91-.12 1.38ZM16.7 3.7l-2.58 2.6a.26.26 0 0 1-.28.05A4.99 4.99 0 0 0 12 6c-.15 0-.23-.18-.13-.29L15.3 2.3a1 1 0 1 1 1.42 1.42ZM7 11c0-.15-.18-.23-.29-.13L2.3 15.3a1 1 0 1 0 1.42 1.42l3.58-3.6c.08-.06.1-.17.06-.27A4.99 4.99 0 0 1 7 11ZM18.23 15.36c-.1.1-.1.24-.02.35.32.37.6.77.83 1.2.09.14.29.18.41.05l2.26-2.25a1 1 0 0 0-1.42-1.42l-2.06 2.07ZM21.7 9.7l-4.62 4.64a.26.26 0 0 1-.33.03l-.45-.3a.27.27 0 0 1-.09-.37c.38-.6.64-1.27.74-2 0-.05.03-.1.07-.14L20.3 8.3a1 1 0 1 1 1.42 1.42ZM11.7 2.3a1 1 0 0 1 0 1.4l-8 8a1 1 0 0 1-1.4-1.4l8-8a1 1 0 0 1 1.4 0ZM6.7 3.7a1 1 0 0 0-1.4-1.4l-3 3a1 1 0 0 0 1.4 1.4l3-3ZM15 11a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM6 20.6c0-3.1 2.5-5.6 5.6-5.6h.8c3.1 0 5.6 2.5 5.6 5.6 0 .77-.63 1.4-1.4 1.4a.17.17 0 0 1-.16-.12c-.19-.7-.44-1.36-.68-1.89-.11-.24-.43-.15-.4.12l.08.8a1 1 0 0 1-1 1.09H9.55a1 1 0 0 1-.99-1.1l.08-.79c.03-.27-.29-.36-.4-.12-.24.53-.5 1.19-.68 1.89a.17.17 0 0 1-.16.12A1.4 1.4 0 0 1 6 20.6Z" transform="translate(2, 3)" />
|
|
||||||
{isEnabled && (
|
|
||||||
<>
|
|
||||||
<mask id="spoiler-msg-mask">
|
|
||||||
<path fill="#fff" d="M0 0h24v24H0Z"></path>
|
|
||||||
<path stroke="#000" strokeWidth="5.99068" d="M0 24 24 0" transform="translate(-2, -3)"></path>
|
|
||||||
</mask>
|
|
||||||
<path fill="var(--status-danger)" d="m21.178 1.70703 1.414 1.414L4.12103 21.593l-1.414-1.415L21.178 1.70703Z" />
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</svg>
|
|
||||||
</ChatBarButton>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleMessage = (channelId, msg) => {
|
|
||||||
if (!settings.store.isEnabled || settings.store.isEnabled && msg.content.trim() === "") {
|
|
||||||
msg.content = msg.content;
|
|
||||||
} else if (settings.store.isEnabled && settings.store.spoilerWords) {
|
|
||||||
msg.content = msg.content.split(/(\s+)/).map(word => word.trim() ? `||${word}||` : word).join("");
|
|
||||||
} else {
|
|
||||||
msg.content = textProcessing(msg.content);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const ChatBarContextCheckbox: NavContextMenuPatchCallback = children => {
|
|
||||||
const { isEnabled, contextMenu } = settings.use(["isEnabled", "contextMenu"]);
|
|
||||||
if (!contextMenu) return;
|
|
||||||
|
|
||||||
const group = findGroupChildrenByChildId("submit-button", children);
|
|
||||||
|
|
||||||
if (!group) return;
|
|
||||||
|
|
||||||
const idx = group.findIndex(c => c?.props?.id === "submit-button");
|
|
||||||
|
|
||||||
group.splice(idx + 1, 0,
|
|
||||||
<Menu.MenuCheckboxItem
|
|
||||||
id="vc-Spoiler"
|
|
||||||
label="Enable Spoiler"
|
|
||||||
checked={isEnabled}
|
|
||||||
action={() => settings.store.isEnabled = !settings.store.isEnabled}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export function spoiler(upload: SpoilUpload) {
|
|
||||||
const file = upload.filename;
|
|
||||||
const tarMatch = tarExtMatcher.exec(file);
|
|
||||||
const extIdx = tarMatch?.index ?? file.lastIndexOf(".");
|
|
||||||
const fileName = extIdx !== -1 ? file.substring(0, extIdx) : "";
|
|
||||||
let ext = extIdx !== -1 ? file.slice(extIdx) : "";
|
|
||||||
if (Settings.plugins.FixFileExtensions.enabled) {
|
|
||||||
ext = reverseExtensionMap[ext] || ext;
|
|
||||||
}
|
|
||||||
if (settings.store.isEnabled) return "SPOILER_" + fileName + ext;
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default definePlugin({
|
|
||||||
name: "SpoilerMessages",
|
|
||||||
description: "Automatically turn all your messages / attachments into a spoiler.",
|
|
||||||
authors: [Devs.Ven, Devs.Rini, Devs.ImBanana, Devs.fawn, EquicordDevs.KrystalSkull, EquicordDevs.omaw],
|
|
||||||
dependencies: ["MessageEventsAPI", "ChatInputButtonAPI"],
|
|
||||||
patches: [
|
|
||||||
{
|
|
||||||
find: "instantBatchUpload:",
|
|
||||||
replacement: {
|
|
||||||
match: /uploadFiles:(\i),/,
|
|
||||||
replace:
|
|
||||||
"uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=$self.spoiler(f)),$1(...args)),",
|
|
||||||
},
|
|
||||||
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled && !Settings.plugins.FixFileExtensions,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
find: 'addFilesTo:"message.attachments"',
|
|
||||||
replacement: {
|
|
||||||
match: /(\i.uploadFiles\((\i),)/,
|
|
||||||
replace: "$2.forEach(f=>f.filename=$self.spoiler(f)),$1"
|
|
||||||
},
|
|
||||||
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled && !Settings.plugins.FixFileExtensions,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
spoiler,
|
|
||||||
start: () => {
|
|
||||||
if (settings.store.isEnabled) true;
|
|
||||||
addChatBarButton("Spoiler", SpoilerToggle);
|
|
||||||
addMessagePreSendListener(handleMessage);
|
|
||||||
},
|
|
||||||
stop: () => {
|
|
||||||
if (settings.store.isEnabled) false;
|
|
||||||
removeChatBarButton("Spoiler");
|
|
||||||
removeMessagePreSendListener(handleMessage);
|
|
||||||
|
|
||||||
},
|
|
||||||
settings,
|
|
||||||
contextMenus: {
|
|
||||||
"textarea-context": ChatBarContextCheckbox
|
|
||||||
},
|
|
||||||
commands: [{
|
|
||||||
name: "Spoiler",
|
|
||||||
description: "Toggle your spoiler",
|
|
||||||
inputType: ApplicationCommandInputType.BUILT_IN,
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
name: "value",
|
|
||||||
description: "Toggle your Spoiler (default is toggle)",
|
|
||||||
required: false,
|
|
||||||
type: ApplicationCommandOptionType.BOOLEAN,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
execute: async (args, ctx) => {
|
|
||||||
settings.store.isEnabled = !!findOption(args, "value", !settings.store.isEnabled);
|
|
||||||
sendBotMessage(ctx.channel.id, {
|
|
||||||
content: settings.store.isEnabled ? "Spoiler enabled!" : "Spoiler disabled!",
|
|
||||||
});
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
});
|
|
||||||
|
|
||||||
// text processing injection processor
|
|
||||||
function textProcessing(input: string) {
|
|
||||||
return `||${input}||`;
|
|
||||||
}
|
|
|
@ -16,11 +16,11 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";
|
||||||
import { Upload } from "@api/MessageEvents";
|
import { Upload } from "@api/MessageEvents";
|
||||||
import { definePluginSettings, Settings } from "@api/Settings";
|
import { definePluginSettings, Settings } from "@api/Settings";
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { reverseExtensionMap } from "@equicordplugins/fixFileExtensions";
|
import { reverseExtensionMap } from "@equicordplugins/fixFileExtensions";
|
||||||
import { spoiler } from "@equicordplugins/spoilerMessages";
|
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { findByCodeLazy, findByPropsLazy } from "@webpack";
|
import { findByCodeLazy, findByPropsLazy } from "@webpack";
|
||||||
|
@ -65,6 +65,11 @@ const settings = definePluginSettings({
|
||||||
default: "image",
|
default: "image",
|
||||||
disabled: () => settings.store.method !== Methods.Consistent,
|
disabled: () => settings.store.method !== Methods.Consistent,
|
||||||
},
|
},
|
||||||
|
spoilerMessages: {
|
||||||
|
description: "Spoiler messages",
|
||||||
|
type: OptionType.BOOLEAN,
|
||||||
|
default: false,
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
|
@ -119,15 +124,15 @@ export default definePlugin({
|
||||||
const file = upload.filename;
|
const file = upload.filename;
|
||||||
const tarMatch = tarExtMatcher.exec(file);
|
const tarMatch = tarExtMatcher.exec(file);
|
||||||
const extIdx = tarMatch?.index ?? file.lastIndexOf(".");
|
const extIdx = tarMatch?.index ?? file.lastIndexOf(".");
|
||||||
let fileName = extIdx !== -1 ? file.substring(0, extIdx) : "";
|
const fileName = extIdx !== -1 ? file.substring(0, extIdx) : "";
|
||||||
let ext = extIdx !== -1 ? file.slice(extIdx) : "";
|
let ext = extIdx !== -1 ? file.slice(extIdx) : "";
|
||||||
|
const addSpoilerPrefix = (str: string) => settings.store.spoilerMessages ? "SPOILER_" + str : str;
|
||||||
|
|
||||||
if (Settings.plugins.FixFileExtensions.enabled) {
|
if (Settings.plugins.FixFileExtensions.enabled) {
|
||||||
ext = reverseExtensionMap[ext] || ext;
|
ext = reverseExtensionMap[ext] || ext;
|
||||||
}
|
}
|
||||||
if (Settings.plugins.SpoilerMessages.enabled) {
|
|
||||||
fileName = spoiler(upload);
|
if ((upload.anonymise ?? settings.store.anonymiseByDefault) === false) return addSpoilerPrefix(fileName + ext);
|
||||||
}
|
|
||||||
if ((upload.anonymise ?? settings.store.anonymiseByDefault) === false) return fileName + ext;
|
|
||||||
|
|
||||||
switch (settings.store.method) {
|
switch (settings.store.method) {
|
||||||
case Methods.Random:
|
case Methods.Random:
|
||||||
|
@ -136,20 +141,31 @@ export default definePlugin({
|
||||||
{ length: settings.store.randomisedLength },
|
{ length: settings.store.randomisedLength },
|
||||||
() => chars[Math.floor(Math.random() * chars.length)]
|
() => chars[Math.floor(Math.random() * chars.length)]
|
||||||
).join("") + ext;
|
).join("") + ext;
|
||||||
if (Settings.plugins.SpoilerMessages.enabled) {
|
return addSpoilerPrefix(returnedName);
|
||||||
return "SPOILER_" + returnedName;
|
|
||||||
}
|
|
||||||
return returnedName;
|
|
||||||
case Methods.Consistent:
|
case Methods.Consistent:
|
||||||
if (Settings.plugins.SpoilerMessages.enabled) {
|
return addSpoilerPrefix(settings.store.consistent + ext);
|
||||||
return "SPOILER_" + settings.store.consistent + ext;
|
|
||||||
}
|
|
||||||
return settings.store.consistent + ext;
|
|
||||||
case Methods.Timestamp:
|
case Methods.Timestamp:
|
||||||
if (Settings.plugins.SpoilerMessages.enabled) {
|
return addSpoilerPrefix(Date.now().toString() + ext);
|
||||||
return "SPOILER_" + Date.now() + ext;
|
|
||||||
}
|
|
||||||
return Date.now() + ext;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
commands: [{
|
||||||
|
name: "Spoiler",
|
||||||
|
description: "Toggle your spoiler",
|
||||||
|
inputType: ApplicationCommandInputType.BUILT_IN,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: "value",
|
||||||
|
description: "Toggle your Spoiler (default is toggle)",
|
||||||
|
required: false,
|
||||||
|
type: ApplicationCommandOptionType.BOOLEAN,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
execute: async (args, ctx) => {
|
||||||
|
settings.store.spoilerMessages = !!findOption(args, "value", !settings.store.spoilerMessages);
|
||||||
|
sendBotMessage(ctx.channel.id, {
|
||||||
|
content: settings.store.spoilerMessages ? "Spoiler enabled!" : "Spoiler disabled!",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}],
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,15 +9,17 @@ import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "DisableDeepLinks",
|
name: "DisableDeepLinks",
|
||||||
description: "Disables Discord stupid DeepLinks experiment which makes the app unusable",
|
description: "Disables Discord's stupid deep linking feature which tries to force you to use their Desktop App",
|
||||||
authors: [Devs.Ven],
|
authors: [Devs.Ven],
|
||||||
required: true,
|
required: true,
|
||||||
|
|
||||||
|
noop: () => { },
|
||||||
|
|
||||||
patches: [{
|
patches: [{
|
||||||
find: "2025-03_desktop_deeplinks",
|
find: /\.openNativeAppModal\(.{0,50}?\.DEEP_LINK/,
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /config:{enabled:!0/,
|
match: /\i\.\i\.openNativeAppModal/,
|
||||||
replace: "config:{enabled:!1",
|
replace: "$self.noop",
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
});
|
});
|
Loading…
Add table
Add a link
Reference in a new issue