github.com/diamondburned/arikawa@v1.3.14/state/event_dispatcher.go (about) 1 package state 2 3 import ( 4 "github.com/diamondburned/arikawa/gateway" 5 ) 6 7 func (s *State) handleReady(ev *gateway.ReadyEvent) { 8 for _, g := range ev.Guilds { 9 // store this so we know when we need to dispatch a belated 10 // GuildReadyEvent 11 if g.Unavailable { 12 s.unreadyGuilds.Add(g.ID) 13 } else { 14 s.Handler.Call(&GuildReadyEvent{ 15 GuildCreateEvent: &g, 16 }) 17 } 18 } 19 } 20 21 func (s *State) handleGuildCreate(ev *gateway.GuildCreateEvent) { 22 // this guild was unavailable, but has come back online 23 if s.unavailableGuilds.Delete(ev.ID) { 24 s.Handler.Call(&GuildAvailableEvent{ 25 GuildCreateEvent: ev, 26 }) 27 28 // the guild was already unavailable when connecting to the gateway 29 // we can dispatch a belated GuildReadyEvent 30 } else if s.unreadyGuilds.Delete(ev.ID) { 31 s.Handler.Call(&GuildReadyEvent{ 32 GuildCreateEvent: ev, 33 }) 34 } else { // we don't know this guild, hence we just joined it 35 s.Handler.Call(&GuildJoinEvent{ 36 GuildCreateEvent: ev, 37 }) 38 } 39 } 40 41 func (s *State) handleGuildDelete(ev *gateway.GuildDeleteEvent) { 42 // store this so we can later dispatch a GuildAvailableEvent, once the 43 // guild becomes available again. 44 if ev.Unavailable { 45 s.unavailableGuilds.Add(ev.ID) 46 47 s.Handler.Call(&GuildUnavailableEvent{ 48 GuildDeleteEvent: ev, 49 }) 50 } else { 51 // it might have been unavailable before we left 52 s.unavailableGuilds.Delete(ev.ID) 53 54 s.Handler.Call(&GuildLeaveEvent{ 55 GuildDeleteEvent: ev, 56 }) 57 } 58 }