package main import ( "strconv" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "github.com/bwmarrin/discordgo" "github.com/SevereCloud/vksdk/v2/api" "net/http" "net/url" "fmt" "io" "os" ) // Отправка сообщения на сайт func (b *Bridge) SendToSite(text string) error { apiURL := os.Getenv("SITE_API_URL") token := os.Getenv("SITE_API_TOKEN") if apiURL == "" || token == "" { return fmt.Errorf("SITE_API_URL или SITE_API_TOKEN не заданы") } fullURL := fmt.Sprintf("%s?token=%s&text=%s", apiURL, token, url.QueryEscape(text)) req, err := http.NewRequest("GET", fullURL, nil) if err != nil { return err } req.Header.Set("Accept", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() _, err = io.ReadAll(resp.Body) return err } // Получить имя пользователя VK по id func (b *Bridge) GetVKUserName(userID int) (string, error) { resp, err := b.VK.UsersGet(api.Params{"user_ids": userID}) if err != nil || len(resp) == 0 { return strconv.Itoa(userID), err } return resp[0].FirstName + " " + resp[0].LastName, nil } // Структура для хранения клиентов type Bridge struct { Telegram *tgbotapi.BotAPI Discord *discordgo.Session VK *api.VK } func NewBridge(telegramToken, discordToken, vkToken string) (*Bridge, error) { // Telegram tgBot, err := tgbotapi.NewBotAPI(telegramToken) if err != nil { return nil, err } // Discord dg, err := discordgo.New("Bot " + discordToken) if err != nil { return nil, err } // VK vk := api.NewVK(vkToken) return &Bridge{ Telegram: tgBot, Discord: dg, VK: vk, }, nil } // Отправка сообщения в Telegram func (b *Bridge) SendToTelegram(chatID int64, text string) error { msg := tgbotapi.NewMessage(chatID, text) _, err := b.Telegram.Send(msg) return err } // Отправка сообщения в Discord func (b *Bridge) SendToDiscord(channelID, text string) error { _, err := b.Discord.ChannelMessageSend(channelID, text) return err } // Отправка сообщения в VK func (b *Bridge) SendToVK(peerID int, text string) error { _, err := b.VK.MessagesSend(api.Params{ "peer_id": peerID, "message": text, "random_id": 0, }) return err }