namespace Maki.Rest
{
///
/// REST API Endpoint Formatter
///
static class RestEndpoints
{
///
/// Base URL of Discord
///
public const string BASE_URL = @"https://discordapp.com";
///
/// Path to the REST API
///
public static string BASE_PATH => @"/api/v" + Discord.GATEWAY_VERSION;
///
/// Url of Discord's CDN
///
public const string CDN_URL = @"https://cdn.discordapp.com";
#region Channels
///
/// Gets a Channel endpoint
///
/// Channel Id
/// Channel endpoint
public static string Channel(ulong chanId) => $@"/channels/{chanId}";
///
/// Gets a Channel Bulk Delete endpoint
///
/// Channel Id
/// Channel Bulk Delete endpoint
public static string ChannelBulkDelete(ulong chanId) => $@"/channels/{chanId}/messages/bulk_delete";
///
/// Gets a Channel Call Ring endpoint
///
/// Channel Id
/// Channel Call Ring endpoint
public static string ChannelCallRing(ulong chanId) => $@"/channels/{chanId}/call/ring";
///
/// Gets a Channel Invites endpoint
///
/// Channel Id
/// Channel Call Ring endpoint
public static string ChannelInvites(ulong chanId) => $@"/channels/{chanId}/invites";
///
/// Gets a Channel Message Reaction endpoint
///
/// Channel Id
/// Message Id
/// Reaction Emoji
/// Channel Message Reaction endpoint
public static string ChannelMessageReaction(ulong chanId, ulong msgId, string reaction) => $@"/channels/{chanId}/messages/{msgId}/reactions/{reaction}";
///
/// Gets a Channel Message Reaction User endpoint
///
/// Channel Id
/// Message Id
/// Reaction Emoji
/// User Id
/// Channel Message Reaction User endpoint
public static string ChannelMessageReactionUser(ulong chanId, ulong msgId, string reaction, ulong userId) => $@"/channels/{chanId}/messages/{msgId}/reactions/{reaction}/{userId}";
///
/// Gets a Channel Message Reactions endpoint
///
/// Channel Id
/// Message Id
/// Channel Message Reactions endpoint
public static string ChannelMessageReactions(ulong chanId, ulong msgId) => $@"/channels/{chanId}/messages/{msgId}/reactions";
///
/// Gets a Channel Message endpoint
///
/// Channel Id
/// Message Id
/// Channel Message endpoint
public static string ChannelMessage(ulong chanId, ulong msgId) => $@"/channels/{chanId}/messages/{msgId}";
///
/// Gets a Channel Messages endpoint
///
/// Channel Id
/// Channel Messages endpoint
public static string ChannelMessages(ulong chanId) => $@"/channels/{chanId}/messages";
///
/// Gets a Channel Messages Search endpoint
///
/// Channel Id
/// Channel Messages Search endpoint
public static string ChannelMessagesSearch(ulong chanId) => $@"/channels/{chanId}/messages/search";
///
/// Gets a Channel Permission endpoint
///
/// Channel Id
/// Overwrite Id
/// Channel Permission endpoint
public static string ChannelPermission(ulong chanId, ulong overId) => $@"/channels/{chanId}/permissions/{overId}";
///
/// Gets a Channel Permissions endpoint
///
/// Channel Id
/// Channel Permissions endpoint
public static string ChannelPermissions(ulong chanId) => $@"/channels/{chanId}/permissions";
///
/// Gets a Channel Pin endpoint
///
/// Channel Id
/// Message Id
/// Channel Pin endpoint
public static string ChannelPin(ulong chanId, ulong msgId) => $@"/channels/{chanId}/pins/{msgId}";
///
/// Gets a Channel Pins endpoint
///
/// Channel Id
/// Channel Pins endpoint
public static string ChannelPins(ulong chanId) => $@"/channels/{chanId}/pins";
///
/// Gets a Channel Recipient endpoint
///
/// Group (DM Channel) Id
/// Recipient (User) Id
/// Channel Recipient endpoint
public static string ChannelRecipient(ulong groupId, ulong userId) => $@"/channels/{groupId}/recipients/{userId}";
///
/// Gets a Channel Typing endpoint
///
/// Channel Id
/// Channel Typing endpoint
public static string ChannelTyping(ulong chanId) => $@"/channels/{chanId}/typing";
///
/// Gets a Channel Webhooks endpoint
///
/// Channel Id
/// Channel Webhooks endpoint
public static string ChannelWebhooks(ulong chanId) => $@"/channels/{chanId}/webhooks";
///
/// Channels endpoint
///
public static string Channels => @"/channels";
#endregion
#region Gateway
///
/// Gateway endpoint
///
public static string Gateway => @"/gateway";
///
/// Bot Gateway endpoint
///
public static string GatewayBot => @"/gateway/bot";
#endregion
#region Guild
///
/// Gets a Guild endpoint
///
/// Guild Id
/// Guild endpoint
public static string Guild(ulong guildId) => $@"/guilds/{guildId}";
///
/// Gets a Guild Ban endpoint
///
/// Guild Id
/// Member (banned user) Id
/// Guild Ban endpoint
public static string GuildBan(ulong guildId, ulong memberId) => $@"/guilds/{guildId}/bans/{memberId}";
///
/// Gets a Guild Bans endpoint
///
/// Guild Id
/// Guild Bans endpoint
public static string GuildBans(ulong guildId) => $@"/guilds/{guildId}/bans";
///
/// Gets a Guild Channels endpoint
///
/// Guild Id
/// Guild Channels endpoint
public static string GuildChannels(ulong guildId) => $@"/guilds/{guildId}/channels";
///
/// Gets a Guild Embed endpoint
///
/// Guild Id
/// Guild Embed endpoint
public static string GuildEmbed(ulong guildId) => $@"/guilds/{guildId}/embed";
///
/// Gets a Guild Emoji endpoint
///
/// Guild Id
/// Emoji Id
/// Guild Emoji endpoint
public static string GuildEmoji(ulong guildId, ulong emojiId) => $@"/guilds/{guildId}/emojis/{emojiId}";
///
/// Gets a Guild Emojis endpoint
///
/// Guild Id
/// Guild Emojis endpoint
public static string GuildEmojis(ulong guildId) => $@"/guilds/{guildId}/emojis";
///
/// Gets a Guild Integration endpoint
///
/// Guild Id
/// Integration Id
/// Guild Integration endpoint
public static string GuildIntegration(ulong guildId, ulong intId) => $@"/guilds/{guildId}/integrations/{intId}";
///
/// Gets a Guild Integration Sync endpoint
///
/// Guild Id
/// Integration Id
/// Guild Integration Sync endpoint
public static string GuildIntegrationSync(ulong guildId, ulong intId) => $@"/guilds/{guildId}/integrations/{intId}/sync";
///
/// Gets a Guild Integrations endpoint
///
/// Guild Id
/// Guild Integrations endpoint
public static string GuildIntegrations(ulong guildId) => $@"/guilds/{guildId}/integrations";
///
/// Gets a Guild Invites endpoint
///
/// Guild Id
/// Guild Invites endpoint
public static string GuildInvites(ulong guildId) => $@"/guilds/{guildId}/invites";
///
/// Gets a Guild Member endpoint
///
/// Guild Id
/// Member (User) Id
/// Guild Member endpoint
public static string GuildMember(ulong guildId, ulong memberId) => $@"/guilds/{guildId}/members/{memberId}";
///
/// Gets a Guild Member Nickname endpoint
///
/// Guild Id
/// Member (User) Id
/// Guild Member Nickname endpoint
public static string GuildMemberNick(ulong guildId, ulong memberId) => $@"/guilds/{guildId}/members/{memberId}/nick";
///
/// Gets a Guild Member Role endpoint
///
/// Guild Id
/// Member (User) Id
/// Role Id
/// Guild Member Role endpoint
public static string GuildMemberRole(ulong guildId, ulong memberId, ulong roleId) => $@"/guilds/{guildId}/members/{memberId}/roles/{roleId}";
///
/// Gets a Guild Members endpoint
///
/// Guild Id
/// Guild Members endpoint
public static string GuildMembers(ulong guildId) => $@"/guilds/{guildId}/members";
///
/// Gets a Guild Messages Search endpoint
///
/// Guild Id
/// Guild Messages Search endpoint
public static string GuildMessagesSearch(ulong guildId) => $@"/guilds/{guildId}/messages/search";
///
/// Gets a Guild Prune endpoint
///
/// Guild Id
/// Guild Prune endpoint
public static string GuildPrune(ulong guildId) => $@"/guilds/{guildId}/prune";
///
/// Gets a Guild Role endpoint
///
/// Guild Id
/// Role Id
/// Guild Role endpoint
public static string GuildRole(ulong guildId, ulong roleId) => $@"/guilds/{guildId}/roles/{roleId}";
///
/// Gets a Guild Roles endpoint
///
/// Guild Id
/// Guild Roles endpoint
public static string GuildRoles(ulong guildId) => $@"/guilds/{guildId}/roles";
///
///
///
/// Guild Id
///
public static string GuildVoiceRegions(ulong guildId) => $@"/guilds/{guildId}/regions";
///
/// Gets a Guild Webhooks endpoint
///
/// Guild Id
/// Guild Webhooks endpoint
public static string GuildWebhooks(ulong guildId) => $@"/guilds/{guildId}/webhooks";
///
/// Guild endpoint
///
public static string Guilds => @"/guilds";
#endregion
#region Invite
///
/// Gets an Invite endpoint
///
/// Invite Id
/// Invite endpoint
public static string Invite(ulong inviteId) => $@"/invite/{inviteId}";
#endregion
#region OAuth2
///
/// Gets an OAuth2 Application endpoint
///
/// OAuth2 Application Id
/// OAuth2 Application endpoint
public static string OAuth2Application(ulong appId) => $@"/oauth2/applications/{appId}";
#endregion
#region Auth
///
/// Auth Login endpoint
///
public static string AuthLogin => @"/auth/login";
///
/// Auth MFA TOTP endpoint
///
public static string AuthMfaTotp => @"/auth/mfa/totp";
#endregion
#region User
///
/// Gets a User endpoint
///
/// User Id
/// User endpoint
public static string User(ulong userId) => $@"/users/{userId}";
///
/// Gets a User Channels endpoint
///
/// User Id
/// User Channels endpoint
public static string UserChannels(ulong userId) => $@"/users/{userId}/channels";
///
/// Gets a User Guild endpoint
///
/// User Id
/// Guild Id
/// User Guild endpoint
public static string UserGuild(ulong userId, ulong guildId) => $@"/users/{userId}/guilds/{guildId}";
///
/// Gets a User Guilds endpoint
///
/// User Id
/// User Guilds endpoint
public static string UserGuilds(ulong userId) => $@"/users/{userId}/guilds";
///
/// Gets a User Note endpoint
///
/// User Id
/// Target (User) Id
/// User Note endpoint
public static string UserNote(ulong userId, ulong targetId) => $@"/users/{userId}/note/{targetId}";
///
/// Gets a User Profile endpoint
///
/// User Id
/// User Profile endpoint
public static string UserProfile(ulong userId) => $@"/users/{userId}/profile";
///
/// Gets a User Relationship endpoint
///
/// User Id
/// Target (User) Id
/// User Relationship endpoint
public static string UserRelationship(ulong userId, ulong targetId) => $@"/users/{userId}/relationships/{targetId}";
///
/// Gets a User Settings endpoint
///
/// User Id
/// User Settings endpoint
public static string UserSettings(ulong userId) => $@"/users/{userId}/settings";
///
/// Users endpoint
///
public static string Users => @"/users";
#endregion
#region Voice
///
/// Voice Regions endpoint
///
public static string VoiceRegions => @"/voice/regions";
#endregion
#region Webhooks
///
/// Gets a Webhook endpoint
///
/// Webhook Id
/// Webhook endpoint
public static string Webhook(ulong hookId) => $@"/webhooks/{hookId}";
///
/// Gets a Webhook endpoint with token
///
/// Webhook Id
/// Webhook Token
/// Webhook endpoint with token
public static string WebhookToken(ulong hookId, string token) => $@"/webhooks/{hookId}/{token}";
///
/// Gets a Webhook endpoint with token for GitHub
///
/// Webhook Id
/// Webhook Token
/// Webhook endpoint with token for GitHub
public static string WebhookTokenGitHub(ulong hookId, string token) => $@"/webhooks/{hookId}/{token}/github";
///
/// Gets a Webhook endpoint with token for Slack
///
/// Webhook Id
/// Webhook Token
/// Webhook endpoint with token for Slack
public static string WebhookTokenSlack(ulong hookId, string token) => $@"/webhooks/{hookId}/{token}/slack";
#endregion
}
}