Очистка брошенных комнат в сервере Condiut Matrix

Понадобилось мне тут очистить брошенные комнаты в моем приватном сервере Conduit Matrix. По идее сервер, вроде как, должен сам время от времени зачищать такие «заброшки», но не делает почему-то. А то они периодически всплывают в интерфейсе клиента Element, что неудобно и некрасиво. С помощью Gemini получилось сделать рабочий скрипт на bash, который выполнил данную задачу. 

Перед использованием скрипта необходимо в админском чате дать команду list-rooms. Она выведет список вида:

!some_room_id Members: 2
!some_room_id Members: 0
!some_room_id Members: 3
!some_room_id Members: 0
!some_room_id Members: 0

Вместо some_room_id будут ID всех комнат на сервере. Включая заброшенные с нулевым кол-вом участников. Выдачу команды надо как есть вставить в файл purge.txt. Далее необходимо скрипт в виде sh на пару с файлом purge.tx закинуть на ваш сервер (или подойдет даже просто любой Linux, где есть curl) и запустить. Скрипт обработает только строки в purge.txt с теми Room ID, где Members имеет нулевое значение, остальные он пропустит.  После того, как скрипт завершит работу надо в клиенте Element выполнить очистку кэша и перезапуск. Вуаля, и брошенные комнаты больше о себе не напомнят.

Сам скрипт. Перед его использованием обязательно сделайте бэкап базы Conduit!

#!/bin/bash

TOKEN="токен_доступа_админа"
HOMESERVER="https://адрес_сервера_Conduit.tld"
INPUT_FILE="purge.txt"

if [ ! -f "$INPUT_FILE" ]; then
    echo "Ошибка: Файл $INPUT_FILE не найден!"
    exit 1
fi

while read -r line || [ -n "$line" ]; do
    # Игнорируем пустые строки
    [ -z "$line" ] && continue
    
    if [[ "$line" == *"Members: 0"* ]]; then
        ROOM_ID=$(echo "$line" | awk '{print $1}')
        
        if [ -n "$ROOM_ID" ]; then
            echo "--------------------------------------------------"
            echo "Удаление пустой комнаты: $ROOM_ID"
            
            # 1. Leave
            curl -s -X POST "${HOMESERVER}/_matrix/client/v3/rooms/${ROOM_ID}/leave" \
                 -H "Authorization: Bearer ${TOKEN}" \
                 -H "Content-Type: application/json" \
                 -d '{}'
            echo ""

            # 2. Forget
            curl -s -X POST "${HOMESERVER}/_matrix/client/v3/rooms/${ROOM_ID}/forget" \
                 -H "Authorization: Bearer ${TOKEN}" \
                 -H "Content-Type: application/json" \
                 -d '{}'
            echo ""
        fi
    fi
done < "$INPUT_FILE"

echo "Готово. Выполните Clear Cache в Element."

 

guest
0 комментариев