I use a custom playerbot patch, "my" patch uses "autobot" mode, in fact bots can be present in game without to be grouped.
You start the server and few bots join the game, see playerbot.conf for details
They are in capitals, "talk" to pnj, take coffee or something else...
You can invite them by using /invite commande from wow
Or invoke a special specilization by using .botinvite XX, XX is the spe id, you can find it in my shareddefines.h or in dbc (just for information)
Other great news is the battleground and arena support, you can create your bg group and attempt to join a bg, after X seconds (see playerbot.conf)
Auto join bg is proposed, other side team will be hot created using bots in game
The bad news is that this system is hardcoded, "my" playerbot code is not optimized, cleaned... Blueboy work is really better than me !
You can take my ideas, but it need more research.
==> BattlegroundMgr.cpp (view other BG kernel files, not specifics)
https://github.com/yad/easy-mangos
PS : "my" branch is a mixed branch using : mangos, mmaps, some rsa patch, custom playerbot
mangos is modified to use mmaps in player movement system.
Have fun... if you have some questions : please do