Skip to content

Commit

Permalink
feat: ✨ add more api routes; refactor/rename
Browse files Browse the repository at this point in the history
  • Loading branch information
jontitorr committed Dec 29, 2023
1 parent 92d9256 commit 035900d
Show file tree
Hide file tree
Showing 15 changed files with 435 additions and 14 deletions.
7 changes: 6 additions & 1 deletion include/ekizu/gateway/interaction_create.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#ifndef EKIZU_GATEWAY_INTERACTION_CREATE_HPP
#define EKIZU_GATEWAY_INTERACTION_CREATE_HPP

#include <ekizu/interaction.hpp>

namespace ekizu {
Expand All @@ -7,4 +10,6 @@ struct InteractionCreate {

EKIZU_EXPORT void to_json(nlohmann::json &j, const InteractionCreate &c);
EKIZU_EXPORT void from_json(const nlohmann::json &j, InteractionCreate &c);
} // namespace ekizu
} // namespace ekizu

#endif // EKIZU_GATEWAY_INTERACTION_CREATE_HPP
10 changes: 4 additions & 6 deletions include/ekizu/gateway/invite_create.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef EKIZU_MODELS_INVITE_CREATE_HPP
#define EKIZU_MODELS_INVITE_CREATE_HPP
#ifndef EKIZU_GATEWAY_INVITE_CREATE_HPP
#define EKIZU_GATEWAY_INVITE_CREATE_HPP

#include <ekizu/user.hpp>
#include <ekizu/invite.hpp>

namespace ekizu {
struct PartialUser {
Expand All @@ -18,8 +18,6 @@ struct PartialUser {
EKIZU_EXPORT void to_json(nlohmann::json &j, const PartialUser &u);
EKIZU_EXPORT void from_json(const nlohmann::json &j, PartialUser &u);

enum class TargetType : uint8_t { Stream = 1, EmbeddedApplication = 2 };

struct InviteCreate {
/// ID of the channel invited users will first see.
Snowflake channel_id;
Expand Down Expand Up @@ -49,4 +47,4 @@ EKIZU_EXPORT void to_json(nlohmann::json &j, const InviteCreate &invite);
EKIZU_EXPORT void from_json(const nlohmann::json &j, InviteCreate &invite);
} // namespace ekizu

#endif // EKIZU_MODELS_INVITE_CREATE_HPP
#endif // EKIZU_GATEWAY_INVITE_CREATE_HPP
6 changes: 3 additions & 3 deletions include/ekizu/gateway/invite_delete.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef EKIZU_MODELS_INVITE_DELETE_HPP
#define EKIZU_MODELS_INVITE_DELETE_HPP
#ifndef EKIZU_GATEWAY_INVITE_DELETE_HPP
#define EKIZU_GATEWAY_INVITE_DELETE_HPP

#include <ekizu/snowflake.hpp>

Expand All @@ -17,4 +17,4 @@ EKIZU_EXPORT void to_json(nlohmann::json &j, const InviteDelete &invite);
EKIZU_EXPORT void from_json(const nlohmann::json &j, InviteDelete &invite);
} // namespace ekizu

#endif // EKIZU_MODELS_INVITE_DELETE_HPP
#endif // EKIZU_GATEWAY_INVITE_DELETE_HPP
15 changes: 14 additions & 1 deletion include/ekizu/http_client.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@
#include <ekizu/request/create_message.hpp>
#include <ekizu/request/create_reaction.hpp>
#include <ekizu/request/crosspost_message.hpp>
#include <ekizu/request/delete_all_reactions.hpp>
#include <ekizu/request/delete_all_reactions_for_emoji.hpp>
#include <ekizu/request/delete_channel.hpp>
#include <ekizu/request/delete_message.hpp>
#include <ekizu/request/delete_own_reaction.hpp>
#include <ekizu/request/delete_user_reaction.hpp>
#include <ekizu/request/edit_channel_permissions.hpp>
#include <ekizu/request/edit_message.hpp>
#include <ekizu/request/get_channel.hpp>
#include <ekizu/request/get_channel_invites.hpp>
#include <ekizu/request/get_channel_message.hpp>
#include <ekizu/request/get_channel_messages.hpp>
#include <ekizu/request/get_current_user.hpp>
Expand All @@ -36,6 +40,8 @@ struct HttpClient {
[[nodiscard]] GetChannelMessage get_channel_message(
Snowflake channel_id, Snowflake message_id) const;
[[nodiscard]] CreateMessage create_message(Snowflake channel_id) const;
[[nodiscard]] CrosspostMessage crosspost_message(
Snowflake channel_id, Snowflake message_id) const;
[[nodiscard]] CreateReaction create_reaction(Snowflake channel_id,
Snowflake message_id,
RequestReaction emoji) const;
Expand All @@ -48,14 +54,21 @@ struct HttpClient {
[[nodiscard]] GetReactions get_reactions(Snowflake channel_id,
Snowflake message_id,
RequestReaction emoji) const;
[[nodiscard]] CrosspostMessage crosspost_message(
[[nodiscard]] DeleteAllReactions delete_all_reactions(
Snowflake channel_id, Snowflake message_id) const;
[[nodiscard]] DeleteAllReactionsForEmoji delete_all_reactions_for_emoji(
Snowflake channel_id, Snowflake message_id,
RequestReaction emoji) const;
[[nodiscard]] EditMessage edit_message(Snowflake channel_id,
Snowflake message_id) const;
[[nodiscard]] DeleteMessage delete_message(Snowflake channel_id,
Snowflake message_id) const;
[[nodiscard]] BulkDeleteMessages bulk_delete_messages(
Snowflake channel_id, const std::vector<Snowflake> &message_ids) const;
[[nodiscard]] EditChannelPermissions edit_channel_permissions(
Snowflake channel_id, const PermissionOverwrite &overwrite) const;
[[nodiscard]] GetChannelInvites get_channel_invites(
Snowflake channel_id) const;
[[nodiscard]] PinMessage pin_message(Snowflake channel_id,
Snowflake message_id) const;
[[nodiscard]] UnpinMessage unpin_message(Snowflake channel_id,
Expand Down
52 changes: 52 additions & 0 deletions include/ekizu/invite.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#ifndef EKIZU_INVITE_HPP
#define EKIZU_INVITE_HPP

#include <ekizu/channel.hpp>
#include <ekizu/guild.hpp>

namespace ekizu {
struct InviteChannel {
Snowflake id;
std::string name;
ChannelType type;
};

EKIZU_EXPORT void to_json(nlohmann::json &j, const InviteChannel &i);
EKIZU_EXPORT void from_json(const nlohmann::json &j, InviteChannel &i);

struct InviteGuild {
Snowflake id;
std::string name;
std::optional<std::string> splash;
std::optional<std::string> banner;
std::optional<std::string> description;
std::optional<std::string> icon;
std::vector<GuildFeature> features;
VerificationLevel verification_level;
std::optional<std::string> vanity_url_code;
NSFWLevel nsfw_level;
uint64_t premium_subscription_count;
};

EKIZU_EXPORT void to_json(nlohmann::json &j, const InviteGuild &i);
EKIZU_EXPORT void from_json(const nlohmann::json &j, InviteGuild &i);

enum class TargetType : uint8_t { Stream = 1, EmbeddedApplication = 2 };

struct Invite {
std::string code;
std::optional<InviteGuild> guild;
InviteChannel channel;
std::optional<User> inviter;
TargetType target_type;
std::optional<User> target_user;
std::optional<uint64_t> approximate_presence_count;
std::optional<uint64_t> approximate_member_count;
std::optional<std::string> expires_at;
};

EKIZU_EXPORT void to_json(nlohmann::json &j, const Invite &i);
EKIZU_EXPORT void from_json(const nlohmann::json &j, Invite &i);
} // namespace ekizu

#endif // EKIZU_INVITE_HPP
26 changes: 26 additions & 0 deletions include/ekizu/request/delete_all_reactions.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef EKIZU_REQUEST_DELETE_ALL_REACTIONS_HPP
#define EKIZU_REQUEST_DELETE_ALL_REACTIONS_HPP

#include <ekizu/request/create_reaction.hpp>

namespace ekizu {
struct DeleteAllReactions {
DeleteAllReactions(
const std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)> &make_request,
Snowflake channel_id, Snowflake message_id);

operator net::HttpRequest() const;

Result<void> send(const asio::yield_context &yield) const;

private:
Snowflake m_channel_id;
Snowflake m_message_id;
std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)>
m_make_request;
};
} // namespace ekizu

#endif // EKIZU_REQUEST_DELETE_ALL_REACTIONS_HPP
27 changes: 27 additions & 0 deletions include/ekizu/request/delete_all_reactions_for_emoji.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef EKIZU_REQUEST_DELETE_ALL_REACTIONS_FOR_EMOJI_HPP
#define EKIZU_REQUEST_DELETE_ALL_REACTIONS_FOR_EMOJI_HPP

#include <ekizu/request/create_reaction.hpp>

namespace ekizu {
struct DeleteAllReactionsForEmoji {
DeleteAllReactionsForEmoji(
const std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)> &make_request,
Snowflake channel_id, Snowflake message_id, RequestReaction emoji);

operator net::HttpRequest() const;

Result<void> send(const asio::yield_context &yield) const;

private:
Snowflake m_channel_id;
RequestReaction m_emoji;
Snowflake m_message_id;
std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)>
m_make_request;
};
} // namespace ekizu

#endif // EKIZU_REQUEST_DELETE_ALL_REACTIONS_FOR_EMOJI_HPP
27 changes: 27 additions & 0 deletions include/ekizu/request/edit_channel_permissions.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef EKIZU_REQUEST_EDIT_CHANNEL_PERMISSIONS_HPP
#define EKIZU_REQUEST_EDIT_CHANNEL_PERMISSIONS_HPP

#include <ekizu/channel.hpp>
#include <ekizu/http.hpp>

namespace ekizu {
struct EditChannelPermissions {
EditChannelPermissions(
const std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)> &make_request,
Snowflake channel_id, PermissionOverwrite overwrite);

operator net::HttpRequest() const;

Result<> send(const asio::yield_context &yield) const;

private:
Snowflake m_channel_id;
PermissionOverwrite m_overwrite;
std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)>
m_make_request;
};
} // namespace ekizu

#endif // EKIZU_REQUEST_EDIT_CHANNEL_PERMISSIONS_HPP
27 changes: 27 additions & 0 deletions include/ekizu/request/get_channel_invites.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#ifndef EKIZU_REQUEST_GET_CHANNEL_INVITES_HPP
#define EKIZU_REQUEST_GET_CHANNEL_INVITES_HPP

#include <ekizu/http.hpp>
#include <ekizu/invite.hpp>

namespace ekizu {
struct GetChannelInvites {
GetChannelInvites(
const std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)> &make_request,
Snowflake channel_id);

operator net::HttpRequest() const;

[[nodiscard]] Result<std::vector<Invite>> send(
const asio::yield_context &yield) const;

private:
Snowflake m_channel_id;
std::function<Result<net::HttpResponse>(
net::HttpRequest, const asio::yield_context &)>
m_make_request;
};
} // namespace ekizu

#endif // EKIZU_REQUEST_GET_CHANNEL_INVITES_HPP
28 changes: 25 additions & 3 deletions src/http_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ CreateMessage HttpClient::create_message(Snowflake channel_id) const {
return CreateMessage{m_rate_limiter_make_request, channel_id};
}

CrosspostMessage HttpClient::crosspost_message(Snowflake channel_id,
Snowflake message_id) const {
return CrosspostMessage{
m_rate_limiter_make_request, channel_id, message_id};
}

