eventsystem

package
v1.24.19 Latest Latest
Warning

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

Go to latest
Published: Mar 7, 2021 License: MIT Imports: 10 Imported by: 0

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 DiscordState *dstate.State
View Source
var EventNames = []string{
	"NewGuild",
	"All",
	"AllPre",
	"AllPost",
	"MemberFetched",
	"YagShardReady",
	"YagShardsAdded",
	"YagShardRemoved",
	"ChannelCreate",
	"ChannelDelete",
	"ChannelPinsUpdate",
	"ChannelUpdate",
	"Connect",
	"Disconnect",
	"GuildBanAdd",
	"GuildBanRemove",
	"GuildCreate",
	"GuildDelete",
	"GuildEmojisUpdate",
	"GuildIntegrationsUpdate",
	"GuildMemberAdd",
	"GuildMemberRemove",
	"GuildMemberUpdate",
	"GuildMembersChunk",
	"GuildRoleCreate",
	"GuildRoleDelete",
	"GuildRoleUpdate",
	"GuildUpdate",
	"InviteCreate",
	"InviteDelete",
	"MessageAck",
	"MessageCreate",
	"MessageDelete",
	"MessageDeleteBulk",
	"MessageReactionAdd",
	"MessageReactionRemove",
	"MessageReactionRemoveAll",
	"MessageUpdate",
	"PresenceUpdate",
	"PresencesReplace",
	"RateLimit",
	"Ready",
	"RelationshipAdd",
	"RelationshipRemove",
	"Resumed",
	"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 added in v1.24.19

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
	EventChannelCreate            Event = 8
	EventChannelDelete            Event = 9
	EventChannelPinsUpdate        Event = 10
	EventChannelUpdate            Event = 11
	EventConnect                  Event = 12
	EventDisconnect               Event = 13
	EventGuildBanAdd              Event = 14
	EventGuildBanRemove           Event = 15
	EventGuildCreate              Event = 16
	EventGuildDelete              Event = 17
	EventGuildEmojisUpdate        Event = 18
	EventGuildIntegrationsUpdate  Event = 19
	EventGuildMemberAdd           Event = 20
	EventGuildMemberRemove        Event = 21
	EventGuildMemberUpdate        Event = 22
	EventGuildMembersChunk        Event = 23
	EventGuildRoleCreate          Event = 24
	EventGuildRoleDelete          Event = 25
	EventGuildRoleUpdate          Event = 26
	EventGuildUpdate              Event = 27
	EventInviteCreate             Event = 28
	EventInviteDelete             Event = 29
	EventMessageAck               Event = 30
	EventMessageCreate            Event = 31
	EventMessageDelete            Event = 32
	EventMessageDeleteBulk        Event = 33
	EventMessageReactionAdd       Event = 34
	EventMessageReactionRemove    Event = 35
	EventMessageReactionRemoveAll Event = 36
	EventMessageUpdate            Event = 37
	EventPresenceUpdate           Event = 38
	EventPresencesReplace         Event = 39
	EventRateLimit                Event = 40
	EventReady                    Event = 41
	EventRelationshipAdd          Event = 42
	EventRelationshipRemove       Event = 43
	EventResumed                  Event = 44
	EventTypingStart              Event = 45
	EventUserGuildSettingsUpdate  Event = 46
	EventUserNoteUpdate           Event = 47
	EventUserSettingsUpdate       Event = 48
	EventUserUpdate               Event = 49
	EventVoiceServerUpdate        Event = 50
	EventVoiceStateUpdate         Event = 51
	EventWebhooksUpdate           Event = 52
)

func (Event) String

func (e Event) String() string

type EventData

type EventData struct {
	EvtInterface interface{}
	Type         Event

	Session           *discordgo.Session
	GuildFeatureFlags []string

	GS *dstate.GuildState // 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) CS

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

CS will attempt to fetch the channel state from either cached, or state, or return nil if nonexistent (e.g a channel create before the state has been populated by it)

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) 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) GuildUpdate

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

func (*EventData) HasFeatureFlag added in v1.24.19

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

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

func (*EventData) InviteCreate added in v1.24.19

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

func (*EventData) InviteDelete added in v1.24.19

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) 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) 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