Alexei
2 years ago
10 changed files with 364 additions and 54 deletions
@ -0,0 +1,136 @@
|
||||
# -*- coding: utf8 -*- |
||||
# Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||
|
||||
# Группы |
||||
|
||||
from bot_sys import bot_bd, keyboard, user_access, bd_table |
||||
from bot_modules import mod_table_operate, mod_simple_message |
||||
from bot_modules import access_utils, groups_utils |
||||
|
||||
# --------------------------------------------------------- |
||||
# БД |
||||
module_name = 'groups' |
||||
|
||||
table_name = groups_utils.table_name |
||||
key_name = groups_utils.key_name |
||||
name_field = groups_utils.name_field |
||||
desc_field = groups_utils.desc_field |
||||
photo_field = groups_utils.photo_field |
||||
access_field = groups_utils.access_field |
||||
create_datetime_field = groups_utils.create_datetime_field |
||||
|
||||
table_name_field = bd_table.TableField(name_field, bd_table.TableFieldDestiny.NAME, bd_table.TableFieldType.STR) |
||||
|
||||
table = bd_table.Table(table_name, [ |
||||
bd_table.TableField(key_name, bd_table.TableFieldDestiny.KEY, bd_table.TableFieldType.INT), |
||||
table_name_field, |
||||
bd_table.TableField(desc_field, bd_table.TableFieldDestiny.DESC, bd_table.TableFieldType.STR), |
||||
bd_table.TableField(photo_field, bd_table.TableFieldDestiny.PHOTO, bd_table.TableFieldType.STR), |
||||
bd_table.TableField(access_field, bd_table.TableFieldDestiny.ACCESS, bd_table.TableFieldType.STR), |
||||
bd_table.TableField(create_datetime_field, bd_table.TableFieldDestiny.CREATE_DATE, bd_table.TableFieldType.STR), |
||||
], |
||||
[ |
||||
[table_name_field], |
||||
] |
||||
) |
||||
|
||||
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: "✅ Добавить группу", |
||||
mod_table_operate.ButtonNames.EDIT: "🛠 Редактировать группу", |
||||
mod_table_operate.ButtonNames.EDIT_PHOTO: "☐ Изменить изображение в группе", |
||||
mod_table_operate.ButtonNames.EDIT_NAME: "≂ Изменить название в группе", |
||||
mod_table_operate.ButtonNames.EDIT_DESC: "𝌴 Изменить описание в группе", |
||||
mod_table_operate.ButtonNames.EDIT_ACCESS: "✋ Изменить доступ к группе", |
||||
mod_table_operate.ButtonNames.DEL: "❌ Удалить группу", |
||||
} |
||||
|
||||
messages = { |
||||
mod_simple_message.Messages.START: f''' |
||||
<b>{button_names[mod_simple_message.ButtonNames.START]}</b> |
||||
|
||||
''', |
||||
mod_table_operate.Messages.SELECT: ''' |
||||
Пожалуйста, выберите группу: |
||||
''', |
||||
mod_table_operate.Messages.ERROR_FIND: ''' |
||||
❌ Ошибка, группу не найден |
||||
''', |
||||
mod_table_operate.Messages.OPEN: f''' |
||||
<b>Группа: #{name_field}</b> |
||||
|
||||
#{desc_field} |
||||
|
||||
Время создания: #{create_datetime_field} |
||||
''', |
||||
mod_table_operate.Messages.CREATE_NAME: ''' |
||||
Создание группы. Шаг №1 |
||||
|
||||
Введите название группы: |
||||
''', |
||||
mod_table_operate.Messages.CREATE_DESC: ''' |
||||
Создание группы. Шаг №2 |
||||
|
||||
Введите описание группы: |
||||
''', |
||||
mod_table_operate.Messages.CREATE_PHOTO: ''' |
||||
Создание группы. Шаг №3 |
||||
|
||||
Загрузите обложку для группы (Фото): |
||||
Она будет отображаться в его описании. |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Группа успешно добавлена!''', |
||||
mod_table_operate.Messages.START_EDIT: ''' |
||||
Пожалуйста, выберите действие: |
||||
''', |
||||
mod_table_operate.Messages.SELECT_TO_EDIT: ''' |
||||
Выберите группу, которого вы хотите отредактировать. |
||||
''', |
||||
mod_table_operate.Messages.EDIT_PHOTO: ''' |
||||
Загрузите новую обложку для группы (Фото): |
||||
Она будет отображаться в его описании. |
||||
''', |
||||
mod_table_operate.Messages.EDIT_NAME: f''' |
||||
Текущее название группы: |
||||
#{name_field} |
||||
|
||||
Введите новое название группы: |
||||
''', |
||||
mod_table_operate.Messages.EDIT_DESC: f''' |
||||
Текущее описание группы: |
||||
#{desc_field} |
||||
|
||||
Введите новое описание группы: |
||||
''', |
||||
mod_table_operate.Messages.EDIT_ACCESS: f''' |
||||
Текущий доступ к группе: |
||||
#{access_field} |
||||
|
||||
{user_access.user_access_readme} |
||||
|
||||
Введите новую строку доступа: |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_EDIT: '''✅ Группа успешно отредактирована!''', |
||||
mod_table_operate.Messages.SELECT_TO_DELETE: ''' |
||||
Выберите группу, который вы хотите удалить. |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_DELETE: '''✅ Группа успешно удалена!''', |
||||
} |
||||
|
||||
class ModuleGroups(mod_table_operate.TableOperateModule): |
||||
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) |
||||
|
||||
def GetName(self): |
||||
return module_name |
||||
|
||||
def GetInitBDCommands(self): |
||||
return super(). GetInitBDCommands() + [ |
||||
f"INSERT OR IGNORE INTO {table_name} ({name_field}, {access_field}, {create_datetime_field}) VALUES ('{user_access.user_access_group_new}', '{user_access.user_access_group_new}=-', {bot_bd.GetBDDateTimeNow()});" |
||||
] |
@ -0,0 +1,174 @@
|
||||
# -*- coding: utf8 -*- |
||||
# Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru> |
||||
|
||||
# Пользователи в группах |
||||
|
||||
from bot_sys import bot_bd, keyboard, user_access, bd_table |
||||
from bot_modules import mod_table_operate, mod_simple_message |
||||
from bot_modules import access_utils, groups_utils |
||||
from template import bd_item, bd_item_add |
||||
|
||||
from aiogram.dispatcher import FSMContext |
||||
from aiogram.dispatcher.filters.state import State, StatesGroup |
||||
|
||||
class FSMAddUserInGroups(StatesGroup): |
||||
bd_item = State() |
||||
|
||||
from enum import Enum |
||||
from enum import auto |
||||
|
||||
# --------------------------------------------------------- |
||||
# БД |
||||
module_name = 'user_in_groups' |
||||
|
||||
table_name = groups_utils.table_user_in_groups_name |
||||
key_name = 'user_in_groupsID' |
||||
name_field = groups_utils.user_id_field |
||||
access_field = 'user_in_groupsAccess' |
||||
create_datetime_field = 'user_in_groupsCreateDateTime' |
||||
parent_id_field = groups_utils.parent_id_field |
||||
|
||||
table_user_id_field = bd_table.TableField(name_field, bd_table.TableFieldDestiny.NAME, bd_table.TableFieldType.STR) |
||||
table_parent_id_field = bd_table.TableField(parent_id_field, bd_table.TableFieldDestiny.PARENT_ID, bd_table.TableFieldType.INT) |
||||
|
||||
table = bd_table.Table(table_name, [ |
||||
bd_table.TableField(key_name, bd_table.TableFieldDestiny.KEY, bd_table.TableFieldType.INT), |
||||
table_user_id_field, |
||||
bd_table.TableField(access_field, bd_table.TableFieldDestiny.ACCESS, bd_table.TableFieldType.STR), |
||||
bd_table.TableField(create_datetime_field, bd_table.TableFieldDestiny.CREATE_DATE, bd_table.TableFieldType.STR), |
||||
table_parent_id_field, |
||||
], |
||||
[ |
||||
[table_user_id_field, table_parent_id_field], |
||||
] |
||||
) |
||||
|
||||
init_access = f'{user_access.user_access_group_new}=-' |
||||
|
||||
# --------------------------------------------------------- |
||||
# Сообщения и кнопки |
||||
|
||||
class ButtonNames(Enum): |
||||
ADD_USER = auto() |
||||
|
||||
button_names = { |
||||
mod_simple_message.ButtonNames.START: "🗫 Пользователи в группах", |
||||
mod_table_operate.ButtonNames.LIST: "📃 Список пользователей в группах", |
||||
ButtonNames.ADD_USER: "✅ Добавить пользователя в группу", |
||||
mod_table_operate.ButtonNames.EDIT_ACCESS: "✋ Доступ к пользователю в группе", |
||||
mod_table_operate.ButtonNames.DEL: "❌ Удалить пользователя из группы", |
||||
} |
||||
|
||||
messages = { |
||||
mod_simple_message.Messages.START: f''' |
||||
<b>{button_names[mod_simple_message.ButtonNames.START]}</b> |
||||
|
||||
''', |
||||
mod_table_operate.Messages.SELECT: ''' |
||||
Пожалуйста, выберите пользователя в группе: |
||||
''', |
||||
mod_table_operate.Messages.ERROR_FIND: ''' |
||||
❌ Ошибка, пользователь в группе не найден |
||||
''', |
||||
mod_table_operate.Messages.OPEN: f''' |
||||
<b>пользователь в группе: #{name_field}</b> |
||||
|
||||
Группа: #{parent_id_field} |
||||
|
||||
Время создания: #{create_datetime_field} |
||||
''', |
||||
mod_table_operate.Messages.CREATE_NAME: ''' |
||||
Создание пользователя в группе. |
||||
|
||||
Укажите ID пользователя: |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_CREATE: '''✅ Пользователь успешно добавлен в группу!''', |
||||
mod_table_operate.Messages.START_EDIT: ''' |
||||
Пожалуйста, выберите действие: |
||||
''', |
||||
mod_table_operate.Messages.SELECT_TO_EDIT: ''' |
||||
Выберите пользователя в группе, которого вы хотите отредактировать. |
||||
''', |
||||
mod_table_operate.Messages.EDIT_ACCESS: f''' |
||||
Текущий доступ к пользователю в группе: |
||||
#{access_field} |
||||
|
||||
{user_access.user_access_readme} |
||||
|
||||
Введите новую строку доступа: |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_EDIT: '''✅ Пользователь в группе успешно отредактирован!''', |
||||
mod_table_operate.Messages.SELECT_TO_DELETE: ''' |
||||
Выберите пользователя в группе, которого вы хотите удалить. |
||||
''', |
||||
mod_table_operate.Messages.SUCCESS_DELETE: '''✅ Пульзователь успешно удалён из группы!''', |
||||
} |
||||
|
||||
class ModuleUserInGroups(mod_table_operate.TableOperateModule): |
||||
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) |
||||
|
||||
def GetName(self): |
||||
return module_name |
||||
|
||||
def GetStartKeyboardButtons(self, a_Message, a_UserGroups): |
||||
t_buttons = super().GetStartKeyboardButtons(a_Message, a_UserGroups) |
||||
cur_buttons = [ |
||||
keyboard.ButtonWithAccess(self.GetButton(ButtonNames.ADD_USER), user_access.AccessMode.ADD, self.GetAccess()), |
||||
] |
||||
return t_buttons + keyboard.MakeButtons(self.m_Bot, cur_buttons, a_UserGroups) |
||||
|
||||
def AddBDItemFunc(self, a_ItemData, a_UserID): |
||||
def_access = access_utils.GetItemDefaultAccessForModule(self.m_Bot, self.GetName()) |
||||
res, error = self.m_Bot.SQLRequest(f'INSERT INTO {table_name}({name_field}, {access_field}, {parent_id_field}, {create_datetime_field}) VALUES(?, ?, ?, {bot_bd.GetBDDateTimeNow()})', |
||||
commit = True, return_error = True, param = (a_ItemData[name_field], def_access + f";{a_UserID}=+", a_ItemData[parent_id_field])) |
||||
|
||||
self.OnChange() |
||||
if error: |
||||
self.m_Log.Error(f'Пользоватлель {a_UserID}. Ошибка добавления записи в таблицу {table_name} ({a_ItemData[name_field]}, {def_access}).') |
||||
else: |
||||
self.m_Log.Success(f'Пользоватлель {a_UserID}. Добавлена запись в таблицу {table_name} ({a_ItemData[name_field]}, {def_access}).') |
||||
|
||||
return res, error |
||||
|
||||
def RegisterHandlers(self): |
||||
super().RegisterHandlers() |
||||
GetButtonNameAndKeyValueAndAccess = self.m_GetButtonNameAndKeyValueAndAccessFunc |
||||
GetAccess = self.m_GetAccessFunc |
||||
|
||||
defaul_keyboard_func = self.m_GetStartKeyboardButtonsFunc |
||||
|
||||
parent_table_name = None |
||||
parent_key_name = None |
||||
if self.m_ParentModName: |
||||
parent_mod = self.GetModule(self.m_ParentModName) |
||||
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_USER) |
||||
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,\ |
||||
FSMAddUserInGroups,\ |
||||
self.m_AddBDItemFunc,\ |
||||
self.ShowMessageTemplate(self.GetMessage(mod_table_operate.Messages.CREATE_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\ |
||||
) |
||||
|
||||
|
Loading…
Reference in new issue