feat(NoAutoReplyMention): Inverse shift reply behaviour (#839)
Co-authored-by: V <vendicated@riseup.net>
This commit is contained in:
parent
613fa9a57b
commit
c4a3d25d37
3 changed files with 67 additions and 31 deletions
|
@ -16,43 +16,43 @@
|
||||||
* 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 { Settings } from "@api/settings";
|
import { definePluginSettings } from "@api/settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
import type { Message } from "discord-types/general";
|
||||||
|
|
||||||
interface Reply {
|
const settings = definePluginSettings({
|
||||||
message: {
|
exemptList: {
|
||||||
author: {
|
description:
|
||||||
id: string;
|
"List of users to exempt from this plugin (separated by commas or spaces)",
|
||||||
};
|
type: OptionType.STRING,
|
||||||
};
|
default: "1234567890123445,1234567890123445",
|
||||||
}
|
},
|
||||||
|
inverseShiftReply: {
|
||||||
|
description: "Invert Discord's shift replying behaviour (enable to make shift reply mention user)",
|
||||||
|
type: OptionType.BOOLEAN,
|
||||||
|
default: false,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "NoReplyMention",
|
name: "NoReplyMention",
|
||||||
description: "Disables reply pings by default",
|
description: "Disables reply pings by default",
|
||||||
authors: [Devs.DustyAngel47, Devs.axyie],
|
authors: [Devs.DustyAngel47, Devs.axyie, Devs.pylix],
|
||||||
options: {
|
settings,
|
||||||
exemptList: {
|
|
||||||
description:
|
shouldMention(message: Message, isHoldingShift: boolean) {
|
||||||
"List of users to exempt from this plugin (separated by commas)",
|
const isExempt = settings.store.exemptList.includes(message.author.id);
|
||||||
type: OptionType.STRING,
|
return settings.store.inverseShiftReply ? isHoldingShift !== isExempt : !isHoldingShift && isExempt;
|
||||||
default: "1234567890123445,1234567890123445",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
shouldMention(reply: Reply) {
|
|
||||||
return Settings.plugins.NoReplyMention.exemptList.includes(
|
|
||||||
reply.message.author.id
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: "CREATE_PENDING_REPLY:function",
|
find: ",\"Message\")}function",
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /CREATE_PENDING_REPLY:function\((.{1,2})\){/,
|
match: /:(\i),shouldMention:!(\i)\.shiftKey/,
|
||||||
replace:
|
replace: ":$1,shouldMention:$self.shouldMention($1,$2.shiftKey)"
|
||||||
"CREATE_PENDING_REPLY:function($1){$1.shouldMention=$self.shouldMention($1);",
|
}
|
||||||
},
|
}
|
||||||
},
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* 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 { migratePluginSettings } from "@api/settings";
|
import { definePluginSettings, migratePluginSettings, Settings } from "@api/settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { findByPropsLazy } from "@webpack";
|
import { findByPropsLazy } from "@webpack";
|
||||||
import { ChannelStore, FluxDispatcher as Dispatcher, MessageStore, SelectedChannelStore, UserStore } from "@webpack/common";
|
import { ChannelStore, FluxDispatcher as Dispatcher, MessageStore, SelectedChannelStore, UserStore } from "@webpack/common";
|
||||||
import { Message } from "discord-types/general";
|
import { Message } from "discord-types/general";
|
||||||
|
@ -31,10 +31,33 @@ let editIdx = -1;
|
||||||
|
|
||||||
migratePluginSettings("QuickReply", "InteractionKeybinds");
|
migratePluginSettings("QuickReply", "InteractionKeybinds");
|
||||||
|
|
||||||
|
const enum MentionOptions {
|
||||||
|
DISABLED,
|
||||||
|
ENABLED,
|
||||||
|
NO_REPLY_MENTION_PLUGIN
|
||||||
|
}
|
||||||
|
|
||||||
|
const settings = definePluginSettings({
|
||||||
|
shouldMention: {
|
||||||
|
type: OptionType.SELECT,
|
||||||
|
description: "Ping reply by default",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
label: "Follow NoReplyMention",
|
||||||
|
value: MentionOptions.NO_REPLY_MENTION_PLUGIN,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
{ label: "Enabled", value: MentionOptions.ENABLED },
|
||||||
|
{ label: "Disabled", value: MentionOptions.DISABLED },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "QuickReply",
|
name: "QuickReply",
|
||||||
authors: [Devs.obscurity, Devs.Ven],
|
authors: [Devs.obscurity, Devs.Ven, Devs.pylix],
|
||||||
description: "Reply to (ctrl + up/down) and edit (ctrl + shift + up/down) messages via keybinds",
|
description: "Reply to (ctrl + up/down) and edit (ctrl + shift + up/down) messages via keybinds",
|
||||||
|
settings,
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
Dispatcher.subscribe("DELETE_PENDING_REPLY", onDeletePendingReply);
|
Dispatcher.subscribe("DELETE_PENDING_REPLY", onDeletePendingReply);
|
||||||
|
@ -137,6 +160,14 @@ function getNextMessage(isUp: boolean, isReply: boolean) {
|
||||||
return i === - 1 ? undefined : messages[messages.length - i - 1];
|
return i === - 1 ? undefined : messages[messages.length - i - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function shouldMention() {
|
||||||
|
switch (settings.store.shouldMention) {
|
||||||
|
case MentionOptions.NO_REPLY_MENTION_PLUGIN: return !Settings.plugins.NoReplyMention.enabled;
|
||||||
|
case MentionOptions.DISABLED: return false;
|
||||||
|
default: return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// handle next/prev reply
|
// handle next/prev reply
|
||||||
function nextReply(isUp: boolean) {
|
function nextReply(isUp: boolean) {
|
||||||
const message = getNextMessage(isUp, true);
|
const message = getNextMessage(isUp, true);
|
||||||
|
@ -149,11 +180,12 @@ function nextReply(isUp: boolean) {
|
||||||
|
|
||||||
const channel = ChannelStore.getChannel(message.channel_id);
|
const channel = ChannelStore.getChannel(message.channel_id);
|
||||||
const meId = UserStore.getCurrentUser().id;
|
const meId = UserStore.getCurrentUser().id;
|
||||||
|
|
||||||
Dispatcher.dispatch({
|
Dispatcher.dispatch({
|
||||||
type: "CREATE_PENDING_REPLY",
|
type: "CREATE_PENDING_REPLY",
|
||||||
channel,
|
channel,
|
||||||
message,
|
message,
|
||||||
shouldMention: true,
|
shouldMention: shouldMention(),
|
||||||
showMentionToggle: channel.guild_id !== null && message.author.id !== meId,
|
showMentionToggle: channel.guild_id !== null && message.author.id !== meId,
|
||||||
_isQuickReply: true
|
_isQuickReply: true
|
||||||
});
|
});
|
||||||
|
|
|
@ -253,5 +253,9 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
AutumnVN: {
|
AutumnVN: {
|
||||||
name: "AutumnVN",
|
name: "AutumnVN",
|
||||||
id: 393694671383166998n
|
id: 393694671383166998n
|
||||||
|
},
|
||||||
|
pylix: {
|
||||||
|
name: "pylix",
|
||||||
|
id: 492949202121261067n
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue