doomer/botHandlers.go

111 lines
3.7 KiB
Go
Raw Normal View History

2022-12-04 17:30:08 +03:00
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)
}
}