Понадобилось мне тут очистить брошенные комнаты в моем приватном сервере 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."