feat: add filter for external badges (#6709)

Co-authored-by: Ava Chow <github@achow101.com>
Reviewed-by: Nerixyz <nerixdev@outlook.de>
This commit is contained in:
pajlada
2026-01-05 16:20:21 +01:00
committed by GitHub
parent 25ea6b9214
commit 327dc0ebcb
186 changed files with 554 additions and 40 deletions
+1
View File
@@ -22,6 +22,7 @@
- Minor: Added support for BetterTTV Pro subscriber badges. (#6625)
- Minor: Added `debug.traceback` for plugins. (#6652)
- Minor: Added title and duration options for `/clip` command. (#6669)
- Minor: Added the ability to filter on messages by the author's external badges (example: `author.external_badges contains "chatterino:Top Donator"` or `author.external_badges contains "frankerfacez:bot"`). (#6709)
- Minor: Added Markdown support to user notes. (#6490)
- Minor: Moderators and VIPs in shared chats now show their channel badges. (#6653)
- Bugfix: Moderation checks now include the lead moderator badge. (#6642)
+8 -5
View File
@@ -12,6 +12,7 @@ namespace chatterino::filters {
const QMap<QString, Type> MESSAGE_TYPING_CONTEXT{
{"author.badges", Type::StringList},
{"author.external_badges", Type::StringList},
{"author.color", Type::Color},
{"author.name", Type::String},
{"author.user_id", Type::String},
@@ -49,16 +50,17 @@ ContextMap buildContextMap(const MessagePtr &m, chatterino::Channel *channel)
{
auto watchingChannel = getApp()->getTwitch()->getWatchingChannel().get();
/*
* Looking to add a new identifier to filters? Here's what to do:
* 1. Update validIdentifiersMap in Tokenizer.cpp
/*
* Looking to add a new identifier to filters? Here's what to do:
* 1. Update VALID_IDENTIFIERS_MAP in Tokenizer.cpp
* 2. Add the identifier to the list below
* 3. Add the type of the identifier to MESSAGE_TYPING_CONTEXT in Filter.hpp
* 3. Add the type of the identifier to MESSAGE_TYPING_CONTEXT at the top of this file
* 4. Add the value for the identifier to the ContextMap returned by this function
*
*
* List of identifiers:
*
* author.badges
* author.external_badges
* author.color
* author.name
* author.user_id
@@ -121,6 +123,7 @@ ContextMap buildContextMap(const MessagePtr &m, chatterino::Channel *channel)
}
ContextMap vars = {
{"author.badges", std::move(badges)},
{"author.external_badges", m->externalBadges},
{"author.color", m->usernameColor},
{"author.name", m->displayName},
{"author.user_id", m->userID},
@@ -18,6 +18,7 @@ namespace chatterino::filters {
const QMap<QString, QString> VALID_IDENTIFIERS_MAP{
{"author.badges", "author badges"},
{"author.external_badges", "author external badges"},
{"author.color", "author color"},
{"author.name", "author name"},
{"author.user_id", "author user id"},
+2
View File
@@ -132,6 +132,8 @@ QJsonObject Message::toJson() const
}
msg["twitchBadgeInfos"_L1] = twitchBadgeInfos;
msg["externalBadges"_L1] = QJsonArray::fromStringList(this->externalBadges);
if (this->highlightColor)
{
msg["highlightColor"_L1] = this->highlightColor->name(QColor::HexArgb);
+7
View File
@@ -61,6 +61,13 @@ struct Message {
/// Map of extra data associated with each Twitch badge
std::unordered_map<QString, QString> twitchBadgeInfos;
/// List of external badges associated with this message
/// The badge should follow the following format: "provider:badgename". e.g.:
/// - betterttv:pro
/// - frankerfacez:mod
/// - 7tv:sub
QStringList externalBadges;
std::shared_ptr<QColor> highlightColor;
// Each reply holds a reference to the thread. When every reply is dropped,
// the reply thread will be cleaned up by the TwitchChannel.
+15
View File
@@ -2472,6 +2472,9 @@ void MessageBuilder::appendChatterinoBadges(const QString &userID)
{
this->emplace<BadgeElement>(*badge,
MessageElementFlag::BadgeChatterino);
/// e.g. "chatterino:Chatterino Top donator"
this->message().externalBadges.emplace_back((*badge)->name.string);
}
}
@@ -2482,6 +2485,9 @@ void MessageBuilder::appendFfzBadges(TwitchChannel *twitchChannel,
{
this->emplace<FfzBadgeElement>(
badge.emote, MessageElementFlag::BadgeFfz, badge.color);
/// e.g. "frankerfacez:subwoofer"
this->message().externalBadges.emplace_back(badge.emote->name.string);
}
if (twitchChannel == nullptr)
@@ -2493,6 +2499,9 @@ void MessageBuilder::appendFfzBadges(TwitchChannel *twitchChannel,
{
this->emplace<FfzBadgeElement>(
badge.emote, MessageElementFlag::BadgeFfz, badge.color);
/// e.g. "frankerfacez:subwoofer"
this->message().externalBadges.emplace_back(badge.emote->name.string);
}
}
@@ -2501,6 +2510,9 @@ void MessageBuilder::appendBttvBadges(const QString &userID)
if (auto badge = getApp()->getBttvBadges()->getBadge({userID}))
{
this->emplace<BadgeElement>(*badge, MessageElementFlag::BadgeBttv);
/// e.g. "betterttv:Pro Subscriber"
this->message().externalBadges.emplace_back((*badge)->name.string);
}
}
@@ -2509,6 +2521,9 @@ void MessageBuilder::appendSeventvBadges(const QString &userID)
if (auto badge = getApp()->getSeventvBadges()->getBadge({userID}))
{
this->emplace<BadgeElement>(*badge, MessageElementFlag::BadgeSevenTV);
/// e.g. "7tv:NNYS 2024"
this->message().externalBadges.emplace_back((*badge)->name.string);
}
}
+4 -2
View File
@@ -3,6 +3,8 @@
#include "messages/Emote.hpp"
#include "messages/Image.hpp"
using namespace Qt::StringLiterals;
namespace chatterino {
QString BttvBadges::idForBadge(const QJsonObject &badgeJson) const
@@ -11,10 +13,10 @@ QString BttvBadges::idForBadge(const QJsonObject &badgeJson) const
}
EmotePtr BttvBadges::createBadge(const QString &id,
const QJsonObject & /* badgeJson */) const
const QJsonObject & /*badgeJson*/) const
{
auto emote = Emote{
.name = EmoteName{},
.name = EmoteName{u"betterttv:pro"_s},
.images = ImageSet(Image::fromUrl(Url{id}, 18.0 / 72.0)),
.tooltip = Tooltip{"BTTV Pro"},
.homePage = Url{},
@@ -48,8 +48,9 @@ void ChatterinoBadges::loadChatterinoBadges()
// The sizes for the images are only an estimation, there might
// be badges with different sizes.
constexpr QSize baseSize(18, 18);
auto tooltip = jsonBadge.value("tooltip").toString();
auto emote = Emote{
.name = EmoteName{},
.name = EmoteName{u"chatterino:" % tooltip},
.images =
ImageSet{
Image::fromUrl(
@@ -62,7 +63,7 @@ void ChatterinoBadges::loadChatterinoBadges()
Url{jsonBadge.value("image3").toString()}, 0.25,
baseSize * 4),
},
.tooltip = Tooltip{jsonBadge.value("tooltip").toString()},
.tooltip = Tooltip{tooltip},
.homePage = Url{},
};
+7 -5
View File
@@ -66,7 +66,11 @@ void FfzBadges::load()
jsonBadge["height"].toInt(18));
auto emote = Emote{
.name = EmoteName{},
.name =
EmoteName{
u"frankerfacez:" %
jsonBadge.value("name").toString(),
},
.images =
ImageSet{
Image::fromUrl(
@@ -82,13 +86,11 @@ void FfzBadges::load()
.homePage = Url{},
};
Badge badge;
int badgeID = jsonBadge.value("id").toInt();
this->badges[badgeID] = Badge{
std::make_shared<const Emote>(std::move(emote)),
QColor(jsonBadge.value("color").toString()),
.emote = std::make_shared<const Emote>(std::move(emote)),
.color = QColor(jsonBadge.value("color").toString()),
};
// Find users with this badge
+1
View File
@@ -4,6 +4,7 @@
#include "util/ThreadGuard.hpp"
#include <QColor>
#include <QString>
#include <memory>
#include <optional>
+4 -2
View File
@@ -1,7 +1,7 @@
#include "providers/seventv/SeventvBadges.hpp"
#include "messages/Emote.hpp"
#include "messages/Image.hpp"
#include "messages/Image.hpp" // IWYU pragma: keep
#include "providers/seventv/SeventvEmotes.hpp"
namespace chatterino {
@@ -15,7 +15,9 @@ EmotePtr SeventvBadges::createBadge(const QString &id,
const QJsonObject &badgeJson) const
{
auto emote = Emote{
.name = EmoteName{},
// We utilize the "emote" "name" for filtering badges, and expect
// the format to be "7tv:badge name" (e.g. "7tv:NNYS 2024")
.name = EmoteName{u"7tv:" % badgeJson["name"].toString()},
.images = SeventvEmotes::createImageSet(badgeJson, true),
.tooltip = Tooltip{badgeJson["tooltip"].toString()},
.homePage = Url{},
@@ -132,6 +132,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessageHeader|EventSub|ModerationAction",
"frozen": true,
"id": "automod_19d067ff-89b5-4790-a720-97599894eb6b",
@@ -239,6 +241,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessageHeader|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "automod_0cbb6e48-1606-46c6-b1ac-c97626e1c5cb",
@@ -253,6 +255,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -138,6 +138,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessageHeader|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "automod_c0fac418-25a9-41b8-adf3-5bd637fca1e1",
@@ -245,6 +247,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -190,6 +190,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessageHeader|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "automod_45a63ca1-1b0c-46ef-9075-d112f9a9f376",
@@ -303,6 +305,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|AutoModBlockedTerm|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -132,6 +132,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessageHeader|EventSub|ModerationAction",
"frozen": true,
"id": "automod_19d067ff-89b5-4790-a720-97599894eb6b",
@@ -239,6 +241,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -172,6 +172,8 @@
]
}
],
"externalBadges": [
],
"flags": "Disabled|PubSub|AutoMod|AutoModOffendingMessageHeader|EventSub|ModerationAction",
"frozen": true,
"id": "automod_19d067ff-89b5-4790-a720-97599894eb6b",
@@ -279,6 +281,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -172,6 +172,8 @@
]
}
],
"externalBadges": [
],
"flags": "Disabled|PubSub|AutoMod|AutoModOffendingMessageHeader|EventSub|ModerationAction",
"frozen": true,
"id": "automod_19d067ff-89b5-4790-a720-97599894eb6b",
@@ -279,6 +281,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -172,6 +172,8 @@
]
}
],
"externalBadges": [
],
"flags": "Disabled|PubSub|AutoMod|AutoModOffendingMessageHeader|EventSub|ModerationAction",
"frozen": true,
"id": "automod_19d067ff-89b5-4790-a720-97599894eb6b",
@@ -279,6 +281,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|AutoModOffendingMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -86,6 +86,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|EventSub",
"frozen": true,
"id": "automod_e39e3c58-3d25-49fd-8c94-e776ef57a7f8",
@@ -79,6 +79,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|EventSub",
"frozen": true,
"id": "automod_5686ec52-e02c-4042-ac21-1dfd8cab0f9f",
@@ -85,6 +85,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|AutoMod|EventSub",
"frozen": true,
"id": "automod_fc90dc3b-0634-41c3-8365-f40719f076ab",
@@ -188,6 +188,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -198,6 +198,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -186,6 +186,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -198,6 +198,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -153,6 +153,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -216,6 +216,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -347,6 +349,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -214,6 +214,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -329,6 +331,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -137,6 +137,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -101,6 +101,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|PubSub|ClearChat|ModerationAction",
"frozen": true,
"id": "",
@@ -155,6 +155,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -155,6 +155,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -146,6 +146,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -162,6 +162,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -136,6 +136,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -140,6 +140,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -190,6 +190,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -198,6 +198,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -198,6 +198,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -198,6 +198,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -187,6 +187,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -244,6 +244,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -392,6 +394,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -244,6 +244,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -170,6 +170,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -188,6 +188,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -188,6 +188,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -290,6 +290,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -430,6 +432,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -600,6 +604,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -250,6 +250,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -420,6 +422,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -250,6 +250,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -390,6 +392,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -194,6 +194,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|SharedMessage|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -169,6 +169,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Untimeout|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -169,6 +169,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Untimeout|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -162,6 +162,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -220,6 +220,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -375,6 +377,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -219,6 +219,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -359,6 +361,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -179,6 +179,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Timeout|PubSub|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -146,6 +146,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -142,6 +142,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -147,6 +147,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -142,6 +142,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -136,6 +136,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Untimeout|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -144,6 +144,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -136,6 +136,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -139,6 +139,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub",
"frozen": true,
"id": "",
@@ -136,6 +136,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|Untimeout|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -155,6 +155,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -155,6 +155,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -81,6 +81,8 @@
]
}
],
"externalBadges": [
],
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -188,6 +190,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -86,6 +86,8 @@
]
}
],
"externalBadges": [
],
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -193,6 +195,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -84,6 +84,8 @@
]
}
],
"externalBadges": [
],
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -191,6 +193,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -81,6 +81,8 @@
]
}
],
"externalBadges": [
],
"flags": "LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -188,6 +190,8 @@
]
}
],
"externalBadges": [
],
"flags": "PubSub|LowTrustUsers|RestrictedMessage|EventSub",
"frozen": true,
"id": "",
@@ -115,6 +115,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -115,6 +115,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -115,6 +115,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|EventSub|ModerationAction",
"frozen": true,
"id": "",
@@ -154,6 +154,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed|Action",
"frozen": false,
"id": "90ef1e46-8baa-4bf2-9c54-272f39d6fa11",
@@ -274,6 +274,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "438b85cc-fa67-4c03-bc38-c4ec2527822c",
@@ -130,6 +130,8 @@
]
}
],
"externalBadges": [
],
"flags": "Highlighted|Collapsed|Subscription",
"frozen": false,
"highlightColor": "#64c466ff",
@@ -199,6 +201,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|Subscription",
"frozen": false,
"id": "",
@@ -125,6 +125,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "7be87072-bf24-4fa3-b3df-0ea6fa5f1474",
@@ -125,6 +125,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "7be87072-bf24-4fa3-b3df-0ea6fa5f1474",
@@ -103,6 +103,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "",
@@ -103,6 +103,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "",
@@ -63,7 +63,7 @@
"images": {
"1x": "https://chatterino.com/Chatterino.png"
},
"name": "",
"name": "chatterino:Chatterino",
"tooltip": "Chatterino badge"
},
"flags": "BadgeChatterino",
@@ -81,7 +81,7 @@
"images": {
"1x": "https://chatterino.com/FFZ1.png"
},
"name": "",
"name": "frankerfacez:FFZ1",
"tooltip": "FFZ1 badge"
},
"flags": "BadgeFfz",
@@ -99,7 +99,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -117,7 +117,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -135,7 +135,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -147,13 +147,31 @@
"trailingSpace": true,
"type": "FfzBadgeElement"
},
{
"emote": {
"id": "https://chatterino.com/betterttv/test.png",
"images": {
"1x": "https://chatterino.com/betterttv/test.png"
},
"name": "betterttv:pro",
"tooltip": "BTTV Pro"
},
"flags": "BadgeBttv",
"link": {
"type": "None",
"value": ""
},
"tooltip": "BTTV Pro",
"trailingSpace": true,
"type": "BadgeElement"
},
{
"emote": {
"id": "1",
"images": {
"1x": "https://chatterino.com/7tv//1x"
},
"name": "",
"name": "7tv:7TV badge name",
"tooltip": "7TV badge"
},
"flags": "BadgeSevenTV",
@@ -209,6 +227,15 @@
"url": ""
}
],
"externalBadges": [
"chatterino:Chatterino",
"frankerfacez:FFZ1",
"frankerfacez:FFZ2",
"frankerfacez:FFZ2",
"frankerfacez:FFZ2",
"betterttv:pro",
"7tv:7TV badge name"
],
"flags": "Collapsed",
"frozen": false,
"id": "546c42a6-21d0-4f3d-a6a0-c77f78d7b131",
+33 -6
View File
@@ -63,7 +63,7 @@
"images": {
"1x": "https://chatterino.com/Chatterino.png"
},
"name": "",
"name": "chatterino:Chatterino",
"tooltip": "Chatterino badge"
},
"flags": "BadgeChatterino",
@@ -81,7 +81,7 @@
"images": {
"1x": "https://chatterino.com/FFZ1.png"
},
"name": "",
"name": "frankerfacez:FFZ1",
"tooltip": "FFZ1 badge"
},
"flags": "BadgeFfz",
@@ -99,7 +99,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -117,7 +117,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -135,7 +135,7 @@
"images": {
"1x": "https://chatterino.com/FFZ2.png"
},
"name": "",
"name": "frankerfacez:FFZ2",
"tooltip": "FFZ2 badge"
},
"flags": "BadgeFfz",
@@ -147,13 +147,31 @@
"trailingSpace": true,
"type": "FfzBadgeElement"
},
{
"emote": {
"id": "https://chatterino.com/betterttv/test.png",
"images": {
"1x": "https://chatterino.com/betterttv/test.png"
},
"name": "betterttv:pro",
"tooltip": "BTTV Pro"
},
"flags": "BadgeBttv",
"link": {
"type": "None",
"value": ""
},
"tooltip": "BTTV Pro",
"trailingSpace": true,
"type": "BadgeElement"
},
{
"emote": {
"id": "1",
"images": {
"1x": "https://chatterino.com/7tv//1x"
},
"name": "",
"name": "7tv:7TV badge name",
"tooltip": "7TV badge"
},
"flags": "BadgeSevenTV",
@@ -209,6 +227,15 @@
"url": ""
}
],
"externalBadges": [
"chatterino:Chatterino",
"frankerfacez:FFZ1",
"frankerfacez:FFZ2",
"frankerfacez:FFZ2",
"frankerfacez:FFZ2",
"betterttv:pro",
"7tv:7TV badge name"
],
"flags": "Collapsed",
"frozen": false,
"id": "546c42a6-21d0-4f3d-a6a0-c77f78d7b131",
@@ -73,6 +73,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|Subscription",
"frozen": false,
"id": "",
@@ -403,6 +403,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed|CheerMessage",
"frozen": false,
"id": "fd6c5507-3a4e-4d24-8f6e-fadf07f520d3",
@@ -177,6 +177,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed|CheerMessage",
"frozen": false,
"id": "fd6c5507-3a4e-4d24-8f6e-fadf07f520d3",
@@ -160,6 +160,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed|CheerMessage",
"frozen": false,
"id": "fd6c5507-3a4e-4d24-8f6e-fadf07f520d3",
@@ -122,6 +122,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed|CheerMessage",
"frozen": false,
"id": "60d8835b-23fa-418c-96ca-5874e5d5e8ba",
@@ -57,6 +57,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|ClearChat|ModerationAction",
"frozen": false,
"id": "",
@@ -222,6 +224,8 @@
"url": ""
}
],
"externalBadges": [
],
"flags": "Collapsed",
"frozen": false,
"id": "b4f3ac1d-6335-4567-bb8d-e76dfd83f7e3",
@@ -55,6 +55,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|ClearChat|ModerationAction",
"frozen": false,
"id": "",
@@ -57,6 +57,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|ClearChat|ModerationAction",
"frozen": false,
"id": "",
@@ -55,6 +55,8 @@
]
}
],
"externalBadges": [
],
"flags": "System|DoNotTriggerNotification|ClearChat|ModerationAction",
"frozen": false,
"id": "",

Some files were not shown because too many files have changed in this diff Show More