diff --git a/client.go b/client.go index a806056..c7e5c73 100644 --- a/client.go +++ b/client.go @@ -19,30 +19,30 @@ type Client struct { HTTP *http.Client // Event Functions - OnReadyFunction func() - OnMessageFunction func(message *Message) - OnMessageUpdateFunction func(channel_id, message_id string, payload map[string]interface{}) - OnMessageDeleteFunction func(channel_id, message_id string) + OnReadyFunctions []func() + OnMessageFunctions []func(message *Message) + OnMessageUpdateFunctions []func(channel_id, message_id string, payload map[string]interface{}) + OnMessageDeleteFunctions []func(channel_id, message_id string) } // On ready event will run when websocket connection is started and bot is ready to work. func (c *Client) OnReady(fn func()) { - c.OnReadyFunction = fn + c.OnReadyFunctions = append(c.OnReadyFunctions, fn) } // On message event will run when someone sends a message. func (c *Client) OnMessage(fn func(message *Message)) { - c.OnMessageFunction = fn + c.OnMessageFunctions = append(c.OnMessageFunctions, fn) } // On message update event will run when someone updates a message. func (c *Client) OnMessageUpdate(fn func(channel_id, message_id string, payload map[string]interface{})) { - c.OnMessageUpdateFunction = fn + c.OnMessageUpdateFunctions = append(c.OnMessageUpdateFunctions, fn) } // On message delete event will run when someone deletes a message. func (c *Client) OnMessageDelete(fn func(channel_id, message_id string)) { - c.OnMessageDeleteFunction = fn + c.OnMessageDeleteFunctions = append(c.OnMessageDeleteFunctions, fn) } // Fetch a channel by Id. diff --git a/websocket.go b/websocket.go index 84c1162..ce11b29 100644 --- a/websocket.go +++ b/websocket.go @@ -36,10 +36,12 @@ func (c *Client) Start() { } // Check events - if rawData.Type == "Ready" && c.OnReadyFunction != nil { + if rawData.Type == "Ready" && c.OnReadyFunctions != nil { // Ready Event - c.OnReadyFunction() - } else if rawData.Type == "Message" && c.OnMessageFunction != nil { + for _, i := range c.OnReadyFunctions { + i() + } + } else if rawData.Type == "Message" && c.OnMessageFunctions != nil { // Message Event msgData := &Message{} err := json.Unmarshal([]byte(message), msgData) @@ -49,8 +51,11 @@ func (c *Client) Start() { } msgData.Client = c - c.OnMessageFunction(msgData) - } else if rawData.Type == "MessageUpdate" && c.OnMessageUpdateFunction != nil { + + for _, i := range c.OnMessageFunctions { + i(msgData) + } + } else if rawData.Type == "MessageUpdate" && c.OnMessageUpdateFunctions != nil { // Message Update Event data := &struct { ChannelId string `json:"channel"` @@ -64,8 +69,10 @@ func (c *Client) Start() { fmt.Printf("Unexcepted Error: %s", err) } - c.OnMessageUpdateFunction(data.ChannelId, data.MessageId, data.Payload) - } else if rawData.Type == "MessageDelete" && c.OnMessageDeleteFunction != nil { + for _, i := range c.OnMessageUpdateFunctions { + i(data.ChannelId, data.MessageId, data.Payload) + } + } else if rawData.Type == "MessageDelete" && c.OnMessageDeleteFunctions != nil { // Message Delete Event data := &struct { ChannelId string `json:"channel"` @@ -78,7 +85,9 @@ func (c *Client) Start() { fmt.Printf("Unexcepted Error: %s", err) } - c.OnMessageDeleteFunction(data.ChannelId, data.MessageId) + for _, i := range c.OnMessageDeleteFunctions { + i(data.ChannelId, data.MessageId) + } } fmt.Println(message)