Added peripheral list
This commit is contained in:
		@@ -57,6 +57,16 @@ local function runRsCommand(params)
 | 
			
		||||
	return textutils.serializeJSON(retvals)
 | 
			
		||||
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
 | 
			
		||||
-- return string result
 | 
			
		||||
local function getResponse(parsed)
 | 
			
		||||
@@ -76,6 +86,8 @@ local function getResponse(parsed)
 | 
			
		||||
		return textutils.serializeJSON(item)
 | 
			
		||||
	elseif parsed.method == "command" then
 | 
			
		||||
		return runRsCommand(parsed.params)
 | 
			
		||||
	elseif parsed.method == "peripherals" then
 | 
			
		||||
		return textutils.serializeJSON(getPeripheralList())
 | 
			
		||||
	elseif parsed.method == "getonline" then
 | 
			
		||||
		return textutils.serializeJSON(getPeripheral("playerDetector").getOnlinePlayers())
 | 
			
		||||
	elseif parsed.method == "whereis" then
 | 
			
		||||
@@ -160,10 +172,6 @@ local function chatEventListener(socket)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function getPeripheralInfo(side)
 | 
			
		||||
	return {type = peripheral.getType(side), methods = peripheral.getMethods(side), side = side}
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function peripheralDetachEventListener(socket)
 | 
			
		||||
	while true do
 | 
			
		||||
		event, side = os.pullEvent("peripheral_detach")
 | 
			
		||||
 
 | 
			
		||||
@@ -60,6 +60,8 @@ public class Program : IDisposable, ICommandHandler<ResponseType>, IUserRoleMana
 | 
			
		||||
        _computer = new(this);
 | 
			
		||||
        _computer.ChatMessageReceived += MinecraftMessageReceived;
 | 
			
		||||
        _computer.SocketChanged += ComputerConnectedChanged;
 | 
			
		||||
        _computer.PeripheralAttached += PeripheralAttached;
 | 
			
		||||
        _computer.PeripheralDetached += PeripheralDetached;
 | 
			
		||||
        _administrators = config.Administrators.ToHashSet();
 | 
			
		||||
        ClientScript = GetClientScript(config);
 | 
			
		||||
        _client.Log += LogAsync;
 | 
			
		||||
@@ -72,6 +74,8 @@ public class Program : IDisposable, ICommandHandler<ResponseType>, IUserRoleMana
 | 
			
		||||
        _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)
 | 
			
		||||
        => _ = Task.Run(() => Broadcast(i => i.SendMessageAsync(e is not null
 | 
			
		||||
       ? "The Minecraft client is now available!"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ using Fleck;
 | 
			
		||||
using MinecraftDiscordBot.Commands;
 | 
			
		||||
using MinecraftDiscordBot.Models;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
 | 
			
		||||
namespace MinecraftDiscordBot.Services;
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +19,7 @@ public class RootCommandService : CommandRouter, ITaskWaitSource {
 | 
			
		||||
        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);
 | 
			
		||||
        await taskSource.Send(new RequestMessage(waiter.ID, methodName, parameters));
 | 
			
		||||
        return await waiter.Task;
 | 
			
		||||
@@ -97,9 +98,13 @@ public class RootCommandService : CommandRouter, ITaskWaitSource {
 | 
			
		||||
        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.")]
 | 
			
		||||
    public Task<ResponseType> RefinedStorageHandler(SocketUserMessage message, string[] parameters, CancellationToken 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.")]
 | 
			
		||||
    public Task<ResponseType> PlayerDetectorHandler(SocketUserMessage message, string[] parameters, CancellationToken ct)
 | 
			
		||||
        => Players.HandleCommand(message, parameters, ct);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user