Equicord/src/equicordplugins/betterBlockedUsers/index.tsx
2025-03-09 16:53:54 -04:00

75 lines
2.6 KiB
TypeScript

/*
* 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: /(?<=\}=(\i).*?\]\}\))/,
replace: ",$1.listType==='blocked'?$self.renderSearchInput():null"
},
{
match: /(?<=\}=(\i).{0,10}(\i).useState\(.{0,1}\);)/,
replace: "let [searchResults,setSearchResults]=$2.useState([]);$self.setUpdateFunc($1,setSearchResults);"
},
{
match: /(usersList,children:)(\i)/,
replace: "$1(searchResults.length?searchResults:$2)"
},
]
}
],
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[];
}
});