diff --git a/overseerr-api.yml b/overseerr-api.yml index f8be08958..213ef1d70 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -1138,6 +1138,8 @@ components: type: string webhookUrl: type: string + enableMentions: + type: boolean SlackSettings: type: object properties: diff --git a/server/lib/notifications/agents/discord.ts b/server/lib/notifications/agents/discord.ts index bd07c4de1..321200350 100644 --- a/server/lib/notifications/agents/discord.ts +++ b/server/lib/notifications/agents/discord.ts @@ -258,35 +258,37 @@ class DiscordAgent const userMentions: string[] = []; try { - if (payload.notifyUser) { - if ( - payload.notifyUser.settings?.hasNotificationType( - NotificationAgentKey.DISCORD, - type - ) && - payload.notifyUser.settings.discordId - ) { - userMentions.push(`<@${payload.notifyUser.settings.discordId}>`); + if (settings.options.enableMentions) { + if (payload.notifyUser) { + if ( + payload.notifyUser.settings?.hasNotificationType( + NotificationAgentKey.DISCORD, + type + ) && + payload.notifyUser.settings.discordId + ) { + userMentions.push(`<@${payload.notifyUser.settings.discordId}>`); + } } - } - if (payload.notifyAdmin) { - const userRepository = getRepository(User); - const users = await userRepository.find(); + if (payload.notifyAdmin) { + const userRepository = getRepository(User); + const users = await userRepository.find(); - userMentions.push( - ...users - .filter( - (user) => - user.settings?.hasNotificationType( - NotificationAgentKey.DISCORD, - type - ) && - user.settings.discordId && - shouldSendAdminNotification(type, user, payload) - ) - .map((user) => `<@${user.settings?.discordId}>`) - ); + userMentions.push( + ...users + .filter( + (user) => + user.settings?.hasNotificationType( + NotificationAgentKey.DISCORD, + type + ) && + user.settings.discordId && + shouldSendAdminNotification(type, user, payload) + ) + .map((user) => `<@${user.settings?.discordId}>`) + ); + } } await axios.post(settings.options.webhookUrl, { diff --git a/server/lib/settings.ts b/server/lib/settings.ts index f7780dfc5..eb50e25bd 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -125,6 +125,7 @@ export interface NotificationAgentDiscord extends NotificationAgentConfig { botUsername?: string; botAvatarUrl?: string; webhookUrl: string; + enableMentions: boolean; }; } @@ -304,6 +305,7 @@ class Settings { types: 0, options: { webhookUrl: '', + enableMentions: true, }, }, lunasea: { diff --git a/server/routes/user/usersettings.ts b/server/routes/user/usersettings.ts index 6558115a7..22a265313 100644 --- a/server/routes/user/usersettings.ts +++ b/server/routes/user/usersettings.ts @@ -252,10 +252,12 @@ userSettingsRoutes.get<{ id: string }, UserSettingsNotificationsResponse>( return res.status(200).json({ emailEnabled: settings?.email.enabled, pgpKey: user.settings?.pgpKey, - discordEnabled: settings?.discord.enabled, - discordEnabledTypes: settings?.discord.enabled - ? settings?.discord.types - : 0, + discordEnabled: + settings?.discord.enabled && settings.discord.options.enableMentions, + discordEnabledTypes: + settings?.discord.enabled && settings.discord.options.enableMentions + ? settings.discord.types + : 0, discordId: user.settings?.discordId, pushbulletAccessToken: user.settings?.pushbulletAccessToken, pushoverApplicationToken: user.settings?.pushoverApplicationToken, diff --git a/src/components/Settings/Notifications/NotificationsDiscord.tsx b/src/components/Settings/Notifications/NotificationsDiscord.tsx index 9e2a67019..8c882dd63 100644 --- a/src/components/Settings/Notifications/NotificationsDiscord.tsx +++ b/src/components/Settings/Notifications/NotificationsDiscord.tsx @@ -26,6 +26,7 @@ const messages = defineMessages({ toastDiscordTestFailed: 'Discord test notification failed to send.', validationUrl: 'You must provide a valid URL', validationTypes: 'You must select at least one notification type', + enableMentions: 'Enable Mentions', }); const NotificationsDiscord: React.FC = () => { @@ -64,6 +65,7 @@ const NotificationsDiscord: React.FC = () => { botUsername: data?.options.botUsername, botAvatarUrl: data?.options.botAvatarUrl, webhookUrl: data.options.webhookUrl, + enableMentions: data?.options.enableMentions, }} validationSchema={NotificationsDiscordSchema} onSubmit={async (values) => { @@ -75,6 +77,7 @@ const NotificationsDiscord: React.FC = () => { botUsername: values.botUsername, botAvatarUrl: values.botAvatarUrl, webhookUrl: values.webhookUrl, + enableMentions: values.enableMentions, }, }); @@ -122,6 +125,7 @@ const NotificationsDiscord: React.FC = () => { botUsername: values.botUsername, botAvatarUrl: values.botAvatarUrl, webhookUrl: values.webhookUrl, + enableMentions: values.enableMentions, }, }); @@ -227,6 +231,18 @@ const NotificationsDiscord: React.FC = () => { )} +