dimonier / tg2obsidian

This bot pulls new messages from a Telegram chat or group and puts them into Obsidian vault on a local machine
MIT License
106 stars 26 forks source link

feature request: Telegram + Obsidian = Трекер привычек #8

Open agapserg opened 1 year ago

agapserg commented 1 year ago

Одна из функций для чего я использую обсидиан - я трекаю привычки. В самом обсидиане это реализовано достаточно топорно, а с помощью тг-бота это можно организовать вообще очень красиво и удобно.

На сколько я помню в Python в библиотеке Aiogram есть обработчик команд вида /command_name. Идея заключается в том, чтобы добавить функцию примерно такого вида:

Обработчик команд ждёт команду (/command_name) Затем по определённому пути "ПУТЬ К ЗАМЕТКЕ" Пишет определённый текст: "ТЕКСТ ЗАМЕТКИ"

А в конфиге прописываются связки КОМАНДА + ПУТЬ + ТЕКСТ, например: "/read" + "C:\Obsidian\Чтение.md" + "- [x] Читал один час [completion:: 2023-01-11]"

И если в дальнейшем прислать в бота команду /read, то в соответствующую заметку бот добавит соответствующую строчку.

В дальнейшем с помощью плагина Dataview можно будет обрабатывать выполненные задачи и считать сколькь раз в неделю я занимался какой-либо привычкой.

При чём в конфиге желательно сделать так, чтобы можно было добавить хоть 100 связок КОМАНДА + ПУТЬ + ТЕКСТ, а обработчик будет сопоставлять эти связки и писать в нужные заметки нужный текст в зависимости от команды

mikkovedru commented 1 year ago

Выглядит как попытка сделать из Обсидиан/бота комбайн, способный на что угодно. Опыт показывает, что это до хорошего не доведет.

Для трекинга привычек есть свои хорошие инструменты. Начиная от мобильных приложений типа Loop Habit Tracker и заканчивая Экселем.

Имхо.

agapserg commented 1 year ago

Обсидиан с его обилием плагинов разве не является комбаном способным на что угодно? Например вот тут ребята сделали на базе обсидиана парсер IMDB и спокойно делают у себя локальную библиотеку фильмов с красивеньким представлением. А вот тут чувак сделал супер-пупер крутой дашборд для своей работы.

Потом почему "Попытка"? Нет, не попытка, у меня всё уже сделано и успешно работает больше года и радует меня, но тут появилась возможность сократить кол-во кликов.

"Опыт показывает" - чей? Ваш? Ну я могу вам сказать, что ваш опыт субъективен, мой опыт показывает другое.

Ну для заметок, todo-листа, тайм-менеджмента и всего этого GTD есть тоже всякие Outlook'и, Todoist'ы и даже TickTick'и, но у Обсидиана есть несколько киллер-фич:

И я использую обсидиан именно поэтому. Мало того я использовал разные Habit Trecker'ы, мне не удобно в разных местах смотреть свои активности.

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

Пример моего Daily Note: image

agapserg commented 1 year ago

Я у себя сделал реализацию данной идеи так:

@dp.message_handler(commands=['read']) async def help(message: types.Message): curr_date = dt.now().strftime('%Y-%m-%d') note_text = f'\n- [x] ✅ {curr_date} - Читал 1 час' DIRNAME = os.path.join(config.inbox_path2, ''.join('Чтение') + '.md') with open(DIRNAME, 'a', encoding='UTF-8') as f: f.write(note_text)

А сейчас пришла идея "красивой" реализации этой идеи: В питое есть возможность создавать динамические функции - https://pythobyte.com/how-to-dynamically-create-a-function-in-python-706d74a2/

Так вот можно сделать так:

  1. Создаём таблицу с конфигом или текстовый файл с конфигом трекера
  2. В нём прописываем связку КОМАНДА + ФАЙЛ ЗАМЕТКИ + ТЕКСТ ЗАДАЧИ
  3. В боте делаем динамическую функцию, чтобы она парсила этот файл конфига и создавала на каждую команду свою функцию
  4. На выходе получаем возможность отправить в бота команду /read, а бот сам создаст выполненную задачу в нужной заметке

image

Я боюсь, что своими силами я буду это делать дольше чем вы, поэтому готов за реализацию данной фичи задонатить.

mikkovedru commented 1 year ago

@agapserg

  1. Первым делом хочу поделиться хорошим видео о том, как можно трекать привычки в Обсидиане. https://www.youtube.com/watch?v=W_leEJHBZW4 Надеюсь ты найдешь там что-нибудь полезное. У парня вообще много хороших видео на тему Обса.
  2. Хочу возвратиться к твоим первым же предложениям в этом треде: "Одна из функций для чего я использую обсидиан - я трекаю привычки. В самом обсидиане это реализовано достаточно топорно, а с помощью тг-бота это можно организовать вообще очень красиво и удобно.". Т.е. я правильно понимаю, что ты хочешь использовать тг не столько из-за того, что это было бы удобно, что ты в пути и без доступа к Обсу, а просто из-за того что в данный момент в Обсе эту фичу использовать неудобно?

