mirror of
https://git.ugnet.gay/CrossTalk/azul.git
synced 2026-05-27 22:59:49 +00:00
67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
from enum import IntEnum
|
|
from typing import Dict
|
|
|
|
from core.backend import BackendSession
|
|
from core.models import ContactList, Contact
|
|
|
|
|
|
class CommandBitFlag(IntEnum):
|
|
CallbackReply = 256,
|
|
CallbackAction = 512,
|
|
CallbackError = 1024
|
|
|
|
|
|
def get_grouped_contacts(bs: BackendSession) -> Dict[str, list[Contact]]:
|
|
user = bs.user
|
|
detail = user.detail
|
|
|
|
contacts = list({
|
|
*detail.get_contacts_by_list(ContactList.AL),
|
|
*detail.get_contacts_by_list(ContactList.FL)
|
|
})
|
|
grouped_contacts = {}
|
|
|
|
# loop through every contact group
|
|
for group in detail._groups_by_id.values():
|
|
grouped_contacts[group.name] = []
|
|
|
|
# loop through every contact in this group
|
|
for contact in contacts:
|
|
for grp in contact._groups:
|
|
if grp.id == group.id:
|
|
grouped_contacts[group.name].append(contact)
|
|
|
|
# handle any contacts that might not be apart of any group
|
|
if ungrouped_contacts := [contact for contact in contacts if not contact._groups]:
|
|
grouped_contacts['(No Group)'] = []
|
|
|
|
for contact in ungrouped_contacts:
|
|
grouped_contacts['(No Group)'].append(contact)
|
|
|
|
return grouped_contacts
|
|
|
|
|
|
def get_contact_groups(bs: BackendSession) -> list[str]:
|
|
groups = []
|
|
|
|
user = bs.user
|
|
detail = user.detail
|
|
|
|
contacts = list({
|
|
*detail.get_contacts_by_list(ContactList.AL),
|
|
*detail.get_contacts_by_list(ContactList.FL)
|
|
})
|
|
|
|
for group in detail._groups_by_id.values():
|
|
groups.append(group.name)
|
|
|
|
# add a fake `(No Group)` group if there is any contacts not apart of any group
|
|
if any(not contact._groups for contact in contacts):
|
|
groups.append('(No Group)')
|
|
|
|
return groups
|
|
|
|
|
|
def unmarshal_msim_dict(data: str) -> Dict:
|
|
return dict(pair.split('=', 1) for pair in data.split('\x1c'))
|