def test_requires_intents():
    assert list(base_events.get_required_intents_for(DummyGuildEvent)) == [
        intents.Intents.GUILDS
    ]
    assert list(base_events.get_required_intents_for(DummyPresenceEvent)) == [
        intents.Intents.GUILD_PRESENCES
    ]
    assert list(base_events.get_required_intents_for(ErrorEvent)) == []
def test_inherited_requires_intents():
    assert list(
        base_events.get_required_intents_for(DummyPresenceDerivedEvent)) == [
            intents.Intents.GUILD_PRESENCES
        ]
    assert list(
        base_events.get_required_intents_for(DummyGuildDerivedEvent)) == [
            intents.Intents.GUILDS
        ]
Exemple #3
0
    def _check_intents(self,
                       event_type: typing.Type[event_dispatcher.EventT_co],
                       nested: int) -> None:
        # If None, the user is on v6 with intents disabled, so we don't care.
        if self._intents is not None:
            # Collection of combined bitfield combinations of intents that
            # could be enabled to receive this event.
            expected_intent_groups = base_events.get_required_intents_for(
                event_type)

            if expected_intent_groups:
                for expected_intent_group in expected_intent_groups:
                    if (self._intents
                            & expected_intent_group) == expected_intent_group:
                        break
                else:
                    expected_intents_str = ", ".join(
                        map(str, expected_intent_groups))

                    warnings.warn(
                        f"You have tried to listen to {event_type.__name__}, but this will only ever be triggered if "
                        f"you enable one of the following intents: {expected_intents_str}.",
                        category=errors.MissingIntentWarning,
                        stacklevel=nested + 3,
                    )
Exemple #4
0
    def _check_event(self, event_type: typing.Type[typing.Any], nested: int) -> None:
        try:
            is_event = issubclass(event_type, base_events.Event)
        except TypeError:
            is_event = False

        if not is_event:
            raise TypeError("'event_type' is a non-Event type")

        # Collection of combined bitfield combinations of intents that
        # could be enabled to receive this event.
        expected_intent_groups = base_events.get_required_intents_for(event_type)

        if expected_intent_groups:
            for expected_intent_group in expected_intent_groups:
                if (self._intents & expected_intent_group) == expected_intent_group:
                    break
            else:
                expected_intents_str = ", ".join(map(str, expected_intent_groups))

                warnings.warn(
                    f"You have tried to listen to {event_type.__name__}, but this will only ever be triggered if "
                    f"you enable one of the following intents: {expected_intents_str}.",
                    category=errors.MissingIntentWarning,
                    stacklevel=nested + 3,
                )