1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-03 13:34:27 +00:00
arikawa/api/invite.go

93 lines
2.5 KiB
Go

package api
import (
"github.com/diamondburned/arikawa/discord"
"github.com/diamondburned/arikawa/internal/httputil"
)
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 `schema:"with_counts,omitempty"`
}
// Nothing says I can't!
params.WithCounts = true
var inv *discord.Invite
return inv, c.RequestJSON(
&inv, "GET",
EndpointInvites+code,
httputil.WithSchema(c, params),
)
}
// ChannelInvites is only for guild channels. GuildInvites is for guilds.
func (c *Client) ChannelInvites(
channelID discord.Snowflake) ([]discord.Invite, error) {
var invs []discord.Invite
return invs, c.RequestJSON(&invs, "GET",
EndpointChannels+channelID.String()+"/invites")
}
// GuildInvites is for guilds.
func (c *Client) GuildInvites(
guildID discord.Snowflake) ([]discord.Invite, error) {
var invs []discord.Invite
return invs, c.RequestJSON(&invs, "GET",
EndpointGuilds+guildID.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 param struct {
MaxAge int `json:"max_age"`
MaxUses uint `json:"max_uses"`
Temporary bool `json:"temporary"`
Unique bool `json:"unique"`
}
param.MaxAge = int(maxAge)
param.MaxUses = maxUses
param.Temporary = temp
param.Unique = unique
var inv *discord.Invite
return inv, c.RequestJSON(
&inv, "POST",
EndpointChannels+channelID.String()+"/invites",
httputil.WithSchema(c, param),
)
}
// 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)
}