Migrated block, unblock and get user block list methods to Helix (#2370)

Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
Paweł
2021-02-14 14:01:13 +01:00
committed by GitHub
parent 46f1347e4b
commit 7d9f4c2b0c
14 changed files with 406 additions and 349 deletions
+85 -9
View File
@@ -46,7 +46,7 @@ void Helix::fetchUsers(QStringList userIds, QStringList userLogins,
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -125,7 +125,7 @@ void Helix::fetchUsersFollows(
successCallback(HelixUsersFollowsResponse(root));
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -198,7 +198,7 @@ void Helix::fetchStreams(
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -288,7 +288,7 @@ void Helix::fetchGames(QStringList gameIds, QStringList gameNames,
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -326,11 +326,11 @@ void Helix::followUser(QString userId, QString targetId,
this->makeRequest("users/follows", urlQuery)
.type(NetworkRequestType::Post)
.onSuccess([successCallback](auto result) -> Outcome {
.onSuccess([successCallback](auto /*result*/) -> Outcome {
successCallback();
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -348,11 +348,11 @@ void Helix::unfollowUser(QString userId, QString targetId,
this->makeRequest("users/follows", urlQuery)
.type(NetworkRequestType::Delete)
.onSuccess([successCallback](auto result) -> Outcome {
.onSuccess([successCallback](auto /*result*/) -> Outcome {
successCallback();
return Success;
})
.onError([failureCallback](auto result) {
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
@@ -385,7 +385,7 @@ void Helix::createClip(QString channelId,
successCallback(clip);
return Success;
})
.onError([failureCallback](NetworkResult result) {
.onError([failureCallback](auto result) {
switch (result.status())
{
case 503: {
@@ -502,6 +502,82 @@ void Helix::createStreamMarker(
.execute();
};
void Helix::loadBlocks(QString userId,
ResultCallback<std::vector<HelixBlock>> successCallback,
HelixFailureCallback failureCallback)
{
QUrlQuery urlQuery;
urlQuery.addQueryItem("broadcaster_id", userId);
this->makeRequest("users/blocks", urlQuery)
.onSuccess([successCallback, failureCallback](auto result) -> Outcome {
auto root = result.parseJson();
auto data = root.value("data");
if (!data.isArray())
{
failureCallback();
return Failure;
}
std::vector<HelixBlock> ignores;
for (const auto &jsonStream : data.toArray())
{
ignores.emplace_back(jsonStream.toObject());
}
successCallback(ignores);
return Success;
})
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
.execute();
}
void Helix::blockUser(QString targetUserId,
std::function<void()> successCallback,
HelixFailureCallback failureCallback)
{
QUrlQuery urlQuery;
urlQuery.addQueryItem("target_user_id", targetUserId);
this->makeRequest("users/blocks", urlQuery)
.type(NetworkRequestType::Put)
.onSuccess([successCallback](auto /*result*/) -> Outcome {
successCallback();
return Success;
})
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
.execute();
}
void Helix::unblockUser(QString targetUserId,
std::function<void()> successCallback,
HelixFailureCallback failureCallback)
{
QUrlQuery urlQuery;
urlQuery.addQueryItem("target_user_id", targetUserId);
this->makeRequest("users/blocks", urlQuery)
.type(NetworkRequestType::Delete)
.onSuccess([successCallback](auto /*result*/) -> Outcome {
successCallback();
return Success;
})
.onError([failureCallback](auto /*result*/) {
// TODO: make better xd
failureCallback();
})
.execute();
}
NetworkRequest Helix::makeRequest(QString url, QUrlQuery urlQuery)
{
assert(!url.startsWith("/"));
+27
View File
@@ -180,6 +180,19 @@ struct HelixStreamMarker {
}
};
struct HelixBlock {
QString userId;
QString userName;
QString displayName;
explicit HelixBlock(QJsonObject jsonObject)
: userId(jsonObject.value("user_id").toString())
, userName(jsonObject.value("user_login").toString())
, displayName(jsonObject.value("display_name").toString())
{
}
};
enum class HelixClipError {
Unknown,
ClipsDisabled,
@@ -269,6 +282,20 @@ public:
ResultCallback<HelixStreamMarker> successCallback,
std::function<void(HelixStreamMarkerError)> failureCallback);
// https://dev.twitch.tv/docs/api/reference#get-user-block-list
void loadBlocks(QString userId,
ResultCallback<std::vector<HelixBlock>> successCallback,
HelixFailureCallback failureCallback);
// https://dev.twitch.tv/docs/api/reference#block-user
void blockUser(QString targetUserId, std::function<void()> successCallback,
HelixFailureCallback failureCallback);
// https://dev.twitch.tv/docs/api/reference#unblock-user
void unblockUser(QString targetUserId,
std::function<void()> successCallback,
HelixFailureCallback failureCallback);
void update(QString clientId, QString oauthToken);
static void initialize();
+27 -24
View File
@@ -11,29 +11,6 @@ Migration path: **Not checked**
* We implement this API in `providers/twitch/TwitchChannel.cpp` to resolve a chats available cheer emotes. This helps us parse incoming messages like `pajaCheer1000`
### Get User Block List
URL: https://dev.twitch.tv/docs/v5/reference/users#get-user-block-list
Migration path: **Unknown**
* We use this in `providers/twitch/TwitchAccount.cpp loadIgnores`
### Block User
URL: https://dev.twitch.tv/docs/v5/reference/users#block-user
Requires `user_blocks_edit` scope
Migration path: **Unknown**
* We use this in `providers/twitch/TwitchAccount.cpp ignoreByID`
### Unblock User
URL: https://dev.twitch.tv/docs/v5/reference/users#unblock-user
Requires `user_blocks_edit` scope
Migration path: **Unknown**
* We use this in `providers/twitch/TwitchAccount.cpp unignoreByID`
### Get User Emotes
URL: https://dev.twitch.tv/docs/v5/reference/users#get-user-emotes
Requires `user_subscriptions` scope
@@ -63,7 +40,7 @@ URL: https://dev.twitch.tv/docs/api/reference#get-users
* `UserInfoPopup` to get ID, viewCount, displayName, createdAt of username we clicked
* `CommandController` to power any commands that need to get a user ID
* `Toasts` to get the profile picture of a streamer who just went live
* `TwitchAccount` ignore and unignore features to translate user name to user ID
* `TwitchAccount` block and unblock features to translate user name to user ID
### Get Users Follows
URL: https://dev.twitch.tv/docs/api/reference#get-users-follows
@@ -121,6 +98,32 @@ Requires `user:edit:broadcast` scope
Used in:
* `controllers/commands/CommandController.cpp` in /marker command
### Get User Block List
URL: https://dev.twitch.tv/docs/api/reference#get-user-block-list
Requires `user:read:blocked_users` scope
* We implement this in `providers/twitch/api/Helix.cpp loadBlocks`
Used in:
* `providers/twitch/TwitchAccount.cpp loadBlocks` to load list of blocked (blocked) users by current user
### Block User
URL: https://dev.twitch.tv/docs/api/reference#block-user
Requires `user:manage:blocked_users` scope
* We implement this in `providers/twitch/api/Helix.cpp blockUser`
Used in:
* `widgets/dialogs/UserInfoPopup.cpp` to block a user via checkbox in the usercard
* `controllers/commands/CommandController.cpp` to block a user via "/block" command
### Unblock User
URL: https://dev.twitch.tv/docs/api/reference#unblock-user
Requires `user:manage:blocked_users` scope
* We implement this in `providers/twitch/api/Helix.cpp unblockUser`
Used in:
* `widgets/dialogs/UserInfoPopup.cpp` to unblock a user via checkbox in the usercard
* `controllers/commands/CommandController.cpp` to unblock a user via "/unblock" command
## TMI
The TMI api is undocumented.