Added peripheral list
This commit is contained in:
parent
a6ee52f70e
commit
82c8313cb9
@ -57,6 +57,16 @@ local function runRsCommand(params)
|
|||||||
return textutils.serializeJSON(retvals)
|
return textutils.serializeJSON(retvals)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function getPeripheralInfo(side)
|
||||||
|
return {type = peripheral.getType(side), methods = peripheral.getMethods(side), side = side}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getPeripheralList()
|
||||||
|
local pers = {}
|
||||||
|
for i,side in pairs(peripheral.getNames()) do pers[side] = getPeripheralInfo(side) end
|
||||||
|
return pers
|
||||||
|
end
|
||||||
|
|
||||||
-- error: any error during execution
|
-- error: any error during execution
|
||||||
-- return string result
|
-- return string result
|
||||||
local function getResponse(parsed)
|
local function getResponse(parsed)
|
||||||
@ -76,6 +86,8 @@ local function getResponse(parsed)
|
|||||||
return textutils.serializeJSON(item)
|
return textutils.serializeJSON(item)
|
||||||
elseif parsed.method == "command" then
|
elseif parsed.method == "command" then
|
||||||
return runRsCommand(parsed.params)
|
return runRsCommand(parsed.params)
|
||||||
|
elseif parsed.method == "peripherals" then
|
||||||
|
return textutils.serializeJSON(getPeripheralList())
|
||||||
elseif parsed.method == "getonline" then
|
elseif parsed.method == "getonline" then
|
||||||
return textutils.serializeJSON(getPeripheral("playerDetector").getOnlinePlayers())
|
return textutils.serializeJSON(getPeripheral("playerDetector").getOnlinePlayers())
|
||||||
elseif parsed.method == "whereis" then
|
elseif parsed.method == "whereis" then
|
||||||
@ -160,10 +172,6 @@ local function chatEventListener(socket)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function getPeripheralInfo(side)
|
|
||||||
return {type = peripheral.getType(side), methods = peripheral.getMethods(side), side = side}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function peripheralDetachEventListener(socket)
|
local function peripheralDetachEventListener(socket)
|
||||||
while true do
|
while true do
|
||||||
event, side = os.pullEvent("peripheral_detach")
|
event, side = os.pullEvent("peripheral_detach")
|
||||||
|
@ -60,6 +60,8 @@ public class Program : IDisposable, ICommandHandler<ResponseType>, IUserRoleMana
|
|||||||
_computer = new(this);
|
_computer = new(this);
|
||||||
_computer.ChatMessageReceived += MinecraftMessageReceived;
|
_computer.ChatMessageReceived += MinecraftMessageReceived;
|
||||||
_computer.SocketChanged += ComputerConnectedChanged;
|
_computer.SocketChanged += ComputerConnectedChanged;
|
||||||
|
_computer.PeripheralAttached += PeripheralAttached;
|
||||||
|
_computer.PeripheralDetached += PeripheralDetached;
|
||||||
_administrators = config.Administrators.ToHashSet();
|
_administrators = config.Administrators.ToHashSet();
|
||||||
ClientScript = GetClientScript(config);
|
ClientScript = GetClientScript(config);
|
||||||
_client.Log += LogAsync;
|
_client.Log += LogAsync;
|
||||||
@ -72,6 +74,8 @@ public class Program : IDisposable, ICommandHandler<ResponseType>, IUserRoleMana
|
|||||||
_whitelistedChannels = config.Channels.ToHashSet();
|
_whitelistedChannels = config.Channels.ToHashSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PeripheralAttached(object? sender, PeripheralAttachEvent e) => LogInfo("Computer", $"Peripheral {e.Peripheral.Type} was attached on side {e.Side}.");
|
||||||
|
private void PeripheralDetached(object? sender, PeripheralDetachEvent e) => LogInfo("Computer", $"Peripheral on side {e.Side} was detached.");
|
||||||
private void ComputerConnectedChanged(object? sender, IWebSocketConnection? e)
|
private void ComputerConnectedChanged(object? sender, IWebSocketConnection? e)
|
||||||
=> _ = Task.Run(() => Broadcast(i => i.SendMessageAsync(e is not null
|
=> _ = Task.Run(() => Broadcast(i => i.SendMessageAsync(e is not null
|
||||||
? "The Minecraft client is now available!"
|
? "The Minecraft client is now available!"
|
||||||
|
@ -3,6 +3,7 @@ using Fleck;
|
|||||||
using MinecraftDiscordBot.Commands;
|
using MinecraftDiscordBot.Commands;
|
||||||
using MinecraftDiscordBot.Models;
|
using MinecraftDiscordBot.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace MinecraftDiscordBot.Services;
|
namespace MinecraftDiscordBot.Services;
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ public class RootCommandService : CommandRouter, ITaskWaitSource {
|
|||||||
Chat = new ChatBoxService(this);
|
Chat = new ChatBoxService(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<T> Method<T>(ITaskWaitSource taskSource, string methodName, Func<string, T> parser, CancellationToken ct, Dictionary<string, object>? parameters) {
|
public static async Task<T> Method<T>(ITaskWaitSource taskSource, string methodName, Func<string, T> parser, CancellationToken ct, Dictionary<string, object>? parameters = null) {
|
||||||
var waiter = taskSource.GetWaiter(parser, ct);
|
var waiter = taskSource.GetWaiter(parser, ct);
|
||||||
await taskSource.Send(new RequestMessage(waiter.ID, methodName, parameters));
|
await taskSource.Send(new RequestMessage(waiter.ID, methodName, parameters));
|
||||||
return await waiter.Task;
|
return await waiter.Task;
|
||||||
@ -97,9 +98,13 @@ public class RootCommandService : CommandRouter, ITaskWaitSource {
|
|||||||
return waiter;
|
return waiter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<Dictionary<string, Peripheral>> GetPeripherals(CancellationToken ct) => Method(this, "peripherals", Deserialize<Dictionary<string, Peripheral>>(), ct);
|
||||||
[CommandHandler("rs", HelpText = "Provides some commands for interacting with the Refined Storage system.")]
|
[CommandHandler("rs", HelpText = "Provides some commands for interacting with the Refined Storage system.")]
|
||||||
public Task<ResponseType> RefinedStorageHandler(SocketUserMessage message, string[] parameters, CancellationToken ct)
|
public Task<ResponseType> RefinedStorageHandler(SocketUserMessage message, string[] parameters, CancellationToken ct)
|
||||||
=> RefinedStorage.HandleCommand(message, parameters, ct);
|
=> RefinedStorage.HandleCommand(message, parameters, ct);
|
||||||
|
[CommandHandler("peripherals", HelpText = "Gets a list of peripherals that are attached.")]
|
||||||
|
public async Task<ResponseType> HandleGetPeripherals(SocketUserMessage message, string[] parameters, CancellationToken ct)
|
||||||
|
=> ResponseType.AsString(string.Join("\n", (await GetPeripherals(ct)).Values.Select(i => $"On side {i.Side}: {i.Type}")));
|
||||||
[CommandHandler("pd", HelpText = "Provides some commands for interacting with the Player Detector.")]
|
[CommandHandler("pd", HelpText = "Provides some commands for interacting with the Player Detector.")]
|
||||||
public Task<ResponseType> PlayerDetectorHandler(SocketUserMessage message, string[] parameters, CancellationToken ct)
|
public Task<ResponseType> PlayerDetectorHandler(SocketUserMessage message, string[] parameters, CancellationToken ct)
|
||||||
=> Players.HandleCommand(message, parameters, ct);
|
=> Players.HandleCommand(message, parameters, ct);
|
||||||
|
Loading…
Reference in New Issue
Block a user