A plugin for GramIO that provides Prompt and Wait methods
Read about Plugin options
import { Bot, format, bold } from "gramio";
import { prompt } from "@gramio/prompt";
const bot = new Bot(process.env.TOKEN as string)
.extend(prompt())
.command("start", async (context) => {
const answer = await context.prompt(
"message",
format`What's your ${bold`name`}?`
);
return context.send(`✨ Your name is ${answer.text}`);
})
.onStart(console.log);
bot.start();
const answer = await context.prompt("What's your name?");
// or with SendMessageParams
const answer = await context.prompt("True or false?", {
reply_markup: new Keyboard().text("true").row().text("false"),
});
answer is MessageContext
or CallbackQueryContext
const answer = await context.prompt("message", "What's your name?");
const answer = await context.prompt("callback_query", "True or false?", {
reply_markup: new InlineKeyboard()
.text("true", "true")
.row()
.text("false", "false"),
});
answer is CallbackQueryContext
You can define a handler in params to validate the user's answer. If handler returns false, the message will be repeated.
const answer = await context.prompt(
"message",
"Enter a string that contains russian letter",
{
validate: (context) => /[а-яА-Я]/.test(context.text),
//... and some SendMessageParams
}
);
const name = await context.prompt(
"message",
format`What's your ${bold`name`}?`,
{
transform: (context) => context.text || context.caption || "",
}
);
name is string
const answer = await context.wait();
answer is MessageContext
or CallbackQueryContext
const answer = await context.wait("message");
answer is CallbackQueryContext
You can define a handler in params to validate the user's answer.
If handler return false
, the message will be ignored
const answer = await context.wait((context) => /[а-яА-Я]/.test(context.text));
// or combine with event
const answer = await context.wait("message", (context) =>
/[а-яА-Я]/.test(context.text)
);
You can define a handler in params to transform the user's answer.
const answer = await context.wait((context) => /[а-яА-Я]/.test(context.text));
// or combine with event
const answer = await context.wait("message", {
validate: (context) => /[а-яА-Я]/.test(context.text),
transform: (context) => c.text || "",
});
answer is string