# Lazy Loading ## Guild List Only the following events should be received by users: - guild name/picture changes - whether an unread message is received in a guild - event will contain a message id so that clients can fetch it later without refetching the message list (will need a GetMessagesBulk endpoint) ## Channel List If we are in a guild, then these should be sent to users: - channel unreads - channel list item moves - permission updates for only your roles - permission updates for channels ## Member List Users should only receive member updates if: - the user can see the member in the member list - the user can see the member in the message history ## Inside of a Channel All events which occur inside of a channel will be sent to clients viewing it. Lazy loading shouldn't be implemented for messages because: - Real-time messaging implies that users won't be performing operations with old messages very often. - It would mean that notifying the server for scroll events won't be necessary ## Emote Packs We should only notify of changes in an emote pack only to users who own it and are online: - Emote name changes - Emote creations / deletions ## Roles Users should only receive role updates only for **their roles**. ## Client caching Clients are expected to cache **everything** that is fetched and **never** refetch anything that's already received. The entire cache must be invalidated only if a socket closes or if a transport error occurs. ## Bots Bots are exempt from lazyness. Simplicity is important for bot implementations.