# 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.