Match game names exactly when using /setgame (#2825)

Co-authored-by: Paweł <zneix@zneix.eu>
Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
James Upjohn 2021-05-29 22:01:19 +12:00 committed by GitHub
parent 7e4f8be316
commit faae2c2e8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 17 deletions

View file

@ -7,6 +7,7 @@
- Minor: Added settings to disable custom FrankerFaceZ VIP/mod badges. (#2693, #2759) - Minor: Added settings to disable custom FrankerFaceZ VIP/mod badges. (#2693, #2759)
- Minor: Limit the number of recent chatters to improve memory usage and reduce freezes. (#2796, #2814) - Minor: Limit the number of recent chatters to improve memory usage and reduce freezes. (#2796, #2814)
- Minor: Added `/popout` command. Usage: `/popout [channel]`. It opens browser chat for the provided channel. Can also be used without arguments to open current channels browser chat. (#2556, #2812) - Minor: Added `/popout` command. Usage: `/popout [channel]`. It opens browser chat for the provided channel. Can also be used without arguments to open current channels browser chat. (#2556, #2812)
- Minor: Improved matching of game names when using `/setgame` command (#2636)
- Bugfix: Fixed FFZ emote links for global emotes (#2807, #2808) - Bugfix: Fixed FFZ emote links for global emotes (#2807, #2808)
## 2.3.2 ## 2.3.2

View file

@ -722,7 +722,7 @@ void CommandController::initialize(Settings &, Paths &paths)
return ""; return "";
}); });
this->registerCommand("/setgame", [](const QStringList &words, this->registerCommand("/setgame", [](const QStringList &words,
ChannelPtr channel) { const ChannelPtr channel) {
if (words.size() < 2) if (words.size() < 2)
{ {
channel->addMessage( channel->addMessage(
@ -731,30 +731,48 @@ void CommandController::initialize(Settings &, Paths &paths)
} }
if (auto twitchChannel = dynamic_cast<TwitchChannel *>(channel.get())) if (auto twitchChannel = dynamic_cast<TwitchChannel *>(channel.get()))
{ {
const auto gameName = words.mid(1).join(" ");
getHelix()->searchGames( getHelix()->searchGames(
words.mid(1).join(" "), gameName,
[channel, twitchChannel](std::vector<HelixGame> games) { [channel, twitchChannel,
gameName](const std::vector<HelixGame> &games) {
if (games.empty()) if (games.empty())
{ {
channel->addMessage( channel->addMessage(
makeSystemMessage("Game not found.")); makeSystemMessage("Game not found."));
return;
} }
else // 1 or more games
auto matchedGame = games.at(0);
if (games.size() > 1)
{ {
// NOTE: Improvements could be made with 'fuzzy string matching' code here
// attempt to find the best looking game by comparing exactly with lowercase values
for (const auto &game : games)
{
if (game.name.toLower() == gameName.toLower())
{
matchedGame = game;
break;
}
}
}
auto status = twitchChannel->accessStreamStatus(); auto status = twitchChannel->accessStreamStatus();
getHelix()->updateChannel( getHelix()->updateChannel(
twitchChannel->roomId(), games.at(0).id, "", "", twitchChannel->roomId(), matchedGame.id, "", "",
[channel, games](NetworkResult) { [channel, games, matchedGame](const NetworkResult &) {
channel->addMessage(makeSystemMessage( channel->addMessage(
QString("Updated game to %1") makeSystemMessage(QString("Updated game to %1")
.arg(games.at(0).name))); .arg(matchedGame.name)));
}, },
[channel] { [channel] {
channel->addMessage(makeSystemMessage( channel->addMessage(makeSystemMessage(
"Game update failed! Are you " "Game update failed! Are you "
"missing the required scope?")); "missing the required scope?"));
}); });
}
}, },
[channel] { [channel] {
channel->addMessage( channel->addMessage(