Today I made a bot with VirtualUser to test a sword lunge and it was super useful. I think VirtualUser could be really cool if it were made more usable. I suggest that all of its methods be changed to PluginSecurity (except Start/StopRecording) and a few new methods be added
InputObject VirtualUser:FireInput(UserInputType, UserInputState, KeyCode, Vector3 Position, Vector3 Delta)
This would fire the InputBegan/Changed/Ended events in UserInputService and gui objects.
InputObject VirtualUser:SetDeviceRotation(CFrame Rotation)
InputObject VirtualUser:SetDeviceGravity(Vector3 Gravity)
InputObject VirtualUser:SetDeviceAcceleration(Vector3 Acceleration)
VirtualUser:ConnectGamepad(UserInputType Gamepad)
VirtualUser:DisconnectGamepad(UserInputType Gamepad)
These would fire the related events in UserInputService