Исправление удаления записей у Телеграм бота

Всем привет! Написал на коленке телеграм бота, чтобы записывать отработанные часы каждый день. Пока что функционал бота таков: создавать новый отработанный день и удалять какой-то день. С созданием проблем нету, а вот с удалением есть, а именно: После того как пользователь выбрал удаление бот должен запросить всего 2 поля (month и date), но запрашивает он все поля как для создания. Еще одна проблема: Бот при удалении может вести себя так (пытается сделать и удаление и создание сразу, я выбирал Delete): введите сюда описание изображения

Слишком много кода и проблем - понимаю, просто слишком долго ищу ошибку и от безысходности полез сюда (chatGPT не смог поправить), если есть вопросы по коду или функционалу - задавайте.

Вот сам код бота:

const TelegramBot = require('node-telegram-bot-api');
const token = process.env.TELEGRAM_BOT_TOKEN;
const gitToken = process.env.GITHUB_TOKEN;
const bot = new TelegramBot(token, { polling: true });
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

bot.onText(/\/start/, (msg) => {
  bot.sendMessage(msg.chat.id, "Выберите действие:", {
    reply_markup: {
      inline_keyboard: [
        [
          {
            text: "Create",
            callback_data: "create"
          },
          {
            text: "Delete",
            callback_data: "delete"
          }
        ]
      ]
    }
  });
});

bot.on('callback_query', (query) => {
  const action = query.data;

  switch (action) {
    case 'create':
      createData(query.message.chat.id);
      break;
    case 'delete':
      deleteData(query.message.chat.id);
      break;
  }
});

function createData(chatId) {
  let newData = {
    month: '',
    total: '',
    course: '',
    date: ''
  };
  let currentField = 'month';

  bot.sendMessage(chatId, 'Введите месяц (название на английском):');

  bot.on('message', (msg) => {
    const text = msg.text;
    const isValidInput = validateInput(currentField, text);

    if (!isValidInput) {
      bot.sendMessage(chatId, 'Некорректный ввод. Попробуйте еще раз:');
      return;
    }

    newData[currentField] = text;

    if (currentField === 'date') {
      saveData(newData, chatId);
    //   bot.sendMessage(chatId, 'Данные успешно сохранены!');
      bot.removeAllListeners('message');
      return;
    }

    currentField = getNextField(currentField);
    bot.sendMessage(chatId, `Введите ${currentField}:`);
  });
}

function deleteData(chatId) {
  let deletingData = {
    month: '',
    date: ''
  };
  let currentField = 'month';

  bot.sendMessage(chatId, 'Введите месяц (название на английском):');

  bot.on('message', (msg) => {
    const text = msg.text;
    const isValidInput = validateInput(currentField, text);

    if (!isValidInput) {
      bot.sendMessage(chatId, 'Некорректный ввод. Попробуйте еще раз:');
      return;
    }

    deletingData[currentField] = text;

    if (currentField === 'date') {
      removeData(deletingData, chatId);
    //   bot.sendMessage(chatId, 'Данные успешно удалены!');
      bot.removeAllListeners('message');
      return;
    }

    currentField = getNextField(currentField);
    bot.sendMessage(chatId, `Введите ${currentField}:`);
  });
}

function getNextField(currentField) {
  const fields = ['total', 'course', 'date'];
  const currentIndex = fields.indexOf(currentField);

  return fields[currentIndex + 1];
}

function validateInput(field, input) {
  switch (field) {
    case 'month':
      return /^[a-zA-Z]+$/.test(input);
    case 'total':
    case 'course':
      return /^\d+$/.test(input);
    case 'date':
      return /^\d{4}\.\d{2}\.\d{2}$/.test(input);
    default:
      return false;
  }
}

function saveData(newData, chatId) {
    const month = newData.month
    let newDataWithoutMonth = Object.assign({}, newData);
    delete newDataWithoutMonth.month;
    SendingDataToGithub(month, newDataWithoutMonth, 'PUT', chatId)
}

function removeData(deletingData, chatId) {
    const month = deletingData.month
    SendingDataToGithub(month, deletingData, 'DELETE', chatId)
}

async function SendingDataToGithub(month, newData, type, chatId) {
    let SendMessage = '';
    const owner = "...";
    const repo = "...";
    const path = "db.json";
    const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}`;
    const branch = "main";
    const message = type === 'PUT' ? `Add data for ${month}` : `Remove data for ${month}`;

    const response = await fetch(url, {
        headers: {
          Authorization: `Bearer ${gitToken}`,
          Accept: "application/vnd.github+json",
        },
    });
    const data = await response.json()
    const content = Buffer.from(data.content, "base64").toString("utf-8");
    const jsonData = JSON.parse(content);

    if (type === 'PUT') {
        if (!jsonData[month]) {
            jsonData[month] = [newData];
        } else {
            jsonData[month].push(newData);
        }
    } else {
        if (jsonData[month]) {
            jsonData[month] = jsonData[month].filter(entry => entry.date !== newData.date);

            if (jsonData[month].length === 0) {
                delete jsonData[month]
                SendMessage = `Month ${month} removed`
            } else {
                SendMessage = `Data removed for ${month} on ${newData.date}`
            }
        } else {
            await bot.sendMessage(chatId, `Error finding ${month} with ${newData.date}`);
        }
    }

    const newContent = Buffer.from(JSON.stringify(jsonData, null, 2)).toString(
        "base64"
    );
    
    const body = {
      message,
      content: newContent,
      sha: data.sha,
      branch,
    };

    const updateResponse = await fetch(url, {
      method: "PUT",
      headers: {
        Authorization: `Bearer ${gitToken}`,
        Accept: "application/vnd.github+json",
        "Content-Type": "application/json",
      },
        body: JSON.stringify(body),
    });
    const updateData = await updateResponse.json();

    if (type === 'PUT') {
        if (updateData.content && updateData.content.sha) {
            await bot.sendMessage(chatId, `Data added for ${month}`);
        } else {
            await bot.sendMessage(chatId, `Error adding data for ${month}`);
        }
    } else {
        if (updateData.content && updateData.content.sha) {
            await bot.sendMessage(chatId, SendMessage);
        } else {
            await bot.sendMessage(chatId, `Error removing data for ${month} on ${newData.date}`);
        }
    }
}


app.listen(port, () => {
  console.log(`Сервер запущен на порту ${port}`);
  bot.startPolling();
});```

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