CreateReaction HttpClient::create_reaction(
Snowflake channel_id, Snowflake message_id, RequestReaction emoji) const {
return CreateReaction{
Expand All @@ -66,12 +72,18 @@ GetReactions HttpClient::get_reactions(
m_rate_limiter_make_request, channel_id, message_id, std::move(emoji)};
}

CrosspostMessage HttpClient::crosspost_message(Snowflake channel_id,
Snowflake message_id) const {
return CrosspostMessage{
DeleteAllReactions HttpClient::delete_all_reactions(
Snowflake channel_id, Snowflake message_id) const {
return DeleteAllReactions{
m_rate_limiter_make_request, channel_id, message_id};
}

DeleteAllReactionsForEmoji HttpClient::delete_all_reactions_for_emoji(
Snowflake channel_id, Snowflake message_id, RequestReaction emoji) const {
return DeleteAllReactionsForEmoji{
m_rate_limiter_make_request, channel_id, message_id, std::move(emoji)};
}

EditMessage HttpClient::edit_message(Snowflake channel_id,
Snowflake message_id) const {
return EditMessage{m_rate_limiter_make_request, channel_id, message_id};
Expand All @@ -88,6 +100,16 @@ BulkDeleteMessages HttpClient::bulk_delete_messages(
m_rate_limiter_make_request, channel_id, message_ids};
}

EditChannelPermissions HttpClient::edit_channel_permissions(
Snowflake channel_id, const PermissionOverwrite &overwrite) const {
return EditChannelPermissions{
m_rate_limiter_make_request, channel_id, overwrite};
}

GetChannelInvites HttpClient::get_channel_invites(Snowflake channel_id) const {
return GetChannelInvites{m_rate_limiter_make_request, channel_id};
}

PinMessage HttpClient::pin_message(Snowflake channel_id,
Snowflake message_id) const {
return PinMessage{m_rate_limiter_make_request, channel_id, message_id};
Expand Down
69 changes: 69 additions & 0 deletions src/invite.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include <ekizu/invite.hpp>
#include <ekizu/json_util.hpp>

namespace ekizu {
using json_util::deserialize;
using json_util::serialize;

void to_json(nlohmann::json &j, const InviteChannel &i) {
serialize(j, "id", i.id);
serialize(j, "name", i.name);
serialize(j, "type", i.type);
}

void from_json(const nlohmann::json &j, InviteChannel &i) {
deserialize(j, "id", i.id);
deserialize(j, "name", i.name);
deserialize(j, "type", i.type);
}

void to_json(nlohmann::json &j, const InviteGuild &i) {
serialize(j, "id", i.id);
serialize(j, "name", i.name);
serialize(j, "splash", i.splash);
serialize(j, "banner", i.banner);
serialize(j, "description", i.description);
serialize(j, "icon", i.icon);
serialize(j, "features", i.features);
serialize(j, "verification_level", i.verification_level);
serialize(j, "vanity_url_code", i.vanity_url_code);
serialize(j, "nsfw_level", i.nsfw_level);
serialize(j, "premium_subscription_count", i.premium_subscription_count);
}

void from_json(const nlohmann::json &j, InviteGuild &i) {
deserialize(j, "id", i.id);
deserialize(j, "name", i.name);
deserialize(j, "splash", i.splash);
deserialize(j, "banner", i.banner);
deserialize(j, "description", i.description);
deserialize(j, "icon", i.icon);
deserialize(j, "features", i.features);
deserialize(j, "verification_level", i.verification_level);
deserialize(j, "vanity_url_code", i.vanity_url_code);
deserialize(j, "nsfw_level", i.nsfw_level);
deserialize(j, "premium_subscription_count", i.premium_subscription_count);
}

void to_json(nlohmann::json &j, const Invite &i) {
serialize(j, "code", i.code);
serialize(j, "guild", i.guild);
serialize(j, "channel", i.channel);
serialize(j, "inviter", i.inviter);
serialize(j, "target_user", i.target_user);
serialize(j, "approximate_presence_count", i.approximate_presence_count);
serialize(j, "approximate_member_count", i.approximate_member_count);
serialize(j, "expires_at", i.expires_at);
}

void from_json(const nlohmann::json &j, Invite &i) {
deserialize(j, "code", i.code);
deserialize(j, "guild", i.guild);
deserialize(j, "channel", i.channel);
deserialize(j, "inviter", i.inviter);
deserialize(j, "target_user", i.target_user);
deserialize(j, "approximate_presence_count", i.approximate_presence_count);
deserialize(j, "approximate_member_count", i.approximate_member_count);
deserialize(j, "expires_at", i.expires_at);
}
} // namespace ekizu
Loading

0 comments on commit 035900d

Please sign in to comment.