twitch addon
This commit is contained in:
parent
2cd7af98a1
commit
07de7179c9
254 changed files with 18420 additions and 1 deletions
61
example/ChatContainer.gd
Normal file
61
example/ChatContainer.gd
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
class_name VSTChatContainer extends VBoxContainer
|
||||
|
||||
var msg_node: PackedScene = preload("res://example/ChatMessage.tscn")
|
||||
@onready var scroll_container = $Chat/ScrollContainer
|
||||
@onready var chat_message_container = $Chat/ScrollContainer/ChatMessageContainer
|
||||
|
||||
func _ready():
|
||||
VerySimpleTwitch.chat_message_received.connect(create_chatter_msg)
|
||||
|
||||
func create_chatter_msg(chatter: VSTChatter):
|
||||
var msg: VSTChatMessage = msg_node.instantiate()
|
||||
|
||||
var badges: String = await get_badges(chatter)
|
||||
chatter.message = escape_bbcode(chatter.message)
|
||||
await add_emotes(chatter)
|
||||
|
||||
var bottom: bool = is_scroll_bottom()
|
||||
|
||||
msg.set_chatter_msg(badges, chatter)
|
||||
chat_message_container.add_child(msg)
|
||||
await get_tree().process_frame
|
||||
if bottom: scroll_container.scroll_vertical = scroll_container.get_v_scroll_bar().max_value
|
||||
|
||||
func get_badges(chatter: VSTChatter) -> String:
|
||||
var badges:= ""
|
||||
for badge in chatter.tags.badges:
|
||||
var result = await VerySimpleTwitch.get_badge(badge, \
|
||||
chatter.tags.badges[badge], chatter.tags.user_id)
|
||||
if result:
|
||||
badges += "[img=center]" + result.resource_path + "[/img] "
|
||||
return badges
|
||||
|
||||
func add_emotes(chatter: VSTChatter):
|
||||
if chatter.tags.emotes.is_empty(): return
|
||||
|
||||
var locations: Array = []
|
||||
for emote in chatter.tags.emotes:
|
||||
for data in chatter.tags.emotes[emote].split(","):
|
||||
var start_end = data.split("-")
|
||||
locations.append(VSTEmoteLocation.new(emote, int(start_end[0]), int(start_end[1])))
|
||||
|
||||
locations.sort_custom(Callable(VSTEmoteLocation, "smaller"))
|
||||
var offset = 0
|
||||
for loc in locations:
|
||||
var result = await VerySimpleTwitch.get_emote(loc.id)
|
||||
var emote_string = "[img=center]" + result.resource_path +"[/img]"
|
||||
chatter.message = chatter.message.substr(0, loc.start + offset) + \
|
||||
emote_string + chatter.message.substr(loc.end + offset + 1)
|
||||
offset += emote_string.length() + loc.start - loc.end - 1
|
||||
|
||||
func is_scroll_bottom() -> bool:
|
||||
return scroll_container.scroll_vertical == scroll_container.get_v_scroll_bar().max_value -\
|
||||
scroll_container.get_v_scroll_bar().get_rect().size.y
|
||||
|
||||
# Returns escaped BBCode that won't be parsed by RichTextLabel as tags.
|
||||
func escape_bbcode(bbcode_text):
|
||||
return bbcode_text.replace("[", "[lb]")
|
||||
|
||||
func clear():
|
||||
for child in chat_message_container.get_children():
|
||||
chat_message_container.remove_child(child)
|
||||
Loading…
Add table
Add a link
Reference in a new issue