arikawa/api/invite.go

73 lines
2.1 KiB
Go
Raw Normal View History

2020-01-02 05:39:52 +00:00
package api
import (
"github.com/diamondburned/arikawa/discord"
)
2020-01-02 05:39:52 +00:00
const EndpointInvites = Endpoint + "invites/"
// Still unsure what this is
2020-01-02 05:39:52 +00:00
type MetaInvite struct {
Inviter discord.User `json:"user"`
Uses uint `json:"uses"`
MaxUses uint `json:"max_uses"`
2020-01-02 05:39:52 +00:00
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) {
2020-01-02 05:39:52 +00:00
var params struct {
WithCounts bool `json:"with_counts,omitempty"`
}
// Nothing says I can't!
params.WithCounts = true
var inv *discord.Invite
2020-01-02 05:39:52 +00:00
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
2020-01-02 05:39:52 +00:00
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) {
2020-01-02 05:39:52 +00:00
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
2020-01-02 05:39:52 +00:00
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
2020-01-02 05:39:52 +00:00
return inv, c.RequestJSON(&inv, "DELETE", EndpointInvites+code)
}