From 9141ef69d8b93863abc95f8839d1f28a0d73d5e8 Mon Sep 17 00:00:00 2001 From: kawamataryo Date: Wed, 13 Nov 2024 07:35:52 +0900 Subject: [PATCH] fix: change search logic --- src/lib/bskyHelpers.ts | 28 ++++++++++++++++++++++++---- src/lib/domHelpers.ts | 6 ++++++ src/lib/searchBskyUsers.ts | 2 ++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/lib/bskyHelpers.ts b/src/lib/bskyHelpers.ts index 085d395..e9c54aa 100644 --- a/src/lib/bskyHelpers.ts +++ b/src/lib/bskyHelpers.ts @@ -1,7 +1,8 @@ import type { ProfileView } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; import { BSKY_USER_MATCH_TYPE } from "./constants"; -type Names = { +type xUserInfo = { + bskyHandleInDescription: string; accountName: string; accountNameRemoveUnderscore: string; accountNameReplaceUnderscore: string; @@ -9,7 +10,7 @@ type Names = { }; export const isSimilarUser = ( - names: Names, + xUserInfo: xUserInfo, bskyProfile: ProfileView | undefined, ): { isSimilar: boolean; @@ -22,12 +23,31 @@ export const isSimilarUser = ( }; } - const lowerCaseNames = Object.entries(names).reduce( + // this is to handle the case where the user has a bsky handle in their description + if (xUserInfo.bskyHandleInDescription) { + const formattedBskyHandle = bskyProfile.handle.replace("@", ""); + const formattedBskyHandleInDescription = + xUserInfo.bskyHandleInDescription.replace("@", ""); + if ( + formattedBskyHandle === formattedBskyHandleInDescription || + formattedBskyHandle.includes(formattedBskyHandleInDescription) + ) { + return { + isSimilar: true, + type: BSKY_USER_MATCH_TYPE.HANDLE, + }; + } + } + + const lowerCaseNames = Object.entries(xUserInfo).reduce( (acc, [key, value]) => { + if (!value) { + return acc; + } acc[key] = value.toLowerCase(); return acc; }, - {} as Names, + {} as xUserInfo, ); const bskyHandle = bskyProfile.handle diff --git a/src/lib/domHelpers.ts b/src/lib/domHelpers.ts index 69ff674..b1054c7 100644 --- a/src/lib/domHelpers.ts +++ b/src/lib/domHelpers.ts @@ -25,10 +25,16 @@ export const getAccountNameAndDisplayName = (userCell: Element) => { const twAccountNameRemoveUnderscore = twAccountName.replaceAll("_", ""); // bsky does not allow underscores in handle, so remove them. const twAccountNameReplaceUnderscore = twAccountName.replaceAll("_", "-"); const twDisplayName = displayNameEl?.textContent; + const bskyHandle = + userCell.textContent?.match(/([^/\s]+\.bsky\.social)/)?.[1] ?? + userCell.textContent?.match(/bsky\.app\/profile\/([^/\s]+)…/)?.[1] ?? + null; + return { twAccountName, twDisplayName, twAccountNameRemoveUnderscore, twAccountNameReplaceUnderscore, + bskyHandle, }; }; diff --git a/src/lib/searchBskyUsers.ts b/src/lib/searchBskyUsers.ts index 7b0878c..ef838d6 100644 --- a/src/lib/searchBskyUsers.ts +++ b/src/lib/searchBskyUsers.ts @@ -11,6 +11,7 @@ export const searchBskyUser = async ({ userData: ReturnType; }) => { const searchTerms = [ + ...(userData.bskyHandle ? [userData.bskyHandle] : []), userData.twAccountNameRemoveUnderscore, userData.twAccountNameReplaceUnderscore, userData.twDisplayName, @@ -31,6 +32,7 @@ export const searchBskyUser = async ({ const { isSimilar: isUserFound, type } = isSimilarUser( // TODO: simplify { + bskyHandleInDescription: userData.bskyHandle, accountName: userData.twAccountName, accountNameRemoveUnderscore: userData.twAccountNameRemoveUnderscore, accountNameReplaceUnderscore: