Updated TwitcherExtended
Added Signals for streamer_token_validated and chatbot_token_validated. Added bool to prevent multiple runs of Getting live streams. Added function get_live_streamers_data() Fixed bug in get_user_by_id() and get_user(), if user is null, don't cache user result.
This commit is contained in:
parent
d6b5d2c1c2
commit
48fe26459f
1 changed files with 51 additions and 5 deletions
|
|
@ -4,6 +4,8 @@ class_name TwitcherExtended
|
||||||
|
|
||||||
#region Signals
|
#region Signals
|
||||||
signal _waiting_for_authentication
|
signal _waiting_for_authentication
|
||||||
|
signal streamer_token_validated()
|
||||||
|
signal chatbot_token_validated()
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constants
|
#region Constants
|
||||||
|
|
@ -65,6 +67,7 @@ var chatbot_token_loaded: bool = false
|
||||||
var _cache_users: Dictionary[String, TwitchUser] = {}
|
var _cache_users: Dictionary[String, TwitchUser] = {}
|
||||||
var _log: TwitchLogger = TwitchLogger.new("TwitcherExtended")
|
var _log: TwitchLogger = TwitchLogger.new("TwitcherExtended")
|
||||||
var _commands: Dictionary[String, TwitchCommand] = {}
|
var _commands: Dictionary[String, TwitchCommand] = {}
|
||||||
|
var _is_processing_streams: bool = false
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
enum AuthStatus {
|
enum AuthStatus {
|
||||||
|
|
@ -195,6 +198,7 @@ func load_streamer_token() -> AuthStatus:
|
||||||
_log.d("Token authorized")
|
_log.d("Token authorized")
|
||||||
streamer_user = await service.get_current_user()
|
streamer_user = await service.get_current_user()
|
||||||
streamer_token_loaded = true
|
streamer_token_loaded = true
|
||||||
|
streamer_token_validated.emit()
|
||||||
return AuthStatus.AUTHORIZED
|
return AuthStatus.AUTHORIZED
|
||||||
if streamer_token.has_refresh_token():
|
if streamer_token.has_refresh_token():
|
||||||
_log.d("Token needs refreshed")
|
_log.d("Token needs refreshed")
|
||||||
|
|
@ -259,6 +263,7 @@ func load_chatbot_token() -> AuthStatus:
|
||||||
_log.d("Token authroized")
|
_log.d("Token authroized")
|
||||||
bot_user = await chatbot_auth.get_user()
|
bot_user = await chatbot_auth.get_user()
|
||||||
chatbot_token_loaded = true
|
chatbot_token_loaded = true
|
||||||
|
chatbot_token_validated.emit()
|
||||||
return AuthStatus.AUTHORIZED
|
return AuthStatus.AUTHORIZED
|
||||||
if chatbot_token.has_refresh_token():
|
if chatbot_token.has_refresh_token():
|
||||||
_log.d("Token needs refreshed")
|
_log.d("Token needs refreshed")
|
||||||
|
|
@ -287,7 +292,7 @@ func setup_chatbot() -> bool:
|
||||||
return res
|
return res
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Public API shared between both Streamer and Chatbot as needed.
|
#region Public API shared between both Streamer and Chatbot as needed. (Twitcher standard methods)
|
||||||
func send_message(message: String, as_streamer: bool = false) -> void:
|
func send_message(message: String, as_streamer: bool = false) -> void:
|
||||||
if as_streamer:
|
if as_streamer:
|
||||||
await chat.send_message(message)
|
await chat.send_message(message)
|
||||||
|
|
@ -351,16 +356,18 @@ func get_users(...usernames: Array) -> Array[TwitchUser]:
|
||||||
func get_user_by_id(user_id: String) -> TwitchUser:
|
func get_user_by_id(user_id: String) -> TwitchUser:
|
||||||
if _cache_users.has(user_id): return _cache_users[user_id]
|
if _cache_users.has(user_id): return _cache_users[user_id]
|
||||||
var user: TwitchUser = await service.get_user_by_id(user_id)
|
var user: TwitchUser = await service.get_user_by_id(user_id)
|
||||||
_cache_users[user_id] = user
|
if user:
|
||||||
_cache_users[user.login] = user
|
_cache_users[user_id] = user
|
||||||
|
_cache_users[user.login] = user
|
||||||
return user
|
return user
|
||||||
|
|
||||||
func get_user(username: String) -> TwitchUser:
|
func get_user(username: String) -> TwitchUser:
|
||||||
username = username.trim_prefix("@")
|
username = username.trim_prefix("@")
|
||||||
if _cache_users.has(username): return _cache_users[username]
|
if _cache_users.has(username): return _cache_users[username]
|
||||||
var user: TwitchUser = await service.get_user(username)
|
var user: TwitchUser = await service.get_user(username)
|
||||||
_cache_users[user.id] = user
|
if user:
|
||||||
_cache_users[username] = user
|
_cache_users[user.id] = user
|
||||||
|
_cache_users[username] = user
|
||||||
return user
|
return user
|
||||||
|
|
||||||
func subscribe_event(definition: TwitchEventsubDefinition, conditions: Dictionary) -> TwitchEventsubConfig:
|
func subscribe_event(definition: TwitchEventsubDefinition, conditions: Dictionary) -> TwitchEventsubConfig:
|
||||||
|
|
@ -487,3 +494,42 @@ func get_cheermote_data() -> Array[TwitchCheermote]:
|
||||||
func get_cheermote(definition: TwitchCheermoteDefinition) -> Dictionary:
|
func get_cheermote(definition: TwitchCheermoteDefinition) -> Dictionary:
|
||||||
return await media.get_cheermotes(definition)
|
return await media.get_cheermotes(definition)
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Extended Methods
|
||||||
|
func get_live_streamers_data(user_ids: Array = []) -> Dictionary[String, TwitchStream]:
|
||||||
|
if _is_processing_streams:
|
||||||
|
return {}
|
||||||
|
_is_processing_streams = true
|
||||||
|
if user_ids.is_empty():
|
||||||
|
var known := Globals.context.get_known_streamers()
|
||||||
|
user_ids = known.map(func(x: Chatter): return x.twitch_id)
|
||||||
|
|
||||||
|
var streams_data: Dictionary[String, TwitchStream] = {}
|
||||||
|
var opt := TwitchGetStreams.Opt.new()
|
||||||
|
opt.type = "live"
|
||||||
|
|
||||||
|
var iter: int = 0
|
||||||
|
const MAX_ITER = 100
|
||||||
|
while not user_ids.is_empty():
|
||||||
|
iter += 1
|
||||||
|
if iter > MAX_ITER:
|
||||||
|
_log.e("Reached max iterations while getting live stream data.")
|
||||||
|
break
|
||||||
|
|
||||||
|
var new_batch: Array[String] = []
|
||||||
|
new_batch.assign(user_ids.slice(0,99))
|
||||||
|
user_ids = user_ids.slice(99)
|
||||||
|
opt.user_id = new_batch
|
||||||
|
var streams_iterator := await api.get_streams(opt)
|
||||||
|
print("Fetching live...")
|
||||||
|
for stream_promise in streams_iterator:
|
||||||
|
var stream_data: TwitchStream = await stream_promise
|
||||||
|
if stream_data:
|
||||||
|
print("%s(%s) is live" % [stream_data.user_name, stream_data.user_id])
|
||||||
|
streams_data[stream_data.user_id] = stream_data
|
||||||
|
else:
|
||||||
|
print("WTF!!!! Iter is null?")
|
||||||
|
print("Fetching is done.")
|
||||||
|
_is_processing_streams = false
|
||||||
|
return streams_data
|
||||||
|
#endregion
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue