eventsystem

package
v2.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2022 License: MIT Imports: 11 Imported by: 1

README

YAGPDB's Event System

Instead of just using discordgo's standard simple event system, I like to experiment a little as I work on stuff to see what happens.

It all boils down to a simple 3D slice of handlers (handlers [][][]Handler)

The first index is the event index, that length is generated by events_gen.go

Next index is order, there is 3 orders:

0 - first ran 1 - state handler is here 2 - last, ran concurrently from here on

Orders 1 and 0 are run synchronously, but 2 is run concurrently, this is in order to have the state be as proper as possible.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AllEvents = []Event{
	EventNewGuild,
	EventAll,
	EventAllPre,
	EventAllPost,
	EventMemberFetched,
	EventYagShardReady,
	EventYagShardsAdded,
	EventYagShardRemoved,
	EventApplicationCommandCreate,
	EventApplicationCommandDelete,
	EventApplicationCommandUpdate,
	EventChannelCreate,
	EventChannelDelete,
	EventChannelPinsUpdate,
	EventChannelUpdate,
	EventConnect,
	EventDisconnect,
	EventGuildBanAdd,
	EventGuildBanRemove,
	EventGuildCreate,
	EventGuildDelete,
	EventGuildEmojisUpdate,
	EventGuildIntegrationsUpdate,
	EventGuildMemberAdd,
	EventGuildMemberRemove,
	EventGuildMemberUpdate,
	EventGuildMembersChunk,
	EventGuildRoleCreate,
	EventGuildRoleDelete,
	EventGuildRoleUpdate,
	EventGuildStickersUpdate,
	EventGuildUpdate,
	EventInteractionCreate,
	EventInviteCreate,
	EventInviteDelete,
	EventMessageAck,
	EventMessageCreate,
	EventMessageDelete,
	EventMessageDeleteBulk,
	EventMessageReactionAdd,
	EventMessageReactionRemove,
	EventMessageReactionRemoveAll,
	EventMessageReactionRemoveEmoji,
	EventMessageUpdate,
	EventPresenceUpdate,
	EventPresencesReplace,
	EventRateLimit,
	EventReady,
	EventRelationshipAdd,
	EventRelationshipRemove,
	EventResumed,
	EventStageInstanceCreate,
	EventStageInstanceDelete,
	EventStageInstanceUpdate,
	EventThreadCreate,
	EventThreadDelete,
	EventThreadListSync,
	EventThreadMemberUpdate,
	EventThreadMembersUpdate,
	EventThreadUpdate,
	EventTypingStart,
	EventUserGuildSettingsUpdate,
	EventUserNoteUpdate,
	EventUserSettingsUpdate,
	EventUserUpdate,
	EventVoiceServerUpdate,
	EventVoiceStateUpdate,
	EventWebhooksUpdate,
}
View Source
var DiscordState dstate.StateTracker
View Source
var EventNames = []string{
	"NewGuild",
	"All",
	"AllPre",
	"AllPost",
	"MemberFetched",
	"YagShardReady",
	"YagShardsAdded",
	"YagShardRemoved",
	"ApplicationCommandCreate",
	"ApplicationCommandDelete",
	"ApplicationCommandUpdate",
	"ChannelCreate",
	"ChannelDelete",
	"ChannelPinsUpdate",
	"ChannelUpdate",
	"Connect",
	"Disconnect",
	"GuildBanAdd",
	"GuildBanRemove",
	"GuildCreate",
	"GuildDelete",
	"GuildEmojisUpdate",
	"GuildIntegrationsUpdate",
	"GuildMemberAdd",
	"GuildMemberRemove",
	"GuildMemberUpdate",
	"GuildMembersChunk",
	"GuildRoleCreate",
	"GuildRoleDelete",
	"GuildRoleUpdate",
	"GuildStickersUpdate",
	"GuildUpdate",
	"InteractionCreate",
	"InviteCreate",
	"InviteDelete",
	"MessageAck",
	"MessageCreate",
	"MessageDelete",
	"MessageDeleteBulk",
	"MessageReactionAdd",
	"MessageReactionRemove",
	"MessageReactionRemoveAll",
	"MessageReactionRemoveEmoji",
	"MessageUpdate",
	"PresenceUpdate",
	"PresencesReplace",
	"RateLimit",
	"Ready",
	"RelationshipAdd",
	"RelationshipRemove",
	"Resumed",
	"StageInstanceCreate",
	"StageInstanceDelete",
	"StageInstanceUpdate",
	"ThreadCreate",
	"ThreadDelete",
	"ThreadListSync",
	"ThreadMemberUpdate",
	"ThreadMembersUpdate",
	"ThreadUpdate",
	"TypingStart",
	"UserGuildSettingsUpdate",
	"UserNoteUpdate",
	"UserSettingsUpdate",
	"UserUpdate",
	"VoiceServerUpdate",
	"VoiceStateUpdate",
	"WebhooksUpdate",
}

Functions

func AddHandler

func AddHandler(p common.Plugin, handler HandlerFunc, order Order, evts ...Event)

AddHandler adds a event handler

func AddHandlerAsyncLast

func AddHandlerAsyncLast(p common.Plugin, handler HandlerFunc, evts ...Event)

AddHandlerAsyncLast adds handlers using the OrderAsyncPostState order

func AddHandlerAsyncLastLegacy

func AddHandlerAsyncLastLegacy(p common.Plugin, handler HandlerFuncLegacy, evts ...Event)

AddHandlerAsyncLast adds handlers using the OrderAsyncPostState order

func AddHandlerFirst

func AddHandlerFirst(p common.Plugin, handler HandlerFunc, evts ...Event)

AddHandlerFirst adds handlers using the OrderSyncPreState order

func AddHandlerFirstLegacy

func AddHandlerFirstLegacy(p common.Plugin, handler HandlerFuncLegacy, evts ...Event)

AddHandlerFirst adds handlers using the OrderSyncPreState order

func AddHandlerLegacy

func AddHandlerLegacy(p common.Plugin, handler HandlerFuncLegacy, order Order, evts ...Event)

AddHandler adds a event handler

func AddHandlerSecond

func AddHandlerSecond(p common.Plugin, handler HandlerFunc, evts ...Event)

AddHandlerSecond adds handlers using the OrderSyncPostState order

func AddHandlerSecondLegacy

func AddHandlerSecondLegacy(p common.Plugin, handler HandlerFuncLegacy, evts ...Event)

AddHandlerSecond adds handlers using the OrderSyncPostState order

func EmitEvent

func EmitEvent(data *EventData, evt Event)

EmitEvent emits an event

func HandleEvent

func HandleEvent(s *discordgo.Session, evt interface{})

func InitWorkers

func InitWorkers(totalShards int)

func QueueEventNonDiscord

func QueueEventNonDiscord(evtData *EventData)

Types

type Event

