One_Eleven_Android/addons/godot-twicil/helpers/twitch_message_wrapper.gd
2024-11-10 03:34:28 +03:00

88 lines
2.5 KiB
GDScript

class_name TwitchMessage
enum EmoteType{TWITCH, BTTV, FFZ}
const emote_id_methods = {
EmoteType.BTTV:"__get_bttv_emote_id",
EmoteType.FFZ:"__get_ffz_emote_id"
}
var chat_message:IrcChatMessage
var emotes:Array
func _init(server_irc_message:TwitchIrcServerMessage, bttv_emotes:Dictionary, ffz_emotes):
chat_message = MessageWrapper.wrap(server_irc_message)
emotes.clear()
__parse_twitch_emotes(server_irc_message.message_prefix)
__parse_bttv_emotes(bttv_emotes)
__parse_ffz_emotes(ffz_emotes)
func __parse_twitch_emotes(message_prefix:String):
var prefix_params: = message_prefix.split(";", false)
var emotes_param:String
for param in prefix_params:
if (param as String).begins_with("emotes"):
var emotes_prefix_param:Array = (param as String).split("=", false, 1)
if emotes_prefix_param.size() <= 1:
return
emotes_param = emotes_prefix_param[1]
for emote in emotes_param.split("/", false):
var emote_data:Array = emote.split(":", false)
var id: = int(emote_data[0])
var positions:Array = emote_data[1].split(",", false)[0].split("-", false)
var start: = int(positions[0])
var end: = int(positions[1])
var code:String = chat_message.text.substr(start, end - start + 1)
emotes.append({
"id":id,
"code":code,
"type":EmoteType.TWITCH
})
static func __get_bttv_emote_id(available_emotes:Dictionary, emote_code:String):
return available_emotes.get(emote_code)
static func __get_ffz_emote_id(available_emotes:Dictionary, emote_code:String):
return available_emotes.get(emote_code, {}).get("id")
func __parse_emotes(available_emotes:Dictionary, type:int)->void :
var message:String = " " + chat_message.text + " "
for emote_code in available_emotes:
var parse_emote_code:String = " " + emote_code + " "
if message.find(parse_emote_code) >= 0:
emotes.append({
"id":callv(emote_id_methods.get(type), [available_emotes, emote_code]),
"code":emote_code,
"type":type
})
func __parse_bttv_emotes(available_emotes:Dictionary)->void :
__parse_emotes(available_emotes, EmoteType.BTTV)
func __parse_ffz_emotes(available_emotes:Dictionary)->void :
__parse_emotes(available_emotes, EmoteType.FFZ)