aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/showHiddenChannels.tsx75
1 files changed, 60 insertions, 15 deletions
diff --git a/src/plugins/showHiddenChannels.tsx b/src/plugins/showHiddenChannels.tsx
index 9415900..25a2b54 100644
--- a/src/plugins/showHiddenChannels.tsx
+++ b/src/plugins/showHiddenChannels.tsx
@@ -23,6 +23,7 @@ import { Settings } from "../Vencord";
import { waitFor } from "../webpack";
import { Button, ChannelStore, Text } from "../webpack/common";
+const CONNECT = 1048576n;
const VIEW_CHANNEL = 1024n;
let can = (permission, channel) => true;
@@ -39,7 +40,11 @@ export default definePlugin({
{
name: "Average React Enjoyer",
id: 1004904120056029256n
- }
+ },
+ {
+ name: "D3SOX",
+ id: 201052085641281538n
+ },
],
options: {
hideUnreads: {
@@ -55,11 +60,11 @@ export default definePlugin({
find: ".CannotShow",
replacement: {
match: /renderLevel:(\w+)\.CannotShow/g,
- replace: "renderLevel:$1.Show"
+ replace: "renderLevel:Vencord.Plugins.plugins.ShowHiddenChannels.shouldShow(this.record, this.category, this.isMuted) ? $1.Show : $1.CannotShow"
}
},
{
- // This is where the logic that chooses the icon is, we overide it to be a locked voice channel if it's hidden
+ // This is where the logic that chooses the icon is, we override it to be a locked voice channel if it's hidden
find: ".rulesChannelId))",
replacement: {
match: /(\w+)\.locked(.*?)switch\((\w+)\.type\)({case \w+\.\w+\.GUILD_ANNOUNCEMENT)/g,
@@ -67,15 +72,31 @@ export default definePlugin({
}
},
{
- find: "selectChannel:function",
- replacement: [
- {
- match: /selectChannel:function\((\w)\){/g,
- replace: "selectChannel:function($1){if(Vencord.Plugins.plugins.ShowHiddenChannels.channelSelected($1)) return;"
- }
- ]
+ // Prevents Discord from trying to fetch message and create a 403 error
+ find: "fetchMessages:function",
+ replacement: {
+ match: /fetchMessages:function\((\w)\){/g,
+ replace: "fetchMessages:function($1){if(Vencord.Plugins.plugins.ShowHiddenChannels.isHiddenChannel($1)) return;"
+ }
+ },
+ {
+ // Don't switch to the channel if it's hidden, but show a modal instead
+ find: ".selectGuild(",
+ replacement: {
+ match: /(function \w+\(\w\)\{var (\w)=\w+\(\w\);)/g,
+ replace: "$1if(Vencord.Plugins.plugins.ShowHiddenChannels.channelSelected($2?.params))return;"
+ }
+ },
+ {
+ // Prevent categories from disappearing when they're collapsed
+ find: ".prototype.shouldShowEmptyCategory=function(){",
+ replacement: {
+ match: /(\.prototype\.shouldShowEmptyCategory=function\(\){)/g,
+ replace: "$1return true;"
+ }
},
{
+ // Hide unreads
find: "?\"button\":\"link\"",
predicate: () => Settings.plugins.ShowHiddenChannels.hideUnreads === true,
replacement: {
@@ -84,18 +105,33 @@ export default definePlugin({
}
}
],
+ shouldShow(channel, category, isMuted) {
+ if (!this.isHiddenChannel(channel)) return false;
+ if (!category) return false;
+ if (channel.type === 0 && category.guild?.hideMutedChannels && isMuted) return false;
+
+ return !category.isCollapsed;
+ },
isHiddenChannel(channel) {
if (!channel) return false;
- channel._isHiddenChannel = !can(VIEW_CHANNEL, channel);
+ if (channel.channelId)
+ channel = ChannelStore.getChannel(channel.channelId);
+ if (!channel || channel.isDM() || channel.isGroupDM() || channel.isMultiUserDM())
+ return false;
+
+ // check for disallowed voice channels too so that they get hidden when collapsing the category
+ channel._isHiddenChannel = !can(VIEW_CHANNEL, channel) || (channel.type === 2 && !can(CONNECT, channel));
return channel._isHiddenChannel;
},
channelSelected(channelData) {
+ if (!channelData) return false;
const channel = ChannelStore.getChannel(channelData.channelId);
-
- if (!channel || channel.isDM() || channel.isGroupDM() || channel.isMultiUserDM()) return false;
-
+ if (!channel) return false;
const isHidden = this.isHiddenChannel(channel);
- if (isHidden)
+ // check for type again, otherwise it would show it for hidden stage channels
+ if (channel.type === 0 && isHidden) {
+ const lastMessageDate = channel.lastActiveTimestamp ? new Date(channel.lastActiveTimestamp).toLocaleString() : null;
+
openModal(modalProps => (
<ModalRoot size={ModalSize.SMALL} {...modalProps}>
<ModalHeader>
@@ -118,6 +154,14 @@ export default definePlugin({
<Text variant="code">{channel.topic}</Text>
</>
)}
+ {lastMessageDate && (
+ <>
+ <Text variant="text-md/bold" style={{ marginTop: 10 }}>
+ Last message sent:
+ </Text>
+ <Text variant="code">{lastMessageDate}</Text>
+ </>
+ )}
</ModalContent>
<ModalFooter>
<Flex>
@@ -132,6 +176,7 @@ export default definePlugin({
</ModalFooter>
</ModalRoot>
));
+ }
return isHidden;
}
});