telegram email
This commit is contained in:
31
email.go
Normal file
31
email.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package notify
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/mail"
|
||||
"net/smtp"
|
||||
|
||||
"github.com/scorredoira/email"
|
||||
)
|
||||
|
||||
type SmtpAuth struct {
|
||||
Addr string
|
||||
Auth smtp.Auth
|
||||
}
|
||||
|
||||
func SendEmailHTML(auth SmtpAuth, message, subject string, from mail.Address, to ...mail.Address) error {
|
||||
if len(to) == 0 {
|
||||
return errors.New("expected least one receiver")
|
||||
}
|
||||
mes := email.NewMessage(subject, message)
|
||||
mes.BodyContentType = "text/html;"
|
||||
mes.From = from
|
||||
for _, ito := range to {
|
||||
mes.AddTo(ito)
|
||||
}
|
||||
return email.Send(auth.Addr, auth.Auth, mes)
|
||||
}
|
||||
|
||||
func SenndEmailMessage(auth SmtpAuth, mes *email.Message) error {
|
||||
return email.Send(auth.Addr, auth.Auth, mes)
|
||||
}
|
||||
7
go.mod
7
go.mod
@@ -4,10 +4,9 @@ go 1.25.1
|
||||
|
||||
require (
|
||||
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1
|
||||
github.com/mattn/go-runewidth v0.0.19
|
||||
github.com/scorredoira/email v0.0.0-20191107070024-dc7b732c55da
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.19 // indirect
|
||||
)
|
||||
require github.com/clipperhouse/uax29/v2 v2.2.0 // indirect
|
||||
|
||||
2
go.sum
2
go.sum
@@ -4,6 +4,8 @@ github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1 h1:wG8n/XJQ07TmjbITcGi
|
||||
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1/go.mod h1:A2S0CWkNylc2phvKXWBBdD3K0iGnDBGbzRpISP2zBl8=
|
||||
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
|
||||
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
|
||||
github.com/scorredoira/email v0.0.0-20191107070024-dc7b732c55da h1:hhmnjfzz7szp75AyXxn8tDfEA0oU4REQLmpuW6zNAOY=
|
||||
github.com/scorredoira/email v0.0.0-20191107070024-dc7b732c55da/go.mod h1:Q5ljvYIBpukMH+wgB8kcPV1i9NX8TqU++8GgBKq3pt0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
|
||||
55
telegram.go
55
telegram.go
@@ -55,6 +55,10 @@ func NewTelegram(token string, disableIPV6 bool) (*Bot, error) {
|
||||
return bot, nil
|
||||
}
|
||||
|
||||
func (s *Bot) GetAPI() *tgbotapi.BotAPI {
|
||||
return s.api
|
||||
}
|
||||
|
||||
func (s *Bot) SendTextMessage(chatID int64, text string) (tgbotapi.Message, error) {
|
||||
message := tgbotapi.NewMessage(chatID, text)
|
||||
message.ParseMode = "Markdown"
|
||||
@@ -66,3 +70,54 @@ func (s *Bot) SendHTMLMessage(chatID int64, text string) (tgbotapi.Message, erro
|
||||
message.ParseMode = "HTML"
|
||||
return s.api.Send(message)
|
||||
}
|
||||
|
||||
func (s *Bot) SendPhotoFromFile(chatID int64, filePath string, caption string) (tgbotapi.Message, error) {
|
||||
photo := tgbotapi.NewPhoto(chatID, tgbotapi.FilePath(filePath))
|
||||
photo.Caption = caption
|
||||
photo.ParseMode = "Markdown" // или "HTML"
|
||||
return s.api.Send(photo)
|
||||
}
|
||||
|
||||
func (s *Bot) SendPhotoFromURL(chatID int64, fileURL string, caption string) (tgbotapi.Message, error) {
|
||||
photo := tgbotapi.NewPhoto(chatID, tgbotapi.FileURL(fileURL))
|
||||
photo.Caption = caption
|
||||
photo.ParseMode = "Markdown"
|
||||
return s.api.Send(photo)
|
||||
}
|
||||
|
||||
func (s *Bot) SendPhotoFromBytes(chatID int64, data []byte, filename string, caption string) (tgbotapi.Message, error) {
|
||||
file := tgbotapi.FileBytes{
|
||||
Name: filename,
|
||||
Bytes: data,
|
||||
}
|
||||
photo := tgbotapi.NewPhoto(chatID, file)
|
||||
photo.Caption = caption
|
||||
photo.ParseMode = "Markdown"
|
||||
return s.api.Send(photo)
|
||||
}
|
||||
|
||||
func (s *Bot) SendDocumentFromFile(chatID int64, filePath string, caption string) (tgbotapi.Message, error) {
|
||||
doc := tgbotapi.NewDocument(chatID, tgbotapi.FilePath(filePath))
|
||||
doc.Caption = caption
|
||||
doc.ParseMode = "Markdown"
|
||||
return s.api.Send(doc)
|
||||
}
|
||||
|
||||
func (s *Bot) SendDocumentFromURL(chatID int64, fileURL string, caption string) (tgbotapi.Message, error) {
|
||||
doc := tgbotapi.NewDocument(chatID, tgbotapi.FileURL(fileURL))
|
||||
doc.Caption = caption
|
||||
doc.ParseMode = "Markdown"
|
||||
return s.api.Send(doc)
|
||||
}
|
||||
|
||||
func (s *Bot) SendDocumentFromBytes(chatID int64, data []byte, filename string, caption string) (tgbotapi.Message, error) {
|
||||
file := tgbotapi.FileBytes{
|
||||
Name: filename,
|
||||
Bytes: data,
|
||||
}
|
||||
|
||||
doc := tgbotapi.NewDocument(chatID, file)
|
||||
doc.Caption = caption
|
||||
doc.ParseMode = "Markdown"
|
||||
return s.api.Send(doc)
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package notify_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"git.gm6.ru/icewind/notify"
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
@@ -13,6 +15,14 @@ type ConfigTelegram struct {
|
||||
Token string `yaml:"token"`
|
||||
}
|
||||
|
||||
func loadText(t *testing.T) []byte {
|
||||
cData, err := os.ReadFile("test_data/text.txt")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return cData
|
||||
}
|
||||
|
||||
func loadConfig(t *testing.T) (conf ConfigTelegram) {
|
||||
cData, err := os.ReadFile("test_data/telegram.yaml")
|
||||
if err != nil {
|
||||
@@ -63,3 +73,58 @@ func TestSendTable(t *testing.T) {
|
||||
}
|
||||
t.Log(m)
|
||||
}
|
||||
|
||||
func TestTelegramUpdate(t *testing.T) {
|
||||
conf := loadConfig(t)
|
||||
bot, err := notify.NewTelegram(conf.Token, true)
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
u := tgbotapi.NewUpdate(0)
|
||||
|
||||
u.AllowedUpdates = []string{
|
||||
"message",
|
||||
"chat_member",
|
||||
"my_chat_member",
|
||||
}
|
||||
|
||||
u.Timeout = 30
|
||||
|
||||
for {
|
||||
updates, err := bot.GetAPI().GetUpdates(u)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(updates) > 0 {
|
||||
data, _ := json.Marshal(updates)
|
||||
t.Log(string(data))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTelegramDocument(t *testing.T) {
|
||||
conf := loadConfig(t)
|
||||
bot, err := notify.NewTelegram(conf.Token, true)
|
||||
|
||||
text := loadText(t)
|
||||
|
||||
caption := `Голотип номинативного подвида был собран на склонах горы Натсфорд в горах Оуэн-Стэнли. Он был описан английским орнитологом Чарлзом Де Висом в 1890 году. В том же году Адольф Питер Гудвин (Adolph Peter Goodwin) описал синонимичный вид Xanthomelus macgregori, полученный на том же хребте, но на горе Масгрейв[14]. Птицы этого подвида обитают в юго-восточной части Новой Гвинеи от водораздела Экути (Ekuti Divide) южнее города Вау до горы Натсфорд и Порт-Морсби[14][11]. Возможно, ареал простирается ещё южнее[14], юго-восточные границы ареала неизвестны[11]. Международный союз охраны природы (МСОП) приводит площадь ареала (англ. Estimated extent of occurrence) этого подвида 10 800 км²[15].
|
||||
Подвид C. m. sanguineus был описан австралийским орнитологом Томом Айрдейлом в 1948 году как самостоятельный вид на основе экземпляров, добытых капитаном Нептьюном Бладом (Neptune B. Blood) в 1944—1945 годах в окрестностях города Маунт-Хаген в провинции Уэстерн-Хайлендс в центральной части Папуа — Новой Гвинеи. Птицы этого подвида распространены на нагорье Кайенде, горе Гилуве, вулкане Хаген и далее на восток до гор Бисмарка и хребта Кубор[себ.] в восточной части острова. К этому же подвиду относят популяцию в центральной части острова, обитающую на высокогорьях к северу от озера Хаббема (Lake Habbema)[14]. МСОП приводит площадь ареала этого подвида 87 600 км²[16]. У самцов C. m. sanguineus длина крыла составляет 110—118 мм, у самок — 101—115 мм, длина хвоста — 86-96 мм и 80—97 мм, клюва — 26—31 мм и 23—28 мм, цевки — 38—44 мм и 38—43 мм, соответственно[14].
|
||||
Синонимичным ему является подвид C. m. kuboriensis, который был описан американскими орнитологами Эрнстом Майром и Эрнестом Гиллиардом[англ.] в 1954 году на основе экземпляра самца, пойманного на хребте Кубор на высоте 2760 метров в мае 1952 года. Причиной выделения в отдельный подвид был назван более насыщенный красноватый верх и менее красный налёт снизу, а также более короткий хвост и более длинные крылья[14]. Экземпляр птицы, полученный британским орнитологом Реджиналдом Симсом (Reginald William Sims) в тех же горах в 1953 году, не отличался раскраской оперения от C. m. sanguineus[17]. Современные учёные синонимизируют C. m. kuboriensis и C. m. sanguineus в силу изменчивости и незначительности указанных признаков[14].
|
||||
Основное отличие подвидов заключается в окраске самцов в верхней части тела, оттенки окраски остального оперения менее показательны. Чёткое разделение подвидов затруднено из-за промежуточного положения птиц, обитающих на хребте Кратке[англ.] в восточной части острова[14]. Не совсем ясно, к какому подвиду отнести популяцию на западе ареала (то есть на границе двух стран). Американские учёные Брюс Билер[англ.] и Тейн Пратт[англ.] в 2016 году предлагали выделить её в отдельный таксон, для которого, однако, не смогли определить географические границы[14]. `
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err, bot)
|
||||
}
|
||||
_, err = bot.SendDocumentFromBytes(
|
||||
conf.GroupID,
|
||||
text,
|
||||
"1.txt",
|
||||
caption,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user