aboutsummaryrefslogtreecommitdiff
path: root/internal/server/display.go
diff options
context:
space:
mode:
author2025-12-30 19:33:39 +0300
committer2025-12-30 19:33:39 +0300
commitd317e8f6df0e0e16445db606da1d683a6b35f531 (patch)
tree4b80de04e17a137cff2dc309508b5f841f48c994 /internal/server/display.go
downloadqchat-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.go83
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
+}