package main import ( "log" "os" "strconv" ) func main() { log.Println("Go Chat Bridge запущен.") telegramToken := os.Getenv("TELEGRAM_TOKEN") discordToken := os.Getenv("DISCORD_TOKEN") vkToken := os.Getenv("VK_TOKEN") if telegramToken == "" || discordToken == "" || vkToken == "" { log.Fatal("Необходимо задать переменные окружения TELEGRAM_TOKEN, DISCORD_TOKEN, VK_TOKEN") } bridge, err := NewBridge(telegramToken, discordToken, vkToken) if err != nil { log.Fatalf("Ошибка инициализации Bridge: %v", err) } log.Println("Bridge успешно инициализирован:", bridge) // Получаем ID чатов/каналов из переменных окружения telegramChatID := os.Getenv("TELEGRAM_CHAT_ID") // int64 discordChannelID := os.Getenv("DISCORD_CHANNEL_ID") // string vkPeerID := os.Getenv("VK_PEER_ID") // int forward := func(text string, from string) { log.Printf("[Bridge] Пересылка сообщения от %s: %s", from, text) // Определяем источник и рассылаем в остальные платформы switch { case from == "telegram": // В Discord и VK if discordChannelID != "" { _ = bridge.SendToDiscord(discordChannelID, "[TG] "+from+": "+text) } if vkPeerID != "" { if id, err := strconv.Atoi(vkPeerID); err == nil { _ = bridge.SendToVK(id, "[TG] "+from+": "+text) } } case from == "discord": // В Telegram и VK if telegramChatID != "" { if id, err := strconv.ParseInt(telegramChatID, 10, 64); err == nil { _ = bridge.SendToTelegram(id, "[DS] "+from+": "+text) } } if vkPeerID != "" { if id, err := strconv.Atoi(vkPeerID); err == nil { _ = bridge.SendToVK(id, "[DS] "+from+": "+text) } } default: // Считаем, что from — это VK ID if telegramChatID != "" { if id, err := strconv.ParseInt(telegramChatID, 10, 64); err == nil { _ = bridge.SendToTelegram(id, "[VK] VK ID "+from+": "+text) } } if discordChannelID != "" { _ = bridge.SendToDiscord(discordChannelID, "[VK] VK ID "+from+": "+text) } } } bridge.StartTelegramListener(func(text, from string) { forward(text, from) }) bridge.StartDiscordListener(func(text, from string) { forward(text, from) }) bridge.StartVKListener(func(text, _ string) { forward(text, "vk") }) select {} // Блокируем main, чтобы слушатели работали }