chore: refactor TwitchIrcServer (#5421)

This commit is contained in:
pajlada
2024-06-01 14:56:40 +02:00
committed by GitHub
parent 2a46ee708e
commit b6dc5d9e03
28 changed files with 373 additions and 163 deletions
+30 -26
View File
@@ -13,6 +13,7 @@
#include "messages/MessageColor.hpp"
#include "messages/MessageElement.hpp"
#include "messages/MessageThread.hpp"
#include "providers/irc/AbstractIrcServer.hpp"
#include "providers/twitch/ChannelPointReward.hpp"
#include "providers/twitch/TwitchAccount.hpp"
#include "providers/twitch/TwitchAccountManager.hpp"
@@ -169,7 +170,7 @@ void updateReplyParticipatedStatus(const QVariantMap &tags,
}
ChannelPtr channelOrEmptyByTarget(const QString &target,
TwitchIrcServer &server)
IAbstractIrcServer &server)
{
QString channelName;
if (!trimChannelName(target, channelName))
@@ -677,9 +678,10 @@ std::vector<MessagePtr> IrcMessageHandler::parseMessageWithReply(
}
void IrcMessageHandler::handlePrivMessage(Communi::IrcPrivateMessage *message,
TwitchIrcServer &server)
ITwitchIrcServer &twitchServer,
IAbstractIrcServer &abstractIrcServer)
{
auto chan = channelOrEmptyByTarget(message->target(), server);
auto chan = channelOrEmptyByTarget(message->target(), abstractIrcServer);
if (chan->isEmpty())
{
return;
@@ -710,8 +712,8 @@ void IrcMessageHandler::handlePrivMessage(Communi::IrcPrivateMessage *message,
// https://mm2pl.github.io/emoji_rfc.pdf for more details
this->addMessage(
message, chan,
message->content().replace(COMBINED_FIXER, ZERO_WIDTH_JOINER), server,
false, message->isAction());
message->content().replace(COMBINED_FIXER, ZERO_WIDTH_JOINER),
twitchServer, false, message->isAction());
if (message->tags().contains(u"pinned-chat-paid-amount"_s))
{
@@ -733,7 +735,7 @@ void IrcMessageHandler::handleRoomStateMessage(Communi::IrcMessage *message)
{
return;
}
auto chan = getApp()->twitch->getChannelOrEmpty(chanName);
auto chan = getIApp()->getTwitchAbstract()->getChannelOrEmpty(chanName);
auto *twitchChannel = dynamic_cast<TwitchChannel *>(chan.get());
if (!twitchChannel)
@@ -795,7 +797,7 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message)
}
// get channel
auto chan = getApp()->twitch->getChannelOrEmpty(chanName);
auto chan = getIApp()->getTwitchAbstract()->getChannelOrEmpty(chanName);
if (chan->isEmpty())
{
@@ -839,7 +841,7 @@ void IrcMessageHandler::handleClearMessageMessage(Communi::IrcMessage *message)
}
// get channel
auto chan = getApp()->twitch->getChannelOrEmpty(chanName);
auto chan = getIApp()->getTwitchAbstract()->getChannelOrEmpty(chanName);
if (chan->isEmpty())
{
@@ -888,7 +890,7 @@ void IrcMessageHandler::handleUserStateMessage(Communi::IrcMessage *message)
return;
}
auto c = getApp()->twitch->getChannelOrEmpty(channelName);
auto c = getIApp()->getTwitchAbstract()->getChannelOrEmpty(channelName);
if (c->isEmpty())
{
return;
@@ -943,7 +945,7 @@ void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *ircMessage)
args.isReceivedWhisper = true;
auto *c = getApp()->twitch->whispersChannel.get();
auto *c = getIApp()->getTwitch()->getWhispersChannel().get();
TwitchMessageBuilder builder(
c, ircMessage, args,
@@ -959,11 +961,11 @@ void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *ircMessage)
MessagePtr message = builder.build();
builder.triggerHighlights();
getApp()->twitch->lastUserThatWhisperedMe.set(builder.userName);
getIApp()->getTwitch()->setLastUserThatWhisperedMe(builder.userName);
if (message->flags.has(MessageFlag::ShowInMentions))
{
getApp()->twitch->mentionsChannel->addMessage(message);
getIApp()->getTwitch()->getMentionsChannel()->addMessage(message);
}
c->addMessage(message);
@@ -976,15 +978,16 @@ void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *ircMessage)
!(getSettings()->streamerModeSuppressInlineWhispers &&
getIApp()->getStreamerMode()->isEnabled()))
{
getApp()->twitch->forEachChannel(
getIApp()->getTwitchAbstract()->forEachChannel(
[&message, overrideFlags](ChannelPtr channel) {
channel->addMessage(message, overrideFlags);
});
}
}
void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
TwitchIrcServer &server)
void IrcMessageHandler::handleUserNoticeMessage(
Communi::IrcMessage *message, ITwitchIrcServer &twitchServer,
IAbstractIrcServer &abstractIrcServer)
{
auto tags = message->tags();
auto parameters = message->parameters();
@@ -997,7 +1000,7 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
content = parameters[1];
}
auto chn = server.getChannelOrEmpty(target);
auto chn = abstractIrcServer.getChannelOrEmpty(target);
if (isIgnoredMessage({
.message = content,
.twitchUserID = tags.value("user-id").toString(),
@@ -1013,7 +1016,7 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
// Messages are not required, so they might be empty
if (!content.isEmpty())
{
this->addMessage(message, chn, content, server, true, false);
this->addMessage(message, chn, content, twitchServer, true, false);
}
}
@@ -1090,7 +1093,7 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message,
return;
}
auto chan = server.getChannelOrEmpty(channelName);
auto chan = abstractIrcServer.getChannelOrEmpty(channelName);
if (!chan->isEmpty())
{
@@ -1111,7 +1114,7 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message)
{
// Notice wasn't targeted at a single channel, send to all twitch
// channels
getApp()->twitch->forEachChannelAndSpecialChannels(
getIApp()->getTwitch()->forEachChannelAndSpecialChannels(
[msg](const auto &c) {
c->addMessage(msg);
});
@@ -1119,7 +1122,8 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message)
return;
}
auto channel = getApp()->twitch->getChannelOrEmpty(channelName);
auto channel =
getIApp()->getTwitchAbstract()->getChannelOrEmpty(channelName);
if (channel->isEmpty())
{
@@ -1202,8 +1206,8 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message)
void IrcMessageHandler::handleJoinMessage(Communi::IrcMessage *message)
{
auto channel =
getApp()->twitch->getChannelOrEmpty(message->parameter(0).remove(0, 1));
auto channel = getIApp()->getTwitchAbstract()->getChannelOrEmpty(
message->parameter(0).remove(0, 1));
auto *twitchChannel = dynamic_cast<TwitchChannel *>(channel.get());
if (!twitchChannel)
@@ -1225,8 +1229,8 @@ void IrcMessageHandler::handleJoinMessage(Communi::IrcMessage *message)
void IrcMessageHandler::handlePartMessage(Communi::IrcMessage *message)
{
auto channel =
getApp()->twitch->getChannelOrEmpty(message->parameter(0).remove(0, 1));
auto channel = getIApp()->getTwitchAbstract()->getChannelOrEmpty(
message->parameter(0).remove(0, 1));
auto *twitchChannel = dynamic_cast<TwitchChannel *>(channel.get());
if (!twitchChannel)
@@ -1311,7 +1315,7 @@ void IrcMessageHandler::setSimilarityFlags(const MessagePtr &message,
void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
const ChannelPtr &chan,
const QString &originalContent,
TwitchIrcServer &server, bool isSub,
ITwitchIrcServer &server, bool isSub,
bool isAction)
{
if (chan->isEmpty())
@@ -1446,7 +1450,7 @@ void IrcMessageHandler::addMessage(Communi::IrcMessage *message,
if (highlighted && showInMentions)
{
server.mentionsChannel->addMessage(msg);
server.getMentionsChannel()->addMessage(msg);
}
chan->addMessage(msg);