Update max.go

This commit is contained in:
artemws 2026-03-26 18:26:00 +02:00 committed by GitHub
parent 364aab9730
commit f2be13a0fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

30
max.go
View file

@ -2,6 +2,7 @@ package main
import (
"context"
"errors"
"fmt"
"log/slog"
"net/http"
@ -114,11 +115,11 @@ func (b *Bridge) listenMax(ctx context.Context) {
if mediaURL != "" {
// Скачиваем медиа и отправляем editMessageMedia
data, dlErr := b.downloadURL(mediaURL)
data, name, dlErr := b.downloadURLWithLimit(mediaURL, b.cfg.maxMaxFileBytes())
if dlErr != nil {
slog.Error("MAX→TG edit media download failed", "err", dlErr)
} else {
fb := tgbotapi.FileBytes{Name: fileNameFromURL(mediaURL), Bytes: data}
fb := tgbotapi.FileBytes{Name: name, Bytes: data}
var media interface{}
switch mediaType {
case "photo":
@ -144,7 +145,7 @@ func (b *Bridge) listenMax(ctx context.Context) {
if _, err := b.tgBot.Send(editMedia); err != nil {
slog.Error("MAX→TG edit media failed", "err", err, "uid", editUpd.Message.Sender.UserId)
// Fallback — отправляем как новое сообщение
go b.sendTgMediaFromURL(tgChatID, mediaURL, mediaType, fwd, "", 0)
go b.sendTgMediaFromURL(tgChatID, mediaURL, mediaType, fwd, "", 0, b.cfg.maxMaxFileBytes())
} else {
slog.Info("MAX→TG edited media", "tgMsg", tgMsgID, "type", mediaType, "uid", editUpd.Message.Sender.UserId)
}
@ -973,7 +974,15 @@ func (b *Bridge) forwardMaxToTg(ctx context.Context, msgUpd *maxschemes.MessageC
if len(albumMedia) == 1 {
// Одно вложение — отправляем обычным сообщением (альбом из 1 элемента не имеет reply)
sent, sendErr = b.sendTgMediaFromURL(tgChatID, qAttURL, qAttType, htmlCaption, pm, replyToID)
sent, sendErr = b.sendTgMediaFromURL(tgChatID, qAttURL, qAttType, htmlCaption, pm, replyToID, b.cfg.maxMaxFileBytes())
var e *ErrFileTooLarge
if errors.As(sendErr, &e) {
slog.Warn("MAX→TG media too big", "name", e.Name, "size", e.Size)
m := maxbot.NewMessage().SetChat(chatID).SetText(
fmt.Sprintf("⚠️ Файл \"%s\" слишком большой для пересылки (%s). Максимальный размер файла %d МБ.",
e.Name, formatFileSize(int(e.Size)), b.cfg.MaxMaxFileSizeMB))
b.maxApi.Messages.Send(ctx, m)
}
} else {
// Несколько — отправляем как media group (альбом)
cfg := tgbotapi.NewMediaGroup(tgChatID, albumMedia)
@ -992,9 +1001,18 @@ func (b *Bridge) forwardMaxToTg(ctx context.Context, msgUpd *maxschemes.MessageC
// Отправляем остальные вложения (аудио, файлы, стикеры) по одному
for _, sm := range soloMedia {
s, err := b.sendTgMediaFromURL(tgChatID, sm.url, sm.attType, "", "", 0, sm.name)
s, err := b.sendTgMediaFromURL(tgChatID, sm.url, sm.attType, "", "", 0, b.cfg.maxMaxFileBytes(), sm.name)
if err != nil {
slog.Error("MAX→TG solo media send failed", "type", sm.attType, "err", err)
var e *ErrFileTooLarge
if errors.As(err, &e) {
slog.Warn("MAX→TG solo media too big", "name", e.Name, "size", e.Size)
m := maxbot.NewMessage().SetChat(chatID).SetText(
fmt.Sprintf("⚠️ Файл \"%s\" слишком большой для пересылки (%s). Максимальный размер файла %d МБ.",
e.Name, formatFileSize(int(e.Size)), b.cfg.MaxMaxFileSizeMB))
b.maxApi.Messages.Send(ctx, m)
} else {
slog.Error("MAX→TG solo media send failed", "type", sm.attType, "err", err)
}
if sendErr == nil {
sendErr = err
}