slabOS/eCash.lua
2025-06-06 04:39:13 +00:00

260 lines
6.8 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local basalt = require("/lib/basalt")
local libcredit = require("/lib/libcredit_mobile")
local username = ""
local main = basalt.getMainFrame()
function show_notification(status)
local notifFrame = main:addFrame()
:setSize(26,4)
:setBackground(colours.grey)
notifFrame:addButton()
:setText("Dismiss")
:setSize(26,1)
:setPosition(1,4)
:onClick(function()
notifFrame:destroy()
end)
local label = notifFrame:addLabel()
if status then
label:setText("Transaction successful")
:setPosition(4,2)
:setBackground(colours.lime)
:setForeground(colours.black)
notifFrame:setBackground(colours.lime)
else
label:setText("Transaction unsuccessful")
:setPosition(3,2)
:setBackground(colours.red)
:setForeground(colours.white)
notifFrame:setBackground(colours.red)
end
end
local appFrame = main:addFrame()
:setVisible(false)
:setSize(26,19)
:setBackground(colours.white)
local requestFrame = main:addFrame()
:setVisible(false)
:setSize(26,19)
:setBackground(colours.white)
requestFrame:addLabel()
:setText("Username: ")
:setPosition(2, 6)
:setSize(10, 1)
:setForeground(colours.black)
local request_user_input = requestFrame:addInput()
:setPosition(12, 6)
:setSize(12, 1)
:setBackground(colours.lightGrey)
:setForeground(colours.black)
:setText("")
requestFrame:addLabel()
:setText("Amount:   ")
:setPosition(2, 8)
:setSize(10, 1)
:setForeground(colours.black)
local request_amount_input = requestFrame:addInput()
:setPosition(12, 8)
:setSize(12, 1)
:setBackground(colours.lightGrey)
:setForeground(colours.black)
:setText("")
requestFrame:addButton()
:setText("Request")
:setPosition(7, 15)
:setSize(12, 3)
:setBackground(colours.blue)
:setForeground(colours.white)
:onClick(function(request_btn)
request_btn:setBackground(colours.black)
request_btn:setText("Pending")
local target_usr = request_user_input:getText()
local target_amount = request_amount_input:getText()
target_amount = tonumber(target_amount:match("^%d+$"))
if not target_amount or target_amount <= 0 then
show_notification(false)
request_btn:setBackground(colours.blue)
request_btn:setText("Request")
return
end
libcredit.addTransaction(target_usr, target_amount, username .. " [ecash]", username, function(successful)
request_btn:setBackground(colours.blue)
request_btn:setText("Request")
show_notification(successful)
refresh_ui()
appFrame:setVisible(true)
requestFrame:setVisible(false)
if successful then
request_amount_input:setText("")
request_user_input:setText("")
end
end)
end)
local sendFrame = main:addFrame()
:setVisible(false)
:setSize(26,19)
:setBackground(colours.white)
sendFrame:addLabel()
:setText("Recipient: ")
:setPosition(2, 6)
:setSize(10, 1)
:setForeground(colours.black)
local send_user_input = sendFrame:addInput()
:setPosition(12, 6)
:setSize(12, 1)
:setBackground(colours.lightGrey)
:setForeground(colours.black)
:setText("")
sendFrame:addLabel()
:setText("Amount:   ")
:setPosition(2, 8)
:setSize(10, 1)
:setForeground(colours.black)
local send_amount_input = sendFrame:addInput()
:setPosition(12, 8)
:setSize(12, 1)
:setBackground(colours.lightGrey)
:setForeground(colours.black)
:setText("")
sendFrame:addButton()
:setText("Send")
:setPosition(7, 15)
:setSize(12, 3)
:setBackground(colours.blue)
:setForeground(colours.white)
:onClick(function(send_btn)
send_btn:setBackground(colours.black)
send_btn:setText("Pending")
local target_usr = send_user_input:getText()
local target_amount = send_amount_input:getText()
target_amount = tonumber(target_amount:match("^%d+$"))
if not target_amount or target_amount <= 0 then
show_notification(false)
send_btn:setBackground(colours.blue)
send_btn:setText("Send")
return
end
libcredit.addTransaction(username, target_amount, target_usr .. " [ecash]", target_usr, function(successful)
send_btn:setBackground(colours.blue)
send_btn:setText("Send")
show_notification(successful)
refresh_ui()
appFrame:setVisible(true)
sendFrame:setVisible(false)
if successful then
send_amount_input:setText("")
send_user_input:setText("")
end
end)
end)
local cash_label = appFrame:addBigFont()
:setText("__G")
:setPosition(6,2)
:setBackground(colours.white)
:setForeground(colours.black)
local request_cash = appFrame:addButton()
:setText("Request")
:setPosition(8,10)
:setSize(10, 3)
:setBackground(colours.green)
:setForeground(colours.white)
:onClick(function()
requestFrame:setVisible(true)
appFrame:setVisible(false)
end)
local send_cash = appFrame:addButton()
:setText("Send")
:setPosition(8,15)
:setSize(10, 3)
:setBackground(colours.orange)
:setForeground(colours.white)
:onClick(function()
sendFrame:setVisible(true)
appFrame:setVisible(false)
end)
function refresh_ui()
libcredit.getCredit(username, function(amount)
local amount_str = amount .. "G"
cash_label:setText(amount_str)
if #amount_str < 6 then
cash_label:setPosition(6 - (#amount_str / 4) - 1,2)
else
cash_label:setSize(26,4)
cash_label:setPosition(1,2)
end
end)
end
local login = main:addFrame()
:setBackground(colours.grey)
:setPosition(1,1)
:setSize(26,19)
login:addLabel()
:setText("Username: ")
:setPosition(2, 3)
:setSize(10, 1)
:setForeground(colours.white)
local usernameInput = login:addInput()
:setPosition(12, 3)
:setSize(12, 1)
:setBackground(colours.lightGrey)
:setForeground(colours.black)
:setText("")
local loginButton = login:addButton()
:setText("Login")
:setPosition(9, 15)
:setSize(8, 3)
:setBackground(colours.blue)
:setForeground(colours.white)
:onClick(function()
username = usernameInput:getText()
login:setVisible(false)
appFrame:setVisible(true)
refresh_ui()
end)
if fs.exists("/config.json") then
local file = fs.open("/config.json","r")
local file_content = file.readAll()
local username = textutils.unserialiseJSON(file_content).username
file.close()
usernameInput:setText(username)
end
basalt.run()