diff --git a/channel.go b/channel.go index af0ed4b..971e4bd 100644 --- a/channel.go +++ b/channel.go @@ -20,7 +20,7 @@ type Channel struct { Nonce string `json:"nonce"` Active bool `json:"active"` Recipients []string `json:"recipients"` - LastMessage string `json:"last_message"` + LastMessage interface{} `json:"last_message"` Name string `json:"name"` OwnerId string `json:"owner"` Description string `json:"description"` diff --git a/client.go b/client.go index 1e03ecf..5363882 100644 --- a/client.go +++ b/client.go @@ -19,6 +19,7 @@ type Client struct { Token string Socket gowebsocket.Socket HTTP *http.Client + Cache *Cache // Event Functions OnReadyFunctions []func() @@ -30,6 +31,14 @@ type Client struct { OnChannelDeleteFunctions []func(channel_id string) } +// Client cache struct. +type Cache struct { + Users []*User `json:"users"` + Servers []*Server `json:"servers"` + Channels []*Channel `json:"channels"` + Members []*Member `json:"members"` +} + // Self bot struct. type SelfBot struct { Email string `json:"-"` diff --git a/websocket.go b/websocket.go index 9e224c9..86ccffa 100644 --- a/websocket.go +++ b/websocket.go @@ -42,7 +42,7 @@ func (c *Client) Start() { // Handle events c.handleEvents(rawData, message) - fmt.Println(message) + // fmt.Println(message) } // Start connection @@ -75,10 +75,15 @@ func (c *Client) ping() { func (c *Client) handleEvents(rawData *struct { Type string `json:"type"` }, message string) { - if rawData.Type == "Ready" && c.OnReadyFunctions != nil { + if rawData.Type == "Ready" { + // Add cache + c.handleCache(message) + // Ready Event - for _, i := range c.OnReadyFunctions { - i() + if c.OnReadyFunctions != nil { + for _, i := range c.OnReadyFunctions { + i() + } } } else if rawData.Type == "Message" && c.OnMessageFunctions != nil { // Message Event @@ -176,3 +181,28 @@ func (c *Client) handleEvents(rawData *struct { } } } + +func (c *Client) handleCache(data string) { + cache := &Cache{} + + err := json.Unmarshal([]byte(data), cache) + + if err != nil { + fmt.Printf("Unexcepted Error: %s", err) + } + + // Add client to users. + for _, i := range cache.Users { + i.Client = c + } + + for _, i := range cache.Servers { + i.Client = c + } + + for _, i := range cache.Channels { + i.Client = c + } + + c.Cache = cache +}