Browse Source

Добавлена возможность редактировать сообщения бота на ходу!

Пока только несколько модулей.
test_bot
Alexei 2 years ago
parent
commit
95e0ff33ef
  1. 6
      bot_modules/languages.py
  2. 7
      bot_modules/messages.py
  3. 14
      bot_modules/profile.py
  4. 72
      bot_modules/projects.py
  5. 11
      bot_modules/start.py
  6. 5
      bot_sys/log.py
  7. 26
      bot_sys/user_messages.py
  8. 4
      main.py

6
bot_modules/languages.py

@ -259,15 +259,18 @@ def AddOrIgnoreLang(a_Lang : str):
g_languages = {} g_languages = {}
def GetLangID(a_Lang): def GetLangID(a_Lang):
global g_languages
return g_languages.get(a_Lang, None) return g_languages.get(a_Lang, None)
def GetLangName(a_LangID): def GetLangName(a_LangID):
global g_languages
for lang_name, lang_id in g_languages: for lang_name, lang_id in g_languages:
if a_LangID == lang_id: if a_LangID == lang_id:
return lang_name return lang_name
return None return user_messages.default_language
def FlushLanguages(): def FlushLanguages():
global g_languages
msg = user_messages.GetMessages() msg = user_messages.GetMessages()
for lang, msg_dict in msg.items(): for lang, msg_dict in msg.items():
AddOrIgnoreLang(lang) AddOrIgnoreLang(lang)
@ -275,6 +278,7 @@ def FlushLanguages():
if langs: if langs:
for l in langs: for l in langs:
g_languages[l[1]] = str(l[0]) g_languages[l[1]] = str(l[0])
print('FlushLanguages', g_languages)
# Инициализация БД # Инициализация БД
def GetInitBDCommands(): def GetInitBDCommands():

7
bot_modules/messages.py

@ -216,6 +216,7 @@ def ShowMessageTemplate(a_StringMessage, keyboard_template_func = None):
if message_success_edit_message == a_StringMessage: if message_success_edit_message == a_StringMessage:
FlushMessages() FlushMessages()
# TODO FlushMessages происходит рано. Нужно после изменений
msg = a_StringMessage.\ msg = a_StringMessage.\
replace(f'#{name_field}', a_Item[1]).\ replace(f'#{name_field}', a_Item[1]).\
replace(f'#{desc_field}', a_Item[2]).\ replace(f'#{desc_field}', a_Item[2]).\
@ -278,13 +279,13 @@ def FlushMessages():
if msgs_bd: if msgs_bd:
for m in msgs_bd: for m in msgs_bd:
name = m[1] name = m[1]
lang_id = m[5] lang_id = m[6]
lang_name = languages.GetLangName(lang_id) lang_name = languages.GetLangName(lang_id)
new_msg = user_messages.Message(name, m[2], lang_name, m[3]) new_msg = user_messages.Message(name, m[2], lang_name, m[3], log.GetTimeNow())
if not msg.get(lang_name, None): if not msg.get(lang_name, None):
msg[lang_name] = {} msg[lang_name] = {}
msg[lang_name][name] = new_msg msg[lang_name][name] = new_msg
user_messages.UpdateMSG(new_msg) user_messages.UpdateSignal(log.GetTimeNow())
# Инициализация БД # Инициализация БД
def GetInitBDCommands(): def GetInitBDCommands():

14
bot_modules/profile.py

