chore: migrate /vips command to Helix call (#4053)

* feat(helix): create response model for VIP listing

* feat(helix): stub out channel/vips request + handler

* feat(helix): parse VIPs list from data and pass to callback

* feat(helix): handle errors when getting VIP list then pass to callback

* feat(command): add barebones handler for helix-based /vips

* feat(command): provide better /vips output when user is not broadcaster

* chore(format): bulk reformat with clang-format

* chore(changelog): add entry for /vips Helix migration

* fix(helix): use correct method when calling VIP list endpoint

* fix(helix): use correct VIP list endpoint

* chore(tidy): please clang-tidy by marking parameter as unused

* feat(command): display unsorted VIP list returned from Helix API

* feat(settings): clone raid timegate settings for /vips

* feat(command): check /vips timegate setting before execution

* feat(command): handle 0 VIPs from Helix response

* feat(command): sort users alphabetically from Helix VIPs response

* fix(command): highlight users in Helix /vips output to match IRC

* fix(command): replace dynamic /vips error message with hardcoded string

* chore(comment): remove TODO comment that was DONE

* chore(format): bulk reformat using clang-format

* fix(command): send 0 VIP message after creation

* chore: apply suggestions from Felanbird

* fix(helix): change mention of user ban to VIPs in VIP list error message

* feat(helix): distinguish non-broadcaster auth error when getting VIPs

* chore(command): move handling of non-broadcaster /vips usage to API response

* chore(format): re-indent multiline string to get away from 80 char limit

* reformat

* fix tests

Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
James Upjohn
2022-10-10 23:56:55 +13:00
committed by GitHub
parent e604a36777
commit ceecc7ef91
7 changed files with 290 additions and 0 deletions
+40
View File
@@ -329,6 +329,23 @@ struct HelixChatSettings {
}
};
struct HelixVip {
QString userId;
QString userName;
QString userLogin;
explicit HelixVip(const QJsonObject &jsonObject)
: userId(jsonObject.value("user_id").toString())
, userName(jsonObject.value("user_name").toString())
, userLogin(jsonObject.value("user_login").toString())
{
}
};
// TODO(jammehcow): when implementing mod list, just alias HelixVip to HelixMod
// as they share the same model.
// Alternatively, rename base struct to HelixUser or something and alias both
enum class HelixAnnouncementColor {
Blue,
Green,
@@ -502,6 +519,17 @@ enum class HelixWhisperError { // /w
Forwarded,
}; // /w
enum class HelixListVIPsError { // /vips
Unknown,
UserMissingScope,
UserNotAuthorized,
UserNotBroadcaster,
Ratelimited,
// The error message is forwarded directly from the Twitch API
Forwarded,
}; // /vips
class IHelix
{
public:
@@ -756,6 +784,12 @@ public:
ResultCallback<> successCallback,
FailureCallback<HelixWhisperError, QString> failureCallback) = 0;
// https://dev.twitch.tv/docs/api/reference#get-vips
virtual void getChannelVIPs(
QString broadcasterID,
ResultCallback<std::vector<HelixVip>> successCallback,
FailureCallback<HelixListVIPsError, QString> failureCallback) = 0;
virtual void update(QString clientId, QString oauthToken) = 0;
protected:
@@ -1011,6 +1045,12 @@ public:
ResultCallback<> successCallback,
FailureCallback<HelixWhisperError, QString> failureCallback) final;
// https://dev.twitch.tv/docs/api/reference#get-vips
void getChannelVIPs(
QString broadcasterID,
ResultCallback<std::vector<HelixVip>> successCallback,
FailureCallback<HelixListVIPsError, QString> failureCallback) final;
void update(QString clientId, QString oauthToken) final;
static void initialize();