@@ -52,10 +52,21 @@ import showAddBotToChat from '@components/popups/addBotToChat';
5252import getBotAddToChatScope from '@appManagers/utils/bots/getBotAddToChatScope' ;
5353import parseBotAdminRights from '@appManagers/utils/bots/parseBotAdminRights' ;
5454import isEphemeralMessage from '@appManagers/utils/messages/isEphemeralMessage' ;
55+ import parseChatSpecificTag from '@lib/richTextProcessor/parseChatSpecificTag' ;
56+ import searchByTag from '@lib/richTextProcessor/searchByTag' ;
5557
5658export class InternalLinkProcessor {
5759 protected managers : AppManagers ;
5860 private processingAddAiStyleSlugs : Set < string > = new Set ( ) ;
61+ private tagSearchVersion = 0 ;
62+
63+ private showUsernameResolveError ( err : ApiError ) {
64+ if ( err . type === 'USERNAME_NOT_OCCUPIED' ) {
65+ toastNew ( { langPackKey : 'NoUsernameFound' } ) ;
66+ } else if ( err . type === 'USERNAME_INVALID' ) {
67+ toastNew ( { langPackKey : 'Alert.UserDoesntExists' } ) ;
68+ }
69+ }
5970
6071 public construct ( managers : AppManagers ) {
6172 this . managers = managers ;
@@ -131,7 +142,22 @@ export class InternalLinkProcessor {
131142 return ;
132143 }
133144
134- return appImManager . chat . initSearch ( { query : '#' + hashtag + ' ' } ) ;
145+ const search = parseChatSpecificTag ( hashtag ) ;
146+ const version = ++ this . tagSearchVersion ;
147+ return searchByTag ( {
148+ query : search . query + ' ' ,
149+ username : search . username ,
150+ activateSearch : ( query ) => appImManager . chat . initSearch ( { query} ) ,
151+ resolveUsername : ( username ) => this . managers . appUsersManager . resolveUsername ( username ) ,
152+ openPeer : ( peer ) => appImManager . setInnerPeer ( {
153+ peerId : peer . id . toPeerId ( peer . _ !== 'user' )
154+ } ) ,
155+ isCurrent : ( ) => version === this . tagSearchVersion ,
156+ onResolveError : ( err ) => {
157+ appImManager . chat . resetSearch ( ) ;
158+ this . showUsernameResolveError ( err as ApiError ) ;
159+ }
160+ } ) ;
135161 }
136162 } ) ;
137163
@@ -838,11 +864,7 @@ export class InternalLinkProcessor {
838864
839865 await appImManager . openUsername ( { userName : link . domain } ) ;
840866 } , ( err : ApiError ) => {
841- if ( err . type === 'USERNAME_NOT_OCCUPIED' ) {
842- toastNew ( { langPackKey : 'NoUsernameFound' } ) ;
843- } else if ( err . type === 'USERNAME_INVALID' ) {
844- toastNew ( { langPackKey : 'Alert.UserDoesntExists' } ) ;
845- }
867+ this . showUsernameResolveError ( err ) ;
846868 } ) ;
847869 }
848870
0 commit comments