Normally I would just set the CFrame in a while loop.
while wait() do
local direction = (plr.Character.Torso.Position - bot.Torso.Position) * Vector3.new(1, 0, 1)
bot.Torso.CFrame = CFrame.new(bot.Torso.Position, bot.Torso.Position + direction)
end
But I want to decrease lag, so I started trying to use a body gyro.
local gyro = Instance.new("BodyGyro",bot.Torso)
gyro.D = 0
gyro.P = 9999
gyro.cframe = plr.Character.Torso.CFrame
Unfortunately it doesn't work at all -- the bot doesn't rotate. AutoRotate is disabled. Nothing is erroring in the output.
All variables are defined.

4 comments
A math.abs ALMOST run's like a BodyGyro's cframe.. I would go to the wiki can look up math.abs
math.abs is just the absolute value. How will that help me?
math.abs has the same value's as a BodyGyro CFrame.
math.abs(x) just returns the absolute value of x. Please explain how this can help me and how I can use it.