Как отправить приватное сообщение администратору закрытого канала в Telegram, используя Telegram Bot на Go и зная ID канала?

Как определить, из какого канала пришло сообщение, при пересылке сообщений из закрытого канала Telegram в бота через связку id канала и userName в мапе? Как можно усовершенствовать данный код для новой цели определения источника сообщения?
  • 7 июня 2024 г. 18:11
Ответы на вопрос 1
1. Для отправки приватного сообщения администратору закрытого канала в Telegram с помощью Telegram Bot на Go и зная ID канала, вы можете воспользоваться следующим кодом:

```go
package main

import (
	"log"
	"os"

	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
)

func main() {
	bot, err := tgbotapi.NewBotAPI("YOUR_BOT_TOKEN")
	if err != nil {
		log.Panic(err)
	}

	channelID := -123456789 // ID вашего закрытого канала
	adminID := 123456789    // ID администратора канала

	msg := tgbotapi.NewMessage(adminID, "Привет! Это приватное сообщение администратору канала.")
	msg.ParseMode = "HTML"

	_, err = bot.Send(msg)
	if err != nil {
		log.Panic(err)
	}
}
```

Замените `"YOUR_BOT_TOKEN"` на токен вашего бота, `channelID` на ID вашего закрытого канала, а `adminID` на ID администратора канала. Этот код отправит приватное сообщение администратору канала.

2. Для того, чтобы определить, из какого канала пришло сообщение при пересылке сообщений в бот из закрытого канала через связку ID канала и userName в мапе, вы можете усовершенствовать код следующим образом:

```go
package main

import (
	"log"
	"os"
	"fmt"
	"strings"

	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
)

func handleMessage(update tgbotapi.Update) {
	var channelID = update.Message.ForwardFromChat.ID
	var channelUserName = update.Message.ForwardFromChat.UserName

	if channelID != 0 {
		fmt.Printf("Сообщение из канала с ID %d и userName %s\n", channelID, channelUserName)
	} else {
		fmt.Println("Не удалось определить источник сообщения")
	}
}

func main() {
	bot, err := tgbotapi.NewBotAPI("YOUR_BOT_TOKEN")
	if err != nil {
		log.Panic(err)
	}

	bot.Debug = true

	updates := bot.ListenForWebhook("/" + bot.Token)
	go http.ListenAndServe("0.0.0.0:"+os.Getenv("PORT"), nil)

	for update := range updates {
		handleMessage(update)
	}
}
```

Этот код будет выводить информацию о канале, из которого было переслано сообщение, на которое ваш бот отвечает. Используйте данное усовершенствование для определения источника сообщения на ваш взгляд.
Похожие вопросы