Moje Aplikacje

Zarządzaj swoimi oficjalnymi aplikacjami, botami, intencjami oraz kluczami dostępowymi API.

Ładowanie aplikacji...

Kreator Embedów (Rich Embed Builder)

Modułowy kreator wiadomości bota z możliwością dowolnego dodawania, usuwania i układania bloków.

Dodaj Element:
Podgląd na czacie LinkUp (Discord-style)
L
LinkUp Bot BOT Dziś o 02:30
Wygenerowany Kod

Biblioteka linkup-node (Node.js SDK)

Oficjalna biblioteka typu open-source w standardzie Discord.js v14 stworzona do budowy botów w LinkUp.

Instalacja Biblioteki

$ npm install linkup-node

1. Inicjalizacja Klienta & Pierwszy Bot (Ping-Pong)

const { Client, Intents, EmbedBuilder } = require('linkup-node');

const client = new Client({
  intents: [
    Intents.Guilds,
    Intents.GuildMessages,
    Intents.MessageContent
  ],
  // Domyślny adres bramy Gateway LinkUp
  gatewayUrl: 'wss://api.link-up.lol'
});

client.on('ready', () => {
  console.log(`[LinkUp] Zalogowano pomyślnie jako ${client.user.tag}!`);
  client.user.setActivity('Zintegrowano z FiveM | dev.link-up.lol');
});

client.on('messageCreate', async (message) => {
  // Ignoruj wiadomości od botów
  if (message.author.bot) return;

  if (message.content === '!ping') {
    const embed = new EmbedBuilder()
      .setTitle('Pong!')
      .setDescription(`Opóźnienie bota wynosi: **${client.ws.ping}ms**`)
      .setColor('#6366F1')
      .setFooter({ text: 'LinkUp Official SDK' })
      .setTimestamp();

    await message.reply({ embeds: [embed] });
  }
});

// Zaloguj się tokenem wygenerowanym w zakładce "Moje Aplikacje"
client.login('TWÓJ_TOKEN_BOTA_Z_DEVELOPER_PORTALU');

2. Rejestracja i Obsługa Komend Ukośnika (Slash Commands)

// Rejestracja komendy /status
client.on('ready', async () => {
  await client.application.commands.create({
    name: 'serwer',
    description: 'Sprawdza aktualny status serwera FiveM oraz liczbę graczy online'
  });
  console.log('[SlashCommands] Komenda /serwer została zarejestrowana!');
});

// Obsługa interakcji użytkownika
client.on('interactionCreate', async (interaction) => {
  if (!interaction.isCommand()) return;

  if (interaction.commandName === 'serwer') {
    await interaction.reply({
      content: 'Serwer FiveM jest aktywny: **64/128 graczy online**.',
      ephemeral: true
    });
  }
});

Wprowadzenie & Architektura

Kompleksowy most komunikacyjny łączący serwer gry FiveM z platformą LinkUp.

Standard Open-Source: Cały zasób LinkUp_Panel jest w pełni wolnym oprogramowaniem pozbawionym jakichkolwiek mocków czy zaciemnionego kodu (brak obfuskacji), gotowym do publikacji na GitHubie.

Jak działa połączenie?

Integracja LinkUp z FiveM opiera się na architekturze dwukierunkowej:

  1. Outbound Telemetry (FiveM → LinkUp): Serwer FiveM w pętli co 1.5s zbiera współrzędne 3D (X, Y, Z), kierunek patrzenia (Heading), prędkość w km/h, zdrowie i pancerz każdego gracza, wysyłając bezpieczny raport HTTP do API LinkUp.
  2. Inbound Commands (LinkUp → FiveM): LinkUp komunikuje się z FiveM za pośrednictwem natywnego serwera HTTP w FiveM (SetHttpCallback) na porcie serwera, umożliwiając restartowanie zasobów, wykonywanie komend konsoli czy wywoływanie akcji administratorskich.
  3. Permission Bridge: Podczas dołączania gracza (playerConnecting) skrypt odpytuje LinkUp o identyfikatory Steam/Discord/License gracza i automatycznie przyznaje mu uprawnienia ACE, rangę administracyjną ESX lub QBCore.

Wymagania Systemowe

KomponentWymaganie minimalneZalecane
Wersja FXServerFXServer Artifact 12000+ (Linux / Windows)FXServer Artifact 14300+ (Najnowszy master release)
Standard LuaLua 5.4Lua 5.4 (cerulean manifest)
FrameworkStandalone / ESX Legacy 1.10+ / QBCoreDowolny (automatyczna detekcja)
Połączenie HTTPcURL wbudowany w FXServerWłączony HTTPS

Instalacja LinkUp_Panel

Instrukcja krok po kroku instalacji zasobu na serwerze FiveM.

Krok 1: Pobranie lub skopiowanie folderu

