74 lines
2.4 KiB
GDScript
74 lines
2.4 KiB
GDScript
class_name VSTParseHelper
|
|
|
|
# Parse login name from payload substring of twitch irc chat
|
|
static func parse_login(input_string:String) -> String:
|
|
return get_substring(input_string, ":", "!")
|
|
|
|
|
|
# Parse channel name from payload substring of twitch irc chat
|
|
static func parse_channel(input_string:String) -> String:
|
|
return input_string.trim_prefix("#")
|
|
|
|
|
|
# Parse message from payload substring of twitch irc chat
|
|
static func parse_message(input_string:String) -> String:
|
|
return input_string.trim_prefix(":").strip_edges()
|
|
|
|
|
|
static func parse_tags(input_string:String) -> VSTIRCTags:
|
|
var irc_tags = VSTIRCTags.new()
|
|
var tags:PackedStringArray = input_string.split(";")
|
|
|
|
for i in len(tags):
|
|
var splitted_tag:PackedStringArray = tags[i].split("=")
|
|
|
|
if splitted_tag.size() <= 1: continue
|
|
|
|
match(splitted_tag[0].strip_edges()):
|
|
"badges":
|
|
irc_tags.badges = parse_badges(splitted_tag[1].split(","))
|
|
"color":
|
|
irc_tags.color_hex = splitted_tag[1]
|
|
"display-name":
|
|
irc_tags.display_name = splitted_tag[1]
|
|
"emotes":
|
|
irc_tags.emotes = parse_emotes(splitted_tag[1].split("/"))
|
|
"room-id":
|
|
irc_tags.user_id = splitted_tag[1]
|
|
|
|
return irc_tags
|
|
|
|
|
|
# Parse badges from payload substring of twitch irc chat. Returns a dictionary with the badge itself
|
|
# and the position of the badge
|
|
static func parse_badges(input:PackedStringArray) -> Dictionary:
|
|
var badges: Dictionary = {}
|
|
if input.is_empty() || input[0].is_empty(): return badges
|
|
|
|
for i in len(input):
|
|
var substrings = input[i].split("/")
|
|
if len(substrings) > 1:
|
|
badges[substrings[0]] = substrings[1]
|
|
return badges
|
|
|
|
|
|
# Parse emotes from payload substring of twitch irc chat. Returns a dictionary with the emote
|
|
# itself and the position in the user message in order to replace the text with the image emote
|
|
static func parse_emotes(input:PackedStringArray) -> Dictionary:
|
|
var emotes: Dictionary = {}
|
|
if input.is_empty() || input[0].is_empty(): return emotes
|
|
for emote in input:
|
|
var substring: PackedStringArray = emote.split(":")
|
|
if len(substring) > 1:
|
|
emotes[substring[0]] = substring[1]
|
|
return emotes
|
|
|
|
|
|
|
|
static func get_substring(input_string:String, starting_char:String, ending_char:String) -> String:
|
|
var first_index = input_string.find(starting_char)
|
|
var last_index = input_string.find(ending_char)
|
|
|
|
if first_index == -1 or last_index == -1 or last_index < first_index:
|
|
return input_string
|
|
return input_string.substr(first_index + 1, last_index - first_index - 1)
|