shine-runners-test/twitch.gd

142 lines
4.4 KiB
GDScript3
Raw Permalink Normal View History

2025-04-21 00:14:55 +10:00
extends Node
2025-04-21 01:11:27 +10:00
2025-04-21 15:57:48 +10:00
var save : Save
var save_path : String = "C:\\Users\\Tabby\\Documents\\Godot\\Projects\\shine-runners-test\\data\\save.tres"
var game_node : Node2D
var current_winner : int = -1
2025-04-21 23:01:09 +10:00
var web_request : HTTPRequest
2025-04-21 15:57:48 +10:00
2025-04-21 01:11:27 +10:00
func _ready() -> void:
VerySimpleTwitch.get_token_and_login_chat()
2025-04-21 15:57:48 +10:00
VerySimpleTwitch.chat_message_received.connect(handle_message)
game_node = get_node("/root/Game")
2025-04-21 23:01:09 +10:00
web_request = HTTPRequest.new()
web_request.request_completed.connect(_on_user_id_received)
2025-04-21 15:57:48 +10:00
#test_save()
2025-04-21 01:11:27 +10:00
func _process(delta: float) -> void:
pass
2025-04-21 15:57:48 +10:00
func handle_message(chatter: VSTChatter):
2025-04-21 01:11:27 +10:00
print("Message received from %s: %s" % [chatter.tags.display_name, chatter.message])
2025-04-21 23:01:09 +10:00
#print(get_user_id(chatter.tags.display_name))
#get_user_id(chatter.tags.display_name)
2025-04-21 15:57:48 +10:00
var found_player : bool = false
for player in save.player_database:
2025-04-21 23:01:09 +10:00
#if(chatter.tags.user_id == player.user_id): #TODO make it user id based
if(chatter.tags.display_name == player.username):
2025-04-21 15:57:48 +10:00
found_player = true
2025-04-21 21:38:38 +10:00
print("found " + player.username)
2025-04-21 15:57:48 +10:00
# do whatever we want for a found player
player.playing = true
var splits : PackedStringArray = chatter.message.split(" ")
#print(splits)
if splits[0] == "!bet" and player.betting == false and splits.size() == 3 and game_node.state == game_node.State.prep: #player has not already submitted a bet
if int(splits[1]) <= player.money and player.money >= 0: #they have the money to bet
if int(splits[2]) < 8: #they are betting on a valid character
player.betting = true
player.money -= int(splits[1])
player.current_wager = int(splits[1])
player.current_bet = int(splits[2])
if(not found_player):
create_new_player(chatter.tags.user_id, chatter.tags.display_name)
game_node.load_userboard()
func create_new_player(id : String, name : String) -> PlayerData:
2025-04-21 21:38:38 +10:00
print("creating a new player: " + name)
2025-04-21 15:57:48 +10:00
var player : PlayerData = PlayerData.new()
player.user_id = id
player.username = name
player.money = 100
player.playing = true
save.player_database.append(player)
return player
2025-04-21 16:05:18 +10:00
func start_round():
for data in save.player_database:
if data.money < 100:
data.money = clampi(data.money + 5, 0, 100)
2025-04-21 15:57:48 +10:00
func end_round(winning_character : int):
current_winner = winning_character
for data in save.player_database:
if data.current_bet == winning_character:
data.money += data.current_wager*8
data.result = PlayerData.Result.win
else:
data.result = PlayerData.Result.lose
if data.betting == false:
data.result = PlayerData.Result.none
data.current_bet = 20
data.betting = false
data.current_wager = 0
save_database()
#do before the round
func load_database():
if ResourceLoader.exists(save_path):
save = ResourceLoader.load(save_path)
else:
save = Save.new()
save.player_database = []
#do just before every reset
func save_database():
ResourceSaver.save(save, save_path)
func test_save():
save = Save.new()
var player1 : PlayerData = PlayerData.new()
player1.user_id = "1"
player1.money = 100
save.player_database = [player1]
#save.player_database.append(player1)
var player2 : PlayerData = PlayerData.new()
player2.user_id = "22"
player2.money = 200
save.player_database.append(player2)
var player3 : PlayerData = PlayerData.new()
player3.user_id = "333"
player3.money = 300
save.player_database.append(player3)
ResourceSaver.save(save, save_path)
2025-04-21 21:38:38 +10:00
#func get_user_id(username : String, on_success : Callable):
#var body = {
#data = {
#login = username
#},
#}
#var vst = VSTNetwork_Call.new()
#vst.to("https://api.twitch.tv/helix/users")
##vst.add_all_get_params({
##'broadcaster_id': _user.id,
##'moderator_id': _user.id
##}).\
#vst.with(body)
#vst.verb(HTTPClient.METHOD_POST)
#vst.add_all_headers({
#'Client-Id: ' : VSTAPI._client_id,
#'Authorization': 'Bearer ' + VSTAPI._user.token,
#'Content-Type': 'application/json'
#})
#vst.set_on_call_success(on_success)
#vst.launch_request(self)
#
#func on_user_id_received(response : VSTNetwork_Call):
#print(response.body)
func get_user_id(username : String):
2025-04-21 23:01:09 +10:00
var headers = ["'Client-Id: ' : "+ VSTAPI._client_id, "'Authorization': 'Bearer '" + VSTAPI._user.token,"'Content-Type': 'application/json'"]
web_request.request("https://api.twitch.tv/helix/users?" + username,headers)
func _on_user_id_received(result, response_code, headers, body):
print("i exist?")
var json = JSON.parse_string(body.get_string_from_utf8())
print(response_code)