package server import ( "fmt" "io" "regexp" "strings" "go.neonxp.ru/qchat/internal/chat" ) var replacements = []replacement{ { From: *regexp.MustCompile(`\*(.+?)\*`), To: fmt.Sprintf("%s$1%s", escapeCodes[Bold], escapeCodes[Reset]), }, { From: *regexp.MustCompile(`_(.+?)_`), To: fmt.Sprintf("%s$1%s", escapeCodes[Italic], escapeCodes[Reset]), }, } func displayMessage(t io.Writer, message chat.Message, user *chat.User) { msg := message.Message mentionFrom := "@" + user.Username mentionTo := string(escapeCodes[Blink]) + string(escapeCodes[Underline]) + "@" + user.Username + string(escapeCodes[Reset]) if strings.Contains(msg, mentionFrom) { msg = strings.ReplaceAll(msg, mentionFrom, mentionTo) msg = "\x07\a" + msg } for _, r := range replacements { msg = r.From.ReplaceAllString(msg, r.To) } fmt.Fprintf(t, "%s%15s%s [%s]%s: %s\n", escapeCodes[Blue], message.User.NUsername(), escapeCodes[Green], message.Time.Format("15:04:05"), escapeCodes[Reset], msg, ) } func displaySystemMessage(t io.Writer, message chat.SystemMessage) { fmt.Fprintf(t, "%s* %s %s\n", escapeCodes[Green], message.Message, escapeCodes[Reset], ) } func displaySelfMessage(t io.Writer, message chat.SelfMessage) { fmt.Fprintf(t, "%s* %s %s%s\n", escapeCodes[Blue], message.User.NUsername(), message.Message, escapeCodes[Reset], ) } func displayUserJoined(t io.Writer, presence chat.UserJoined) { fmt.Fprintf(t, "%s* %s joined to %s chan%s\n", escapeCodes[Green], presence.User.NUsername(), presence.Chan.Name, escapeCodes[Reset], ) } func displayUserLeft(t io.Writer, presence chat.UserLeft) { fmt.Fprintf(t, "%s* %s left %s chan%s\n", escapeCodes[Red], presence.User.NUsername(), presence.Chan.Name, escapeCodes[Reset], ) } type replacement struct { From regexp.Regexp To string }