diff --git a/bot_modules/all_orders.py b/bot_modules/all_orders.py
index 8ad17d4..8894daf 100644
--- a/bot_modules/all_orders.py
+++ b/bot_modules/all_orders.py
@@ -66,6 +66,8 @@ cur_messages = {
Введите новый статус заказа:
''',
mod_table_operate.Messages.OPEN: f'''
+Номер заказа: #{orders.key_name}
+
Заказ: #{orders.name_field}
Описание и состав заказа: #{orders.desc_field}
@@ -84,10 +86,16 @@ messages_notification = {
mod_table_operate.NotificationMessage(orders.OrderStatus.NEW): f'''Статус заказа "#{orders.name_field}" изменён на - ожидает модерации''',
mod_table_operate.NotificationMessage(orders.OrderStatus.PAY): f'''Статус заказа "#{orders.name_field}" изменён на - Заказ ожидает оплаты.
-Оплатите заказ и прикрепите чек об оплате к заказу. Для этого проследуйте по пути "Заказы"->"Редактировать мой заказ"->"Загрузить чек по оплате моего заказа"''',
+Описание заказа:
+#{orders.desc_field}
+
+Оплатите заказ и прикрепите чек об оплате к заказу. Для этого проследуйте по пути "Главное меню"->"Заказы"->"Загрузить чек по оплате моего заказа"''',
mod_table_operate.NotificationMessage(orders.OrderStatus.ADDRESS): f'''Статус заказа "#{orders.name_field}" изменён на - Заказ ожидает указания адреса доставки.
-Для этого проследуйте по пути "Заказы"->"Редактировать мой заказ"->"Изменить адрес в моём заказе"''',
+Описание заказа:
+#{orders.desc_field}
+
+Для этого проследуйте по пути "Главное меню"->"Заказы"->"Редактировать мой заказ"->"Изменить адрес в моём заказе"''',
mod_table_operate.NotificationMessage(orders.OrderStatus.FINISH): f'''Статус заказа "#{orders.name_field}" изменён на - Заказ выполнен''',
}
@@ -139,9 +147,10 @@ class ModuleAllOrders(orders.ModuleOrders):
return DBItemForUserSelectSource(self.m_Bot, self.m_Table.GetName(), parent_id_field, a_PrevPrefix, a_ButtonName)
def GetButtonNameAndKeyValueAndAccess(self, a_Item):
- parent_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PARENT_ID)
+ user_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.USER_ID)
+ key_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.KEY)
n, k, a = super().GetButtonNameAndKeyValueAndAccess(a_Item)
- return n + ":" + str(a_Item[parent_field_id]), k, a
+ return str(a_Item[key_field_id]) + ":" + n + "," + str(a_Item[user_field_id]), k, a
async def OnChangeField(self, a_Field, a_ItemID, a_ItemData, a_EditUserID):
super().OnChangeField(a_Field, a_ItemID, a_ItemData, a_EditUserID)
@@ -154,22 +163,33 @@ class ModuleAllOrders(orders.ModuleOrders):
item = item[0]
user_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.USER_ID)
+ parent_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.PARENT_ID)
status_field_id = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.STATUS)
- print('OnChangeField', item, user_field_id, status_field_id)
+ #print('OnChangeField', item, user_field_id, status_field_id)
owner_id = item[user_field_id]
new_status = item[status_field_id]
+ parent_id = item[parent_field_id]
msg = self.GetMessage(mod_table_operate.NotificationMessage(new_status))
+ parent_id_msg = None
+ if msg:
+ name = self.GetMessageNameWithTableFieldDestinyAndValue(mod_table_operate.NotificationMessage(new_status), bd_table.TableFieldDestiny.PARENT_ID, parent_id)
+ #print('name', name, msg.GetLanguage())
+ parent_id_msg = msg.FindMessageForLang(name, msg.GetLanguage())
+ if parent_id_msg:
+ msg = parent_id_msg
if not msg:
self.m_Log.Error(f'Не удалось оповестить по заказу №{a_ItemID}. Пустое сообщение для нового статуса {new_status}')
return
msg = self.UpdateMessage(msg, None, item)
- await self.m_Bot.SendMessage(
- owner_id,
- msg.GetDesc(),
- msg.GetPhotoID(),
- None,
- None
- )
+ await self.SendMessageToUser(msg, owner_id)
+
+ def GetStartButtons(self, a_Message, a_UserGroups):
+ return [
+ [mod_table_operate.ButtonNames.LIST, user_access.AccessMode.VIEW],
+ [mod_table_operate.ButtonNames.EDIT, user_access.AccessMode.EDIT],
+ [mod_table_operate.ButtonNames.ADD, user_access.AccessMode.ADD],
+ [mod_table_operate.ButtonNames.DEL, user_access.AccessMode.DELETE],
+ ]
def GetViewItemInlineKeyboard(self, a_Message, a_UserGroups, a_ItemID):
table_name = self.m_Table.GetName()
@@ -178,22 +198,37 @@ class ModuleAllOrders(orders.ModuleOrders):
user_id = None
user_id_field_index = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.USER_ID)
+ key_field_index = self.m_Table.GetFieldIDByDestiny(bd_table.TableFieldDestiny.KEY)
if user_id_field_index and cur_item and cur_item[user_id_field_index]:
user_id = cur_item[user_id_field_index]
if not user_id:
return None
+
cur_buttons = []
- users_mod = self.GetModule(users.module_name)
- if users_mod:
- cur_buttons += [
- keyboard.InlineButtonWithAccess(self.GetButton(ButtonNames.SHOW_USER_INFO), users_mod.GetShowPrefix(), user_id, users_mod.GetAccess(), user_access.AccessMode.VIEW),
- ]
+
+ for dst in bd_table.TableFieldDestiny.DESC, bd_table.TableFieldDestiny.STATUS:
+ access = self.GetAccessForEditKeyboardButtons(self.m_Table.GetFieldByDestiny(dst))
+ btn = mod_table_operate.EditButton(dst)
+ prefix = self.m_EditPrefix.get(dst, None)
+ if prefix:
+ cur_buttons += [
+ keyboard.InlineButtonWithAccess(self.GetButton(btn), prefix, cur_item[key_field_index], access, user_access.AccessMode.EDIT),
+ ]
+
user_message_mod = self.GetModule(user_message.module_name)
if user_message_mod:
cur_buttons += [
keyboard.InlineButtonWithAccess(self.GetButton(ButtonNames.SEND_USER_MESSAGE), user_message_mod.GetAddPrefix(), user_id, user_message_mod.GetAccess(), user_access.AccessMode.ADD),
]
+
+ users_mod = self.GetModule(users.module_name)
+ if users_mod:
+ cur_buttons += [
+ keyboard.InlineButtonWithAccess(self.GetButton(ButtonNames.SHOW_USER_INFO), users_mod.GetShowPrefix(), user_id, users_mod.GetAccess(), user_access.AccessMode.VIEW),
+ ]
+
if len(cur_buttons) == 0:
return None
return keyboard.MakeInlineKeyboardButtons(self.m_Bot, cur_buttons, a_UserGroups)
+
diff --git a/bot_modules/messages.py b/bot_modules/messages.py
index 5db1dba..b8fac8b 100644
--- a/bot_modules/messages.py
+++ b/bot_modules/messages.py
@@ -46,11 +46,11 @@ button_names = {
mod_simple_message.ButtonNames.START: "✉ Сообщения",
mod_table_operate.ButtonNames.LIST: "📃 Список сообщений",
mod_table_operate.ButtonNames.ADD: "☑ Добавить сообщение",
- mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать сообщение",
+ mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать сообщение бота",
mod_table_operate.EditButton(bd_table.TableFieldDestiny.PHOTO): "☐ Изменить изображение у сообщения",
- mod_table_operate.EditButton(bd_table.TableFieldDestiny.NAME): "≂ Изменить название у сообщения",
- mod_table_operate.EditButton(bd_table.TableFieldDestiny.DESC): "𝌴 Изменить описание у сообщения",
- mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к сообщению",
+ mod_table_operate.EditButton(bd_table.TableFieldDestiny.NAME): "≂ Изменить название сообщения",
+ mod_table_operate.EditButton(bd_table.TableFieldDestiny.DESC): "𝌴 Изменить описание сообщения",
+ mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к сообщению",
mod_table_operate.ButtonNames.DEL: "❌ Удалить сообщение",
}
@@ -75,7 +75,7 @@ messages = {
mod_table_operate.CreateMessage(bd_table.TableFieldDestiny.NAME): f'''
Создание сообщения. Шаг №1
-Вы можете добавить номер родителя ID в таком формате: ИмяСообщения{'?' + str(bd_table.TableFieldDestiny.PARENT_ID) + '=ID'}
+Вы можете добавить номер родителя ID в таком формате: ИмяСообщения{'?' + str(bd_table.TableFieldDestiny.PARENT_ID) + '=
ID'}
, чтобы сообщение было только для него
Введите название сообщения:
diff --git a/bot_modules/mod_simple_message.py b/bot_modules/mod_simple_message.py
index 1d6770d..4a69822 100644
--- a/bot_modules/mod_simple_message.py
+++ b/bot_modules/mod_simple_message.py
@@ -76,8 +76,9 @@ class SimpleMessageModule(mod_interface.IModule):
assert False # Телеграм не поддерживает больше
assert a_ButtonDesc[0] != ' ', f'ButtonDesc:{a_ButtonDesc}, Телеграм не поддерживает пробелы в начале'
assert a_ButtonDesc[-1:] != ' ', f'ButtonDesc:{a_ButtonDesc}, Телеграм не поддерживает пробелы в конце'
- # TODO добавить проверку, что все кнопки (a_ButtonDesc) разные
- btn = self.m_BotButtons.CreateMessage(f'{self.GetName()} {str(a_ButtonName).replace("ButtonNames.", "")}', a_ButtonDesc, self.m_Log.GetTimeNow())
+ btn_name = f'{self.GetName()} {str(a_ButtonName).replace("ButtonNames.", "")}'
+ assert not self.m_BotButtons.CheckDescExist(a_ButtonDesc), f'ButtonDesc:{a_ButtonDesc}, повтор имени кнопки, все кнопки должны быть разными'
+ btn = self.m_BotButtons.CreateMessage(btn_name, a_ButtonDesc, self.m_Log.GetTimeNow())
return btn
def GetModule(self, a_ModName):
diff --git a/bot_modules/mod_table_operate.py b/bot_modules/mod_table_operate.py
index acae53f..c46d811 100644
--- a/bot_modules/mod_table_operate.py
+++ b/bot_modules/mod_table_operate.py
@@ -96,6 +96,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule):
self.m_ChildModName = a_ChildModName
self.m_ParentModName = a_ParentModName
self.m_SelectPrefix = ''
+ self.m_EditPrefix = {}
def GetEditKeyboardButtons(a_Message, a_UserGroups):
return self.GetEditKeyboardButtons(a_Message, a_UserGroups)
@@ -239,21 +240,23 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule):
parent_id = str(a_Item[key_field_id])
return parent_id
+ def GetMessageNameWithTableFieldDestinyAndValue(self, a_NameWithoutDestiny, a_Destiny, a_Value):
+ return a_NameWithoutDestiny + '?' + str(a_Destiny) + '=' + str(a_Value)
def ShowMessageTemplate(self, a_Message, Inline_keyboard_template_func = None, a_EnablePhoto = False):
async def ShowMessage(a_CallbackQuery, a_Item, a_ItemDict, table_name = self.m_Table.GetName()):
lang = str(a_CallbackQuery.from_user.language_code)
- msg = a_Message.StaticCopy()
+ msg = a_Message
# Подменяем сообщение, если оно уже есть для PARENT_ID
parent_id = self.GetParentID(a_Item, a_ItemDict, table_name)
if parent_id:
- name = msg.GetName() + '?' + str(bd_table.TableFieldDestiny.PARENT_ID) + '=' + parent_id
+ name = self.GetMessageNameWithTableFieldDestinyAndValue(msg.GetName(), bd_table.TableFieldDestiny.PARENT_ID, parent_id)
parent_id_msg = a_Message.FindMessageForLang(name, lang)
if parent_id_msg:
msg = parent_id_msg
- msg = msg.GetMessageForLang(lang).StaticCopy()
+ msg = msg.GetMessageForLang(lang).StaticCopy()
# TODO: добавить поддержку языков в a_MessageName
Inline_keyboard_func = None
item_access = None
@@ -360,7 +363,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule):
async def SendMessageToUser(self, a_Message, a_UserID, a_GetButtonsFunc = None, a_GetInlineButtonsFunc = None, parse_mode = None):
a_Message = a_Message.StaticCopy()
a_MessageFromUSer = None
- user_groups = None
+ user_groups = None
try:
print('SendMessage', self.m_Bot, a_Message, a_GetButtonsFunc, a_GetInlineButtonsFunc, a_UserID, a_MessageFromUSer, user_groups, parse_mode)
await simple_message.SendMessage(self.m_Bot, a_Message, a_GetButtonsFunc, a_GetInlineButtonsFunc, a_UserID, a_MessageFromUSer, user_groups, parse_mode=parse_mode)
@@ -468,7 +471,7 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule):
a_Prefix = self.RegisterSelect(a_ButtonName, user_access.AccessMode.VIEW, only_parent = True)
- bd_item_edit.EditBDItemRegisterHandlers(self.m_Bot, \
+ a_Prefix = bd_item_edit.EditBDItemRegisterHandlers(self.m_Bot, \
self.SelectSourceTemplate(a_Prefix, a_ButtonName), \
MakeFSMForEdit(self.GetName(), a_FieldName), \
self.GetMessage(Messages.SELECT_TO_EDIT), \
@@ -487,6 +490,8 @@ class TableOperateModule(mod_simple_message.SimpleMessageModule):
field_type = a_FieldType\
)
+ self.m_EditPrefix.update({a_Field.m_Destiny: a_Prefix})
+
def GetAddFields(self):
add_destiny = (
bd_table.TableFieldDestiny.NAME,
diff --git a/bot_modules/orders.py b/bot_modules/orders.py
index 6458984..63f3a95 100644
--- a/bot_modules/orders.py
+++ b/bot_modules/orders.py
@@ -84,6 +84,8 @@ messages = {
❌ Ошибка, заказ не найден
''',
mod_table_operate.Messages.OPEN: f'''
+Номер заказа: #{key_name}
+
Заказ: #{name_field}
Описание и состав заказа: #{desc_field}
diff --git a/bot_modules/user_message.py b/bot_modules/user_message.py
index 087f0bf..6e41be1 100644
--- a/bot_modules/user_message.py
+++ b/bot_modules/user_message.py
@@ -3,7 +3,7 @@
# Сообщения пользователю
-from bot_sys import bot_bd, keyboard, user_access, bd_table, bot_subscribes, bot_messages
+from bot_sys import bot_bd, keyboard, user_access, bd_table, bot_subscribes, bot_messages, interfaces
from bot_modules import mod_table_operate, mod_simple_message, users
# ---------------------------------------------------------
@@ -35,8 +35,8 @@ button_names = {
mod_table_operate.ButtonNames.LIST: "📃 Список отправленных сообщений",
mod_table_operate.ButtonNames.ADD: "📨 Отправить сообщение",
mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать сообщение",
- mod_table_operate.EditButton(bd_table.TableFieldDestiny.DESC): "𝌴 Изменить описание в категории",
- mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к категории",
+ mod_table_operate.EditButton(bd_table.TableFieldDestiny.DESC): "𝌴 Изменить описание у сообщения",
+ mod_table_operate.EditButton(bd_table.TableFieldDestiny.ACCESS): "✋ Изменить доступ к сообщению",
mod_table_operate.ButtonNames.DEL: "❌ Удалить отправленное сообщение",
}
@@ -118,7 +118,7 @@ class ModuleUserMessage(mod_table_operate.TableOperateModule):
desc_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.DESC)
user_id_field = self.m_Table.GetFieldNameByDestiny(bd_table.TableFieldDestiny.PARENT_ID)
- if not await self.SendMessageToUser(bot_messages.MakeBotMessage(a_ItemData[desc_field]), a_ItemData[user_id_field]):
+ if not await self.SendMessageToUser(bot_messages.MakeBotMessage(a_ItemData[desc_field]), a_ItemData[user_id_field], parse_mode=interfaces.ParseMode.HTML.value):
return None, '❌ Ошибка отправки сообщения'
return res, error
diff --git a/bot_sys/bot_messages.py b/bot_sys/bot_messages.py
index 41f7fc0..07eacb4 100644
--- a/bot_sys/bot_messages.py
+++ b/bot_sys/bot_messages.py
@@ -70,7 +70,7 @@ class BotMessage:
self.m_MessageDesc = new_msg.m_MessageDesc
self.m_Language = new_msg.m_Language
self.m_PhotoID = new_msg.m_PhotoID
- self.m_DateTime = new_msg.m_DateTime
+ self.m_DateTime = last_update
return new_msg
def MakeBotMessage(a_MessageDesc):
@@ -85,6 +85,15 @@ class BotMessages:
def GetMessages(self):
return self.m_Messages
+ def CheckDescExist(self, a_MessageDesc):
+ msg = self.GetMessages()
+ for l, m in msg.items():
+ for name, cur_msg in m.items():
+ if cur_msg.GetDesc() == a_MessageDesc:
+ return True
+
+ return False
+
def UpdateSignal(self, a_DateTime):
self.m_LastUpdate = a_DateTime
diff --git a/bot_sys/interfaces.py b/bot_sys/interfaces.py
index e65a760..8c511a0 100644
--- a/bot_sys/interfaces.py
+++ b/bot_sys/interfaces.py
@@ -3,6 +3,14 @@
from abc import ABC, abstractmethod
+from enum import Enum
+from enum import auto
+
+# Способ форматирования
+class ParseMode(Enum):
+ HTML = "HTML"
+ Markdown ='Markdown'
+
class IBot(ABC):
@abstractmethod
def GetRootIDs(self):
diff --git a/template/bd_item_edit.py b/template/bd_item_edit.py
index 9e877e7..2055881 100644
--- a/template/bd_item_edit.py
+++ b/template/bd_item_edit.py
@@ -43,3 +43,5 @@ def EditBDItemRegisterHandlers(a_Bot, a_SelectSource, a_FSM, a_StartMessage, a_E
a_Bot.RegisterMessageHandler(FinishEditBDItemTemplate(a_Bot, a_FSM, a_TableName, a_KeyName, a_FieldName, a_FinishMessageFunc, a_PostProcessFunc, a_AccessFunc, a_FinishButtonFunc, a_OnChangeFunc, access_mode, field_type = field_type), content_types = ['photo', 'text'], state = a_FSM.item_field)
else:
a_Bot.RegisterMessageHandler(FinishEditBDItemTemplate(a_Bot, a_FSM, a_TableName, a_KeyName, a_FieldName, a_FinishMessageFunc, a_PostProcessFunc, a_AccessFunc, a_FinishButtonFunc, a_OnChangeFunc, access_mode, field_type = field_type), state = a_FSM.item_field)
+
+ return a_Prefix
diff --git a/template/sql_request.py b/template/sql_request.py
index 262d781..3d7221d 100644
--- a/template/sql_request.py
+++ b/template/sql_request.py
@@ -3,7 +3,7 @@
# Сообщения для работы с sql запросами
-from bot_sys import user_access, keyboard, bot_messages
+from bot_sys import user_access, keyboard, bot_messages, interfaces
from bot_modules import groups_utils
from template import bd_item, simple_message
@@ -31,7 +31,7 @@ def RequestToBDTemplate(a_Bot, a_StartMessage, a_GetButtonsFunc, a_AccessFunc, a
await a_FSM.sqlRequest.set()
print ('a_FSM.sqlRequest.set()', a_StartMessage)
- await simple_message.SendMessage(a_Bot, a_StartMessage, GetCancelKeyboardButtonsTemplate(a_Bot, a_AccessFunc, a_AccessMode), None, user_id, a_Message, user_groups, parse_mode='Markdown')
+ await simple_message.SendMessage(a_Bot, a_StartMessage, GetCancelKeyboardButtonsTemplate(a_Bot, a_AccessFunc, a_AccessMode), None, user_id, a_Message, user_groups, parse_mode=interfaces.ParseMode.Markdown.value)
return RequestToBDStart
def RequestToBDFinishTemplate(a_Bot, a_GetButtonsFunc, a_AccessFunc, a_AccessMode):