Skopiuj folder LinkUp_Panel do katalogu zasobów Twojego serwera FiveM:

/resources/[linkup]/LinkUp_Panel

Krok 2: Dodanie do server.cfg

Otwórz plik server.cfg i upewnij się, że zasób uruchamia się po Twoim głównym frameworku (np. po es_extended lub qb-core):

# Uruchomienie frameworku
ensure es_extended

# Uruchomienie LinkUp Panel
ensure LinkUp_Panel

Krok 3: Nadanie uprawnień ACE w server.cfg

Aby zasób mógł restartować inne skrypty i nadawać permisje graczom, nadaj uprawnienia zasobowi:

add_ace resource.LinkUp_Panel command allow
add_ace resource.LinkUp_Panel command.restart allow
add_ace resource.LinkUp_Panel command.start allow
add_ace resource.LinkUp_Panel command.stop allow

Konfiguracja config.lua

Szczegółowy opis wszystkich opcji konfiguracyjnych w pliku config.lua.

Config = {}

-- Adres URL Twojego backendu LinkUp (używaj domeny HTTPS zamiast surowego IP)
Config.ApiUrl = "https://link-up.lol"

-- Tajny token autoryzacyjny Twojego serwera FiveM (generowany w panelu LinkUp)
Config.ServerToken = "linkup_fivem_sec_abc123xyz"

-- Częstotliwość odświeżania telemetrii graczy (w milisekundach)
Config.TelemetryInterval = 1500

-- Mapowanie ról z LinkUp na permisje FiveM
Config.RoleMapping = {
    ["Zarząd"] = { aceGroup = "group.admin", esxGroup = "admin", qbPermission = "admin" },
    ["Support"] = { aceGroup = "group.mod", esxGroup = "mod", qbPermission = "mod" },
    ["VIP"] = { aceGroup = "group.vip", esxGroup = "user", qbPermission = "user" }
}

-- Klawisz otwierania dashboardu NUI w grze
Config.MenuKey = "F10"

Synchronizacja Ról & Uprawnień

Automatyczne nadawanie uprawnień administratora na podstawie ról w LinkUp.

Jak to działa: Gdy gracz loguje się na serwer, LinkUp_Panel wysyła zapytanie do API LinkUp, sprawdzając identyfikator Discorda lub Steam gracza. Jeśli użytkownik posiada rolę np. "Zarząd", w FiveM natychmiast otrzymuje grupę admin.

Wspierane Frameworki

  • Natywne ACE (Standalone): Wywołanie ExecuteCommand(('add_principal identifier.%s %s'):format(license, aceGroup))
  • ESX Legacy: Automatyczna aktualizacja obiektu xPlayer.setGroup(esxGroup)
  • QBCore: Przypisanie QBCore.Functions.AddPermission(source, qbPermission)

Telemetria 3D & Radar na Żywo

Śledzenie lokalizacji, prędkości pojazdów i stanu zdrowia graczy na żywo.

Struktura Payloadu Telemetrii

{
  "serverToken": "linkup_fivem_sec_abc123xyz",
  "playersCount": 32,
  "telemetry": [
    {
      "source": 1,
      "name": "Jan_Kowalski",
      "coords": { "x": 215.3, "y": -810.4, "z": 30.5 },
      "heading": 182.4,
      "health": 200,
      "armor": 100,
      "inVehicle": true,
      "vehicleSpeed": 85.4
    }
  ]
}

Zarządzanie Zasobami & HTTP Bridge

Zdalne sterowanie stanem skryptów (Start, Stop, Restart) z poziomu panelu LinkUp.

Zdalny Restart Skryptu przez API

POST /LinkUp_Panel/resources/control
Headers:
  Authorization: Bearer linkup_fivem_sec_abc123xyz
  Content-Type: application/json

Payload:
{
  "resource": "es_extended",
  "action": "restart"
}

Bezpieczeństwo & Bearer Tokens

Jak chronione jest połączenie między LinkUp a FiveM.

Poufność Tokenu: Nigdy nie publikuj swojego Config.ServerToken na publicznych repozytoriach. Każde zapytanie HTTP bez poprawnego nagłówka Bearer jest natychmiast odrzucane z kodem 401 Unauthorized.

Lua Exports & Przykłady

Eksporty Lua do wykorzystania we własnych skryptach FiveM.

Wysłanie logu akcji do LinkUp

-- Wywołanie z dowolnego skryptu serwerowego
exports['LinkUp_Panel']:SendLinkUpLog({
    action = "GRACZ_UKARANY",
    admin = "Janusz",
    target = "Piotr",
    reason = "VDM na zielonej strefie"
})

Pobranie ról gracza z LinkUp

local roles = exports['LinkUp_Panel']:GetPlayerLinkUpRoles(source)
if roles["Zarząd"] then
    print("Gracz posiada rangę Zarządu w LinkUp!")
end