143 lines
3.9 KiB
C++
143 lines
3.9 KiB
C++
#include "controllers/commands/builtin/twitch/Chatters.hpp"
|
|
|
|
#include "Application.hpp"
|
|
#include "common/Channel.hpp"
|
|
#include "common/Env.hpp"
|
|
#include "common/Literals.hpp"
|
|
#include "controllers/accounts/AccountController.hpp"
|
|
#include "controllers/commands/CommandContext.hpp"
|
|
#include "messages/MessageBuilder.hpp"
|
|
#include "messages/MessageElement.hpp"
|
|
#include "providers/twitch/api/Helix.hpp"
|
|
#include "providers/twitch/TwitchAccount.hpp"
|
|
#include "providers/twitch/TwitchChannel.hpp"
|
|
#include "providers/twitch/TwitchMessageBuilder.hpp"
|
|
#include "singletons/Theme.hpp"
|
|
|
|
#include <QApplication>
|
|
#include <QLoggingCategory>
|
|
#include <QString>
|
|
|
|
namespace {
|
|
|
|
using namespace chatterino;
|
|
|
|
QString formatChattersError(HelixGetChattersError error, const QString &message)
|
|
{
|
|
using Error = HelixGetChattersError;
|
|
|
|
QString errorMessage = QString("Failed to get chatter count - ");
|
|
|
|
switch (error)
|
|
{
|
|
case Error::Forwarded: {
|
|
errorMessage += message;
|
|
}
|
|
break;
|
|
|
|
case Error::UserMissingScope: {
|
|
errorMessage += "Missing required scope. "
|
|
"Re-login with your "
|
|
"account and try again.";
|
|
}
|
|
break;
|
|
|
|
case Error::UserNotAuthorized: {
|
|
errorMessage += "You must have moderator permissions to "
|
|
"use this command.";
|
|
}
|
|
break;
|
|
|
|
case Error::Unknown: {
|
|
errorMessage += "An unknown error has occurred.";
|
|
}
|
|
break;
|
|
}
|
|
return errorMessage;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
namespace chatterino::commands {
|
|
|
|
QString chatters(const CommandContext &ctx)
|
|
{
|
|
if (ctx.channel == nullptr)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
if (ctx.twitchChannel == nullptr)
|
|
{
|
|
ctx.channel->addSystemMessage(
|
|
"The /chatters command only works in Twitch Channels.");
|
|
return "";
|
|
}
|
|
|
|
// Refresh chatter list via helix api for mods
|
|
getHelix()->getChatters(
|
|
ctx.twitchChannel->roomId(),
|
|
getApp()->getAccounts()->twitch.getCurrent()->getUserId(), 1,
|
|
[channel{ctx.channel}](auto result) {
|
|
channel->addSystemMessage(QString("Chatter count: %1.")
|
|
.arg(localizeNumbers(result.total)));
|
|
},
|
|
[channel{ctx.channel}](auto error, auto message) {
|
|
auto errorMessage = formatChattersError(error, message);
|
|
channel->addSystemMessage(errorMessage);
|
|
});
|
|
|
|
return "";
|
|
}
|
|
|
|
QString testChatters(const CommandContext &ctx)
|
|
{
|
|
if (ctx.channel == nullptr)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
if (ctx.twitchChannel == nullptr)
|
|
{
|
|
ctx.channel->addSystemMessage(
|
|
"The /test-chatters command only works in Twitch Channels.");
|
|
return "";
|
|
}
|
|
|
|
getHelix()->getChatters(
|
|
ctx.twitchChannel->roomId(),
|
|
getApp()->getAccounts()->twitch.getCurrent()->getUserId(), 5000,
|
|
[channel{ctx.channel}, twitchChannel{ctx.twitchChannel}](auto result) {
|
|
QStringList entries;
|
|
for (const auto &username : result.chatters)
|
|
{
|
|
entries << username;
|
|
}
|
|
|
|
QString prefix = "Chatters ";
|
|
|
|
if (result.total > 5000)
|
|
{
|
|
prefix += QString("(5000/%1):").arg(result.total);
|
|
}
|
|
else
|
|
{
|
|
prefix += QString("(%1):").arg(result.total);
|
|
}
|
|
|
|
MessageBuilder builder;
|
|
TwitchMessageBuilder::listOfUsersSystemMessage(
|
|
prefix, entries, twitchChannel, &builder);
|
|
|
|
channel->addMessage(builder.release(), MessageContext::Original);
|
|
},
|
|
[channel{ctx.channel}](auto error, auto message) {
|
|
auto errorMessage = formatChattersError(error, message);
|
|
channel->addSystemMessage(errorMessage);
|
|
});
|
|
|
|
return "";
|
|
}
|
|
|
|
} // namespace chatterino::commands
|