MCPcopy
hub / github.com/ayn2op/discordo / searchMember

Method searchMember

internal/ui/chat/composer.go:621–650  ·  view source on GitHub ↗

searchMember performs member discovery in a command goroutine. It emits a follow-up suggestion message once results are loaded.

(gID discord.GuildID, name string)

Source from the content-addressed store, hash-verified

619// searchMember performs member discovery in a command goroutine.
620// It emits a follow-up suggestion message once results are loaded.
621func (c *composer) searchMember(gID discord.GuildID, name string) tview.Cmd {
622 key := gID.String() + " " + name
623 if c.cache.Exists(key) {
624 return nil
625 }
626 // If searching for "ab" returns less than SearchLimit,
627 // then "abc" would not return anything new because we already searched
628 // everything starting with "ab". This will still be true even if a new
629 // member joins because arikawa loads new members into the state.
630 if k := key[:len(key)-1]; c.cache.Exists(k) {
631 if count := c.cache.Get(k); count < c.chat.state.MemberState.SearchLimit {
632 c.cache.Create(key, count)
633 return nil
634 }
635 }
636
637 // Rate limit on our side because we can't distinguish between a successful search and SearchMember not doing anything because of its internal rate limit that we can't detect
638 if c.lastSearch.Add(c.chat.state.MemberState.SearchFrequency).After(time.Now()) {
639 return nil
640 }
641
642 c.lastSearch = time.Now()
643 return func() tview.Msg {
644 c.chat.messagesList.waitForChunkEvent()
645 c.chat.messagesList.setFetchingChunk(true, 0)
646 c.chat.state.MemberState.SearchMember(gID, name)
647 c.cache.Create(key, c.chat.messagesList.waitForChunkEvent())
648 return tabSuggestMsg{}
649 }
650}
651
652func (c *composer) showMentionsList() tview.Cmd {
653 borders := 0

Callers 2

tabCompleteMethod · 0.95
tabSuggestMethod · 0.95

Calls 6

ExistsMethod · 0.80
GetMethod · 0.80
CreateMethod · 0.80
waitForChunkEventMethod · 0.80
setFetchingChunkMethod · 0.80
StringMethod · 0.45

Tested by

no test coverage detected