Модульный Telegram-бот с возможностью редактирования прав доступа, как пользователям, так и группам пользователей
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

76 lines
2.5 KiB

#-*-coding utf-8-*-
# Общественное достояние, 2023, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+mirocod_platform_bot@narod.ru>
# Работа с подписками
from enum import Enum
from enum import auto
# Тип поля в таблице
class SubscribeType(Enum):
ANY_ITEM_ADD = auto()
ANY_ITEM_DEL = auto()
ANY_ITEM_EDIT = auto()
ITEM_DEL = auto()
ITEM_EDIT = auto()
ANY_ITEM_ADD_WITH_PARENT = auto()
ANY_ITEM_DEL_WITH_PARENT = auto()
ANY_ITEM_EDIT_WITH_PARENT = auto()
class BotSubscribes:
def __init__(self):
self.Clear()
def GetSubscribes(self):
return self.m_Subscribes
def Clear(self):
self.m_Subscribes = {}
def GetUserIDs(self, a_ModuleName, a_Type, a_ItemID = -1):
s = self.GetSubscribes()
ids = set()
for user_id, su in s.items():
sub_um = su.get(a_ModuleName, None)
if sub_um:
i = sub_um.get(str(a_Type), None)
if i == str(a_ItemID):
ids.add(user_id)
return ids
def AddSubscribe(self, a_UserID, a_ModuleName, a_Type, a_ItemID = -1):
s = self.GetSubscribes()
if not s.get(a_UserID, None):
s[a_UserID] = {}
if not s[a_UserID].get(a_ModuleName, None):
s[a_UserID][a_ModuleName] = {}
s[a_UserID][a_ModuleName][str(a_Type)] = str(a_ItemID)
def Test():
a = set()
a.add(1)
a.add(2)
a.add(1)
assert 1 in a
assert not 3 in a
user_id_1 = '123'
user_id_2 = '34234'
user_id_3 = '4234'
mod_1 = 'proj'
mod_2 = 'backup'
s = BotSubscribes()
s.AddSubscribe(user_id_1, mod_1, SubscribeType.ANY_ITEM_ADD)
s.AddSubscribe(user_id_2, mod_2, SubscribeType.ITEM_DEL)
assert len(s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD)) == 1
assert len(s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_DEL)) == 0
assert user_id_1 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD)
assert not user_id_2 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD)
assert not user_id_3 in s.GetUserIDs(mod_1, SubscribeType.ANY_ITEM_ADD)
assert len(s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL)) == 1
assert len(s.GetUserIDs(mod_2, SubscribeType.ANY_ITEM_ADD)) == 0
assert user_id_2 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL)
assert not user_id_1 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL)
assert not user_id_3 in s.GetUserIDs(mod_2, SubscribeType.ITEM_DEL)