Spacebar
Spacebar (бывш. Fosscord, он же Тот самый клон Дискорда, который вроде жив, а вроде и нет, он же Почему у меня не работает WebRTC?) — эпическая, трагикомичная и местами героическая попытка группы энтузиастов, анимешников и фуррей переписать бэкенд проприетарного монстра Discord с нуля, используя TypeScript, магию Open Source и бесконечные запасы кофеина.
Проект позиционирует себя как свободная, совместимая с Discord платформа для чата, голоса и видео, что на языке простых смертных означает: Мы хотим свой Дискорд, но чтобы Товарищ Майор и модераторы из Сан-Франциско не читали наши переписки, а ещё чтобы можно было ставить кастомные темы и не платить за Нитро.
Суть[править]
В начале времен был Discord. И был он хорош, но жаден. Он требовал номер телефона, сканировал лица (ну, по слухам и паранойе r/selfhosted), банил за неправильные местоимения и вообще вел себя как типичная Корпорация зла. В крайние времена поехи стали требовать ещё и явный маразм — фотографию паспорта или лица пользователя. И возопили юзеры: Доколе?!. И явился Fosscord.
Идея была проста и гениальна, как автомат Калашникова: зачем изобретать велосипед (читай: Matrix, XMPP, Rocket.Chat), если у Дискорда уже есть идеальный UI/UX, к которому привыкли миллионы школьников и геймеров? Давайте просто напишем свой сервер, который притворяется сервером Дискорда, и подключим к нему официальный клиент!
Спойлер: ПЛАН БЫЛ ГОВНО.
Потому что юристы Discord Inc. не дремлют, а их банхаммер бьет больнее, чем банхаммер модератора /b/.
История, полная драмы и лулзов[править]
Эпоха Fosscord[править]
Изначально проект назывался Fosscord (FOSS + Discord, смекаешь?). Разработчики, полные юношеского максимализма, решили, что лучшим способом тестировать свой сервер будет… использование модифицированного официального клиента Discord. Они даже выложили инструкции, как это сделать.
Это было похоже на то, как если бы кто-то начал продавать паленый Louis Vuitton прямо у входа в официальный бутик Louis Vuitton, раздавая листовки с надписью У нас то же самое, но бесплатно и без охраны.
Юридический экстерминатус[править]
В марте 2023 года на почту мейнтейнеров упало письмо счастья от юридической конторы Morrison Rothman LLP. В письме вежливо, но настойчиво (с использованием фраз типа нарушение интеллектуальной собственности и мы вас высушим) просили прекратить этот цирк.
Реакция разработчиков была панической и молниеносной:
- С GitHub было выпилено всё, что касалось тестового клиента (читай: взломанного клиента Дискорда).
- С сайта исчезли все упоминания о том, что это прокси.
- В чате началась суета: 'Is Fosscord dead?', 'Where is the client?'.
Но юристы не остановились. 10 марта прилетело второе письмо: 'Меняйте название, суки. Слово «cord» — наше'.
Великое переименование[править]
Разработчики объявили конкурс на новое название. Сообщество, как водится, нагенерировало кучу вариантов, от пафосных до идиотских. Победил вариант Harmony.
Но мейнтейнеры, посовещавшись в своих закрытых чатиках, решили, что демократия — это, конечно, хорошо, но Spacebar звучит круче.
Почему Spacebar?
- Это самая большая кнопка на клавиатуре (символично, ёпта).
- Игра слов: Space (космос/пространство) + Bar (бар, где бухают).
- Домен был свободен.
Техническая начинка (для красноглазиков)[править]
Внутри Spacebar — это монстр Франкенштейна из мира JavaScript/TypeScript.
- Язык: TypeScript. Потому что писать бэкенд на чем-то, что не требует скачивания половины интернета в папку `node_modules`, нынче не модно.
- База данных: По дефолту SQLite (для тех, кто хочет поднять сервер на бабушкином тостере), но взрослые дяди ставят PostgreSQL.
- Коммуникация: WebSocket (Gateway) для риал-тайм событий и HTTP API для всего остального.
- Архитектура: Якобы микросервисная, но по факту большинство запускает это как монолит через `npm run start`, потому что настраивать RabbitMQ ради чата на трех человек — это мазохизм.
Missing Routes (Чего нет)[править]
Существует целый репозиторий `missing-routes`, который автоматически скрейпит клиент Дискорда и показывает, насколько Spacebar отстает. Спойлер: СИЛЬНО.
- Треды: Нет.
- Стикеры: Вроде есть, а вроде и глючат.
- Поиск: Работает через раз и только если ты правильно помолился.
- Голос и Видео (WebRTC): Это отдельная боль. Реализация WebRTC в Spacebar — это как секс в подростковом возрасте: все об этом говорят, все этого хотят, но ни у кого толком не получается. Официально заявлено, что UDP не поддерживается, только TCP, что для реал-тайм видео — смерть.
Клиенты[править]
Так как использовать официальный клиент Discord теперь нельзя (юридически), а свой писать — долго и дорого, ситуация с клиентами напоминает зоопарк после бомбежки.
Официальный клиент (React Client)[править]
Написан на React. Тяжелый, глючный, некрасивый. Разработка идет со скоростью улитки, ползущей по склону Фудзи. В какой-то момент разработчики просто сказали: 'Ребята, юзайте Fermi, он лучше'. Это, пожалуй, единственный случай в истории, когда официальные разработчики признали, что сторонний клиент лучше их собственного высера.
Fermi[править]
Тот самый герой, которого мы не заслужили. Написан студентом-энтузиастом (MathMan05). Работает в браузере, выглядит почти как Дискорд (но с налетом jank — дешевизны), поддерживает темы, плагины и, о чудо, даже иногда голосовой чат (если звезды сойдутся).
В логах обновлений Fermi можно найти такие перлы:
The audio system rework which should fix many of the issues the old one had...
Перевод: Мы переписали звук, теперь он, возможно, не будет пердеть вам в уши статическим шумом.
Сторонние клиенты[править]
Поскольку API (почти) совместим, theoretically (теоретически) можно использовать любой мод клиента Дискорда (Vencord, BetterDiscord с плагинами), если подменить эндпоинты. Но это:
а) Нарушает ToS Дискорда (всем пофиг).
б) Глючит, так как Spacebar реализует API не на 100 %.
Драма в сообществе[править]
Каждый раз, когда кто-то на Реддите спрашивает 'Чем заменить Дискорд?', начинается священная война.
Лагерь Matrix:
- Юзай Matrix/Element! Это стандарт! Это федерация! Это шифрование!
- Но Element тормозит, а звонки работают через жопу…
- ТЫ ПРОСТО НЕ УМЕЕШЬ ЕГО ГОТОВИТЬ! ПОДНИМИ СВОЙ TURN-СЕРВЕР!
Лагерь Spacebar:
- Spacebar крутой, он как Дискорд, но наш!
- А он живой? Последний коммит был два года назад?
- Нет! Смотри, они обновили `README.md` вчера! ПРОЕКТ ЖИВ!
Лагерь TeamSpeak:
Инцидент с малварью[править]
В апреле 2025 года официальный инстанс `spacebar.chat` словил маслину.
We're aware you may be seeing "Malicious site" warnings... A malicious actor had uploaded malware to spacebar.chat...
Кто-то залил вирусню через CDN, Google пометил домен как опасный, хостер отключил сервер. Классика селфхостинга: дай юзерам возможность грузить файлы, и они загрузят либо CP, либо малварь. Третьего не дано.
Мемы и локальный фольклор[править]
- When Voice? — главный вопрос в чате. Ответ всегда один: 'Скоро', 'Нужен WebRTC эксперт', 'Используйте Medooze'.
- Is it dead? — вопрос, который задают каждые 3 дня на Реддите. Ответ мейнтейнеров: 'Мы волонтеры, у нас есть личная жизнь, отстаньте'.
- Личности:
- Rory& — главный, вроде как. Пишет апдейты, извиняется за падения базы данных ('I may have accidentally wiped all password hashes' — реальная цитата, Карл! Удалил хеши паролей! Профессионализм 80 лвл).
- MaddyUnderStars — пишет много текста, разруливает драмы.
- Emma [it/its] — бот? человек? коллективный разум? Пишет про малварь и стримы.
Установка (Для смелых духом)[править]
Если ты решил поднять Spacebar, приготовься к боли.
- Docker: Вроде есть, но `docker-compose` надо искать по чатам или писать самому. Официальный образ может быть устаревшим, или broken, или требовать конфиг, который генерируется только при первом запуске, но падает, если конфига нет. Замкнутый круг.
- NPM: `git clone`, `npm install`. Ждешь полчаса. `npm run build`. Ошибка TypeScript. Фиксишь. `npm run start`. Падает, потому что нет Postgres. Ставишь Postgres. Падает, потому что нет RabbitMQ. Ставишь RabbitMQ. Падает, потому что `config.json` пустой.
- Реверс-прокси: Nginx обязателен, иначе WebSocket не пролезут. Нужно настроить CORS, иначе Fermi не подключится. Нужно настроить SSL, иначе браузер пошлет тебя нахер.
И когда ты всё это настроишь… ты поймешь, что сидишь на сервере один. Потому что твоим друзьям лень регистрироваться на `chat.vasya.pupkin.com`, им удобнее в Дискорде.
Зачем это нужно?[править]
- Паранойя: Ты уверен, что Дискорд сливает твои переписки ФБР/ЦРУ/Моссаду.
- Жадность: Ты хочешь анимированные эмодзи, но жаба душит платить $10 в месяц. В Spacebar ты сам себе админ, можешь выдать себе права `OPERATOR` и хоть обмазаться значками HypeSquad.
- Just for Fun: Ты красноглазик, которому нравится ковыряться в `node_modules` и дебажить WebRTC по выходным.
- Архивация: Есть инструменты для импорта истории из Дискорда. Полезно, когда (не если, а когда) твой сервер в Дискорде забанят за нарушение правил сообщества (постинг мемов про фурри).
См. также[править]
- Discord — То, с чем боремся
- Matrix — То, что советуют, но никто не хочет настраивать
- TeamSpeak — Для олдфагов
- Slack — Для рабов корпораций
- XMPP — Для некромантов