doomer/botHandlers.go

111 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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