mirror of
https://github.com/diamondburned/cchat-mock.git
synced 2024-10-18 13:34:18 +00:00
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package channel
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/diamondburned/cchat"
|
|
"github.com/diamondburned/cchat-mock/internal/message"
|
|
)
|
|
|
|
type MessageCompleter struct {
|
|
msgr *Messenger
|
|
}
|
|
|
|
func (msgc MessageCompleter) Complete(words []string, i int64) []cchat.CompletionEntry {
|
|
switch {
|
|
case strings.HasPrefix("complete", words[i]):
|
|
return makeCompletion(
|
|
"complete",
|
|
"complete me",
|
|
"complete you",
|
|
"complete everyone",
|
|
)
|
|
|
|
case lookbackCheck(words, i, "complete", "me"):
|
|
return makeCompletion("me")
|
|
|
|
case lookbackCheck(words, i, "complete", "you"):
|
|
return makeCompletion("you")
|
|
|
|
case lookbackCheck(words, i, "complete", "everyone"):
|
|
return makeCompletion("everyone")
|
|
|
|
case lookbackCheck(words, i, "best", "femboys:"):
|
|
return makeCompletion(
|
|
"trap: Astolfo",
|
|
"trap: Hackadoll No. 3",
|
|
"trap: Totsuka",
|
|
"trap: Felix Argyle",
|
|
)
|
|
|
|
default:
|
|
var found = map[string]struct{}{}
|
|
|
|
msgc.msgr.messageMutex.Lock()
|
|
defer msgc.msgr.messageMutex.Unlock()
|
|
|
|
var entries []cchat.CompletionEntry
|
|
|
|
// Look for members.
|
|
for _, id := range msgc.msgr.messageids {
|
|
if msg := msgc.msgr.messages[id]; strings.HasPrefix(msg.AuthorName(), words[i]) {
|
|
if _, ok := found[msg.AuthorName()]; ok {
|
|
continue
|
|
}
|
|
|
|
found[msg.AuthorName()] = struct{}{}
|
|
|
|
entries = append(entries, cchat.CompletionEntry{
|
|
Raw: msg.AuthorName(),
|
|
Text: msg.Author().Name(),
|
|
IconURL: msg.Author().Avatar(),
|
|
})
|
|
}
|
|
}
|
|
|
|
return entries
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func makeCompletion(word ...string) []cchat.CompletionEntry {
|
|
var entries = make([]cchat.CompletionEntry, len(word))
|
|
for i, w := range word {
|
|
entries[i].Raw = w
|
|
entries[i].Text.Content = w
|
|
entries[i].IconURL = message.AvatarURL
|
|
}
|
|
return entries
|
|
}
|
|
|
|
// completion will only override `this'.
|
|
func lookbackCheck(words []string, i int64, prev, this string) bool {
|
|
return strings.HasPrefix(this, words[i]) && i > 0 && words[i-1] == prev
|
|
}
|