Files
notify/README.md
Maksimov V Vladimir 8331f1a95b исправление багов, документация
- telegram: флаг disableIPV6 не работал — IPv6 был отключён всегда
- telegram: log.Fatalf заменён на возврат ошибки
- tools: BuildTelegramTable не падает при строках разной длины
- README.md с примерами использования
- .gitignore обновлён
2026-04-01 16:45:17 +03:00

137 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# notify
Go-библиотека для отправки уведомлений через Telegram и Email.
## Установка
```bash
go get git.gm6.ru/icewind/notify
```
## Telegram
### Создание бота
```go
bot, err := notify.NewTelegram("BOT_TOKEN", true) // true — отключить IPv6
if err != nil {
log.Fatal(err)
}
```
Второй параметр `disableIPV6` принудительно использует TCP4 для соединений с Telegram API — полезно в средах, где IPv6 недоступен или работает нестабильно.
### Отправка текстовых сообщений
```go
// Markdown
bot.SendTextMessage(chatID, "*Жирный* и _курсив_")
// HTML
bot.SendHTMLMessage(chatID, "<b>Жирный</b> и <i>курсив</i>")
```
### Отправка фото
```go
// Из файла
bot.SendPhotoFromFile(chatID, "/path/to/image.png", "Подпись")
// По URL
bot.SendPhotoFromURL(chatID, "https://example.com/image.png", "Подпись")
// Из байтов
bot.SendPhotoFromBytes(chatID, imageData, "photo.png", "Подпись")
```
### Отправка документов
```go
// Из файла
bot.SendDocumentFromFile(chatID, "/path/to/report.pdf", "Отчёт за месяц")
// По URL
bot.SendDocumentFromURL(chatID, "https://example.com/report.pdf", "Отчёт")
// Из байтов
bot.SendDocumentFromBytes(chatID, fileData, "report.pdf", "Отчёт")
```
### Доступ к нативному API
Для операций, не покрытых обёрткой, можно получить оригинальный `*tgbotapi.BotAPI`:
```go
api := bot.GetAPI()
updates, _ := api.GetUpdates(tgbotapi.NewUpdate(0))
```
## Таблицы для Telegram
`BuildTelegramTable` формирует ASCII-таблицу с рамками, готовую для отправки в `<pre>` блоке. Заголовки выравниваются по центру, числа — по правому краю, текст — по левому. Корректно работает с кириллицей и другими широкими символами.
```go
rows := [][]string{
{"Товар", "Цена", "Кол-во"},
{"Яблоки", "120", "5"},
{"Бананы", "-90", "30"},
{"Киви", "+200", "1"},
}
table := notify.BuildTelegramTable(rows)
bot.SendHTMLMessage(chatID, "<pre>" + table + "</pre>")
```
Результат в Telegram:
```
+--------+------+--------+
| Товар | Цена | Кол-во |
+--------+------+--------+
| Яблоки | 120 | 5 |
| Бананы | -90 | 30 |
| Киви | +200 | 1 |
+--------+------+--------+
```
## Email
### Отправка HTML-письма
```go
auth := notify.SmtpAuth{
Addr: "smtp.example.com:587",
Auth: smtp.PlainAuth("", "user@example.com", "password", "smtp.example.com"),
}
from := mail.Address{Name: "Система", Address: "noreply@example.com"}
to := mail.Address{Name: "Иванов", Address: "ivanov@example.com"}
err := notify.SendEmailHTML(auth, "<h1>Отчёт</h1><p>Всё в порядке</p>", "Тема письма", from, to)
```
Можно указать несколько получателей:
```go
notify.SendEmailHTML(auth, body, subject, from, recipient1, recipient2, recipient3)
```
### Отправка с вложениями
Для писем с вложениями или расширенной настройкой используйте `SenndEmailMessage` с объектом `email.Message`:
```go
import "github.com/scorredoira/email"
mes := email.NewMessage("Тема", "Текст письма")
mes.From = from
mes.AddTo(to)
mes.AttachFile("/path/to/file.xlsx")
err := notify.SenndEmailMessage(auth, mes)
```
## Лицензия
MIT