How to make party join and create using nakama?

I want to make party system.
But unfortunately, I’m told that the party system has a code error.

I want to get advice from code.

For reference I already make var . So I hope you don’t mind me not writing down the variables.

Also, I need to move participants to the game scene when matchmaking happens, but honestly, I’m not good at implementing it.

func create_party():
	if party != null:
		return
	if nk_socket == null or not nk_socket.connected:
		return

	party = await nk_socket.create_party_async(true, 5)
	if party.is_exception():
		party = null
		return

	is_party_leader = true
	party_users[nk_session.user_id] = Playerdata.nick_name
	update_party_labels()
	await join_party_chat(party.party_id)
	update_party_ui()


func _join_party_via_chat(party_id: String):
	if party != null:
		auto_create_party = false
		await leave_current_party()

	var result = await nk_socket.join_party_async(party_id)
	if result.is_exception():
		print("error", result.exception.message)
		_add_chat_log("error")
		auto_create_party = true
		await create_party()
		return

	party = result
	is_party_leader = false
	_add_chat_log("join party successful")

	await join_party_chat(party.party_id)
	update_party_ui()
	auto_create_party = true
func join_party_chat(party_id: String):
	var room_name = "party_" + party_id
	var channel = await nk_socket.join_chat_async(room_name, 1, true, false)
	if channel.is_exception():
		print("partychat failed", channel.exception.message)
		return
	party_chat_channel = channel

func leave_party_chat():
	if party_chat_channel == null:
		return
	await nk_socket.leave_chat_async(party_chat_channel.id)
	party_chat_channel = null
	leave_party_button.visible=false

func leave_current_party():
	if party == null:
		return
	await leave_party_chat()
	await nk_socket.leave_party_async(party.party_id)
	party = null
	party_users.clear()
	is_party_leader = false
	update_party_ui()

	if auto_create_party:
		await get_tree().create_timer(0.3).timeout
		await create_party()
func _on_party_presence(event):
	for join in event.joins:
		party_users[join.user_id] = join.username
	for leave in event.leaves:
		party_users.erase(leave.user_id)
	update_party_labels()

func update_party_labels():
	for label in party_labels:
		label.text = ""
		label.visible = false

	var i := 0
	for username in party_users.values():
		if i >= party_labels.size():
			break
		party_labels[i].text = username
		party_labels[i].visible = true
		i += 1

func update_party_ui():
	if party != null:
		leave_party_button.visible = true
		ready_button.visible = party_users.size() >= 2
	else:
		leave_party_button.visible = false
		ready_button.visible = false
func ready_button_pressed():
	if ready_players.has(Playerdata.user_id) and ready_players[Playerdata.user_id]:
		ready_players[Playerdata.user_id] = false
		ready_button.text = "Ready"
	else:
		ready_players[Playerdata.user_id] = true
		ready_button.text = "Ready complete"

	if is_party_leader:
		_check_all_ready()

func _check_all_ready():
	for uid in party_users.keys():
		if not ready_players.has(uid) or not ready_players[uid]:
			return
	print("all player ready")
	join_party_match()

func join_party_match():
	if not is_party_leader:
		return
	var party_id = party.party_id
	match_ticket = await nk_socket.add_matchmaker_async("*", party_users.size(), party_users.size(), {"party_id": party_id}, {})
	if match_ticket.is_exception():
		print("join failed", match_ticket.exception.message)
		return
	print("ready", party_id)