Answer the question
In order to leave comments, you need to log in
How to forward the same message to the sender using tgbotapi in golang?
Hello, actually the question itself is in the header. Difficulties with replying to ordinary messages (text messages) do not arise. But, I would like to implement reply pictures, voice messages and stickers. But here I would like to know specifically how to implement the sending of voice messages to the sender
Answer the question
In order to leave comments, you need to log in
audioUpload := tgbotapi.NewAudioUpload(update.Message.Chat.ID, ...)
audioUpload.ReplyMarkup = update.Message.MessageID
_, err := bot.Send(audioUpload)
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)
}
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)
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question