125 lines
4.5 KiB
Go
125 lines
4.5 KiB
Go
package main
|
||
|
||
import (
|
||
"bytes"
|
||
"encoding/json"
|
||
"fmt"
|
||
"log"
|
||
"net/http"
|
||
"strings"
|
||
"os"
|
||
|
||
"github.com/yanzay/tbot/v2"
|
||
"github.com/PuerkitoBio/goquery"
|
||
ocr "github.com/ranghetto/go_ocr_space"
|
||
)
|
||
|
||
// Handle the /start command here
|
||
func (a *application) startHandler(m *tbot.Message) {
|
||
msg := "\n*Привет!* Присылай сообщение и я его переведу.\n\nДля обычного текста:\n*en**ru*Hello, World!" +
|
||
"\nДля текста на фотографии:\n*en**ru*https://website.com/file\n\nГде *en* - это язык текста, " +
|
||
"а *ru* - язык перевода.\nДля *OCR* без перевода используй одинаковые языки.\n\nКоды языков:\n*ru* - Русский; " +
|
||
"*en* - Английский; *ar* - Арабский; *zh* - Китайский; \n*fr* - Французкий; *de* - Немецкий; *hi* - Индийский; " +
|
||
"\n*id* - Индонезийский; *ga* - Ирландский; *it* - Итальянский; \n*ja* - Японский; *ko* - Корейский; " +
|
||
"*pl* - Польский; *pt* - Португальский; \n*es* - Испанский; *tr* - Турецкий; *vi* - Вьетнамский."
|
||
a.client.SendMessage(m.Chat.ID, msg, tbot.OptParseModeMarkdown)
|
||
}
|
||
|
||
// Handle the msg command here
|
||
func (a *application) msgHandler(m *tbot.Message) {
|
||
a.client.SendChatAction(m.Chat.ID, tbot.ActionTyping)
|
||
msg := ""
|
||
source := ""
|
||
target := ""
|
||
text := ""
|
||
languages := map[string]string{
|
||
"ru": "rus",
|
||
"en": "eng",
|
||
"ar": "ara",
|
||
"zh": "chs",
|
||
"fr": "fre",
|
||
"de": "ger",
|
||
"it": "kor",
|
||
"ja": "jpn",
|
||
"pl": "pol",
|
||
"pt": "por",
|
||
"tr": "tur",
|
||
"hi": "Распознование хинди не поддерживается.",
|
||
"id": "Распознование индонезийского не поддерживается.",
|
||
"ga": "Распознование ирландского не поддерживается.",
|
||
"es": "Распознование испанского не поддерживается.",
|
||
"vi": "Распознование вьетнамского не поддерживается.",
|
||
}
|
||
if len(m.Text) > 4{
|
||
source = strings.ToLower(m.Text[:len(m.Text)-(len(m.Text)-2)])
|
||
target = m.Text[:len(m.Text)-(len(m.Text)-4)]
|
||
target = strings.ToLower(target[len(target)-2:])
|
||
text = m.Text[len(m.Text)-(len(m.Text)-4):]
|
||
if languages[source] == ""{
|
||
msg = "Неправильный код языка текста!\nПосмотри коды командой */start*."
|
||
} else if languages[target] == ""{
|
||
msg = "Неправильный код языка перевода!\nПосмотри коды командой */start*."
|
||
}
|
||
}else{
|
||
msg = "Слишком короткое сообщение!\nПосмотри на пример командой */start*."}
|
||
if msg == "" && len(m.Text) > 12{
|
||
ocryes := strings.ToLower(text[:len(text)-(len(text)-8)])
|
||
if ocryes[:len(ocryes)-4] == "http" {
|
||
res, err := http.Get("https://status.ocr.space/")
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
defer res.Body.Close()
|
||
if res.StatusCode != 200 {
|
||
log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
|
||
}
|
||
doc, err := goquery.NewDocumentFromReader(res.Body)
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
doc.Find("span").Each(func(i int, s *goquery.Selection) {
|
||
fruw := ""
|
||
if i == 0 {
|
||
fruw = strings.Trim(s.Text(), " ")
|
||
if fruw != "UP" {
|
||
msg = "В данный момент сервера OCR недоступны."
|
||
}
|
||
}
|
||
})}
|
||
if msg == "" && ocryes[:len(ocryes)-4] == "http"{
|
||
//токен + язык
|
||
config := ocr.InitConfig(os.Getenv("OCR_TOKEN"), languages[source])
|
||
//урл
|
||
result, err := config.ParseFromUrl(text)
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
//вывод текста
|
||
text = fmt.Sprintln(result.JustText())
|
||
}
|
||
}
|
||
if msg == ""{
|
||
message := map[string]interface{}{
|
||
"q": text,
|
||
"source": source,
|
||
"target": target,
|
||
}
|
||
bytesRepresentation, err := json.Marshal(message)
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
|
||
resp, err := http.Post("https://trans.zillyhuhn.com/translate", "application/json",
|
||
bytes.NewBuffer(bytesRepresentation))
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
var result map[string]interface{}
|
||
json.NewDecoder(resp.Body).Decode(&result)
|
||
msg = fmt.Sprintln(result)
|
||
msg = strings.TrimPrefix(msg, "map[translatedText:")
|
||
msg = msg[:len(msg)-2]
|
||
}
|
||
a.client.SendMessage(m.Chat.ID, msg, tbot.OptParseModeMarkdown)
|
||
}
|