feat: add shared chat badge (#5661)
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
#include "providers/twitch/TwitchChannel.hpp"
|
||||
#include "providers/twitch/TwitchIrc.hpp"
|
||||
#include "providers/twitch/TwitchIrcServer.hpp"
|
||||
#include "providers/twitch/TwitchUsers.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
@@ -380,6 +381,18 @@ EmotePtr makeAutoModBadge()
|
||||
Url{"https://dashboard.twitch.tv/settings/moderation/automod"}});
|
||||
}
|
||||
|
||||
EmotePtr makeSharedChatBadge(const QString &sourceName)
|
||||
{
|
||||
return std::make_shared<Emote>(Emote{
|
||||
.name = EmoteName{},
|
||||
.images = ImageSet{Image::fromResourcePixmap(
|
||||
getResources().twitch.sharedChat, 0.25)},
|
||||
.tooltip = Tooltip{"Shared Message" +
|
||||
(sourceName.isEmpty() ? "" : " from " + sourceName)},
|
||||
.homePage = Url{"https://link.twitch.tv/SharedChatViewer"},
|
||||
});
|
||||
}
|
||||
|
||||
std::tuple<std::optional<EmotePtr>, MessageElementFlags, bool> parseEmote(
|
||||
TwitchChannel *twitchChannel, const EmoteName &name)
|
||||
{
|
||||
@@ -2751,6 +2764,28 @@ void MessageBuilder::appendTwitchBadges(const QVariantMap &tags,
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->message().flags.has(MessageFlag::SharedMessage))
|
||||
{
|
||||
const QString sourceId = tags["source-room-id"].toString();
|
||||
QString sourceName;
|
||||
if (sourceId.isEmpty())
|
||||
{
|
||||
sourceName = "";
|
||||
}
|
||||
else if (twitchChannel->roomId() == sourceId)
|
||||
{
|
||||
sourceName = twitchChannel->getName();
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceName =
|
||||
getApp()->getTwitchUsers()->resolveID({sourceId})->displayName;
|
||||
}
|
||||
|
||||
this->emplace<BadgeElement>(makeSharedChatBadge(sourceName),
|
||||
MessageElementFlag::BadgeSharedChannel);
|
||||
}
|
||||
|
||||
auto badgeInfos = parseBadgeInfoTag(tags);
|
||||
auto badges = parseBadgeTag(tags);
|
||||
appendBadges(this, badges, badgeInfos, twitchChannel);
|
||||
|
||||
@@ -66,6 +66,10 @@ enum class MessageElementFlag : int64_t {
|
||||
BitsStatic = (1LL << 11),
|
||||
BitsAnimated = (1LL << 12),
|
||||
|
||||
// Slot 0: Twitch
|
||||
// - Shared Channel indicator badge
|
||||
BadgeSharedChannel = (1LL << 37),
|
||||
|
||||
// Slot 1: Twitch
|
||||
// - Staff badge
|
||||
// - Admin badge
|
||||
@@ -119,7 +123,7 @@ enum class MessageElementFlag : int64_t {
|
||||
|
||||
Badges = BadgeGlobalAuthority | BadgePredictions | BadgeChannelAuthority |
|
||||
BadgeSubscription | BadgeVanity | BadgeChatterino | BadgeSevenTV |
|
||||
BadgeFfz,
|
||||
BadgeFfz | BadgeSharedChannel,
|
||||
|
||||
ChannelName = (1LL << 20),
|
||||
|
||||
|
||||
@@ -195,6 +195,7 @@ void WindowManager::updateWordTypeMask()
|
||||
flags.set(settings->animateEmotes ? MEF::BitsAnimated : MEF::BitsStatic);
|
||||
|
||||
// badges
|
||||
flags.set(MEF::BadgeSharedChannel);
|
||||
flags.set(settings->showBadgesGlobalAuthority ? MEF::BadgeGlobalAuthority
|
||||
: MEF::None);
|
||||
flags.set(settings->showBadgesPredictions ? MEF::BadgePredictions
|
||||
|
||||
@@ -2408,6 +2408,11 @@ void ChannelView::handleMouseClick(QMouseEvent *event,
|
||||
return;
|
||||
}
|
||||
|
||||
if (link.value.startsWith("id:"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Insert @username into split input
|
||||
const bool commaMention =
|
||||
getSettings()->mentionUsersWithComma;
|
||||
|
||||
Reference in New Issue
Block a user