mirror of
https://github.com/diamondburned/arikawa.git
synced 2025-02-08 12:36:58 +00:00
73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/diamondburned/arikawa/discord"
|
|
)
|
|
|
|
const EndpointInvites = Endpoint + "invites/"
|
|
|
|
// Still unsure what this is
|
|
type MetaInvite struct {
|
|
Inviter discord.User `json:"user"`
|
|
Uses uint `json:"uses"`
|
|
MaxUses uint `json:"max_uses"`
|
|
|
|
MaxAge discord.Seconds `json:"max_age"`
|
|
|
|
Temporary bool `json:"temporary"`
|
|
CreatedAt discord.Timestamp `json:"created_at"`
|
|
}
|
|
|
|
func (c *Client) Invite(code string) (*discord.Invite, error) {
|
|
var params struct {
|
|
WithCounts bool `json:"with_counts,omitempty"`
|
|
}
|
|
|
|
// Nothing says I can't!
|
|
params.WithCounts = true
|
|
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(&inv, "GET", EndpointInvites+code)
|
|
}
|
|
|
|
// Invites is only for guild channels.
|
|
func (c *Client) Invites(channelID discord.Snowflake) ([]discord.Invite, error) {
|
|
var invs []discord.Invite
|
|
return invs, c.RequestJSON(&invs, "GET",
|
|
EndpointChannels+channelID.String()+"/invites")
|
|
}
|
|
|
|
// CreateInvite is only for guild channels. This endpoint requires
|
|
// CREATE_INSTANT_INVITE.
|
|
//
|
|
// MaxAge is the duration before expiry, 0 for never. MaxUses is the maximum
|
|
// number of uses, 0 for unlimited. Temporary is whether this invite grants
|
|
// temporary membership. Unique, if true, tries not to reuse a similar invite,
|
|
// useful for creating unique one time use invites.
|
|
func (c *Client) CreateInvite(channelID discord.Snowflake,
|
|
maxAge discord.Seconds, maxUses uint, temp, unique bool) (*discord.Invite, error) {
|
|
|
|
var params struct {
|
|
MaxAge uint `json:"max_age"`
|
|
MaxUses uint `json:"max_uses"`
|
|
Temporary bool `json:"temporary"`
|
|
Unique bool `json:"unique"`
|
|
}
|
|
|
|
params.MaxAge = uint(maxAge)
|
|
params.MaxUses = maxUses
|
|
params.Temporary = temp
|
|
params.Unique = unique
|
|
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(&inv, "POST",
|
|
EndpointChannels+channelID.String()+"/invites")
|
|
}
|
|
|
|
// DeleteInvite requires either MANAGE_CHANNELS on the target channel, or
|
|
// MANAGE_GUILD to remove any invite in the guild.
|
|
func (c *Client) DeleteInvite(code string) (*discord.Invite, error) {
|
|
var inv *discord.Invite
|
|
return inv, c.RequestJSON(&inv, "DELETE", EndpointInvites+code)
|
|
}
|