Если это так, тогда у меня есть для тебя решение: https://github.com/chhoumann/quickadd/ Доки: https://quickadd.obsidian.guide/docs/

Template Choice - Insert templates into your vault. Works together with Obsidian template syntax and popular Templater plugin, augmenting them and adding more options. Capture Choice - Quick capture your manually written information and save it. Daily notes, work log, to-read-and-watch-later list, etc. Macro Choice - Macros to augment your workflow. Use the full power of Javascript programming language and Obsidian functions to do anything your want. E.g. create a personal movie database by writing a movie name and getting the movie notes fully customized and filled with correct film's up-to-date data.

Он на js и интерфейс запутанный, но мне кажется, что для тебя это очень подходящий вариант, и js знать даже не понадобится. Тебе нужен простой Capture Choice. Т.е. запускаешь команду (из любого окна Обса, не надо ничего заранее открывать), он у тебя спрашивает что ты хочешь, и потом пишет это в нужный тебе файл (журнальную запись за сегодня). Как раз то что тебе и нужно!

Дальше можешь усложнять в сторону Template Choice и Macro Choice.

Это решает твою задачу?


Что же касается общего поднятого вопроса, то мне кажется, что фича с поддержкой кастомного функционала была бы полезна. @dimonier

Я как раз сейчас занимаюсь написанием своего обработчика ссылок, о котором говорил в других тредах. И когда будет готово, то это очень хорошо бы работало вместе с этой программой. Т.е. чтобы tg2obsidian, видя первой команду типа Savelink, брал бы дальше идущий текст (ссылку/и) и отсылал на обработку другой программе/функции.

agapserg commented 1 year ago

@mikkovedru 1 - Tracker я знаю, пробовал его использовать, мне не подошёл. У меня немного иная структура хранилища и плагин не отрабатывает верно с моей структурой. Моя структура мне нравится больше чем то, что предлагает этот чувак и переходить ради работы плагина с моей структуры на другую - не хочу. 1.1 - У чувака и плагин требует структуру - в ежедневных заметках создаются задачи и параметры, а плагин потом чекает ежедневные заметки, т.к. дату он тянет из названия заметки. 1.2 - У меня структура такая, что на каждую привычку заведён проект, например "Чтение", "Зарядка" и т.д. И когда я что-либо сделал - я присылаю тг2обс боту команду /read и бот создаёт выполненную задачу по определённому шаблону в заметке "Чтение". А т.к. плагин Tracker читает дату из заголовка, а не из даты выполненной задачи - мне он не подходит

2 - Обсидиан из-за обилия плагинов открывается дольше секунды, а телега - открывается меньше секунды, поэтому я сделал так - на рабочий стол мобилы кинул ярлык тг2обс-бота и когда выполнил какую-либо привычку - захожу в бота, в боте есть закреплённый пост со всеми командами, тап на него, выбираю нужную мне, тап на неё и всё. Всё это занимает времени меньше 10 секунд и у меня уже работает. QuickAdd я юзаю, но для другого.

Спасибо за предложенные сценарии. Я еще подумаю на тему трекать привычки в ежедневных заметках, но не сейчас.

А по поднятому вопросу - я уже у себя всё это реализовал, но только у меня на каждую команду сделана функция (и этих функций и команд у меня например 30 штук) и я понимаю, что это быдло-кодинг, а Дмитрий как-то то ли тут, то ли в личке говорил "Функция ок, но как бы её завернуть покрасивше" вот я собственно и внёс предложение своё как это сделать, сам я это всё если и сделаю, то буду делать оч долго, т.к. я не программист.

mikkovedru commented 1 year ago

Спасибо за развернутое объяснение своей системы организации и рабочего воркфлоу. :+1:

pkb commented 1 year ago

@agapserg т.е. по сути Вам нужно, чтобы если в сообщении есть некий текст, допустим /read, то в определенную заметку нужно добавить другой текст (из настроек), верно?

agapserg commented 1 year ago

@pkb да, ну только уточнение - я себе уже так и сделал, прям так же как выше и написал. Просто решил написать об идеи завернуть это в боль мень крассивую реализацию.

А я просто накопировал этих функций 50 раз и придумал на каждую команду /sleep - уснул раньше 00:00 /veg - поел овощи /fruits - поел фрукты и так далее.

@mikkovedru Кстати после вашего совета я задумался о супер-франкеншейн связке. Я уже подходил к плагину Tracker, но ваш камент заставил еще раз это сделать. Я подумал, если бот после присылания ему команды уже пишет определённый текст в определённую заметку, то что мешает мне сделать этот же текст в отдельную ежедневную заметку в отдельной папке Tracker? И так и сделал.

Вот как привычки стали выглядеть: image