Exemple #1
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    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)
Exemple #6
0
    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)