type Event int
const (
	EventNewGuild                   Event = 0
	EventAll                        Event = 1
	EventAllPre                     Event = 2
	EventAllPost                    Event = 3
	EventMemberFetched              Event = 4
	EventYagShardReady              Event = 5
	EventYagShardsAdded             Event = 6
	EventYagShardRemoved            Event = 7
	EventApplicationCommandCreate   Event = 8
	EventApplicationCommandDelete   Event = 9
	EventApplicationCommandUpdate   Event = 10
	EventChannelCreate              Event = 11
	EventChannelDelete              Event = 12
	EventChannelPinsUpdate          Event = 13
	EventChannelUpdate              Event = 14
	EventConnect                    Event = 15
	EventDisconnect                 Event = 16
	EventGuildBanAdd                Event = 17
	EventGuildBanRemove             Event = 18
	EventGuildCreate                Event = 19
	EventGuildDelete                Event = 20
	EventGuildEmojisUpdate          Event = 21
	EventGuildIntegrationsUpdate    Event = 22
	EventGuildMemberAdd             Event = 23
	EventGuildMemberRemove          Event = 24
	EventGuildMemberUpdate          Event = 25
	EventGuildMembersChunk          Event = 26
	EventGuildRoleCreate            Event = 27
	EventGuildRoleDelete            Event = 28
	EventGuildRoleUpdate            Event = 29
	EventGuildStickersUpdate        Event = 30
	EventGuildUpdate                Event = 31
	EventInteractionCreate          Event = 32
	EventInviteCreate               Event = 33
	EventInviteDelete               Event = 34
	EventMessageAck                 Event = 35
	EventMessageCreate              Event = 36
	EventMessageDelete              Event = 37
	EventMessageDeleteBulk          Event = 38
	EventMessageReactionAdd         Event = 39
	EventMessageReactionRemove      Event = 40
	EventMessageReactionRemoveAll   Event = 41
	EventMessageReactionRemoveEmoji Event = 42
	EventMessageUpdate              Event = 43
	EventPresenceUpdate             Event = 44
	EventPresencesReplace           Event = 45
	EventRateLimit                  Event = 46
	EventReady                      Event = 47
	EventRelationshipAdd            Event = 48
	EventRelationshipRemove         Event = 49
	EventResumed                    Event = 50
	EventStageInstanceCreate        Event = 51
	EventStageInstanceDelete        Event = 52
	EventStageInstanceUpdate        Event = 53
	EventThreadCreate               Event = 54
	EventThreadDelete               Event = 55
	EventThreadListSync             Event = 56
	EventThreadMemberUpdate         Event = 57
	EventThreadMembersUpdate        Event = 58
	EventThreadUpdate               Event = 59
	EventTypingStart                Event = 60
	EventUserGuildSettingsUpdate    Event = 61
	EventUserNoteUpdate             Event = 62
	EventUserSettingsUpdate         Event = 63
	EventUserUpdate                 Event = 64
	EventVoiceServerUpdate          Event = 65
	EventVoiceStateUpdate           Event = 66
	EventWebhooksUpdate             Event = 67
)

func (Event) String

func (e Event) String() string

type EventData

type EventData struct {
	EvtInterface interface{}
	Type         Event

	Session           *discordgo.Session
	GuildFeatureFlags []string

	GS *dstate.GuildSet // Guaranteed to be available for guild events, except creates and deletes
	// contains filtered or unexported fields
}

func NewEventData

func NewEventData(session *discordgo.Session, t Event, evtInterface interface{}) *EventData

func (*EventData) ApplicationCommandCreate

func (data *EventData) ApplicationCommandCreate() *discordgo.ApplicationCommandCreate

func (*EventData) ApplicationCommandDelete

func (data *EventData) ApplicationCommandDelete() *discordgo.ApplicationCommandDelete

func (*EventData) ApplicationCommandUpdate

func (data *EventData) ApplicationCommandUpdate() *discordgo.ApplicationCommandUpdate

func (*EventData) CS

func (d *EventData) CS() *dstate.ChannelState

CS is the same as calling d.GS.GetChannel

func (*EventData) CSOrThread

func (d *EventData) CSOrThread() *dstate.ChannelState

CS is the same as calling d.GS.GetChannelOrThread

func (*EventData) Cancel

func (e *EventData) Cancel()

func (*EventData) ChannelCreate

func (data *EventData) ChannelCreate() *discordgo.ChannelCreate

func (*EventData) ChannelDelete

func (data *EventData) ChannelDelete() *discordgo.ChannelDelete

func (*EventData) ChannelPinsUpdate

func (data *EventData) ChannelPinsUpdate() *discordgo.ChannelPinsUpdate

func (*EventData) ChannelUpdate

