From 9591b00dcfb79a18288211473006fe562518b307 Mon Sep 17 00:00:00 2001 From: Vexs Date: Sat, 23 Mar 2019 21:46:05 -0500 Subject: 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 --- discord/raw_models.py | 11 ++++++++--- discord/state.py | 15 ++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'discord') diff --git a/discord/raw_models.py b/discord/raw_models.py index adacbd85..211216af 100644 --- a/discord/raw_models.py +++ b/discord/raw_models.py @@ -35,14 +35,16 @@ class RawMessageDeleteEvent: The guild ID where the deletion took place, if applicable. message_id: :class:`int` The message ID that got deleted. + cached_message: Optional[:class:`Message`] + The cached message, if found in the internal message cache. """ - __slots__ = ('message_id', 'channel_id', 'guild_id') + __slots__ = ('message_id', 'channel_id', 'guild_id', 'cached_message') def __init__(self, data): self.message_id = int(data['id']) self.channel_id = int(data['channel_id']) - + self.cached_message = None try: self.guild_id = int(data['guild_id']) except KeyError: @@ -59,13 +61,16 @@ class RawBulkMessageDeleteEvent: The channel ID where the message got deleted. guild_id: Optional[:class:`int`] The guild ID where the message got deleted, if applicable. + cached_messages: List[:class:`Message`] + The cached messages, if found in the internal message cache. """ - __slots__ = ('message_ids', 'channel_id', 'guild_id') + __slots__ = ('message_ids', 'channel_id', 'guild_id', 'cached_messages') def __init__(self, data): self.message_ids = {int(x) for x in data.get('ids', [])} self.channel_id = int(data['channel_id']) + self.cached_messages = [] try: self.guild_id = int(data['guild_id']) diff --git a/discord/state.py b/discord/state.py index ebde9ec0..11c58612 100644 --- a/discord/state.py +++ b/discord/state.py @@ -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) -- cgit v1.2.3