Skip to content

Instantly share code, notes, and snippets.

@fzerorubigd
Created July 6, 2015 19:39
Show Gist options
  • Select an option

  • Save fzerorubigd/b34a69d94f0e5ff1377a to your computer and use it in GitHub Desktop.

Select an option

Save fzerorubigd/b34a69d94f0e5ff1377a to your computer and use it in GitHub Desktop.
a simple example robot for telegram
package main
import (
"image"
_ "image/png"
"io/ioutil"
"log"
"os"
"os/exec"
"regexp"
"time"
"github.com/tucnak/telebot"
)
var bot *telebot.Bot
func getImageDimension(imagePath string) (int, int, error) {
file, err := os.Open(imagePath)
if err != nil {
return 0, 0, err
}
defer file.Close()
image, _, err := image.DecodeConfig(file)
if err != nil {
return 0, 0, err
}
return image.Width, image.Height, nil
}
func snapshot(url string, message telebot.Message) {
tmp, err := ioutil.TempFile("", "bot")
if err != nil {
bot.SendMessage(message.Chat, "Sorry but there is an error :) "+err.Error(), nil)
return
}
log.Print("getting snapshot of " + url)
f := tmp.Name()
tmp.Close()
defer os.Remove(f)
cmd := exec.Command("wkhtmltoimage", "-f", "png", url, f+".png")
cmd.Start()
err = cmd.Wait()
if err != nil {
bot.SendMessage(message.Chat, "Sorry but there is an error in getting the screen shot :) "+err.Error(), nil)
return
}
defer os.Remove(f + ".png")
log.Print("get size")
w, h, err := getImageDimension(f + ".png")
if err != nil {
bot.SendMessage(message.Chat, "Sorry but there is an error in getting the screen shot :) "+err.Error(), nil)
return
}
file, err := telebot.NewFile(f + ".png")
if err != nil {
bot.SendMessage(message.Chat, "Sorry but there is an error :) "+err.Error(), nil)
return
}
photo := &telebot.Photo{Thumbnail: telebot.Thumbnail{File: file, Width: w, Height: h}, Caption: "the url result"}
log.Print("sending...")
err = bot.SendPhoto(message.Chat, photo, nil)
if err != nil {
bot.SendMessage(message.Chat, "Sorry but there is an error :) "+err.Error(), nil)
return
}
log.Print("done...")
}
var accept = regexp.MustCompile("^/snap[ ]+(.*)$")
func main() {
var err error
bot, err = telebot.NewBot("-------------------------------------------")
if err != nil {
return
}
messages := make(chan telebot.Message)
bot.Listen(messages, 1*time.Second)
for message := range messages {
match := accept.FindStringSubmatch(message.Text)
if len(match) > 1 {
go snapshot(match[1], message)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment