|
| 1 | +#include "DeveloperBadges.hpp" |
| 2 | +#include <Geode/binding/FLAlertLayer.hpp> |
| 3 | +#include <Geode/loader/Mod.hpp> |
| 4 | +#include <Geode/utils/ranges.hpp> |
| 5 | + |
| 6 | +using namespace geode::prelude; |
| 7 | + |
| 8 | +#define BADGE_URL "https://raw.githubusercontent.com/hiimjasmine00/developer-badges/master/badges/{}.json" |
| 9 | + |
| 10 | +DeveloperBadge DeveloperBadges::badgeForUser(int id) { |
| 11 | + auto badge = ranges::find(DEVELOPER_BADGES, [id](const DeveloperBadge& badge) { |
| 12 | + return badge.id == id && badge.badge != BadgeType::None; |
| 13 | + }); |
| 14 | + return badge.has_value() ? badge.value() : DeveloperBadge { 0, "", BadgeType::None }; |
| 15 | +} |
| 16 | + |
| 17 | +ccColor3B DeveloperBadges::getCommentColor(BadgeType badge) { |
| 18 | + switch (badge) { |
| 19 | + case BadgeType::ModDeveloper: return Mod::get()->getSettingValue<ccColor3B>("mod-developer-color"); |
| 20 | + case BadgeType::VerifiedDeveloper: return Mod::get()->getSettingValue<ccColor3B>("verified-developer-color"); |
| 21 | + case BadgeType::IndexStaff: return Mod::get()->getSettingValue<ccColor3B>("index-staff-color"); |
| 22 | + case BadgeType::LeadDeveloper: return Mod::get()->getSettingValue<ccColor3B>("lead-developer-color"); |
| 23 | + default: return ccColor3B { 255, 255, 255 }; |
| 24 | + } |
| 25 | +} |
| 26 | + |
| 27 | +void DeveloperBadges::loadBadge(EventListener<web::WebTask>&& listenerRef, int id, std::function<void(const DeveloperBadge&)> callback) { |
| 28 | + if (LOADED_IDS.contains(id)) return; |
| 29 | + |
| 30 | + auto&& listener = std::move(listenerRef); |
| 31 | + listener.bind([id, callback](web::WebTask::Event* e) { |
| 32 | + if (auto res = e->getValue()) { |
| 33 | + LOADED_IDS.insert(id); |
| 34 | + |
| 35 | + if (!res->ok() || !res->json().isOk()) return; |
| 36 | + |
| 37 | + auto badge = res->json().unwrapOr(matjson::Value()); |
| 38 | + if (!badge.isObject()) return; |
| 39 | + |
| 40 | + DeveloperBadge devBadge = { |
| 41 | + .id = id, |
| 42 | + .name = badge["name"].asString().unwrapOr(""), |
| 43 | + .badge = (BadgeType)badge["badge"].asInt().unwrapOr(0) |
| 44 | + }; |
| 45 | + DEVELOPER_BADGES.push_back(devBadge); |
| 46 | + callback(devBadge); |
| 47 | + } |
| 48 | + }); |
| 49 | + |
| 50 | + listener.setFilter(web::WebRequest().get(fmt::format(BADGE_URL, id))); |
| 51 | +} |
| 52 | + |
| 53 | +void DeveloperBadges::showBadgeInfo(std::string username, BadgeType type) { |
| 54 | + auto badgeName = ""; |
| 55 | + auto badgeDesc = ""; |
| 56 | + switch (type) { |
| 57 | + case BadgeType::ModDeveloper: |
| 58 | + badgeName = "Mod Developer"; |
| 59 | + badgeDesc = "is a <ca>mod developer</c> for <cy>Geode</c>.\n" |
| 60 | + "They have created mods that are available on the <cy>Geode mod index</c>.\n" |
| 61 | + "They will have to have new mods and mod updates approved by the <cd>index staff</c>"; |
| 62 | + break; |
| 63 | + case BadgeType::VerifiedDeveloper: |
| 64 | + badgeName = "Verified Developer"; |
| 65 | + badgeDesc = "is a <cp>verified mod developer</c> for <cy>Geode</c>.\n" |
| 66 | + "They can update their mods on the <cy>Geode mod index</c> without the need for approval.\n" |
| 67 | + "They will still have to have new mods approved by the <cd>index staff</c>"; |
| 68 | + break; |
| 69 | + case BadgeType::IndexStaff: |
| 70 | + badgeName = "Index Staff"; |
| 71 | + badgeDesc = "is a member of the <cd>index staff</c> for <cy>Geode</c>.\n" |
| 72 | + "They can approve or reject mods uploaded to the <cy>Geode mod index</c>"; |
| 73 | + break; |
| 74 | + case BadgeType::LeadDeveloper: |
| 75 | + badgeName = "Lead Developer"; |
| 76 | + badgeDesc = "is a <co>lead developer</c> of <cy>Geode</c>.\n" |
| 77 | + "They are part of the main development team and have significant contributions to the <cy>Geode ecosystem</c>"; |
| 78 | + break; |
| 79 | + default: |
| 80 | + badgeName = ""; |
| 81 | + badgeDesc = ""; |
| 82 | + break; |
| 83 | + } |
| 84 | + |
| 85 | + FLAlertLayer::create(badgeName, fmt::format("<cg>{}</c> {}.", username, badgeDesc), "OK")->show(); |
| 86 | +} |
0 commit comments