111 lines
3.7 KiB
Go
111 lines
3.7 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"strings"
|
||
|
||
"github.com/NicoNex/echotron/v3"
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
func (b *bot) inlineHandler(update *echotron.Update) {
|
||
store := b.db.Prefix(FileIDItem)
|
||
log.Println("It's an inline")
|
||
if update.InlineQuery.Query == "" {
|
||
return
|
||
}
|
||
text := update.InlineQuery.Query
|
||
hashed := hash(text)
|
||
log.Printf("HASH OF QUERY: %s", hashed)
|
||
bgTypes := []BackgroundType{Black, White, Gradient}
|
||
results := []echotron.InlineQueryResult{}
|
||
for _, v := range bgTypes {
|
||
key := hashed + ":" + fmt.Sprint(v)
|
||
fileid, err := store.GetItem(key)
|
||
if err != nil {
|
||
log.Println("Image does not exist")
|
||
img, err := b.doomer.GenImage(text, v)
|
||
if err != nil {
|
||
log.Printf("Cannot gen image of type %v: %v\n", v, err)
|
||
continue
|
||
} else {
|
||
res, err := b.SendPhoto(echotron.NewInputFileBytes(hashed+".png", *img), b.logChatID, &echotron.PhotoOptions{})
|
||
if err != nil {
|
||
log.Printf("Cannot upload image to log chat: %v", err)
|
||
continue
|
||
}
|
||
fileid = []byte(res.Result.Photo[0].FileID)
|
||
store.StoreItem(key, []byte(fileid))
|
||
}
|
||
}
|
||
results = append(results, echotron.InlineQueryResultCachedPhoto{
|
||
ID: uuid.NewString(),
|
||
PhotoFileID: string(fileid),
|
||
Type: echotron.InlinePhoto,
|
||
})
|
||
}
|
||
log.Printf("%v", results)
|
||
_, err := b.AnswerInlineQuery(update.InlineQuery.ID, results, &echotron.InlineQueryOptions{
|
||
CacheTime: 0,
|
||
SwitchPmText: "Сгенерировать PNG качеством повыше",
|
||
SwitchPmParameter: "doom",
|
||
})
|
||
if err != nil {
|
||
log.Printf("Cannot send answer to query: %v", err)
|
||
}
|
||
}
|
||
|
||
func (b *bot) genHandler(update *echotron.Update) {
|
||
store := b.db.Prefix(ImageItem)
|
||
text := update.Message.Text[4:]
|
||
if strings.TrimSpace(text) == "" {
|
||
b.SendMessage("Добавьте к команде любой текст", update.Message.Chat.ID, &echotron.MessageOptions{})
|
||
return
|
||
}
|
||
hashed := hash(text)
|
||
|
||
bgTypes := []BackgroundType{Transparent, Black, White, Gradient}
|
||
group := []echotron.GroupableInputMedia{}
|
||
for _, v := range bgTypes {
|
||
key := hashed + ":" + fmt.Sprint(v)
|
||
imgurl := "https://doom.nefrace.ru/" + key
|
||
_, err := store.GetItem(key)
|
||
if err != nil {
|
||
log.Printf("Image does not exist: %v", err)
|
||
image, err := b.doomer.GenImage(text, v)
|
||
if err != nil {
|
||
log.Printf("Cannot gen image of type %v: %v\n", v, err)
|
||
continue
|
||
} else {
|
||
// img = *image
|
||
err := store.StoreItem(key, *image)
|
||
if err != nil {
|
||
log.Printf("Cannot store image in db: %v", err)
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
// filename := key + ".png"
|
||
group = append(group, echotron.InputMediaDocument{
|
||
Type: echotron.MediaTypeDocument,
|
||
Media: echotron.NewInputFileID(imgurl),
|
||
})
|
||
|
||
}
|
||
_, err := b.SendMediaGroup(update.Message.Chat.ID, group, &echotron.MediaGroupOptions{})
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
}
|
||
|
||
const helpMessage string = "1 \\- Используйте команду `/gen Ваш текст`, чтобы сгенерировать четыре PNG\\-изображения в разных цветовых исполнениях, включая прозрачный фон\\. Файлы отправляются документами для сохранения качества\\.\n" +
|
||
"2 \\- Просто упомяните бота в любом чате при помощи `@doomtextbot Ваш текст` с последующим текстом, чтобы быстро сгенерировать три варианта картинки для отправки в чат\\."
|
||
|
||
func (b *bot) showHelp(update *echotron.Update) {
|
||
_, err := b.SendMessage(helpMessage, update.Message.Chat.ID, &echotron.MessageOptions{ParseMode: echotron.MarkdownV2})
|
||
if err != nil {
|
||
log.Printf("Cannot show help message: %v", err)
|
||
}
|
||
}
|