Если вы не делаете ничего, кроме ожидания на тихом канале, чтобы что-то произошло, производительность в значительной степени не имеет значения. Возможно, вы могли бы написать это в BF (ну, с добавленными примитивами сетевого подключения) и заставить его работать нормально.
Если вы работаете на множестве занятых каналов, за которыми следят многие вещи, это не так. Tcl очень хорош в управляемых событиями ввода-вывода, что идеально подходит для такой ситуации. (Python может сделать это, но нуждается во внешних библиотеках, как и Lua. Я недостаточно знаю JS, чтобы комментировать там.)
Если вам нужно выполнить значительную обработку без ввода-вывода для некоторых ответов на сообщения, вам нужны потоки. Я знаю, что и Tcl, и Python поддерживают потоки, но с совершенно разными моделями потоков (в Python есть модель с общей памятью, которая облегчает передачу некоторых типов задач, особенно когда данные большие, а в Tcl есть модель квартиры, значительно уменьшает количество блокировок, требуемых в реализации для хорошего увеличения производительности в коде с привязкой к процессору).
Какое отношение это имеет к IRC-ботам? Ну, все зависит от того, что вы делаете в боте.