Handle MessageDeleteBulk event (#304)
* Handle MessageDeleteBulk event * Changed State.MessageRemove to use id's * Revert State.MessageRemove change and add State.messageRemoveById * Fix linting
This commit is contained in:
parent
2d50fc197f
commit
6fd80199bf
3 changed files with 45 additions and 2 deletions
|
@ -31,6 +31,7 @@ const (
|
||||||
messageAckEventType = "MESSAGE_ACK"
|
messageAckEventType = "MESSAGE_ACK"
|
||||||
messageCreateEventType = "MESSAGE_CREATE"
|
messageCreateEventType = "MESSAGE_CREATE"
|
||||||
messageDeleteEventType = "MESSAGE_DELETE"
|
messageDeleteEventType = "MESSAGE_DELETE"
|
||||||
|
messageDeleteBulkEventType = "MESSAGE_DELETE_BULK"
|
||||||
messageReactionAddEventType = "MESSAGE_REACTION_ADD"
|
messageReactionAddEventType = "MESSAGE_REACTION_ADD"
|
||||||
messageReactionRemoveEventType = "MESSAGE_REACTION_REMOVE"
|
messageReactionRemoveEventType = "MESSAGE_REACTION_REMOVE"
|
||||||
messageUpdateEventType = "MESSAGE_UPDATE"
|
messageUpdateEventType = "MESSAGE_UPDATE"
|
||||||
|
@ -562,6 +563,28 @@ func (eh messageDeleteEventHandler) Handle(s *Session, i interface{}) {
|
||||||
|
|
||||||
var _ EventHandler = messageDeleteEventHandler(nil)
|
var _ EventHandler = messageDeleteEventHandler(nil)
|
||||||
|
|
||||||
|
// messageDeleteBulkEventHandler is an event handler for MessageDeleteBulk events.
|
||||||
|
type messageDeleteBulkEventHandler func(*Session, *MessageDeleteBulk)
|
||||||
|
|
||||||
|
// Type returns the event type for MessageDeleteBulk events.
|
||||||
|
func (eh messageDeleteBulkEventHandler) Type() string {
|
||||||
|
return messageDeleteBulkEventType
|
||||||
|
}
|
||||||
|
|
||||||
|
// New returns a new instance of MessageDeleteBulk.
|
||||||
|
func (eh messageDeleteBulkEventHandler) New() interface{} {
|
||||||
|
return &MessageDeleteBulk{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle is the handler for MessageDeleteBulk events.
|
||||||
|
func (eh messageDeleteBulkEventHandler) Handle(s *Session, i interface{}) {
|
||||||
|
if t, ok := i.(*MessageDeleteBulk); ok {
|
||||||
|
eh(s, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ EventHandler = messageDeleteBulkEventHandler(nil)
|
||||||
|
|
||||||
// messageReactionAddEventHandler is an event handler for MessageReactionAdd events.
|
// messageReactionAddEventHandler is an event handler for MessageReactionAdd events.
|
||||||
type messageReactionAddEventHandler func(*Session, *MessageReactionAdd)
|
type messageReactionAddEventHandler func(*Session, *MessageReactionAdd)
|
||||||
|
|
||||||
|
@ -961,6 +984,8 @@ func handlerForInterface(handler interface{}) EventHandler {
|
||||||
return messageCreateEventHandler(v)
|
return messageCreateEventHandler(v)
|
||||||
case func(*Session, *MessageDelete):
|
case func(*Session, *MessageDelete):
|
||||||
return messageDeleteEventHandler(v)
|
return messageDeleteEventHandler(v)
|
||||||
|
case func(*Session, *MessageDeleteBulk):
|
||||||
|
return messageDeleteBulkEventHandler(v)
|
||||||
case func(*Session, *MessageReactionAdd):
|
case func(*Session, *MessageReactionAdd):
|
||||||
return messageReactionAddEventHandler(v)
|
return messageReactionAddEventHandler(v)
|
||||||
case func(*Session, *MessageReactionRemove):
|
case func(*Session, *MessageReactionRemove):
|
||||||
|
@ -1020,6 +1045,7 @@ func init() {
|
||||||
registerInterfaceProvider(messageAckEventHandler(nil))
|
registerInterfaceProvider(messageAckEventHandler(nil))
|
||||||
registerInterfaceProvider(messageCreateEventHandler(nil))
|
registerInterfaceProvider(messageCreateEventHandler(nil))
|
||||||
registerInterfaceProvider(messageDeleteEventHandler(nil))
|
registerInterfaceProvider(messageDeleteEventHandler(nil))
|
||||||
|
registerInterfaceProvider(messageDeleteBulkEventHandler(nil))
|
||||||
registerInterfaceProvider(messageReactionAddEventHandler(nil))
|
registerInterfaceProvider(messageReactionAddEventHandler(nil))
|
||||||
registerInterfaceProvider(messageReactionRemoveEventHandler(nil))
|
registerInterfaceProvider(messageReactionRemoveEventHandler(nil))
|
||||||
registerInterfaceProvider(messageUpdateEventHandler(nil))
|
registerInterfaceProvider(messageUpdateEventHandler(nil))
|
||||||
|
|
|
@ -233,3 +233,9 @@ type VoiceServerUpdate struct {
|
||||||
type VoiceStateUpdate struct {
|
type VoiceStateUpdate struct {
|
||||||
*VoiceState
|
*VoiceState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MessageDeleteBulk is the data for a MessageDeleteBulk event
|
||||||
|
type MessageDeleteBulk struct {
|
||||||
|
Messages []string `json:"ids"`
|
||||||
|
ChannelID string `json:"channel_id"`
|
||||||
|
}
|
||||||
|
|
15
state.go
15
state.go
|
@ -524,7 +524,12 @@ func (s *State) MessageRemove(message *Message) error {
|
||||||
return ErrNilState
|
return ErrNilState
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := s.Channel(message.ChannelID)
|
return s.messageRemoveByID(message.ChannelID, message.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// messageRemoveByID removes a message by channelID and messageID from the world state.
|
||||||
|
func (s *State) messageRemoveByID(channelID, messageID string) error {
|
||||||
|
c, err := s.Channel(channelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -533,7 +538,7 @@ func (s *State) MessageRemove(message *Message) error {
|
||||||
defer s.Unlock()
|
defer s.Unlock()
|
||||||
|
|
||||||
for i, m := range c.Messages {
|
for i, m := range c.Messages {
|
||||||
if m.ID == message.ID {
|
if m.ID == messageID {
|
||||||
c.Messages = append(c.Messages[:i], c.Messages[i+1:]...)
|
c.Messages = append(c.Messages[:i], c.Messages[i+1:]...)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -710,6 +715,12 @@ func (s *State) onInterface(se *Session, i interface{}) (err error) {
|
||||||
if s.MaxMessageCount != 0 {
|
if s.MaxMessageCount != 0 {
|
||||||
err = s.MessageRemove(t.Message)
|
err = s.MessageRemove(t.Message)
|
||||||
}
|
}
|
||||||
|
case *MessageDeleteBulk:
|
||||||
|
if s.MaxMessageCount != 0 {
|
||||||
|
for _, mID := range t.Messages {
|
||||||
|
s.messageRemoveByID(t.ChannelID, mID)
|
||||||
|
}
|
||||||
|
}
|
||||||
case *VoiceStateUpdate:
|
case *VoiceStateUpdate:
|
||||||
if s.TrackVoice {
|
if s.TrackVoice {
|
||||||
err = s.voiceStateUpdate(t)
|
err = s.voiceStateUpdate(t)
|
||||||
|
|
Loading…
Reference in a new issue