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  }