This repository has been archived on 2025-02-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cctweaked_banking/api.lua
2025-01-29 19:39:35 +01:00

295 lines
9.3 KiB
Lua

-- Siehe http://befator.befatorinc.de:8932/index.php/Steamcoin_API_Documentation für weitere Informationen
local API = {}
-- Erstellt eine Websocket Verbindung und speichert sie in API.ws für weitere Benutzung
-- url: Volle URL des Servers z.B. "ws://befator.befatorinc.de:5000/banking"
API.createWebsocket = function(url)
API.ws = http.websocket(url)
end
-- Gibt den aktuell in API.ws gespeicherten Websocket zurück
API.getWebsocket = function()
return API.ws
end
-- Gibt die aktuell in API.username und API.password gespeicherten Credentials im format username, password zurück
API.getCredentials = function()
return API.username, API.password
end
-- Sendet eine Nachricht an den Server
-- Message: Table das zu JSON serialisiert wird
API.sendMessage = function(message)
API.sendMessageRaw(API.ws, message)
end
API.sendMessageRaw = function(ws, message)
local jsonMessage = textutils.serialiseJSON(message)
ws.send(jsonMessage)
end
-- Wartet auf eine Nachricht vom Server
-- Timeout: Zeit die auf eine Nachricht geantwortet wird
-- Return: success (boolean), message (Table mit dem Inhalt der Message z.B. message.value1)
-- Wichtig: Die message.id muss überprüft werden
API.getMessage = function(timeout)
return API.getMessageRaw(API.ws, timeout)
end
API.getMessageRaw = function(ws, timeout)
local message = ws.receive(timeout)
if not message then
return false
end
return API.decodeMessage(message)
end
-- Decoded eine Nachricht vom Server indem erst das JSON entserialisiert wird und dann in ein Table gespeichert wird
-- Return: success (boolean), message (Table mit dem Inhalt der Message z.B. message.value1)
API.decodeMessage = function(message)
local success, decoded = pcall(textutils.unserialiseJSON, message)
if success then
local messageObj = setmetatable(decoded, {
__index = function(t, k)
return rawget(t, k)
end
})
return success, messageObj
end
return success
end
-- Setzt die standart Credentials für die Authentifizierung in API.username und API.password
API.setCredentials = function(username, password)
API.username = username
API.password = password
end
-- Wird benutzt um Benutzer mit dem server zu Authentifizieren (Credentials müssen vorher mit setCredentials gesetzt werden)
-- Response: "displayMessage" mit "auth.success" (Erfolg) oder "auth.fail" (Kein Erfolg) in value2
API.login = function()
API.loginRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.loginRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "authenticate",
["value1"] = username,
["value2"] = password,
["id"] = id
})
end
-- Wird benutzt um einen Benutzer account anzulegen (Credentials müssen vorher mit setCredentials gesetzt werden)
-- Response: Sendet "displayMessage" mit "register.success" (Erfolg) oder "register.fail.usernameTaken" (Kein Erfolg weil Benutzername besetzt) in value2
API.register = function()
API.registerRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.registerRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "register",
["value1"] = username,
["value2"] = password,
["id"] = id
})
end
-- Wird benutzt um den Benutzer auszuloggen
-- Response: Keine
API.logout = function()
API.logoutRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.logoutRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "logout",
["value1"] = username,
["value2"] = password,
["id"] = id
})
end
-- Wird benutzt um Währung (STEAMCOIN) an einen anderen, bereits existierenden account zu überweisen.
-- Response: Sendet "displayMessage" mit einer der unteren IDs in value2
--[[
pay.success: Zahlung Erfolgreich
pay.fail.negative_amount: Zahlung fehlgeschlagen, überweisungsmenge Negativ (Illegal)
pay.fail.orig_user_unknown: Zahlung fehlgeschlagen, ursprungsbenutzer unbekannt
pay.fail.unknown_dest: Zahlung fehlgeschlagen, Ziel der Zahlung inexistent
pay.fail.credentials: Zahlung fehlgeschlagen, Zahlung konnte nicht Authentifiziert werden
pay.fail.not_enough_money: Zahlung fehlgeschlagen, Benutzer hat nicht genügend geld (Pleite)
pay.fail.unknown_error: Unbekannter fehler aufgetreten, bitte Administration kontaktieren!
pay.received: Wird empfangen vom Ziel benutzer wenn die Zahlung erfolgreich war
]]--
API.pay = function(destination, amount)
API.payRaw(API.ws, os.getComputerID(), API.username, API.password, destination, amount)
end
API.payRaw = function(ws, id, username, password, destination, amount)
API.sendMessageRaw(ws, {
["action"] = "pay",
["value1"] = username,
["value2"] = password,
["value3"] = destination,
["value4"] = amount,
["id"] = id
})
end
-- Wird benutzt, um die anzahl an Nachichten in der Inbox abzufragen
-- Response: Sendet "displayMessage" mit value2: "message_count", value3: count (Int) zurück wobei count die Anzahl der Nachrichten ist
API.sendGetInboxPointer = function()
API.sendGetInboxPointerRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.sendGetInboxPointerRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "get_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = "cnt",
["id"] = id
})
end
-- Wird benutzt um eine Nachicht aus der Inbox zu bekommen
-- Response: Sendet "inbox" mit value1: <INTEGER, messageId>; value2: <STRING, Message> zurück
API.sendGetInboxMessage = function(messageId)
API.sendGetInboxMessageRaw(API.ws, os.getComputerID(), API.username, API.password, messageId)
end
API.sendGetInboxMessageRaw = function(ws, id, username, password, messageId)
API.sendMessageRaw(ws, {
["action"] = "get_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = messageId,
["id"] = id
})
end
-- Wird benutzt um eine nachicht in der Inbox als gelesen zu markieren und so zu Löschen
-- Response: Keine
API.markRead = function(messageId)
API.markReadRaw(API.ws, os.getComputerID(), API.username, API.password, messageId)
end
API.markReadRaw = function(ws, id, username, password, messageId)
API.sendMessageRaw(ws, {
["action"] = "read_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = messageId,
["id"] = id
})
end
---PRIVATE MESSAGES START
API.sendGetPmInboxPointer = function()
API.sendGetPmInboxPointerRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.sendGetPmInboxPointerRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "get_pm_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = "cnt",
["id"] = id
})
end
-- Wird benutzt um eine Nachicht aus der Inbox zu bekommen
-- Response: Sendet "inbox" mit value1: <INTEGER, messageId>; value2: <STRING, Message> zurück
API.sendGetPmInboxMessage = function(messageId)
API.sendGetPmInboxMessageRaw(API.ws, os.getComputerID(), API.username, API.password, messageId)
end
API.sendGetPmInboxMessageRaw = function(ws, id, username, password, messageId)
API.sendMessageRaw(ws, {
["action"] = "get_pm_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = messageId,
["id"] = id
})
end
-- Wird benutzt um eine nachicht in der Inbox als gelesen zu markieren und so zu Löschen
-- Response: Keine
API.markPmRead = function(messageId)
API.markPmReadRaw(API.ws, os.getComputerID(), API.username, API.password, messageId)
end
API.markPmReadRaw = function(ws, id, username, password, messageId)
API.sendMessageRaw(ws, {
["action"] = "read_pm_inbox",
["value1"] = username,
["value2"] = password,
["value3"] = messageId,
["id"] = id
})
end
API.sendPmMessage = function(destination, message)
API.sendPmMessageRaw(API.ws, os.getComputerID(), API.username, API.password, destination, message)
end
API.sendPmMessageRaw = function(ws, id, username, password, destination, message)
API.sendMessageRaw(ws, {
["action"] = "send_pm",
["value1"] = username,
["value2"] = password,
["value3"] = destination,
["value4"] = message,
["id"] = id
})
end
---PRIVATE MESSAGES END
-- Wird benutzt um den Aktuellen kontostand des Benutzers herauszufinden,
-- Response: Sendet "displayMessage" mit value1: <STRING, "You currently have {balance} Steam Coins in your Account!">, value2: "balance.sucess" oder "balance.fail.credentials" und value3: <INTEGER, balance> zurück
API.sendGetBalance = function()
API.sendGetBalanceRaw(API.ws, os.getComputerID(), API.username, API.password)
end
API.sendGetBalanceRaw = function(ws, id, username, password)
API.sendMessageRaw(ws, {
["action"] = "get_balance",
["value1"] = username,
["value2"] = password,
["id"] = id
})
end
API.sendGetMOTD = function()
API.sendGetMOTDRaw(API.ws)
end
-- Wird benutzt um die Aktuelle MOTD anzufragen
-- Response: Sendet "motd" mit value1: <STRING, motd> zurück
API.sendGetMOTDRaw = function(ws)
API.sendMessageRaw(ws, {
["action"] = "motd"
})
end
return API