func (data *EventData) ChannelUpdate() *discordgo.ChannelUpdate

func (*EventData) Clone

func (e *EventData) Clone() *EventData

func (*EventData) Connect

func (data *EventData) Connect() *discordgo.Connect

func (*EventData) Context

func (e *EventData) Context() context.Context

func (*EventData) Disconnect

func (data *EventData) Disconnect() *discordgo.Disconnect

func (*EventData) GuildBanAdd

func (data *EventData) GuildBanAdd() *discordgo.GuildBanAdd

func (*EventData) GuildBanRemove

func (data *EventData) GuildBanRemove() *discordgo.GuildBanRemove

func (*EventData) GuildCreate

func (data *EventData) GuildCreate() *discordgo.GuildCreate

func (*EventData) GuildDelete

func (data *EventData) GuildDelete() *discordgo.GuildDelete

func (*EventData) GuildEmojisUpdate

func (data *EventData) GuildEmojisUpdate() *discordgo.GuildEmojisUpdate

func (*EventData) GuildIntegrationsUpdate

func (data *EventData) GuildIntegrationsUpdate() *discordgo.GuildIntegrationsUpdate

func (*EventData) GuildMemberAdd

func (data *EventData) GuildMemberAdd() *discordgo.GuildMemberAdd

func (*EventData) GuildMemberRemove

func (data *EventData) GuildMemberRemove() *discordgo.GuildMemberRemove

func (*EventData) GuildMemberUpdate

func (data *EventData) GuildMemberUpdate() *discordgo.GuildMemberUpdate

func (*EventData) GuildMembersChunk

func (data *EventData) GuildMembersChunk() *discordgo.GuildMembersChunk

func (*EventData) GuildRoleCreate

func (data *EventData) GuildRoleCreate() *discordgo.GuildRoleCreate

func (*EventData) GuildRoleDelete

func (data *EventData) GuildRoleDelete() *discordgo.GuildRoleDelete

func (*EventData) GuildRoleUpdate

func (data *EventData) GuildRoleUpdate() *discordgo.GuildRoleUpdate

func (*EventData) GuildStickersUpdate

func (data *EventData) GuildStickersUpdate() *discordgo.GuildStickersUpdate

func (*EventData) GuildUpdate

func (data *EventData) GuildUpdate() *discordgo.GuildUpdate

func (*EventData) HasFeatureFlag

func (e *EventData) HasFeatureFlag(flag string) bool

HasFeatureFlag returns true if the guild the event came from has the provided feature flag

func (*EventData) InteractionCreate

func (data *EventData) InteractionCreate() *discordgo.InteractionCreate

func (*EventData) InviteCreate

func (data *EventData) InviteCreate() *discordgo.InviteCreate

func (*EventData) InviteDelete

func (data *EventData) InviteDelete() *discordgo.InviteDelete

func (*EventData) MessageAck

func (data *EventData) MessageAck() *discordgo.MessageAck

func (*EventData) MessageCreate

func (data *EventData) MessageCreate() *discordgo.MessageCreate

func (*EventData) MessageDelete

func (data *EventData) MessageDelete() *discordgo.MessageDelete

func (*EventData) MessageDeleteBulk

func (data *EventData) MessageDeleteBulk() *discordgo.MessageDeleteBulk

func (*EventData) MessageReactionAdd

func (data *EventData) MessageReactionAdd() *discordgo.MessageReactionAdd

func (*EventData) MessageReactionRemove

func (data *EventData) MessageReactionRemove() *discordgo.MessageReactionRemove

func (*EventData) MessageReactionRemoveAll

func (data *EventData) MessageReactionRemoveAll() *discordgo.MessageReactionRemoveAll

func (*EventData) MessageReactionRemoveEmoji

func (data *EventData) MessageReactionRemoveEmoji() *discordgo.MessageReactionRemoveEmoji

func (*EventData) MessageUpdate

func (data *EventData) MessageUpdate() *discordgo.MessageUpdate

