91 lines
3.2 KiB
Go
91 lines
3.2 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"strings"
|
||
|
||
"github.com/NicoNex/echotron/v3"
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
func (b *bot) inlineHandler(update *echotron.Update) {
|
||
cache := b.doomer.db.Prefix(FileIDItem)
|
||
|
||
if update.InlineQuery.Query == "" {
|
||
return
|
||
}
|
||
text := update.InlineQuery.Query
|
||
bgTypes := []BackgroundType{Black, White, Gradient}
|
||
results := []echotron.InlineQueryResult{}
|
||
for _, v := range bgTypes {
|
||
key := hash(text) + fmt.Sprint(v)
|
||
fileid, err := cache.GetItem(key)
|
||
if err != nil {
|
||
log.Println("Image does not exist")
|
||
img, err := b.doomer.GetImage(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(key+".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)
|
||
cache.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: 2,
|
||
SwitchPmText: "Сгенерировать PNG качеством повыше",
|
||
SwitchPmParameter: "doom",
|
||
})
|
||
if err != nil {
|
||
log.Printf("Cannot send answer to query: %v", err)
|
||
}
|
||
}
|
||
|
||
func (b *bot) genHandler(update *echotron.Update) {
|
||
text := update.Message.Text[4:]
|
||
if strings.TrimSpace(text) == "" {
|
||
b.SendMessage("Добавьте к команде любой текст", update.Message.Chat.ID, &echotron.MessageOptions{})
|
||
return
|
||
}
|
||
|
||
bgTypes := []BackgroundType{Transparent, Black, White, Gradient}
|
||
group := []echotron.GroupableInputMedia{}
|
||
for _, v := range bgTypes {
|
||
img, err := b.doomer.GetImage(text, v)
|
||
if err != nil {
|
||
log.Printf("Cannot get Doomer image: %v", err)
|
||
}
|
||
group = append(group, echotron.InputMediaDocument{
|
||
Type: echotron.MediaTypeDocument,
|
||
Media: echotron.NewInputFileBytes(text+fmt.Sprint(v)+".png", *img),
|
||
})
|
||
}
|
||
_, 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)
|
||
}
|
||
}
|