bot rafactor and bugfix

This commit is contained in:
2025-08-19 04:45:16 +09:00
parent 43dda889f8
commit a8d860ed87
31 changed files with 4396 additions and 613 deletions

View File

@@ -1,23 +1,88 @@
from __future__ import annotations
from enum import IntEnum
"""Состояния бота редактора."""
from enum import IntEnum, auto
from typing import Dict
class States(IntEnum):
CHOOSE_CHANNEL = 0
CHOOSE_TYPE = 1
CHOOSE_FORMAT = 2
ENTER_TEXT = 3
ENTER_MEDIA = 4
EDIT_KEYBOARD = 5
CONFIRM_SEND = 6
ENTER_SCHEDULE = 7
SELECT_TEMPLATE = 8
PREVIEW_VARS = 9
PREVIEW_CONFIRM = 10
TPL_NEW_NAME = 11
TPL_NEW_TYPE = 12
TPL_NEW_FORMAT = 13
TPL_NEW_CONTENT = 14
TPL_NEW_KB = 15
class BotStates(IntEnum):
"""Состояния для ConversationHandler."""
# Общие состояния
CONVERSATION_END = -1
START = 1
MAIN_MENU = 2
# Состояния создания шаблона
TPL_TYPE = 10
TPL_NAME = 11
TPL_TEXT = 12
TPL_NEW_KB = 13
TPL_SELECT = 14
TPL_NEW_NAME = 15
TPL_NEW_TYPE = 16
TPL_NEW_FORMAT = 17
TPL_NEW_CONTENT = 18
TEMPLATE_PREVIEW = 19
TEMPLATE_VARS = 20
# Состояния создания поста
CREATE_POST = 30
CHOOSE_CHANNEL = 31 # Выбор канала
CHOOSE_TYPE = 32 # Выбор типа поста (текст/фото/видео/gif)
CHOOSE_FORMAT = 33 # Выбор формата текста (HTML/Markdown)
ENTER_TEXT = 34 # Ввод текста поста
ENTER_MEDIA = 35 # Загрузка медиафайла
EDIT_KEYBOARD = 36 # Редактирование клавиатуры
CONFIRM_SEND = 37 # Подтверждение отправки
ENTER_SCHEDULE = 38 # Ввод времени для отложенной публикации
SELECT_TEMPLATE = 39 # Выбор шаблона
PREVIEW_VARS = 40 # Ввод значений для переменных
PREVIEW_CONFIRM = 41 # Подтверждение предпросмотра
# Состояния работы с каналами
CHANNEL_NAME = 50
CHANNEL_DESC = 51
CHANNEL_INVITE = 52
# Состояния управления ботами и каналами
BOT_TOKEN = 60 # Ввод токена бота
CHANNEL_ID = 61 # Ввод идентификатора канала
CHANNEL_TITLE = 62 # Ввод имени канала
CHANNEL_SELECT_BOT = 63 # Выбор бота для канала
@classmethod
def get_description(cls, state: int) -> str:
"""Возвращает описание состояния."""
descriptions: Dict[int, str] = {
# Общие состояния
cls.CONVERSATION_END: "Завершение диалога",
# Шаблоны
cls.TPL_TYPE: "Выбор типа шаблона",
cls.TPL_NAME: "Ввод имени шаблона",
cls.TPL_TEXT: "Ввод текста шаблона",
cls.TPL_NEW_KB: "Ввод клавиатуры шаблона",
cls.TPL_SELECT: "Выбор шаблона",
cls.TPL_NEW_CONTENT: "Ввод содержимого шаблона",
# Посты
cls.CHOOSE_CHANNEL: "Выбор канала",
cls.CHOOSE_TYPE: "Выбор типа поста",
cls.CHOOSE_FORMAT: "Выбор формата",
cls.ENTER_TEXT: "Ввод текста",
cls.ENTER_MEDIA: "Загрузка медиа",
cls.EDIT_KEYBOARD: "Редактирование клавиатуры",
cls.CONFIRM_SEND: "Подтверждение отправки",
cls.ENTER_SCHEDULE: "Планирование публикации",
cls.SELECT_TEMPLATE: "Выбор шаблона",
cls.PREVIEW_VARS: "Ввод значений переменных",
cls.PREVIEW_CONFIRM: "Подтверждение предпросмотра",
# Каналы и боты
cls.CHANNEL_NAME: "Ввод имени канала",
cls.CHANNEL_DESC: "Ввод описания канала",
cls.CHANNEL_INVITE: "Ввод инвайт-ссылки",
cls.BOT_TOKEN: "Ввод токена бота",
cls.CHANNEL_ID: "Ввод ID канала",
cls.CHANNEL_TITLE: "Ввод названия канала",
cls.CHANNEL_SELECT_BOT: "Выбор бота для канала",
}
return descriptions.get(state, f"Неизвестное состояние {state}")