mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-08-19 23:04:51 +00:00
* api: add support for the X-Audit-Log-Reason header * api: inline reason parameter, where data struct has a single field
127 lines
3.7 KiB
Go
127 lines
3.7 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
"github.com/diamondburned/arikawa/v3/utils/httputil"
|
|
"github.com/diamondburned/arikawa/v3/utils/json/option"
|
|
)
|
|
|
|
var EndpointInvites = Endpoint + "invites/"
|
|
|
|
// Invite returns an invite object for the given code.
|
|
//
|
|
// ApproxMembers will not get filled.
|
|
func (c *Client) Invite(code string) (*discord.Invite, error) {
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(
|
|
&inv, "GET",
|
|
EndpointInvites+code,
|
|
)
|
|
}
|
|
|
|
// InviteWithCounts returns an invite object for the given code and fills
|
|
// ApproxMembers.
|
|
func (c *Client) InviteWithCounts(code string) (*discord.Invite, error) {
|
|
var params struct {
|
|
WithCounts bool `schema:"with_counts,omitempty"`
|
|
}
|
|
|
|
params.WithCounts = true
|
|
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(
|
|
&inv, "GET",
|
|
EndpointInvites+code,
|
|
httputil.WithSchema(c, params),
|
|
)
|
|
}
|
|
|
|
// ChannelInvites returns a list of invite objects (with invite metadata) for
|
|
// the channel. Only usable for guild channels.
|
|
//
|
|
// Requires the MANAGE_CHANNELS permission.
|
|
func (c *Client) ChannelInvites(channelID discord.ChannelID) ([]discord.Invite, error) {
|
|
var invs []discord.Invite
|
|
return invs, c.RequestJSON(&invs, "GET",
|
|
EndpointChannels+channelID.String()+"/invites")
|
|
}
|
|
|
|
// GuildInvites returns a list of invite objects (with invite metadata) for the
|
|
// guild.
|
|
//
|
|
// Requires the MANAGE_GUILD permission.
|
|
func (c *Client) GuildInvites(guildID discord.GuildID) ([]discord.Invite, error) {
|
|
var invs []discord.Invite
|
|
return invs, c.RequestJSON(&invs, "GET",
|
|
EndpointGuilds+guildID.String()+"/invites")
|
|
}
|
|
|
|
// https://discord.com/developers/docs/resources/channel#create-channel-invite-json-params
|
|
type CreateInviteData struct {
|
|
// MaxAge is the duration of invite in seconds before expiry, or 0 for
|
|
// never.
|
|
//
|
|
// Default: 86400 (24 hours)
|
|
MaxAge option.Uint `json:"max_age,omitempty"`
|
|
// MaxUses is the max number of uses or 0 for unlimited.
|
|
//
|
|
// Default: 0
|
|
MaxUses uint `json:"max_uses,omitempty"`
|
|
// Temporary specifies whether this invite only grants temporary membership.
|
|
//
|
|
// Default: false
|
|
Temporary bool `json:"temporary,omitempty"`
|
|
// Unique has the following behavior: if true, don't try to reuse a similar
|
|
// invite (useful for creating many unique one time use invites).
|
|
//
|
|
// Default: false
|
|
Unique bool `json:"unique,omitempty"`
|
|
|
|
AuditLogReason `json:"-"`
|
|
}
|
|
|
|
// CreateInvite creates a new invite object for the channel. Only usable for
|
|
// guild channels.
|
|
//
|
|
// Requires the CREATE_INSTANT_INVITE permission.
|
|
func (c *Client) CreateInvite(
|
|
channelID discord.ChannelID, data CreateInviteData) (*discord.Invite, error) {
|
|
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(
|
|
&inv, "POST",
|
|
EndpointChannels+channelID.String()+"/invites",
|
|
httputil.WithJSONBody(data), httputil.WithHeaders(data.Header()),
|
|
)
|
|
}
|
|
|
|
// JoinedInvite is returned after joining an invite.
|
|
type JoinedInvite struct {
|
|
Code string `json:"code"`
|
|
NewMember bool `json:"new_member"`
|
|
Guild discord.Guild `json:"guild"`
|
|
Channel discord.Channel `json:"channel"` // id, name, type only
|
|
}
|
|
|
|
// JoinInvite joins a guild using the given invite code. This endpoint is
|
|
// undocumented.
|
|
func (c *Client) JoinInvite(code string) (*JoinedInvite, error) {
|
|
var inv *JoinedInvite
|
|
return inv, c.RequestJSON(&inv, "POST", EndpointInvites+code)
|
|
}
|
|
|
|
// DeleteInvite deletes an invite.
|
|
//
|
|
// Requires the MANAGE_CHANNELS permission on the channel this invite belongs
|
|
// to, or MANAGE_GUILD to remove any invite across the guild.
|
|
//
|
|
// Fires an Invite Delete Gateway event.
|
|
func (c *Client) DeleteInvite(code string, reason AuditLogReason) (*discord.Invite, error) {
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(
|
|
&inv,
|
|
"DELETE", EndpointInvites+code,
|
|
httputil.WithHeaders(reason.Header()),
|
|
)
|
|
}
|