feat: show mod/VIP badges from shared chats (#6653)
Reviewed-by: Nerixyz <nerixdev@outlook.de> Reviewed-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
- Minor: Added `debug.traceback` for plugins. (#6652)
|
- Minor: Added `debug.traceback` for plugins. (#6652)
|
||||||
- Minor: Added title and duration options for `/clip` command. (#6669)
|
- Minor: Added title and duration options for `/clip` command. (#6669)
|
||||||
- Minor: Added Markdown support to user notes. (#6490)
|
- 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)
|
- Bugfix: Moderation checks now include the lead moderator badge. (#6642)
|
||||||
- Bugfix: Fixed lead moderator badges not being filtered by the `Channel` badge setting. (#6665)
|
- Bugfix: Fixed lead moderator badges not being filtered by the `Channel` badge setting. (#6665)
|
||||||
- Bugfix: Expose the "Extra extension IDs" setting on non-Windows systems too. (#6509)
|
- Bugfix: Expose the "Extra extension IDs" setting on non-Windows systems too. (#6509)
|
||||||
|
|||||||
@@ -10,12 +10,15 @@ class TwitchUsers : public ITwitchUsers
|
|||||||
public:
|
public:
|
||||||
TwitchUsers() = default;
|
TwitchUsers() = default;
|
||||||
|
|
||||||
std::shared_ptr<TwitchUser> resolveID(const UserId &id)
|
std::shared_ptr<TwitchUser> resolveID(const UserId &id) override
|
||||||
{
|
{
|
||||||
TwitchUser u = {
|
TwitchUser u = {
|
||||||
.id = id.string,
|
.id = id.string,
|
||||||
.name = {},
|
.name = "forsen",
|
||||||
.displayName = {},
|
.displayName = "forsen",
|
||||||
|
.profilePictureUrl =
|
||||||
|
"https://static-cdn.jtvnw.net/jtv_user_pictures/"
|
||||||
|
"forsen-profile_image-48b43e1e4f54b5c8-300x300.png",
|
||||||
};
|
};
|
||||||
return std::make_shared<TwitchUser>(u);
|
return std::make_shared<TwitchUser>(u);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -348,6 +348,38 @@ void appendBadges(MessageBuilder *builder, const std::vector<Badge> &badges,
|
|||||||
builder->message().badgeInfos = badgeInfos;
|
builder->message().badgeInfos = badgeInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<Badge> appendSharedChatBadges(
|
||||||
|
MessageBuilder *builder, const std::vector<Badge> &sharedBadges,
|
||||||
|
const QString &sharedChannelName, const TwitchChannel *twitchChannel)
|
||||||
|
{
|
||||||
|
auto appendedBadges = std::vector<Badge>{};
|
||||||
|
for (const auto &badge : sharedBadges)
|
||||||
|
{
|
||||||
|
if (badge.key_ != "moderator" && badge.key_ != "vip")
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto badgeEmote = getTwitchBadge(badge, twitchChannel);
|
||||||
|
if (!badgeEmote)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto tooltip = (*badgeEmote)->tooltip.string;
|
||||||
|
if (sharedChannelName != "")
|
||||||
|
{
|
||||||
|
tooltip = QString("%1 (%2)").arg(tooltip, sharedChannelName);
|
||||||
|
}
|
||||||
|
|
||||||
|
builder->emplace<BadgeElement>(*badgeEmote, badge.flag_)
|
||||||
|
->setTooltip(tooltip);
|
||||||
|
appendedBadges.push_back(badge);
|
||||||
|
}
|
||||||
|
|
||||||
|
return appendedBadges;
|
||||||
|
}
|
||||||
|
|
||||||
bool doesWordContainATwitchEmote(
|
bool doesWordContainATwitchEmote(
|
||||||
int cursor, const QString &word,
|
int cursor, const QString &word,
|
||||||
const std::vector<TwitchEmoteOccurrence> &twitchEmotes,
|
const std::vector<TwitchEmoteOccurrence> &twitchEmotes,
|
||||||
@@ -2379,6 +2411,8 @@ void MessageBuilder::appendTwitchBadges(const QVariantMap &tags,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto badges = parseBadgeTag(tags);
|
||||||
|
|
||||||
if (this->message().flags.has(MessageFlag::SharedMessage))
|
if (this->message().flags.has(MessageFlag::SharedMessage))
|
||||||
{
|
{
|
||||||
const QString sourceId = tags["source-room-id"].toString();
|
const QString sourceId = tags["source-room-id"].toString();
|
||||||
@@ -2410,10 +2444,24 @@ void MessageBuilder::appendTwitchBadges(const QVariantMap &tags,
|
|||||||
this->emplace<BadgeElement>(
|
this->emplace<BadgeElement>(
|
||||||
makeSharedChatBadge(sourceName, sourceProfilePicture, sourceLogin),
|
makeSharedChatBadge(sourceName, sourceProfilePicture, sourceLogin),
|
||||||
MessageElementFlag::BadgeSharedChannel);
|
MessageElementFlag::BadgeSharedChannel);
|
||||||
|
|
||||||
|
const auto sourceBadges = parseBadgeTag(tags, "source-badges");
|
||||||
|
const auto appendedBadges = appendSharedChatBadges(
|
||||||
|
this, sourceBadges, sourceName, twitchChannel);
|
||||||
|
|
||||||
|
// Dedup mod/vip badges if user is mod/vip in both chats,
|
||||||
|
// preferring source channel's badges for the tooltips
|
||||||
|
for (const auto &appendedBadge : appendedBadges)
|
||||||
|
{
|
||||||
|
if (auto b = std::ranges::find(badges, appendedBadge);
|
||||||
|
b != badges.end())
|
||||||
|
{
|
||||||
|
badges.erase(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto badgeInfos = parseBadgeInfoTag(tags);
|
auto badgeInfos = parseBadgeInfoTag(tags);
|
||||||
auto badges = parseBadgeTag(tags);
|
|
||||||
appendBadges(this, badges, badgeInfos, twitchChannel);
|
appendBadges(this, badges, badgeInfos, twitchChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,11 +106,12 @@ std::unordered_map<QString, QString> parseBadgeInfoTag(const QVariantMap &tags)
|
|||||||
return infoMap;
|
return infoMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Badge> parseBadgeTag(const QVariantMap &tags)
|
std::vector<Badge> parseBadgeTag(const QVariantMap &tags,
|
||||||
|
const QString &tagName)
|
||||||
{
|
{
|
||||||
std::vector<Badge> b;
|
std::vector<Badge> b;
|
||||||
|
|
||||||
auto badgesIt = tags.constFind("badges");
|
auto badgesIt = tags.constFind(tagName);
|
||||||
if (badgesIt == tags.end())
|
if (badgesIt == tags.end())
|
||||||
{
|
{
|
||||||
return b;
|
return b;
|
||||||
|
|||||||
@@ -35,18 +35,20 @@ struct TwitchEmoteOccurrence {
|
|||||||
/// @returns A map of badge-names to their values
|
/// @returns A map of badge-names to their values
|
||||||
std::unordered_map<QString, QString> parseBadgeInfoTag(const QVariantMap &tags);
|
std::unordered_map<QString, QString> parseBadgeInfoTag(const QVariantMap &tags);
|
||||||
|
|
||||||
/// @brief Parses the `badges` tag of an IRC message
|
/// @brief Parses the badges from the specified tag of an IRC message
|
||||||
///
|
///
|
||||||
/// The `badges` tag contains a comma separated list of key-value elements which
|
/// All `badges`-type tags contain a comma separated list of key-value elements
|
||||||
/// make up the name and version of each badge.
|
/// which make up the name and version of each badge.
|
||||||
///
|
///
|
||||||
/// **Example**:
|
/// **Example**:
|
||||||
/// `badges=broadcaster/1,subscriber/18` would be parsed as
|
/// `badges=broadcaster/1,subscriber/18` would be parsed as
|
||||||
/// `[(broadcaster, 1), (subscriber, 18)]`
|
/// `[(broadcaster, 1), (subscriber, 18)]`
|
||||||
///
|
///
|
||||||
/// @param tags The tags of the IRC message
|
/// @param tags The tags of the IRC message
|
||||||
|
/// @param tagName The name of the tag to read badges from
|
||||||
/// @returns A list of badges (name and version)
|
/// @returns A list of badges (name and version)
|
||||||
std::vector<Badge> parseBadgeTag(const QVariantMap &tags);
|
std::vector<Badge> parseBadgeTag(const QVariantMap &tags,
|
||||||
|
const QString &tagName = "badges");
|
||||||
|
|
||||||
/// @brief Parses Twitch emotes in an IRC message
|
/// @brief Parses Twitch emotes in an IRC message
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -66,19 +66,40 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"emote": {
|
"emote": {
|
||||||
"homePage": "https://link.twitch.tv/SharedChatViewer",
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
"images": {
|
"images": {
|
||||||
"1x": ""
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
},
|
},
|
||||||
"name": "",
|
"name": "",
|
||||||
"tooltip": "Shared Message"
|
"tooltip": "Shared Message from forsen"
|
||||||
},
|
},
|
||||||
"flags": "BadgeSharedChannel",
|
"flags": "BadgeSharedChannel",
|
||||||
"link": {
|
"link": {
|
||||||
"type": "None",
|
"type": "None",
|
||||||
"value": ""
|
"value": ""
|
||||||
},
|
},
|
||||||
"tooltip": "Shared Message",
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Moderator"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Moderator (forsen)",
|
||||||
"trailingSpace": true,
|
"trailingSpace": true,
|
||||||
"type": "BadgeElement"
|
"type": "BadgeElement"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -66,9 +66,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"emote": {
|
"emote": {
|
||||||
"homePage": "https://link.twitch.tv/SharedChatViewer",
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
"images": {
|
"images": {
|
||||||
"1x": ""
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
},
|
},
|
||||||
"name": "",
|
"name": "",
|
||||||
"tooltip": "Shared Message from twitchdev"
|
"tooltip": "Shared Message from twitchdev"
|
||||||
|
|||||||
@@ -66,9 +66,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"emote": {
|
"emote": {
|
||||||
"homePage": "https://link.twitch.tv/SharedChatViewer",
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
"images": {
|
"images": {
|
||||||
"1x": ""
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
},
|
},
|
||||||
"name": "",
|
"name": "",
|
||||||
"tooltip": "Shared Message from twitchdev"
|
"tooltip": "Shared Message from twitchdev"
|
||||||
@@ -82,6 +84,25 @@
|
|||||||
"trailingSpace": true,
|
"trailingSpace": true,
|
||||||
"type": "BadgeElement"
|
"type": "BadgeElement"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Moderator"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Moderator (twitchdev)",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"emote": {
|
"emote": {
|
||||||
"homePage": "https://www.twitch.tv/jobs?ref=chat_badge",
|
"homePage": "https://www.twitch.tv/jobs?ref=chat_badge",
|
||||||
|
|||||||
@@ -0,0 +1,180 @@
|
|||||||
|
{
|
||||||
|
"input": "@mod=1;badges=moderator/1;tmi-sent-ts=1729627237027;id=3e0750f7-541e-4f7c-8fec-4f943bfd84a3;room-id=11148817;user-id=100229878;display-name=nuuls;badges=bits/100;badge-info=;color=#00FF7F;flags=5-8:P.3;user-type=mod;emotes=;source-only=0;source-badge-info=subscriber/52;source-id=0dd9957e-6140-498f-a6e8-e62d1b43dfe7;source-room-id=22484632;source-badges=moderator/1,subscriber/48 :nuuls!nuuls@nuuls.tmi.twitch.tv PRIVMSG #pajlada :I'm a mod in the current & shared channel",
|
||||||
|
"output": [
|
||||||
|
{
|
||||||
|
"badgeInfos": {
|
||||||
|
},
|
||||||
|
"badges": [
|
||||||
|
"bits"
|
||||||
|
],
|
||||||
|
"channelName": "pajlada",
|
||||||
|
"count": 1,
|
||||||
|
"displayName": "nuuls",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"color": "System",
|
||||||
|
"flags": "ChannelName",
|
||||||
|
"link": {
|
||||||
|
"type": "JumpToChannel",
|
||||||
|
"value": "pajlada"
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"#pajlada"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"color": "System",
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "TimestampMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"20:00"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"format": "",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"time": "20:00:37",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TimestampElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Shared Message from forsen"
|
||||||
|
},
|
||||||
|
"flags": "BadgeSharedChannel",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Moderator"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Moderator (forsen)",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://bits.twitch.tv",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "cheer 100"
|
||||||
|
},
|
||||||
|
"flags": "BadgeVanity",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Twitch cheer 100",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "#ff00ff7f",
|
||||||
|
"flags": "Username",
|
||||||
|
"link": {
|
||||||
|
"type": "UserInfo",
|
||||||
|
"value": "nuuls"
|
||||||
|
},
|
||||||
|
"style": "ChatMediumBold",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"nuuls:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "Text",
|
||||||
|
"flags": "Text",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"I'm",
|
||||||
|
"a",
|
||||||
|
"mod",
|
||||||
|
"in",
|
||||||
|
"the",
|
||||||
|
"current",
|
||||||
|
"&",
|
||||||
|
"shared",
|
||||||
|
"channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#ffa0a0a4",
|
||||||
|
"flags": "ReplyButton",
|
||||||
|
"link": {
|
||||||
|
"type": "ReplyToMessage",
|
||||||
|
"value": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3"
|
||||||
|
},
|
||||||
|
"padding": 2,
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "CircularImageElement",
|
||||||
|
"url": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flags": "Collapsed|SharedMessage",
|
||||||
|
"frozen": false,
|
||||||
|
"id": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3",
|
||||||
|
"localizedName": "",
|
||||||
|
"loginName": "nuuls",
|
||||||
|
"messageText": "I'm a mod in the current & shared channel",
|
||||||
|
"searchText": "nuuls nuuls: I'm a mod in the current & shared channel ",
|
||||||
|
"serverReceivedTime": "2024-10-22T20:00:37Z",
|
||||||
|
"timeoutUser": "",
|
||||||
|
"userID": "100229878",
|
||||||
|
"usernameColor": "#ff00ff7f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
{
|
||||||
|
"input": "@tmi-sent-ts=1729627237027;id=3e0750f7-541e-4f7c-8fec-4f943bfd84a3;room-id=11148817;user-id=100229878;display-name=nuuls;badges=bits/100;badge-info=;color=#00FF7F;flags=5-8:P.3;user-type=;emotes=;source-only=0;source-badge-info=subscriber/52;source-id=0dd9957e-6140-498f-a6e8-e62d1b43dfe7;source-room-id=22484632;source-badges=moderator/1,subscriber/48 :nuuls!nuuls@nuuls.tmi.twitch.tv PRIVMSG #pajlada :I'm a mod in a shared channel",
|
||||||
|
"output": [
|
||||||
|
{
|
||||||
|
"badgeInfos": {
|
||||||
|
},
|
||||||
|
"badges": [
|
||||||
|
"bits"
|
||||||
|
],
|
||||||
|
"channelName": "pajlada",
|
||||||
|
"count": 1,
|
||||||
|
"displayName": "nuuls",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"color": "System",
|
||||||
|
"flags": "ChannelName",
|
||||||
|
"link": {
|
||||||
|
"type": "JumpToChannel",
|
||||||
|
"value": "pajlada"
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"#pajlada"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"color": "System",
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "TimestampMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"20:00"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"format": "",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"time": "20:00:37",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TimestampElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"flags": "ModeratorTools",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TwitchModerationElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Shared Message from forsen"
|
||||||
|
},
|
||||||
|
"flags": "BadgeSharedChannel",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Moderator"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Moderator (forsen)",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://bits.twitch.tv",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "cheer 100"
|
||||||
|
},
|
||||||
|
"flags": "BadgeVanity",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Twitch cheer 100",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "#ff00ff7f",
|
||||||
|
"flags": "Username",
|
||||||
|
"link": {
|
||||||
|
"type": "UserInfo",
|
||||||
|
"value": "nuuls"
|
||||||
|
},
|
||||||
|
"style": "ChatMediumBold",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"nuuls:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "Text",
|
||||||
|
"flags": "Text",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"I'm",
|
||||||
|
"a",
|
||||||
|
"mod",
|
||||||
|
"in",
|
||||||
|
"a",
|
||||||
|
"shared",
|
||||||
|
"channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#ffa0a0a4",
|
||||||
|
"flags": "ReplyButton",
|
||||||
|
"link": {
|
||||||
|
"type": "ReplyToMessage",
|
||||||
|
"value": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3"
|
||||||
|
},
|
||||||
|
"padding": 2,
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "CircularImageElement",
|
||||||
|
"url": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flags": "Collapsed|SharedMessage",
|
||||||
|
"frozen": false,
|
||||||
|
"id": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3",
|
||||||
|
"localizedName": "",
|
||||||
|
"loginName": "nuuls",
|
||||||
|
"messageText": "I'm a mod in a shared channel",
|
||||||
|
"searchText": "nuuls nuuls: I'm a mod in a shared channel ",
|
||||||
|
"serverReceivedTime": "2024-10-22T20:00:37Z",
|
||||||
|
"timeoutUser": "",
|
||||||
|
"userID": "100229878",
|
||||||
|
"usernameColor": "#ff00ff7f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -66,19 +66,40 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"emote": {
|
"emote": {
|
||||||
"homePage": "https://link.twitch.tv/SharedChatViewer",
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
"images": {
|
"images": {
|
||||||
"1x": ""
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
},
|
},
|
||||||
"name": "",
|
"name": "",
|
||||||
"tooltip": "Shared Message"
|
"tooltip": "Shared Message from forsen"
|
||||||
},
|
},
|
||||||
"flags": "BadgeSharedChannel",
|
"flags": "BadgeSharedChannel",
|
||||||
"link": {
|
"link": {
|
||||||
"type": "None",
|
"type": "None",
|
||||||
"value": ""
|
"value": ""
|
||||||
},
|
},
|
||||||
"tooltip": "Shared Message",
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Moderator"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Moderator (forsen)",
|
||||||
"trailingSpace": true,
|
"trailingSpace": true,
|
||||||
"type": "BadgeElement"
|
"type": "BadgeElement"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,191 @@
|
|||||||
|
{
|
||||||
|
"input": "@vip=1;badges=vip/1;tmi-sent-ts=1729627237027;id=3e0750f7-541e-4f7c-8fec-4f943bfd84a3;room-id=11148817;user-id=100229878;display-name=nuuls;badges=bits/100;badge-info=;color=#00FF7F;flags=5-8:P.3;user-type=;emotes=;source-only=0;source-badge-info=subscriber/52;source-id=0dd9957e-6140-498f-a6e8-e62d1b43dfe7;source-room-id=22484632;source-badges=vip/1,subscriber/48 :nuuls!nuuls@nuuls.tmi.twitch.tv PRIVMSG #pajlada :I'm a vip in the current & shared channel",
|
||||||
|
"output": [
|
||||||
|
{
|
||||||
|
"badgeInfos": {
|
||||||
|
},
|
||||||
|
"badges": [
|
||||||
|
"bits"
|
||||||
|
],
|
||||||
|
"channelName": "pajlada",
|
||||||
|
"count": 1,
|
||||||
|
"displayName": "nuuls",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"color": "System",
|
||||||
|
"flags": "ChannelName",
|
||||||
|
"link": {
|
||||||
|
"type": "JumpToChannel",
|
||||||
|
"value": "pajlada"
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"#pajlada"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"color": "System",
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "TimestampMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"20:00"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"format": "",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"time": "20:00:37",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TimestampElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"flags": "ModeratorTools",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TwitchModerationElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Shared Message from forsen"
|
||||||
|
},
|
||||||
|
"flags": "BadgeSharedChannel",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://help.twitch.tv/customer/en/portal/articles/659115-twitch-chat-badges-guide",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "VIP"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "VIP (forsen)",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://bits.twitch.tv",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "cheer 100"
|
||||||
|
},
|
||||||
|
"flags": "BadgeVanity",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Twitch cheer 100",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "#ff00ff7f",
|
||||||
|
"flags": "Username",
|
||||||
|
"link": {
|
||||||
|
"type": "UserInfo",
|
||||||
|
"value": "nuuls"
|
||||||
|
},
|
||||||
|
"style": "ChatMediumBold",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"nuuls:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "Text",
|
||||||
|
"flags": "Text",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"I'm",
|
||||||
|
"a",
|
||||||
|
"vip",
|
||||||
|
"in",
|
||||||
|
"the",
|
||||||
|
"current",
|
||||||
|
"&",
|
||||||
|
"shared",
|
||||||
|
"channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#ffa0a0a4",
|
||||||
|
"flags": "ReplyButton",
|
||||||
|
"link": {
|
||||||
|
"type": "ReplyToMessage",
|
||||||
|
"value": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3"
|
||||||
|
},
|
||||||
|
"padding": 2,
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "CircularImageElement",
|
||||||
|
"url": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flags": "Collapsed|SharedMessage",
|
||||||
|
"frozen": false,
|
||||||
|
"id": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3",
|
||||||
|
"localizedName": "",
|
||||||
|
"loginName": "nuuls",
|
||||||
|
"messageText": "I'm a vip in the current & shared channel",
|
||||||
|
"searchText": "nuuls nuuls: I'm a vip in the current & shared channel ",
|
||||||
|
"serverReceivedTime": "2024-10-22T20:00:37Z",
|
||||||
|
"timeoutUser": "",
|
||||||
|
"userID": "100229878",
|
||||||
|
"usernameColor": "#ff00ff7f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
{
|
||||||
|
"input": "@tmi-sent-ts=1729627237027;id=3e0750f7-541e-4f7c-8fec-4f943bfd84a3;room-id=11148817;user-id=100229878;display-name=nuuls;badges=bits/100;badge-info=;color=#00FF7F;flags=5-8:P.3;user-type=;emotes=;source-only=0;source-badge-info=subscriber/52;source-id=0dd9957e-6140-498f-a6e8-e62d1b43dfe7;source-room-id=22484632;source-badges=vip/1,subscriber/48 :nuuls!nuuls@nuuls.tmi.twitch.tv PRIVMSG #pajlada :I'm a vip in a shared channel",
|
||||||
|
"output": [
|
||||||
|
{
|
||||||
|
"badgeInfos": {
|
||||||
|
},
|
||||||
|
"badges": [
|
||||||
|
"bits"
|
||||||
|
],
|
||||||
|
"channelName": "pajlada",
|
||||||
|
"count": 1,
|
||||||
|
"displayName": "nuuls",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"color": "System",
|
||||||
|
"flags": "ChannelName",
|
||||||
|
"link": {
|
||||||
|
"type": "JumpToChannel",
|
||||||
|
"value": "pajlada"
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"#pajlada"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"element": {
|
||||||
|
"color": "System",
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "TimestampMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"20:00"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"flags": "Timestamp",
|
||||||
|
"format": "",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"time": "20:00:37",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TimestampElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"flags": "ModeratorTools",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TwitchModerationElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://www.twitch.tv/forsen",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-28x28.png",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-70x70.png",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/jtv_user_pictures/forsen-profile_image-48b43e1e4f54b5c8-150x150.png"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "Shared Message from forsen"
|
||||||
|
},
|
||||||
|
"flags": "BadgeSharedChannel",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Shared Message from forsen",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://help.twitch.tv/customer/en/portal/articles/659115-twitch-chat-badges-guide",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "VIP"
|
||||||
|
},
|
||||||
|
"flags": "BadgeChannelAuthority",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "VIP (forsen)",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"emote": {
|
||||||
|
"homePage": "https://bits.twitch.tv",
|
||||||
|
"images": {
|
||||||
|
"1x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/1",
|
||||||
|
"2x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/2",
|
||||||
|
"3x": "https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3"
|
||||||
|
},
|
||||||
|
"name": "",
|
||||||
|
"tooltip": "cheer 100"
|
||||||
|
},
|
||||||
|
"flags": "BadgeVanity",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"tooltip": "Twitch cheer 100",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "BadgeElement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "#ff00ff7f",
|
||||||
|
"flags": "Username",
|
||||||
|
"link": {
|
||||||
|
"type": "UserInfo",
|
||||||
|
"value": "nuuls"
|
||||||
|
},
|
||||||
|
"style": "ChatMediumBold",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"nuuls:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "Text",
|
||||||
|
"flags": "Text",
|
||||||
|
"link": {
|
||||||
|
"type": "None",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"style": "ChatMedium",
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "TextElement",
|
||||||
|
"words": [
|
||||||
|
"I'm",
|
||||||
|
"a",
|
||||||
|
"vip",
|
||||||
|
"in",
|
||||||
|
"a",
|
||||||
|
"shared",
|
||||||
|
"channel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"background": "#ffa0a0a4",
|
||||||
|
"flags": "ReplyButton",
|
||||||
|
"link": {
|
||||||
|
"type": "ReplyToMessage",
|
||||||
|
"value": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3"
|
||||||
|
},
|
||||||
|
"padding": 2,
|
||||||
|
"tooltip": "",
|
||||||
|
"trailingSpace": true,
|
||||||
|
"type": "CircularImageElement",
|
||||||
|
"url": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flags": "Collapsed|SharedMessage",
|
||||||
|
"frozen": false,
|
||||||
|
"id": "3e0750f7-541e-4f7c-8fec-4f943bfd84a3",
|
||||||
|
"localizedName": "",
|
||||||
|
"loginName": "nuuls",
|
||||||
|
"messageText": "I'm a vip in a shared channel",
|
||||||
|
"searchText": "nuuls nuuls: I'm a vip in a shared channel ",
|
||||||
|
"serverReceivedTime": "2024-10-22T20:00:37Z",
|
||||||
|
"timeoutUser": "",
|
||||||
|
"userID": "100229878",
|
||||||
|
"usernameColor": "#ff00ff7f"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user