From d317e8f6df0e0e16445db606da1d683a6b35f531 Mon Sep 17 00:00:00 2001 From: Alexander Neonxp Kiryukhin Date: Tue, 30 Dec 2025 19:33:39 +0300 Subject: =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/server/display.go | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 internal/server/display.go (limited to 'internal/server/display.go') diff --git a/internal/server/display.go b/internal/server/display.go new file mode 100644 index 0000000..90d481a --- /dev/null +++ b/internal/server/display.go @@ -0,0 +1,83 @@ +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%s%s\t[%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 +} -- cgit v1.2.3