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