{% set ns = namespace(account_id = peer.account['id'], prev_msg = none) %}
{#
Макрос, который парсит сообщение в HTML, результат зависит от типа сообщения
Args:
msg (vkms.messages.Message): Объект текущего сообщения, которое необходимо спарсить
prev_msg (Union[vkms.messages.Message, None]): Предыдущее сообщение
is_reply (bool): Флаг, есть ли у текущего сообщения ответ
is_fwd (bool): Флаг, является ли текущее сообщение пересланным
#}
{% macro parse_msg(msg, prev_msg, is_reply=false, is_fwd=false) %}
{#
Парсим имя пользователя, но делаем его невидимым, если автор предыдущего сообщения -
автор текущего (не удаляем, т.к. имя нужно для воспрозиведения голосового сообщения)
#}
{{ msg.username }}
{# Если сообщение было пересланно, добавляем точную дату отправки #}
{% if is_fwd %}
{{ msg.full_date() }} в {{ msg.time() }}
{% endif %}
{# Если сообщение отправлено в ответ, и на текущее сообщение нет ответа, парсим #}
{% if not (is_reply or is_fwd) and msg.reply_msg %}
{% if ans['id'] in atch.answer_ids %}
{% endif %}
{{ ans['rate'] | round | int }}%
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{# Добавляем время отправки сообщения #}
{% if not is_reply and not is_fwd %}
{% if msg.is_edited %}ред.{% endif %} {{ msg.time() }}
{% endif %}
{% endmacro %}
{% for msg in peer.msgs %}
{# Пишем дату текущего сообщения, если предыдущего сообщения не было или #}
{# если предыдущее и текущее сообщения были отправлены в разные дни #}
{% if ns.prev_msg is none or msg.date.date() != ns.prev_msg.date.date() %}
{{ msg.full_date() }}
{% set ns.prev_msg = none %}
{% endif %}
{# Если сообщение является сервисным, выводим текст действия #}
{% if msg.action %}
{{ msg.action }}
{% set ns.prev_msg = none %}
{% else %}
{# Вид сообщения зависит от того, является ли оно входящим или исходящим #}