КОЙКА

Консольный чат-клиент

Представляет собой кроссплатформенное консольное приложение .net core для работы с чатом в консоли (терминале) Windows, Linux или Mac OS.
Поддерживает почти весь функционал чата. Работает с цветом от монохромной схемы до TrueColor 24-bit. Может работать на довольно старых ПК или слабых вирт. серверах, поддерживающих .net core 3.1. Не требовательно к системным ресурсам. Важным достоинством является независимость от установеленных в чате блокировок по IP-адресам и по идентификаторам браузеров: чужие баны не будут затрагивать лишних пользователей.

Скачивайте приложение только из официального источника!
Ссылка для скачивания: скачать архив
Контрольная сумма sha256: a9b96a375328549792202557b21a0e­5caa8636f1e6fe38284d7d9ace866e775e
Проверка на virustotal.com: Последний релиз без обнаружений (0 из 70) ссылка
Некоторые релизы могут давать редкие обнаружения на одном-двух мало распространенных секьюрных вендорах. Обнаружения могут быть по массе причин - программа использует множество функций разных ОС, применена защита DLL.
По этой причине Вы используете данную программу на свой страх и риск, несмотря на то, что никаких вредоносных функций в неё не закладывалось.

Для использования на вашем ПК или сервере должен быть установлен фреймворк .net core версии 3.1 или выше.
Получить фреймворк для вашей ОС можно с сайта Microsoft: ссылка. Выбирайте последнюю или любую другую, даже неподдерживаемую (для работы на старых системах), версию.
Страница для версии 3.1: ссылка. Достаточно установить .NET Runtime 3.1.32 или .NET Desktop Runtime 3.1.32.
Для запуска приложения в терминале выполнить команду dotnet <filename.dll> с указанием полного пути, или с указанием filename.dll, при нахождении в целевой директории.
Поддерживаемые операционные системы: ссылка.
Работоспособность проверена на Windows 8.1, Windows 10, Debian Linux 10, OS X 10.15 Catalina.

Описание файла конфигурации
Для работы программы в директории обязательно должен присутствовать файл koika.cfg.
Ключ domain = http://koika.su/ или другой домен чат-сервера, если указанный недоступен.
Ключ key = 0 (не используется) или действующий Ключ Доступа (см. Моя Анкета).
Ключ modifier = ctrl (Win, Linux) или alt (для Mac OS), или значение, подходящее Вам. Также поддерживается shift. Значение auto для автоматического выбора на основе ОС.
Ключ colors = 0 для Авто выбора цветовой схемы: Монохром для Windows, 8-bit для Mac OS (24-bit всё ещё не поддерживается), 24-bit для Linux.
Можно установить для принудительного выбора схемы, но возможна некорректная работа программы: 1 - monochrome (no escape codes), 2 - 8-bit, 3 - 24-bit.
Putty (SSH клиент для Windows) поддерживает цвет 8-bit.
Ключ emoji устанавливает фильтрацию смайлов-эмодзи (фильтрация юникода). 0 - удаляет все символы, кроме разрешённых (кириллица, латиница, стандартные спец. символы). 1 - обнаружение эмодзи с помощью регулярного выражения и замена на *emoji*. Регулярное выражение можно задать через файл emoji_pattern. 2 - обнаружение эмодзи и замена на его название. Таблица название-эмодзи в файле full_emoji_list.
Подробности об этой функции ниже в разделе Юникод.

Описание некоторых функций
Для прокрутки сообщений используйте PageUp и PageDown. Не некоторых ноутбуках без данных клавиш это могут быть сочетания Shift+Up и Shift+Down.
Отправка сообщения - клавиша Enter.
Поле ввода сообщения многострочное. Поддерживаются Home, End. Modifier+Left и Modifier+Right - переход по словам (по пробелам). Modifier+Up и Modifier+Down - доступ к отправленным сообщениям (в пустой строке ввода).
Имеется режим поиска и автодополнения никнейма. Для его активации введите % в начале строки и начните ввод ника. Up/Down для выбора вариантов, если их несколько. Пробел для подтверждения ввода.
Отправленные никнеймы сохраняются. Чтобы не вводить имена каждый раз, используйте Up/Down в пустой строке ввода.
Поле сообщения мигает, если отправка этого сообщения невозможна по какой-то причине. Если сообщение содержит смесь кириллицы и юникода, то, после мигания, курсор установится на первом недопустимом символе. В веб-версии чата такое сообщение отправляется, но сервером не допускается к опубликованию - таким образом вообщения теряются.
Команда /link <номер> открывает ссылку или фото в браузере по умолчанию. Ссылки сохраняются под номерами для простого ввода.
Команда /join <номер> присоединяет Вас к привату.
Команда /quit для выхода из чата.

Юникод
Некоторые терминалы, например в ОС Линукс, позволяют выводить символы юникода, в том числе смайлы эмодзи.
Для корректного функционирования программы перед выводом строки требуется знать, сколько символов в консоли занимает эта строка, т.е. требуется знать длину строки в экранных символах или число графем (связанных графем) и их ширину. В противном случае, невозможно построение форматированного вывода с использованием цвета, и невозможны многие другие функции, которые не имеют стандартной реализации во многих фреймворках, поскольку работа с юникодом в консольных приложениях считается проблемной и не первостепенной задачей.
Ширину строки с эмодзи невозможно рассчитать в пикселях, т.к. это не графическое приложение.
Длина строки в char не эквивалента числу символов, т.к. юникод имеет особую структуру с переменным числом байт в кодировке, а эмодзи может содержать управляющие символы. Некоторые символы эмодзи не являются моноширинными.
Подсчёт числа текстовых элементов средствами .net (stringInfo.LengthInTextElements) не решает задачу, т.к. некоторые длинные составные смайлы считаются одним выводимым символом, но представляют собой несколько экранных символов.
Принято решение находить эмодзи с помощью большого регулярного выражения и, вместо смайла, выводить его название.
Шаблон можно изменять (обновлять) через файл. Данные шаблоны генерируются автоматически на основе последних обновлений юникода: detecting-all-emojis.
Таблица большинства эмодзи с их названиями составлена на основе: FullEmojiList.cs.
Будем признательны за любую помощь в решении данной проблемы средствами любого ЯП.
Авторами был протестирован способ расчёта длины любой строки в символах при помощи вывода её в другом терминале и расчёта на основе полученной позиции курсора. Затем информация передаётся основному процессу, например, с помощью пайпов. Способ рабочий, но имеет существенные недостатки по причине невозможности создания терминала с невидимым окном в nix-системах с помощью .net. Программу придётся создавать на нативном языке для каждой платформы. Вывод большого числа строк в терминал с очисткой экрана также занимает продолжительное время (сотня больших строк до секунды времени).

Дополнения
Windows 10 и 11 имеют приложение Windows Terminal (apps.microsoft.com) - терминал, поддерживающий 24-bit цвета. Работа программы в данном терминале возможна, но не тестировалась под него, поэтому имеются некоторые баги - например, баг курсора.
Также стандартный терминал cmd в Windows 10 build 16257 и выше имеет возможность включить поддержку 24-битного цвета путем изменения или добавления ключа VirtualTerminalLevel в реестре. Ознакомиться подробно можно по ссылке.
Работа программы в таком терминале возможна, но также не тестировалась должным образом и имеет баги.
Теоретически, данная программа может работать с цветом в любом терминале, поддерживающем Управляющие последовательности ANSI (ANSI escape code).