diff --git a/storage/channel.go b/storage/channel.go index 3aa23e33..e358b916 100644 --- a/storage/channel.go +++ b/storage/channel.go @@ -51,6 +51,13 @@ func (c *ChannelStore) AddUser(user, server, channel string) { } if users, ok := c.users[server][channel]; ok { + for _, u := range users { + if u == user { + c.userLock.Unlock() + return + } + } + c.users[server][channel] = append(users, user) } else { c.users[server][channel] = []string{user} diff --git a/storage/channel_test.go b/storage/channel_test.go index add3107d..4002ff92 100644 --- a/storage/channel_test.go +++ b/storage/channel_test.go @@ -16,6 +16,8 @@ func TestGetSetUsers(t *testing.T) { func TestAddRemoveUser(t *testing.T) { channelStore := NewChannelStore() channelStore.AddUser("user", "srv", "#chan") + channelStore.AddUser("user", "srv", "#chan") + assert.Len(t, channelStore.GetUsers("srv", "#chan"), 1) channelStore.AddUser("user2", "srv", "#chan") assert.Equal(t, []string{"user", "user2"}, channelStore.GetUsers("srv", "#chan")) channelStore.RemoveUser("user", "srv", "#chan")