@ -3,7 +3,7 @@
# Профиль пользователя # Профиль пользователя
from bot_sys import bot_bd, log, config, keyboard, user_access from bot_sys import bot_bd, log, config, keyboard, user_access, user_messages
from bot_modules import start, access, groups from bot_modules import start, access, groups
from template import simple_message from template import simple_message
@ -38,10 +38,16 @@ init_bd_cmds = [f"""CREATE TABLE IF NOT EXISTS {table_name}(
f"INSERT OR IGNORE INTO module_access (modName, modAccess, itemDefaultAccess) VALUES ('{module_name}', '{user_access.user_access_group_new}=+', '{user_access.user_access_group_new}=+');" f"INSERT OR IGNORE INTO module_access (modName, modAccess, itemDefaultAccess) VALUES ('{module_name}', '{user_access.user_access_group_new}=+', '{user_access.user_access_group_new}=+');"
] ]
def MSG(a_MessageName, a_MessageDesc):
def UpdateMSG(a_Message : user_messages.Message):
print(a_Message.m_MessageName, a_Message.m_MessageDesc)
globals()[a_Message.m_MessageName] = a_Message
user_messages.MSG(a_MessageName, a_MessageDesc, UpdateMSG, log.GetTimeNow())
# --------------------------------------------------------- # ---------------------------------------------------------
# Сообщения # Сообщения
profile_message = f''' MSG('profile_message', f'''
<b>📰 Профиль:</b> <b>📰 Профиль:</b>
<b>ID:</b> #{key_name} <b>ID:</b> #{key_name}
@ -50,7 +56,7 @@ profile_message = f'''
<b>Имя2:</b> #{name2_field} <b>Имя2:</b> #{name2_field}
<b>Код языка:</b> #{language_code_field} <b>Код языка:</b> #{language_code_field}
<b>Дата добавления:</b> #{create_datetime_field} <b>Дата добавления:</b> #{create_datetime_field}
''' ''')
user_profile_button_name = "📰 Профиль" user_profile_button_name = "📰 Профиль"
@ -68,7 +74,7 @@ async def ProfileOpen(a_Message, state = None):
user_info = GetUserInfo(a_Message.from_user.id) user_info = GetUserInfo(a_Message.from_user.id)
msg = profile_message msg = profile_message
if not user_info is None: if not user_info is None:
msg = msg.\ msg = str(msg).\
replace(f'#{key_name}', str(user_info[0])).\ replace(f'#{key_name}', str(user_info[0])).\
replace(f'#{name_field}', str(user_info[1])).\ replace(f'#{name_field}', str(user_info[1])).\
replace(f'#{name1_field}', str(user_info[2])).\ replace(f'#{name1_field}', str(user_info[2])).\

72
bot_modules/projects.py

@ -3,7 +3,7 @@
# Проекты # Проекты
from bot_sys import bot_bd, log, keyboard, user_access from bot_sys import bot_bd, log, keyboard, user_access, user_messages
from bot_modules import start, access, groups, tasks, needs, comments from bot_modules import start, access, groups, tasks, needs, comments
from template import bd_item_view, simple_message, bd_item_delete, bd_item_edit, bd_item, bd_item_add from template import bd_item_view, simple_message, bd_item_delete, bd_item_edit, bd_item, bd_item_add
@ -53,110 +53,116 @@ init_bd_cmds = [f'''CREATE TABLE IF NOT EXISTS {table_name}(
f"INSERT OR IGNORE INTO module_access (modName, modAccess, itemDefaultAccess) VALUES ('{module_name}', '{user_access.user_access_group_new}=va', '{user_access.user_access_group_new}=va');" f"INSERT OR IGNORE INTO module_access (modName, modAccess, itemDefaultAccess) VALUES ('{module_name}', '{user_access.user_access_group_new}=va', '{user_access.user_access_group_new}=va');"
] ]
def MSG(a_MessageName, a_MessageDesc):
def UpdateMSG(a_Message : user_messages.Message):
print(a_Message.m_MessageName, a_Message.m_MessageDesc)
globals()[a_Message.m_MessageName] = a_Message
user_messages.MSG(a_MessageName, a_MessageDesc, UpdateMSG, log.GetTimeNow())
# --------------------------------------------------------- # ---------------------------------------------------------
# Сообщения # Сообщения
projects_button_name = "🟥 Проекты" projects_button_name = "🟥 Проекты"
base_project_message = ''' MSG('base_project_message','''
<b>🟥 Проекты</b> <b>🟥 Проекты</b>
''' ''')
list_project_button_name = "📃 Список проектов" list_project_button_name = "📃 Список проектов"
select_project_message = ''' MSG('select_project_message','''
Пожалуйста, выберите проект: Пожалуйста, выберите проект:
''' ''')
error_find_proj_message = ''' MSG('error_find_proj_message','''
Ошибка, проект не найден Ошибка, проект не найден
''' ''')
project_open_message = f''' MSG('project_open_message',f'''
<b>Проект: #{name_field}</b> <b>Проект: #{name_field}</b>
#{desc_field} #{desc_field}
Время создания: #{create_datetime_field} Время создания: #{create_datetime_field}
''' ''')
# Создание проекта # Создание проекта
add_project_button_name = "✅ Добавить проект" add_project_button_name = "✅ Добавить проект"
project_create_name_message = ''' MSG('project_create_name_message','''
Создание проекта. Шаг 1 Создание проекта. Шаг 1
Введите название проекта: Введите название проекта:
''' ''')
project_create_desc_message = ''' MSG('project_create_desc_message','''
Создание проекта. Шаг 2 Создание проекта. Шаг 2
Введите описание проекта: Введите описание проекта:
''' ''')
project_create_photo_message = ''' MSG('project_create_photo_message','''
Создание проекта. Шаг 3 Создание проекта. Шаг 3
Загрузите обложку для проекта (Фото): Загрузите обложку для проекта (Фото):
Она будет отображаться в его описании. Она будет отображаться в его описании.
''' ''')
project_success_create_message = '''✅ Проект успешно добавлен!''' MSG('project_success_create_message','''✅ Проект успешно добавлен!''')
# Редактирование проекта. # Редактирование проекта.
edit_project_button_name = "🛠 Редактировать проект" edit_project_button_name = "🛠 Редактировать проект"
project_start_edit_message= ''' MSG('project_start_edit_message', '''
Пожалуйста, выберите действие: Пожалуйста, выберите действие:
''' ''')
project_select_to_edit_message = ''' MSG('project_select_to_edit_message','''
Выберите проект, который вы хотите отредактировать. Выберите проект, который вы хотите отредактировать.
''' ''')
edit_project_photo_button_name = "☐ Изменить изображение в проекте" edit_project_photo_button_name = "☐ Изменить изображение в проекте"
project_edit_photo_message = ''' MSG('project_edit_photo_message','''
Загрузите новую обложку для проекта (Фото): Загрузите новую обложку для проекта (Фото):
Она будет отображаться в его описании. Она будет отображаться в его описании.
''' ''')
edit_project_name_button_name = "≂ Изменить название в проекте" edit_project_name_button_name = "≂ Изменить название в проекте"
project_edit_name_message = f''' MSG('project_edit_name_message',f'''
Текущее название проекта: Текущее название проекта:
#{name_field} #{name_field}
Введите новое название проекта: Введите новое название проекта:
''' ''')
edit_project_desc_button_name = "𝌴 Изменить описание в проекте" edit_project_desc_button_name = "𝌴 Изменить описание в проекте"
project_edit_desc_message = f''' MSG('project_edit_desc_message',f'''
Текущее описание проекта: Текущее описание проекта:
#{desc_field} #{desc_field}
Введите новое описание проекта: Введите новое описание проекта:
''' ''')
edit_project_access_button_name = "✋ Изменить доступ к проекту" edit_project_access_button_name = "✋ Изменить доступ к проекту"
project_edit_access_message = f''' MSG('project_edit_access_message',f'''
Текущий доступ к проекту: Текущий доступ к проекту:
#{access_field} #{access_field}
{user_access.user_access_readme} {user_access.user_access_readme}
Введите новую строку доступа: Введите новую строку доступа:
''' ''')
project_success_edit_message = '''✅ Проект успешно отредактирован!''' MSG('project_success_edit_message','''✅ Проект успешно отредактирован!''')
# Удаление проекта # Удаление проекта
del_project_button_name = "❌ Удалить проект" del_project_button_name = "❌ Удалить проект"
project_select_to_delete_message = ''' MSG('project_select_to_delete_message','''
Выберите проект, который вы хотите удалить. Выберите проект, который вы хотите удалить.
Все задачи и потребности в этом проекте так же будут удалены! Все задачи и потребности в этом проекте так же будут удалены!
''' ''')
project_success_delete_message = '''✅ Проект успешно удалён!''' MSG('project_success_delete_message','''✅ Проект успешно удалён!''')
# --------------------------------------------------------- # ---------------------------------------------------------
# Работа с кнопками # Работа с кнопками
@ -205,7 +211,7 @@ def ShowMessageTemplate(a_StringMessage, keyboard_template_func = None):
if (len(a_Item) < 6): if (len(a_Item) < 6):
return simple_message.WorkFuncResult(error_find_proj_message) return simple_message.WorkFuncResult(error_find_proj_message)
msg = a_StringMessage.\ msg = str(a_StringMessage).\
replace(f'#{name_field}', a_Item[1]).\ replace(f'#{name_field}', a_Item[1]).\
replace(f'#{desc_field}', a_Item[2]).\ replace(f'#{desc_field}', a_Item[2]).\
replace(f'#{create_datetime_field}', a_Item[5]).\ replace(f'#{create_datetime_field}', a_Item[5]).\

11
bot_modules/start.py

@ -9,10 +9,11 @@ from template import simple_message
from aiogram.dispatcher import Dispatcher from aiogram.dispatcher import Dispatcher
MSG = user_messages.MSG def MSG(a_MessageName, a_MessageDesc):
def UpdateMSG(a_Message : user_messages.Message): def UpdateMSG(a_Message : user_messages.Message):
print(a_Message.m_MessageName, a_Message.m_MessageDesc) print(a_Message.m_MessageName, a_Message.m_MessageDesc)
globals()[a_Message.m_MessageName] = a_Message globals()[a_Message.m_MessageName] = a_Message
user_messages.MSG(a_MessageName, a_MessageDesc, UpdateMSG, log.GetTimeNow())
# --------------------------------------------------------- # ---------------------------------------------------------
# БД # БД
@ -29,7 +30,7 @@ MSG('start_message', '''
<b>Добро пожаловать!</b> <b>Добро пожаловать!</b>
Выберите возможные действия на кнопках ниже ''' Выберите возможные действия на кнопках ниже '''
, UpdateMSG) )
start_menu_button_name = "☰ Главное меню" start_menu_button_name = "☰ Главное меню"

5
bot_sys/log.py

@ -18,8 +18,11 @@ import colorama
import datetime import datetime
colorama.init() colorama.init()
def GetTimeNow():
return datetime.datetime.now()
def GetTime(): def GetTime():
now = datetime.datetime.now() now = GetTimeNow()
time = now.strftime(f"[%d.%m.%Y, %H:%M]") time = now.strftime(f"[%d.%m.%Y, %H:%M]")
return time return time

26
bot_sys/user_messages.py

@ -15,21 +15,38 @@ def GetMessages():
g_messages = {} g_messages = {}
return g_messages return g_messages
g_last_update = None
def UpdateSignal(a_DateTime):
global g_last_update
g_last_update = a_DateTime
# --------------------------------------------------------- # ---------------------------------------------------------
# Функции работы с собщениями # Функции работы с собщениями
# --------------------------------------------------------- # ---------------------------------------------------------
class Message: class Message:
def __init__(self, a_MessageName : str, a_MessageDesc : str, a_Language : str, a_PhotoID : str): def __init__(self, a_MessageName : str, a_MessageDesc : str, a_Language : str, a_PhotoID : str, a_DateTime):
self.m_MessageName = a_MessageName self.m_MessageName = a_MessageName
self.m_MessageDesc = a_MessageDesc self.m_MessageDesc = a_MessageDesc
self.m_Language = a_Language self.m_Language = a_Language
self.m_PhotoID = a_PhotoID self.m_PhotoID = a_PhotoID
self.m_DateTime = a_DateTime
def __str__(self): def __str__(self):
global g_last_update
last_update = g_last_update
if self.m_DateTime < last_update:
msg = GetMessages()
if not msg.get(self.m_Language, None):
msg[self.m_Language] = {}
new_msg = msg[self.m_Language].get(self.m_MessageName, self)
self.m_MessageName = new_msg.m_MessageName
self.m_MessageDesc = new_msg.m_MessageDesc
self.m_PhotoID = new_msg.m_PhotoID
self.m_DateTime = last_update
return f'{self.m_MessageDesc}' return f'{self.m_MessageDesc}'
def MSG(a_MessageName, a_MessageDesc, a_UpdateMSG): def MSG(a_MessageName, a_MessageDesc, a_UpdateMSG, a_DateTime):
cur_msg = Message(a_MessageName, a_MessageDesc, default_language, 0) cur_msg = Message(a_MessageName, a_MessageDesc, default_language, 0, a_DateTime)
msg = GetMessages() msg = GetMessages()
if not msg.get(default_language, None): if not msg.get(default_language, None):
msg[default_language] = {} msg[default_language] = {}
@ -37,6 +54,3 @@ def MSG(a_MessageName, a_MessageDesc, a_UpdateMSG):
msg[default_language][a_MessageName] = cur_msg msg[default_language][a_MessageName] = cur_msg
a_UpdateMSG(cur_msg) a_UpdateMSG(cur_msg)
def UpdateMSG(a_Message : Message):
print(a_Message.m_MessageName, a_Message.m_MessageDesc)
globals()[a_Message.m_MessageName] = a_Message

4
main.py

@ -9,7 +9,7 @@ from aiogram.utils import executor
from aiogram.dispatcher import Dispatcher from aiogram.dispatcher import Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.contrib.fsm_storage.memory import MemoryStorage
import sqlite3 import sqlite3
from bot_sys import config, log, bot_bd, user_access from bot_sys import config, log, bot_bd, user_access, user_messages
from bot_modules import profile, start, projects, groups, access, backup, tasks, needs, comments, messages, languages from bot_modules import profile, start, projects, groups, access, backup, tasks, needs, comments, messages, languages
storage = MemoryStorage() storage = MemoryStorage()
@ -27,6 +27,8 @@ for m in modules:
# Первичная инициализация базы данных # Первичная инициализация базы данных
bot_bd.BDExecute(init_bd_cmd) bot_bd.BDExecute(init_bd_cmd)
user_messages.UpdateSignal(log.GetTimeNow())
languages.FlushLanguages() languages.FlushLanguages()
messages.FlushMessages() messages.FlushMessages()

Loading…
Cancel
Save