async def parse_message_reaction_add(self, data, old): emoji = PartialEmoji.with_state( self, id=utils._get_as_snowflake(data["emoji"], "id"), animated=data["emoji"].get("animated", False), name=data["emoji"]["name"], ) raw = RawReactionActionEvent(data, emoji, "REACTION_ADD") member = data.get("member") if member: guild = await self._get_guild(raw.guild_id) if guild: raw.member = Member(guild=guild, state=self, data=member) self.dispatch("raw_reaction_add", raw) message = await self._get_message(raw.message_id) if message: reaction = Reaction(message=message, data=data, emoji=await self._upgrade_partial_emoji(emoji)) user = raw.member or await self._get_reaction_user( message.channel, raw.user_id) if user: self.dispatch("reaction_add", reaction, user)
def __init__(self, *, state, channel, data): self._state = state self._data = data self.id = int(data["id"]) self.webhook_id = utils._get_as_snowflake(data, "webhook_id") self.reactions = [ Reaction(message=self, data=d) for d in data.get("reactions", []) ] self.attachments = [ Attachment(data=a, state=self._state) for a in data["attachments"] ] self.embeds = [Embed.from_dict(a) for a in data["embeds"]] self.application = data.get("application") self.activity = data.get("activity") self.channel = channel self._edited_timestamp = utils.parse_time(data["edited_timestamp"]) self.type = try_enum(MessageType, data["type"]) self.pinned = data["pinned"] self.flags = MessageFlags._from_value(data.get("flags", 0)) self.mention_everyone = data["mention_everyone"] self.tts = data["tts"] self.content = data["content"] self.nonce = data.get("nonce") ref = data.get("message_reference") self.reference = MessageReference(state, ** ref) if ref is not None else None for handler in ("call", "flags"): try: getattr(self, "_handle_%s" % handler)(data[handler]) except KeyError: continue
async def reactions(self): reactions = [] for reaction in self._data.get("reactions", []): emoji = await self._state.get_reaction_emoji(reaction["emoji"]) reactions.append(Reaction(message=self, data=reaction, emoji=emoji)) return reactions
def __init__(self, *, state, channel, data): self._state = state self._data = data self.id = int(data["id"]) self.webhook_id = utils._get_as_snowflake(data, "webhook_id") self.reactions = [ Reaction(message=self, data=x, emoji="x") for x in data.get("reactions", []) ] self.attachments = [ Attachment(data=x, state=self._state) for x in data["attachments"] ] self.embeds = [Embed.from_dict(x) for x in data["embeds"]] self.application = data.get("application") self.activity = data.get("activity") self.channel = channel self._edited_timestamp = utils.parse_time(data["edited_timestamp"]) self.type = try_enum(MessageType, data["type"]) self.pinned = data["pinned"] self.flags = MessageFlags._from_value(data.get("flags", 0)) self.mention_everyone = data["mention_everyone"] self.tts = data["tts"] self.content = data["content"] self.nonce = data.get("nonce") ref = data.get("message_reference") self.reference = MessageReference.with_state( state, ref) if ref is not None else None try: self._author = self._state.store_user(self._data["author"]) except KeyError: self._author = None try: author = self._author try: author._update_from_message(self._data["member"]) except AttributeError: author = Member._from_message(message=self, data=self._data["member"]) self._member = author except KeyError: self._member = None for handler in ("call", "flags"): try: getattr(self, f"_handle_{handler}")(data[handler]) except KeyError: continue
async def parse_message_reaction_remove_emoji(self, data, old): emoji = PartialEmoji.with_state( self, id=utils._get_as_snowflake(data["emoji"], "id"), name=data["emoji"]["name"], ) raw = RawReactionClearEmojiEvent(data, emoji) self.dispatch("raw_reaction_clear_emoji", raw) message = await self._get_message(raw.message_id) if message: reaction = Reaction(message=message, data=data, emoji=await self._upgrade_partial_emoji(emoji)) self.dispatch("reaction_clear_emoji", reaction)
async def parse_message_reaction_remove(self, data, old): emoji = PartialEmoji.with_state( self, id=utils._get_as_snowflake(data["emoji"], "id"), name=data["emoji"]["name"], ) raw = RawReactionActionEvent(data, emoji, "REACTION_REMOVE") self.dispatch("raw_reaction_remove", raw) message = await self._get_message(raw.message_id) if message: reaction = Reaction(message=message, data=data, emoji=await self._upgrade_partial_emoji(emoji)) user = await self._get_reaction_user(message.channel, raw.user_id) if user: self.dispatch("reaction_remove", reaction, user)