diff options
Diffstat (limited to 'src/plugins/relationshipNotifier/functions.ts')
-rw-r--r-- | src/plugins/relationshipNotifier/functions.ts | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/plugins/relationshipNotifier/functions.ts b/src/plugins/relationshipNotifier/functions.ts new file mode 100644 index 0000000..c9ec6e3 --- /dev/null +++ b/src/plugins/relationshipNotifier/functions.ts @@ -0,0 +1,87 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 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 { UserUtils } from "@webpack/common"; + +import settings from "./settings"; +import { ChannelDelete, ChannelType, GuildDelete, RelationshipRemove, RelationshipType } from "./types"; +import { deleteGroup, deleteGuild, getGroup, getGuild, notify } from "./utils"; + +let manuallyRemovedFriend: string | undefined; +let manuallyRemovedGuild: string | undefined; +let manuallyRemovedGroup: string | undefined; + +export const removeFriend = (id: string) => manuallyRemovedFriend = id; +export const removeGuild = (id: string) => manuallyRemovedGuild = id; +export const removeGroup = (id: string) => manuallyRemovedGroup = id; + +export async function onRelationshipRemove({ relationship: { type, id } }: RelationshipRemove) { + if (manuallyRemovedFriend === id) { + manuallyRemovedFriend = undefined; + return; + } + + const user = await UserUtils.fetchUser(id) + .catch(() => null); + if (!user) return; + + switch (type) { + case RelationshipType.FRIEND: + if (settings.store.friends) + notify(`${user.tag} removed you as a friend.`, user.getAvatarURL(undefined, undefined, false)); + break; + case RelationshipType.FRIEND_REQUEST: + if (settings.store.friendRequestCancels) + notify(`A friend request from ${user.tag} has been removed.`, user.getAvatarURL(undefined, undefined, false)); + break; + } +} + +export function onGuildDelete({ guild: { id, unavailable } }: GuildDelete) { + if (!settings.store.servers) return; + if (unavailable) return; + + if (manuallyRemovedGuild === id) { + deleteGuild(id); + manuallyRemovedGuild = undefined; + return; + } + + const guild = getGuild(id); + if (guild) { + deleteGuild(id); + notify(`You were removed from the server ${guild.name}.`, guild.iconURL); + } +} + +export function onChannelDelete({ channel: { id, type } }: ChannelDelete) { + if (!settings.store.groups) return; + if (type !== ChannelType.GROUP_DM) return; + + if (manuallyRemovedGroup === id) { + deleteGroup(id); + manuallyRemovedGroup = undefined; + return; + } + + const group = getGroup(id); + if (group) { + deleteGroup(id); + notify(`You were removed from the group ${group.name}.`, group.iconURL); + } +} |