Skip to content

Commit

Permalink
added generic guild channel event & added webhooks update event
Browse files Browse the repository at this point in the history
  • Loading branch information
topi314 committed Jun 13, 2021
1 parent c9fafaa commit 249f061
Show file tree
Hide file tree
Showing 20 changed files with 213 additions and 43 deletions.
2 changes: 1 addition & 1 deletion api/disgo_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ type DisgoBuilder interface {
SetLogger(level log.Logger) DisgoBuilder
SetToken(token string) DisgoBuilder
SetHTTPClient(httpClient *http.Client) DisgoBuilder
SetGatewayIntents(GatewayIntents GatewayIntents) DisgoBuilder
SetGatewayIntents(GatewayIntents ...GatewayIntents) DisgoBuilder
SetRawGatewayEventsEnabled(enabled bool) DisgoBuilder
SetVoiceDispatchInterceptor(voiceDispatchInterceptor VoiceDispatchInterceptor) DisgoBuilder
SetEntityBuilder(entityBuilder EntityBuilder) DisgoBuilder
Expand Down
2 changes: 1 addition & 1 deletion api/events/category_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

// GenericCategoryEvent is called upon receiving CategoryCreateEvent, CategoryUpdateEvent or CategoryDeleteEvent
type GenericCategoryEvent struct {
GenericChannelEvent
GenericGuildChannelEvent
Category *api.Category
}

Expand Down
6 changes: 1 addition & 5 deletions api/events/channel_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,5 @@ import (
type GenericChannelEvent struct {
GenericEvent
ChannelID api.Snowflake
}

// Channel returns the api.Channel from the api.Cache if cached
func (e GenericChannelEvent) Channel() *api.Channel {
return e.Disgo().Cache().Channel(e.ChannelID)
Channel *api.Channel
}
31 changes: 31 additions & 0 deletions api/events/guild_channel_events.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package events

import "github.com/DisgoOrg/disgo/api"

// GenericGuildChannelEvent is called upon receiving GuildChannelCreateEvent, GuildChannelUpdateEvent or GuildChannelDeleteEvent
type GenericGuildChannelEvent struct {
GenericChannelEvent
GuildID api.Snowflake
GuildChannel *api.GuildChannel
}

// Guild returns the cached api.Guild the event happened in
func (e GenericGuildChannelEvent) Guild() *api.Guild {
return e.Disgo().Cache().Guild(e.GuildID)
}

// GuildChannelCreateEvent indicates that a new api.GuildChannel got created in a api.Guild
type GuildChannelCreateEvent struct {
GenericGuildChannelEvent
}

// GuildChannelUpdateEvent indicates that a api.GuildChannel got updated in a api.Guild
type GuildChannelUpdateEvent struct {
GenericGuildChannelEvent
OldGuildChannel *api.GuildChannel
}

// GuildChannelDeleteEvent indicates that a api.GuildChannel got deleted in a api.Guild
type GuildChannelDeleteEvent struct {
GenericGuildChannelEvent
}
3 changes: 2 additions & 1 deletion api/events/guild_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import (
// GenericGuildEvent is called upon receiving GuildUpdateEvent, GuildAvailableEvent, GuildUnavailableEvent, GuildJoinEvent, GuildLeaveEvent, GuildReadyEvent, GuildBanEvent, GuildUnbanEvent
type GenericGuildEvent struct {
GenericEvent
Guild *api.Guild
GuildID api.Snowflake
Guild *api.Guild
}

// GuildUpdateEvent is called upon receiving api.Guild updates
Expand Down
24 changes: 24 additions & 0 deletions api/events/listener_adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ type ListenerAdapter struct {
// api.Channel Events
OnGenericChannelEvent func(event GenericChannelEvent)

// api.GuildChannel Events
OnGenericGuildChannelEvent func(event GenericGuildChannelEvent)
OnGuildChannelCreate func(event GuildChannelCreateEvent)
OnGuildChannelUpdate func(event GuildChannelUpdateEvent)
OnGuildChannelDelete func(event GuildChannelDeleteEvent)

// api.Category Events
OnGenericCategoryEvent func(event GenericCategoryEvent)
OnCategoryCreate func(event CategoryCreateEvent)
Expand Down Expand Up @@ -204,6 +210,24 @@ func (l ListenerAdapter) OnEvent(event interface{}) {
listener(e)
}

// api.GuildChannel Events
case GenericGuildChannelEvent:
if listener := l.OnGenericGuildChannelEvent; listener != nil {
listener(e)
}
case GuildChannelCreateEvent:
if listener := l.OnGuildChannelCreate; listener != nil {
listener(e)
}
case GuildChannelUpdateEvent:
if listener := l.OnGuildChannelUpdate; listener != nil {
listener(e)
}
case GuildChannelDeleteEvent:
if listener := l.OnGuildChannelDelete; listener != nil {
listener(e)
}

// api.Category Events
case GenericCategoryEvent:
if listener := l.OnGenericCategoryEvent; listener != nil {
Expand Down
2 changes: 1 addition & 1 deletion api/events/store_channel_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

// GenericStoreChannelEvent is called upon receiving StoreChannelCreateEvent, StoreChannelUpdateEvent or StoreChannelDeleteEvent
type GenericStoreChannelEvent struct {
GenericChannelEvent
GenericGuildChannelEvent
StoreChannel *api.StoreChannel
}

Expand Down
7 changes: 6 additions & 1 deletion api/events/text_channel_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

// GenericTextChannelEvent is called upon receiving TextChannelCreateEvent, TextChannelUpdateEvent or TextChannelDeleteEvent
type GenericTextChannelEvent struct {
GenericChannelEvent
GenericGuildChannelEvent
TextChannel *api.TextChannel
}

Expand All @@ -25,3 +25,8 @@ type TextChannelUpdateEvent struct {
type TextChannelDeleteEvent struct {
GenericTextChannelEvent
}

// WebhooksUpdateEvent indicates that a api.Webhook updated in this api.TextChannel
type WebhooksUpdateEvent struct {
GenericTextChannelEvent
}
2 changes: 1 addition & 1 deletion api/events/voice_channel_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

// GenericVoiceChannelEvent is called upon receiving VoiceChannelCreateEvent, VoiceChannelUpdateEvent or VoiceChannelDeleteEvent
type GenericVoiceChannelEvent struct {
GenericChannelEvent
GenericGuildChannelEvent
VoiceChannel *api.VoiceChannel
}

Expand Down
2 changes: 1 addition & 1 deletion example/examplebot.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func main() {
SetLogger(logger).
SetRawGatewayEventsEnabled(true).
SetHTTPClient(client).
SetGatewayIntents(api.GatewayIntentsGuilds | api.GatewayIntentsGuildMessages | api.GatewayIntentsGuildMembers).
SetGatewayIntents(api.GatewayIntentsGuilds, api.GatewayIntentsGuildMessages, api.GatewayIntentsGuildMembers, api.GatewayIntentsGuildWebhooks).
SetMemberCachePolicy(api.MemberCachePolicyAll).
AddEventListeners(&events.ListenerAdapter{
OnRawGateway: rawGatewayEventListener,
Expand Down
4 changes: 2 additions & 2 deletions internal/disgo_builder_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ func (b *DisgoBuilderImpl) SetHTTPClient(httpClient *http.Client) api.DisgoBuild
}

// SetGatewayIntents sets the api.GatewayIntents to connect to discord
func (b *DisgoBuilderImpl) SetGatewayIntents(gatewayIntents api.GatewayIntents) api.DisgoBuilder {
b.gatewayIntents = gatewayIntents
func (b *DisgoBuilderImpl) SetGatewayIntents(gatewayIntents ...api.GatewayIntents) api.DisgoBuilder {
b.gatewayIntents = api.GatewayIntentsNone.Add(gatewayIntents...)
return b
}

Expand Down
2 changes: 2 additions & 0 deletions internal/handlers/all_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ func GetAllHandlers() []api.EventHandler {
GuildRoleDeleteHandler{},
GuildRoleUpdateHandler{},

WebhooksUpdateHandler{},

InteractionCreateHandler{},
InteractionCreateWebhookHandler{},

Expand Down
35 changes: 27 additions & 8 deletions internal/handlers/channel_create_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,31 @@ func (h ChannelCreateHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
return
}

channel.Disgo = disgo

genericChannelEvent := events.GenericChannelEvent{
GenericEvent: events.NewEvent(disgo, sequenceNumber),
ChannelID: channel.ID,
Channel: channel,
}
eventManager.Dispatch(genericChannelEvent)

var genericGuildChannelEvent events.GenericGuildChannelEvent
if channel.GuildID != nil {
genericGuildChannelEvent = events.GenericGuildChannelEvent{
GuildID: *channel.GuildID,
GenericChannelEvent: genericChannelEvent,
GuildChannel: &api.GuildChannel{
Channel: *channel,
},
}
eventManager.Dispatch(genericGuildChannelEvent)

eventManager.Dispatch(events.GuildChannelCreateEvent{
GenericGuildChannelEvent: genericGuildChannelEvent,
})
}

switch channel.Type {
case api.ChannelTypeDM:
dmChannel := disgo.EntityBuilder().CreateDMChannel(channel, api.CacheStrategyYes)
Expand All @@ -52,8 +71,8 @@ func (h ChannelCreateHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
textChannel := disgo.EntityBuilder().CreateTextChannel(channel, api.CacheStrategyYes)

genericTextChannelEvent := events.GenericTextChannelEvent{
GenericChannelEvent: genericChannelEvent,
TextChannel: textChannel,
GenericGuildChannelEvent: genericGuildChannelEvent,
TextChannel: textChannel,
}
eventManager.Dispatch(genericTextChannelEvent)

Expand All @@ -65,8 +84,8 @@ func (h ChannelCreateHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
storeChannel := disgo.EntityBuilder().CreateStoreChannel(channel, api.CacheStrategyYes)

genericStoreChannelEvent := events.GenericStoreChannelEvent{
GenericChannelEvent: genericChannelEvent,
StoreChannel: storeChannel,
GenericGuildChannelEvent: genericGuildChannelEvent,
StoreChannel: storeChannel,
}
eventManager.Dispatch(genericStoreChannelEvent)

Expand All @@ -78,8 +97,8 @@ func (h ChannelCreateHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
category := disgo.EntityBuilder().CreateCategory(channel, api.CacheStrategyYes)

genericCategoryEvent := events.GenericCategoryEvent{
GenericChannelEvent: genericChannelEvent,
Category: category,
GenericGuildChannelEvent: genericGuildChannelEvent,
Category: category,
}
eventManager.Dispatch(genericCategoryEvent)

Expand All @@ -91,8 +110,8 @@ func (h ChannelCreateHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
voiceChannel := disgo.EntityBuilder().CreateVoiceChannel(channel, api.CacheStrategyYes)

genericVoiceChannelEvent := events.GenericVoiceChannelEvent{
GenericChannelEvent: genericChannelEvent,
VoiceChannel: voiceChannel,
GenericGuildChannelEvent: genericGuildChannelEvent,
VoiceChannel: voiceChannel,
}
eventManager.Dispatch(genericVoiceChannelEvent)

Expand Down
35 changes: 27 additions & 8 deletions internal/handlers/channel_delete_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,31 @@ func (h ChannelDeleteHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
return
}

channel.Disgo = disgo

genericChannelEvent := events.GenericChannelEvent{
GenericEvent: events.NewEvent(disgo, sequenceNumber),
ChannelID: channel.ID,
Channel: channel,
}
eventManager.Dispatch(genericChannelEvent)

var genericGuildChannelEvent events.GenericGuildChannelEvent
if channel.GuildID != nil {
genericGuildChannelEvent = events.GenericGuildChannelEvent{
GenericChannelEvent: genericChannelEvent,
GuildID: *channel.GuildID,
GuildChannel: &api.GuildChannel{
Channel: *channel,
},
}
eventManager.Dispatch(genericGuildChannelEvent)

eventManager.Dispatch(events.GuildChannelDeleteEvent{
GenericGuildChannelEvent: genericGuildChannelEvent,
})
}

switch channel.Type {
case api.ChannelTypeDM:
disgo.Cache().UncacheDMChannel(channel.ID)
Expand All @@ -52,8 +71,8 @@ func (h ChannelDeleteHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
disgo.Cache().UncacheTextChannel(*channel.GuildID, channel.ID)

genericTextChannelEvent := events.GenericTextChannelEvent{
GenericChannelEvent: genericChannelEvent,
TextChannel: disgo.EntityBuilder().CreateTextChannel(channel, api.CacheStrategyNo),
GenericGuildChannelEvent: genericGuildChannelEvent,
TextChannel: disgo.EntityBuilder().CreateTextChannel(channel, api.CacheStrategyNo),
}
eventManager.Dispatch(genericTextChannelEvent)

Expand All @@ -65,8 +84,8 @@ func (h ChannelDeleteHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
disgo.Cache().UncacheStoreChannel(*channel.GuildID, channel.ID)

genericStoreChannelEvent := events.GenericStoreChannelEvent{
GenericChannelEvent: genericChannelEvent,
StoreChannel: disgo.EntityBuilder().CreateStoreChannel(channel, api.CacheStrategyNo),
GenericGuildChannelEvent: genericGuildChannelEvent,
StoreChannel: disgo.EntityBuilder().CreateStoreChannel(channel, api.CacheStrategyNo),
}
eventManager.Dispatch(genericStoreChannelEvent)

Expand All @@ -78,8 +97,8 @@ func (h ChannelDeleteHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
disgo.Cache().UncacheCategory(*channel.GuildID, channel.ID)

genericCategoryEvent := events.GenericCategoryEvent{
GenericChannelEvent: genericChannelEvent,
Category: disgo.EntityBuilder().CreateCategory(channel, api.CacheStrategyNo),
GenericGuildChannelEvent: genericGuildChannelEvent,
Category: disgo.EntityBuilder().CreateCategory(channel, api.CacheStrategyNo),
}
eventManager.Dispatch(genericCategoryEvent)

Expand All @@ -91,8 +110,8 @@ func (h ChannelDeleteHandler) HandleGatewayEvent(disgo api.Disgo, eventManager a
disgo.Cache().UncacheVoiceChannel(*channel.GuildID, channel.ID)

genericVoiceChannelEvent := events.GenericVoiceChannelEvent{
GenericChannelEvent: genericChannelEvent,
VoiceChannel: disgo.EntityBuilder().CreateVoiceChannel(channel, api.CacheStrategyNo),
GenericGuildChannelEvent: genericGuildChannelEvent,
VoiceChannel: disgo.EntityBuilder().CreateVoiceChannel(channel, api.CacheStrategyNo),
}
eventManager.Dispatch(genericVoiceChannelEvent)

Expand Down
Loading

0 comments on commit 249f061

Please sign in to comment.