diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 61482c7a..2bd2779d 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1256,12 +1256,14 @@ AdvSceneSwitcher.action.twitch.type.chat.emoteOnly.disable="Disable chat's emote AdvSceneSwitcher.action.twitch.type.chat.sendMessage="Send chat message" AdvSceneSwitcher.action.twitch.type.user.getInfo="Get user information" AdvSceneSwitcher.action.twitch.type.reward.getInfo="Get channel points reward information" +AdvSceneSwitcher.action.twitch.type.channel.getInfo="Get channel information" AdvSceneSwitcher.action.twitch.reward.toggleControl="Toggle reward name / variable selection control" AdvSceneSwitcher.action.twitch.categorySelectionDisabled="Cannot select category without selecting a Twitch account first!" -AdvSceneSwitcher.action.twitch.entry.default="On{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" -AdvSceneSwitcher.action.twitch.entry.chat="Using account{{account}}{{actions}}on{{channel}}" -AdvSceneSwitcher.action.twitch.entry.user.getInfo="Using account{{account}}{{actions}}for{{userInfoQueryType}}{{userLogin}}{{userId}}" -AdvSceneSwitcher.action.twitch.entry.reward.getInfo="Using account{{account}}{{actions}}for channel{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}" +AdvSceneSwitcher.action.twitch.layout.default="On{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" +AdvSceneSwitcher.action.twitch.layout.chat="Using account{{account}}{{actions}}on{{channel}}" +AdvSceneSwitcher.action.twitch.layout.channel.getInfo="Using account{{account}}{{actions}}of{{channel}}" +AdvSceneSwitcher.action.twitch.layout.user.getInfo="Using account{{account}}{{actions}}for{{userInfoQueryType}}{{userLogin}}{{userId}}" +AdvSceneSwitcher.action.twitch.layout.reward.getInfo="Using account{{account}}{{actions}}for channel{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}" AdvSceneSwitcher.action.twitch.title.title="Enter title" AdvSceneSwitcher.action.twitch.marker.description="Describe marker" AdvSceneSwitcher.action.twitch.clip.hasDelay="Add a slight delay before capturing the clip" diff --git a/data/locale/ja-JP.ini b/data/locale/ja-JP.ini index 80474b1c..99fe6b34 100644 --- a/data/locale/ja-JP.ini +++ b/data/locale/ja-JP.ini @@ -1193,10 +1193,10 @@ AdvSceneSwitcher.action.twitch.type.user.getInfo="ユーザー情報を取得" AdvSceneSwitcher.action.twitch.type.reward.getInfo="チャンネルポイントリワード情報を取得" AdvSceneSwitcher.action.twitch.reward.toggleControl="リワード名/変数選択コントロールの切り替え" AdvSceneSwitcher.action.twitch.categorySelectionDisabled="Twitchアカウントを選択しないとカテゴリを選択できません!" -; AdvSceneSwitcher.action.twitch.entry.default="On{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}" -AdvSceneSwitcher.action.twitch.entry.chat="{{channel}}でアカウント{{account}}{{actions}}を使用しています" -AdvSceneSwitcher.action.twitch.entry.user.getInfo="{{userInfoQueryType}}{{userLogin}}{{userId}}でアカウント{{account}}{{actions}}を使用" -AdvSceneSwitcher.action.twitch.entry.reward.getInfo="チャンネル{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}でアカウント{{account}}{{actions}}を使用" +; AdvSceneSwitcher.action.twitch.layout.default="On{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}" +AdvSceneSwitcher.action.twitch.layout.chat="{{channel}}でアカウント{{account}}{{actions}}を使用しています" +AdvSceneSwitcher.action.twitch.layout.user.getInfo="{{userInfoQueryType}}{{userLogin}}{{userId}}でアカウント{{account}}{{actions}}を使用" +AdvSceneSwitcher.action.twitch.layout.reward.getInfo="チャンネル{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}でアカウント{{account}}{{actions}}を使用" AdvSceneSwitcher.action.twitch.title.title="タイトルを入力" AdvSceneSwitcher.action.twitch.marker.description="マーカーの説明" AdvSceneSwitcher.action.twitch.clip.hasDelay="クリップをキャプチャする前にわずかな遅延を追加します" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index 1e8e8f00..8bd04757 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -1065,8 +1065,8 @@ AdvSceneSwitcher.action.twitch.type.chat.emoteOnly.enable="Habilitar modo apenas AdvSceneSwitcher.action.twitch.type.chat.emoteOnly.disable="Desabilitar modo apenas emotes no chat" AdvSceneSwitcher.action.twitch.type.chat.sendMessage="Enviar mensagem de chat" AdvSceneSwitcher.action.twitch.categorySelectionDisabled="Não é possível selecionar categoria sem selecionar uma conta Twitch primeiro!" -AdvSceneSwitcher.action.twitch.entry.default="Em{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" -AdvSceneSwitcher.action.twitch.entry.chat="Usando conta{{account}}{{actions}}em{{channel}}" +AdvSceneSwitcher.action.twitch.layout.default="Em{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" +AdvSceneSwitcher.action.twitch.layout.chat="Usando conta{{account}}{{actions}}em{{channel}}" AdvSceneSwitcher.action.twitch.title.title="Digite o título" AdvSceneSwitcher.action.twitch.marker.description="Descreva o marcador" AdvSceneSwitcher.action.twitch.clip.hasDelay="Adicionar um leve atraso antes de capturar o clipe" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index 485e010f..9dde389d 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -1139,10 +1139,10 @@ AdvSceneSwitcher.action.twitch.type.user.getInfo="获取用户信息" AdvSceneSwitcher.action.twitch.type.reward.getInfo="获取频道积分奖励信息" AdvSceneSwitcher.action.twitch.reward.toggleControl="切换奖励名称/变量选择控制" AdvSceneSwitcher.action.twitch.categorySelectionDisabled="在未选择 Twitch 帐户的情况下无法选择类别!" -AdvSceneSwitcher.action.twitch.entry.default="{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" -AdvSceneSwitcher.action.twitch.entry.chat="使用账户{{account}}{{actions}}{{channel}}" -AdvSceneSwitcher.action.twitch.entry.user.getInfo="使用账户{{account}}{{actions}}{{userInfoQueryType}}{{userLogin}}{{userId}}" -AdvSceneSwitcher.action.twitch.entry.reward.getInfo="使用账户{{account}}{{actions}} 频道{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}" +AdvSceneSwitcher.action.twitch.layout.default="{{account}}{{actions}}{{streamTitle}}{{category}}{{markerDescription}}{{clipHasDelay}}{{duration}}{{announcementColor}}{{channel}}{{pointsReward}}" +AdvSceneSwitcher.action.twitch.layout.chat="使用账户{{account}}{{actions}}{{channel}}" +AdvSceneSwitcher.action.twitch.layout.user.getInfo="使用账户{{account}}{{actions}}{{userInfoQueryType}}{{userLogin}}{{userId}}" +AdvSceneSwitcher.action.twitch.layout.reward.getInfo="使用账户{{account}}{{actions}} 频道{{channel}}{{pointsReward}}{{rewardVariable}}{{toggleRewardSelection}}" AdvSceneSwitcher.action.twitch.title.title="输入标题" AdvSceneSwitcher.action.twitch.marker.description="标记描述" AdvSceneSwitcher.action.twitch.clip.hasDelay="在捕捉视频片段前稍加延迟" diff --git a/plugins/twitch/macro-action-twitch.cpp b/plugins/twitch/macro-action-twitch.cpp index 50751189..abc95701 100644 --- a/plugins/twitch/macro-action-twitch.cpp +++ b/plugins/twitch/macro-action-twitch.cpp @@ -83,6 +83,8 @@ const static std::map actionTypes = { "AdvSceneSwitcher.action.twitch.type.user.getInfo"}, {MacroActionTwitch::Action::POINTS_REWARD_GET_INFO, "AdvSceneSwitcher.action.twitch.type.reward.getInfo"}, + {MacroActionTwitch::Action::CHANNEL_GET_INFO, + "AdvSceneSwitcher.action.twitch.type.channel.getInfo"}, }; const static std::map @@ -322,6 +324,41 @@ void MacroActionTwitch::GetUserInfo(const std::shared_ptr &token) }); } +void MacroActionTwitch::GetChannelInfo(const std::shared_ptr &token) +{ + auto info = _channel.GetInfo(*token); + if (!info) { + return; + } + + SetTempVarValue("broadcaster_user_id", info->broadcaster_id); + SetTempVarValue("broadcaster_user_login", info->broadcaster_login); + SetTempVarValue("broadcaster_user_name", info->broadcaster_name); + SetTempVarValue("language", info->broadcaster_language); + SetTempVarValue("game_id", info->game_id); + SetTempVarValue("game_name", info->game_name); + SetTempVarValue("title", info->title); + SetTempVarValue("delay", std::to_string(info->delay)); + std::string tags; + for (const auto &tag : info->tags) { + tags += tag + " "; + } + if (!tags.empty()) { + tags.pop_back(); + } + SetTempVarValue("tags", tags); + std::string classificationLabels; + for (const auto &label : info->content_classification_labels) { + classificationLabels += label + " "; + } + if (!classificationLabels.empty()) { + classificationLabels.pop_back(); + } + SetTempVarValue("content_classification_labels", classificationLabels); + SetTempVarValue("is_branded_content", + info->is_branded_content ? "true" : "false"); +} + bool MacroActionTwitch::ResolveVariableSelectionToRewardId( const std::shared_ptr &token) { @@ -505,6 +542,16 @@ void MacroActionTwitch::SetupTempVars() setupTempVarHelper("offline_image_url", ".user.getInfo"); setupTempVarHelper("created_at", ".user.getInfo"); break; + case Action::CHANNEL_GET_INFO: + setupTempVarHelper("language"); + setupTempVarHelper("game_id"); + setupTempVarHelper("game_name"); + setupTempVarHelper("title"); + setupTempVarHelper("delay"); + setupTempVarHelper("tags"); + setupTempVarHelper("content_classification_labels"); + setupTempVarHelper("is_branded_content"); + break; default: break; } @@ -563,6 +610,9 @@ bool MacroActionTwitch::PerformAction() case MacroActionTwitch::Action::POINTS_REWARD_GET_INFO: GetRewardInfo(token); break; + case MacroActionTwitch::Action::CHANNEL_GET_INFO: + GetChannelInfo(token); + break; default: break; } @@ -772,6 +822,7 @@ bool MacroActionTwitch::ActionIsSupportedByToken() {Action::WHISPER_SEND, {{"user:manage:whispers"}}}, {Action::SEND_CHAT_MESSAGE, {{"chat:edit"}}}, {Action::USER_GET_INFO, {}}, + {Action::CHANNEL_GET_INFO, {}}, {Action::POINTS_REWARD_GET_INFO, {{"channel:read:redemptions"}, {"channel:manage:redemptions"}}}}; @@ -1127,6 +1178,8 @@ void MacroActionTwitchEdit::SetWidgetVisibility() _entryData->GetAction() == MacroActionTwitch::Action::CHANNEL_INFO_CONTENT_LABELS_SET); _channel->setVisible( + _entryData->GetAction() == + MacroActionTwitch::Action::CHANNEL_GET_INFO || _entryData->GetAction() == MacroActionTwitch::Action::RAID_START || _entryData->GetAction() == @@ -1273,19 +1326,23 @@ void MacroActionTwitchEdit::SetWidgetLayout() switch (_entryData->GetAction()) { case MacroActionTwitch::Action::SEND_CHAT_MESSAGE: layoutText = obs_module_text( - "AdvSceneSwitcher.action.twitch.entry.chat"); + "AdvSceneSwitcher.action.twitch.layout.chat"); break; case MacroActionTwitch::Action::USER_GET_INFO: layoutText = obs_module_text( - "AdvSceneSwitcher.action.twitch.entry.user.getInfo"); + "AdvSceneSwitcher.action.twitch.layout.user.getInfo"); break; case MacroActionTwitch::Action::POINTS_REWARD_GET_INFO: layoutText = obs_module_text( - "AdvSceneSwitcher.action.twitch.entry.reward.getInfo"); + "AdvSceneSwitcher.action.twitch.layout.reward.getInfo"); + break; + case MacroActionTwitch::Action::CHANNEL_GET_INFO: + layoutText = obs_module_text( + "AdvSceneSwitcher.action.twitch.layout.channel.getInfo"); break; default: layoutText = obs_module_text( - "AdvSceneSwitcher.action.twitch.entry.default"); + "AdvSceneSwitcher.action.twitch.layout.default"); break; } diff --git a/plugins/twitch/macro-action-twitch.hpp b/plugins/twitch/macro-action-twitch.hpp index 7d5b4b0f..33e4566d 100644 --- a/plugins/twitch/macro-action-twitch.hpp +++ b/plugins/twitch/macro-action-twitch.hpp @@ -142,7 +142,8 @@ public: SEND_CHAT_MESSAGE = 5000, // Get user info - USER_GET_INFO = 6000 + USER_GET_INFO = 6000, + CHANNEL_GET_INFO = 6100, }; enum class AnnouncementColor { @@ -203,6 +204,7 @@ private: void SendChatMessage(const std::shared_ptr &); void GetUserInfo(const std::shared_ptr &); void GetRewardInfo(const std::shared_ptr &); + void GetChannelInfo(const std::shared_ptr &token); bool ResolveVariableSelectionToRewardId( const std::shared_ptr &); diff --git a/plugins/twitch/macro-condition-twitch.cpp b/plugins/twitch/macro-condition-twitch.cpp index 49530aa9..caa5b008 100644 --- a/plugins/twitch/macro-condition-twitch.cpp +++ b/plugins/twitch/macro-condition-twitch.cpp @@ -629,7 +629,7 @@ void MacroConditionTwitch::SetTempVarValues(const ChannelInfo &info) if (!classificationLabels.empty()) { classificationLabels.pop_back(); } - SetTempVarValue("content_classification_labels", tags); + SetTempVarValue("content_classification_labels", classificationLabels); SetTempVarValue("is_branded_content", info.is_branded_content ? "true" : "false"); }