diff --git a/src/equicordplugins/pingNotifications/index.tsx b/src/equicordplugins/pingNotifications/index.tsx
index a733f900..e6b0e45e 100644
--- a/src/equicordplugins/pingNotifications/index.tsx
+++ b/src/equicordplugins/pingNotifications/index.tsx
@@ -8,11 +8,10 @@ import { showNotification } from "@api/Notifications";
import { definePluginSettings } from "@api/Settings";
import { EquicordDevs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
+import { findStoreLazy } from "@webpack";
import {
ChannelStore,
- FluxDispatcher,
GuildStore,
- MessageStore,
NavigationRouter,
PresenceStore,
RelationshipStore,
@@ -20,22 +19,19 @@ import {
UserStore
} from "@webpack/common";
+const UserGuildSettingsStore = findStoreLazy("UserGuildSettingsStore");
+
const settings = definePluginSettings({
friends: {
type: OptionType.BOOLEAN,
- default: true,
- description: "Notify when friends message you (non-@ mentions)"
+ default: false,
+ description: "Notify when friends send messages in servers"
},
mentions: {
type: OptionType.BOOLEAN,
default: true,
description: "Notify when someone @mentions you directly"
},
- replies: {
- type: OptionType.BOOLEAN,
- default: true,
- description: "Notify when someone replies to your messages"
- },
dms: {
type: OptionType.BOOLEAN,
default: true,
@@ -44,11 +40,16 @@ const settings = definePluginSettings({
showInActive: {
type: OptionType.BOOLEAN,
default: false,
- description: "Show notifications even for current active channel"
+ description: "Show notifications even for currently active channel"
+ },
+ ignoreMuted: {
+ type: OptionType.BOOLEAN,
+ default: true,
+ description: "Skip notifications from muted servers, channels, or users"
}
});
-function formatContent(message: any) {
+function formatContent(message) {
let content = message.content || "";
message.mentions?.forEach(user => {
content = content.replace(new RegExp(`<@!?${user.id}>`, "g"), `@${user.username}`);
@@ -56,40 +57,75 @@ function formatContent(message: any) {
return content.slice(0, 200) + (content.length > 200 ? "..." : "");
}
+function checkIfMuted(channel) {
+ if (!settings.store.ignoreMuted) return false;
+ if (!channel) return false;
+
+ if (channel.isMuted?.()) return true;
+
+ const isDM = [1, 3].includes(channel.type);
+ if (isDM) {
+ const recipientIds = channel.recipients || [];
+ for (const userId of recipientIds) {
+ if (RelationshipStore.isBlocked(userId)) return true;
+ }
+
+ if (UserGuildSettingsStore?.getMutedChannels?.()?.includes?.(channel.id)) return true;
+ }
+
+ if (channel.guild_id) {
+ const guild = GuildStore.getGuild(channel.guild_id);
+ if (UserGuildSettingsStore.isMuted(channel.guild_id)) return true;
+
+ if (UserGuildSettingsStore?.isMuted?.(channel.guild_id)) return true;
+ if (UserGuildSettingsStore?.isChannelMuted?.(channel.guild_id, channel.id)) return true;
+ if (UserGuildSettingsStore?.isCategoryMuted?.(channel.guild_id, channel.id)) return true;
+ }
+
+ return false;
+}
+
+function isUserBlocked(userId) {
+ return settings.store.ignoreMuted && RelationshipStore.isBlocked?.(userId);
+}
+
export default definePlugin({
name: "PingNotifications",
description: "Customizable notifications with improved mention formatting",
authors: [EquicordDevs.smuki],
settings,
+
flux: {
- async MESSAGE_CREATE({ message }) {
+ MESSAGE_CREATE({ message }) {
try {
if (!message?.channel_id || message.state === "SENDING") return;
const channel = ChannelStore.getChannel(message.channel_id);
const currentUser = UserStore.getCurrentUser();
- if (!channel || !currentUser || message.author?.id === currentUser.id) return;
- if ((channel as any).isMuted?.() || (channel.guild_id && (GuildStore.getGuild(channel.guild_id) as any)?.isMuted?.())) return;
+ if (!channel || !currentUser) return;
+ if (message.author?.id === currentUser.id) return;
+
+ const isDM = [1, 3].includes(channel.type);
+
+ if (checkIfMuted(channel)) return;
+ if (isUserBlocked(message.author.id)) return;
if (!settings.store.showInActive && channel.id === SelectedChannelStore.getChannelId()) return;
if (PresenceStore.getStatus(currentUser.id) === "dnd") return;
const author = UserStore.getUser(message.author.id) || { username: "Unknown" };
- const isDM = [1, 3].includes(channel.type);
const channelName = channel.name || (isDM ? "DM" : "Group");
const body = formatContent(message);
- const shouldNotify = (
- (settings.store.mentions && message.mentions?.some(u => u.id === currentUser.id)) ||
- (settings.store.friends && RelationshipStore.isFriend(message.author.id)) ||
- (settings.store.replies && message.message_reference?.message_id &&
- MessageStore.getMessage(
- message.message_reference.channel_id || channel.id,
- message.message_reference.message_id
- )?.author.id === currentUser.id
- ) ||
- (isDM && settings.store.dms)
- );
+ let shouldNotify = false;
+
+ if (settings.store.mentions && message.mentions?.some(u => u.id === currentUser.id)) {
+ shouldNotify = true;
+ } else if (settings.store.friends && RelationshipStore.isFriend(message.author.id) && !isDM) {
+ shouldNotify = true;
+ } else if (isDM && settings.store.dms) {
+ shouldNotify = true;
+ }
if (shouldNotify) {
showNotification({
diff --git a/src/main/updater/http.ts b/src/main/updater/http.ts
index 6015b039..af6df9b7 100644
--- a/src/main/updater/http.ts
+++ b/src/main/updater/http.ts
@@ -16,7 +16,6 @@
* along with this program. If not, see .
*/
-import { isLegacyNonAsarVencord } from "@main/patcher";
import { get } from "@main/utils/simpleGet";
import { IpcEvents } from "@shared/IpcEvents";
import { VENCORD_USER_AGENT } from "@shared/vencordUserAgent";
@@ -120,8 +119,6 @@ async function migrateAsarToLegacy() {
}
}
-if (!isLegacyNonAsarVencord) migrateAsarToLegacy();
-
ipcMain.handle(IpcEvents.GET_REPO, serializeErrors(() => `https://github.com/${gitRemote}`));
ipcMain.handle(IpcEvents.GET_UPDATES, serializeErrors(calculateGitChanges));
ipcMain.handle(IpcEvents.UPDATE, serializeErrors(fetchUpdates));
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index 7b19908f..a78a78a4 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -1039,7 +1039,7 @@ export const EquicordDevs = Object.freeze({
id: 724416180097384498n
},
smuki: {
- name: "sumki",
+ name: "smuki",
id: 691517398523576331n
},
} satisfies Record);