MCPcopy Index your code
hub / github.com/ellavs/tg-bot-golang

github.com/ellavs/tg-bot-golang @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
305 symbols 753 edges 31 files 183 documented · 60% updated 3mo ago★ 71
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Телеграм бот на GO (Golang)

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

В данном проекте: 1. получение и отправка сообщений пользователю через телеграм бот (используется библиотека go-telegram-bot-api), 2. пример загрузки конфигурационного файла приложения, 3. работа с PostgreSQL, 4. взаимодействие с внешним API (скачивание курсов валют из открытого источника), 5. работа с горутинами (периодическое обновление курсов валют), 6. примеры юнит и мок тестов, 7. вывод логов (zap), 8. пример middleware-функций для трейсинга и метрик, 9. пример compose для работы с докер-контенерами (postgres, prometheus, grafana, jaeger, kafka, zookeeper), 10. пример реализации LRU кэширования, 11. взаимодействие с брокером сообщений Кафка (Kafka), 12. отправка/получение прото-файлов по gRPC между сервисами, 13. отдельный сервис для получения сообщений из кафки и отправки данных по gRPC, 14. пример функции-дженерика (см. пакет net_http)

Описание интерфейса работы с ботом в телеграме

Для начала работы необходимо ввети команду /start. Будет отображено основное меню:

alt Основное меню

Ввод суммы расхода по категории

Для ввода суммы расхода, необхоходимо нажать кнопку Добавить расход и в появившемся списке категорий выбрать ту, по которой был совершен расход:

alt Выбор категории

После выбора категории необходимо ввести сумму расхода (допускается ввод с копейками, например, 150.5):

alt Ввод расхода

Будет сохранен расход текущей датой.

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

Загрузка истории данных

Для загрузки истории расходов введите таблицу в следующем формате (дата сумма категория): YYYY-MM-DD 0.00 XXX, например:

2022-09-20 1500 Кино
2022-07-12 350.50 Продукты, еда
2022-08-30 8000 Одежда и обувь
2022-09-01 60 Бензин
2022-09-27 425 Такси

alt Ввод истории данных

Вывод отчета

Для вывода отчета необходимо в основном меню нажать соответствующие кнопки: Отчет за день, Отчет за месяц или Отчет за год. Будет выведена таблица с отчетом по категориям за выбранный период:

alt Отчет

Изменение валюты

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

alt Выбор валюты

Установка лимита расходов на месяц

Для установки ежемесячного лимита расходов необхоходимо нажать кнопку Установить бюджет в основном меню ввести максимальную сумму бюджета (например, 150000):

alt Установка бюджета

При установке бюджета все вводимые расходы, превышающие бюджет, будут отклонены.

Extension points exported contracts — how you extend this code

RatesDataStorage (Interface)
Интерфейс для работы с хранилищем курсов валют. [3 implementers]
internal/model/exchangerates/exchangerates.go
TxFunc (FuncType)
TxFunc Описание типа вложенной функции для выполнения в транзакции.
internal/helpers/dbutils/sqlxwrapper.go
ExchangeRates (Interface)
(no doc) [1 implementers]
internal/tasks/exchangeuploader/exchangeuploader.go
TokenGetter (Interface)
(no doc) [1 implementers]
internal/clients/tg/tgclient.go
TgHandler (Interface)
(no doc)
internal/metrics/metrics.go
UserDataStorage (Interface)
UserDataStorage Интерфейс для работы с хранилищем данных. [3 implementers]
internal/model/messages/incoming_msg.go
TxRunner (Interface)
TxRunner Интерфейс для запуска транзакции (sqlx).
internal/helpers/dbutils/sqlxwrapper.go
MessageSender (Interface)
(no doc)
internal/tasks/reportserver/reportserver.go

Core symbols most depended-on inside this repo

Error
called by 37
internal/logger/logger.go
Add
called by 28
internal/cache/lru.go
SendMessage
called by 20
internal/model/messages/incoming_msg.go
Info
called by 12
internal/logger/logger.go
Fatal
called by 11
internal/logger/logger.go
NewLRU
called by 10
internal/cache/lru.go
Len
called by 10
internal/cache/lru.go
Get
called by 7
internal/cache/lru.go

Shape

Method 148
Function 94
Struct 42
Interface 16
TypeAlias 3
FuncType 2

Languages

Go100%

Modules by API surface

internal/model/messages/incoming_msg.go47 symbols
internal/mocks/messages/messages_mocks.go42 symbols
internal/api/report.pb.go28 symbols
internal/model/db/usersstorage.go17 symbols
internal/model/exchangerates/exchangerates.go15 symbols
internal/api/report_grpc.pb.go15 symbols
internal/mocks/exchangerates/exchangerates_mocks.go14 symbols
internal/clients/tg/tgclient.go11 symbols
internal/helpers/dbutils/sqlxwrapper.go10 symbols
internal/cache/lru_test.go9 symbols
internal/cache/lru.go9 symbols
internal/model/bottypes/bottypes.go7 symbols

For agents

$ claude mcp add tg-bot-golang \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page