diff --git a/commands/send.go b/commands/send.go index 5870b21..44e2ec0 100644 --- a/commands/send.go +++ b/commands/send.go @@ -2,6 +2,7 @@ package commands import ( "fmt" + "regexp" "strings" "unicode/utf8" @@ -11,9 +12,13 @@ import ( "github.com/mgutz/ansi" ) +var REGEX_MENTION = regexp.MustCompile("@([a-z0-9._]{1,32})") + func SendMode() { client := state.GetClient() + currentGuild := state.GetCurrentGuild() + channelId := state.GetCurrentChannel() if channelId == "" { fmt.Print("\n\r") @@ -79,6 +84,30 @@ func SendMode() { } } else { fmt.Print(prompt, input, "\n\r") + + input := REGEX_MENTION.ReplaceAllStringFunc(input, func(match string) string { + matches := REGEX_MENTION.FindStringSubmatch(match) + username := matches[1] + + parsedGuildId, err := discord.ParseSnowflake(currentGuild) + if err != nil { + return match + } + + members, err := client.MemberStore.Members(discord.GuildID(parsedGuildId)) + if err != nil { + return match + } + + for _, member := range members { + if member.User.Username == username { + return member.User.ID.Mention() + } + } + + return match + }) + _, err := client.SendMessage(channel.ID, input) if err != nil { diff --git a/lib/messages.go b/lib/messages.go index 5140eee..60ab6a5 100644 --- a/lib/messages.go +++ b/lib/messages.go @@ -102,12 +102,28 @@ func ReplaceMarkdown(content string, noColor bool) string { if err != nil { return "@Unknown User" } - user, err := client.User(discord.UserID(parsedId)) - if err != nil { - return "@Unknown User" - } - return "@" + user.Username + currentGuild := state.GetCurrentGuild() + if currentGuild == "" { + user, err := client.User(discord.UserID(parsedId)) + if err != nil { + return "@Unknown User" + } + + return "@" + user.Username + } else { + parsedGuildId, err := discord.ParseSnowflake(currentGuild) + if err != nil { + return "@Unknown User" + } + + member, err := client.MemberStore.Member(discord.GuildID(parsedGuildId), discord.UserID(parsedId)) + if err != nil { + return "@Unknown User" + } + + return "@" + member.User.Username + } }) content = replaceAllWithCallback(*REGEX_ROLE_MENTION, content, func(matches []string) string {