bot

package
v0.10.3 Latest Latest
Warning

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

Go to latest
Published: May 16, 2022 License: Apache-2.0 Imports: 19 Imported by: 136

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewEventCollector

func NewEventCollector[E Event](client Client, filterFunc func(e E) bool) (<-chan E, func())

NewEventCollector returns a channel in which the events of type T gets sent which pass the passed filter and a function which can be used to stop the event collector. The close function needs to be called to stop the event collector.

func WaitForEvent added in v0.10.3

func WaitForEvent[E Event](client Client, ctx context.Context, filterFunc func(e E) bool, actionFunc func(e E))

Types

type Client

type Client interface {
	Logger() log.Logger

	// Close will clean up all disgo internals and close the discord gracefully.
	Close(ctx context.Context)

	// Token returns the configured bot token.
	Token() string

	// ApplicationID returns the application id.
	ApplicationID() snowflake.ID

	// ID returns the bot id.
	ID() snowflake.ID

	// Caches returns the cache.Caches used by the Client.
	Caches() cache.Caches

	// Rest returns the rest.Rest used by the Client.
	Rest() rest.Rest

	AddEventListeners(listeners ...EventListener)
	RemoveEventListeners(listeners ...EventListener)

	// EventManager returns the EventManager used by the Client.
	EventManager() EventManager

	// ConnectGateway connects to the configured gateway.Gateway.
	ConnectGateway(ctx context.Context) error

	// Gateway returns the gateway.Gateway used by the Client.
	Gateway() gateway.Gateway

	// HasGateway returns whether the Client has a configured gateway.Gateway.
	HasGateway() bool

	// ConnectShardManager connects to the configured sharding.ShardManager.
	ConnectShardManager(ctx context.Context) error

	// ShardManager returns the sharding.ShardManager used by the Client.
	ShardManager() sharding.ShardManager

	// HasShardManager returns whether the Client has a configured sharding.ShardManager.
	HasShardManager() bool

	// Shard returns the gateway.Gateway the specific guildID runs on.
	Shard(guildID snowflake.ID) (gateway.Gateway, error)

	// Connect sends a discord.GatewayMessageDataVoiceStateUpdate to the specific gateway.Gateway and connects the bot to the specified channel.
	Connect(ctx context.Context, guildID snowflake.ID, channelID snowflake.ID) error

	// Disconnect sends a discord.GatewayMessageDataVoiceStateUpdate to the specific gateway.Gateway and disconnects the bot from this guild.
	Disconnect(ctx context.Context, guildID snowflake.ID) error

	// RequestMembers sends a discord.GatewayMessageDataRequestGuildMembers to the specific gateway.Gateway and requests the Member(s) of the specified guild.
	//  guildID  : is the snowflake of the guild to request the members of.
	//  presence : Weather or not to include discord.Presence data.
	//  nonce	 : The nonce to return to the discord.GatewayEventGuildMembersChunk.
	//  userIDs  : The snowflakes of the users to request the members of.
	RequestMembers(ctx context.Context, guildID snowflake.ID, presence bool, nonce string, userIDs ...snowflake.ID) error

	// RequestMembersWithQuery sends a discord.GatewayMessageDataRequestGuildMembers to the specific gateway.Gateway and requests the Member(s) of the specified guild.
	//  guildID  : is the snowflake of the guild to request the members of.
	//  presence : Weather or not to include discord.Presence data.
	//  nonce    : The nonce to return to the discord.GatewayEventGuildMembersChunk.
	//  query    : The query to use for the request.
	//  limit    : The number of discord.Member(s) to return.
	RequestMembersWithQuery(ctx context.Context, guildID snowflake.ID, presence bool, nonce string, query string, limit int) error

	// SetPresence sends a discord.GatewayMessageDataPresenceUpdate to the gateway.Gateway.
	SetPresence(ctx context.Context, presenceUpdate discord.GatewayMessageDataPresenceUpdate) error

	// SetPresenceForShard sends a discord.GatewayMessageDataPresenceUpdate to the specific gateway.Gateway.
	SetPresenceForShard(ctx context.Context, shardId int, presenceUpdate discord.GatewayMessageDataPresenceUpdate) error

	// MemberChunkingManager returns the MemberChunkingManager used by the Client.
	MemberChunkingManager() MemberChunkingManager

	// StartHTTPServer starts the configured HTTPServer used for interactions over webhooks.
	StartHTTPServer() error

	// HTTPServer returns the configured HTTPServer used for interactions over webhooks.
	HTTPServer() httpserver.Server

	// HasHTTPServer returns whether the Client has a configured HTTPServer.
	HasHTTPServer() bool
}

func BuildClient

