-
-
Save zaz600/1e073c716b2b38254cc6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"github.com/Syfaro/telegram-bot-api" | |
"github.com/carbocation/go-instagram/instagram" | |
"log" | |
) | |
type InstagramResponse struct { | |
url string | |
m tgbotapi.Message | |
} | |
var ( | |
// Канал, куда будем помещать запросы к инстаграму | |
instagram_req chan tgbotapi.Message | |
// Канал, куда будем помещать ответы на запросы к инстаграму | |
instagram_res chan InstagramResponse | |
) | |
func main() { | |
// создаем канал для запросов к инстаграму | |
instagram_req = make(chan tgbotapi.Message, 5) | |
go get_ig_popular() | |
instagram_res = make(chan InstagramResponse, 5) | |
// подключаемся к боту с помощью токена | |
bot, err := tgbotapi.NewBotAPI("ТОКЕН") // вставить свой | |
if err != nil { | |
log.Panic(err) | |
} | |
bot.Debug = true | |
log.Printf("Authorized on account %s", bot.Self.UserName) | |
// инициализируем канал, куда будут прилетать обновления от API | |
var ucfg tgbotapi.UpdateConfig = tgbotapi.NewUpdate(0) | |
ucfg.Timeout = 60 | |
err = bot.UpdatesChan(ucfg) | |
// читаем обновления из канала | |
for { | |
select { | |
case update := <-bot.Updates: | |
// Пользователь, который написал боту | |
UserName := update.Message.From.UserName | |
UserID := update.Message.From.ID | |
// ID чата/диалога. | |
// Может быть идентификатором как чата с пользователем | |
// (тогда он равен UserID) так и публичного чата/канала | |
ChatID := update.Message.Chat.ID | |
// Текст сообщения | |
Text := update.Message.Text | |
log.Printf("[%s] %d %d %s", UserName, UserID, ChatID, Text) | |
var reply string | |
msg := tgbotapi.NewMessage(ChatID, "") | |
if update.Message.NewChatParticipant.UserName != "" { | |
// В чат вошел новый пользователь | |
// Поприветствуем его | |
reply = fmt.Sprintf(`Привет @%s! Я тут слежу за порядком. Веди себя хорошо.`, | |
update.Message.NewChatParticipant.UserName) | |
} | |
if Text == "/instarandom" { | |
instagram_req <- update.Message | |
//reply = get_ig_popular() | |
//msg.ReplyToMessageID = update.Message.MessageID | |
} | |
if reply != "" { | |
// Созадаем сообщение | |
msg.Text = reply | |
// и отправляем его | |
bot.SendMessage(msg) | |
} | |
case resp := <-instagram_res: | |
// отправляем инстаграм-ссылку пользователю | |
msg := tgbotapi.NewMessage(resp.m.Chat.ID, resp.url) | |
msg.ReplyToMessageID = resp.m.MessageID | |
bot.SendMessage(msg) | |
} | |
} | |
} | |
// Читает канал с запросами к инстаграму | |
// Получает популярное фото и отправляет в канал ответов ссылку | |
func get_ig_popular() { | |
// создаем и настраиваем клиента | |
instagram_client := instagram.NewClient(nil) | |
instagram_client.ClientID = "ClientID" // вставить свой | |
//opt := &instagram.Parameters{Count: 1} | |
for { | |
for msg := range instagram_req { | |
// запрашиваем популярные фото | |
media, _, err := instagram_client.Media.Popular() //Tags.RecentMedia("instasky", opt) //.Media.Popular() | |
if err != nil { | |
log.Println(err) | |
continue | |
} | |
// возвращаем ссылку на первое фото из списка | |
if len(media) > 0 { | |
instagram_res <- InstagramResponse{media[0].Link, msg} | |
} | |
} | |
} | |
} |
Спасибо большое за отличный гайд. Очень помог
Еще не хватает инструкции, как задеплоить на хероку например :)
Хороший гайд, но, увы, уже не актуальный. Как и с инстаграмом (эта библиотека устарелаи ей никто не занимается), так и telegram bot api
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
В новой версии:
https://gist.github.com/zaz600/1e073c716b2b38254cc6#file-go-tg-bot3-go-L40
updates, err := bot.GetUpdatesChan(ucfg)