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 ни профиль и тому подобные не ворк


Ответы (0 шт):