1
local user, slots, fromLabel, toLabel = ...
2
local sn = require("api")
3
4
if not (user or slots) then
5
local out = {
6
{colors.lightGray, "Quickly send items from one Shironeko box to another. Requires having at least 1 box. See ", colors.white, "\\sn", colors.lightGray, " for more info.", colors.white, " Usage:"},
7
{colors.lightGray, "send", colors.yellow, " <username> <slots...|\"all\">", colors.lime, " [fromSlot=\"main\"] [toSlot=\"main\"]"},
8
{colors.lightGray, "Examples:"},
9
{colors.lightGray, "send", colors.yellow, " hugeblank all", colors.lightGray, " - Sends all contents of your ", colors.lightBlue, "\"main\"", colors.lightGray, " box to hugeblank's ", colors.lightBlue, "\"main\"", colors.lightGray, " box."},
10
{colors.lightGray, "send", colors.yellow, " hypergenome", colors.yellow, " 1,2,3", colors.lime, " stone", colors.lightGray, " - Sends slots 1, 2, and 3 of your ", colors.lightBlue, "\"stone\"", colors.lightGray, " box to hypergenome's ", colors.lightBlue, "\"main\"", colors.lightGray, " box."},
11
{colors.lightGray, "send", colors.yellow, " ssh2", colors.yellow, " 1", colors.lime, " leather books", colors.lightGray, " - Sends slot 1 of your ", colors.lightBlue, "\"leather\"", colors.lightGray, " box to ssh2's ", colors.lightBlue, "\"books\"", colors.lightGray, " box."},
12
{colors.lightGray, "send", colors.yellow, " gplv3", colors.yellow, " 1=5,5=10,11=32", colors.lightGray, " - Sends 5 items from slot 1, 10 items from slot 5, and 32 items from slot 11 of your ", colors.lightBlue, "\"main\"", colors.lightGray, " box to gplv3's ", colors.lightBlue, "\"main\"", colors.lightGray, " box."},
13
{colors.lightGray, "Note that all labels besides ", colors.lightBlue, "\"main\"", colors.lightGray, " are hypothetical for the sake of demonstration."}
14
}
15
for i = 1, #out do
16
local row = out[i]
17
for i = 1, #row, 2 do
18
term.setTextColor(row[i])
19
write(row[i+1])
20
end
21
print()
22
end
23
return
24
end
25
26
fromLabel, toLabel = fromLabel or "main", toLabel or "main"
27
28
if slots == "all" then
29
slots = {}
30
for i = 1, 27 do
31
slots[i] = 64
32
end
33
else
34
local tslots = {}
35
local _, suc = slots:gsub("(%d+)=?(%d*),?", function(k, v)
36
local num = tonumber(k)
37
if not num then
38
printError("Cannot convert "..str.." to a slot number.")
39
return
40
end
41
tslots[num] = v and tonumber(v) or 64
42
end)
43
if suc == 0 then
44
printError("Cannot parse slot listing '"..slots.."'.")
45
end
46
slots = tslots
47
end
48
49
local modem = settings.get("shironeko.send.modem")
50
settings.define("shironeko.send.modem", {
51
description = "Name of the modem that the send CLI scripts use. If unset, scripts will automatically find a suitable wireless modem.",
52
type = "string"
53
})
54
55
56
if modem then
57
if not peripheral.isPresent(modem) then
58
printError("Modem "..modem.." from 'shironeko.send.modem' does not exist. Please set a valid modem or unset the setting.")
59
return
60
end
61
else
62
for _, m in ipairs(table.pack(peripheral.find("modem"))) do
63
if m.isWireless() then
64
modem = peripheral.getName(m)
65
break
66
end
67
end
68
if not (modem and peripheral.isPresent(modem)) then
69
printError("Suitable modem not found! Either place a wireless modem, or set a modem using 'shironeko.send.modem'.")
70
return
71
end
72
end
73
74
local errmap = {
75
no_such_label_sender = "No such sender label \""..(fromLabel or "main").."\".",
76
no_outbound_storage = "Label \""..(fromLabel or "main").."\" lacks a tagged outbound storage.",
77
no_such_label_recipient = "No such recipient label \""..(toLabel or "main").."\".",
78
no_inbound_storage = "Label \""..(toLabel or "main").."\" lacks a tagged inbound storage.",
79
no_such_user = "User "..user.." is not a registered Shironeko user.",
80
blocked = "You have been blocked from sending to this recipient and label.",
81
recipient_full = "Recipient box is full and cannot accept any more items.",
82
same_storage = "Cannot send to the same storage.",
83
version = "Please update shironeko! Use the same command you used to install the programs (found with \\sn me).",
84
timeout = "No response from Shironeko."
85
}
86
87
local api = sn.init(modem)
88
local ok, res = api.send(user, slots, fromLabel, toLabel)
89
if not ok then
90
printError(errmap[res] or "Unknown error "..res)
91
else
92
local total = 0
93
for _, item in ipairs(res.items) do
94
total = total+item.count
95
end
96
print("Sent "..total.." items to "..user.."'s "..(fromLabel or "main").." label from your "..(toLabel or "main").." label.")
97
end
98
api.close()