Перейти к публикации

[C++] VimeCpp — SDK для работы с API VImeWorld.


Рекомендованные сообщения

Опубликовано: (изменено)

Привет, ты пришёл сюда из интереса или искал что-то полезное? Тогда ты в нужном месте, потому что это C++ библиотека для работы с VimeWorld API.
Всю полезную информацию я разбил на главы, так что ориентироваться будет относительно легко.

[История]
C++ один из первых языков, который я стал изучать и один из первых, на который я забил. Вспомнив о нём я поставил себе задачу: написать что-то полезное для программистов, интересное для меня и при этом получить новых знаний с закреплением старых. Так и пришла в голову эта тема. Из SDK уже существовали реализации на Java, Python и Go, так почему бы мне не опробовать сделать такое?..

[Зависимости и версии]
Стандарт: C++17 и новее.
CMake: 3.11 и новее. Но лучше самую свежую...
Внешние зависимости:
1. libcpr 1.10.2 - Легковесная библиотека для HTTP-запросов, ссылка на документацию.
2. jsoncpp 1.9.5 - Легковесная библиотека для JSON, ссылка на документацию.

[Установка]
 1. Скачать репозиторий.

git clone https://github.com/coroutined/VimeCpp.git

2. Собрать проект с помощью cmake.

mkdir VimeCpp\build && cd VimeCpp\build && cmake ..

3. Собрать библиотеку (--config может быть Debug/Release).

cmake --build . --config=Release


[Документация]
Если вам необходимо знать всё о методах, то в client.hpp вы сможете прочитать какой метод за что отвечает. А может я в будущем сделаю нормальную документацию, не знаю. Будущее до безумия непредсказуемо.

[Примеры]
Взаимодействие с игроками:

Скрытый текст
auto [users, status] = api.getUsersByNames({"AlesteZ", "Okssi", "CharkosOff"});
std::tie(users, status) = api.getUsersByIDs({1476864, 94245, 4278493});
std::cout << "Users by nicknames:" << std::endl;
if(status == RequestStatus::SUCCESS_CODE) {
  for(std::size_t index = 0; index < users.size(); index++) {
    User &user = users.at(index);
    std::cout << format("\tUser #{0}: {1} ({2} lvl, {3}%)", 
                        index, user.username, user.level, user.levelPercentage * 100) << std::endl;
  }
} else {
  std::cout << "\tCode error: " << status << std::endl;
}

 

Взаимодействие со статистикой игрока:

Скрытый текст
auto [stats, status] = api.getUserStats(38609);
std::cout << "BlockParty global stats:" << std::endl;
for(std::string &key: stats["BP"]["global"].getMemberNames()) {
	std::cout << format("\t{0}: {1}", key, stats["BP"]["global"][key]) << std::endl;
}
std::cout << "BlockParty season stats:" << std::endl;
for(std::string &key: stats["BP"]["season"]["monthly"].getMemberNames()) {
	std::cout << format("\t{0}: {1}", key, stats["BP"]["season"]["monthly"][key]) << std::endl;
}

auto bwhypeGlobal = stats["BWHYPE"]["global"];
std::cout << format("BedWars Hype total kills/deaths: {0}/{1}",
					bwhypeGlobal["kills"], bwhypeGlobal["deaths"]) << std::endl;

Взаимодействие с матчами игрока:

Скрытый текст
auto [userMatches, status] = api.getUserMatchesOffset(38609); // 20 последних матчей игрока.
std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 5); // 20 матчей игрока после 5 последних игр.
std::tie(userMatches, status) = api.getUserMatchesOffset(38609, 0, 1); // Последний матч.

Взаимодействие с таблицами рекордов:

Скрытый текст
auto [leaders, status] = api.getLeaderboard("user", 20, 0); // Топ 20 пользователей по уровню.
std::cout << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1} ({2} lvl, {3}%);",
                        index + 1, record["username"], record["level"], 
                        record["levelPercentage"].asFloat() * 100) << std::endl;
}
std::tie(leaders, status) = api.getLeaderboard("guild", 10, 10, "total_coins"); // Топ 10 гильдий по вложенным коинам после 10 первых гильдий.
std::cout << std::endl << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1}, ({2} lvl, {3}%), {4} coins total;",
                        index + 11, record["name"], record["level"],
                        record["levelPercentage"].asFloat() * 100,
                        record["total_blocks"]) << std::endl;
}
std::tie(leaders, status) = api.getLeaderboard("prison", 5, 0); // Топ 5 игроков по блокам на Prison.
std::cout << std::endl << leaders.leaderboard << std::endl;
for(uint index = 0; index < leaders.records.size(); index++) {
	auto record = leaders.records[index];
	std::cout << format("#{0}: {1}, {2} blocks total;",
                        index + 1, record["user"]["username"],
                        record["total_blocks"]) << std::endl;
}

Взаимодействие с информацией о матчах:

Скрытый текст
auto [match, status] = api.getMatch("572314156045172736");
if(match.game == "BP") {
	std::cout << "Found BlockParty:" << std::endl;
	std::cout << "\tTotal levels: " << match.additional["levels"];
	std::cout << "Events:" << std::endl;
	for(uint index = 0; index < match.events.size(); index++) {
		auto gameEvent = match.events[index];
		std::cout << format("\tEvent #{0}: {1}, player {2}, time elapsed {3};",
                            index + 1, gameEvent["type"], gameEvent["player"],
                            gameEvent["time"]) << std::endl;
    }
  	std::cout << "Winner: " << match.winner["player"] << std::endl;
} // else ...


[Исходный код]
Ссылка на GitHub-репозиторий.

[Просто мысли]
Если рассуждать на холодную голову, то я не отрицаю наличие говно-кода, который буду стараться править, поэтому опытных прошу писать в эту тему. Бонусом нужно отметить, что я ни разу не писал библиотеки, для меня это казалось что-то на ступеньке выше.
А ещё я уверен, что людей пищущих на C++ найдётся не так уж много, но это уже не так важно.

[Список изменений]
[29.04.2023] v1.0: Релиз проекта.

Изменено пользователем coroutined
Незначительные исправления в теме.
  • 1 месяц спустя...
  • 3 недели спустя...
  • 3 месяца спустя...

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...