/************************************************************************************ * * D++, A Lightweight C++ library for Discord * * Copyright 2021 Craig Edwards and D++ contributors * (https://github.com/brainboxdotcc/DPP/graphs/contributors) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ************************************************************************************/ #pragma once #include #include namespace dpp { /** * @brief Integration types */ enum integration_type { /// Twitch integration i_twitch, /// YouTube integration i_youtube, /// Discord integration i_discord }; /** * @brief Integration flags */ enum integration_flags { /// Integration enabled if_enabled = 0b00000001, /// Integration synching if_syncing = 0b00000010, /// Emoji integration if_emoticons = 0b00000100, /// Integration revoked if_revoked = 0b00001000, /// Kick users when their subscription expires if_expire_kick = 0b00010000, }; /** * @brief An application that has been integrated */ struct CoreExport integration_app { /// Inegration id snowflake id; /// Name std::string name; /// Icon std::string icon; /// Description std::string description; /// Integration summary std::string summary; /// Pointer to bot user user* bot; }; /** Represents an integration within a dpp::guild */ class CoreExport integration : public managed { public: /** Integration name */ std::string name; /** Integration type */ integration_type type; /** Integration flags from dpp::integration_flags */ uint8_t flags; /** Role id */ snowflake role_id; /** User id */ snowflake user_id; /** Expiry grace period */ uint32_t expire_grace_period; /** Sync time */ time_t synced_at; /** Subscriber count */ uint32_t subscriber_count; /* Account id */ std::string account_id; /* Account name */ std::string account_name; /* Integration application */ integration_app app; /** Default constructor */ integration(); /** Default destructor */ ~integration(); /** Read class values from json object * @param j A json object to read from * @return A reference to self */ integration& fill_from_json(nlohmann::json* j); /** Build a json string from this object. * @return JSON string of the object */ std::string build_json() const; /** True if emoticons are enabled */ bool emoticons_enabled() const; /** True if integration is enabled */ bool is_enabled() const; /** True if is syncing */ bool is_syncing() const; /** True if has been revoked */ bool is_revoked() const; /** True if expiring kicks the user */ bool expiry_kicks_user() const; }; /** A group of integrations */ typedef std::unordered_map integration_map; };