From 8c0b8ad931045c70845f662238230edb81f8cd94 Mon Sep 17 00:00:00 2001 From: Alexander Neonxp Kiryukhin Date: Wed, 31 Dec 2025 14:15:42 +0300 Subject: =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D1=83=D1=8E=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20=D1=82=D0=B5=D1=80=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BB=D0=BE=D0=BC=20=D0=B8=20=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/chat/chan.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'internal/chat/chan.go') diff --git a/internal/chat/chan.go b/internal/chat/chan.go index bc2b70f..be9ae71 100644 --- a/internal/chat/chan.go +++ b/internal/chat/chan.go @@ -11,6 +11,7 @@ type Channel struct { Name string Users map[*User]struct{} Events chan any + Log Logs mu sync.RWMutex } @@ -21,6 +22,7 @@ func (c *Channel) Listen(ctx context.Context) { return case ev := <-c.Events: c.processEvent(ev) + c.processLog(ev) } } } @@ -42,6 +44,37 @@ func (c *Channel) processEvent(ev any) { } } +func (c *Channel) processLog(ev any) { + switch ev := ev.(type) { + case UserJoined: + c.Log.Append(LogEntry{ + Username: ev.User.NUsername(), + Time: ev.Time, + Type: TypeJoined, + }) + case UserLeft: + c.Log.Append(LogEntry{ + Username: ev.User.NUsername(), + Time: ev.Time, + Type: TypeLeft, + }) + case Message: + c.Log.Append(LogEntry{ + Username: ev.User.NUsername(), + Time: ev.Time, + Message: ev.Message, + Type: TypeMessage, + }) + case SelfMessage: + c.Log.Append(LogEntry{ + Username: ev.User.NUsername(), + Time: time.Now(), + Message: "/me " + ev.Message, + Type: TypeMessage, + }) + } +} + func (c *Channel) Join(u *User) { c.mu.Lock() defer c.mu.Unlock() @@ -56,6 +89,11 @@ func (c *Channel) Join(u *User) { } c.Users[u] = struct{}{} + + // Отправляем при подключении последние 20 сообщений + u.Events <- UserLogs{ + Logs: c.Log.Get(), + } } func (c *Channel) Leave(u *User) { -- cgit v1.2.3