Ответы пользователя по тегу Telegram
  • Как застаставить бота считывать подпись к фото в телеграмм?

    @ghostiam
    На Go писатель, серверов пинатель.
    У объекта с фото есть параметр caption, там и будет находиться текст
    Ответ написан
  • Как заставить telegram бота ловить media group?

    @ghostiam
    На Go писатель, серверов пинатель.
    У структуры Message есть поле MediaGroupID
    Потом получаете все медиа файлы из сообщения и формируете новую отправку медиа группы.

    По поводу того, что приходит несколько запросов с одной медиа группой
    Решение приведено тут:
    https://stackoverflow.com/questions/50180048/teleg...

    Ответ на старый вопрос
    В документации к апи телеграмма есть специальная функция, поищите её в вашей библиотеке или напишите сами.
    https://core.telegram.org/bots/api#sendmediagroup

    Upd:
    MediaGroupConfig configs.go#L661
    Ответ написан
  • Как в golang с помощью tgbotapi переслать отправителю его же сообщение?

    @ghostiam
    На Go писатель, серверов пинатель.
    Старый ответ

    как и с сообщениями, у созданных объектов есть свойство ReplyToMessageID в которое нужно записать ID сообщения из update.Message.MessageID
    audioUpload := tgbotapi.NewAudioUpload(update.Message.Chat.ID, ...)
    audioUpload.ReplyMarkup = update.Message.MessageID
    _, err := bot.Send(audioUpload)


    Если возникает вопрос, как вообще отправить файл, то нужно передать структуру tgbotapi.FileBytes или tgbotapi.FileReader вторым параметром в функцию и заполнить её.
    Для примера, отправляем файл с диска:
    file, err := os.Open("audio.mp3")
    		if err != nil {
    			panic(err)
    		}
    		defer file.Close()
    
    		audioUpload := tgbotapi.NewAudioUpload(update.Message.Chat.ID, tgbotapi.FileReader{
    			Name:   "audio.mp3",
    			Reader: file,
    			Size:   -1, // If Size is -1, it will read the entire Reader into memory to calculate a Size.
    		})
    		audioUpload.ReplyToMessageID = update.Message.MessageID
    		_, err := bot.Send(audioUpload)
    		if err != nil {
    			panic(err)
    		}



    UPD: После общения в ЛС, оказалось, что вопрос заключался в создании Echo бота, который мог бы пересылать не только текст, но и картинки, аудио и прочее.

    В данном примере реализована отправка только текста и картинок. Чтобы добавить обработку других типов сообщений, нужно добавить новый `case` в `switch` в функции `OnMessage`:
    Код
    package main
    
    import (
    	"log"
    
    	"github.com/davecgh/go-spew/spew"
    	"github.com/go-telegram-bot-api/telegram-bot-api"
    )
    
    func main() {
    	// подключаемся к боту с помощью токена
    	bot, err := tgbotapi.NewBotAPI("ТОКЕН")
    	if err != nil {
    		log.Panic(err)
    	}
    
    	bot.Debug = true
    	log.Printf("Authorized on account %s", bot.Self.UserName)
    
    	// инициализируем канал, куда будут прилетать обновления от API
    	u := tgbotapi.NewUpdate(0)
    	u.Timeout = 60
    
    	updates, err := bot.GetUpdatesChan(u)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	// читаем обновления из канала
    	for update := range updates {
    		switch {
    		case update.Message != nil: // Если было прислано сообщение, то обрабатываем, так как могут приходить не только сообщения.
    			OnMessage(bot, update.Message)
    		}
    	}
    }
    
    func OnMessage(bot *tgbotapi.BotAPI, message *tgbotapi.Message) {
    	// Пользователь, который написал боту
    	userName := message.From.UserName
    
    	// ID чата/диалога.
    	// Может быть идентификатором как чата с пользователем
    	// (тогда он равен UserID) так и публичного чата/канала
    	chatID := message.Chat.ID
    
    	log.Printf("[%s] %d", userName, chatID)
    
    	spew.Dump(message) // выводим то что пришло (Для отладки!!!)
    
    	var msg tgbotapi.Chattable
    	switch {
    	case message.Text != "": // Текстовое ли сообщение?
    		msg = tgbotapi.NewMessage(chatID, message.Text)
    
    	case message.Photo != nil: // Это фото?
    		photoArray := *message.Photo
    		photoLastIndex := len(photoArray) - 1
    		photo := photoArray[photoLastIndex] // Получаем последний элемент массива (самую большую картинку)
    		msg = tgbotapi.NewPhotoShare(chatID, photo.FileID)
    
    	default:                                                 // Если не одно условие не сработало
    		msg = tgbotapi.NewMessage(chatID, "Не реализовано") // Отправляется на тот тип сообщения, который ещё не реализован выше ^
    	}
    
    	// и отправляем его
    	_, err := bot.Send(msg)
    	if err != nil {
    		log.Println(err)
    	}
    }
    Ответ написан
  • Почему при заходе на сайт https://core.telegram.org возникает ошибка: "Ошибка при установлении защищённого соединения"?

    @ghostiam
    На Go писатель, серверов пинатель.
    IP 5.3.3.17 российский, если верить сервису https://ipinfo.io/5.3.3.17
    значит, у вас подменили DNS ответ и заменили в нём настоящий IP.
    В таком случае не поможет и VPN, так как у вас уже подменили IP.

    Вам нужно или заменить DNS провайдера, например на 1.1.1.1 (CloudFlare) или 8.8.8.8 (Google), или, если ваш провайдер перехватывает и подменяет любые DNS ответы, то использовать уже DNSSec.

    Вот ответ от DNS у меня:
    $ dig core.telegram.org
    ...
    
    ;; ANSWER SECTION:
    core.telegram.org.	600	IN	A	149.154.167.99
    
    ...
    Ответ написан