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)
|
|||
|
}
|