The large bots spread channels over multiple connections. It’s not one channel per connection, it’s more along the lines of 20-50 channels per connection.
A single channel per connection is not viable for huge bots. Each outgoing connection takes up a port and it’s a huge waste of resources, since the vast majority of the channels will be dead silent as well.
Everything on a single connection is bad, because if the connection drops, you need to join all those thousands, even tens of thousands of channels again, and that will take hours, possibly over a day.
So what you’re left with is a hybrid. You don’t spend a huge amount of resources and, if a connection drops, you’re not spending an eternity getting back up again. The downside? The code gets complicated.