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)
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), ), )