rest

package
v0.0.0-...-60b4207 Latest Latest
Warning

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

Go to latest
Published: Mar 4, 2026 License: MIT Imports: 31 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateEncryptionKey

func GenerateEncryptionKey(size int) ([]byte, error)

func IsStatus

func IsStatus(err error, statusCodes ...int) bool

Types

type ChannelConfig

type ChannelConfig struct {
	Topic                         *string                        `json:"topic,omitempty"`
	Bitrate                       *int                           `json:"bitrate,omitempty"`
	UserLimit                     *int                           `json:"user_limit,omitempty"`
	RateLimitPerUser              *int                           `json:"rate_limit_per_user,omitempty"`
	Position                      *int                           `json:"position,omitempty"`
	PermissionOverwrites          []*discord.PermissionOverwrite `json:"permission_overwrites,omitempty"`
	ParentID                      *snowflake.ID                  `json:"parent_id,omitempty"`
	NSFW                          *bool                          `json:"nsfw,omitempty"`
	RTCRegion                     *string                        `json:"rtc_region,omitempty"`
	VideoQualityMode              *int                           `json:"video_quality_mode,omitempty"`
	DefaultAutoArchiveDuration    *int                           `json:"default_auto_archive_duration,omitempty"`
	DefaultReactionEmoji          *discord.DefaultReaction       `json:"default_reaction_emoji,omitempty"`
	AvailableTags                 []*discord.ForumTag            `json:"available_tags,omitempty"`
	DefaultSortOrder              *int                           `json:"default_sort_order,omitempty"`
	DefaultForumLayout            *int                           `json:"default_forum_layout,omitempty"`
	DefaultThreadRateLimitPerUser *int                           `json:"default_thread_rate_limit_per_user,omitempty"`
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

func New

func New(token string, opts ...Option) *Client

func (*Client) AddGuildMember

func (c *Client) AddGuildMember(ctx context.Context, guildID, userID snowflake.ID, accessToken string, member *discord.GuildMemberAdd, opts ...RequestOption) (*discord.Member, error)

func (*Client) AddGuildMemberRole

func (c *Client) AddGuildMemberRole(ctx context.Context, guildID, userID, roleID snowflake.ID, opts ...RequestOption) error

func (*Client) AllGuildMembers

func (c *Client) AllGuildMembers(ctx context.Context, guildID snowflake.ID) iter.Seq2[*discord.Member, error]

func (*Client) AllReactions

func (c *Client) AllReactions(ctx context.Context, channelID, messageID snowflake.ID, emoji string) iter.Seq2[*discord.User, error]

func (*Client) BeginGuildPrune

func (c *Client) BeginGuildPrune(ctx context.Context, guildID snowflake.ID, days int, computePruneCount bool, includeRoles []snowflake.ID, opts ...RequestOption) (int, error)

func (*Client) BulkDeleteMessages

func (c *Client) BulkDeleteMessages(ctx context.Context, channelID snowflake.ID, messageIDs []snowflake.ID, opts ...RequestOption) error

func (*Client) ClearReactions

func (c *Client) ClearReactions(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) error

func (*Client) ClearReactionsForEmoji

func (c *Client) ClearReactionsForEmoji(ctx context.Context, channelID, messageID snowflake.ID, emoji string, opts ...RequestOption) error

func (*Client) Close

func (c *Client) Close() error

func (*Client) CreateChannel

func (c *Client) CreateChannel(ctx context.Context, guildID snowflake.ID, opts *CreateChannelOptions, reqOpts ...RequestOption) (*discord.Channel, error)

func (*Client) CreateChannelInvite

func (c *Client) CreateChannelInvite(ctx context.Context, channelID snowflake.ID, opts *CreateChannelInviteOptions, reqOpts ...RequestOption) (*discord.Invite, error)

func (*Client) CreateGuild

func (c *Client) CreateGuild(ctx context.Context, guild *discord.GuildCreate, opts ...RequestOption) (*discord.Guild, error)

func (*Client) CreateGuildBan

func (c *Client) CreateGuildBan(ctx context.Context, guildID, userID snowflake.ID, banOpts *CreateGuildBanOptions, opts ...RequestOption) error

func (*Client) CreateGuildRole

func (c *Client) CreateGuildRole(ctx context.Context, guildID snowflake.ID, role *discord.GuildRoleCreate, opts ...RequestOption) (*discord.Role, error)

func (*Client) CreateMessage

func (c *Client) CreateMessage(ctx context.Context, channelID snowflake.ID, msg *discord.CreateMessage, opts ...RequestOption) (*discord.Message, error)

func (*Client) CreateMessageWithFiles

func (c *Client) CreateMessageWithFiles(ctx context.Context, channelID snowflake.ID, msg *discord.CreateMessage, files []*discord.File, opts ...RequestOption) (*discord.Message, error)

func (*Client) CrosspostMessage

func (c *Client) CrosspostMessage(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) (*discord.Message, error)

func (*Client) DeleteChannel

func (c *Client) DeleteChannel(ctx context.Context, channelID snowflake.ID, opts ...RequestOption) error

func (*Client) DeleteChannelPermission

func (c *Client) DeleteChannelPermission(ctx context.Context, channelID, overwriteID snowflake.ID, opts ...RequestOption) error

func (*Client) DeleteGuild

func (c *Client) DeleteGuild(ctx context.Context, guildID snowflake.ID, opts ...RequestOption) error

func (*Client) DeleteGuildRole

func (c *Client) DeleteGuildRole(ctx context.Context, guildID, roleID snowflake.ID, opts ...RequestOption) error

func (*Client) DeleteMessage

func (c *Client) DeleteMessage(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) error

func (*Client) DeleteReaction

func (c *Client) DeleteReaction(ctx context.Context, channelID, messageID snowflake.ID, emoji string, userID snowflake.ID, opts ...RequestOption) error

func (*Client) EditChannelPermissions

func (c *Client) EditChannelPermissions(ctx context.Context, channelID, overwriteID snowflake.ID, perms *discord.PermissionOverwrite, reqOpts ...RequestOption) error

func (*Client) EditMessage

func (c *Client) EditMessage(ctx context.Context, channelID, messageID snowflake.ID, msg *discord.MessageUpdate, opts ...RequestOption) (*discord.Message, error)

func (*Client) FollowAnnouncementChannel

func (c *Client) FollowAnnouncementChannel(ctx context.Context, channelID snowflake.ID, opts *FollowAnnouncementChannelOptions, reqOpts ...RequestOption) (*discord.FollowedChannel, error)

func (*Client) GetChannel

func (c *Client) GetChannel(ctx context.Context, channelID snowflake.ID, opts ...RequestOption) (*discord.Channel, error)

func (*Client) GetChannelInvites

func (c *Client) GetChannelInvites(ctx context.Context, channelID snowflake.ID, opts ...RequestOption) ([]*discord.Invite, error)

func (*Client) GetGuild

func (c *Client) GetGuild(ctx context.Context, guildID snowflake.ID, opts ...RequestOption) (*discord.Guild, error)

func (*Client) GetGuildBan

func (c *Client) GetGuildBan(ctx context.Context, guildID, userID snowflake.ID, opts ...RequestOption) (*discord.GuildBanAdd, error)

func (*Client) GetGuildBans

func (c *Client) GetGuildBans(ctx context.Context, guildID snowflake.ID, opts *GetGuildBansOptions, reqOpts ...RequestOption) ([]*discord.GuildBanAdd, error)

func (*Client) GetGuildChannels

func (c *Client) GetGuildChannels(ctx context.Context, guildID snowflake.ID, opts ...RequestOption) ([]*discord.Channel, error)

func (*Client) GetGuildMember

func (c *Client) GetGuildMember(ctx context.Context, guildID, userID snowflake.ID, opts ...RequestOption) (*discord.Member, error)

func (*Client) GetGuildPreview

func (c *Client) GetGuildPreview(ctx context.Context, guildID snowflake.ID, opts ...RequestOption) (*discord.Guild, error)

func (*Client) GetGuildPruneCount

func (c *Client) GetGuildPruneCount(ctx context.Context, guildID snowflake.ID, days int, includeRoles []snowflake.ID, opts ...RequestOption) (int, error)

func (*Client) GetGuildRoles

func (c *Client) GetGuildRoles(ctx context.Context, guildID snowflake.ID, opts ...RequestOption) ([]*discord.Role, error)

func (*Client) GetMessage

func (c *Client) GetMessage(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) (*discord.Message, error)

func (*Client) GetMessages

func (c *Client) GetMessages(ctx context.Context, channelID snowflake.ID, opts *GetMessagesOptions, reqOpts ...RequestOption) ([]*discord.Message, error)

func (*Client) GetPins

func (c *Client) GetPins(ctx context.Context, channelID snowflake.ID, opts ...RequestOption) ([]*discord.Message, error)

func (*Client) GetReactions

func (c *Client) GetReactions(ctx context.Context, channelID, messageID snowflake.ID, emoji string, opts *GetReactionsOptions, reqOpts ...RequestOption) ([]*discord.User, error)

func (*Client) ListGuildMembers

func (c *Client) ListGuildMembers(ctx context.Context, guildID snowflake.ID, opts *ListGuildMembersOptions, reqOpts ...RequestOption) ([]*discord.Member, error)

func (*Client) Messages

func (c *Client) Messages(ctx context.Context, channelID snowflake.ID, opts *GetMessagesOptions) iter.Seq2[*discord.Message, error]

func (*Client) ModifyChannel

func (c *Client) ModifyChannel(ctx context.Context, channelID snowflake.ID, opts *ModifyChannelOptions, reqOpts ...RequestOption) (*discord.Channel, error)

func (*Client) ModifyCurrentMember

func (c *Client) ModifyCurrentMember(ctx context.Context, guildID snowflake.ID, member *discord.GuildMemberUpdate, opts ...RequestOption) (*discord.Member, error)

func (*Client) ModifyCurrentUserNick

func (c *Client) ModifyCurrentUserNick(ctx context.Context, guildID snowflake.ID, nick string, opts ...RequestOption) error

func (*Client) ModifyGuild

func (c *Client) ModifyGuild(ctx context.Context, guildID snowflake.ID, guild *discord.GuildUpdate, opts ...RequestOption) (*discord.Guild, error)

func (*Client) ModifyGuildChannelPositions

func (c *Client) ModifyGuildChannelPositions(ctx context.Context, guildID snowflake.ID, positions []map[string]any, opts ...RequestOption) error

func (*Client) ModifyGuildMember

func (c *Client) ModifyGuildMember(ctx context.Context, guildID, userID snowflake.ID, member *discord.GuildMemberUpdate, opts ...RequestOption) (*discord.Member, error)

func (*Client) ModifyGuildRole

func (c *Client) ModifyGuildRole(ctx context.Context, guildID, roleID snowflake.ID, role *discord.GuildRoleUpdate, opts ...RequestOption) (*discord.Role, error)

func (*Client) ModifyGuildRolePositions

func (c *Client) ModifyGuildRolePositions(ctx context.Context, guildID snowflake.ID, positions []map[string]any, opts ...RequestOption) ([]*discord.Role, error)

func (*Client) Pin

func (c *Client) Pin(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) error

func (*Client) React

func (c *Client) React(ctx context.Context, channelID, messageID snowflake.ID, emoji string, opts ...RequestOption) error

func (*Client) RemoveGuildBan

func (c *Client) RemoveGuildBan(ctx context.Context, guildID, userID snowflake.ID, opts ...RequestOption) error

func (*Client) RemoveGuildMember

func (c *Client) RemoveGuildMember(ctx context.Context, guildID, userID snowflake.ID, opts ...RequestOption) error

func (*Client) RemoveGuildMemberRole

func (c *Client) RemoveGuildMemberRole(ctx context.Context, guildID, userID, roleID snowflake.ID, opts ...RequestOption) error

func (*Client) Reply

func (c *Client) Reply(ctx context.Context, channelID, messageID snowflake.ID, content string, opts ...RequestOption) (*discord.Message, error)

func (*Client) SearchGuildMembers

func (c *Client) SearchGuildMembers(ctx context.Context, guildID snowflake.ID, opts *SearchGuildMembersOptions, reqOpts ...RequestOption) ([]*discord.Member, error)

func (*Client) Send

func (c *Client) Send(ctx context.Context, channelID snowflake.ID, content string, opts ...RequestOption) (*discord.Message, error)

func (*Client) SessionStats

func (c *Client) SessionStats() SessionStats

func (*Client) Stats

func (c *Client) Stats() ratelimit.Stats

func (*Client) TriggerTypingIndicator

func (c *Client) TriggerTypingIndicator(ctx context.Context, channelID snowflake.ID, opts ...RequestOption) error

func (*Client) Unpin

func (c *Client) Unpin(ctx context.Context, channelID, messageID snowflake.ID, opts ...RequestOption) error

func (*Client) Unreact

func (c *Client) Unreact(ctx context.Context, channelID, messageID snowflake.ID, emoji string, opts ...RequestOption) error

type CreateChannelInviteOptions

type CreateChannelInviteOptions struct {
	MaxAge              *int          `json:"max_age,omitempty"`
	MaxUses             *int          `json:"max_uses,omitempty"`
	Temporary           *bool         `json:"temporary,omitempty"`
	Unique              *bool         `json:"unique,omitempty"`
	TargetType          *int          `json:"target_type,omitempty"`
	TargetUserID        *snowflake.ID `json:"target_user_id,omitempty"`
	TargetApplicationID *snowflake.ID `json:"target_application_id,omitempty"`
}

type CreateChannelOptions

type CreateChannelOptions struct {
	Name string `json:"name"`
	Type int    `json:"type"`
	ChannelConfig
}

type CreateGuildBanOptions

type CreateGuildBanOptions struct {
	DeleteMessageDays    int `json:"delete_message_days,omitempty"`
	DeleteMessageSeconds int `json:"delete_message_seconds,omitempty"`
}

type Encryption

type Encryption struct {
	Key []byte
}

type Error

type Error struct {
	Request      *http.Request
	RequestBody  []byte
	Response     *http.Response
	ResponseBody []byte
	APIError     *discord.APIError
}

Error contains HTTP request/response context and parsed Discord API error details.

func (*Error) Error

func (e *Error) Error() string

func (*Error) StatusCode

func (e *Error) StatusCode() int

func (*Error) Unwrap

func (e *Error) Unwrap() error

type FollowAnnouncementChannelOptions

type FollowAnnouncementChannelOptions struct {
	WebhookChannelID snowflake.ID `json:"webhook_channel_id"`
}

type GetGuildBansOptions

type GetGuildBansOptions struct {
	Limit  int
	Before *snowflake.ID
	After  *snowflake.ID
}

type GetMessagesOptions

type GetMessagesOptions struct {
	Around, Before, After *snowflake.ID
	Limit                 int
}

type GetReactionsOptions

type GetReactionsOptions struct {
	After *snowflake.ID
	Limit int
}

type HeaderConfig

type HeaderConfig struct {
	UserAgent       string
	Accept          string
	AcceptLanguage  string
	Origin          string
	Referer         string
	SecChUa         string
	SecChUaMobile   string
	SecChUaPlatform string
	SecFetchDest    string
	SecFetchMode    string
	SecFetchSite    string
	DiscordLocale   string
	DiscordTimezone string
	DebugOptions    string
	BrowserVersion  string
	OS              string
	OSVersion       string
	SystemLocale    string
	ReleaseChannel  string
}

HeaderConfig holds all configurable HTTP headers

func BrazilianLocale

func BrazilianLocale() HeaderConfig

Preset configurations for common use cases

func DefaultHeaderConfig

func DefaultHeaderConfig() HeaderConfig

DefaultHeaderConfig returns the default header configuration

func EuropeanLocale

func EuropeanLocale() HeaderConfig

func LinuxConfig

func LinuxConfig() HeaderConfig

func MacOSConfig

func MacOSConfig() HeaderConfig

func (*HeaderConfig) ApplyToRequest

func (h *HeaderConfig) ApplyToRequest(req *http.Request, contentType string, fingerprint string, superProps string)

ApplyToRequest applies the header configuration to an HTTP request

func (*HeaderConfig) GenerateSuperProperties

func (h *HeaderConfig) GenerateSuperProperties(buildNumber int) (string, error)

GenerateSuperProperties generates the X-Super-Properties

type ListGuildMembersOptions

type ListGuildMembersOptions struct {
	Limit int
	After *snowflake.ID
}

type MetricsSink

type MetricsSink interface {
	Inc(key string)
}

MetricsSink receives internal counters from the REST client.

type ModifyChannelOptions

type ModifyChannelOptions struct {
	Name *string `json:"name,omitempty"`
	Type *int    `json:"type,omitempty"`
	ChannelConfig
}

type NoopMetrics

type NoopMetrics struct{}

NoopMetrics ignores all emitted metrics.

func (NoopMetrics) Inc

func (NoopMetrics) Inc(string)

type Option

type Option func(*Client)

func WithBrazilianLocale

func WithBrazilianLocale() Option

func WithEuropeanLocale

func WithEuropeanLocale() Option

func WithHTTPClient

func WithHTTPClient(client *http.Client) Option

func WithHeaderConfig

func WithHeaderConfig(cfg HeaderConfig) Option

func WithLinux

func WithLinux() Option

func WithLogger

func WithLogger(logger *slog.Logger) Option

func WithMacOS

func WithMacOS() Option

func WithMaxRetries

func WithMaxRetries(max int) Option

func WithMetrics

func WithMetrics(sink MetricsSink) Option

WithMetrics sets the metrics sink used by internal counters.

func WithRequestCoalescing

func WithRequestCoalescing(enabled bool) Option

WithRequestCoalescing enables/disables inflight deduplication for GET requests.

func WithRequestInterceptor

func WithRequestInterceptor(i RequestInterceptor) Option

func WithResponseInterceptor

func WithResponseInterceptor(i ResponseInterceptor) Option

func WithSession

func WithSession(opts ...SessionOption) Option

func WithStaticSession

func WithStaticSession(fingerprint string, cookies []*http.Cookie, superProps string) Option

func WithTimeout

func WithTimeout(timeout time.Duration) Option

func WithUnsafeBodyLogging

func WithUnsafeBodyLogging(enabled bool) Option

WithUnsafeBodyLogging enables logging raw request/response payloads. This is disabled by default because payloads can contain sensitive data.

type RequestInterceptor

type RequestInterceptor func(ctx context.Context, req *http.Request) error

type RequestOption

type RequestOption func(*http.Request)

func WithHeader

func WithHeader(key, value string) RequestOption

func WithReason

func WithReason(reason string) RequestOption

type ResponseInterceptor

type ResponseInterceptor func(ctx context.Context, resp *http.Response) error

type SearchGuildMembersOptions

type SearchGuildMembersOptions struct {
	Query string
	Limit int
}

type SessionOption

type SessionOption func(*sessionConfig)

func WithAutoRotate

func WithAutoRotate(threshold float64) SessionOption

func WithBuildNumber

func WithBuildNumber(build int) SessionOption

func WithPersist

func WithPersist(path string, encryption ...*Encryption) SessionOption

func WithSessionLogger

func WithSessionLogger(logger *slog.Logger) SessionOption

func WithoutAutoRotate

func WithoutAutoRotate() SessionOption

type SessionStats

type SessionStats struct {
	FingerprintHitRate float64
	FingerprintAge     time.Duration
	CookieHitRate      float64
	CookieAge          time.Duration
	TotalFetches       int64
}

Jump to

Keyboard shortcuts

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