88 lines
2.5 KiB
GDScript
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)
|