` const seachText = new Scene('search2') const searchByCat = new Scene('category') const

getText = new Scene('getText')

const stage = new Stage();

stage.register(seachText)
stage.register(getText)
stage.register(searchByCat)

bot.use(session());
bot.use(stage.middleware());

bot.command('start', async (ctx) => {
let fUser = await userService.getUser(ctx.from.username)
if (!fUser) {
ctx.reply(`Sorry ${ctx.from.username} you dont access bot` )
} else{
ctx.reply("Search for nursery rhymes\n", Markup.inlineKeyboard([
Markup.callbackButton("⭐️ Random", "random"),
Markup.callbackButton("🔍 Search", "search2"),
Markup.callbackButton("📄 Category list", "category")
]).oneTime()
.resize()
.extra())
}
})
bot.action("search2", async (ctx) => {
await ctx.answerCbQuery()
await ctx.reply(`Dear ${ctx.from.username} enter word for search`)
await ctx.scene.enter("search2")
});
bot.action("category", async (ctx) => {
await ctx.scene.enter('category')
await showPage(ctx)
})

searchByCat.action(/^list(\d+)$/, async ctx => await categoryService.showPage(ctx,+ctx.match[1]))
getText.action(/^list(\d+)$/, async ctx => await textService.showPage(ctx,+ctx.match[1]))


async function showPage(ctx,page=1){
const fCategory = await listCategories()
const psize = 5
const pages = Math.ceil(fCategory.length/psize)
const ptr = page>pages?pages:(page<1?1:page)
const kb = [[],[]]
let arrayCategories = []
await utils.asyncForEach(fCategory, async category => {
arrayCategories.push(category.name)
})
if (ptr>1) kb[0].unshift({text:'👈 Prev', callback_data:'list'+(ptr-1)})
if (ptr<pages) kb[0].push({text:'Next 👉', callback_data:'list'+(ptr+1)})
kb[0].push({text:'🏫 Home', callback_data:'start'})
let list = fCategory.slice((ptr-1)*psize,ptr*psize)
list = list.reverse()
await utils.asyncForEach(list, async el => {
kb.unshift([{text:el.name, callback_data:`text_${el._id}`}])
})
const textHTML = Dear ${ctx.from.username} please select category
if (ctx.callbackQuery) {
if (!info.includes('text_')){
await ctx.answerCbQuery()
} else {
await ctx.scene.leave('category')
await ctx.scene.enter('getText')
}
}
else {
console.log('replyWithHTML');
return ctx.replyWithHTML(textHTML,{
reply_markup:{
inline_keyboard:kb
}
})
}
if (!info.includes('text_')){
await ctx.telegram.editMessageText(ctx.from.id,ctx.callbackQuery.message.message_id,null,textHTML,{reply_markup:{inline_keyboard:kb}})
} else {
await ctx.scene.leave('category')
await ctx.scene.enter('getText')
}
}
searchByCat.on('callback_query', async (ctx) => {
let fCat = ctx.callbackQuery.data
console.log('searchByCat_callback_query');
console.log(fCat);
if (!fCat || fCat == '/search') return await ctx.reply('Sorry not found')
// Рандомный текст
if (fCat == 'random') {
try{
let result = await textService.randomText()
await ctx.answerCbQuery()
await ctx.replyWithHTML(utils.createTextMsg(result[0]),
Extra.HTML().markup(m =>
m.inlineKeyboard([
m.callbackButton("⭐️ Random", "random"),
m.callbackButton("🔍 Search", "search2"),
m.callbackButton("📄 Category list", "category")])
)
)
}catch(error) {
console.log(error);
await ctx.reply('Sorry not found')
}
}
// Возврат в основное меню
if (fCat === 'start'){
await ctx.scene.leave()
let fUser = await userService.getUser(ctx.from.username)
if (!fUser) {
ctx.reply(`Sorry ${ctx.from.username} you dont access bot` )
} else{
ctx.reply("Search for nursery rhymes\n", Markup.inlineKeyboard([

2 ответов

8 просмотров

В садике pastebin использовать не научили?

Похожие вопросы

Обсуждают сегодня

Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Добрый день! Кто-нибудь знает как подключить твиг в контроллеры плагина?
Николай Афанасенко
5
привет, а расскажите как бэкапите свой vault raft cluster CE? я немного почитал и понял, что нужно как-то выполнять vault operator raft snapshot save backup.snapshot подсовыва...
[DBST] Dmitry Knyazev
5
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
@dblackCat Привет. Это же твой плагин? https://octobercms.com/plugin/catdesign-productbundle
Alexey Yakimov
5
Всем привет! Напишите пожалуйста, кто мог бы оффлайн преподавать некоторые курсы по Odoo в Алматы в одном из ВУЗов? Мы сейчас вместе с Odoo запускаем университетскую программу...
Adil Dauletkhan
2
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Карта сайта