func (*EventData) PresenceUpdate

func (data *EventData) PresenceUpdate() *discordgo.PresenceUpdate

func (*EventData) PresencesReplace

func (data *EventData) PresencesReplace() *discordgo.PresencesReplace

func (*EventData) RateLimit

func (data *EventData) RateLimit() *discordgo.RateLimit

func (*EventData) Ready

func (data *EventData) Ready() *discordgo.Ready

func (*EventData) RelationshipAdd

func (data *EventData) RelationshipAdd() *discordgo.RelationshipAdd

func (*EventData) RelationshipRemove

func (data *EventData) RelationshipRemove() *discordgo.RelationshipRemove

func (*EventData) Resumed

func (data *EventData) Resumed() *discordgo.Resumed

func (*EventData) StageInstanceCreate

func (data *EventData) StageInstanceCreate() *discordgo.StageInstanceCreate

func (*EventData) StageInstanceDelete

func (data *EventData) StageInstanceDelete() *discordgo.StageInstanceDelete

func (*EventData) StageInstanceUpdate

func (data *EventData) StageInstanceUpdate() *discordgo.StageInstanceUpdate

func (*EventData) ThreadCreate

func (data *EventData) ThreadCreate() *discordgo.ThreadCreate

func (*EventData) ThreadDelete

func (data *EventData) ThreadDelete() *discordgo.ThreadDelete

func (*EventData) ThreadListSync

func (data *EventData) ThreadListSync() *discordgo.ThreadListSync

func (*EventData) ThreadMemberUpdate

func (data *EventData) ThreadMemberUpdate() *discordgo.ThreadMemberUpdate

func (*EventData) ThreadMembersUpdate

func (data *EventData) ThreadMembersUpdate() *discordgo.ThreadMembersUpdate

func (*EventData) ThreadUpdate

func (data *EventData) ThreadUpdate() *discordgo.ThreadUpdate

func (*EventData) TypingStart

func (data *EventData) TypingStart() *discordgo.TypingStart

func (*EventData) UserGuildSettingsUpdate

func (data *EventData) UserGuildSettingsUpdate() *discordgo.UserGuildSettingsUpdate

func (*EventData) UserNoteUpdate

func (data *EventData) UserNoteUpdate() *discordgo.UserNoteUpdate

func (*EventData) UserSettingsUpdate

func (data *EventData) UserSettingsUpdate() *discordgo.UserSettingsUpdate

func (*EventData) UserUpdate

func (data *EventData) UserUpdate() *discordgo.UserUpdate

func (*EventData) VoiceServerUpdate

func (data *EventData) VoiceServerUpdate() *discordgo.VoiceServerUpdate

func (*EventData) VoiceStateUpdate

func (data *EventData) VoiceStateUpdate() *discordgo.VoiceStateUpdate

func (*EventData) WebhooksUpdate

func (data *EventData) WebhooksUpdate() *discordgo.WebhooksUpdate

func (*EventData) WithContext

func (e *EventData) WithContext(ctx context.Context) *EventData

type Handler

type Handler struct {
	Plugin  common.Plugin
	F       HandlerFunc
	FLegacy HandlerFuncLegacy
}

type HandlerFunc

type HandlerFunc func(evtData *EventData) (retry bool, err error)

func RequireCSMW

func RequireCSMW(inner HandlerFunc) HandlerFunc

RequireCSMW will only call the inner handler if a channel state is available

type HandlerFuncLegacy

type HandlerFuncLegacy func(evtData *EventData)

type Order

type Order int
const (
	// Ran first, syncrounously, before changes from the event is applied to state
	OrderSyncPreState Order = 0
	// Ran second, syncrounsly, after state changes have been applied
	OrderSyncPostState Order = 1
	// Ran last, asyncrounously, most handlers should use this unless you need something else in special circumstances
	OrderAsyncPostState Order = 2
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL