diff options
| author | 2025-12-30 19:33:39 +0300 | |
|---|---|---|
| committer | 2025-12-30 19:33:39 +0300 | |
| commit | d317e8f6df0e0e16445db606da1d683a6b35f531 (patch) | |
| tree | 4b80de04e17a137cff2dc309508b5f841f48c994 /internal/server/display.go | |
| download | qchat-d317e8f6df0e0e16445db606da1d683a6b35f531.tar.gz qchat-d317e8f6df0e0e16445db606da1d683a6b35f531.tar.bz2 qchat-d317e8f6df0e0e16445db606da1d683a6b35f531.tar.xz qchat-d317e8f6df0e0e16445db606da1d683a6b35f531.zip | |
начальный коммит
Diffstat (limited to 'internal/server/display.go')
| -rw-r--r-- | internal/server/display.go | 83 |
1 files changed, 83 insertions, 0 deletions
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 +} |
