func (s *State) Presences() map[string]*discord.Presence {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.Presence)
	for k, v := range s.presences {
		newMap[k] = v.Clone()
	}
	return newMap
}
Presences returns a map of user ID to presence from the state.
package harmony
import (
	"sync"
	"time"
	"github.com/skwair/harmony/discord"
	"github.com/skwair/harmony/voice"
)
type State struct {
	mu sync.RWMutex
	me                *discord.User
	users             map[string]*discord.User
	guilds            map[string]*discord.Guild
	presences         map[string]*discord.Presence  
	channels          map[string]*discord.Channel
	dms               map[string]*discord.Channel
	groups            map[string]*discord.Channel
	unavailableGuilds map[string]*discord.UnavailableGuild
	rtt time.Duration
}
func newState() *State {
	return &State{
		users:             make(map[string]*discord.User),
		guilds:            make(map[string]*discord.Guild),
		presences:         make(map[string]*discord.Presence),
		channels:          make(map[string]*discord.Channel),
		dms:               make(map[string]*discord.Channel),
		groups:            make(map[string]*discord.Channel),
		unavailableGuilds: make(map[string]*discord.UnavailableGuild),
	}
}
func (s *State) Me() *discord.User {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.me.Clone()
}
func (s *State) User(id string) *discord.User {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.users[id].Clone()
}
func (s *State) Guild(id string) *discord.Guild {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.guilds[id].Clone()
}
func (s *State) Channel(id string) *discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.channels[id].Clone()
}
func (s *State) GroupDM(id string) *discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.groups[id].Clone()
}
func (s *State) DM(id string) *discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.dms[id].Clone()
}
func (s *State) Presence(userID string) *discord.Presence {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.presences[userID].Clone()
}
func (s *State) UnavailableGuild(id string) *discord.UnavailableGuild {
	s.mu.RLock()
	defer s.mu.RUnlock()
	return s.unavailableGuilds[id].Clone()
}
func (s *State) Users() map[string]*discord.User {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.User)
	for k, v := range s.users {
		newMap[k] = v.Clone()
	}
	return newMap
}
func (s *State) Guilds() map[string]*discord.Guild {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.Guild)
	for k, v := range s.guilds {
		newMap[k] = v.Clone()
	}
	return newMap
}
func (s *State) Channels() map[string]*discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.Channel)
	for k, v := range s.channels {
		newMap[k] = v.Clone()
	}
	return newMap
}
func (s *State) GroupDMs() map[string]*discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.Channel)
	for k, v := range s.groups {
		newMap[k] = v.Clone()
	}
	return newMap
}
func (s *State) DMs() map[string]*discord.Channel {
	s.mu.RLock()
	defer s.mu.RUnlock()
	newMap := make(map[string]*discord.Channel)
	for k, v := range s.dms {
		newMap[k] = v.Clone()
	}
	return newMap
}