Skip to content

Instantly share code, notes, and snippets.

@kana-sama
Last active May 14, 2023 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kana-sama/9fa46dd2ef64c11c696f472d81fe7a99 to your computer and use it in GitHub Desktop.
Save kana-sama/9fa46dd2ef64c11c696f472d81fe7a99 to your computer and use it in GitHub Desktop.
в вашем телеграм-канале гисты

glist


Мотивация:

  • вести блог/канал круто, потому что так не теряются какие-то свои заметки
  • делать это в телеге неудобно, потому что неудобное форматирование, и код неудобно писать
  • делать это в гисте удобно, постоянно пишу и скидываю их
  • но в гисте неудобно искать, и все лежит просто свалкой
  • ссылки на гист легко кодом выводить в посты в канале, фильтруя по какому-то паттерну
  • в гисте кроме кода можно вставить markdown файлы с каким-то описанием, и это описание можно использование для поста
  • по описанию и коду можно генерить теги через openai модели
  • делать сервис который работает фоново я не хочу, потому что по опыту я на них забываю и вырубаю
  • но можно сделать тулу которую нужно просто по запросу запустить и она сама смигрирует гисты в посты

Планируемая апишка:

$ glist config
> GitHub token: $GITHUB_TOKEN
> Telegram bot token: $BOT_TOKEN
> OpenAI token (optional): $OPENAI_TOKEN


# связывание с каналом
$ glist create $NAME
> Telegram channel id: $CHANNEL_ID
> Telegram comments chat id (optional): $CHAT_ID

# отвязывание от канала
$ glist remove $NAME

# возможность привязать или отвязать комментарии
$ glist edit $NAME
> Telegram comments chat id (optional): $CHAT_ID


# обновление опубликованных постов
$ glist update $NAME

# публикация новых постов если есть
$ glist pull $NAME

# Обновление старых и публикация новых
$ glist sync $NAME

# Обновление или публикация конкретного гиста
$ glist sync $NAME --gist $GIST_ID

# Обновление или публикация гистов определенной даты
$ glist sync $NAME --from $FROM:DATETIME

Какие-то технические решения:

Сервис сервисом, но лично у меня основный интерес обычно не в результате, а в процессе. Потому хочу указать что я хочу использовать и для чего:

  1. Haskell

    Просто так, потому что попросили хаскель. Сам бы предпочел написать на Elixir потому что там есть удобные мне Flow и GenStage.

  2. conduit

    Нужно обрабатывать много данных, и выгрузка их происходит постранично. Я с conduit еще не работал, кажется что это нормальная альтернатива Flow из Elixir

  3. SQLite и sqlite-simple

    Нужно хранить список каналов, нужно хранить уже обработанные посты, чтобы знать что обновлять, нужно сохранять последний обработанный гист. Но данных не очень много.

  4. ChatGPT

    AI ради AI, хочу с помощью него генерировать теги для постов по коду и описанию.

  5. Docker

    Хочу чтобы тулой можно было пользоваться и не ставя хаскель локально, и при этом не хочу распространять бинари и тд. Хочу посмотреть, можно ли как-то распространять тулу через докерхаб.


Формат постов:

Гист, в котором есть файл README.glist.md. Именно это имя, потому что гитхаб рисует README файлы выше остальных в гисте.

Если первый блок в файле это заголовок, то он является заголовком поста. Все остальное - текст поста.

В телеграме глист публикует заголовок, укороченную версию поста (если не влезает), с преобразованной разметкой, теги (если сгенерировали) и ссылку на гист.

В гисте можно оставлять ссылки на другие файлы (например) в гисте, глист должен заменить их на глобальные ссылки.


Комментарии:

Комментарии можно синхронизировать в обе стороны, но пока что я хочу только в одну: из гистов в телеграм. Их будет публиковать бот.

main = putStrLn "Hello world"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment