From c96082378c7f172e305627111f5cfa0540f013fa Mon Sep 17 00:00:00 2001 From: Alexei Date: Mon, 26 Jun 2023 16:46:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD.=20=D0=A1=D0=B0=D0=BC=D0=B8=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=BF=D0=B8=D1=81=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot_modules/mod_simple_message.py | 4 +- bot_modules/mod_table_operate.py | 14 +++---- bot_modules/subscribes.py | 86 ++++++++++++++++----------------------- main.py | 7 ++++ 4 files changed, 52 insertions(+), 59 deletions(-) diff --git a/bot_modules/mod_simple_message.py b/bot_modules/mod_simple_message.py index 1cc9621..0fc9128 100644 --- a/bot_modules/mod_simple_message.py +++ b/bot_modules/mod_simple_message.py @@ -69,7 +69,9 @@ class SimpleMessageModule(mod_interface.IModule): return msg def CreateButton(self, a_ButtonName, a_ButtonDesc): - assert len(a_ButtonDesc) < 41 # Телеграм не поддерживает больше + if len(a_ButtonDesc) >= 41: + print('ButtonDesc:', a_ButtonDesc) + assert False # Телеграм не поддерживает больше assert a_ButtonDesc[0] != ' ' # Телеграм не поддерживает пробелы в начале assert a_ButtonDesc[-1:] != ' ' # Телеграм не поддерживает пробелы в конце # TODO добавить проверку, что все кнопки (a_ButtonDesc) разные diff --git a/bot_modules/mod_table_operate.py b/bot_modules/mod_table_operate.py index 9fccfb5..68a2950 100644 --- a/bot_modules/mod_table_operate.py +++ b/bot_modules/mod_table_operate.py @@ -348,7 +348,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): fields += [f] return fields - def AddBDItem3RegisterHandlers(self, a_StartCheckFunc, a_AddBDItemFunc, a_ParentPrefix, a_ParentTableName : str, a_ParentKeyFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.ADD): + def AddBDItemRegisterHandlers(self, a_StartCheckFunc, a_AddBDItemFunc, a_ParentPrefix, a_ParentTableName : str, a_ParentKeyFieldName, a_GetButtonNameAndKeyValueAndAccessFunc, a_AccessFunc, a_ButtonFunc, access_mode = user_access.AccessMode.ADD): fields = self.GetAddFields() if len(fields) == 0: return @@ -376,21 +376,19 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): return keyboard_skip_and_cancel return keyboard_cancel - print ('fields', fields) f_id = 0 f = fields[f_id] - print ('f', f, f.m_Type, f.m_Destiny, GetFieldType(f)) - reg_func(bd_item_add.StartAddBDItemTemplate(self.m_Bot, fsm, getattr(fsm, f'item{f_id}'), self.ShowMessageTemplate(self.GetMessage(CreateMessage(f.m_Destiny))), a_ParentTableName, a_ParentKeyFieldName, a_ParentPrefix, a_AccessFunc, GetKeyboard(f), a_ButtonFunc, access_mode), a_StartCheckFunc) + keyboard = bd_item.MixKeyboardFuncTemplate(self.AdditionalKeyboardForEditTemplate(f), GetKeyboard(f)) + reg_func(bd_item_add.StartAddBDItemTemplate(self.m_Bot, fsm, getattr(fsm, f'item{f_id}'), self.ShowMessageTemplate(self.GetMessage(CreateMessage(f.m_Destiny))), a_ParentTableName, a_ParentKeyFieldName, a_ParentPrefix, a_AccessFunc, keyboard, a_ButtonFunc, access_mode), a_StartCheckFunc) for i in range(len(fields) - 1): f = fields[i] next_f = fields[i + 1] - print ('f', f, f.m_Type, f.m_Destiny, GetFieldType(f)) - self.m_Bot.RegisterMessageHandler(bd_item_add.NextAddBDItemTemplate(self.m_Bot, fsm, None, a_ParentTableName, a_ParentKeyFieldName, f.m_Name, self.ShowMessageTemplate(self.GetMessage(CreateMessage(next_f.m_Destiny))), None, a_AccessFunc, GetKeyboard(next_f), a_ButtonFunc, access_mode, field_type = GetFieldType(f)), content_types = GetContentTypes(f), state = getattr(fsm, f'item{i}')) + keyboard = bd_item.MixKeyboardFuncTemplate(self.AdditionalKeyboardForEditTemplate(next_f), GetKeyboard(next_f)) + self.m_Bot.RegisterMessageHandler(bd_item_add.NextAddBDItemTemplate(self.m_Bot, fsm, None, a_ParentTableName, a_ParentKeyFieldName, f.m_Name, self.ShowMessageTemplate(self.GetMessage(CreateMessage(next_f.m_Destiny))), None, a_AccessFunc, keyboard, a_ButtonFunc, access_mode, field_type = GetFieldType(f)), content_types = GetContentTypes(f), state = getattr(fsm, f'item{i}')) f_id = len(fields) - 1 f = fields[f_id] - print ('f', f, f.m_Type, f.m_Destiny, GetFieldType(f)) self.m_Bot.RegisterMessageHandler(bd_item_add.FinishAddBDItemTemplate(self.m_Bot, fsm, a_AddBDItemFunc, a_ParentTableName, a_ParentKeyFieldName, f.m_Name, self.ShowMessageTemplate(self.GetMessage(Messages.SUCCESS_CREATE)), None, a_AccessFunc, a_ButtonFunc, access_mode, field_type = GetFieldType(f)), content_types = GetContentTypes(f), state = getattr(fsm, f'item{f_id}')) def RegisterHandlers(self): @@ -464,7 +462,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule): if a_Prefix: check_func = bd_item.GetCheckForPrefixFunc(a_Prefix) - self.AddBDItem3RegisterHandlers(\ + self.AddBDItemRegisterHandlers(\ check_func, \ self.m_AddBDItemFunc, \ a_Prefix,\ diff --git a/bot_modules/subscribes.py b/bot_modules/subscribes.py index 4d7075c..87a72fb 100644 --- a/bot_modules/subscribes.py +++ b/bot_modules/subscribes.py @@ -1,7 +1,7 @@ # -*- coding: utf8 -*- # Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) -# Заказы +# Подписки from bot_sys import bot_bd, keyboard, user_access, bd_table, bot_subscribes from bot_modules import mod_table_operate, mod_simple_message @@ -10,6 +10,9 @@ from template import bd_item_select, bd_item_view, bd_item from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup +from enum import Enum +from enum import auto + class FSMAddSubsType(StatesGroup): bd_item = State() @@ -18,6 +21,7 @@ class FSMAddSubsType(StatesGroup): module_name = 'subscribes' table_name = module_name +key_field = 'subsKey' mod_name_field = 'modName' type_field = 'subsType' item_id_field = 'itemID' @@ -31,6 +35,7 @@ table_item_id_field = bd_table.TableField(item_id_field, bd_table.TableFieldDest table_user_id_field = bd_table.TableField(parent_id_field, bd_table.TableFieldDestiny.PARENT_ID, bd_table.TableFieldType.STR) table = bd_table.Table(table_name, [ + bd_table.TableField(key_field, bd_table.TableFieldDestiny.KEY, bd_table.TableFieldType.INT), table_mod_name_field, table_type_field, table_item_id_field, @@ -39,24 +44,26 @@ table = bd_table.Table(table_name, [ table_user_id_field, ], [ - [table_mod_name_field, table_type_field, table_user_id_field, table_item_id_field], + [table_mod_name_field, table_type_field, table_user_id_field, table_item_id_field], ] ) -init_access = f'{user_access.user_access_group_new}=vea' - -class ButtonNames(Enum): - ADD_SUBS = auto() +init_access = f'{user_access.user_access_group_new}=-' button_names = { mod_simple_message.ButtonNames.START: "‍🛒 Подписки", mod_table_operate.ButtonNames.LIST: "📃 Список моих текущих подписок", - mod_table_operate.ButtonNames.ADD_SUBS: "✅ Добавить подписку", + mod_table_operate.ButtonNames.ADD: "✅ Добавить подписку", mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать мою подписку", - mod_table_operate.EditButton(bd_table.TableFieldDestiny.NAME): "≂ Изменить название модуля в моей подписке", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.NAME): "≂ Изменить модуль в моей подписке", mod_table_operate.EditButton(bd_table.TableFieldDestiny.SUBSCRIBE_TYPE): "𝌴 Изменить тип в моей подписке", - mod_table_operate.EditButton(bd_table.TableFieldDestiny.ITEM_ID): "𝌴 Изменить номер элемента в моей подписке", + mod_table_operate.EditButton(bd_table.TableFieldDestiny.ITEM_ID): "𝌴 Изменить элемент в моей подписке", mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к моей подписке", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ADD): "Добавление элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_DEL): "Удаление какого либо элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ANY_ITEM_EDIT): "Редактирование какого либо элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ITEM_DEL): "Удаление определённого элемента", + mod_table_operate.EnumButton(bot_subscribes.SubscribeType.ITEM_EDIT): "Редактирование определённого элемента", mod_table_operate.ButtonNames.DEL: "❌ Удалить мою подписку", } @@ -72,13 +79,13 @@ messages = { ❌ Ошибка, подписку не найден ''', mod_table_operate.Messages.OPEN: f''' -Подписку: #{name_field} +Подписку: -Описание и состав подписки: #{desc_field} +Название модуля: #{mod_name_field} -Статус: #{status_field} +Тип: #{type_field} -Адрес доставки: #{address_field} +Номер элемента: #{item_id_field} Время создания: #{create_datetime_field} ''', @@ -97,7 +104,7 @@ messages = { Номер элемента, на который нужно подписаться (-1, если элемента нет): ''', - mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Подписку успешно добавлен!''', + mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Подписка успешно добавлена!''', mod_table_operate.Messages.START_EDIT: ''' Пожалуйста, выберите действие: ''', @@ -105,32 +112,31 @@ messages = { Выберите подписку, который вы хотите отредактировать. ''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.NAME): f''' -Текущее название подписки: -#{name_field} +Текущее название модуля: +#{mod_name_field} -Введите новое название подписки: +Введите новое название модуля: ''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.SUBSCRIBE_TYPE): f''' -Текущее описание подписки: -#{desc_field} +Текущий тип подписки: +#{type_field} Введите новый тип подписки: ''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.ITEM_ID): f''' -Текущий адрес подписки: -#{desc_field} +Текущий номер элемента: #{item_id_field} Введите новый номер элемента: ''', mod_table_operate.EditMessage(bd_table.TableFieldDestiny.ACCESS): f''' -Текущий доступ к подпискуу: +Текущий доступ к подписке: #{access_field} {user_access.user_access_readme} Введите новую строку доступа: ''', - mod_table_operate.Messages.SUCCESS_EDIT: '''✅ Подписку успешно отредактировано!''', + mod_table_operate.Messages.SUCCESS_EDIT: '''✅ Подписка успешно отредактирована!''', mod_table_operate.Messages.SELECT_TO_DELETE: ''' Выберите подписку, которую вы хотите удалить. ''', @@ -197,33 +203,13 @@ class ModuleSubscribe(mod_table_operate.TableOperateModule): parent_table_name = parent_mod.m_Table.GetName() parent_key_name = parent_mod.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.KEY) - # Добавление - a_ButtonName = self.GetButton(ButtonNames.ADD_SUBS) - if a_ButtonName: - a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.ADD, only_parent = True) - - check_func = bd_item.GetCheckForTextFunc(a_ButtonName) - if a_Prefix: - check_func = bd_item.GetCheckForPrefixFunc(a_Prefix) - - bd_item_add.AddBDItem1RegisterHandlers(self.m_Bot,\ - check_func,\ - FSMAddSubsType,\ - self.m_AddBDItemFunc,\ - self.ShowMessageTemplate(self.GetMessage(mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.NAME))),\ - self.ShowMessageTemplate(self.GetMessage(mod_table_operate.Messages.SUCCESS_CREATE)),\ - a_Prefix,\ - parent_table_name,\ - parent_key_name,\ - name_field,\ - GetButtonNameAndKeyValueAndAccess,\ - GetAccess,\ - defaul_keyboard_func,\ - bd_item.FieldType.text,\ - access_mode = user_access.AccessMode.ADD\ - ) - -class ModuleUserSubscribe(ModuleOrders): + def GetButtonNameAndKeyValueAndAccess(self, a_Item): + type_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.SUBSCRIBE_TYPE) + item_id_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.ITEM_ID) + n, k, a = super().GetButtonNameAndKeyValueAndAccess(a_Item) + return n + ":" + str(a_Item[type_field_id]) + ":" + str(a_Item[item_id_field_id]), k, a + +class ModuleUserSubscribe(ModuleSubscribe): def __init__(self, a_ParentModName, a_ChildModName, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log): super().__init__(table, messages, button_names, a_ParentModName, a_ChildModName, init_access, a_ChildModuleNameList, a_EditModuleNameList, a_Bot, a_ModuleAgregator, a_BotMessages, a_BotButtons, a_Log) diff --git a/main.py b/main.py index 82bce79..cdab68d 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,9 @@ from bot_sys import config, log, aiogram_bot, bot_messages, bd_table, user_acces from bot_modules import mod_agregator, start, profile, backup, users_groups_agregator, access, projects, tasks, needs, comments from bot_modules import languages, messages, buttons, users, groups, user_in_groups from bot_modules import orders, all_orders + from bot_sys import bot_subscribes +from bot_modules import subscribes log_start_message = 'Бот успешно запущен!' @@ -99,6 +101,10 @@ child_mod_name_list = [mod_start_name] mod_all_orders = all_orders.ModuleAllOrders(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) g_ModuleAgregator.AddModule(mod_all_orders) +child_mod_name_list = [mod_start_name] +mod_subscribe = subscribes.ModuleUserSubscribe(None, None, child_mod_name_list, start_mod_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) +g_ModuleAgregator.AddModule(mod_subscribe) + child_mod_name_list = [ mod_profile.GetName(), mod_backup.GetName(), @@ -108,6 +114,7 @@ child_mod_name_list = [ mod_languages.GetName(), mod_orders.GetName(), mod_all_orders.GetName(), + mod_subscribe.GetName(), ] mod_start = start.ModuleStart(child_mod_name_list, g_Bot, g_ModuleAgregator, g_BotMessages, g_BotButtons, g_Log) g_ModuleAgregator.AddModule(mod_start)