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