StreamOverlay/lib/chat_manager.gd
Mario Steele c0f0e2f513 Updated ChatManager
Updated creation of new chatter data.
Added check to see if first_seen is -1, and if so, update it.  (This is
for uesrs that are manually added)
2026-03-08 13:18:40 -05:00

57 lines
1.9 KiB
GDScript

@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)