grammy Работает только команда /start
import { Bot, session, Context, SessionFlavor } from 'grammy';
import { FileAdapter } from '@grammyjs/storage-file';
const BOT_DEVELOPER = 7453320845;
interface BotConfig {
botDeveloper: number;
isDeveloper: boolean;
}
interface SessionData {
sex: string;
name: string;
beer: number;
waitingForName: boolean;
waitingForSex: boolean;
}
type BotContext = Context & SessionFlavor<SessionData> & {
config: BotConfig;
};
const bot = new Bot<BotContext>("");
const fA = new FileAdapter({ dirName: './session' });
bot.api.deleteWebhook({ drop_pending_updates: true }).catch(() => console.log);
bot.api.setMyCommands([
{ command: "start", description: "получить справнчик из документации" },
{ command: "set_sex", description: "Установить пол" },
{ command: "set_name", description: "Установить имя в профиле" },
]);
bot.use(session({
getSessionKey: (ctx) => {
const userId = ctx.from?.id;
const chatId = ctx.chat?.id;
if (userId && chatId) {
return `${chatId}-${userId}`;
}
return undefined;
},
initial: (): SessionData => ({
sex: "не указано",
name: "не указано",
beer: 0,
waitingForName: false,
waitingForSex: false,
}),
storage: fA,
}));
bot.use(async (ctx, next) => {
ctx.config = {
botDeveloper: BOT_DEVELOPER,
isDeveloper: ctx.from?.id === BOT_DEVELOPER,
};
await next();
});
bot.command("start", async (ctx) => {
await ctx.reply(`? Привет!!! Прежде чем использовать бота стоит прочитать в это https://telegra.ph/Watouka---v01-09-07!`, {
reply_to_message_id: ctx.msg?.message_id,
});
});
bot.command("set_sex", async (ctx) => {
ctx.session.waitingForSex = true;
ctx.session.waitingForName = false;
await ctx.reply("❗ Пожалуйста, введите ваш пол.");
console.log("Started waiting for sex");
});
bot.command("set_name", async (ctx) => {
ctx.session.waitingForName = true;
ctx.session.waitingForSex = false;
await ctx.reply("❗ Пожалуйста, введите ваше имя.");
console.log("Started waiting for name");
});
bot.on('message:text', async (ctx) => {
console.log("Received message:", ctx.message.text);
if (ctx.session.waitingForName) {
ctx.session.name = ctx.message.text;
ctx.session.waitingForName = false;
await ctx.reply(`✅ Ваше новое имя сохранено, вы можете его посмотреть написав "профиль" (без /).`);
console.log("Name saved:", ctx.session.name);
} else if (ctx.session.waitingForSex) {
ctx.session.sex = ctx.message.text;
ctx.session.waitingForSex = false;
await ctx.reply(`✅ Так держать, пол указан и сохранён.`);
console.log("Sex saved:", ctx.session.sex);
}
});
bot.command('beer', async (ctx) => {
const random: number = Math.floor(Math.random() * 10);
ctx.session.beer += random;
await bot.api.sendMessage(ctx.chat.id, `? ${"@" + ctx.from?.username ?? ctx.from?.first_name}, Выпил ${random} литров пива.`);
console.log("Beer command executed, total beer:", ctx.session.beer);
});
bot.hears('профиль', async (ctx) => {
const beer = ctx.session.beer;
const name = ctx.session.name;
const sex = ctx.session.sex;
await bot.api.sendMessage(ctx.chat.id, `
? Пива выпито: ${beer}
? Имя: ${name}
? Пол: ${sex}
? Сообщений написано:
? Репутации оказано:
`);
console.log("Profile command executed:", { beer, name, sex });
});
bot.catch((err) => {
console.error("Ошибка в боте:", err);
});
bot.start();
ни /beer ни профиль и тому подобные не ворк