Equicord/src/plugins/noReplyMention/index.tsx
union b7f19bbe37
NoReplyMention: add role whitelist / blacklist (#2794)
Co-authored-by: V <vendicated@riseup.net>
2025-09-04 02:41:06 +02:00

88 lines
3.2 KiB
TypeScript

/*
* Vencord, a modification for Discord's desktop app
* Copyright (c) 2022 Vendicated and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import type { Message } from "@vencord/discord-types";
import { ChannelStore, GuildMemberStore } from "@webpack/common";
const settings = definePluginSettings({
userList: {
description:
"List of users to allow or exempt pings for (separated by commas or spaces)",
type: OptionType.STRING,
default: "1234567890123445,1234567890123445",
},
roleList: {
description:
"List of roles to allow or exempt pings for (separated by commas or spaces)",
type: OptionType.STRING,
default: "1234567890123445,1234567890123445",
},
shouldPingListed: {
description: "Behaviour",
type: OptionType.SELECT,
options: [
{
label: "Do not ping the listed users / roles",
value: false,
},
{
label: "Only ping the listed users / roles",
value: true,
default: true,
},
],
},
inverseShiftReply: {
description: "Invert Discord's shift replying behaviour (enable to make shift reply mention user)",
type: OptionType.BOOLEAN,
default: false,
}
});
export default definePlugin({
name: "NoReplyMention",
description: "Disables reply pings by default",
authors: [Devs.DustyAngel47, Devs.rae, Devs.pylix, Devs.outfoxxed],
settings,
shouldMention(message: Message, isHoldingShift: boolean) {
let isListed = settings.store.userList.includes(message.author.id);
const channel = ChannelStore.getChannel(message.channel_id);
if (channel?.guild_id && !isListed) {
const roles = GuildMemberStore.getMember(channel.guild_id, message.author.id)?.roles;
isListed = !!roles && roles.some(role => settings.store.roleList.includes(role));
}
const isExempt = settings.store.shouldPingListed ? isListed : !isListed;
return settings.store.inverseShiftReply ? isHoldingShift !== isExempt : !isHoldingShift && isExempt;
},
patches: [
{
find: ",\"Message\")}function",
replacement: {
match: /:(\i),shouldMention:!(\i)\.shiftKey/,
replace: ":$1,shouldMention:$self.shouldMention($1,$2.shiftKey)"
}
}
],
});