{"id":20753665,"url":"https://github.com/whiletruedoend/twilight","last_synced_at":"2025-04-28T16:26:35.060Z","repository":{"id":46977451,"uuid":"315716328","full_name":"Whiletruedoend/Twilight","owner":"Whiletruedoend","description":"RoR blog with platform multiposting options and cookies!","archived":false,"fork":false,"pushed_at":"2024-10-09T17:16:55.000Z","size":13793,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-30T11:21:48.788Z","etag":null,"topics":["blog","bot","matrix","multiposting","rails","ror","rss","ruby","tags","telegram"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Whiletruedoend.png","metadata":{"files":{"readme":"README-RU.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-24T18:14:30.000Z","updated_at":"2024-10-09T17:16:58.000Z","dependencies_parsed_at":"2024-08-23T15:59:48.294Z","dependency_job_id":"52ad2c1e-3d93-465e-a011-6d658684af92","html_url":"https://github.com/Whiletruedoend/Twilight","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Whiletruedoend%2FTwilight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Whiletruedoend%2FTwilight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Whiletruedoend%2FTwilight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Whiletruedoend%2FTwilight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Whiletruedoend","download_url":"https://codeload.github.com/Whiletruedoend/Twilight/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251344413,"owners_count":21574534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","bot","matrix","multiposting","rails","ror","rss","ruby","tags","telegram"],"created_at":"2024-11-17T09:14:27.140Z","updated_at":"2025-04-28T16:26:35.039Z","avatar_url":"https://github.com/Whiletruedoend.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Twilight\n\nAlso available EN version =\u003e [README.md](https://github.com/Whiletruedoend/Twilight/blob/master/README.md)\n\n### Table of Contents\n* [Идея](#Идея)\n* [Поддержка платформ](#Поддержка-платформ)\n* [Установка](#Установка)\n* [Настройка](#Настройка)\n  + [Комментарии](#Комментарии)\n  + [Matrix](#matrix)\n  + [fail2ban](#fail2ban)\n  + [Темы](#Темы)\n  + [Продакшн](#Продакшн)\n* [Текущие возможности](#Текущие-возможности)\n* [Баги и некоторые особенности](#Баги-и-некоторые-особенности)\n* [Схемы и скриншоты](#Схемы-и-скриншоты)\n* [Связь](#Связь)\n\n \u003cimg src=\"https://i.imgur.com/j6FCqsv.png\"\u003e\u003c/img\u003e\n\n\nP.S. Список последних изменений можно посмотреть \u003ca href=\"https://github.com/Whiletruedoend/Twilight/blob/master/update_log.md\"\u003eтут\u003c/a\u003e\n\n## Идея\n\nАнализируя различные сайты-блоги и прилегающие к ним платформы (куда идёт репост), можно выделить главную проблему: Каждая платформа по сути никак не связана ни с другими платформами, ни с блогом. Из этого вытекает:\n \n 1. Глупость самому постить одно и то же в разные места;\n 2. Необходимость самому сидеть в других платформах;\n \n Поэтому было принято написать что-то вроде агрегатора статей. Идея простая - пишешь пост - он разлетается по разным платформам.\n \n Визуальное представление реализации см. в [Схемы и скриншоты](#Схемы-и-скриншоты);\n \n## Поддержка платформ\n \n * Telegram: \n   * Отправка в платформы: Да\n   * Редактирование, удаление: Да\n   * Отправка из платформы на сайт: Да\n   * Поддержка комментариев: Да\n   * Поддержка аттачменов: картинки, видео, аудио, файлы\n   \n * Matrix: \n   * Отправка в платформы: Да\n   * Редактирование, удаление: Да\n   * Отправка из платформы: Нет\n   * Поддержка аттачменов: картинки, видео, аудио, файлы\n \n## Установка\n\n  Есть 2 способа установки:\n\n  ### Обычный\n \n  * Установить ruby (3.3.2):\n    * Для [rvm](https://rvm.io/):\n    ```ssh\n     rvm install ruby-3.3.2\n    ```\n    * Для [rbenv](https://github.com/rbenv/rbenv):\n    ```ssh\n     rbenv install 3.3.2\n    ```\n  * Установить yarn: [Windows](https://github.com/yarnpkg/yarn/releases/download/v1.22.19/yarn-1.22.19.msi) | [Linux](https://www.ubuntupit.com/how-to-install-and-configure-yarn-on-linux-distributions/);\n  * Установить redis: [Windows](https://github.com/tporadowski/redis/releases) | [Linux](https://redis.io/docs/getting-started/);\n  * Установить imagemagick [Windows](https://imagemagick.org/script/download.php#windows) | [Linux](https://imagemagick.org/script/download.php#linux)\n  * (Не обязательно) Установить [PostgreSQL](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads);\n  * Загрузить проект: \n  \n    ```ssh\n     git clone https://github.com/Whiletruedoend/Twilight\n     cd Twilight/\n     yarn install --check-files\n     bundle install\n     NODE_OPTIONS=--openssl-legacy-provider bundle exec rake webpacker:compile\n     NODE_OPTIONS=--openssl-legacy-provider bundle exec rake assets:precompile\n     rails db:migrate\n    ```\n     \n  * Настроить: `config/credentials.yml`\n  * Запустить сервер командой: `rails s`\n\n  **Windows установка проблемных гемов**:\n  ```\ngem install pg -- --with-pg-dir=\"C:\\Program Files\\PostgreSQL\\15\" (вставьте ваш путь)\ngem install wdm -- --with-cflags=-Wno-implicit-function-declaration\n  ```\n\n  ### Docker\n\n  ```\n  git clone https://github.com/Whiletruedoend/Twilight\n  cd Twilight/\n  yarn\n  ```\n  * (Не обязательно) Настроить файл .env для подключения к существующей бд postgres\n  * Настроить config/credentials.yml\n  * Выполнить команду:\n  ```\n    docker build -t twilight .\n  ```\n  * После успешной сборки образа, выполнить:\n  ```\n    docker-compose up twilight\n  ```\n  * (Если нужно выполнить миграции, то):\n  ```\n    docker-compose run --rm twilight bin/rails db:migrate\n  ```\n\nТеперь сайт будет доступен по адресу: `http://localhost:3080`\n\n## Настройка\n\n[Production] Не забудьте настроить переменную secret_key_base в файле credentials.tml!\n\n### Комментарии\nДля поддержки трансляции комментариев из Telegram в пост блога, необходимо:\n1. Проверить настройки приватности бота;\n2. Добавить бота в чат с комментариями;\n3. При добавлении канала поставить галку 'Включить комментарии';\n\nПосле чего трансляция комментариев должна заработать.\n\n### Matrix\n Краткая инструкция по настройке matrix.\n \n 1. Доступ осуществляется через access_token. Его получение через клиент Element: `Все настройки -\u003e Помощь \u0026 О программе --\u003e *в самом низу* Токен доступа`\n 2. Для получения ID комнаты, создаём комнату, после чего ПКМ на комнате и `Настройки --\u003e Подробности --\u003e и тут 'Внутренний ID комнаты'`\n### fail2ban\nДля возможности блокировки IP адресов тех, кто пытается сбрутофорсить RSS токен, используется [fail2ban](https://www.dmosk.ru/instruktions.php?object=fail2ban). Инструкция:\n* Установить пакет fail2ban;\n* Настроить `credentials.yml`: выставить `enabled:` на `true`;\n* Создать фильтр: `vim /etc/fail2ban/filter.d/twilight.conf`\n* Вставить туда код ниже:\n    ```ssh                                                  \n    [INCLUDES]\n    before = common.conf\n    \n    [Definition]\n    failregex = ^.* (\\[.*\\])* Failed bypass token from \u003cHOST\u003e at .*$\n    ```\n* Создать jail: `vim /etc/fail2ban/jail.d/twilight.conf`\n* Вставить туда код ниже:\n    ```\n    [twilight]\n    enabled = true\n    maxretry = 7\n    findtime = 180\n    action = iptables-allports[name=twilight, protocol=all]\n    bantime = 3600\n    filter = twilight\n    port = http,https\n    logpath = /home/user/Twilight/log/production.log\n    ```\n  (**Важно!** Не забудьте поменять путь *logpath* на свой. Подробнее про параметры см.выше по ссылке);\n* Перезапустить сервис: `systemctl restart fail2ban`\n\n(Забаненные IP можно узнать командой:`sudo fail2ban-client status twilight`)\n### Темы\nДля создания своей темы необходимо создать файл в формате `app/assets/stylesheets/название_theme.scss`, отредактировать его, затем перезапустить приложение;\n\n## Текущие возможности\n  \n  * Поддержка EN/RU языков;\n  * Возможность создавать/менять темы;\n  * Управление каналами, проверка данных при вводе (только для администраторов);\n  * Поиск заметки по заголовку на главной странице;\n  * Каптча при авторизации/регистрации;\n  * Система инвайт-кодов (не обязательно);\n  * Поддержка отдельных опций для каждой платформы;\n  * Спецификаторы доступа заметки (для всех, для пользователей, для себя);\n  * Создание/Удаление тэгов, возможность пользователя выбрать нужные тэги (результат отображается в RSS);\n  * Возможность добавления комментариев к записи;\n  * Просмотр статистики зарегистрированных пользователей (только для администраторов);\n  * Twitter-style feed;\n\n## Баги и некоторые особенности\nОсобенности:\n* [ANY] Если удалить канал, а затем удалить пост, то пост из платформ не удалится (нет токенов - нет удаления, вроде логично);\n* [TG] Если у поста в telegram был текст и аттачменты, и при редактировании убрать все аттачменты, то пост полностью удалится. Это особенность телеги, я не могу превратить подпись в текст, нужно создавать новый пост;\n* [TG] Если вы отправляете несколько аттачментов разного типа и используете подпись, то аттачменты будут сгруппированы по группам, первой группой будет такого же типа как и первый аттачмент, и подпись будет прикреплена именно к ней;\n* [TG] Если был создан пост с \u003c= 4096 символами и при обновлении поста его длина будет превышать 4096 символов, то будет создано новое сообщение, которое может быть на дальнем расстоянии от первого (например, если были ещё посты то оно будет идти после них). Переместить сообщение вверх я не могу, поэтому советую использовать опцию onlylink в таких случаях;\n\nБаги:\n\n* [TG] При редактировании аттачментов в комментариях (добавление нового и удаление старого) сбивается порядок и при повторном редактировании удаляется не та картинка;\n\nЕсли решите их пофиксить, то с радостью приму Pull Request;\n\n## Схемы и скриншоты\nER-диаграмма:\n\u003cimg src=\"https://i.imgur.com/RQQCRpa.jpeg\"\u003e\u003c/img\u003e\nГлавные страницы (настраивается):\n * Вариант 0 (отдельная страница):\n\u003cimg src=\"https://i.imgur.com/cVz0Quv.png\"\u003e\u003c/img\u003e\n * Вариант 1 [По-умолчанию] (posts):\n \u003cimg src=\"https://i.imgur.com/j6FCqsv.png\"\u003e\u003c/img\u003e\n * Вариант 2: (feed):\n \u003cimg src=\"https://i.imgur.com/FJ7z6vF.png\"\u003e\u003c/img\u003e\n\nЛичный кабинет:\n\u003cimg src=\"https://i.imgur.com/XDwP5n0.png\"\u003e\u003c/img\u003e\nУправление каналами:\n\u003cimg src=\"https://i.imgur.com/ojERlTd.png\"\u003e\u003c/img\u003e\nИнвайт-коды:\n\u003cimg src=\"https://i.imgur.com/FvAlzzT.png\"\u003e\u003c/img\u003e\nСтатистика:\n\u003cimg src=\"https://i.imgur.com/WxAdMuD.png\"\u003e\u003c/img\u003e\nСоздание статьи (Default theme):\n\u003cimg src=\"https://i.imgur.com/3QStroz.png\"\u003e\u003c/img\u003e\nКонкретная статья:\n\u003cimg src=\"https://i.imgur.com/9F0W2Nr.png\"\u003e\u003c/img\u003e\n\n## Связь\nЕсли у Вас есть вопросы, идеи или собственные наработки, то всегда можете обратиться ко мне по следующему адресу:\n\n- [Matrix](https://matrix.to/#/@whiletruedoend:matrix.org)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhiletruedoend%2Ftwilight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhiletruedoend%2Ftwilight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhiletruedoend%2Ftwilight/lists"}