In college (1997), my friend and I wrote a client-side bot for Quake 1 that ran on DOS using IPX and then later on Windows using TCP/IP.
Back then, bots (and particularly client-side bots) were a fairly new idea, and it required a bit of reverse engineering network packets and game data.
To achieve more complicated navigation, I wrote a replay analyser which would analyse replays of humans navigating a map, and then the bot would be able to emulate the human's movements to navigate in complicated ways.