func BuildClient(token string, config Config, gatewayEventHandlerFunc func(client Client) gateway.EventHandlerFunc, httpServerEventHandlerFunc func(client Client) httpserver.EventHandlerFunc, os string, name string, github string, version string) (Client, error)

type Config

type Config struct {
	Logger log.Logger

	RestClient           rest.Client
	RestClientConfigOpts []rest.ConfigOpt
	Rest                 rest.Rest

	EventManager           EventManager
	EventManagerConfigOpts []EventManagerConfigOpt

	Gateway           gateway.Gateway
	GatewayConfigOpts []gateway.ConfigOpt

	ShardManager           sharding.ShardManager
	ShardManagerConfigOpts []sharding.ConfigOpt

	HTTPServer           httpserver.Server
	HTTPServerConfigOpts []httpserver.ConfigOpt

	Caches          cache.Caches
	CacheConfigOpts []cache.ConfigOpt

	MemberChunkingManager MemberChunkingManager
	MemberChunkingFilter  MemberChunkingFilter
}

Config lets you configure your Client instance Config is the core.Client config used to configure everything

func DefaultConfig

func DefaultConfig(gatewayHandlers map[discord.GatewayEventType]GatewayEventHandler, httpHandler HTTPServerEventHandler) *Config

func (*Config) Apply

func (c *Config) Apply(opts []ConfigOpt)

type ConfigOpt

type ConfigOpt func(config *Config)

func WithCacheConfigOpts

func WithCacheConfigOpts(opts ...cache.ConfigOpt) ConfigOpt

func WithCaches

func WithCaches(caches cache.Caches) ConfigOpt

func WithEventListeners

func WithEventListeners(eventListeners ...EventListener) ConfigOpt

func WithEventManager

func WithEventManager(eventManager EventManager) ConfigOpt

func WithEventManagerConfigOpts

func WithEventManagerConfigOpts(opts ...EventManagerConfigOpt) ConfigOpt

func WithGateway

func WithGateway(gateway gateway.Gateway) ConfigOpt

func WithGatewayConfigOpts

func WithGatewayConfigOpts(opts ...gateway.ConfigOpt) ConfigOpt

func WithHTTPServer

func WithHTTPServer(httpServer httpserver.Server) ConfigOpt

func WithHTTPServerConfigOpts

func WithHTTPServerConfigOpts(opts ...httpserver.ConfigOpt) ConfigOpt

func WithLogger

func WithLogger(logger log.Logger) ConfigOpt

WithLogger lets you inject your own logger implementing log.Logger

func WithMemberChunkingFilter

func WithMemberChunkingFilter(memberChunkingFilter MemberChunkingFilter) ConfigOpt

func WithMemberChunkingManager

func WithMemberChunkingManager(memberChunkingManager MemberChunkingManager) ConfigOpt

func WithRest

func WithRest(rest rest.Rest) ConfigOpt

func WithRestClient

func WithRestClient(restClient rest.Client) ConfigOpt

func WithRestClientConfigOpts

func WithRestClientConfigOpts(opts ...rest.ConfigOpt) ConfigOpt

func WithShardManager

func WithShardManager(shardManager sharding.ShardManager) ConfigOpt

func WithShardManagerConfigOpts

func WithShardManagerConfigOpts(opts ...sharding.ConfigOpt) ConfigOpt

type Event

type Event interface {
	Client() Client
	SequenceNumber() int
}

Event the basic interface each event implement

type EventListener

type EventListener interface {
	OnEvent(event Event)
}

EventListener is used to create new EventListener to listen to events

type EventManager

type EventManager interface {
	// RawEventsEnabled returns whether events.RawEvent are enabled
	RawEventsEnabled() bool

	// AddEventListeners adds one or more EventListener(s) to the EventManager
	AddEventListeners(eventListeners ...EventListener)

	// RemoveEventListeners removes one or more EventListener(s) from the EventManager
	RemoveEventListeners(eventListeners ...EventListener)

	// HandleGatewayEvent calls the correct GatewayEventHandler for the payload
	HandleGatewayEvent(gatewayEventType discord.GatewayEventType, sequenceNumber int, payload io.Reader)

	// HandleHTTPEvent calls the HTTPServerEventHandler for the payload
	HandleHTTPEvent(respondFunc httpserver.RespondFunc, payload io.Reader)

	// DispatchEvent dispatches a new Event to the Client's EventListener(s)
	DispatchEvent(event Event)
}

EventManager lets you listen for specific events triggered by raw gateway events

func NewEventManager

func NewEventManager(client Client, opts ...EventManagerConfigOpt) EventManager

NewEventManager returns a new EventManager with the EventManagerConfigOpt(s) applied.

type EventManagerConfig

