@tool extends Node signal first_seen_chat(user: TwitchUser, chatter: Chatter, msg: TwitchChatMessage) signal first_chat(user: TwitchUser, chatter: Chatter, msg: TwitchChatMessage) signal chat_message(user: TwitchUser, msg: TwitchChatMessage) var chatters: Dictionary[TwitchUser, Chatter] = {} var _log: TwitchLogger = TwitchLogger.new("ChatManager") func _ready() -> void: if Engine.is_editor_hint(): return while not Globals.twitcher: await get_tree().process_frame Globals.twitcher.chat.message_received.connect(_handle_message) func _handle_message(message: TwitchChatMessage) -> void: var id := message.chatter_user_id var user: TwitchUser var chatter: Chatter var first_msg: bool = false var first_seen: bool = false # Do we have the chatter this session? if chatters.keys().any(func(x: TwitchUser): return x.id == id): var res := chatters.keys().filter(func(x: TwitchUser): return x.id == id) user = res[0] chatter = chatters[user] else: user = await Globals.twitcher.get_user_by_id(id) if not user: _log.e("Failed to fetch user by id: %s" % [id]) return # Do we have this chatter in our database? chatter = Globals.context.chatters.find_one(Condition.new().equal("twitch_id", id)) if not chatter: chatter = Chatter.new() chatter.twitch_id = user.id chatter.user = user chatter.first_added = Time.get_unix_time_from_system() chatter.first_seen = chatter.first_added chatter.last_seen = chatter.first_added Globals.context.chatters.append(chatter) first_seen = true else: if chatter.first_seen == -1.0: chatter.first_seen = Time.get_unix_time_from_system() chatter.last_seen = Time.get_unix_time_from_system() chatter.save() first_msg = true chatters[user] = chatter if first_seen: first_seen_chat.emit(user, chatter, message) if first_msg: first_chat.emit(user, chatter, message) chat_message.emit(user, chatter, message)