pubsub.guild: replace flags with intents checking

This commit is contained in:
Luna 2021-07-11 01:40:05 -03:00
parent 0119044a6c
commit c03ed978ca
1 changed files with 55 additions and 7 deletions

View File

@ -26,6 +26,7 @@ from logbook import Logger
from .dispatcher import DispatcherWithFlags, GatewayEvent
from .channel import ChannelFlags
from litecord.gateway.state import GatewayState
from litecord.enums import Intents
log = Logger(__name__)
@ -35,6 +36,57 @@ class GuildFlags(ChannelFlags):
presence: bool
EVENTS_TO_INTENTS = {
"GUILD_CREATE": Intents.GUILDS,
"GUILD_UPDATE": Intents.GUILDS,
"GUILD_DELETE": Intents.GUILDS,
"GUILD_ROLE_CREATE": Intents.GUILDS,
"GUILD_ROLE_UPDATE": Intents.GUILDS,
"GUILD_ROLE_DELETE": Intents.GUILDS,
"CHANNEL_CREATE": Intents.GUILDS,
"CHANNEL_UPDATE": Intents.GUILDS,
"CHANNEL_DELETE": Intents.GUILDS,
"CHANNEL_PINS_UPDATE": Intents.GUILDS,
# --- threads not supported --
"THREAD_CREATE": Intents.GUILDS,
"THREAD_UPDATE": Intents.GUILDS,
"THREAD_DELETE": Intents.GUILDS,
"THREAD_LIST_SYNC": Intents.GUILDS,
"THREAD_MEMBER_UPDATE": Intents.GUILDS,
"THREAD_MEMBERS_UPDATE": Intents.GUILDS,
# --- stages not supported --
"STAGE_INSTANCE_CREATE": Intents.GUILDS,
"STAGE_INSTANCE_UPDATE": Intents.GUILDS,
"STAGE_INSTANCE_DELETE": Intents.GUILDS,
"GUILD_MEMBER_ADD": Intents.GUILD_MEMBERS,
"GUILD_MEMBER_UPDATE": Intents.GUILD_MEMBERS,
"GUILD_MEMBER_REMOVE": Intents.GUILD_MEMBERS,
# --- threads not supported --
"THREAD_MEMBERS_UPDATE ": Intents.GUILD_MEMBERS,
"GUILD_BAN_ADD": Intents.GUILD_BANS,
"GUILD_BAN_REMOVE": Intents.GUILD_BANS,
"GUILD_EMOJIS_UPDATE": Intents.GUILD_EMOJIS,
"GUILD_INTEGRATIONS_UPDATE": Intents.GUILD_INTEGRATIONS,
"INTEGRATION_CREATE": Intents.GUILD_INTEGRATIONS,
"INTEGRATION_UPDATE": Intents.GUILD_INTEGRATIONS,
"INTEGRATION_DELETE": Intents.GUILD_INTEGRATIONS,
"WEBHOOKS_UPDATE": Intents.GUILD_WEBHOOKS,
"INVITE_CREATE": Intents.GUILD_INVITES,
"INVITE_DELETE": Intents.GUILD_INVITES,
"VOICE_STATE_UPDATE": Intents.GUILD_VOICE_STATES,
"PRESENCE_UPDATE": Intents.GUILD_PRESENCES,
"MESSAGE_CREATE": Intents.GUILD_MESSAGES,
"MESSAGE_UPDATE": Intents.GUILD_MESSAGES,
"MESSAGE_DELETE": Intents.GUILD_MESSAGES,
"MESSAGE_DELETE_BULK": Intents.GUILD_MESSAGES,
"MESSAGE_REACTION_ADD": Intents.GUILD_MESSAGE_REACTIONS,
"MESSAGE_REACTION_REMOVE": Intents.GUILD_MESSAGE_REACTIONS,
"MESSAGE_REACTION_REMOVE_ALL": Intents.GUILD_MESSAGE_REACTIONS,
"MESSAGE_REACTION_REMOVE_EMOJI": Intents.GUILD_MESSAGE_REACTIONS,
"TYPING_START": Intents.GUILD_MESSAGE_TYPING,
}
class GuildDispatcher(
DispatcherWithFlags[int, str, GatewayEvent, List[str], GuildFlags]
):
@ -68,13 +120,9 @@ class GuildDispatcher(
await self.unsub(guild_id, session_id)
continue
try:
flags = self.get_flags(guild_id, session_id)
except KeyError:
log.warning("no flags for {!r}, ignoring", session_id)
flags = GuildFlags(presence=True, typing=True)
if event_type.lower().startswith("presence_") and not flags.presence:
wanted_intent = EVENTS_TO_INTENTS[event_type]
state_has_intent = (state.intents & wanted_intent) == wanted_intent
if not state_has_intent:
continue
try: