mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-28 01:33:10 +00:00
State: Added guild emoji handlers
This commit is contained in:
parent
69f8a5d6ec
commit
1b785b1c38
|
@ -37,29 +37,7 @@ func (s *State) onEvent(iface interface{}) {
|
|||
|
||||
// Handle guilds
|
||||
for i := range ev.Guilds {
|
||||
guild := ev.Guilds[i]
|
||||
|
||||
if err := s.Store.GuildSet(&guild.Guild); err != nil {
|
||||
s.stateErr(err, "Failed to set guild in Ready")
|
||||
}
|
||||
|
||||
for i := range guild.Members {
|
||||
if err := s.Store.MemberSet(guild.ID, &guild.Members[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild member in Ready")
|
||||
}
|
||||
}
|
||||
|
||||
for i := range guild.Channels {
|
||||
if err := s.Store.ChannelSet(&guild.Channels[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild channel in Ready")
|
||||
}
|
||||
}
|
||||
|
||||
for i := range guild.Presences {
|
||||
if err := s.Store.PresenceSet(guild.ID, &guild.Presences[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild presence in Ready")
|
||||
}
|
||||
}
|
||||
handleGuildCreate(s, &ev.Guilds[i])
|
||||
}
|
||||
|
||||
// Handle private channels
|
||||
|
@ -75,34 +53,8 @@ func (s *State) onEvent(iface interface{}) {
|
|||
}
|
||||
|
||||
case *gateway.GuildCreateEvent:
|
||||
if err := s.Store.GuildSet(&ev.Guild); err != nil {
|
||||
s.stateErr(err, "Failed to create guild in state")
|
||||
}
|
||||
handleGuildCreate(s, ev)
|
||||
|
||||
for _, m := range ev.Members {
|
||||
m := m
|
||||
|
||||
if err := s.Store.MemberSet(ev.Guild.ID, &m); err != nil {
|
||||
s.stateErr(err, "Failed to add a member from guild in state")
|
||||
}
|
||||
}
|
||||
|
||||
for _, ch := range ev.Channels {
|
||||
ch := ch
|
||||
ch.GuildID = ev.Guild.ID // just to make sure
|
||||
|
||||
if err := s.Store.ChannelSet(&ch); err != nil {
|
||||
s.stateErr(err, "Failed to add a channel from guild in state")
|
||||
}
|
||||
}
|
||||
|
||||
for _, p := range ev.Presences {
|
||||
p := p
|
||||
|
||||
if err := s.Store.PresenceSet(ev.Guild.ID, &p); err != nil {
|
||||
s.stateErr(err, "Failed to add a presence from guild in state")
|
||||
}
|
||||
}
|
||||
case *gateway.GuildUpdateEvent:
|
||||
if err := s.Store.GuildSet((*discord.Guild)(ev)); err != nil {
|
||||
s.stateErr(err, "Failed to update guild in state")
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
|
||||
"github.com/diamondburned/arikawa/discord"
|
||||
"github.com/diamondburned/arikawa/gateway"
|
||||
)
|
||||
|
||||
// Store is the state storage. It should handle mutex itself, and it should only
|
||||
|
@ -84,3 +85,39 @@ type StoreModifier interface {
|
|||
// isn't in the storage. There is no strict restrictions on what uses this (the
|
||||
// default one does, though), so be advised.
|
||||
var ErrStoreNotFound = errors.New("item not found in store")
|
||||
|
||||
// Helper functions
|
||||
|
||||
func handleGuildCreate(s *State, guild *gateway.GuildCreateEvent) {
|
||||
if err := s.Store.GuildSet(&guild.Guild); err != nil {
|
||||
s.stateErr(err, "Failed to set guild in Ready")
|
||||
}
|
||||
|
||||
// Handle guild emojis
|
||||
if guild.Emojis != nil {
|
||||
if err := s.Store.EmojiSet(guild.ID, guild.Emojis); err != nil {
|
||||
s.stateErr(err, "Failed to set guild emojis")
|
||||
}
|
||||
}
|
||||
|
||||
// Handle guild member
|
||||
for i := range guild.Members {
|
||||
if err := s.Store.MemberSet(guild.ID, &guild.Members[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild member in Ready")
|
||||
}
|
||||
}
|
||||
|
||||
// Handle guild channels
|
||||
for i := range guild.Channels {
|
||||
if err := s.Store.ChannelSet(&guild.Channels[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild channel in Ready")
|
||||
}
|
||||
}
|
||||
|
||||
// Handle guild presences
|
||||
for i := range guild.Presences {
|
||||
if err := s.Store.PresenceSet(guild.ID, &guild.Presences[i]); err != nil {
|
||||
s.stateErr(err, "Failed to set guild presence in Ready")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue