Documentation ¶
Overview ¶
Package state provides interfaces for a local or remote state, as well as abstractions around the REST API and Gateway events.
Index ¶
- Variables
- func DiffMessage(src discord.Message, dst *discord.Message)
- type DefaultStore
- func (s *DefaultStore) Channel(id discord.Snowflake) (*discord.Channel, error)
- func (s *DefaultStore) ChannelRemove(channel *discord.Channel) error
- func (s *DefaultStore) ChannelSet(channel *discord.Channel) error
- func (s *DefaultStore) Channels(guildID discord.Snowflake) ([]discord.Channel, error)
- func (s *DefaultStore) CreatePrivateChannel(recipient discord.Snowflake) (*discord.Channel, error)
- func (s *DefaultStore) Emoji(guildID, emojiID discord.Snowflake) (*discord.Emoji, error)
- func (s *DefaultStore) EmojiSet(guildID discord.Snowflake, emojis []discord.Emoji) error
- func (s *DefaultStore) Emojis(guildID discord.Snowflake) ([]discord.Emoji, error)
- func (s *DefaultStore) Guild(id discord.Snowflake) (*discord.Guild, error)
- func (s *DefaultStore) GuildRemove(id discord.Snowflake) error
- func (s *DefaultStore) GuildSet(guild *discord.Guild) error
- func (s *DefaultStore) Guilds() ([]discord.Guild, error)
- func (s *DefaultStore) MaxMessages() int
- func (s *DefaultStore) Me() (*discord.User, error)
- func (s *DefaultStore) Member(guildID, userID discord.Snowflake) (*discord.Member, error)
- func (s *DefaultStore) MemberRemove(guildID, userID discord.Snowflake) error
- func (s *DefaultStore) MemberSet(guildID discord.Snowflake, member *discord.Member) error
- func (s *DefaultStore) Members(guildID discord.Snowflake) ([]discord.Member, error)
- func (s *DefaultStore) Message(channelID, messageID discord.Snowflake) (*discord.Message, error)
- func (s *DefaultStore) MessageRemove(channelID, messageID discord.Snowflake) error
- func (s *DefaultStore) MessageSet(message *discord.Message) error
- func (s *DefaultStore) Messages(channelID discord.Snowflake) ([]discord.Message, error)
- func (s *DefaultStore) MyselfSet(me *discord.User) error
- func (s *DefaultStore) Presence(guildID, userID discord.Snowflake) (*discord.Presence, error)
- func (s *DefaultStore) PresenceRemove(guildID, userID discord.Snowflake) error
- func (s *DefaultStore) PresenceSet(guildID discord.Snowflake, presence *discord.Presence) error
- func (s *DefaultStore) Presences(guildID discord.Snowflake) ([]discord.Presence, error)
- func (s *DefaultStore) PrivateChannels() ([]discord.Channel, error)
- func (s *DefaultStore) Reset() error
- func (s *DefaultStore) Role(guildID, roleID discord.Snowflake) (*discord.Role, error)
- func (s *DefaultStore) RoleRemove(guildID, roleID discord.Snowflake) error
- func (s *DefaultStore) RoleSet(guildID discord.Snowflake, role *discord.Role) error
- func (s *DefaultStore) Roles(guildID discord.Snowflake) ([]discord.Role, error)
- func (s *DefaultStore) VoiceState(guildID, userID discord.Snowflake) (*discord.VoiceState, error)
- func (s *DefaultStore) VoiceStateRemove(guildID, userID discord.Snowflake) error
- func (s *DefaultStore) VoiceStateSet(guildID discord.Snowflake, voiceState *discord.VoiceState) error
- func (s *DefaultStore) VoiceStates(guildID discord.Snowflake) ([]discord.VoiceState, error)
- type DefaultStoreOptions
- type NoopStore
- func (NoopStore) Channel(discord.Snowflake) (*discord.Channel, error)
- func (NoopStore) ChannelRemove(*discord.Channel) error
- func (NoopStore) ChannelSet(*discord.Channel) error
- func (NoopStore) Channels(discord.Snowflake) ([]discord.Channel, error)
- func (NoopStore) CreatePrivateChannel(discord.Snowflake) (*discord.Channel, error)
- func (NoopStore) Emoji(_, _ discord.Snowflake) (*discord.Emoji, error)
- func (NoopStore) EmojiSet(discord.Snowflake, []discord.Emoji) error
- func (NoopStore) Emojis(discord.Snowflake) ([]discord.Emoji, error)
- func (NoopStore) Guild(discord.Snowflake) (*discord.Guild, error)
- func (NoopStore) GuildRemove(discord.Snowflake) error
- func (NoopStore) GuildSet(*discord.Guild) error
- func (NoopStore) Guilds() ([]discord.Guild, error)
- func (NoopStore) MaxMessages() int
- func (NoopStore) Me() (*discord.User, error)
- func (NoopStore) Member(_, _ discord.Snowflake) (*discord.Member, error)
- func (NoopStore) MemberRemove(_, _ discord.Snowflake) error
- func (NoopStore) MemberSet(discord.Snowflake, *discord.Member) error
- func (NoopStore) Members(discord.Snowflake) ([]discord.Member, error)
- func (NoopStore) Message(_, _ discord.Snowflake) (*discord.Message, error)
- func (NoopStore) MessageRemove(_, _ discord.Snowflake) error
- func (NoopStore) MessageSet(*discord.Message) error
- func (NoopStore) Messages(discord.Snowflake) ([]discord.Message, error)
- func (NoopStore) MyselfSet(*discord.User) error
- func (NoopStore) Presence(_, _ discord.Snowflake) (*discord.Presence, error)
- func (NoopStore) PresenceRemove(_, _ discord.Snowflake) error
- func (NoopStore) PresenceSet(discord.Snowflake, *discord.Presence) error
- func (NoopStore) Presences(discord.Snowflake) ([]discord.Presence, error)
- func (NoopStore) PrivateChannels() ([]discord.Channel, error)
- func (NoopStore) Reset() error
- func (NoopStore) Role(_, _ discord.Snowflake) (*discord.Role, error)
- func (NoopStore) RoleRemove(_, _ discord.Snowflake) error
- func (NoopStore) RoleSet(discord.Snowflake, *discord.Role) error
- func (NoopStore) Roles(discord.Snowflake) ([]discord.Role, error)
- func (NoopStore) VoiceState(_, _ discord.Snowflake) (*discord.VoiceState, error)
- func (NoopStore) VoiceStateRemove(_, _ discord.Snowflake) error
- func (NoopStore) VoiceStateSet(discord.Snowflake, *discord.VoiceState) error
- func (NoopStore) VoiceStates(_ discord.Snowflake) ([]discord.VoiceState, error)
- type State
- func (s *State) AuthorColor(message *gateway.MessageCreateEvent) discord.Color
- func (s *State) AuthorDisplayName(message *gateway.MessageCreateEvent) string
- func (s *State) Channel(id discord.Snowflake) (*discord.Channel, error)
- func (s *State) Channels(guildID discord.Snowflake) ([]discord.Channel, error)
- func (s *State) CreatePrivateChannel(recipient discord.Snowflake) (*discord.Channel, error)
- func (s *State) Emoji(guildID, emojiID discord.Snowflake) (*discord.Emoji, error)
- func (s *State) Emojis(guildID discord.Snowflake) ([]discord.Emoji, error)
- func (s *State) Guild(id discord.Snowflake) (*discord.Guild, error)
- func (s *State) Guilds() ([]discord.Guild, error)
- func (s *State) Me() (*discord.User, error)
- func (s *State) Member(guildID, userID discord.Snowflake) (*discord.Member, error)
- func (s *State) MemberColor(guildID, userID discord.Snowflake) discord.Color
- func (s *State) MemberDisplayName(guildID, userID discord.Snowflake) (string, error)
- func (s *State) Members(guildID discord.Snowflake) ([]discord.Member, error)
- func (s *State) Message(channelID, messageID discord.Snowflake) (*discord.Message, error)
- func (s *State) Messages(channelID discord.Snowflake) ([]discord.Message, error)
- func (s *State) Permissions(channelID, userID discord.Snowflake) (discord.Permissions, error)
- func (s *State) Presence(guildID, userID discord.Snowflake) (*discord.Presence, error)
- func (s *State) PrivateChannels() ([]discord.Channel, error)
- func (s *State) Role(guildID, roleID discord.Snowflake) (*discord.Role, error)
- func (s *State) Roles(guildID discord.Snowflake) ([]discord.Role, error)
- func (s *State) WithContext(ctx context.Context) *State
- type Store
- type StoreGetter
- type StoreModifier
Constants ¶
This section is empty.
Variables ¶
var ( MaxFetchMembers uint = 1000 MaxFetchGuilds uint = 100 )
var ErrNotImplemented = errors.New("State is not implemented")
var ErrStoreNotFound = errors.New("item not found in store")
ErrStoreNotFound is an error that a store can use to return when something isn't in the storage. There is no strict restrictions on what uses this (the default one does, though), so be advised.
Functions ¶
Types ¶
type DefaultStore ¶
type DefaultStore struct { *DefaultStoreOptions // contains filtered or unexported fields }
func NewDefaultStore ¶
func NewDefaultStore(opts *DefaultStoreOptions) *DefaultStore
func (*DefaultStore) ChannelRemove ¶
func (s *DefaultStore) ChannelRemove(channel *discord.Channel) error
func (*DefaultStore) ChannelSet ¶
func (s *DefaultStore) ChannelSet(channel *discord.Channel) error
func (*DefaultStore) CreatePrivateChannel ¶ added in v0.3.0
CreatePrivateChannel searches in the cache for a private channel. It makes no API calls.
func (*DefaultStore) GuildRemove ¶
func (s *DefaultStore) GuildRemove(id discord.Snowflake) error
func (*DefaultStore) MaxMessages ¶ added in v0.0.3
func (s *DefaultStore) MaxMessages() int
func (*DefaultStore) MemberRemove ¶
func (s *DefaultStore) MemberRemove(guildID, userID discord.Snowflake) error
func (*DefaultStore) MessageRemove ¶
func (s *DefaultStore) MessageRemove(channelID, messageID discord.Snowflake) error
func (*DefaultStore) MessageSet ¶
func (s *DefaultStore) MessageSet(message *discord.Message) error
func (*DefaultStore) MyselfSet ¶ added in v0.1.2
func (s *DefaultStore) MyselfSet(me *discord.User) error
func (*DefaultStore) PresenceRemove ¶
func (s *DefaultStore) PresenceRemove(guildID, userID discord.Snowflake) error
func (*DefaultStore) PresenceSet ¶
func (*DefaultStore) PrivateChannels ¶
func (s *DefaultStore) PrivateChannels() ([]discord.Channel, error)
PrivateChannels returns a list of Direct Message channels randomly ordered.
func (*DefaultStore) Reset ¶
func (s *DefaultStore) Reset() error
func (*DefaultStore) RoleRemove ¶
func (s *DefaultStore) RoleRemove(guildID, roleID discord.Snowflake) error
func (*DefaultStore) VoiceState ¶ added in v0.4.1
func (s *DefaultStore) VoiceState(guildID, userID discord.Snowflake) (*discord.VoiceState, error)
func (*DefaultStore) VoiceStateRemove ¶ added in v0.4.1
func (s *DefaultStore) VoiceStateRemove(guildID, userID discord.Snowflake) error
func (*DefaultStore) VoiceStateSet ¶ added in v0.4.1
func (s *DefaultStore) VoiceStateSet(guildID discord.Snowflake, voiceState *discord.VoiceState) error
func (*DefaultStore) VoiceStates ¶ added in v0.4.1
func (s *DefaultStore) VoiceStates(guildID discord.Snowflake) ([]discord.VoiceState, error)
type DefaultStoreOptions ¶
type DefaultStoreOptions struct {
MaxMessages uint // default 50
}
type NoopStore ¶ added in v0.1.5
type NoopStore struct{}
NoopStore could be embedded by other structs for partial state implementation. All Getters will return ErrNotImplemented, and all Setters will return no error.
func (NoopStore) ChannelRemove ¶ added in v0.1.5
func (NoopStore) CreatePrivateChannel ¶ added in v0.3.0
func (NoopStore) GuildRemove ¶ added in v0.1.5
func (NoopStore) MaxMessages ¶ added in v0.1.5
MaxMessages will always return 100 messages, so the API can fetch that many.
func (NoopStore) MemberRemove ¶ added in v0.1.5
func (NoopStore) MessageRemove ¶ added in v0.1.5
func (NoopStore) PresenceRemove ¶ added in v0.1.5
func (NoopStore) PresenceSet ¶ added in v0.1.5
func (NoopStore) PrivateChannels ¶ added in v0.1.5
func (NoopStore) RoleRemove ¶ added in v0.1.5
func (NoopStore) VoiceState ¶ added in v0.4.1
func (NoopStore) VoiceStateRemove ¶ added in v0.4.1
func (NoopStore) VoiceStateSet ¶ added in v0.4.1
func (NoopStore) VoiceStates ¶ added in v0.4.1
type State ¶
type State struct { *session.Session Store // Ready is not updated by the state. Ready gateway.ReadyEvent // StateLog logs all errors that come from the state cache. This includes // not found errors. Defaults to a no-op, as state errors aren't that // important. StateLog func(error) // PreHandler is the manual hook that is executed before the State handler // is. This should only be used for low-level operations. // It's recommended to set Synchronous to true if you mutate the events. PreHandler *handler.Handler // default nil // Command handler with inherited methods. Ran after PreHandler. You should // most of the time use this instead of Session's, to avoid race conditions // with the State *handler.Handler // contains filtered or unexported fields }
func (*State) AuthorColor ¶ added in v0.0.7
func (s *State) AuthorColor(message *gateway.MessageCreateEvent) discord.Color
func (*State) AuthorDisplayName ¶ added in v0.0.7
func (s *State) AuthorDisplayName(message *gateway.MessageCreateEvent) string
func (*State) CreatePrivateChannel ¶ added in v0.3.0
func (*State) MemberColor ¶ added in v0.0.7
func (*State) MemberDisplayName ¶ added in v0.0.7
func (*State) Messages ¶
Messages fetches maximum 100 messages from the API, if it has to. There is no limit if it's from the State storage.
func (*State) Permissions ¶
func (*State) Presence ¶
Presence checks the state for user presences. If no guildID is given, it will look for the presence in all guilds.
func (*State) PrivateChannels ¶ added in v0.3.0
type Store ¶
type Store interface { StoreGetter StoreModifier }
Store is the state storage. It should handle mutex itself, and it should only concern itself with the local state.
type StoreGetter ¶
type StoreGetter interface { Me() (*discord.User, error) // Channel should check for both DM and guild channels. Channel(id discord.Snowflake) (*discord.Channel, error) Channels(guildID discord.Snowflake) ([]discord.Channel, error) // same API as (*api.Client) CreatePrivateChannel(recipient discord.Snowflake) (*discord.Channel, error) PrivateChannels() ([]discord.Channel, error) Emoji(guildID, emojiID discord.Snowflake) (*discord.Emoji, error) Emojis(guildID discord.Snowflake) ([]discord.Emoji, error) Guild(id discord.Snowflake) (*discord.Guild, error) Guilds() ([]discord.Guild, error) Member(guildID, userID discord.Snowflake) (*discord.Member, error) Members(guildID discord.Snowflake) ([]discord.Member, error) Message(channelID, messageID discord.Snowflake) (*discord.Message, error) Messages(channelID discord.Snowflake) ([]discord.Message, error) MaxMessages() int // used to know if the state is filled or not. // These don't get fetched from the API, it's Gateway only. Presence(guildID, userID discord.Snowflake) (*discord.Presence, error) Presences(guildID discord.Snowflake) ([]discord.Presence, error) Role(guildID, roleID discord.Snowflake) (*discord.Role, error) Roles(guildID discord.Snowflake) ([]discord.Role, error) VoiceState(guildID discord.Snowflake, userID discord.Snowflake) (*discord.VoiceState, error) VoiceStates(guildID discord.Snowflake) ([]discord.VoiceState, error) }
All methods in StoreGetter will be wrapped by the State. If the State can't find anything in the storage, it will call the API itself and automatically add what's missing into the storage.
Methods that return with a slice should pay attention to race conditions that would mutate the underlying slice (and as a result the returned slice as well). The best way to avoid this is to copy the whole slice, like DefaultStore does.
type StoreModifier ¶
type StoreModifier interface { MyselfSet(me *discord.User) error // ChannelSet should switch on Type to know if it's a private channel or // not. ChannelSet(*discord.Channel) error ChannelRemove(*discord.Channel) error // EmojiSet should delete all old emojis before setting new ones. EmojiSet(guildID discord.Snowflake, emojis []discord.Emoji) error GuildSet(*discord.Guild) error GuildRemove(id discord.Snowflake) error MemberSet(guildID discord.Snowflake, member *discord.Member) error MemberRemove(guildID, userID discord.Snowflake) error MessageSet(*discord.Message) error MessageRemove(channelID, messageID discord.Snowflake) error PresenceSet(guildID discord.Snowflake, presence *discord.Presence) error PresenceRemove(guildID, userID discord.Snowflake) error RoleSet(guildID discord.Snowflake, role *discord.Role) error RoleRemove(guildID, roleID discord.Snowflake) error VoiceStateSet(guildID discord.Snowflake, voiceState *discord.VoiceState) error VoiceStateRemove(guildID discord.Snowflake, userID discord.Snowflake) error }