[ShowHiddenChannels] Add last message info, fix collapsing (#146)
Co-authored-by: Snek <107999380+sneksnake@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									5fac8be0ae
								
							
						
					
					
						commit
						30dd4b9e01
					
				
					 1 changed files with 60 additions and 15 deletions
				
			
		|  | @ -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; | ||||
|     } | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue