Exemple #1
0
def generate_mentions(names_usage: bool, students: str) -> str:
    """
    Генерирует призыв студентов.

    Args:
        names_usage: Использование имен студентов
        students: Список идентификаторов призываемых студентов

    Returns:
        str: Призыв студентов
    """
    mentions = []
    sep = ", " if names_usage else ""
    for student in students.split(","):
        if student:
            st = Student.get(id=int(student))
            hint = st.first_name if names_usage else "!"
            mentions.append(f"@id{st.vk_id} ({hint})")
    return sep.join(mentions)
Exemple #2
0
async def index_chat(ans: SimpleBotEvent):
    with logger.contextualize(user_id=ans.object.object.message.from_id):
        payload = hyperjson.loads(ans.object.object.message.payload)
        chat = Chat.get_by_id(payload["chat"])

        chat_members = await api.messages.get_conversation_members(chat.chat_id)
        group_members = db.students.get_active_students(chat.group_id)

        vk_set = prepare_set_from_vk(chat_members.response.items)
        db_set = prepare_set_from_db(group_members)

        diff_vk_db = vk_set.difference(db_set)  # есть в вк, нет в бд
        diff_db_vk = db_set.difference(vk_set)  # есть в бд, нет в вк

        query = await api.users.get(
            user_ids=list(diff_vk_db),
        )
        students = [Student.get(vk_id=st) for st in diff_db_vk]

        vk_list = [
            f"- @id{st.id} ({st.first_name} {st.last_name})" for st in query.response
        ]
        db_list = [
            f"- @id{st.vk_id} ({st.first_name} {st.second_name})" for st in students
        ]

        sep = "\n"

        await ans.answer(
            f"""
        Добавлены в чат, но не зарегистрированы в системе:\n{sep.join(vk_list) or "⸻"}
    Зарегистрированы в системе, но не добавлены в чат:\n{sep.join(db_list) or "⸻"}
    Вы можете зарегистрировать студентов в системе в автоматическом режиме,
     нажав соответствующую кнопку на клавиатуре. Студенты появятся в базе данных,
     вам останется лишь изменить тип их обучения (бюджет/контракт и пр.)
        """,
            keyboard=kbs.preferences.index_chat(
                chat.id,
                list(diff_vk_db),
                list(diff_db_vk),
            ),
        )