mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-09 14:43:03 -04:00
Implement BetterBlockedUsers plugin! (#178)
Allows you to search in blocked users list and makes names selectable in settings.
This commit is contained in:
parent
a803fc191a
commit
c4ae044325
2 changed files with 74 additions and 0 deletions
71
src/equicordplugins/betterBlockedUsers/index.tsx
Normal file
71
src/equicordplugins/betterBlockedUsers/index.tsx
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a Discord client mod
|
||||||
|
* Copyright (c) 2025 Vendicated and contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import "./styles.css";
|
||||||
|
|
||||||
|
import { EquicordDevs } from "@utils/constants";
|
||||||
|
import definePlugin from "@utils/types";
|
||||||
|
import { React, RelationshipStore, TextInput, UserStore } from "@webpack/common";
|
||||||
|
|
||||||
|
let lastSearch = "";
|
||||||
|
let updateFunc = (v: any) => { };
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
name: "BetterBlockedUsers",
|
||||||
|
description: "Allows you to search in blocked users list and makes names selectable in settings.",
|
||||||
|
authors: [EquicordDevs.TheArmagan],
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
find: '"],{numberOfBlockedUsers:',
|
||||||
|
replacement: [
|
||||||
|
{
|
||||||
|
match: /(function \S+\((\S{1,3})\).{0,100}className:_\.header,children:\[.{0,500}numberOfIgnoredUsers:\S{1,3}}\)}\)]}\))/,
|
||||||
|
replace: "$1,$2.listType==='blocked'?$self.renderSearchInput():null"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: /(function \S+\((\S{1,3})\).{0,100},\[\S{1,3},\S{1,3}]=(\S{1,3})\.useState\(\d\);)(.{0,200}children:)(\S{1,3})(\.slice\(\d,\S{1,3})/,
|
||||||
|
replace: "$1let [searchResults,setSearchResults]=$3.useState([]);$self.setUpdateFunc($2,setSearchResults);$4(searchResults.length?searchResults:$5)$6"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
renderSearchInput() {
|
||||||
|
const [value, setValue] = React.useState(lastSearch);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
const searchResults = this.getFilteredUsers(lastSearch);
|
||||||
|
updateFunc(searchResults);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return <TextInput
|
||||||
|
placeholder="Search users..."
|
||||||
|
style={{ width: "200px" }}
|
||||||
|
onInput={e => {
|
||||||
|
const search = (e.target as HTMLInputElement).value.toLowerCase().trim();
|
||||||
|
setValue(search);
|
||||||
|
lastSearch = search;
|
||||||
|
const searchResults = this.getFilteredUsers(search);
|
||||||
|
updateFunc(searchResults);
|
||||||
|
}} value={value}
|
||||||
|
></TextInput>;
|
||||||
|
},
|
||||||
|
getSearchResults() {
|
||||||
|
return !!lastSearch;
|
||||||
|
},
|
||||||
|
setUpdateFunc(e, setResults) {
|
||||||
|
if (e.listType !== "blocked") return;
|
||||||
|
updateFunc = setResults;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
getFilteredUsers(search: string) {
|
||||||
|
search = search.toLowerCase();
|
||||||
|
return (RelationshipStore as any).getBlockedIDs().filter(id => {
|
||||||
|
const user = UserStore.getUser(id) as any;
|
||||||
|
if (!user) return id === search;
|
||||||
|
return id === search || user?.username?.toLowerCase()?.includes(search) || user?.globalName?.toLowerCase()?.includes(search);
|
||||||
|
}) as string[];
|
||||||
|
}
|
||||||
|
});
|
3
src/equicordplugins/betterBlockedUsers/styles.css
Normal file
3
src/equicordplugins/betterBlockedUsers/styles.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[class*="usersList_"] [class*="text_"] {
|
||||||
|
user-select: text !important;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue