Redesign bulk delete events

Change `parse_message_delete_bulk` to not dispatch individual
`message_delete` events, and instead `bulk_message_delete`. Also make
`raw_bulk_message` delete and `raw_message_delete` have message
objects attached.

Fixes #1807
This commit is contained in:
Vexs
2019-03-23 21:46:05 -05:00
committed by Rapptz
parent be227ebcf0
commit 9591b00dcf
3 changed files with 47 additions and 19 deletions

View File

@ -366,21 +366,22 @@ class ConnectionState:
def parse_message_delete(self, data):
raw = RawMessageDeleteEvent(data)
self.dispatch('raw_message_delete', raw)
found = self._get_message(raw.message_id)
raw.cached_message = found
self.dispatch('raw_message_delete', raw)
if found is not None:
self.dispatch('message_delete', found)
self._messages.remove(found)
def parse_message_delete_bulk(self, data):
raw = RawBulkMessageDeleteEvent(data)
found_messages = [message for message in self._messages if message.id in raw.message_ids]
raw.cached_messages = found_messages
self.dispatch('raw_bulk_message_delete', raw)
to_be_deleted = [message for message in self._messages if message.id in raw.message_ids]
for msg in to_be_deleted:
self.dispatch('message_delete', msg)
self._messages.remove(msg)
if found_messages:
self.dispatch('bulk_message_delete', found_messages)
for msg in found_messages:
self._messages.remove(msg)
def parse_message_update(self, data):
raw = RawMessageUpdateEvent(data)