|
|
|
@ -4,20 +4,44 @@
|
|
|
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import { definePluginSettings } from "@api/Settings";
|
|
|
|
|
import { Devs } from "@utils/constants";
|
|
|
|
|
import definePlugin from "@utils/types";
|
|
|
|
|
import { ChannelStore, ReadStateStore } from "@webpack/common";
|
|
|
|
|
import { Message } from "discord-types/general";
|
|
|
|
|
import definePlugin, { OptionType } from "@utils/types";
|
|
|
|
|
import { ChannelStore, ReadStateStore, UserStore } from "@webpack/common";
|
|
|
|
|
import { MessageJSON } from "discord-types/general";
|
|
|
|
|
|
|
|
|
|
const enum ChannelType {
|
|
|
|
|
DM = 1,
|
|
|
|
|
GROUP_DM = 3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const settings = definePluginSettings({
|
|
|
|
|
channelToAffect: {
|
|
|
|
|
type: OptionType.SELECT,
|
|
|
|
|
description: "Select the type of DM for the plugin to affect",
|
|
|
|
|
options: [
|
|
|
|
|
{ label: "Both", value: "both_dms", default: true },
|
|
|
|
|
{ label: "User DMs", value: "user_dm" },
|
|
|
|
|
{ label: "Group DMs", value: "group_dm" },
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
allowMentions: {
|
|
|
|
|
type: OptionType.BOOLEAN,
|
|
|
|
|
description: "Receive audio pings for @mentions",
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
allowEveryone: {
|
|
|
|
|
type: OptionType.BOOLEAN,
|
|
|
|
|
description: "Receive audio pings for @everyone and @here in group DMs",
|
|
|
|
|
default: false,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export default definePlugin({
|
|
|
|
|
name: "OnePingPerDM",
|
|
|
|
|
description: "If unread messages are sent by a user in DMs multiple times, you'll only receive one audio ping. Read the messages to reset the limit",
|
|
|
|
|
authors: [Devs.ProffDea],
|
|
|
|
|
settings,
|
|
|
|
|
patches: [{
|
|
|
|
|
find: ".getDesktopType()===",
|
|
|
|
|
replacement: [{
|
|
|
|
@ -29,11 +53,19 @@ export default definePlugin({
|
|
|
|
|
replace: "sound:!$self.isPrivateChannelRead(arguments[0]?.message)?undefined:$1"
|
|
|
|
|
}]
|
|
|
|
|
}],
|
|
|
|
|
isPrivateChannelRead(message: Message) {
|
|
|
|
|
isPrivateChannelRead(message: MessageJSON) {
|
|
|
|
|
const channelType = ChannelStore.getChannel(message.channel_id)?.type;
|
|
|
|
|
if (channelType !== ChannelType.DM && channelType !== ChannelType.GROUP_DM) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (
|
|
|
|
|
(channelType === ChannelType.DM && settings.store.channelToAffect === "group_dm") ||
|
|
|
|
|
(channelType === ChannelType.GROUP_DM && settings.store.channelToAffect === "user_dm") ||
|
|
|
|
|
(settings.store.allowMentions && message.mentions.some(m => m.id === UserStore.getCurrentUser().id)) ||
|
|
|
|
|
(settings.store.allowEveryone && message.mention_everyone)
|
|
|
|
|
) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return ReadStateStore.getOldestUnreadMessageId(message.channel_id) === message.id;
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|