Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7e23884
feat(plugins): add basic message construction
Nerixyz Dec 5, 2024
9a02517
feat: add types
Nerixyz Dec 8, 2024
c69e9a9
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Dec 8, 2024
5dee992
fix: tests
Nerixyz Dec 8, 2024
311ac91
why does ubuntu 22.04 compare case insensitively?
Nerixyz Dec 8, 2024
41f44eb
changelog
Nerixyz Dec 8, 2024
f223c51
silly
Nerixyz Dec 8, 2024
80e8aad
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Mar 12, 2025
ffd9f70
chore: update to changes in message element
Nerixyz Mar 12, 2025
c16cecf
changelog
Nerixyz Mar 12, 2025
ffc2e61
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Apr 16, 2025
c702f8f
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Apr 16, 2025
f06fa25
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz May 10, 2025
01aced2
fix: no combined values
Nerixyz May 10, 2025
11a5fb5
fix: tidy
Nerixyz May 10, 2025
6a75cbd
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Jun 14, 2025
10550c1
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Jul 5, 2025
44a128f
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Jul 20, 2025
908b822
feat: add optional improved text wrapping (#6265)
Nerixyz Jul 20, 2025
0025fa9
fix: link is also themeable
Nerixyz Jul 25, 2025
2e8c223
fix: allow tooltips for all elements
Nerixyz Jul 25, 2025
f6aa00f
docs: expand on `lua-fragment`
Nerixyz Jul 25, 2025
43b64d7
fix: use a helper to access required fields
Nerixyz Jul 25, 2025
6a280cf
docs: add TS types
Nerixyz Jul 25, 2025
7347175
docs: add prose docs
Nerixyz Jul 25, 2025
204b187
Merge remote-tracking branch 'upstream/master' into feat/basic-plugin…
Nerixyz Jul 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- Minor: Added WebSocket API for plugins. (#6076, #6186)
- Minor: Allow for themes to set transparent values for window background on Linux. (#6137)
- Minor: Popup overlay now only draws an outline when being interacted with. (#6140)
- Minor: Added basic message API to plugins. (#5754)
- Minor: Made filters searchable in the Settings dialog search bar. (#5890)
- Minor: Updated emojis to Unicode 16.0. (#6155)
- Minor: Allow disabling of double-click tab renaming through setting. (#6163, #6184)
Expand Down
227 changes: 227 additions & 0 deletions docs/plugin-meta.lua
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,13 @@ function c2.Channel:send_message(message, execute_commands) end
---@param message string
function c2.Channel:add_system_message(message) end

--- Adds a message client-side
---
---@param message c2.Message
---@param context? c2.MessageContext The context of the message being added
---@param override_flags? c2.MessageFlag|nil Flags to override the message's flags (some splits might filter for this)
function c2.Channel:add_message(message, context, override_flags) end

--- Returns true for twitch channels.
--- Compares the channel Type. Note that enum values aren't guaranteed, just
--- that they are equal to the exposed enum.
Expand Down Expand Up @@ -257,6 +264,226 @@ function c2.HTTPRequest.create(method, url) end

-- End src/controllers/plugins/api/HTTPRequest.hpp

-- Begin src/controllers/plugins/api/Message.hpp


---A chat message
---@class c2.Message
c2.Message = {}

---A table to initialize a new message
---@class MessageInit
---@field flags? c2.MessageFlag Message flags (see `c2.MessageFlags`)
---@field id? string The (ideally unique) message ID
---@field parse_time? number Time the message was parsed (in milliseconds since epoch)
---@field search_text? string Text to that is compared when searching for messages
---@field message_text? string The message text (used for filters for example)
---@field login_name? string The login name of the sender
---@field display_name? string The display name of the sender
---@field localized_name? string The localized name of the sender (this is used for CJK names, otherwise it's empty)
---@field user_id? string The ID of the user who sent the message
---@field channel_name? string The name of the channel this message appeared in
---@field username_color? string The color of the username
---@field server_received_time? number The time the server received the message (in milliseconds since epoch)
---@field highlight_color? string|nil The color of the highlight (if any)
---@field elements? MessageElementInit[] The elements of the message

---A base table to initialize a new message element
---@class MessageElementInitBase
---@field tooltip? string Tooltip text
---@field trailing_space? boolean Whether to add a trailing space after the element (default: true)

---@alias MessageColor "text"|"link"|"system"|string A color for a text element - "text" and "system" are special values that take the current theme into account
Comment thread
Nerixyz marked this conversation as resolved.
Outdated

---A table to initialize a new message text element
---@class TextElementInit : MessageElementInitBase
---@field type "text" The type of the element
---@field text string The text of this element
---@field flags? c2.MessageElementFlag Message element flags (see `c2.MessageElementFlags`)
---@field color? MessageColor The color of the text
---@field style? c2.FontStyle The font style of the text

---A table to initialize a new message single-line text element
---@class SingleLineTextElementInit : MessageElementInitBase
---@field type "single-line-text" The type of the element
---@field text string The text of this element
---@field flags? c2.MessageElementFlag Message element flags (see `c2.MessageElementFlags`)
---@field color? MessageColor The color of the text
---@field style? c2.FontStyle The font style of the text

---A table to initialize a new mention element
---@class MentionElementInit : MessageElementInitBase
---@field type "mention" The type of the element
---@field display_name string The display name of the mentioned user
---@field login_name string The login name of the mentioned user
---@field fallback_color MessageColor The color of the element in case the "Colorize @usernames" is disabled
---@field user_color MessageColor The color of the element in case the "Colorize @usernames" is enabled

---A table to initialize a new timestamp element
---@class TimestampElementInit : MessageElementInitBase
---@field type "timestamp" The type of the element
---@field time number? The time of the timestamp (in milliseconds since epoch). If not provided, the current time is used.

---A table to initialize a new Twitch moderation element (all the custom moderation buttons)
---@class TwitchModerationElementInit : MessageElementInitBase
---@field type "twitch-moderation" The type of the element

---A table to initialize a new linebreak element
---@class LinebreakElementInit : MessageElementInitBase
---@field type "linebreak" The type of the element
---@field flags? c2.MessageElementFlag Message element flags (see `c2.MessageElementFlags`)

---A table to initialize a new reply curve element
---@class ReplyCurveElementInit : MessageElementInitBase
---@field type "reply-curve" The type of the element

---@alias MessageElementInit TextElementInit|SingleLineTextElementInit|MentionElementInit|TimestampElementInit|TwitchModerationElementInit|LinebreakElementInit|ReplyCurveElementInit

--- Creates a new message
---
---@param init MessageInit The message initialization table
---@return c2.Message msg The new message
function c2.Message.new(init) end
-- Begin src/singletons/Fonts.hpp

---@enum c2.FontStyle
c2.FontStyle = {
Tiny = {}, ---@type c2.FontStyle.Tiny
ChatSmall = {}, ---@type c2.FontStyle.ChatSmall
ChatMediumSmall = {}, ---@type c2.FontStyle.ChatMediumSmall
ChatMedium = {}, ---@type c2.FontStyle.ChatMedium
ChatMediumBold = {}, ---@type c2.FontStyle.ChatMediumBold
ChatMediumItalic = {}, ---@type c2.FontStyle.ChatMediumItalic
ChatLarge = {}, ---@type c2.FontStyle.ChatLarge
ChatVeryLarge = {}, ---@type c2.FontStyle.ChatVeryLarge
TimestampMedium = {}, ---@type c2.FontStyle.TimestampMedium
UiMedium = {}, ---@type c2.FontStyle.UiMedium
UiMediumBold = {}, ---@type c2.FontStyle.UiMediumBold
UiTabs = {}, ---@type c2.FontStyle.UiTabs
EndType = {}, ---@type c2.FontStyle.EndType
ChatStart = {}, ---@type c2.FontStyle.ChatStart
ChatEnd = {}, ---@type c2.FontStyle.ChatEnd
}

-- End src/singletons/Fonts.hpp

-- Begin src/messages/MessageElement.hpp

---@enum c2.MessageElementFlag
c2.MessageElementFlag = {
None = 0,
Misc = 0,
Text = 0,
Username = 0,
Timestamp = 0,
TwitchEmoteImage = 0,
TwitchEmoteText = 0,
TwitchEmote = 0,
BttvEmoteImage = 0,
BttvEmoteText = 0,
BttvEmote = 0,
ChannelPointReward = 0,
ChannelPointRewardImage = 0,
FfzEmoteImage = 0,
FfzEmoteText = 0,
FfzEmote = 0,
SevenTVEmoteImage = 0,
SevenTVEmoteText = 0,
SevenTVEmote = 0,
EmoteImages = 0,
EmoteText = 0,
BitsStatic = 0,
BitsAnimated = 0,
BadgeSharedChannel = 0,
BadgeGlobalAuthority = 0,
BadgePredictions = 0,
BadgeChannelAuthority = 0,
BadgeSubscription = 0,
BadgeVanity = 0,
BadgeChatterino = 0,
BadgeSevenTV = 0,
BadgeFfz = 0,
Badges = 0,
ChannelName = 0,
BitsAmount = 0,
ModeratorTools = 0,
EmojiImage = 0,
EmojiText = 0,
EmojiAll = 0,
AlwaysShow = 0,
Collapsed = 0,
Mention = 0,
LowercaseLinks = 0,
RepliedMessage = 0,
ReplyButton = 0,
Default = 0,
}

-- End src/messages/MessageElement.hpp

-- Begin src/messages/MessageFlag.hpp

---@enum c2.MessageFlag
c2.MessageFlag = {
None = 0,
System = 0,
Timeout = 0,
Highlighted = 0,
DoNotTriggerNotification = 0,
Centered = 0,
Disabled = 0,
DisableCompactEmotes = 0,
Collapsed = 0,
ConnectedMessage = 0,
DisconnectedMessage = 0,
Untimeout = 0,
PubSub = 0,
Subscription = 0,
DoNotLog = 0,
AutoMod = 0,
RecentMessage = 0,
Whisper = 0,
HighlightedWhisper = 0,
Debug = 0,
Similar = 0,
RedeemedHighlight = 0,
RedeemedChannelPointReward = 0,
ShowInMentions = 0,
FirstMessage = 0,
ReplyMessage = 0,
ElevatedMessage = 0,
SubscribedThread = 0,
CheerMessage = 0,
LiveUpdatesAdd = 0,
LiveUpdatesRemove = 0,
LiveUpdatesUpdate = 0,
AutoModOffendingMessageHeader = 0,
AutoModOffendingMessage = 0,
LowTrustUsers = 0,
RestrictedMessage = 0,
MonitoredMessage = 0,
Action = 0,
SharedMessage = 0,
AutoModBlockedTerm = 0,
ClearChat = 0,
EventSub = 0,
ModerationAction = 0,
}

-- End src/messages/MessageFlag.hpp

-- Begin src/common/enums/MessageContext.hpp

---@enum c2.MessageContext
c2.MessageContext = {
Original = {}, ---@type c2.MessageContext.Original
Repost = {}, ---@type c2.MessageContext.Repost
}

-- End src/common/enums/MessageContext.hpp

-- End src/controllers/plugins/api/Message.hpp

-- Begin src/controllers/plugins/api/WebSocket.hpp

---@class c2.WebSocket
Expand Down
Loading
Loading