type EventManagerConfig struct {
	EventListeners     []EventListener
	RawEventsEnabled   bool
	AsyncEventsEnabled bool

	GatewayHandlers   map[discord.GatewayEventType]GatewayEventHandler
	HTTPServerHandler HTTPServerEventHandler
}

EventManagerConfig can be used to configure the EventManager.

func DefaultEventManagerConfig

func DefaultEventManagerConfig() *EventManagerConfig

DefaultEventManagerConfig returns a new EventManagerConfig with all default values.

func (*EventManagerConfig) Apply

func (c *EventManagerConfig) Apply(opts []EventManagerConfigOpt)

Apply applies the given EventManagerConfigOpt(s) to the EventManagerConfig.

type EventManagerConfigOpt

type EventManagerConfigOpt func(config *EventManagerConfig)

EventManagerConfigOpt is a functional option for configuring an EventManager.

func WithAsyncEventsEnabled

func WithAsyncEventsEnabled() EventManagerConfigOpt

func WithHTTPServerHandler

func WithHTTPServerHandler(handler HTTPServerEventHandler) EventManagerConfigOpt

func WithListeners

func WithListeners(listeners ...EventListener) EventManagerConfigOpt

WithListeners adds the given EventListener(s) to the EventManagerConfig.

func WithRawEventsEnabled

func WithRawEventsEnabled() EventManagerConfigOpt

type GatewayEventHandler

type GatewayEventHandler interface {
	EventType() discord.GatewayEventType
	New() any
	HandleGatewayEvent(client Client, sequenceNumber int, v any)
}

GatewayEventHandler is used to handle Gateway Event(s)

type HTTPServerEventHandler

type HTTPServerEventHandler interface {
	New() any
	HandleHTTPEvent(client Client, respondFunc func(response discord.InteractionResponse) error, v any)
}

HTTPServerEventHandler is used to handle HTTP Event(s)

type MemberChunkingFilter

type MemberChunkingFilter func(guildID snowflake.ID) bool

MemberChunkingFilter is a filter that can be used to filter from which guilds to request members from.

var (
	MemberChunkingFilterAll  MemberChunkingFilter = func(_ snowflake.ID) bool { return true }
	MemberChunkingFilterNone MemberChunkingFilter = func(_ snowflake.ID) bool { return false }
)

func (MemberChunkingFilter) Exclude

func (f MemberChunkingFilter) Exclude(guildIDs ...snowflake.ID) MemberChunkingFilter

Exclude excludes the given guilds from being chunked.

func (MemberChunkingFilter) Include

func (f MemberChunkingFilter) Include(guildIDs ...snowflake.ID) MemberChunkingFilter

Include includes the given guilds from being chunked.

type MemberChunkingManager

type MemberChunkingManager interface {
	// MemberChunkingFilter returns the configured MemberChunkingFilter used by this MemberChunkingManager.
	MemberChunkingFilter() MemberChunkingFilter

	// HandleChunk handles the discord.GatewayEventGuildMembersChunk event payloads from the discord gateway.
	HandleChunk(payload discord.GatewayEventGuildMembersChunk)

	RequestMembers(guildID snowflake.ID, userIDs ...snowflake.ID) ([]discord.Member, error)
	RequestMembersWithQuery(guildID snowflake.ID, query string, limit int) ([]discord.Member, error)
	RequestMembersWithFilter(guildID snowflake.ID, memberFilterFunc func(member discord.Member) bool) ([]discord.Member, error)

	RequestMembersCtx(ctx context.Context, guildID snowflake.ID, userIDs ...snowflake.ID) ([]discord.Member, error)
	RequestMembersWithQueryCtx(ctx context.Context, guildID snowflake.ID, query string, limit int) ([]discord.Member, error)
	RequestMembersWithFilterCtx(ctx context.Context, guildID snowflake.ID, memberFilterFunc func(member discord.Member) bool) ([]discord.Member, error)

	RequestMembersChan(guildID snowflake.ID, userIDs ...snowflake.ID) (<-chan discord.Member, func(), error)
	RequestMembersWithQueryChan(guildID snowflake.ID, query string, limit int) (<-chan discord.Member, func(), error)
	RequestMembersWithFilterChan(guildID snowflake.ID, memberFilterFunc func(member discord.Member) bool) (<-chan discord.Member, func(), error)
}

MemberChunkingManager is used to request members for guilds from the discord gateway.

func NewMemberChunkingManager

func NewMemberChunkingManager(client Client, memberChunkingFilter MemberChunkingFilter) MemberChunkingManager

NewMemberChunkingManager returns a new MemberChunkingManager with the given MemberChunkingFilter.

Jump to

Keyboard shortcuts

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