pax_global_header00006660000000000000000000000064134713772720014527gustar00rootroot0000000000000052 comment=975ce8906c42742dbb698fcf9fa15663c530df20 mtxclient-0.2.1/000077500000000000000000000000001347137727200135365ustar00rootroot00000000000000mtxclient-0.2.1/.ci/000077500000000000000000000000001347137727200142075ustar00rootroot00000000000000mtxclient-0.2.1/.ci/adjust-config.sh000077500000000000000000000006111347137727200173010ustar00rootroot00000000000000#!/bin/bash CMD="" if [[ ! -z $TRAVIS_OS_NAME ]]; then CMD="sudo" fi $CMD perl -pi -w -e \ 's/rc_messages_per_second.*/rc_messages_per_second: 100/g;' data/homeserver.yaml $CMD perl -pi -w -e \ 's/rc_message_burst_count.*/rc_message_burst_count: 1000/g;' data/homeserver.yaml $CMD perl -pi -w -e \ 's/enable_registration.*/enable_registration: True/g;' data/homeserver.yaml mtxclient-0.2.1/.ci/coverage.sh000077500000000000000000000004361347137727200163440ustar00rootroot00000000000000#!/bin/bash set -ex cd build/ # Capture coverage info. lcov --directory . --capture --output-file coverage.info # Filter out external code. lcov --remove coverage.info \ '/usr/*' \ '*tests*' \ --output-file coverage.info # Display results. lcov --list coverage.info mtxclient-0.2.1/.ci/install.sh000077500000000000000000000005221347137727200162130ustar00rootroot00000000000000#!/bin/bash set -ex if [ $TRAVIS_OS_NAME == osx ]; then brew update || true brew upgrade boost || true brew install libsodium clang-format brew tap nlohmann/json # the nlohmann install seems to make travis angry # because of the number of log messages brew install --with-cmake nlohmann_json > /dev/null fi mtxclient-0.2.1/.ci/script.sh000077500000000000000000000023641347137727200160570ustar00rootroot00000000000000#!/bin/bash set -ex if [ $TRAVIS_OS_NAME == linux ]; then export CXX=${CXX_VERSION} export CC=${CC_VERSION} sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/${CC_VERSION} 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/${CXX_VERSION} 10 sudo update-alternatives --set gcc "/usr/bin/${CC_VERSION}" sudo update-alternatives --set g++ "/usr/bin/${CXX_VERSION}" # Build the library. cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_LIB_TESTS=ON \ -DBUILD_SHARED_LIBS=ON \ -DCOVERAGE=${COVERAGE} || true cmake --build build # The tests will run anyway during coverage. if [ $COVERAGE != ON ]; then make test fi fi if [ $TRAVIS_OS_NAME == osx ]; then brew update brew upgrade cmake boost || true # Build dependencies. cmake -Hdeps -B.deps -DCMAKE_BUILD_TYPE=Release \ -DUSE_BUNDLED_BOOST=OFF \ -DUSE_BUNDLED_GTEST=OFF \ -DUSE_BUNDLED_JSON=OFF cmake --build .deps # Build the library. cmake -H. -Bbuild -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ -DBUILD_LIB_TESTS=OFF \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_PREFIX=.deps/usr || true cmake --build build make lint fi mtxclient-0.2.1/.clang-format000066400000000000000000000005121347137727200161070ustar00rootroot00000000000000--- Language: Cpp Standard: Cpp11 AccessModifierOffset: -8 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: true AllowShortFunctionsOnASingleLine: true BasedOnStyle: Mozilla ColumnLimit: 100 IndentCaseLabels: false IndentWidth: 8 KeepEmptyLinesAtTheStartOfBlocks: false PointerAlignment: Right Cpp11BracedListStyle: true mtxclient-0.2.1/.gitignore000066400000000000000000000005421347137727200155270ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o *.obj # Precompiled Headers *.gch *.pch # Compiled Dynamic libraries *.so *.dylib *.dll # Fortran module files *.mod # Compiled Static libraries *.lai *.la *.a *.lib # Executables *.exe *.out *.app # Build artifacts build/ # Editor tags compile_commands.json # Synapse data data/ # Deps .third-party .deps mtxclient-0.2.1/.travis.yml000066400000000000000000000030751347137727200156540ustar00rootroot00000000000000--- language: cpp sudo: required dist: trusty services: - docker notifications: email: false matrix: include: - os: osx osx_image: xcode9 compiler: clang - os: linux compiler: gcc env: - CXX_VERSION=g++-8 - CC_VERSION=gcc-8 - os: linux compiler: clang env: - CXX_VERSION=clang++-6.0 - CC_VERSION=clang-6.0 - COVERAGE=ON install: - | if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker build -t nheko-reborn/mtxclient -f Dockerfile . fi - ./.ci/install.sh script: - $CXX --version - cmake --version # Start the synapse server to run the tests. - if [ $TRAVIS_OS_NAME == linux ]; then make synapse; fi # Build the lib and run the test suite against synapse. - | if [ $TRAVIS_OS_NAME == linux ]; then docker run -v `pwd`:/build --net=host \ -e CXX_VERSION=${CXX_VERSION} \ -e CC_VERSION=${CC_VERSION} \ -e COVERAGE=${COVERAGE} \ -e TRAVIS_OS_NAME=${TRAVIS_OS_NAME} \ nheko-reborn/mtxclient \ /bin/bash -c "./.ci/script.sh" fi # Build the lib and run the linter. - | if [ $TRAVIS_OS_NAME == osx ]; then ./.ci/script.sh fi after_success: # Generate coverage report and upload report to CodeCov. - | if [ $COVERAGE == ON ]; then docker run -v `pwd`:/build \ --net=host nheko-reborn/mtxclient \ /bin/bash -c "make -C build -j1 test_coverage && ./.ci/coverage.sh" && \ bash <(curl -s https://codecov.io/bash) -f "!*tests*" || echo "Codecov failed" fi mtxclient-0.2.1/CMakeLists.txt000066400000000000000000000261061347137727200163030ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.11) project(matrix_client VERSION 0.2.1 LANGUAGES CXX C) option(ASAN "Compile with address sanitizers" OFF) option(BUILD_LIB_TESTS "Build tests" ON) option(BUILD_LIB_EXAMPLES "Build examples" ON) option(COVERAGE "Calculate test coverage" OFF) option(IWYU "Check headers with include-what-you-use" OFF) option(BUILD_SHARED_LIBS "Specifies whether to build mtxclient as a shared library lib or not" ON) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_definitions(-DBOOST_MPL_LIMIT_LIST_SIZE=30) add_definitions(-DBOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) if(NOT MSVC) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ -Wall \ -Wextra \ -pipe \ -pedantic \ -fsized-deallocation \ -fdiagnostics-color=always \ -Wunreachable-code" ) endif() if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj -bigobj") endif() if(ASAN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined") endif() if(COVERAGE) include(CodeCoverage) add_custom_target(ctest COMMAND ${CMAKE_CTEST_COMMAND}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") setup_target_for_coverage(test_coverage ctest coverage) endif() if(NOT MSVC AND NOT APPLE) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) endif() include(FeatureSummary) find_package(OpenSSL) set_package_properties(OpenSSL PROPERTIES DESCRIPTION "Open source SSL and TLS implementation and cryptographic library" URL "https://www.openssl.org/" TYPE REQUIRED ) find_package(ZLIB) set_package_properties(ZLIB PROPERTIES DESCRIPTION "A free compression library unencumbered by patents" URL "https://www.zlib.net/" TYPE REQUIRED ) find_package(Olm 2) set_package_properties(Olm PROPERTIES DESCRIPTION "An implementation of the Double Ratchet cryptographic ratchet" URL "https://git.matrix.org/git/olm/about/" TYPE REQUIRED ) find_package(sodium 1.0.14) set_package_properties(sodium PROPERTIES DESCRIPTION "A modern, portable, easy to use crypto library" URL "https://github.com/jedisct1/libsodium" TYPE REQUIRED ) find_package(nlohmann_json 3.2.0) set_package_properties(nlohmann_json PROPERTIES DESCRIPTION "JSON for Modern C++, a C++11 header-only JSON class" URL "https://nlohmann.github.io/json/" TYPE REQUIRED ) set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_STATIC_RUNTIME OFF) set(Boost_USE_MULTITHREADED ON) find_package(Boost 1.66 COMPONENTS atomic chrono date_time iostreams random regex system thread) set_package_properties(Boost PROPERTIES DESCRIPTION "Free peer-reviewed portable C++ source libraries" URL "https://www.boost.org/" TYPE REQUIRED ) add_library(matrix_client lib/http/client.cpp lib/http/session.cpp lib/crypto/client.cpp lib/utils.cpp lib/structs/common.cpp lib/structs/errors.cpp lib/structs/events.cpp lib/structs/requests.cpp lib/structs/events/aliases.cpp lib/structs/events/avatar.cpp lib/structs/events/canonical_alias.cpp lib/structs/events/common.cpp lib/structs/events/create.cpp lib/structs/events/encrypted.cpp lib/structs/events/encryption.cpp lib/structs/events/guest_access.cpp lib/structs/events/history_visibility.cpp lib/structs/events/join_rules.cpp lib/structs/events/member.cpp lib/structs/events/name.cpp lib/structs/events/pinned_events.cpp lib/structs/events/power_levels.cpp lib/structs/events/redaction.cpp lib/structs/events/tag.cpp lib/structs/events/topic.cpp lib/structs/events/messages/audio.cpp lib/structs/events/messages/emote.cpp lib/structs/events/messages/file.cpp lib/structs/events/messages/image.cpp lib/structs/events/messages/notice.cpp lib/structs/events/messages/text.cpp lib/structs/events/messages/video.cpp lib/structs/responses/common.cpp lib/structs/responses/create_room.cpp lib/structs/responses/crypto.cpp lib/structs/responses/empty.cpp lib/structs/responses/login.cpp lib/structs/responses/media.cpp lib/structs/responses/messages.cpp lib/structs/responses/notifications.cpp lib/structs/responses/profile.cpp lib/structs/responses/register.cpp lib/structs/responses/sync.cpp lib/structs/responses/version.cpp) add_library(MatrixClient::MatrixClient ALIAS matrix_client) target_include_directories(matrix_client SYSTEM PUBLIC ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${sodium_INCLUDE_DIR}) target_include_directories( matrix_client PUBLIC $ $) target_link_libraries(matrix_client PUBLIC ${Boost_LIBRARIES} ${sodium_LIBRARY_RELEASE} OpenSSL::Crypto OpenSSL::SSL Olm::Olm ZLIB::ZLIB nlohmann_json::nlohmann_json) if(NOT MSVC AND NOT APPLE) target_link_libraries(matrix_client PUBLIC Threads::Threads) endif() if(IWYU) find_program(iwyu_path NAMES include-what-you-use iwyu) if(iwyu_path) set_property(TARGET matrix_client PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${iwyu_path}) else() message(WARNING "Could not find the program include-what-you-use") endif() endif() if(BUILD_LIB_EXAMPLES) add_subdirectory(examples) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) # # Installation & Target configuration. # include(GNUInstallDirs) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/MatrixClient) install(TARGETS matrix_client EXPORT matrix_client-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) set_target_properties(matrix_client PROPERTIES EXPORT_NAME MatrixClient) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT matrix_client-targets FILE MatrixClientTargets.cmake NAMESPACE MatrixClient:: DESTINATION ${INSTALL_CONFIGDIR}) include(CMakePackageConfigHelpers) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion) configure_package_config_file( ${CMAKE_CURRENT_LIST_DIR}/cmake/MatrixClientConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfig.cmake INSTALL_DESTINATION ${INSTALL_CONFIGDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientConfigVersion.cmake DESTINATION ${INSTALL_CONFIGDIR}) export(EXPORT matrix_client-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/MatrixClientTargets.cmake NAMESPACE MatrixClient::) export(PACKAGE MatrixClient) set_property(TARGET matrix_client PROPERTY SOVERSION ${PROJECT_VERSION}) if(BUILD_LIB_TESTS) enable_testing() find_package(GTest REQUIRED) file(COPY tests/fixtures DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) add_executable(client_api tests/client_api.cpp) target_link_libraries(client_api MatrixClient::MatrixClient GTest::GTest GTest::Main) target_include_directories(client_api PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_executable(media_api tests/media_api.cpp) target_link_libraries(media_api MatrixClient::MatrixClient GTest::GTest GTest::Main) target_include_directories(media_api PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_executable(e2ee tests/e2ee.cpp) target_link_libraries(e2ee MatrixClient::MatrixClient GTest::GTest GTest::Main) target_include_directories(e2ee PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_executable(utils tests/utils.cpp) target_link_libraries(utils MatrixClient::MatrixClient GTest::GTest GTest::Main) target_include_directories(utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_executable(connection tests/connection.cpp) target_link_libraries(connection MatrixClient::MatrixClient GTest::GTest GTest::Main) target_include_directories(connection PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tests) add_executable(identifiers tests/identifiers.cpp) target_link_libraries(identifiers MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(events tests/events.cpp) target_link_libraries(events MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(messages tests/messages.cpp) target_link_libraries(messages MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(responses tests/responses.cpp) target_link_libraries(responses MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(requests tests/requests.cpp) target_link_libraries(requests MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(errors tests/errors.cpp) target_link_libraries(errors MatrixClient::MatrixClient GTest::GTest GTest::Main) add_executable(crypto tests/crypto.cpp) target_link_libraries(crypto MatrixClient::MatrixClient GTest::GTest GTest::Main) add_test(BasicConnectivity connection) add_test(ClientAPI client_api) add_test(MediaAPI media_api) add_test(Encryption e2ee) add_test(Utilities utils) add_test(Identifiers identifiers) add_test(Errors errors) add_test(CryptoStructs crypto) add_test(StateEvents events) add_test(RoomEvents messages) add_test(Responses responses) add_test(Requests requests) endif() mtxclient-0.2.1/Dockerfile000066400000000000000000000101121347137727200155230ustar00rootroot00000000000000FROM ubuntu:14.04 ENV LIBSODIUM_VERSION=1.0.16 ENV SPDLOG_VERSION=1.1.0 ENV OLM_VERSION=2.2.2 ENV NLOHMANN_VERSION=v3.2.0 ENV CMAKE_VERSION=3.12.1 ENV CMAKE_SHORT_VERSION=3.12 RUN \ apt-get update -qq && \ apt-get install -y --no-install-recommends apt-transport-https software-properties-common curl && \ # cmake curl https://cmake.org/files/v${CMAKE_SHORT_VERSION}/cmake-${CMAKE_VERSION}-Linux-x86_64.sh -o cmake-install.sh && \ bash cmake-install.sh --skip-license --prefix=/usr/local && \ export PATH="/usr/local/bin:$PATH" && \ rm -f /*.sh && \ # Toolchains add-apt-repository -y ppa:ubuntu-toolchain-r/test && \ curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ apt-add-repository "deb https://apt.llvm.org/trusty/ llvm-toolchain-trusty-6.0 main" && \ apt-get update -qq && \ apt-get install -y --no-install-recommends \ ninja-build \ pkg-config \ curl \ make \ clang++-6.0 \ clang-6.0 \ g++-8 \ g++-5 \ unzip git lcov \ libssl-dev \ openssl && \ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 10 && \ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 10 && \ sudo update-alternatives --set gcc "/usr/bin/gcc-8" && \ sudo update-alternatives --set g++ "/usr/bin/g++-8" && \ # libsodium mkdir -p /build/libsodium && cd /build/libsodium && \ curl -L https://download.libsodium.org/libsodium/releases/libsodium-${LIBSODIUM_VERSION}.tar.gz -o libsodium-${LIBSODIUM_VERSION}.tar.gz && \ tar xfz libsodium-${LIBSODIUM_VERSION}.tar.gz && cd /build/libsodium/libsodium-${LIBSODIUM_VERSION}/ && \ ./configure && make && make check && make install && \ # spdlog mkdir -p /build/spdlog && cd /build/spdlog && \ curl -L https://github.com/gabime/spdlog/archive/v${SPDLOG_VERSION}.tar.gz -o spdlog-${SPDLOG_VERSION}.tar.gz && \ tar xfz spdlog-${SPDLOG_VERSION}.tar.gz && cd /build/spdlog/spdlog-${SPDLOG_VERSION}/ && \ cmake -H. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release \ -DSPDLOG_BUILD_EXAMPLES=0 \ -DSPDLOG_BUILD_BENCH=0 \ -DSPDLOG_BUILD_TESTING=0 && \ cmake --build build --target install && \ # boost mkdir -p /build/boost && cd /build/boost && \ curl -L https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz -o boost_1_68_0.tar.gz && \ tar xfz boost_1_68_0.tar.gz && cd /build/boost/boost_1_68_0/ && \ ./bootstrap.sh --with-libraries=random,thread,system,iostreams,atomic,chrono,date_time,regex && \ ./b2 -d0 cxxstd=14 variant=release link=static threading=multi --layout=system && \ ./b2 -d0 install && \ # Gtest mkdir -p /build/gtest && cd /build/gtest && \ curl -L https://github.com/google/googletest/archive/release-1.8.1.tar.gz -o release-1.8.1.tar.gz && \ tar xfz release-1.8.1.tar.gz && cd /build/gtest/googletest-release-1.8.1/ && \ cmake -H. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release && \ cmake --build build --target install && \ # libolm mkdir -p /build/olm && cd /build/olm && \ git clone https://git.matrix.org/git/olm.git && \ cd olm && mkdir -p cmake && \ git checkout ${OLM_VERSION} && \ curl -L https://raw.githubusercontent.com/Nheko-Reborn/mtxclient/master/deps/cmake/OlmCMakeLists.txt -o CMakeLists.txt && \ mkdir -p cmake && \ curl -L https://raw.githubusercontent.com/Nheko-Reborn/mtxclient/master/deps/cmake/OlmConfig.cmake.in -o cmake/OlmConfig.cmake.in && \ cmake -H. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release && \ cmake --build build --target install && \ # json.hpp mkdir /build/json && cd /build/json && \ git clone --branch ${NLOHMANN_VERSION} --depth 1 https://github.com/nlohmann/json && \ cd json && \ cmake . && \ make && \ make install && \ #curl -L https://github.com/nlohmann/json/releases/download/v3.2.0/json.hpp -o /usr/local/include/json.hpp && \ rm -rf /build/* && \ rm -rf /var/lib/apt/lists/* && \ apt-get clean && \ apt-get autoclean && \ apt-get autoremove WORKDIR /build mtxclient-0.2.1/LICENSE000066400000000000000000000020651347137727200145460ustar00rootroot00000000000000MIT License Copyright (c) 2018 Konstantinos Sideris Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mtxclient-0.2.1/Makefile000066400000000000000000000052011347137727200151740ustar00rootroot00000000000000FILES=`find lib include tests examples -type f -type f \( -iname "*.cpp" -o -iname "*.hpp" \)` SYNAPSE_IMAGE="avhost/docker-matrix:v0.33.4" DEPS_BUILD_DIR=.deps DEPS_SOURCE_DIR=deps help: ## This help message @grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' @# Change the digit following by an 's' to adjust the width of the help text third-party: ## Build & install third party dependencies @cmake -GNinja -H${DEPS_SOURCE_DIR} -B${DEPS_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DUSE_BUNDLED_BOOST=OFF -DUSE_BUNDLED_JSON=OFF @cmake --build ${DEPS_BUILD_DIR} debug: ## Create a debug build @cmake -GNinja -H. -Bbuild \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_EXPORT_COMPILE_COMMANDS=1 \ -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ -DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr @cmake --build build release: ## Create an optimized build @cmake -GNinja -H. -Bbuild \ -DCMAKE_BUILD_TYPE=Release \ -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ -DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr @cmake --build build test: ## Run the tests @cd build/ && GTEST_COLOR=1 ctest --verbose asan: ## Create a debug build using address sanitizers @cmake -GNinja -H. -Bbuild \ -DCMAKE_BUILD_TYPE=Debug \ -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \ -DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr \ -DASAN=1 @cmake --build build image: docker build -t mtxclient-dev . synapse: ## Start a synapse instance on docker @docker run -v `pwd`/data:/data --rm \ -e SERVER_NAME=localhost -e REPORT_STATS=no ${SYNAPSE_IMAGE} generate @./.ci/adjust-config.sh @docker run -d \ --name synapse \ -p 443:8448 \ -p 8448:8448 \ -p 8008:8008 \ -v `pwd`/data:/data ${SYNAPSE_IMAGE} start @echo Waiting for synapse to start... @until curl -s -f -k https://localhost:443/_matrix/client/versions; do echo "Checking ..."; sleep 2; done @echo Register alice @docker exec synapse /bin/bash -c 'register_new_matrix_user --admin -u alice -p secret -c /data/homeserver.yaml http://localhost:8008' @echo Register bob @docker exec synapse /bin/bash -c 'register_new_matrix_user --admin -u bob -p secret -c /data/homeserver.yaml http://localhost:8008' @echo Register carl @docker exec synapse /bin/bash -c 'register_new_matrix_user --admin -u carl -p secret -c /data/homeserver.yaml http://localhost:8008' stop-synapse: ## Stop any running instance of synapse @rm -rf ./data/* @docker rm -f synapse 2>&1>/dev/null restart: stop-synapse synapse lint: ## Run clang-format on the source code @clang-format -i ${FILES} && git diff --exit-code clean: ## Delete the build directory rm -rf build mtxclient-0.2.1/README.md000066400000000000000000000031711347137727200150170ustar00rootroot00000000000000mtxclient --- [![Build Status](https://travis-ci.org/Nheko-Reborn/mtxclient.svg?branch=master)](https://travis-ci.org/Nheko-Reborn/mtxclient) [![Build status](https://ci.appveyor.com/api/projects/status/hyp1n9pq3wtv8dqu/branch/master?svg=true)](https://ci.appveyor.com/project/redsky17/mtxclient/branch/master) [![codecov](https://codecov.io/gh/mujx/mtxclient/branch/master/graph/badge.svg)](https://codecov.io/gh/mujx/mtxclient) [![experimental](https://img.shields.io/badge/stability-experimental-orange.svg)](http://github.com/badges/stability-badges) Client API library for the Matrix protocol, built on top of Boost.Asio. ## Build instructions ### Dependencies - Boost 1.66 (includes Boost.Beast) - OpenSSL - C++ 14 compiler - CMake 3.1 or greater - Google Test (for testing) - libsodium 1.0.14 or greater Boost and GTest will be built automatically by CMake if they're not found on your system. Below is an example which will build the library along with the tests & examples. #### Linux ```bash cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Debug cmake --build build ``` #### macOS You will need to pass as argument (`-DOPENSSL_ROOT_DIR`) the installation root of openssl. ```bash cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Debug -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl cmake --build build ``` You can toggle off the tests & examples by passing `-DBUILD_LIB_TESTS=OFF` & `-DBUILD_LIB_EXAMPLES=OFF` respectively. ## Running the tests In order to run the integration tests you'll need a local synapse instance. You can start an instance with docker by running the following ```bash make synapse ``` then run the test suite ```bash make test ``` mtxclient-0.2.1/appveyor.yml000066400000000000000000000032451347137727200161320ustar00rootroot00000000000000--- version: 0.2.0-{build} configuration: Release image: Visual Studio 2017 platform: x64 cache: c:\tools\vcpkg\installed\ build: verbosity: minimal install: - set PATH=%PATH%;C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin - mingw32-make.exe --version - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" - cd "C:\Tools\vcpkg"&& git pull && .\bootstrap-vcpkg.bat && cd %APPVEYOR_BUILD_FOLDER% - vcpkg install nlohmann-json:%PLATFORM%-windows boost-asio:%PLATFORM%-windows boost-beast:%PLATFORM%-windows boost-iostreams:%PLATFORM%-windows boost-random:%PLATFORM%-windows boost-signals2:%PLATFORM%-windows boost-system:%PLATFORM%-windows boost-thread:%PLATFORM%-windows libsodium:%PLATFORM%-windows openssl:%PLATFORM%-windows spdlog:%PLATFORM%-windows zlib:%PLATFORM%-windows build_script: - cmake --version - cmake -G "Visual Studio 15 2017 Win64" -Hdeps -B.deps -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DUSE_BUNDLED_BOOST=OFF -DUSE_BUNDLED_SPDLOG=OFF -DUSE_BUNDLED_GTEST=OFF -DUSE_BUNDLED_JSON=OFF - cmake --build .deps --config Release - cmake -G "Visual Studio 15 2017 Win64" -H. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DBUILD_LIB_TESTS=OFF -DBUILD_LIB_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX=.deps/usr - cmake --build build --config Release mtxclient-0.2.1/cmake/000077500000000000000000000000001347137727200146165ustar00rootroot00000000000000mtxclient-0.2.1/cmake/CodeCoverage.cmake000066400000000000000000000164371347137727200201610ustar00rootroot00000000000000# Copyright (c) 2012 - 2015, Lars Bilke # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # 3. Neither the name of the copyright holder nor the names of its contributors # may be used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # # # 2012-01-31, Lars Bilke # - Enable Code Coverage # # 2013-09-17, Joakim Söderberg # - Added support for Clang. # - Some additional usage instructions. # # USAGE: # 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here: # http://stackoverflow.com/a/22404544/80480 # # 1. Copy this file into your cmake modules path. # # 2. Add the following line to your CMakeLists.txt: # INCLUDE(CodeCoverage) # # 3. Set compiler flags to turn off optimization and enable coverage: # SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") # SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") # # 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target # which runs your test executable and produces a lcov code coverage report: # Example: # SETUP_TARGET_FOR_COVERAGE( # my_coverage_target # Name for custom target. # test_driver # Name of the test driver executable that runs the tests. # # NOTE! This should always have a ZERO as exit code # # otherwise the coverage generation will not complete. # coverage # Name of output directory. # ) # # 4. Build a Debug build: # cmake -DCMAKE_BUILD_TYPE=Debug .. # make # make my_coverage_target # # # Check prereqs FIND_PROGRAM( GCOV_PATH gcov ) FIND_PROGRAM( LCOV_PATH lcov ) FIND_PROGRAM( GENHTML_PATH genhtml ) FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) IF(NOT GCOV_PATH) MESSAGE(FATAL_ERROR "gcov not found! Aborting...") ENDIF() # NOT GCOV_PATH IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") ENDIF() ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") ENDIF() # CHECK VALID COMPILER SET(CMAKE_CXX_FLAGS_COVERAGE "-g -O0 --coverage -fprofile-arcs -ftest-coverage" CACHE STRING "Flags used by the C++ compiler during coverage builds." FORCE ) SET(CMAKE_C_FLAGS_COVERAGE "-g -O0 --coverage -fprofile-arcs -ftest-coverage" CACHE STRING "Flags used by the C compiler during coverage builds." FORCE ) SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE "" CACHE STRING "Flags used for linking binaries during coverage builds." FORCE ) SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "" CACHE STRING "Flags used by the shared libraries linker during coverage builds." FORCE ) MARK_AS_ADVANCED( CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" # Param _targetname The name of new the custom make target # Param _testrunner The name of the target which runs the tests. # MUST return ZERO always, even on errors. # If not, no coverage report will be created! # Param _outputname lcov output is generated as _outputname.info # HTML report is generated in _outputname/index.html # Optional fourth parameter is passed as arguments to _testrunner # Pass them in list form, e.g.: "-j;2" for -j 2 FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) IF(NOT LCOV_PATH) MESSAGE(FATAL_ERROR "lcov not found! Aborting...") ENDIF() # NOT LCOV_PATH IF(NOT GENHTML_PATH) MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") ENDIF() # NOT GENHTML_PATH SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") SET(coverage_cleaned "${coverage_info}.cleaned") SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") # Setup target ADD_CUSTOM_TARGET(${_targetname} # Cleanup lcov ${LCOV_PATH} --directory . --zerocounters # Run tests COMMAND ${test_command} ${ARGV3} # Capturing lcov counters and generating report COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned} COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." ) # Show info where to find the report ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD COMMAND ; COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." ) ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE # Param _targetname The name of new the custom make target # Param _testrunner The name of the target which runs the tests # Param _outputname cobertura output is generated as _outputname.xml # Optional fourth parameter is passed as arguments to _testrunner # Pass them in list form, e.g.: "-j;2" for -j 2 FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) IF(NOT PYTHON_EXECUTABLE) MESSAGE(FATAL_ERROR "Python not found! Aborting...") ENDIF() # NOT PYTHON_EXECUTABLE IF(NOT GCOVR_PATH) MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") ENDIF() # NOT GCOVR_PATH ADD_CUSTOM_TARGET(${_targetname} # Run tests ${_testrunner} ${ARGV3} # Running gcovr COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Running gcovr to produce Cobertura code coverage report." ) # Show info where to find the report ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD COMMAND ; COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." ) ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA mtxclient-0.2.1/cmake/FindOlm.cmake000066400000000000000000000022171347137727200171520ustar00rootroot00000000000000# # CMake module to search for the olm library # # On success, the macro sets the following variables: # OLM_FOUND = if the library found # OLM_LIBRARY = full path to the library # OLM_INCLUDE_DIR = where to find the library headers # find_path(OLM_INCLUDE_DIR NAMES olm/olm.h PATHS /usr/include /usr/local/include $ENV{LIB_DIR}/include $ENV{LIB_DIR}/include/olm) find_library(OLM_LIBRARY NAMES olm PATHS /usr/lib /usr/local/lib $ENV{LIB_DIR}/lib) if(OLM_FOUND) set(OLM_INCLUDE_DIRS ${OLM_INCLUDE_DIR}) if(NOT OLM_LIBRARIES) set(OLM_LIBRARIES ${OLM_LIBRARY}) endif() endif() if(NOT TARGET Olm::Olm) add_library(Olm::Olm UNKNOWN IMPORTED) set_target_properties(Olm::Olm PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${OLM_INCLUDE_DIR}) set_property(TARGET Olm::Olm APPEND PROPERTY IMPORTED_LOCATION ${OLM_LIBRARY}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(OLM DEFAULT_MSG OLM_INCLUDE_DIR OLM_LIBRARY) mark_as_advanced(OLM_LIBRARY OLM_INCLUDE_DIR) mtxclient-0.2.1/cmake/Findsodium.cmake000066400000000000000000000227531347137727200177320ustar00rootroot00000000000000# Written in 2016 by Henrik Steffen Gaßmann # # To the extent possible under law, the author(s) have dedicated all # copyright and related and neighboring rights to this software to the # public domain worldwide. This software is distributed without any warranty. # # You should have received a copy of the CC0 Public Domain Dedication # along with this software. If not, see # # http://creativecommons.org/publicdomain/zero/1.0/ # ######################################################################## # Tries to find the local libsodium installation. # # On Windows the sodium_DIR environment variable is used as a default # hint which can be overridden by setting the corresponding cmake variable. # # Once done the following variables will be defined: # # sodium_FOUND # sodium_INCLUDE_DIR # sodium_LIBRARY_DEBUG # sodium_LIBRARY_RELEASE # # # Furthermore an imported "sodium" target is created. # if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") set(_GCC_COMPATIBLE 1) endif() # static library option if (NOT DEFINED sodium_USE_STATIC_LIBS) option(sodium_USE_STATIC_LIBS "enable to statically link against sodium" OFF) endif() if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) unset(sodium_LIBRARY CACHE) unset(sodium_LIBRARY_DEBUG CACHE) unset(sodium_LIBRARY_RELEASE CACHE) unset(sodium_DLL_DEBUG CACHE) unset(sodium_DLL_RELEASE CACHE) set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable") endif() ######################################################################## # UNIX if (UNIX) # import pkg-config find_package(PkgConfig QUIET) if (PKG_CONFIG_FOUND) pkg_check_modules(sodium_PKG QUIET libsodium) endif() if(sodium_USE_STATIC_LIBS) foreach(_libname ${sodium_PKG_STATIC_LIBRARIES}) if (NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending with .a list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a") endif() endforeach() list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES) # if pkgconfig for libsodium doesn't provide # static lib info, then override PKG_STATIC here.. if (sodium_PKG_STATIC_LIBRARIES STREQUAL "") set(sodium_PKG_STATIC_LIBRARIES libsodium.a) endif() set(XPREFIX sodium_PKG_STATIC) else() if (sodium_PKG_LIBRARIES STREQUAL "") set(sodium_PKG_LIBRARIES sodium) endif() set(XPREFIX sodium_PKG) endif() find_path(sodium_INCLUDE_DIR sodium.h HINTS ${${XPREFIX}_INCLUDE_DIRS} ) find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} HINTS ${${XPREFIX}_LIBRARY_DIRS} ) find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} HINTS ${${XPREFIX}_LIBRARY_DIRS} ) ######################################################################## # Windows elseif (WIN32) set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory") mark_as_advanced(sodium_DIR) find_path(sodium_INCLUDE_DIR sodium.h HINTS ${sodium_DIR} PATH_SUFFIXES include ) if (MSVC) # detect target architecture file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" [=[ #if defined _M_IX86 #error ARCH_VALUE x86_32 #elif defined _M_X64 #error ARCH_VALUE x86_64 #endif #error ARCH_VALUE unknown ]=]) try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.c" OUTPUT_VARIABLE _COMPILATION_LOG ) string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") # construct library path if (_TARGET_ARCH STREQUAL "x86_32") string(APPEND _PLATFORM_PATH "Win32") elseif(_TARGET_ARCH STREQUAL "x86_64") string(APPEND _PLATFORM_PATH "x64") else() message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") endif() string(APPEND _PLATFORM_PATH "/$$CONFIG$$") if (MSVC_VERSION LESS 1900) math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") else() math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") endif() string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") if (sodium_USE_STATIC_LIBS) string(APPEND _PLATFORM_PATH "/static") else() string(APPEND _PLATFORM_PATH "/dynamic") endif() string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") find_library(sodium_LIBRARY_DEBUG libsodium.lib HINTS ${sodium_DIR} PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} ) find_library(sodium_LIBRARY_RELEASE libsodium.lib HINTS ${sodium_DIR} PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} ) if (NOT sodium_USE_STATIC_LIBS) set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES}) set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") find_library(sodium_DLL_DEBUG libsodium HINTS ${sodium_DIR} PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} ) find_library(sodium_DLL_RELEASE libsodium HINTS ${sodium_DIR} PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} ) set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK}) endif() elseif(_GCC_COMPATIBLE) if (sodium_USE_STATIC_LIBS) find_library(sodium_LIBRARY_DEBUG libsodium.a HINTS ${sodium_DIR} PATH_SUFFIXES lib ) find_library(sodium_LIBRARY_RELEASE libsodium.a HINTS ${sodium_DIR} PATH_SUFFIXES lib ) else() find_library(sodium_LIBRARY_DEBUG libsodium.dll.a HINTS ${sodium_DIR} PATH_SUFFIXES lib ) find_library(sodium_LIBRARY_RELEASE libsodium.dll.a HINTS ${sodium_DIR} PATH_SUFFIXES lib ) file(GLOB _DLL LIST_DIRECTORIES false RELATIVE "${sodium_DIR}/bin" "${sodium_DIR}/bin/libsodium*.dll" ) find_library(sodium_DLL_DEBUG ${_DLL} libsodium HINTS ${sodium_DIR} PATH_SUFFIXES bin ) find_library(sodium_DLL_RELEASE ${_DLL} libsodium HINTS ${sodium_DIR} PATH_SUFFIXES bin ) endif() else() message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") endif() ######################################################################## # unsupported else() message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") endif() ######################################################################## # common stuff # extract sodium version if (sodium_INCLUDE_DIR) set(_VERSION_HEADER "${sodium_INCLUDE_DIR}/sodium/version.h") if (EXISTS "${_VERSION_HEADER}") file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1" sodium_VERSION "${_VERSION_HEADER_CONTENT}") set(sodium_VERSION "${sodium_VERSION}") endif() endif() # communicate results include(FindPackageHandleStandardArgs) find_package_handle_standard_args(sodium REQUIRED_VARS sodium_LIBRARY_RELEASE sodium_LIBRARY_DEBUG sodium_INCLUDE_DIR VERSION_VAR sodium_VERSION ) # mark file paths as advanced mark_as_advanced(sodium_INCLUDE_DIR) mark_as_advanced(sodium_LIBRARY_DEBUG) mark_as_advanced(sodium_LIBRARY_RELEASE) if (WIN32) mark_as_advanced(sodium_DLL_DEBUG) mark_as_advanced(sodium_DLL_RELEASE) endif() # create imported target if(sodium_USE_STATIC_LIBS) set(_LIB_TYPE STATIC) else() set(_LIB_TYPE SHARED) endif() add_library(sodium ${_LIB_TYPE} IMPORTED) set_target_properties(sodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" ) if (sodium_USE_STATIC_LIBS) set_target_properties(sodium PROPERTIES INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" ) else() if (UNIX) set_target_properties(sodium PROPERTIES IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" ) elseif (WIN32) set_target_properties(sodium PROPERTIES IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}" IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}" ) if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) set_target_properties(sodium PROPERTIES IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}" ) endif() if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) set_target_properties(sodium PROPERTIES IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}" ) endif() endif() endif() mtxclient-0.2.1/cmake/MatrixClientConfig.cmake.in000066400000000000000000000005761347137727200217660ustar00rootroot00000000000000get_filename_component(MatrixClient_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) include(CMakeFindDependencyMacro) list(APPEND CMAKE_MODULE_PATH ${MatrixClient_CMAKE_DIR}) list(REMOVE_AT CMAKE_MODULE_PATH -1) if(NOT TARGET MatrixClient::MatrixClient) include("${MatrixClient_CMAKE_DIR}/MatrixClientTargets.cmake") endif() set(MatrixClient_LIBRARIES MatrixClient::MatrixClient) mtxclient-0.2.1/deps/000077500000000000000000000000001347137727200144715ustar00rootroot00000000000000mtxclient-0.2.1/deps/CMakeLists.txt000066400000000000000000000051711347137727200172350ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.11) project(MTXCLIENT_DEPS) # Point CMake at any custom modules we may ship list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/usr" CACHE PATH "Dependencies install directory.") set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin" CACHE PATH "Dependencies binary install directory.") set(DEPS_LIB_DIR "${DEPS_INSTALL_DIR}/lib" CACHE PATH "Dependencies library install directory.") set(DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build" CACHE PATH "Dependencies build directory.") set(DEPS_DOWNLOAD_DIR "${DEPS_BUILD_DIR}/downloads" CACHE PATH "Dependencies download directory.") option(USE_BUNDLED "Use bundled dependencies." ON) option(USE_BUNDLED_BOOST "Use the bundled version of Boost." ${USE_BUNDLED}) option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog." ${USE_BUNDLED}) option(USE_BUNDLED_OLM "Use the bundled version of libolm." ${USE_BUNDLED}) option(USE_BUNDLED_GTEST "Use the bundled version of Google Test." ${USE_BUNDLED}) option(USE_BUNDLED_JSON "Use the bundled version of nlohmann json." ${USE_BUNDLED}) option(USE_EXISTING_SRC_DIR "Skip download of deps sources in case of existing source directory." OFF) include(ExternalProject) if(USE_BUNDLED_BOOST) # bundled boost is 1.68, which requires CMake 3.12 or greater. cmake_minimum_required(VERSION 3.12) endif() set(BOOST_URL https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.bz2) set(BOOST_SHA256 8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406) set(GTEST_URL https://github.com/google/googletest/archive/release-1.8.0.tar.gz) set(GTEST_SHA1 e7e646a6204638fe8e87e165292b8dd9cd4c36ed) set(OLM_URL https://git.matrix.org/git/olm.git) set(OLM_TAG 4065c8e11a33ba41133a086ed3de4da94dcb6bae) set(SPDLOG_URL https://github.com/gabime/spdlog/archive/v1.1.0.tar.gz) set(SPDLOG_HASH 3dbcbfd8c07e25f5e0d662b194d3a7772ef214358c49ada23c044c4747ce8b19) set(JSON_URL https://github.com/nlohmann/json.git) set(JSON_TAG v3.2.0) if(USE_BUNDLED_JSON) include(Json) endif() if(USE_BUNDLED_BOOST) include(Boost) endif() if(USE_BUNDLED_SPDLOG) include(SpdLog) endif() if(USE_BUNDLED_OLM) include(Olm) endif() if(USE_BUNDLED_GTEST) include(GoogleTest) endif() if(WIN32) if("${TARGET_ARCH}" STREQUAL "X86_64") set(TARGET_ARCH x64) elseif(TARGET_ARCH STREQUAL "X86") set(TARGET_ARCH ia32) endif() endif() add_custom_target(third-party ALL COMMAND ${CMAKE_COMMAND} -E touch .third-party DEPENDS ${THIRD_PARTY_DEPS}) mtxclient-0.2.1/deps/cmake/000077500000000000000000000000001347137727200155515ustar00rootroot00000000000000mtxclient-0.2.1/deps/cmake/Boost.cmake000066400000000000000000000013151347137727200176410ustar00rootroot00000000000000if(WIN32) message(STATUS "Building Boost in Windows is not supported (skipping)") return() endif() ExternalProject_Add( Boost URL ${BOOST_URL} URL_HASH SHA256=${BOOST_SHA256} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/boost DOWNLOAD_NO_PROGRESS 0 BUILD_IN_SOURCE 1 SOURCE_DIR ${DEPS_BUILD_DIR}/boost CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/boost/bootstrap.sh --with-libraries=random,thread,system,iostreams,atomic,chrono,date_time,regex --prefix=${DEPS_INSTALL_DIR} BUILD_COMMAND ${DEPS_BUILD_DIR}/boost/b2 -d0 cxxstd=14 variant=release link=shared runtime-link=shared threading=multi --layout=system INSTALL_COMMAND ${DEPS_BUILD_DIR}/boost/b2 -d0 install ) list(APPEND THIRD_PARTY_DEPS Boost) mtxclient-0.2.1/deps/cmake/GoogleTest.cmake000066400000000000000000000011271347137727200206300ustar00rootroot00000000000000if(WIN32) message(STATUS "Building gtest in Windows is not supported (skipping)") return() endif() ExternalProject_Add( GTest URL ${GTEST_URL} URL_HASH SHA1=${GTEST_SHA1} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/gtest DOWNLOAD_NO_PROGRESS 0 BUILD_IN_SOURCE 1 SOURCE_DIR ${DEPS_BUILD_DIR}/gtest CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} -DCMAKE_BUILD_TYPE=Release ${DEPS_BUILD_DIR}/gtest BUILD_COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}/gtest --config Release) list(APPEND THIRD_PARTY_DEPS GTest) mtxclient-0.2.1/deps/cmake/Json.cmake000066400000000000000000000006761347137727200174750ustar00rootroot00000000000000ExternalProject_Add( Json GIT_REPOSITORY ${JSON_URL} GIT_TAG ${JSON_TAG} BUILD_IN_SOURCE 1 SOURCE_DIR ${DEPS_BUILD_DIR}/json CONFIGURE_COMMAND ${CMAKE_COMMAND} -DJSON_BuildTests=OFF -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} BUILD_COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}/json INSTALL_COMMAND make install ) list(APPEND THIRD_PARTY_DEPS Json) mtxclient-0.2.1/deps/cmake/Olm.cmake000066400000000000000000000016321347137727200173040ustar00rootroot00000000000000set(WINDOWS_FLAGS "") if(MSVC) set(WINDOWS_FLAGS "-DCMAKE_GENERATOR_PLATFORM=x64") endif() ExternalProject_Add( Olm GIT_REPOSITORY ${OLM_URL} GIT_TAG ${OLM_TAG} BUILD_IN_SOURCE 1 SOURCE_DIR ${DEPS_BUILD_DIR}/olm CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/cmake/OlmCMakeLists.txt ${DEPS_BUILD_DIR}/olm/CMakeLists.txt COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/cmake/OlmConfig.cmake.in ${DEPS_BUILD_DIR}/olm/cmake/OlmConfig.cmake.in COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} -DCMAKE_BUILD_TYPE=Release ${DEPS_BUILD_DIR}/olm ${WINDOWS_FLAGS} BUILD_COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}/olm --config Release INSTALL_COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}/olm --config Release --target install) list(APPEND THIRD_PARTY_DEPS Olm) mtxclient-0.2.1/deps/cmake/OlmCMakeLists.txt000066400000000000000000000060421347137727200207630ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.1) project(olm VERSION 2.2.2 LANGUAGES CXX C) add_definitions(-DOLMLIB_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}) add_definitions(-DOLMLIB_VERSION_MINOR=${PROJECT_VERSION_MINOR}) add_definitions(-DOLMLIB_VERSION_PATCH=${PROJECT_VERSION_PATCH}) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() add_library(olm src/account.cpp src/base64.cpp src/cipher.cpp src/crypto.cpp src/memory.cpp src/message.cpp src/pickle.cpp src/ratchet.cpp src/session.cpp src/utility.cpp src/ed25519.c src/error.c src/inbound_group_session.c src/megolm.c src/olm.cpp src/outbound_group_session.c src/pickle_encoding.c lib/crypto-algorithms/aes.c lib/crypto-algorithms/sha256.c lib/curve25519-donna/curve25519-donna.c) add_library(Olm::Olm ALIAS olm) target_include_directories(olm PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib) set_target_properties(olm PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION}) set_target_properties(olm PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) # # Installation # include(GNUInstallDirs) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/Olm) install(TARGETS olm EXPORT olm-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) # The exported target will be named Olm. set_target_properties(olm PROPERTIES EXPORT_NAME Olm) install(FILES ${CMAKE_SOURCE_DIR}/include/olm/olm.h ${CMAKE_SOURCE_DIR}/include/olm/outbound_group_session.h ${CMAKE_SOURCE_DIR}/include/olm/inbound_group_session.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/olm) # Export the targets to a script. install(EXPORT olm-targets FILE OlmTargets.cmake NAMESPACE Olm:: DESTINATION ${INSTALL_CONFIGDIR}) # Create a ConfigVersion.cmake file. include(CMakePackageConfigHelpers) configure_package_config_file( ${CMAKE_CURRENT_LIST_DIR}/cmake/OlmConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/OlmConfig.cmake INSTALL_DESTINATION ${INSTALL_CONFIGDIR}) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/OlmConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion) #Install the config & configversion. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OlmConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/OlmConfigVersion.cmake DESTINATION ${INSTALL_CONFIGDIR}) # Register package in user's package registry export(EXPORT olm-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/OlmTargets.cmake NAMESPACE Olm::) export(PACKAGE Olm) mtxclient-0.2.1/deps/cmake/OlmConfig.cmake.in000066400000000000000000000004551347137727200210410ustar00rootroot00000000000000get_filename_component(Olm_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) include(CMakeFindDependencyMacro) list(APPEND CMAKE_MODULE_PATH ${Olm_CMAKE_DIR}) list(REMOVE_AT CMAKE_MODULE_PATH -1) if(NOT TARGET Olm::Olm) include("${Olm_CMAKE_DIR}/OlmTargets.cmake") endif() set(Olm_LIBRARIES Olm::Olm) mtxclient-0.2.1/deps/cmake/SpdLog.cmake000066400000000000000000000006261347137727200177470ustar00rootroot00000000000000ExternalProject_Add( SpdLog URL ${SPDLOG_URL} URL_HASH SHA256=${SPDLOG_HASH} BUILD_IN_SOURCE 1 SOURCE_DIR ${DEPS_BUILD_DIR}/spdlog CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} -DCMAKE_BUILD_TYPE=Release -DSPDLOG_BUILD_EXAMPLES=0 -DSPDLOG_BUILD_TESTING=0 ${DEPS_BUILD_DIR}/spdlog ) list(APPEND THIRD_PARTY_DEPS SpdLog) mtxclient-0.2.1/examples/000077500000000000000000000000001347137727200153545ustar00rootroot00000000000000mtxclient-0.2.1/examples/CMakeLists.txt000066400000000000000000000011661347137727200201200ustar00rootroot00000000000000find_package(spdlog 1.0.0 CONFIG) set_package_properties(spdlog PROPERTIES DESCRIPTION "Very fast, header only, C++ logging library" URL "https://github.com/gabime/spdlog" TYPE REQUIRED ) include_directories(../tests) add_executable(room_feed room_feed.cpp) target_link_libraries(room_feed MatrixClient::MatrixClient) add_executable(simple_bot simple_bot.cpp) target_link_libraries(simple_bot MatrixClient::MatrixClient) add_executable(crypto_bot crypto_bot.cpp) target_link_libraries(crypto_bot spdlog::spdlog MatrixClient::MatrixClient Olm::Olm) mtxclient-0.2.1/examples/crypto_bot.cpp000066400000000000000000001160251347137727200202510ustar00rootroot00000000000000#include #include #include #include #include #include "spdlog/sinks/stdout_color_sinks.h" #include "spdlog/spdlog.h" #include #include #include #include #include #include #include #include #include "mtxclient/crypto/client.hpp" #include "mtxclient/http/client.hpp" #include "mtxclient/http/errors.hpp" #include "mtxclient/utils.hpp" // // Simple example bot that will accept any invite. // using namespace std; using namespace mtx::client; using namespace mtx::crypto; using namespace mtx::http; using namespace mtx::events; using namespace mtx::identifiers; using TimelineEvent = mtx::events::collections::TimelineEvents; constexpr auto OLM_ALGO = "m.olm.v1.curve25519-aes-sha2"; constexpr auto STORAGE_KEY = "secret"; struct OlmCipherContent { std::string body; uint8_t type; }; inline void from_json(const nlohmann::json &obj, OlmCipherContent &msg) { msg.body = obj.at("body"); msg.type = obj.at("type"); } struct OlmMessage { std::string sender_key; std::string sender; using RecipientKey = std::string; std::map ciphertext; }; inline void from_json(const nlohmann::json &obj, OlmMessage &msg) { if (obj.at("type") != "m.room.encrypted") { throw std::invalid_argument("invalid type for olm message"); } if (obj.at("content").at("algorithm") != OLM_ALGO) throw std::invalid_argument("invalid algorithm for olm message"); msg.sender = obj.at("sender"); msg.sender_key = obj.at("content").at("sender_key"); msg.ciphertext = obj.at("content").at("ciphertext").get>(); } template bool exists(const Container &container, const Item &item) { return container.find(item) != container.end(); } void get_device_keys(const UserId &user); void save_device_keys(const mtx::responses::QueryKeys &res); void mark_encrypted_room(const RoomId &id); void handle_to_device_msgs(const std::vector &to_device); struct OutboundSessionData { std::string session_id; std::string session_key; uint64_t message_index = 0; }; inline void to_json(nlohmann::json &obj, const OutboundSessionData &msg) { obj["session_id"] = msg.session_id; obj["session_key"] = msg.session_key; obj["message_index"] = msg.message_index; } inline void from_json(const nlohmann::json &obj, OutboundSessionData &msg) { msg.session_id = obj.at("session_id"); msg.session_key = obj.at("session_key"); msg.message_index = obj.at("message_index"); } struct OutboundSessionDataRef { OlmOutboundGroupSession *session; OutboundSessionData data; }; struct DevKeys { std::string ed25519; std::string curve25519; }; inline void to_json(nlohmann::json &obj, const DevKeys &msg) { obj["ed25519"] = msg.ed25519; obj["curve25519"] = msg.curve25519; } inline void from_json(const nlohmann::json &obj, DevKeys &msg) { msg.ed25519 = obj.at("ed25519"); msg.curve25519 = obj.at("curve25519"); } auto console = spdlog::stdout_color_mt("console"); std::shared_ptr client = nullptr; std::shared_ptr olm_client = nullptr; struct Storage { //! Storage for the user_id -> list of devices mapping. std::map> devices; //! Storage for the identity key for a device. std::map device_keys; //! Flag that indicate if a specific room has encryption enabled. std::map encrypted_rooms; //! Keep track of members per room. std::map> members; void add_member(const std::string &room_id, const std::string &user_id) { members[room_id][user_id] = true; } //! Mapping from curve25519 to session. std::map olm_inbound_sessions; std::map olm_outbound_sessions; // TODO: store message_index / event_id std::map inbound_group_sessions; // TODO: store rotation period std::map outbound_group_session_data; std::map outbound_group_sessions; bool outbound_group_exists(const std::string &room_id) { return (outbound_group_sessions.find(room_id) != outbound_group_sessions.end()) && (outbound_group_session_data.find(room_id) != outbound_group_session_data.end()); } void set_outbound_group_session(const std::string &room_id, OutboundGroupSessionPtr session, OutboundSessionData data) { outbound_group_session_data[room_id] = data; outbound_group_sessions[room_id] = std::move(session); } OutboundSessionDataRef get_outbound_group_session(const std::string &room_id) { return OutboundSessionDataRef{outbound_group_sessions[room_id].get(), outbound_group_session_data[room_id]}; } bool inbound_group_exists(const std::string &room_id, const std::string &session_id, const std::string &sender_key) { const auto key = room_id + session_id + sender_key; return inbound_group_sessions.find(key) != inbound_group_sessions.end(); } void set_inbound_group_session(const std::string &room_id, const std::string &session_id, const std::string &sender_key, InboundGroupSessionPtr session) { const auto key = room_id + session_id + sender_key; inbound_group_sessions[key] = std::move(session); } OlmInboundGroupSession *get_inbound_group_session(const std::string &room_id, const std::string &session_id, const std::string &sender_key) { const auto key = room_id + session_id + sender_key; return inbound_group_sessions[key].get(); } void load() { console->info("restoring storage"); ifstream db("db.json"); string db_data((istreambuf_iterator(db)), istreambuf_iterator()); if (db_data.empty()) return; json obj = json::parse(db_data); devices = obj.at("devices").get>>(); device_keys = obj.at("device_keys").get>(); encrypted_rooms = obj.at("encrypted_rooms").get>(); members = obj.at("members").get>>(); if (obj.count("olm_inbound_sessions") != 0) { auto sessions = obj.at("olm_inbound_sessions").get>(); for (const auto &s : sessions) olm_inbound_sessions[s.first] = unpickle(s.second, STORAGE_KEY); } if (obj.count("olm_outbound_sessions") != 0) { auto sessions = obj.at("olm_outbound_sessions").get>(); for (const auto &s : sessions) olm_outbound_sessions[s.first] = unpickle(s.second, STORAGE_KEY); } if (obj.count("inbound_group_sessions") != 0) { auto sessions = obj.at("inbound_group_sessions").get>(); for (const auto &s : sessions) inbound_group_sessions[s.first] = unpickle(s.second, STORAGE_KEY); } if (obj.count("outbound_group_sessions") != 0) { auto sessions = obj.at("outbound_group_sessions").get>(); for (const auto &s : sessions) outbound_group_sessions[s.first] = unpickle(s.second, STORAGE_KEY); } if (obj.count("outbound_group_session_data") != 0) { auto sessions = obj.at("outbound_group_session_data") .get>(); for (const auto &s : sessions) outbound_group_session_data[s.first] = s.second; } } void save() { console->info("saving storage"); std::ofstream db("db.json"); if (!db.is_open()) { console->error("couldn't open file to save keys"); return; } json data; data["devices"] = devices; data["device_keys"] = device_keys; data["encrypted_rooms"] = encrypted_rooms; data["members"] = members; // Save inbound sessions for (const auto &s : olm_inbound_sessions) data["olm_inbound_sessions"][s.first] = mtx::crypto::pickle(s.second.get(), STORAGE_KEY); for (const auto &s : olm_outbound_sessions) data["olm_outbound_sessions"][s.first] = mtx::crypto::pickle(s.second.get(), STORAGE_KEY); for (const auto &s : inbound_group_sessions) data["inbound_group_sessions"][s.first] = mtx::crypto::pickle(s.second.get(), STORAGE_KEY); for (const auto &s : outbound_group_sessions) data["outbound_group_sessions"][s.first] = mtx::crypto::pickle(s.second.get(), STORAGE_KEY); for (const auto &s : outbound_group_session_data) data["outbound_group_session_data"][s.first] = s.second; // Save to file db << data.dump(2); db.close(); } }; namespace { Storage storage; } void print_errors(RequestErr err) { if (err->status_code != boost::beast::http::status::unknown) console->error("status code: {}", static_cast(err->status_code)); if (!err->matrix_error.error.empty()) console->error("matrix error: {}", err->matrix_error.error); if (err->error_code) console->error("error code: {}", err->error_code.message()); } template bool is_room_encryption(const T &event) { using namespace mtx::events; using namespace mtx::events::state; return boost::get>(&event) != nullptr; } void send_group_message(OlmOutboundGroupSession *session, const std::string &session_id, const std::string &room_id, const std::string &msg) { // Create event payload json doc{{"type", "m.room.message"}, {"content", {{"type", "m.text"}, {"body", msg}}}, {"room_id", room_id}}; auto payload = olm_client->encrypt_group_message(session, doc.dump()); using namespace mtx::events; using namespace mtx::identifiers; msg::Encrypted data; data.ciphertext = std::string((char *)payload.data(), payload.size()); data.sender_key = olm_client->identity_keys().curve25519; data.session_id = session_id; data.device_id = client->device_id(); client->send_room_message( room_id, data, [](const mtx::responses::EventId &res, RequestErr err) { if (err) { print_errors(err); return; } console->info("message sent with event_id: {}", res.event_id.to_string()); }); } void create_outbound_megolm_session(const std::string &room_id, const std::string &reply_msg) { // Create an outbound session auto outbound_session = olm_client->init_outbound_group_session(); const auto session_id = mtx::crypto::session_id(outbound_session.get()); const auto session_key = mtx::crypto::session_key(outbound_session.get()); auto megolm_payload = json{{"algorithm", "m.megolm.v1.aes-sha2"}, {"room_id", room_id}, {"session_id", session_id}, {"session_key", session_key}}; if (storage.members.find(room_id) == storage.members.end()) { console->error("no members found for room {}", room_id); return; } const auto members = storage.members[room_id]; for (const auto &member : members) { const auto devices = storage.devices[member.first]; // TODO: Figure out for which devices we don't have olm sessions. for (const auto &dev : devices) { // TODO: check if we have downloaded the keys const auto device_keys = storage.device_keys[dev]; auto room_key = olm_client ->create_room_key_event(UserId(member.first), device_keys.ed25519, megolm_payload) .dump(); auto to_device_cb = [](RequestErr err) { if (err) { print_errors(err); } }; if (storage.olm_outbound_sessions.find(device_keys.curve25519) != storage.olm_outbound_sessions.end()) { console->info("found existing olm outbound session with device {}", dev); auto olm_session = storage.olm_outbound_sessions[device_keys.curve25519].get(); auto device_msg = olm_client->create_olm_encrypted_content( olm_session, room_key, device_keys.curve25519); json body{{"messages", {{member, {{dev, device_msg}}}}}}; client->send_to_device("m.room.encrypted", body, to_device_cb); // TODO: send message to device } else { console->info("claiming one time keys for device {}", dev); auto cb = [member = member.first, dev, room_key, to_device_cb]( const mtx::responses::ClaimKeys &res, RequestErr err) { if (err) { print_errors(err); return; } console->info("claimed keys for {} - {}", member, dev); console->info("room_key", room_key); console->warn("signed one time keys"); auto retrieved_devices = res.one_time_keys.at(member); for (const auto &rd : retrieved_devices) { console->info( "{} : \n {}", rd.first, rd.second.dump(2)); // TODO: Verify signatures auto otk = rd.second.begin()->at("key"); auto id_key = storage.device_keys[dev].curve25519; auto session = olm_client->create_outbound_session(id_key, otk); auto device_msg = olm_client->create_olm_encrypted_content( session.get(), room_key, storage.device_keys[dev].curve25519); // TODO: saving should happen when the message is // sent. storage.olm_outbound_sessions[id_key] = std::move(session); json body{ {"messages", {{member, {{dev, device_msg}}}}}}; client->send_to_device( "m.room.encrypted", body, to_device_cb); } }; // TODO: we should bulk request device keys here client->claim_keys(member.first, {dev}, cb); } } } console->info("waiting to send sendToDevice messages"); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); console->info("sending encrypted group message"); // TODO: This should be done after all sendToDevice messages have been sent. send_group_message(outbound_session.get(), session_id, room_id, reply_msg); // TODO: save message index also. storage.set_outbound_group_session( room_id, std::move(outbound_session), {session_id, session_key}); } bool is_encrypted(const TimelineEvent &event) { using namespace mtx::events; return boost::get>(&event) != nullptr; } template bool is_member_event(const T &event) { using namespace mtx::events; using namespace mtx::events::state; return boost::get>(&event) != nullptr; } // Check if the given event has a textual representation. bool is_room_message(const TimelineEvent &e) { return (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr); } // Retrieves the fallback body value from the event. std::string get_body(const TimelineEvent &e) { if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; return ""; } // Retrieves the sender of the event. std::string get_sender(const TimelineEvent &event) { return boost::apply_visitor([](auto e) { return e.sender; }, event); } template std::string get_json(const T &event) { return boost::apply_visitor([](auto e) { return json(e).dump(2); }, event); } void keys_uploaded_cb(const mtx::responses::UploadKeys &, RequestErr err) { if (err) { print_errors(err); return; } olm_client->mark_keys_as_published(); console->info("keys uploaded"); } void mark_encrypted_room(const RoomId &id) { console->info("encryption is enabled for room: {}", id.get()); storage.encrypted_rooms[id.get()] = true; } void send_encrypted_reply(const std::string &room_id, const std::string &reply_msg) { console->info("sending reply"); // Create a megolm session if it doesn't already exist. if (storage.outbound_group_exists(room_id)) { auto session_obj = storage.get_outbound_group_session(room_id); send_group_message( session_obj.session, session_obj.data.session_id, room_id, reply_msg); } else { console->info("creating new megolm outbound session"); create_outbound_megolm_session(room_id, reply_msg); } } void decrypt_olm_message(const OlmMessage &olm_msg) { console->info("OLM message"); console->info("sender: {}", olm_msg.sender); console->info("sender_key: {}", olm_msg.sender_key); const auto my_id_key = olm_client->identity_keys().curve25519; for (const auto &cipher : olm_msg.ciphertext) { if (cipher.first == my_id_key) { const auto msg_body = cipher.second.body; const auto msg_type = cipher.second.type; console->info("the message is meant for us"); console->info("body: {}", msg_body); console->info("type: {}", msg_type); if (msg_type == 0) { console->info("opening session with {}", olm_msg.sender); auto inbound_session = olm_client->create_inbound_session(msg_body); auto ok = matches_inbound_session_from( inbound_session.get(), olm_msg.sender_key, msg_body); if (!ok) { console->error("session could not be established"); } else { auto output = olm_client->decrypt_message( inbound_session.get(), msg_type, msg_body); auto plaintext = json::parse( std::string((char *)output.data(), output.size())); console->info("decrypted message: \n {}", plaintext.dump(2)); storage.olm_inbound_sessions.emplace( olm_msg.sender_key, std::move(inbound_session)); std::string room_id = plaintext.at("content").at("room_id"); std::string session_id = plaintext.at("content").at("session_id"); std::string session_key = plaintext.at("content").at("session_key"); if (storage.inbound_group_exists( room_id, session_id, olm_msg.sender_key)) { console->warn("megolm session already exists"); } else { auto megolm_session = olm_client->init_inbound_group_session( session_key); storage.set_inbound_group_session( room_id, session_id, olm_msg.sender_key, std::move(megolm_session)); console->info("megolm_session saved"); } } } } } } void parse_messages(const mtx::responses::Sync &res) { for (const auto &room : res.rooms.invite) { auto room_id = room.first; console->info("joining room {}", room_id); client->join_room(room_id, [room_id](const nlohmann::json &, RequestErr e) { if (e) { print_errors(e); console->error("failed to join room {}", room_id); return; } }); } // Check if we have any new m.room_key messages (i.e starting a new megolm session) handle_to_device_msgs(res.to_device); // Check if the uploaded one time keys are enough for (const auto &device : res.device_one_time_keys_count) { if (device.second < 50) { console->info("number of one time keys: {}", device.second); olm_client->generate_one_time_keys(50 - device.second); // TODO: Mark keys as sent client->upload_keys(olm_client->create_upload_keys_request(), &keys_uploaded_cb); } } for (const auto &room : res.rooms.join) { const std::string room_id = room.first; for (const auto &e : room.second.state.events) { if (is_room_encryption(e)) { mark_encrypted_room(RoomId(room_id)); console->debug("{}", get_json(e)); } else if (is_member_event(e)) { auto m = boost::get>( e); get_device_keys(UserId(m.state_key)); storage.add_member(room_id, m.state_key); } } for (const auto &e : room.second.timeline.events) { if (is_room_encryption(e)) { mark_encrypted_room(RoomId(room_id)); console->debug("{}", get_json(e)); } else if (is_member_event(e)) { auto m = boost::get>( e); get_device_keys(UserId(m.state_key)); storage.add_member(room_id, m.state_key); } else if (is_encrypted(e)) { console->info("received an encrypted event: {}", room_id); console->info("{}", get_json(e)); auto msg = boost::get>(e); if (storage.inbound_group_exists( room_id, msg.content.session_id, msg.content.sender_key)) { auto res = olm_client->decrypt_group_message( storage.get_inbound_group_session(room_id, msg.content.session_id, msg.content.sender_key), msg.content.ciphertext); auto msg_str = std::string((char *)res.data.data(), res.data.size()); const auto body = json::parse(msg_str) .at("content") .at("body") .get(); console->info("decrypted data: {}", body); console->info("decrypted message_index: {}", res.message_index); if (msg.sender != client->user_id().to_string()) { // Send a reply back to the sender. std::string reply_txt(msg.sender + ": you said '" + body + "'"); send_encrypted_reply(room_id, reply_txt); } } else { console->warn( "no megolm session found to decrypt the event"); } } } } } // Callback to executed after a /sync request completes. void sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { console->error("error during sync"); print_errors(err); opts.since = client->next_batch_token(); client->sync(opts, &sync_handler); return; } parse_messages(res); opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } // Callback to executed after the first (initial) /sync request completes. void initial_sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { console->error("error during initial sync"); print_errors(err); if (err->status_code != boost::beast::http::status::ok) { console->error("retrying initial sync .."); opts.timeout = 0; client->sync(opts, &initial_sync_handler); } return; } parse_messages(res); for (const auto &room : res.rooms.join) { const auto room_id = room.first; for (const auto &e : room.second.state.events) { if (is_member_event(e)) { auto m = boost::get>( e); get_device_keys(UserId(m.state_key)); storage.add_member(room_id, m.state_key); } } } opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } void save_device_keys(const mtx::responses::QueryKeys &res) { for (const auto &entry : res.device_keys) { const auto user_id = entry.first; if (!exists(storage.devices, user_id)) console->info("keys for {}", user_id); std::vector device_list; for (const auto &device : entry.second) { const auto key_struct = device.second; const std::string device_id = key_struct.device_id; const std::string index = "curve25519:" + device_id; if (key_struct.keys.find(index) == key_struct.keys.end()) continue; const auto key = key_struct.keys.at(index); if (!exists(storage.device_keys, device_id)) { console->info("{} => {}", device_id, key); storage.device_keys[device_id] = { key_struct.keys.at("ed25519:" + device_id), key_struct.keys.at("curve25519:" + device_id)}; } device_list.push_back(device_id); } if (!exists(storage.devices, user_id)) { storage.devices[user_id] = device_list; } } } void get_device_keys(const UserId &user) { // Retrieve all devices keys. mtx::requests::QueryKeys query; query.device_keys[user.get()] = {}; client->query_keys(query, [](const mtx::responses::QueryKeys &res, RequestErr err) { if (err) { print_errors(err); return; } for (const auto &key : res.device_keys) { const auto user_id = key.first; const auto devices = key.second; for (const auto &device : devices) { const auto id = device.first; const auto data = device.second; try { auto ok = verify_identity_signature( json(data), DeviceId(id), UserId(user_id)); if (!ok) { console->warn("signature could not be verified"); console->warn(json(data).dump(2)); } } catch (const olm_exception &e) { console->warn(e.what()); } } } save_device_keys(std::move(res)); }); } void handle_to_device_msgs(const std::vector &msgs) { if (!msgs.empty()) console->info("inspecting {} to_device messages", msgs.size()); for (const auto &msg : msgs) { console->info(msg.dump(2)); try { OlmMessage olm_msg = msg; decrypt_olm_message(std::move(olm_msg)); } catch (const nlohmann::json::exception &e) { console->warn("parsing error for olm message: {}", e.what()); } catch (const std::invalid_argument &e) { console->warn("validation error for olm message: {}", e.what()); } } } void login_cb(const mtx::responses::Login &, RequestErr err) { if (err) { console->error("login error"); print_errors(err); return; } console->info("User ID: {}", client->user_id().to_string()); console->info("Device ID: {}", client->device_id()); console->info("ed25519: {}", olm_client->identity_keys().ed25519); console->info("curve25519: {}", olm_client->identity_keys().curve25519); // Upload one time keys. olm_client->set_user_id(client->user_id().to_string()); olm_client->set_device_id(client->device_id()); olm_client->generate_one_time_keys(50); client->upload_keys(olm_client->create_upload_keys_request(), [](const mtx::responses::UploadKeys &, RequestErr err) { if (err) { print_errors(err); return; } olm_client->mark_keys_as_published(); console->info("keys uploaded"); console->debug("starting initial sync"); SyncOpts opts; opts.timeout = 0; client->sync(opts, &initial_sync_handler); }); } void join_room_cb(const nlohmann::json &obj, RequestErr err) { if (err) { print_errors(err); return; } (void)obj; // Fetch device list for all users. } void shutdown_handler(int sig) { console->warn("received {} signal", sig); storage.save(); std::ofstream db("account.json"); if (!db.is_open()) { console->error("couldn't open file to save account keys"); return; } json data; data["account"] = olm_client->save(STORAGE_KEY); db << data.dump(2); db.close(); // The sync calls will stop. client->shutdown(); } int main() { spdlog::set_pattern("[%H:%M:%S] [tid %t] [%^%l%$] %v"); std::signal(SIGINT, shutdown_handler); std::string username("alice"); std::string server("localhost"); std::string password("secret"); client = std::make_shared(server); olm_client = make_shared(); ifstream db("account.json"); string db_data((istreambuf_iterator(db)), istreambuf_iterator()); if (db_data.empty()) olm_client->create_new_account(); else olm_client->load(json::parse(db_data).at("account").get(), STORAGE_KEY); storage.load(); client->login(username, password, login_cb); client->close(); console->info("exit"); return 0; } mtxclient-0.2.1/examples/room_feed.cpp000066400000000000000000000123461347137727200200250ustar00rootroot00000000000000#include #include #include #include #include "mtx.hpp" #include "mtxclient/http/client.hpp" #include "mtxclient/http/errors.hpp" // // Simple usage example of the /login & /sync endpoints which // will print the stream of messages from all rooms as received by the client. // using namespace std; using namespace mtx::client; using namespace mtx::http; using namespace mtx::events; using TimelineEvent = mtx::events::collections::TimelineEvents; namespace { std::shared_ptr client = nullptr; } void print_errors(RequestErr err) { if (err->status_code != boost::beast::http::status::unknown) cout << err->status_code << "\n"; if (!err->matrix_error.error.empty()) cout << err->matrix_error.error << "\n"; if (err->error_code) cout << err->error_code.message() << "\n"; } // Check if the given event has a textual representation. bool is_room_message(const TimelineEvent &e) { return (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr); } // Retrieves the fallback body value from the event. std::string get_body(const TimelineEvent &e) { if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; return ""; } // Retrieves the sender of the event. std::string get_sender(const TimelineEvent &event) { return boost::apply_visitor([](auto e) { return e.sender; }, event); } // Simple print of the message contents. void print_message(const TimelineEvent &event) { if (is_room_message(event)) cout << get_sender(event) << ": " << get_body(event) << "\n"; } // Callback to executed after a /sync request completes. void sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { cout << "sync error:\n"; print_errors(err); opts.since = client->next_batch_token(); client->sync(opts, &sync_handler); return; } for (const auto room : res.rooms.join) { for (const auto msg : room.second.timeline.events) print_message(msg); } opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } // Callback to executed after the first (initial) /sync request completes. void initial_sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { cout << "error during initial sync:\n"; print_errors(err); if (err->status_code != boost::beast::http::status::ok) { cout << "retrying initial sync ...\n"; opts.timeout = 0; client->sync(opts, &initial_sync_handler); } return; } opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } void login_handler(const mtx::responses::Login &res, RequestErr err) { if (err) { cout << "There was an error during login: " << err->matrix_error.error << "\n"; return; } cout << "Logged in as: " << res.user_id.to_string() << "\n"; SyncOpts opts; opts.timeout = 0; client->set_access_token(res.access_token); client->sync(opts, &initial_sync_handler); } int main() { std::string username, server, password; cout << "Username: "; std::getline(std::cin, username); cout << "HomeServer: "; std::getline(std::cin, server); password = getpass("Password: "); client = std::make_shared(server); client->login(username, password, &login_handler); client->close(); return 0; } mtxclient-0.2.1/examples/simple_bot.cpp000066400000000000000000000172351347137727200202250ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include "mtxclient/http/client.hpp" #include "mtxclient/http/errors.hpp" // // Simple example bot that will accept any invite. // using namespace std; using namespace mtx::client; using namespace mtx::http; using namespace mtx::events; using namespace mtx::identifiers; using TimelineEvent = mtx::events::collections::TimelineEvents; namespace { std::shared_ptr client = nullptr; } void print_errors(RequestErr err) { if (err->status_code != boost::beast::http::status::unknown) cout << err->status_code << "\n"; if (!err->matrix_error.error.empty()) cout << err->matrix_error.error << "\n"; if (err->error_code) cout << err->error_code.message() << "\n"; } // Check if the given event has a textual representation. bool is_room_message(const TimelineEvent &e) { return (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr) || (boost::get>(&e) != nullptr); } // Retrieves the fallback body value from the event. std::string get_body(const TimelineEvent &e) { if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; else if (boost::get>(&e) != nullptr) return boost::get>(e).content.body; return ""; } // Retrieves the sender of the event. std::string get_sender(const TimelineEvent &event) { return boost::apply_visitor([](auto e) { return e.sender; }, event); } void parse_messages(const mtx::responses::Sync &res, bool parse_repeat_cmd = false) { for (const auto room : res.rooms.invite) { auto room_id = room.first; printf("joining room %s\n", room_id.c_str()); client->join_room(room_id, [room_id](const nlohmann::json &obj, RequestErr e) { if (e) { print_errors(e); printf("failed to join room %s\n", room_id.c_str()); return; } printf("joined room \n%s\n", obj.dump(2).c_str()); mtx::events::msg::Text text; text.body = "Thanks for the invitation!"; client->send_room_message( room_id, text, [room_id](const mtx::responses::EventId &, RequestErr e) { if (e) { print_errors(e); return; } printf("sent message to %s\n", room_id.c_str()); }); }); } if (!parse_repeat_cmd) return; for (const auto room : res.rooms.join) { const std::string repeat_cmd = "!repeat"; const std::string room_id = room.first; for (const auto &e : room.second.timeline.events) { if (!is_room_message(e)) continue; auto body = get_body(e); if (!boost::starts_with(body, repeat_cmd)) continue; auto word = std::string(body.begin() + repeat_cmd.size(), body.end()); auto user = get_sender(e); mtx::events::msg::Text text; text.body = user + ": " + word; client->send_room_message( room_id, text, [room_id](const mtx::responses::EventId &, RequestErr e) { if (e) { print_errors(e); return; } printf("sent message to %s\n", room_id.c_str()); }); } } } // Callback to executed after a /sync request completes. void sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { cout << "sync error:\n"; print_errors(err); opts.since = client->next_batch_token(); client->sync(opts, &sync_handler); return; } parse_messages(res, true); opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } // Callback to executed after the first (initial) /sync request completes. void initial_sync_handler(const mtx::responses::Sync &res, RequestErr err) { SyncOpts opts; if (err) { cout << "error during initial sync:\n"; print_errors(err); if (err->status_code != boost::beast::http::status::ok) { cout << "retrying initial sync ...\n"; opts.timeout = 0; client->sync(opts, &initial_sync_handler); } return; } parse_messages(res); opts.since = res.next_batch; client->set_next_batch_token(res.next_batch); client->sync(opts, &sync_handler); } void login_handler(const mtx::responses::Login &, RequestErr err) { if (err) { printf("login error\n"); print_errors(err); return; } printf("user_id: %s\n", client->user_id().to_string().c_str()); printf("device_id: %s\n", client->device_id().c_str()); SyncOpts opts; opts.timeout = 0; client->sync(opts, &initial_sync_handler); } int main() { std::string username, server, password; cout << "username: "; std::getline(std::cin, username); cout << "server: "; std::getline(std::cin, server); password = getpass("password: "); client = std::make_shared(server); client->login(username, password, login_handler); client->close(); return 0; } mtxclient-0.2.1/include/000077500000000000000000000000001347137727200151615ustar00rootroot00000000000000mtxclient-0.2.1/include/mtx.hpp000066400000000000000000000016311347137727200165030ustar00rootroot00000000000000#pragma once #include "mtx/identifiers.hpp" #include "mtx/events.hpp" #include "mtx/events/aliases.hpp" #include "mtx/events/avatar.hpp" #include "mtx/events/canonical_alias.hpp" #include "mtx/events/create.hpp" #include "mtx/events/guest_access.hpp" #include "mtx/events/history_visibility.hpp" #include "mtx/events/join_rules.hpp" #include "mtx/events/member.hpp" #include "mtx/events/name.hpp" #include "mtx/events/pinned_events.hpp" #include "mtx/events/power_levels.hpp" #include "mtx/events/redaction.hpp" #include "mtx/events/tag.hpp" #include "mtx/events/topic.hpp" #include "mtx/events/messages/audio.hpp" #include "mtx/events/messages/emote.hpp" #include "mtx/events/messages/file.hpp" #include "mtx/events/messages/image.hpp" #include "mtx/events/messages/notice.hpp" #include "mtx/events/messages/text.hpp" #include "mtx/events/messages/video.hpp" #include "mtx/requests.hpp" #include "mtx/responses.hpp" mtxclient-0.2.1/include/mtx/000077500000000000000000000000001347137727200157715ustar00rootroot00000000000000mtxclient-0.2.1/include/mtx/common.hpp000066400000000000000000000032651347137727200200000ustar00rootroot00000000000000#pragma once #include #include #include #include using json = nlohmann::json; //! Common types used by the crypto related endpoints. namespace mtx { namespace crypto { using AlgorithmDevice = std::string; struct UnsignedDeviceInfo { //! The display name which the user set on the device. std::string device_display_name; }; void from_json(const json &obj, UnsignedDeviceInfo &res); void to_json(json &obj, const UnsignedDeviceInfo &res); struct DeviceKeys { //! The ID of the user the device belongs to. std::string user_id; //! The ID of the device these keys belong to. std::string device_id; //! The encryption algorithms supported by this device. std::vector algorithms = {"m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2"}; //! Public identity keys. //! The names of the properties should be in the format :. //! The keys themselves should be encoded as specified by the key algorithm. std::map keys; //! Signatures for the device key object. //! A map from user ID, to a map from : to the signature. std::map> signatures; ///! Additional data added to the device key information //! by intermediate servers, and not covered by the signatures. UnsignedDeviceInfo unsigned_info; }; void from_json(const json &obj, DeviceKeys &res); void to_json(json &obj, const DeviceKeys &res); } // namespace crypto } // namespace mtx mtxclient-0.2.1/include/mtx/errors.hpp000066400000000000000000000041531347137727200200210ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace errors { enum class ErrorCode { M_UNRECOGNIZED, //! Forbidden access, e.g. joining a room without permission, failed login. M_FORBIDDEN, //! The access token specified was not recognised. M_UNKNOWN_TOKEN, //! Request contained valid JSON, but it was malformed in some way, //! e.g. missing required keys, invalid values for keys M_BAD_JSON, //! Request did not contain valid JSON. M_NOT_JSON, //! No resource was found for this request. M_NOT_FOUND, //! Too many requests have been sent in a short period of time. M_LIMIT_EXCEEDED, //! Encountered when trying to register a user ID which has been taken. M_USER_IN_USE, //! Encountered when trying to register a user ID which is not valid. M_INVALID_USERNAME, //! Sent when the room alias given to the createRoom API is already in use. M_ROOM_IN_USE, //! Sent when the intial state given to the createRoom API is invalid. M_INVALID_ROOM_STATE, //! Encountered when specifying bad pagination query parameters. M_BAD_PAGINATION, //! Sent when a threepid given to an API cannot be used because //! the same threepid is already in use. M_THREEPID_IN_USE, //! Sent when a threepid given to an API cannot be used //! because no record matching the threepid was found. M_THREEPID_NOT_FOUND, //! The client's request used a third party server, //! eg. ID server, that this server does not trust. M_SERVER_NOT_TRUSTED, //! The access token isn't present in the request. M_MISSING_TOKEN, }; std::string to_string(ErrorCode code); ErrorCode from_string(const std::string &code); //! Represents a Matrix related error. struct Error { //! Error code. ErrorCode errcode; //! Human readable version of the error. std::string error; }; void from_json(const json &obj, Error &error); } } mtxclient-0.2.1/include/mtx/events.hpp000066400000000000000000000303061347137727200200100ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/messages/image.hpp" #include "mtx/identifiers.hpp" using json = nlohmann::json; namespace mtx { namespace events { enum class EventType { /// m.room_key_request RoomKeyRequest, /// m.room.aliases RoomAliases, /// m.room.avatar RoomAvatar, /// m.room.canonical_alias RoomCanonicalAlias, /// m.room.create RoomCreate, /// m.room.encrypted. RoomEncrypted, /// m.room.encryption. RoomEncryption, /// m.room.guest_access RoomGuestAccess, /// m.room.history_visibility RoomHistoryVisibility, /// m.room.join_rules RoomJoinRules, /// m.room.member RoomMember, /// m.room.message RoomMessage, /// m.room.name RoomName, /// m.room.power_levels RoomPowerLevels, /// m.room.topic RoomTopic, /// m.room.redaction RoomRedaction, /// m.room.pinned_events RoomPinnedEvents, // m.sticker Sticker, // m.tag Tag, // Unsupported event Unsupported, }; std::string to_string(EventType type); EventType getEventType(const std::string &type); EventType getEventType(const json &obj); //! The basic set of fields all events must have. template struct Event { //! The fields in this object will vary depending on the type of event. //! When interacting with the REST API, this is the HTTP body. Content content; //! The type of event. //! This *should* be namespaced similar to Java package //! naming conventions e.g. 'com.example.subdomain.event.type' EventType type; }; template void to_json(json &obj, const Event &event) { obj["content"] = event.content; switch (event.type) { case EventType::RoomKeyRequest: obj["type"] = "m.room_key_request"; break; case EventType::RoomAliases: obj["type"] = "m.room.aliases"; break; case EventType::RoomAvatar: obj["type"] = "m.room.avatar"; break; case EventType::RoomCanonicalAlias: obj["type"] = "m.room.canonical_alias"; break; case EventType::RoomCreate: obj["type"] = "m.room.create"; break; case EventType::RoomEncrypted: obj["type"] = "m.room.encrypted"; break; case EventType::RoomEncryption: obj["type"] = "m.room.encryption"; break; case EventType::RoomGuestAccess: obj["type"] = "m.room.guest_access"; break; case EventType::RoomHistoryVisibility: obj["type"] = "m.room.history_visibility"; break; case EventType::RoomJoinRules: obj["type"] = "m.room.join_rules"; break; case EventType::RoomMember: obj["type"] = "m.room.member"; break; case EventType::RoomMessage: obj["type"] = "m.room.message"; break; case EventType::RoomName: obj["type"] = "m.room.name"; break; case EventType::RoomPowerLevels: obj["type"] = "m.room.power_levels"; break; case EventType::RoomTopic: obj["type"] = "m.room.topic"; break; case EventType::RoomRedaction: obj["type"] = "m.room.redaction"; break; case EventType::RoomPinnedEvents: obj["type"] = "m.room.pinned_events"; break; case EventType::Sticker: obj["type"] = "m.sticker"; break; case EventType::Tag: obj["type"] = "m.tag"; break; case EventType::Unsupported: std::cout << "Unsupported type to serialize" << std::endl; break; } } template void from_json(const json &obj, Event &event) { event.content = obj.at("content").get(); event.type = getEventType(obj.at("type").get()); } struct UnsignedData { //! The time in milliseconds that has elapsed since the event was sent. //! This field is generated by the local homeserver, //! and may be incorrect if the local time on at least one //! of the two servers is out of sync, which can cause the age to //! either be negative or greater than it actually is. uint64_t age = 0; //! The client-supplied transaction ID, if the client //! being given the event is the same one which sent it. std::string transaction_id; std::string prev_sender; std::string replaces_state; //! The event ID that redacted this event. std::string redacted_by; }; inline void from_json(const json &obj, UnsignedData &data) { if (obj.find("age") != obj.end()) data.age = obj.at("age").get(); if (obj.find("transaction_id") != obj.end()) data.transaction_id = obj.at("transaction_id").get(); if (obj.find("prev_sender") != obj.end()) data.prev_sender = obj.at("prev_sender").get(); if (obj.find("replaces_state") != obj.end()) data.replaces_state = obj.at("replaces_state").get(); if (obj.find("redacted_by") != obj.end()) data.redacted_by = obj.at("redacted_by").get(); } inline void to_json(json &obj, const UnsignedData &event) { if (!event.prev_sender.empty()) obj["prev_sender"] = event.prev_sender; if (!event.transaction_id.empty()) obj["transaction_id"] = event.transaction_id; if (!event.replaces_state.empty()) obj["replaces_state"] = event.replaces_state; if (event.age != 0) obj["age"] = event.age; } template struct StrippedEvent : public Event { std::string sender; std::string state_key; }; template void from_json(const json &obj, StrippedEvent &event) { event.content = obj.at("content").get(); event.type = getEventType(obj.at("type").get()); event.sender = obj.at("sender"); event.state_key = obj.at("state_key"); } template void to_json(json &obj, const StrippedEvent &event) { Event base_event = event; to_json(obj, base_event); obj["sender"] = event.sender; obj["state_key"] = event.state_key; } //! RoomEvent. template struct RoomEvent : public Event { //! The globally unique event identifier. std::string event_id; //! The ID of the room associated with this event. std::string room_id; //! Contains the fully-qualified ID of the user who sent this event. std::string sender; //! Timestamp in milliseconds on originating homeserver //! when this event was sent. uint64_t origin_server_ts; // SPEC_BUG: The contents of unsigned_data are also present as top level keys. //! Contains optional extra information about the event. UnsignedData unsigned_data; }; template void from_json(const json &obj, RoomEvent &event) { event.content = obj.at("content").get(); event.type = getEventType(obj.at("type").get()); event.event_id = obj.at("event_id"); event.sender = obj.at("sender"); event.origin_server_ts = obj.at("origin_server_ts"); // SPEC_BUG: Not present in the state array returned by /sync. if (obj.find("room_id") != obj.end()) event.room_id = obj.at("room_id"); if (obj.find("unsigned") != obj.end()) event.unsigned_data = obj.at("unsigned"); } template void to_json(json &obj, const RoomEvent &event) { Event base_event = event; to_json(obj, base_event); if (!event.room_id.empty()) obj["room_id"] = event.room_id; obj["event_id"] = event.event_id; obj["sender"] = event.sender; obj["unsigned"] = event.unsigned_data; obj["origin_server_ts"] = event.origin_server_ts; } //! Extension of the RoomEvent. template struct StateEvent : public RoomEvent { //! A unique key which defines the overwriting semantics //! for this piece of room state. std::string state_key; }; template void to_json(json &obj, const StateEvent &event) { RoomEvent base_event = event; to_json(obj, base_event); obj["state_key"] = event.state_key; } template void from_json(const json &obj, StateEvent &event) { event.content = obj.at("content").get(); event.event_id = obj.at("event_id"); event.origin_server_ts = obj.at("origin_server_ts"); event.sender = obj.at("sender"); event.type = getEventType(obj.at("type").get()); if (obj.find("room_id") != obj.end()) event.room_id = obj.at("room_id"); if (obj.find("unsigned") != obj.end()) event.unsigned_data = obj.at("unsigned"); event.state_key = obj.at("state_key").get(); } //! Extension of the RoomEvent. template struct RedactionEvent : public RoomEvent { //! The event id of the event that was redacted. std::string redacts; }; template void to_json(json &obj, const RedactionEvent &event) { RoomEvent base_event = event; to_json(obj, base_event); obj["redacts"] = event.redacts; } template void from_json(const json &obj, RedactionEvent &event) { event.content = obj.at("content").get(); event.event_id = obj.at("event_id"); event.origin_server_ts = obj.at("origin_server_ts"); event.sender = obj.at("sender"); event.type = getEventType(obj.at("type").get()); if (obj.find("unsigned") != obj.end()) event.unsigned_data = obj.at("unsigned"); if (obj.find("room_id") != obj.end()) event.room_id = obj.at("room_id"); event.redacts = obj.at("redacts").get(); } //! Extension of the RoomEvent. template struct EncryptedEvent : public RoomEvent {}; template void to_json(json &obj, const EncryptedEvent &event) { RoomEvent base_event = event; to_json(obj, base_event); } template void from_json(const json &obj, EncryptedEvent &event) { event.content = obj.at("content").get(); event.event_id = obj.at("event_id"); event.origin_server_ts = obj.at("origin_server_ts"); event.sender = obj.at("sender"); event.type = getEventType(obj.at("type").get()); if (obj.find("unsigned") != obj.end()) event.unsigned_data = obj.at("unsigned"); if (obj.find("room_id") != obj.end()) event.room_id = obj.at("room_id"); } enum class MessageType { // m.audio Audio, // m.emote Emote, // m.file File, // m.image Image, // m.location Location, // m.notice Notice, // m.text Text, // m.video Video, // Unrecognized message type Unknown, }; MessageType getMessageType(const std::string &type); MessageType getMessageType(const json &obj); struct Sticker : public RoomEvent {}; } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/000077500000000000000000000000001347137727200172755ustar00rootroot00000000000000mtxclient-0.2.1/include/mtx/events/aliases.hpp000066400000000000000000000015701347137727200214320ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { //! Content for the `m.room.aliases` event. // //! This event is sent by a homeserver directly to inform of changes to //! the list of aliases it knows about for that room. The `state_key` //! for this event is set to the homeserver which owns the room alias. //! The entire set of known aliases for the room is the union of all //! the `m.room.aliases` events, one for each homeserver. struct Aliases { //! A list of room aliases. std::vector aliases; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, Aliases &content); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const Aliases &content); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/avatar.hpp000066400000000000000000000013751347137727200212720ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; #include "mtx/events/common.hpp" namespace mtx { namespace events { namespace state { //! Content of the `m.room.avatar` event. // //! A picture that is associated with the room. //! This can be displayed alongside the room information. struct Avatar { //! Metadata about the image referred to in @p url. mtx::common::ImageInfo image_info; //! The URL to the image. std::string url; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, Avatar &avatar); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const Avatar &avatar); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/canonical_alias.hpp000066400000000000000000000014471347137727200231140ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { //! Content for the `m.room.canonical_alias` event. // //! This event is used to inform the room about which alias //! should be considered the canonical one. This could be for //! display purposes or as suggestion to users which alias to //! use to advertise the room. struct CanonicalAlias { //! The canonical alias. Could be *null*. std::string alias; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, CanonicalAlias &canonical_alias); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const CanonicalAlias &canonical_alias); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/collections.hpp000066400000000000000000000251031347137727200223250ustar00rootroot00000000000000#pragma once #include #include "mtx/events.hpp" #include "mtx/events/aliases.hpp" #include "mtx/events/avatar.hpp" #include "mtx/events/canonical_alias.hpp" #include "mtx/events/create.hpp" #include "mtx/events/encrypted.hpp" #include "mtx/events/encryption.hpp" #include "mtx/events/guest_access.hpp" #include "mtx/events/history_visibility.hpp" #include "mtx/events/join_rules.hpp" #include "mtx/events/member.hpp" #include "mtx/events/name.hpp" #include "mtx/events/pinned_events.hpp" #include "mtx/events/power_levels.hpp" #include "mtx/events/redaction.hpp" #include "mtx/events/tag.hpp" #include "mtx/events/topic.hpp" #include "mtx/events/messages/audio.hpp" #include "mtx/events/messages/emote.hpp" #include "mtx/events/messages/file.hpp" #include "mtx/events/messages/image.hpp" #include "mtx/events/messages/notice.hpp" #include "mtx/events/messages/text.hpp" #include "mtx/events/messages/video.hpp" namespace mtx { namespace events { //! Contains heterogeneous collections of events using std::variant. namespace collections { namespace account_data = mtx::events::account_data; namespace states = mtx::events::state; namespace msgs = mtx::events::msg; //! Collection of room specific account data using RoomAccountDataEvents = boost::variant>; //! Collection of @p StateEvent only. using StateEvents = boost::variant, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent>; //! Collection of @p StrippedEvent only. using StrippedEvents = boost::variant, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent, events::StrippedEvent>; //! Collection of @p StateEvent and @p RoomEvent. Those events would be //! available on the returned timeline. using TimelineEvents = boost::variant, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::StateEvent, events::EncryptedEvent, events::RedactionEvent, events::Sticker, events::RoomEvent, events::RoomEvent, events::RoomEvent, events::RoomEvent, events::RoomEvent, // TODO: events::RoomEvent, events::RoomEvent, events::RoomEvent, events::RoomEvent>; struct TimelineEvent { TimelineEvents data; }; inline void from_json(const json &obj, TimelineEvent &e) { const auto type = mtx::events::getEventType(obj); using namespace mtx::events::state; using namespace mtx::events::msg; switch (type) { case events::EventType::RoomAliases: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomAvatar: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomCanonicalAlias: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomCreate: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomEncrypted: { e.data = events::EncryptedEvent(obj); break; } case events::EventType::RoomEncryption: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomGuestAccess: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomHistoryVisibility: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomJoinRules: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomMember: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomName: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomPowerLevels: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomRedaction: { e.data = events::RedactionEvent(obj); break; } case events::EventType::RoomTopic: { e.data = events::StateEvent(obj); break; } case events::EventType::RoomMessage: { using MsgType = mtx::events::MessageType; const auto msg_type = mtx::events::getMessageType(obj.at("content")); if (msg_type == events::MessageType::Unknown) { try { auto unsigned_data = obj.at("unsigned").at("redacted_by").get(); if (unsigned_data.empty()) return; e.data = events::RoomEvent(obj); return; } catch (json::exception &err) { std::cout << "Invalid event type: " << err.what() << " " << obj.dump(2) << '\n'; return; } std::cout << "Invalid event type: " << obj.dump(2) << '\n'; break; } switch (msg_type) { case MsgType::Audio: { e.data = events::RoomEvent(obj); break; } case MsgType::Emote: { e.data = events::RoomEvent(obj); break; } case MsgType::File: { e.data = events::RoomEvent(obj); break; } case MsgType::Image: { e.data = events::RoomEvent(obj); break; } case MsgType::Location: { /* events::RoomEvent location = e; */ /* container.emplace_back(location); */ break; } case MsgType::Notice: { e.data = events::RoomEvent(obj); break; } case MsgType::Text: { e.data = events::RoomEvent(obj); break; } case MsgType::Video: { e.data = events::RoomEvent(obj); break; } case MsgType::Unknown: return; } break; } case events::EventType::Sticker: { e.data = events::Sticker(obj); break; } case events::EventType::RoomPinnedEvents: case events::EventType::RoomKeyRequest: // Not part of the timeline case events::EventType::Tag: // Not part of the timeline case events::EventType::Unsupported: return; } } } // namespace collections } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/common.hpp000066400000000000000000000070001347137727200212730ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; namespace mtx { //! Common structs used among many different event content types. namespace common { constexpr auto FORMAT_MSG_TYPE = "org.matrix.custom.html"; //! Metadata about an image thumbnail. struct ThumbnailInfo { //! The height of the thumbnail in pixels. uint64_t h = 0; //! The width of the thumbnail in pixels. uint64_t w = 0; //! Size of the thumbnail in bytes. uint64_t size = 0; //! The mimetype of the thumbnail, e.g. image/jpeg. std::string mimetype; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, ThumbnailInfo &info); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const ThumbnailInfo &info); //! Metadata about an image. struct ImageInfo { //! The height of the image in pixels. uint64_t h = 0; //! The width of the image in pixels. uint64_t w = 0; //! Size of the image in bytes. uint64_t size = 0; //! Metadata about the image referred to in @p thumbnail_url. ThumbnailInfo thumbnail_info; //! The URL to a thumbnail of the image. std::string thumbnail_url; //! The mimetype of the image, `e.g. image/jpeg`. std::string mimetype; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, ImageInfo &info); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const ImageInfo &info); //! Metadata about a file. struct FileInfo { //! The size of the file in bytes. uint64_t size = 0; //! Metadata about the image referred to in @p thumbnail_url. ThumbnailInfo thumbnail_info; //! The URL to the thumbnail of the file. std::string thumbnail_url; //! The mimetype of the file e.g `application/pdf`. std::string mimetype; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, FileInfo &info); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const FileInfo &info); //! Audio clip metadata. struct AudioInfo { //! The size of the audio clip in bytes. uint64_t size = 0; //! The duration of the audio in milliseconds. uint64_t duration = 0; //! The mimetype of the audio e.g. `audio/aac`. std::string mimetype; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, AudioInfo &info); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const AudioInfo &info); //! Video clip metadata. struct VideoInfo { //! The size of the video in bytes. uint64_t size = 0; //! The duration of the video in milliseconds. uint64_t duration = 0; //! The height of the video in pixels. uint64_t h = 0; //! The width of the video in pixels. uint64_t w = 0; //! The mimetype of the video e.g. `video/mp4`. std::string mimetype; //! The URL to an image thumbnail of the video clip. std::string thumbnail_url; //! Metadata about the image referred to in @p thumbnail_url. ThumbnailInfo thumbnail_info; }; //! Deserialization method needed by @p nlohmann::json. void from_json(const json &obj, VideoInfo &info); //! Serialization method needed by @p nlohmann::json. void to_json(json &obj, const VideoInfo &info); } // namespace common } // namespace mtx mtxclient-0.2.1/include/mtx/events/create.hpp000066400000000000000000000013131347137727200212470ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { //! Content of the `m.room.create` event. // //! This is the first event in a room and cannot be changed. //! It acts as the root of all other events. struct Create { //! The `user_id` of the room creator. This is set by the homeserver. std::string creator; //! Whether users on other servers can join this room. //! Defaults to **true** if key does not exist. bool federate = true; }; void from_json(const json &obj, Create &create); void to_json(json &obj, const Create &create); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/encrypted.hpp000066400000000000000000000051111347137727200220010ustar00rootroot00000000000000#pragma once #include #include "mtx/events.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace msg { struct OlmCipherContent { std::string body; uint8_t type; }; void from_json(const json &obj, OlmCipherContent &event); void to_json(json &obj, const OlmCipherContent &event); //! Content of the `m.room.encrypted` Olm event. struct OlmEncrypted { std::string algorithm; std::string sender_key; using RecipientKey = std::string; std::map ciphertext; }; void from_json(const json &obj, OlmEncrypted &event); void to_json(json &obj, const OlmEncrypted &event); //! Content of the `m.room.encrypted` event. struct Encrypted { //! Used for one-on-one exchanges. std::string algorithm; //! The actual encrypted payload. std::string ciphertext; //! Sender's device id. std::string device_id; //! The curve25519 device key. std::string sender_key; //! Outbound group session id. std::string session_id; }; void from_json(const json &obj, Encrypted &event); void to_json(json &obj, const Encrypted &event); //! Content of the `m.room_key` event. struct RoomKey { std::string algorithm; std::string room_id; std::string session_id; std::string session_key; }; void from_json(const json &obj, RoomKey &event); void to_json(json &obj, const RoomKey &event); enum class RequestAction { // request Request, // request_cancellation Cancellation, // not handled Unknown, }; struct KeyRequest { //! The type of request. RequestAction action; //! The encryption algorithm of the session we want keys for. //! Always m.megolm.v1.aes-sha2. std::string algorithm; //! The room in which the session was created. std::string room_id; //! The curve25519 key of the session creator. std::string sender_key; //! The session_id of the outbound megolm session. std::string session_id; //! A unique identifier for this request. std::string request_id; //! The device requesting the keys. std::string requesting_device_id; //! The user that send this event. std::string sender; //! The type of the event. mtx::events::EventType type; }; void from_json(const json &obj, KeyRequest &event); void to_json(json &obj, const KeyRequest &event); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/encryption.hpp000066400000000000000000000012011347137727200221720ustar00rootroot00000000000000#pragma once #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { //! Content of the `m.room.encryption` event. // //! A client can enable encryption to a room by sending this event. struct Encryption { //! Defines which encryption algorithm should be used for encryption. //! Currently only m.megolm.v1-aes-sha2 is permitted. std::string algorithm = "m.megolm.v1.aes-sha2"; }; void from_json(const json &obj, Encryption &encryption); void to_json(json &obj, const Encryption &encryption); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/guest_access.hpp000066400000000000000000000014661347137727200224650ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { enum class AccessState { CanJoin, Forbidden, }; //! Converts @p AccessState to @p std::string for serialization. std::string accessStateToString(AccessState state); //! Converts @p std::string to @p AccessState for deserialization. AccessState stringToAccessState(const std::string &state); //! Content of the `m.room.guest_access` state event. struct GuestAccess { //! Whether guests can join the room. AccessState guest_access = AccessState::Forbidden; }; void from_json(const json &obj, GuestAccess &guest_access); void to_json(json &obj, const GuestAccess &guest_access); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/history_visibility.hpp000066400000000000000000000030351347137727200237570ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { enum class Visibility { //! All events while this is the `m.room.history_visibility` //! value may be shared by any participating homeserver with anyone, //! regardless of whether they have ever joined the room. WorldReadable, //! Previous events are always accessible to newly joined members. //! All events in the room are accessible, even those sent when //! the member was not a part of the room. Shared, //! Events are accessible to newly joined members from the point //! they were invited onwards. Events stop being accessible when //! the member's state changes to something other than invite or join. Invited, //! Events are accessible to newly joined members from the point //! they joined the room onwards. Events stop being accessible //! when the member's state changes to something other than join. Joined, }; std::string visibilityToString(const Visibility &rule); Visibility stringToVisibility(const std::string &rule); //! Content of the `m.room.history_visibility` state event. struct HistoryVisibility { //! Who can see the room history. Visibility history_visibility; }; void from_json(const json &obj, HistoryVisibility &event); void to_json(json &obj, const HistoryVisibility &event); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/join_rules.hpp000066400000000000000000000020231347137727200221540ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { enum class JoinRule { //! Anyone can join the room without any prior action. Public, //! A user who wishes to join the room must first receive //! an invite to the room from someone already inside of the room. Invite, //! Reserved but not yet implemented by the Matrix specification. Knock, //! Reserved but not yet implemented by the Matrix specification. Private, }; std::string joinRuleToString(const JoinRule &rule); JoinRule stringToJoinRule(const std::string &rule); //! Content of the `m.room.join_rules` state event. struct JoinRules { //! The type of rules used for users wishing to join this room. JoinRule join_rule; }; void from_json(const json &obj, JoinRules &join_rules); void to_json(json &obj, const JoinRules &join_rules); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/member.hpp000066400000000000000000000023261347137727200212600ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { enum class Membership { //! The user has joined. Join, //! The user has been invited. Invite, //! The user is banned. Ban, //! The user has left. Leave, //! The user has requested to join. Knock, }; std::string membershipToString(const Membership &membership); Membership stringToMembership(const std::string &membership); //! Content of the `m.room.member` state event. struct Member { //! The membership state of the user. Membership membership; //! The avatar URL for this user, if any. std::string avatar_url; //! The display name for this user, if any. std::string display_name; //! Flag indicating if the room containing this event was created //! with the intention of being a direct chat. bool is_direct = false; /* ThirdPartyInvite third_party_invite; */ }; void from_json(const json &obj, Member &member); void to_json(json &obj, const Member &member); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/000077500000000000000000000000001347137727200211045ustar00rootroot00000000000000mtxclient-0.2.1/include/mtx/events/messages/audio.hpp000066400000000000000000000013421347137727200227160ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/common.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { struct Audio { // A description of the audio or some kind of content description // for accessibility. std::string body; // Must be 'm.audio'. std::string msgtype; // The matrix URL of the audio clip. std::string url; // Metadata for the audio clip referred to in url. common::AudioInfo info; }; void from_json(const json &obj, Audio &content); void to_json(json &obj, const Audio &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/emote.hpp000066400000000000000000000011251347137727200227250ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace msg { struct Emote { // The emote action to perform. std::string body; // Must be 'm.emote'. std::string msgtype; //! We only handle org.matrix.custom.html. std::string format; //! HTML formatted message. std::string formatted_body; }; void from_json(const json &obj, Emote &content); void to_json(json &obj, const Emote &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/file.hpp000066400000000000000000000016001347137727200225310ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/common.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { struct File { // A human-readable description of the file. This is recommended to // be the filename of the original upload. std::string body; // The original filename of the uploaded file. // SPEC_BUG: The filename is not really required. std::string filename; // Must be 'm.file'. std::string msgtype; // The matrix URL of the file. std::string url; // Information about the file referred to in the url. common::FileInfo info; }; void from_json(const json &obj, File &content); void to_json(json &obj, const File &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/image.hpp000066400000000000000000000025451347137727200227050ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/common.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { struct Image { // A textual representation of the image. This could be // the alt text of the image, the filename of the image, // or some kind of content description for accessibility e.g. 'image attachment std::string body; // Must be 'm.image'. std::string msgtype; // The Matrix URL to the image. std::string url; // Metadata about the image referred to in `url`. common::ImageInfo info; }; struct StickerImage { // A textual representation of the image. This could be // the alt text of the image, the filename of the image, // or some kind of content description for accessibility e.g. 'image attachment std::string body; // The Matrix URL to the image. std::string url; // Metadata about the image referred to in `url`. common::ImageInfo info; }; void from_json(const json &obj, Image &content); void to_json(json &obj, const Image &content); void from_json(const json &obj, StickerImage &content); void to_json(json &obj, const StickerImage &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/notice.hpp000066400000000000000000000011251347137727200230750ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace msg { struct Notice { // The notice text to send. std::string body; // Must be 'm.notice'. std::string msgtype; //! We only handle org.matrix.custom.html. std::string format; //! HTML formatted message. std::string formatted_body; }; void from_json(const json &obj, Notice &content); void to_json(json &obj, const Notice &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/text.hpp000066400000000000000000000011171347137727200226010ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace msg { struct Text { //! The body of the message. std::string body; //! Must be 'm.text'. std::string msgtype; //! We only handle org.matrix.custom.html. std::string format; //! HTML formatted message. std::string formatted_body; }; void from_json(const json &obj, Text &content); void to_json(json &obj, const Text &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/messages/video.hpp000066400000000000000000000013421347137727200227230ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/common.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { struct Video { // A description of the video or some kind of content description // for accessibility. std::string body; // Must be 'm.video'. std::string msgtype; // The matrix URL of the video clip. std::string url; // Metadata for the video clip referred to in url. common::VideoInfo info; }; void from_json(const json &obj, Video &content); void to_json(json &obj, const Video &content); } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/name.hpp000066400000000000000000000005301347137727200207240ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { struct Name { std::string name; }; void from_json(const json &obj, Name &event); void to_json(json &obj, const Name &event); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/pinned_events.hpp000066400000000000000000000005771347137727200226600ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { struct PinnedEvents { std::vector pinned; }; void from_json(const json &obj, PinnedEvents &event); void to_json(json &obj, const PinnedEvents &event); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/power_levels.hpp000066400000000000000000000057271347137727200225270ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { constexpr uint16_t EventsDefault = 0; constexpr uint16_t UsersDefault = 0; constexpr uint16_t StatesDefault = 50; constexpr uint16_t User = 0; constexpr uint16_t Moderator = 50; constexpr uint16_t Admin = 100; //! Content for the `m.room.power_levels` state event. // //! This event specifies the minimum level a user must have in //! order to perform a certain action. It also specifies the //! levels of each user in the room. struct PowerLevels { //! Returns the power_level for a given event type. inline uint16_t event_level(const std::string &event_type) const { if (events.find(event_type) == events.end()) return events_default; return events.at(event_type); } //! Returns the power_level for a given event type. inline uint16_t state_level(const std::string &event_type) const { if (events.find(event_type) == events.end()) return state_default; return events.at(event_type); } //! Returns the power_level for a given user id. inline uint16_t user_level(const std::string &user_id) const { if (users.find(user_id) == users.end()) return users_default; return users.at(user_id); } //! The level required to ban a user. Defaults to **50** if unspecified. uint16_t ban = Moderator; //! The level required to invite a user. //! Defaults to **50** if unspecified. uint16_t invite = Moderator; //! The level required to kick a user. //! Defaults to **50** if unspecified. uint16_t kick = Moderator; //! The level required to redact an event. //! Defaults to **50** if unspecified. uint16_t redact = Moderator; //! The default level required to send message events. //! Defaults to **0** if unspecified. uint16_t events_default = User; //! The default power level for every user in the room, //! unless their user_id is mentioned in the users key. //! Defaults to **0** if unspecified. uint16_t users_default = User; //! The default level required to send state events. uint16_t state_default = Moderator; //! The level required to send specific event types. //! This is a mapping from event type to power level required. std::map events; //! The power levels for specific users. //! This is a mapping from user_id to power level for that user. std::map users; }; void from_json(const json &obj, PowerLevels &power_levels); void to_json(json &obj, const PowerLevels &power_levels); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/redaction.hpp000066400000000000000000000011651347137727200217610ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace msg { //! Content for the `m.room.redaction` state event. struct Redaction { //! The reason for the redaction, if any. std::string reason; }; void from_json(const json &obj, Redaction &event); void to_json(json &obj, const Redaction &event); //! Stripped out contente for redacted events. struct Redacted {}; inline void from_json(const json &, Redacted &) {} inline void to_json(json &, const Redacted &) {} } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/events/tag.hpp000066400000000000000000000011361347137727200205620ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace account_data { //! Content for the `m.tag` room account_data event. //! A tag is a short string a client can attach to a room for sorting or advanced functionality. struct Tag { //! The tag list. //! A tag can have arbitrary JSON data attached std::map tags; }; void from_json(const json &obj, Tag &content); void to_json(json &obj, const Tag &content); } // namespace account_data } // namespace events } // namespace mtxmtxclient-0.2.1/include/mtx/events/topic.hpp000066400000000000000000000010001347137727200211130ustar00rootroot00000000000000#pragma once #include #include using json = nlohmann::json; namespace mtx { namespace events { namespace state { //! Content for the `m.room.topic` state event. //! A topic is a short message detailing what is currently being discussed in the room. struct Topic { //! The topic text. std::string topic; }; void from_json(const json &obj, Topic &event); void to_json(json &obj, const Topic &event); } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/include/mtx/identifiers.hpp000066400000000000000000000065621347137727200210200ustar00rootroot00000000000000#pragma once #include #include #include namespace mtx { namespace identifiers { //! Base class for all the identifiers. // //! Each identifier has the following format `(sigil)``(localpart)`:`(hostname)`. class ID { public: //! Returns the unique local part of the identifier. std::string localpart() const { return localpart_; } //! Returns the name of the originating homeserver. std::string hostname() const { return hostname_; } //! Returns the whole identifier (localpart + hostname). std::string to_string() const { return id_; } protected: //! Local part of the identifier. std::string localpart_; //! The name of the originating homeserver. std::string hostname_; //! The whole identifier. std::string id_; }; class Event : public ID { public: template friend Identifier parse(const std::string &id); private: //! The `sigil` used to represent an Event. std::string sigil = "$"; }; class Room : public ID { public: template friend Identifier parse(const std::string &id); private: std::string sigil = "!"; }; class User : public ID { public: template friend Identifier parse(const std::string &id); private: std::string sigil = "@"; }; //! Parses the given string into a @p Identifier. //! \param id String to parse. //! \returns The parsed @p Identifier. //! \throws std::invalid_argument in case of invalid input. template Identifier parse(const std::string &id) { Identifier identifier; if (id.empty()) { // FIXME: enable logging only in debug mode. /* std::cout << "mtx::identifiers - Empty matrix identifier was given" << std::endl; */ return identifier; } if (std::string(1, id.at(0)) != identifier.sigil) throw std::invalid_argument( std::string(id + ": missing sigil " + identifier.sigil + "\n")); const auto parts = id.find_first_of(':'); // Split into localpart and server. if (parts != std::string::npos) { identifier.localpart_ = id.substr(1, parts - 1); identifier.hostname_ = id.substr(parts + 1); identifier.id_ = id; } else { // V3 event ids don't use ':' at all, don't parse them the same way. identifier.localpart_ = id; identifier.hostname_ = id; identifier.id_ = id; } return identifier; } inline void from_json(const nlohmann::json &obj, User &user) { user = parse(obj.get()); } inline void to_json(nlohmann::json &obj, const User &user) { obj = user.to_string(); } inline void from_json(const nlohmann::json &obj, Room &room) { room = parse(obj.get()); } inline void to_json(nlohmann::json &obj, const Room &room) { obj = room.to_string(); } inline void from_json(const nlohmann::json &obj, Event &event) { event = parse(obj.get()); } inline void to_json(nlohmann::json &obj, const Event &event) { obj = event.to_string(); } } // namespace identifiers } // namespace mtx mtxclient-0.2.1/include/mtx/requests.hpp000066400000000000000000000141651347137727200203640ustar00rootroot00000000000000#pragma once #include #include #include using json = nlohmann::json; namespace mtx { namespace requests { //! Whether or not the room will be visible by non members. enum class Visibility { //! A private visibility will hide the room from the published room list. Private, //! Indicates that the room will be shown in the published room list Public, }; //! Convenience parameter for setting various default state events based on a preset. enum class Preset { //! `join_rules` is set to `invite`. `history_visibility` is set to `shared`. PrivateChat, //! `join_rules` is set to `public`. `history_visibility` is set to `shared`. PublicChat, //! `join_rules` is set to `invite`. `history_visibility` is set to `shared`. //! All invitees are given the same power level as the room creator. TrustedPrivateChat, }; //! Request payload for the `POST /_matrix/client/r0/createRoom` endpoint. struct CreateRoom { //! If this is included, an `m.room.name` event will //! be sent into the room to indicate the name of the room. std::string name; //! If this is included, an `m.room.topic` event will be sent //! into the room to indicate the topic for the room. std::string topic; //! The desired room alias local part. e.g `#foo:example.com`. std::string room_alias_name; //! A list of user IDs to invite to the room. std::vector invite; //! This flag makes the server set the is_direct flag on the //! `m.room.member` events sent to the users in @p invite and @p invite_3pid. bool is_direct = false; //! Convenience parameter for setting various default state events. Preset preset = Preset::PrivateChat; //! Whether or not the room will be visible by non members. Visibility visibility = Visibility::Private; }; void to_json(json &obj, const CreateRoom &request); //! Request payload for the `POST /_matrix/client/r0/login` endpoint. struct Login { //! The login type being used. One of ["m.login.password", "m.login.token"] std::string type = "m.login.password"; //! The fully qualified user ID or just local part of the user ID, to log in. std::string user; //! When logging in using a third party identifier, the medium of the identifier. //! Must be 'email'. std::string medium; //! Third party identifier for the user. std::string address; //! Required when type is m.login.token. The login token. std::string token; //! Required when type is m.login.password. The user's password. std::string password; //! ID of the client device. If this does not correspond to a known client device, //! a new device will be created. //! The server will auto-generate a device_id if this is not specified. std::string device_id; //! A display name to assign to the newly-created device. //! Ignored if device_id corresponds to a known device. std::string initial_device_display_name; }; void to_json(json &obj, const Login &request); //! Request payload for the `POST /_matrix/client/r0/profile/{userId}/avatar_url` endpoint. struct AvatarUrl { std::string avatar_url; }; void to_json(json &obj, const AvatarUrl &request); //! Request payload for the `PUT /_matrix/client/r0/profile/{userId}/displayname` endpoint. struct DisplayName { std::string displayname; }; void to_json(json &obj, const DisplayName &request); //! Request payload for the `POST /_matrix/client/r0/rooms/{roomId}/invite` endpoint. struct RoomInvite { std::string user_id; }; void to_json(json &obj, const RoomInvite &request); //! Request payload for the `PUT /_matrix/client/r0/rooms/{roomId}/typing/{userId}` endpoint. struct TypingNotification { //! Whether the user is typing or not. bool typing = false; //! The length of time in milliseconds to mark this user as typing. uint64_t timeout = 0; }; void to_json(json &obj, const TypingNotification &request); struct Empty {}; inline void to_json(json &, const Empty &) {} using Logout = Empty; struct UploadKeys { //! Identity keys for the device. //! May be absent if no new identity keys are required. mtx::crypto::DeviceKeys device_keys; //! One-time public keys for "pre-key" messages. //! The names of the properties should be in the format :. //! The format of the key is determined by the key algorithm. std::map one_time_keys; }; void to_json(json &obj, const UploadKeys &); constexpr uint64_t DEFAULT_DOWNLOAD_TIMEOUT = 10 * 1000; // 10 seconds struct QueryKeys { //! The time (in milliseconds) to wait when downloading keys from remote servers. uint64_t timeout = DEFAULT_DOWNLOAD_TIMEOUT; //! The keys to be downloaded. //! A map from user ID, to a list of device IDs, or to an empty //! list to indicate all devices for the corresponding user. std::map> device_keys; //! If the client is fetching keys as a result of a device update //! received in a sync request, this should be the 'since' token of //! that sync request, or any later sync token. //! This allows the server to ensure its response contains the keys //! advertised by the notification in that sync. std::string token; }; void to_json(json &obj, const QueryKeys &); struct ClaimKeys { //! The time (in milliseconds) to wait when downloading keys from remote servers. uint64_t timeout = DEFAULT_DOWNLOAD_TIMEOUT; //! The keys to be claimed. A map from user ID, to a map from device ID to algorithm name. std::map> one_time_keys; }; inline void to_json(json &obj, const ClaimKeys &request) { obj["timeout"] = request.timeout; obj["one_time_keys"] = request.one_time_keys; } } // namespace requests } // namespace mtx mtxclient-0.2.1/include/mtx/responses.hpp000066400000000000000000000006741347137727200205320ustar00rootroot00000000000000#pragma once #include "responses/common.hpp" #include "responses/create_room.hpp" #include "responses/crypto.hpp" #include "responses/empty.hpp" #include "responses/groups.hpp" #include "responses/login.hpp" #include "responses/media.hpp" #include "responses/messages.hpp" #include "responses/notifications.hpp" #include "responses/profile.hpp" #include "responses/register.hpp" #include "responses/sync.hpp" #include "responses/version.hpp" mtxclient-0.2.1/include/mtx/responses/000077500000000000000000000000001347137727200200125ustar00rootroot00000000000000mtxclient-0.2.1/include/mtx/responses/common.hpp000066400000000000000000000024741347137727200220220ustar00rootroot00000000000000#pragma once #include #include #include #include "mtx/events/collections.hpp" using json = nlohmann::json; namespace mtx { namespace responses { struct EventId { mtx::identifiers::Event event_id; }; void from_json(const nlohmann::json &obj, EventId &response); struct GroupId { std::string group_id; }; void from_json(const nlohmann::json &obj, GroupId &response); struct FilterId { std::string filter_id; }; void from_json(const nlohmann::json &obj, FilterId &response); namespace utils { using RoomAccountDataEvents = std::vector; using TimelineEvents = std::vector; using StateEvents = std::vector; using StrippedEvents = std::vector; void log_error(json::exception &err, const json &event); void log_error(std::string err, const json &event); void parse_room_account_data_events(const json &events, RoomAccountDataEvents &container); void parse_timeline_events(const json &events, TimelineEvents &container); void parse_state_events(const json &events, StateEvents &container); void parse_stripped_events(const json &events, StrippedEvents &container); } } } mtxclient-0.2.1/include/mtx/responses/create_room.hpp000066400000000000000000000005171347137727200230250ustar00rootroot00000000000000#pragma once #include namespace mtx { namespace responses { //! Response from the `POST /_matrix/client/r0/createRoom` endpoint. struct CreateRoom { //! The room ID of the newly created room. mtx::identifiers::Room room_id; }; void from_json(const nlohmann::json &obj, CreateRoom &response); } } mtxclient-0.2.1/include/mtx/responses/crypto.hpp000066400000000000000000000054541347137727200220530ustar00rootroot00000000000000#pragma once #include #include "mtx/common.hpp" #include #include namespace mtx { namespace responses { //! Response from the `POST /_matrix/client/r0/keys/upload` endpoint. struct UploadKeys { //! For each key algorithm, the number of unclaimed one-time keys //! of that type currently held on the server for this device. std::map one_time_key_counts; }; void from_json(const nlohmann::json &obj, UploadKeys &response); using DeviceToKeysMap = std::map; //! Response from the `POST /_matrix/client/r0/keys/query` endpoint. struct QueryKeys { //! If any remote homeservers could not be reached, they are //! recorded here. The names of the properties are the names //! of the unreachable servers. std::map failures; //! Information on the queried devices. //! A map from user ID, to a map from device ID to device information. //! For each device, the information returned will be the same //! as uploaded via /keys/upload, with the addition of an unsigned property std::map device_keys; }; void from_json(const nlohmann::json &obj, QueryKeys &response); //! Response from the `POST /_matrix/client/r0/keys/claim` endpoint. struct ClaimKeys { //! If any remote homeservers could not be reached, they are //! recorded here. The names of the properties are the names //! of the unreachable servers. std::map failures; //! One-time keys for the queried devices. A map from user ID, //! to a map from : to the key object. std::map> one_time_keys; }; inline void from_json(const nlohmann::json &obj, ClaimKeys &response) { response.failures = obj.at("failures").get>(); response.one_time_keys = obj.at("one_time_keys") .get>>(); } //! Response from the `GET /_matrix/client/r0/keys/changes` endpoint. struct KeyChanges { //! The Matrix User IDs of all users who updated their device identity keys. std::vector changed; //! The Matrix User IDs of all users who may have left all the end-to-end //! encrypted rooms they previously shared with the user. std::vector left; }; inline void from_json(const nlohmann::json &obj, KeyChanges &response) { response.changed = obj.at("changed").get>(); response.left = obj.at("left").get>(); } } // namespace responses } // namespace mtx mtxclient-0.2.1/include/mtx/responses/empty.hpp000066400000000000000000000005041347137727200216600ustar00rootroot00000000000000#pragma once #include #include #include "mtx/identifiers.hpp" namespace mtx { namespace responses { // Used to represent empty responses struct Empty {}; void from_json(const nlohmann::json &, Empty &); using Logout = Empty; using DisplayName = Empty; using RoomInvite = Empty; } } mtxclient-0.2.1/include/mtx/responses/groups.hpp000066400000000000000000000012661347137727200220470ustar00rootroot00000000000000#pragma once #include namespace mtx { namespace responses { struct JoinedGroups { std::vector groups; }; inline void from_json(const nlohmann::json &obj, JoinedGroups &res) { res.groups = obj.at("groups").get>(); } struct GroupProfile { std::string name; std::string avatar_url; }; inline void from_json(const nlohmann::json &obj, GroupProfile &res) { if (obj.count("name") != 0 && !obj.at("name").is_null()) res.name = obj.at("name"); if (obj.count("avatar_url") != 0 && !obj.at("avatar_url").is_null()) res.avatar_url = obj.at("avatar_url"); } } } mtxclient-0.2.1/include/mtx/responses/login.hpp000066400000000000000000000014771347137727200216440ustar00rootroot00000000000000#pragma once #include #include #include "mtx/identifiers.hpp" namespace mtx { namespace responses { //! Response from the `POST /_matrix/client/r0/login` endpoint. struct Login { //! The fully-qualified Matrix ID that has been registered. mtx::identifiers::User user_id; //! An access token for the account. //! This access token can then be used to authorize other requests. std::string access_token; //! The hostname of the homeserver on which the account has been registered. std::string home_server; //! ID of the logged-in device. //! Will be the same as the corresponding parameter in the request, if one was specified. std::string device_id; }; void from_json(const nlohmann::json &obj, Login &response); } } mtxclient-0.2.1/include/mtx/responses/media.hpp000066400000000000000000000005241347137727200216030ustar00rootroot00000000000000#pragma once #include #include namespace mtx { namespace responses { //! Represents the response of `POST /_matrix/media/r0/upload` struct ContentURI { //! The MXC URI for the uploaded content. std::string content_uri; }; void from_json(const nlohmann::json &obj, ContentURI &response); } } mtxclient-0.2.1/include/mtx/responses/messages.hpp000066400000000000000000000013011347137727200223250ustar00rootroot00000000000000#pragma once #include #include #include "mtx/events/collections.hpp" namespace mtx { namespace responses { //! Response of the `GET /_matrix/client/r0/rooms/{roomId}/messages` endpoint. // //! This API returns a list of message and state events for a room. //! It uses pagination query parameters to paginate history in the room. struct Messages { //! The token the pagination starts from. std::string start; //! The token the pagination ends at. std::string end; //! A list of room events. std::vector chunk; }; void from_json(const nlohmann::json &obj, Messages &messages); } } mtxclient-0.2.1/include/mtx/responses/notifications.hpp000066400000000000000000000030711347137727200233750ustar00rootroot00000000000000#pragma once #include #include "mtx/events/collections.hpp" namespace mtx { namespace responses { struct Notification { //! The action to perform when the conditions for this rule are met. nlohmann::json actions; //! The Event object for the event that triggered the notification. mtx::events::collections::TimelineEvents event; //! Indicates whether the user has sent a read receipt indicating //! that they have read this message. bool read = false; //! The profile tag of the rule that matched this event. std::string profile_tag; //! The ID of the room in which the event was posted. std::string room_id; //! The unix timestamp at which the event notification was sent, in milliseconds. uint64_t ts; }; void from_json(const nlohmann::json &obj, Notification &res); //! Response from the `GET /_matrix/client/r0/notifications` endpoint. // //! The endpoint is used to paginate through the list of events //! that the user has been, or would have been notified about. struct Notifications { //! The token to supply in the from param of the next /notifications //! request in order to request more events. If this is absent, //! there are no more results. //! TODO: https://github.com/matrix-org/synapse/pull/3190 // std::string next_token; //! The list of events that triggered notifications. std::vector notifications; }; void from_json(const nlohmann::json &obj, Notifications &res); } } mtxclient-0.2.1/include/mtx/responses/profile.hpp000066400000000000000000000016621347137727200221700ustar00rootroot00000000000000#pragma once #include namespace mtx { namespace responses { //! Response from the `GET /_matrix/client/r0/profile/{userId}` endpoint. // //! Get the combined profile information for this user. //! This API may be used to fetch the user's own profile //! information or other users; either locally or on remote homeservers. //! This API may return keys which are not limited to *displayname* or *avatar_url*. struct Profile { //! The user's avatar URL if they have set one, otherwise not present. std::string avatar_url; //! The user's display name if they have set one, otherwise not present. std::string display_name; }; void from_json(const nlohmann::json &obj, Profile &profile); //! Response from the `GET /_matrix/client/r0/profile/{userId}/avatar_url` endpoint. struct AvatarUrl { std::string avatar_url; }; void from_json(const nlohmann::json &obj, AvatarUrl &avatar); } } mtxclient-0.2.1/include/mtx/responses/register.hpp000066400000000000000000000017651347137727200223600ustar00rootroot00000000000000#pragma once #include #include #include "mtx/identifiers.hpp" namespace mtx { namespace responses { //! Response from the `POST /_matrix/client/r0/register` endpoint. struct Register { //! The fully-qualified Matrix user ID that has been registered. mtx::identifiers::User user_id; //! An access token for the account. This access token can then be used to //! authorize other requests. std::string access_token; //! ID of the registered device. Will be the same as the corresponding //! parameter in the request, if one was specified. std::string device_id; }; struct Flow { std::vector stages; }; struct RegistrationFlows { std::vector flows; std::string session; }; void from_json(const nlohmann::json &obj, Register &response); void from_json(const nlohmann::json &obj, Flow &response); void from_json(const nlohmann::json &obj, RegistrationFlows &response); } } mtxclient-0.2.1/include/mtx/responses/sync.hpp000066400000000000000000000123741347137727200215060ustar00rootroot00000000000000#pragma once #include #include #include #include "mtx/events.hpp" #include "mtx/events/collections.hpp" #include "mtx/identifiers.hpp" #include using json = nlohmann::json; namespace mtx { namespace responses { //! Room specific Account Data events. struct RoomAccountData { //! List of events. std::vector events; }; void from_json(const json &obj, RoomAccountData &account_data); //! State events. struct State { //! List of events. std::vector events; }; void from_json(const json &obj, State &state); //! State and Room events. struct Timeline { //! List of events. std::vector events; //! A token that can be supplied to to the from parameter of //! the rooms/{roomId}/messages endpoint. std::string prev_batch; //! **true** if the number of events returned was limited by the //! limit on the filter. bool limited = false; }; void from_json(const json &obj, Timeline &timeline); //! Counts of unread notifications for this room struct UnreadNotifications { //! The number of unread notifications for this room with the //! highlight flag set. uint16_t highlight_count = 0; //! The total number of unread notifications for this room. uint16_t notification_count = 0; }; void from_json(const json &obj, UnreadNotifications ¬ifications); //! The ephemeral events in the room that aren't recorded in //! the timeline or state of the room. e.g. typing. struct Ephemeral { //! A list of users that are currently typing. std::vector typing; //! Map of events and the users that have read them. std::map> receipts; }; void from_json(const json &obj, Ephemeral &ephemeral); //! A room that the user has joined. struct JoinedRoom { //! Updates to the state, between the time indicated by the since parameter, //! and the start of the timeline (or all state up to the start of the timeline, //! if since is not given, or full_state is true) State state; //! The timeline of messages and state changes in the room. Timeline timeline; //! Counts of unread notifications for this room. UnreadNotifications unread_notifications; //! The ephemeral events in the room that aren't recorded in the //! timeline or state of the room. e.g. typing. Ephemeral ephemeral; //! The account_data events associated with this room. RoomAccountData account_data; }; void from_json(const json &obj, JoinedRoom &room); //! A room that the user has left or been banned from. struct LeftRoom { //! The state updates for the room up to the start of the timeline. State state; //! The timeline of messages and state changes in the room //! up to the point when the user left. Timeline timeline; }; void from_json(const json &obj, LeftRoom &room); //! A room that the user has been invited to. struct InvitedRoom { //! The state of a room that the user has been invited to. //! These state events may only have the `sender`, `type`, //! `state_key` and `content` keys present. std::vector invite_state; //! Returns the name of the room. std::string name() const; //! Returns the URL for the avatar of the room. std::string avatar() const; }; void from_json(const json &obj, InvitedRoom &room); //! Room updates. struct Rooms { //! The rooms that the user has joined. std::map join; //! The rooms that the user has left or been banned from. std::map leave; //! The rooms that the user has been invited to. std::map invite; }; void from_json(const json &obj, Rooms &rooms); //! Information on e2e device updates. struct DeviceLists { //! List of users who have updated their device identity keys //! since the previous sync response. std::vector changed; //! List of users who may have left all the end-to-end encrypted //! rooms they previously shared with the user. std::vector left; }; void from_json(const json &obj, DeviceLists &device_lists); //! Response from the `GET /_matrix/client/r0/sync` endpoint. struct Sync { //! The batch token to supply in the since param of the next /sync request. std::string next_batch; //! Updates to rooms. Rooms rooms; //! Information on the send-to-device messages for the client device. std::vector to_device; /* Presence presence; */ /* Groups groups; */ //! Information on end-to-end device updates, DeviceLists device_lists; //! A mapping from algorithm to the number of one time keys //! the server has for the current device. std::map device_one_time_keys_count; /* AccountData account_data; */ }; void from_json(const json &obj, Sync &response); } } mtxclient-0.2.1/include/mtx/responses/version.hpp000066400000000000000000000006011347137727200222050ustar00rootroot00000000000000#pragma once #include namespace mtx { namespace responses { //! Response from the `GET /_matrix/client/versions` endpoint. // //! Gets the versions of the specification supported by the server. struct Versions { //! The supported versions. std::vector versions; }; void from_json(const nlohmann::json &obj, Versions &response); } } mtxclient-0.2.1/include/mtxclient/000077500000000000000000000000001347137727200171705ustar00rootroot00000000000000mtxclient-0.2.1/include/mtxclient/crypto/000077500000000000000000000000001347137727200205105ustar00rootroot00000000000000mtxclient-0.2.1/include/mtxclient/crypto/client.hpp000066400000000000000000000230621347137727200225020ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include "mtxclient/crypto/objects.hpp" #include "mtxclient/crypto/types.hpp" namespace mtx { namespace crypto { //! Data representation used to interact with libolm. using BinaryBuf = std::vector; class olm_exception : public std::exception { public: olm_exception(std::string func, OlmSession *s) : msg_(func + ": " + std::string(olm_session_last_error(s))) {} olm_exception(std::string func, OlmAccount *acc) : msg_(func + ": " + std::string(olm_account_last_error(acc))) {} olm_exception(std::string func, OlmUtility *util) : msg_(func + ": " + std::string(olm_utility_last_error(util))) {} olm_exception(std::string func, OlmOutboundGroupSession *s) : msg_(func + ": " + std::string(olm_outbound_group_session_last_error(s))) {} olm_exception(std::string func, OlmInboundGroupSession *s) : msg_(func + ": " + std::string(olm_inbound_group_session_last_error(s))) {} olm_exception(std::string msg) : msg_(msg) {} virtual const char *what() const throw() { return msg_.c_str(); } private: std::string msg_; }; class sodium_exception : public std::exception { public: sodium_exception(std::string func, const char *msg) : msg_(func + ": " + std::string(msg)) {} virtual const char *what() const throw() { return msg_.c_str(); } private: std::string msg_; }; //! Create a uint8_t buffer which is initialized with random bytes. inline BinaryBuf create_buffer(std::size_t nbytes) { auto buf = BinaryBuf(nbytes); randombytes_buf(buf.data(), buf.size()); return buf; } template std::string pickle(typename T::olm_type *object, const std::string &key) { auto tmp = create_buffer(T::pickle_length(object)); const int ret = T::pickle(object, key.data(), key.size(), tmp.data(), tmp.size()); if (ret == -1) throw olm_exception("pickle", object); return std::string((char *)tmp.data(), tmp.size()); } template std::unique_ptr unpickle(const std::string &pickled, const std::string &key) { auto object = create_olm_object(); const int ret = T::unpickle(object.get(), key.data(), key.size(), (void *)pickled.data(), pickled.size()); if (ret == -1) throw olm_exception("unpickle", object.get()); return std::move(object); } using OlmSessionPtr = std::unique_ptr; using OutboundGroupSessionPtr = std::unique_ptr; using InboundGroupSessionPtr = std::unique_ptr; struct GroupPlaintext { BinaryBuf data; uint32_t message_index; }; class OlmClient : public std::enable_shared_from_this { public: OlmClient() = default; OlmClient(std::string user_id, std::string device_id) : user_id_(std::move(user_id)) , device_id_(std::move(device_id)) {} using Base64String = std::string; using SignedOneTimeKeys = std::map; void set_device_id(std::string device_id) { device_id_ = std::move(device_id); } void set_user_id(std::string user_id) { user_id_ = std::move(user_id); } //! Sign the given message. Base64String sign_message(const std::string &msg) const; //! Create a new olm Account. Must be called before any other operation. void create_new_account(); void create_new_utility() { utility_ = create_olm_object(); } void restore_account(const std::string &saved_data, const std::string &key); //! Retrieve the json representation of the identity keys for the given account. IdentityKeys identity_keys() const; //! Sign the identity keys. //! The result should be used as part of the /keys/upload/ request. Base64String sign_identity_keys(); //! Generate a number of one time keys. std::size_t generate_one_time_keys(std::size_t nkeys); //! Retrieve the json representation of the one time keys for the given account. OneTimeKeys one_time_keys(); //! Sign the given one time keys and encode it to base64. Base64String sign_one_time_key(const Base64String &encoded_key); //! Sign one_time_keys and generate the appropriate structure for the /keys/upload request. SignedOneTimeKeys sign_one_time_keys(const OneTimeKeys &keys); //! Generate the json structure for the signed one time key. json signed_one_time_key_json(const std::string &key, const std::string &signature); //! Marks the current set of one time keys as being published. void mark_keys_as_published() { olm_account_mark_keys_as_published(account_.get()); } //! Prepare request for the /keys/upload endpoint by signing identity & one time keys. mtx::requests::UploadKeys create_upload_keys_request(const OneTimeKeys &keys); mtx::requests::UploadKeys create_upload_keys_request(); //! Decrypt a message using megolm. GroupPlaintext decrypt_group_message(OlmInboundGroupSession *session, const std::string &message, uint32_t message_index = 0); //! Encrypt a message using megolm. BinaryBuf encrypt_group_message(OlmOutboundGroupSession *session, const std::string &plaintext); //! Encrypt a message using olm. BinaryBuf encrypt_message(OlmSession *session, const std::string &msg); //! Decrypt a message using olm. BinaryBuf decrypt_message(OlmSession *session, std::size_t msg_type, const std::string &msg); //! Create an outbount megolm session. OutboundGroupSessionPtr init_outbound_group_session(); InboundGroupSessionPtr init_inbound_group_session(const std::string &session_key); OlmSessionPtr create_outbound_session(const std::string &identity_key, const std::string &one_time_key); OlmSessionPtr create_inbound_session(const BinaryBuf &one_time_key_message); OlmSessionPtr create_inbound_session(const std::string &one_time_key_message); OlmSessionPtr create_inbound_session_from(const std::string &their_curve25519, const BinaryBuf &one_time_key_message); OlmSessionPtr create_inbound_session_from(const std::string &their_curve25519, const std::string &one_time_key_message); //! The `m.room_key` event is used to share the session_id & session_key //! of an outbound megolm session. nlohmann::json create_room_key_event(const UserId &user_id, const std::string &ed25519_device_key, const nlohmann::json &content) const noexcept; //! Create the content for an m.room.encrypted event. //! algorithm: m.olm.v1.curve25519-aes-sha2 nlohmann::json create_olm_encrypted_content(OlmSession *session, const std::string &room_key_event, const std::string &recipient_key); std::string save(const std::string &key); void load(const std::string &data, const std::string &key) { account_ = unpickle(data, key); } OlmAccount *account() { return account_.get(); } OlmUtility *utility() { return utility_.get(); } private: std::string user_id_; std::string device_id_; std::unique_ptr account_; std::unique_ptr utility_; }; //! Retrieve the session id for an Olm session. std::string session_id(OlmSession *s); //! Retrieve the session id. std::string session_id(OlmOutboundGroupSession *s); //! Retrieve the session key from an *outbound* megolm session. std::string session_key(OlmOutboundGroupSession *s); //! Retrieve the session key from an *inbound* megolm session. std::string export_session(OlmInboundGroupSession *s); //! Create an *inbound* megolm session from an exported session key. InboundGroupSessionPtr import_session(const std::string &session_key); bool matches_inbound_session(OlmSession *session, const std::string &one_time_key_message); bool matches_inbound_session_from(OlmSession *session, const std::string &id_key, const std::string &one_time_key_message); std::string encrypt_exported_sessions(const mtx::crypto::ExportedSessionKeys &keys, std::string pass); mtx::crypto::ExportedSessionKeys decrypt_exported_sessions(const std::string &data, std::string pass); std::string base642bin(const std::string &b64); std::string bin2base64(const std::string &b64); BinaryBuf derive_key(const std::string &pass, const BinaryBuf &salt); //! Verify a signature object as obtained from the response of /keys/query endpoint bool verify_identity_signature(nlohmann::json obj, const DeviceId &device_id, const UserId &user_id); } // namespace crypto } // namespace mtx mtxclient-0.2.1/include/mtxclient/crypto/objects.hpp000066400000000000000000000123111347137727200226500ustar00rootroot00000000000000#pragma once #include #include namespace mtx { namespace crypto { struct OlmDeleter { void operator()(OlmAccount *ptr) { delete[](reinterpret_cast(ptr)); } void operator()(OlmUtility *ptr) { delete[](reinterpret_cast(ptr)); } void operator()(OlmSession *ptr) { delete[](reinterpret_cast(ptr)); } void operator()(OlmOutboundGroupSession *ptr) { delete[](reinterpret_cast(ptr)); } void operator()(OlmInboundGroupSession *ptr) { delete[](reinterpret_cast(ptr)); } }; struct UtilityObject { using olm_type = OlmUtility; static olm_type *allocate() { return olm_utility(new uint8_t[olm_utility_size()]); } }; struct AccountObject { using olm_type = OlmAccount; static olm_type *allocate() { return olm_account(new uint8_t[olm_account_size()]); } static size_t pickle_length(olm_type *account) { return olm_pickle_account_length(account); } static size_t pickle(olm_type *account, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_pickle_account(account, key, key_length, pickled, pickled_length); } static size_t unpickle(olm_type *account, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_unpickle_account(account, key, key_length, pickled, pickled_length); } }; struct SessionObject { using olm_type = OlmSession; static olm_type *allocate() { return olm_session(new uint8_t[olm_session_size()]); } static size_t pickle_length(olm_type *session) { return olm_pickle_session_length(session); } static size_t pickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_pickle_session(session, key, key_length, pickled, pickled_length); } static size_t unpickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_unpickle_session(session, key, key_length, pickled, pickled_length); } }; struct InboundSessionObject { using olm_type = OlmInboundGroupSession; static olm_type *allocate() { return olm_inbound_group_session(new uint8_t[olm_inbound_group_session_size()]); } static size_t pickle_length(olm_type *session) { return olm_pickle_inbound_group_session_length(session); } static size_t pickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_pickle_inbound_group_session( session, key, key_length, pickled, pickled_length); } static size_t unpickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_unpickle_inbound_group_session( session, key, key_length, pickled, pickled_length); } }; struct OutboundSessionObject { using olm_type = OlmOutboundGroupSession; static olm_type *allocate() { return olm_outbound_group_session(new uint8_t[olm_outbound_group_session_size()]); } static size_t pickle_length(olm_type *session) { return olm_pickle_outbound_group_session_length(session); } static size_t pickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_pickle_outbound_group_session( session, key, key_length, pickled, pickled_length); } static size_t unpickle(olm_type *session, void const *key, size_t key_length, void *pickled, size_t pickled_length) { return olm_unpickle_outbound_group_session( session, key, key_length, pickled, pickled_length); } }; template std::unique_ptr create_olm_object() { return std::unique_ptr(T::allocate()); } } } mtxclient-0.2.1/include/mtxclient/crypto/types.hpp000066400000000000000000000062501347137727200223700ustar00rootroot00000000000000#pragma once #include "mtxclient/utils.hpp" #include STRONG_TYPE(UserId, std::string) STRONG_TYPE(DeviceId, std::string) STRONG_TYPE(RoomId, std::string) namespace mtx { namespace crypto { constexpr auto ED25519 = "ed25519"; constexpr auto CURVE25519 = "curve25519"; constexpr auto MEGOLM_ALGO = "m.megolm.v1.aes-sha2"; struct ExportedSession { std::map sender_claimed_keys; // currently unused. std::vector forwarding_curve25519_key_chain; // currently unused. std::string algorithm = MEGOLM_ALGO; std::string room_id; std::string sender_key; std::string session_id; std::string session_key; }; struct ExportedSessionKeys { std::vector sessions; }; struct IdentityKeys { std::string curve25519; std::string ed25519; }; struct OneTimeKeys { using KeyId = std::string; using EncodedKey = std::string; std::map curve25519; }; inline void to_json(nlohmann::json &obj, const ExportedSession &s) { obj["sender_claimed_keys"] = s.sender_claimed_keys; obj["forwarding_curve25519_key_chain"] = s.forwarding_curve25519_key_chain; obj["algorithm"] = s.algorithm; obj["room_id"] = s.room_id; obj["sender_key"] = s.sender_key; obj["session_id"] = s.session_id; obj["session_key"] = s.session_key; } inline void from_json(const nlohmann::json &obj, ExportedSession &s) { s.room_id = obj.at("room_id").get(); s.sender_key = obj.at("sender_key").get(); s.session_id = obj.at("session_id").get(); s.session_key = obj.at("session_key").get(); using ClaimedKeys = std::map; using KeyChain = std::vector; if (obj.find("sender_claimed_keys") != obj.end()) s.sender_claimed_keys = obj.at("sender_claimed_keys").get(); if (obj.find("forwarding_curve25519_key_chain") != obj.end()) s.forwarding_curve25519_key_chain = obj.at("forwarding_curve25519_key_chain").get(); } inline void to_json(nlohmann::json &obj, const ExportedSessionKeys &keys) { obj["sessions"] = keys.sessions; } inline void from_json(const nlohmann::json &obj, ExportedSessionKeys &keys) { keys.sessions = obj.at("sessions").get>(); } inline void to_json(nlohmann::json &obj, const IdentityKeys &keys) { obj[ED25519] = keys.ed25519; obj[CURVE25519] = keys.curve25519; } inline void from_json(const nlohmann::json &obj, IdentityKeys &keys) { keys.ed25519 = obj.at(ED25519).get(); keys.curve25519 = obj.at(CURVE25519).get(); } inline void to_json(nlohmann::json &obj, const OneTimeKeys &keys) { obj[CURVE25519] = keys.curve25519; } inline void from_json(const nlohmann::json &obj, OneTimeKeys &keys) { keys.curve25519 = obj.at(CURVE25519).get>(); } } // namespace crypto } // namespace mtx mtxclient-0.2.1/include/mtxclient/http/000077500000000000000000000000001347137727200201475ustar00rootroot00000000000000mtxclient-0.2.1/include/mtxclient/http/client.hpp000066400000000000000000000563621347137727200221520ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtxclient/crypto/client.hpp" #include "mtxclient/http/errors.hpp" #include "mtxclient/http/session.hpp" #include "mtxclient/utils.hpp" namespace mtx { namespace http { enum class PaginationDirection { Backwards, Forwards, }; inline std::string to_string(PaginationDirection dir) { if (dir == PaginationDirection::Backwards) return "b"; return "f"; } using RequestErr = const boost::optional &; using HeaderFields = const boost::optional &; using ErrCallback = std::function; template using Callback = std::function; template using HeadersCallback = std::function; //! Sync configuration options. struct SyncOpts { //! Filter to apply. std::string filter; //! Sync pagination token. std::string since; //! The amount of msecs to wait for long polling. uint16_t timeout = 30'000; //! Wheter to include the full state of each room. bool full_state = false; }; //! Configuration for the /messages endpoint. struct MessagesOpts { std::string room_id; std::string from; std::string to; std::string filter; PaginationDirection dir = PaginationDirection::Backwards; uint16_t limit = 30; }; //! Configuration for thumbnail retrieving. struct ThumbOpts { //! The desired width of the thumbnail. uint16_t width = 128; //! The desired height of the thumbnail. uint16_t height = 128; //! The desired resizing method. One of: ["crop", "scale"] std::string method = "crop"; //! A mxc URI which points to the content. std::string mxc_url; }; //! The main object that the user will interact. class Client : public std::enable_shared_from_this { public: Client(const std::string &server = "", uint16_t port = 443); //! Wait for the client to close. void close(bool force = false); //! Set the homeserver domain name. void set_user(const mtx::identifiers::User &user) { user_id_ = user; } //! Set the device ID. void set_device_id(const std::string &device_id) { device_id_ = device_id; } //! Set the homeserver domain name. void set_server(const std::string &server); //! Retrieve the homeserver domain name. std::string server() { return server_; }; //! Set the homeserver port. void set_port(uint16_t port) { port_ = port; }; //! Retrieve the homeserver port. uint16_t port() { return port_; }; //! Add an access token. void set_access_token(const std::string &token) { access_token_ = token; } //! Retrieve the access token. std::string access_token() const { return access_token_; } //! Update the next batch token. void set_next_batch_token(const std::string &token) { next_batch_token_ = token; } //! Retrieve the current next batch token. std::string next_batch_token() const { return next_batch_token_; } //! Retrieve the user_id. mtx::identifiers::User user_id() const { return user_id_; } //! Retrieve the device_id. std::string device_id() const { return device_id_; } //! Generate a new transaction id. std::string generate_txn_id() { return client::utils::random_token(32, false); } //! Abort all active pending requests. void shutdown() { shutdown_signal(); } //! Remove all saved configuration. void clear() { device_id_.clear(); access_token_.clear(); next_batch_token_.clear(); server_.clear(); port_ = 443; } //! Perfom login. void login(const std::string &username, const std::string &password, Callback cb); void login(const std::string &username, const std::string &password, const std::string &device_name, Callback cb); void login(const mtx::requests::Login &req, Callback cb); //! Register by not expecting a registration flow. void registration(const std::string &user, const std::string &pass, Callback cb); //! Register through a registration flow. void flow_register(const std::string &user, const std::string &pass, Callback cb); //! Complete the flow registration. void flow_response(const std::string &user, const std::string &pass, const std::string &session, const std::string &flow_type, Callback cb); //! Paginate through the list of events that the user has been, //! or would have been notified about. void notifications(uint64_t limit, Callback cb); //! Perform logout. void logout(Callback cb); //! Change avatar. void set_avatar_url(const std::string &avatar_url, ErrCallback cb); //! Change displayname. void set_displayname(const std::string &displayname, ErrCallback cb); //! Get user profile. void get_profile(const std::string &user_id, Callback cb); //! Get user avatar URL. void get_avatar_url(const std::string &user_id, Callback cb); //! Create a room with the given options. void create_room(const mtx::requests::CreateRoom &room_options, Callback cb); //! Join a room by an alias or a room_id. void join_room(const std::string &room, Callback cb); //! Leave a room by its room_id. void leave_room(const std::string &room_id, Callback cb); //! Invite a user to a room. void invite_user(const std::string &room_id, const std::string &user_id, Callback cb); //! Perform sync. void sync(const SyncOpts &opts, Callback cb); //! Paginate through room messages. void messages(const MessagesOpts &opts, Callback cb); //! Get the supported versions from the server. void versions(Callback cb); //! Mark an event as read. void read_event(const std::string &room_id, const std::string &event_id, ErrCallback cb); //! Redact an event from a room. void redact_event(const std::string &room_id, const std::string &event_id, Callback cb); //! Upload a filter void upload_filter(const nlohmann::json &j, Callback cb); //! Upload data to the content repository. void upload(const std::string &data, const std::string &content_type, const std::string &filename, Callback cb); //! Retrieve data from the content repository. void download(const std::string &mxc_url, std::function cb); void download(const std::string &server, const std::string &media_id, std::function cb); //! Retrieve a thumbnail from the given mxc url. //! If the thumbnail isn't found and `try_download` is `true` it will try //! to use the `/download` endpoint to retrieve the media. void get_thumbnail(const ThumbOpts &opts, Callback cb, bool try_download = true); //! Send typing notifications to the room. void start_typing(const std::string &room_id, uint64_t timeout, ErrCallback cb); //! Remove typing notifications from the room. void stop_typing(const std::string &room_id, ErrCallback cb); //! Get a single event. void get_event(const std::string &room_id, const std::string &event_id, Callback cb); //! Send a room message with auto-generated transaction id. template void send_room_message(const std::string &room_id, const Payload &payload, Callback cb); //! Send a room message by providing transaction id. template void send_room_message(const std::string &room_id, const std::string &txn_id, const Payload &payload, Callback cb); //! Send a state event by providing the state key. template void send_state_event(const std::string &room_id, const std::string &state_key, const Payload &payload, Callback cb); //! Send a state event with an empty state key. template void send_state_event(const std::string &room_id, const Payload &payload, Callback cb); //! Send send-to-device events to a set of client devices with a specified transaction id. void send_to_device(const std::string &event_type, const std::string &txid, const nlohmann::json &body, ErrCallback cb); //! Send send-to-device events to a set of client devices with a generated transaction id. void send_to_device(const std::string &event_type, const nlohmann::json &body, ErrCallback cb) { send_to_device(event_type, generate_txn_id(), body, cb); } // // Group related endpoints. // void create_group(const std::string &localpart, Callback cb); void joined_groups(Callback cb); void group_profile(const std::string &group_id, Callback cb); void group_rooms(const std::string &group_id, Callback cb); void set_group_profile(const std::string &group_id, nlohmann::json &req, Callback cb); void add_room_to_group(const std::string &room_id, const std::string &group_id, ErrCallback cb); // // Encryption related endpoints. // //! Upload identity keys & one time keys. void upload_keys(const mtx::requests::UploadKeys &req, Callback cb); //! Returns the current devices and identity keys for the given users. void query_keys(const mtx::requests::QueryKeys &req, Callback cb); //! Claims one-time keys for use in pre-key messages. void claim_keys(const std::string &user, const std::vector &devices, Callback cb); //! Gets a list of users who have updated their device identity keys //! since a previous sync token. void key_changes(const std::string &from, const std::string &to, Callback cb); //! Enable encryption in a room by sending a `m.room.encryption` state event. void enable_encryption(const std::string &room, Callback cb); private: template void post(const std::string &endpoint, const Request &req, Callback cb, bool requires_auth = true, const std::string &content_type = "application/json"); // put function for the PUT HTTP requests that send responses template void put(const std::string &endpoint, const Request &req, Callback cb, bool requires_auth = true); template void put(const std::string &endpoint, const Request &req, ErrCallback cb, bool requires_auth = true); template void get(const std::string &endpoint, HeadersCallback cb, bool requires_auth = true); template std::shared_ptr create_session(HeadersCallback callback); //! Setup http header with the access token if needed. void setup_auth(Session *session, bool auth); boost::asio::io_service ios_; //! Used to prevent the event loop from shutting down. boost::optional work_{ios_}; //! Worker threads for the requests. boost::thread_group thread_group_; //! SSL context for requests. boost::asio::ssl::context ssl_ctx_{boost::asio::ssl::context::sslv23_client}; //! The homeserver to connect to. std::string server_; //! The access token that would be used for authentication. std::string access_token_; //! The user ID associated with the client. mtx::identifiers::User user_id_; //! The device that this session is associated with. std::string device_id_; //! The token that will be used as the 'since' parameter on the next sync request. std::string next_batch_token_; //! The homeserver port to connect. uint16_t port_ = 443; //! All the active sessions will shutdown the connection. boost::signals2::signal shutdown_signal; }; } } template void mtx::http::Client::post(const std::string &endpoint, const Request &req, Callback callback, bool requires_auth, const std::string &content_type) { auto session = create_session( [callback](const Response &res, HeaderFields, RequestErr err) { callback(res, err); }); if (!session) return; setup_auth(session.get(), requires_auth); setup_headers( session.get(), req, endpoint, content_type); session->run(); } // put function for the PUT HTTP requests that send responses template void mtx::http::Client::put(const std::string &endpoint, const Request &req, Callback callback, bool requires_auth) { auto session = create_session( [callback](const Response &res, HeaderFields, RequestErr err) { callback(res, err); }); if (!session) return; setup_auth(session.get(), requires_auth); setup_headers( session.get(), req, endpoint, "application/json"); session->run(); } // provides PUT functionality for the endpoints which dont respond with a body template void mtx::http::Client::put(const std::string &endpoint, const Request &req, ErrCallback callback, bool requires_auth) { mtx::http::Client::put( endpoint, req, [callback](const mtx::responses::Empty, RequestErr err) { callback(err); }, requires_auth); } template void mtx::http::Client::get(const std::string &endpoint, HeadersCallback callback, bool requires_auth) { auto session = create_session(callback); if (!session) return; setup_auth(session.get(), requires_auth); setup_headers(session.get(), {}, endpoint); session->run(); } template std::shared_ptr mtx::http::Client::create_session(HeadersCallback callback) { auto session = std::make_shared( std::ref(ios_), std::ref(ssl_ctx_), server_, port_, client::utils::random_token(), [callback](RequestID, const boost::beast::http::response &response, const boost::system::error_code &err_code) { Response response_data; mtx::http::ClientError client_error; const auto header = response.base(); if (err_code) { client_error.error_code = err_code; return callback(response_data, header, client_error); } // Decompress the response. const auto body = client::utils::decompress( boost::iostreams::array_source{response.body().data(), response.body().size()}, header["Content-Encoding"].to_string()); const int status_code = static_cast(response.result()); // We only count 2xx status codes as success. if (status_code < 200 || status_code >= 300) { client_error.status_code = response.result(); // Try to parse the response in case we have an endpoint that // doesn't return an error struct for non 200 requests. try { response_data = client::utils::deserialize(body); } catch (const nlohmann::json::exception &e) { } // The homeserver should return an error struct. try { nlohmann::json json_error = json::parse(body); mtx::errors::Error matrix_error = json_error; client_error.matrix_error = matrix_error; return callback(response_data, header, client_error); } catch (const nlohmann::json::exception &e) { client_error.parse_error = std::string(e.what()) + ": " + body; return callback(response_data, header, client_error); } } // If we reach that point we most likely have a valid output from the // homeserver. try { auto res = client::utils::deserialize(body); callback(std::move(res), header, {}); } catch (const nlohmann::json::exception &e) { client_error.parse_error = std::string(e.what()) + ": " + body; callback(response_data, header, client_error); } }, [callback](RequestID, const boost::system::error_code ec) { Response response_data; mtx::http::ClientError client_error; client_error.error_code = ec; callback(response_data, {}, client_error); }); if (session) shutdown_signal.connect( boost::signals2::signal::slot_type(&Session::terminate, session.get()) .track_foreign(session)); return std::move(session); } template void mtx::http::Client::send_room_message(const std::string &room_id, const Payload &payload, Callback callback) { send_room_message(room_id, generate_txn_id(), payload, callback); } template void mtx::http::Client::send_room_message(const std::string &room_id, const std::string &txn_id, const Payload &payload, Callback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/send/" + mtx::events::to_string(Event) + "/" + mtx::client::utils::url_encode(txn_id); put(api_path, payload, callback); } template void mtx::http::Client::send_state_event(const std::string &room_id, const std::string &state_key, const Payload &payload, Callback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/state/" + mtx::events::to_string(Event) + "/" + state_key; put(api_path, payload, callback); } template void mtx::http::Client::send_state_event(const std::string &room_id, const Payload &payload, Callback callback) { send_state_event(room_id, "", payload, callback); } mtxclient-0.2.1/include/mtxclient/http/errors.hpp000066400000000000000000000011231347137727200221710ustar00rootroot00000000000000#pragma once #include "mtx/errors.hpp" #include namespace mtx { namespace http { //! Compound type that includes matrix & network related errors. struct ClientError { //! Matrix client api related error. mtx::errors::Error matrix_error; //! Error code if a network related error occured. boost::system::error_code error_code; //! Status code of the associated http response. boost::beast::http::status status_code; //! Parsing response error. std::string parse_error; }; } // namespace http } // namespace mtx mtxclient-0.2.1/include/mtxclient/http/session.hpp000066400000000000000000000074601347137727200223520ustar00rootroot00000000000000#pragma once #include #include #include #include "mtxclient/http/errors.hpp" #include "mtxclient/utils.hpp" namespace mtx { namespace http { //! Type of the unique request id. using RequestID = std::string; //! Type of the callback function on success. using SuccessCallback = std::function &response, const boost::system::error_code &err)>; //! Type of the callback function on failure. using FailureCallback = std::function; //! Represents a context of a single request. struct Session : public std::enable_shared_from_this { Session(boost::asio::io_service &ios, boost::asio::ssl::context &ssl_ctx, const std::string &host, uint16_t port, RequestID id, SuccessCallback on_success, FailureCallback on_failure); //! DNS resolver. boost::asio::ip::tcp::resolver resolver_; //! Socket used for communication. boost::asio::ssl::stream socket; //! Remote host. std::string host; //! Remote port. uint16_t port; //! Buffer where the response will be stored. boost::beast::flat_buffer output_buf; //! Parser that will the response data. boost::beast::http::response_parser parser; //! Request string. boost::beast::http::request request; //! Contains the description of an error if one occurs //! during the request life cycle. boost::system::error_code error_code; //! Unique ID assigned to the request. RequestID id; //! Function to be called when the request succeeds. SuccessCallback on_success; //! Function to be called when the request fails. FailureCallback on_failure; void run() noexcept; //! Force shutdown all connections. Pending responses will not be processed. void terminate(); private: void shutdown(); void on_resolve(boost::system::error_code ec, boost::asio::ip::tcp::resolver::results_type results); void on_close(boost::system::error_code ec); void on_connect(const boost::system::error_code &ec); void on_handshake(const boost::system::error_code &ec); void on_read(const boost::system::error_code &ec, std::size_t bytes_transferred); void on_request_complete(); void on_write(const boost::system::error_code &ec, std::size_t bytes_transferred); //! Flag to indicate that the connection of this session is closing and no //! response should be processed. std::atomic_bool is_shutting_down_; }; template void setup_headers(mtx::http::Session *session, const Request &req, const std::string &endpoint, const std::string &content_type = "") { session->request.set(boost::beast::http::field::user_agent, "mtxclient v0.2.0"); session->request.set(boost::beast::http::field::accept_encoding, "gzip,deflate"); session->request.set(boost::beast::http::field::host, session->host); session->request.method(HttpVerb); session->request.target("/_matrix" + endpoint); session->request.body() = client::utils::serialize(req); session->request.prepare_payload(); if (!content_type.empty()) session->request.set(boost::beast::http::field::content_type, content_type); } } // namespace http } // namespace mtx mtxclient-0.2.1/include/mtxclient/utils.hpp000066400000000000000000000047441347137727200210520ustar00rootroot00000000000000#pragma once #include #include #include #include namespace mtx { namespace client { namespace utils { //! Representation of Matrix Content (MXC) URIs. struct MxcUrl { //! The name of the homeserver where the content originated. std::string server; //! An opaque ID which identifies the content. std::string media_id; }; //! Parse a matrix content URI into its server & media_id components. MxcUrl parse_mxc_url(const std::string &url); //! Check if the given string represents a number. bool is_number(const std::string &s); //! Generates a random string of the given size. std::string random_token(uint8_t len = 12, bool with_symbols = true) noexcept; //! Construct query string from the given parameter pairs. std::string query_params(const std::map ¶ms) noexcept; //! Decompress a response. std::string decompress(const boost::iostreams::array_source &src, const std::string &type) noexcept; //! URL-encode the input string. std::string url_encode(const std::string &s) noexcept; template inline T deserialize(const std::string &data) { return nlohmann::json::parse(data); } template<> inline std::string deserialize(const std::string &data) { return data; } template inline std::string serialize(const T &obj) { return nlohmann::json(obj).dump(); } template<> inline std::string serialize(const std::string &obj) { return obj; } template class strong_type { public: strong_type() = default; explicit strong_type(const T &value) : value_(value) {} explicit strong_type(T &&value) : value_(std::forward(value)) {} operator T &() noexcept { return value_; } constexpr operator const T &() const noexcept { return value_; } T &get() { return value_; } T const &get() const { return value_; } private: T value_; }; // Macro for concisely defining a strong type #define STRONG_TYPE(type_name, value_type) \ struct type_name : mtx::client::utils::strong_type \ { \ using strong_type::strong_type; \ }; } } } mtxclient-0.2.1/lib/000077500000000000000000000000001347137727200143045ustar00rootroot00000000000000mtxclient-0.2.1/lib/crypto/000077500000000000000000000000001347137727200156245ustar00rootroot00000000000000mtxclient-0.2.1/lib/crypto/client.cpp000066400000000000000000000564751347137727200176270ustar00rootroot00000000000000#include #include "mtxclient/crypto/client.hpp" #include "mtxclient/crypto/types.hpp" #include "sodium.h" using json = nlohmann::json; using namespace mtx::crypto; void OlmClient::create_new_account() { account_ = create_olm_object(); auto tmp_buf = create_buffer(olm_create_account_random_length(account_.get())); const int ret = olm_create_account(account_.get(), tmp_buf.data(), tmp_buf.size()); if (ret == -1) throw olm_exception("create_new_account", account_.get()); } void OlmClient::restore_account(const std::string &saved_data, const std::string &key) { account_ = unpickle(saved_data, key); } mtx::crypto::IdentityKeys OlmClient::identity_keys() const { auto tmp_buf = create_buffer(olm_account_identity_keys_length(account_.get())); int result = olm_account_identity_keys(account_.get(), (void *)tmp_buf.data(), tmp_buf.size()); if (result == -1) throw olm_exception("identity_keys", account_.get()); return json::parse(std::string(tmp_buf.begin(), tmp_buf.end())); } std::string OlmClient::sign_message(const std::string &msg) const { auto signature_buf = create_buffer(olm_account_signature_length(account_.get())); olm_account_sign( account_.get(), msg.data(), msg.size(), signature_buf.data(), signature_buf.size()); return std::string(signature_buf.begin(), signature_buf.end()); } std::string OlmClient::sign_identity_keys() { auto keys = identity_keys(); json body{{"algorithms", {"m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2"}}, {"user_id", user_id_}, {"device_id", device_id_}, {"keys", { {"curve25519:" + device_id_, keys.curve25519}, {"ed25519:" + device_id_, keys.ed25519}, }}}; return sign_message(body.dump()); } std::size_t OlmClient::generate_one_time_keys(std::size_t number_of_keys) { const std::size_t nbytes = olm_account_generate_one_time_keys_random_length(account_.get(), number_of_keys); auto buf = create_buffer(nbytes); const int ret = olm_account_generate_one_time_keys( account_.get(), number_of_keys, buf.data(), buf.size()); if (ret == -1) throw olm_exception("generate_one_time_keys", account_.get()); return ret; } mtx::crypto::OneTimeKeys OlmClient::one_time_keys() { auto buf = create_buffer(olm_account_one_time_keys_length(account_.get())); const int ret = olm_account_one_time_keys(account_.get(), buf.data(), buf.size()); if (ret == -1) throw olm_exception("one_time_keys", account_.get()); return json::parse(std::string(buf.begin(), buf.end())); } std::string OlmClient::sign_one_time_key(const std::string &key) { json j{{"key", key}}; return sign_message(j.dump()); } std::map OlmClient::sign_one_time_keys(const OneTimeKeys &keys) { // Sign & append the one time keys. std::map signed_one_time_keys; for (const auto &elem : keys.curve25519) { const auto key_id = elem.first; const auto one_time_key = elem.second; auto sig = sign_one_time_key(one_time_key); signed_one_time_keys["signed_curve25519:" + key_id] = signed_one_time_key_json(one_time_key, sig); } return signed_one_time_keys; } json OlmClient::signed_one_time_key_json(const std::string &key, const std::string &signature) { return json{{"key", key}, {"signatures", {{user_id_, {{"ed25519:" + device_id_, signature}}}}}}; } mtx::requests::UploadKeys OlmClient::create_upload_keys_request() { return create_upload_keys_request(one_time_keys()); } mtx::requests::UploadKeys OlmClient::create_upload_keys_request(const mtx::crypto::OneTimeKeys &one_time_keys) { mtx::requests::UploadKeys req; req.device_keys.user_id = user_id_; req.device_keys.device_id = device_id_; auto id_keys = identity_keys(); req.device_keys.keys["curve25519:" + device_id_] = id_keys.curve25519; req.device_keys.keys["ed25519:" + device_id_] = id_keys.ed25519; // Generate and add the signature to the request. auto sig = sign_identity_keys(); req.device_keys.signatures[user_id_]["ed25519:" + device_id_] = sig; if (one_time_keys.curve25519.empty()) return req; // Sign & append the one time keys. req.one_time_keys = sign_one_time_keys(one_time_keys); return req; } OutboundGroupSessionPtr OlmClient::init_outbound_group_session() { auto session = create_olm_object(); auto tmp_buf = create_buffer(olm_init_outbound_group_session_random_length(session.get())); const int ret = olm_init_outbound_group_session(session.get(), tmp_buf.data(), tmp_buf.size()); if (ret == -1) throw olm_exception("init_outbound_group_session", session.get()); return session; } InboundGroupSessionPtr OlmClient::init_inbound_group_session(const std::string &session_key) { auto session = create_olm_object(); const int ret = olm_init_inbound_group_session( session.get(), reinterpret_cast(session_key.data()), session_key.size()); if (ret == -1) throw olm_exception("init_inbound_group_session", session.get()); return session; } GroupPlaintext OlmClient::decrypt_group_message(OlmInboundGroupSession *session, const std::string &message, uint32_t message_index) { // TODO handle errors auto tmp_msg = create_buffer(message.size()); std::copy(message.begin(), message.end(), tmp_msg.begin()); auto plaintext_len = olm_group_decrypt_max_plaintext_length(session, tmp_msg.data(), tmp_msg.size()); auto plaintext = create_buffer(plaintext_len); tmp_msg = create_buffer(message.size()); std::copy(message.begin(), message.end(), tmp_msg.begin()); const int nbytes = olm_group_decrypt(session, tmp_msg.data(), tmp_msg.size(), plaintext.data(), plaintext.size(), &message_index); if (nbytes == -1) throw olm_exception("olm_group_decrypt", session); auto output = create_buffer(nbytes); std::memcpy(output.data(), plaintext.data(), nbytes); return GroupPlaintext{std::move(output), message_index}; } BinaryBuf OlmClient::encrypt_group_message(OlmOutboundGroupSession *session, const std::string &plaintext) { auto encrypted_len = olm_group_encrypt_message_length(session, plaintext.size()); auto encrypted_message = create_buffer(encrypted_len); const int nbytes = olm_group_encrypt(session, reinterpret_cast(plaintext.data()), plaintext.size(), encrypted_message.data(), encrypted_message.size()); if (nbytes == -1) throw olm_exception("olm_group_encrypt", session); return encrypted_message; } BinaryBuf OlmClient::decrypt_message(OlmSession *session, size_t msgtype, const std::string &one_time_key_message) { auto tmp = create_buffer(one_time_key_message.size()); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); auto declen = olm_decrypt_max_plaintext_length(session, msgtype, (void *)tmp.data(), tmp.size()); auto decrypted = create_buffer(declen); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); const int nbytes = olm_decrypt( session, msgtype, (void *)tmp.data(), tmp.size(), decrypted.data(), decrypted.size()); if (nbytes == -1) throw olm_exception("olm_decrypt", session); // Removing the extra padding from the origial buffer. auto output = create_buffer(nbytes); std::memcpy(output.data(), decrypted.data(), nbytes); return output; } BinaryBuf OlmClient::encrypt_message(OlmSession *session, const std::string &msg) { auto ciphertext = create_buffer(olm_encrypt_message_length(session, msg.size())); auto random_buf = create_buffer(olm_encrypt_random_length(session)); const int ret = olm_encrypt(session, msg.data(), msg.size(), random_buf.data(), random_buf.size(), ciphertext.data(), ciphertext.size()); if (ret == -1) throw olm_exception("olm_encrypt", session); return ciphertext; } OlmSessionPtr OlmClient::create_inbound_session_from(const std::string &their_curve25519, const std::string &one_time_key_message) { BinaryBuf tmp(one_time_key_message.size()); memcpy(tmp.data(), one_time_key_message.data(), one_time_key_message.size()); return create_inbound_session_from(std::move(their_curve25519), std::move(tmp)); } OlmSessionPtr OlmClient::create_inbound_session_from(const std::string &their_curve25519, const BinaryBuf &one_time_key_message) { auto session = create_olm_object(); auto tmp = create_buffer(one_time_key_message.size()); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); int ret = olm_create_inbound_session_from(session.get(), account(), their_curve25519.data(), their_curve25519.size(), (void *)tmp.data(), tmp.size()); if (ret == -1) throw olm_exception("create_inbound_session_from", session.get()); ret = olm_remove_one_time_keys(account_.get(), session.get()); if (ret == -1) throw olm_exception("inbound_session_from_remove_one_time_keys", account_.get()); return session; } OlmSessionPtr OlmClient::create_inbound_session(const std::string &one_time_key_message) { BinaryBuf tmp(one_time_key_message.size()); memcpy(tmp.data(), one_time_key_message.data(), one_time_key_message.size()); return create_inbound_session(std::move(tmp)); } OlmSessionPtr OlmClient::create_inbound_session(const BinaryBuf &one_time_key_message) { auto session = create_olm_object(); auto tmp = create_buffer(one_time_key_message.size()); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); int ret = olm_create_inbound_session(session.get(), account(), (void *)tmp.data(), tmp.size()); if (ret == -1) throw olm_exception("create_inbound_session", session.get()); ret = olm_remove_one_time_keys(account_.get(), session.get()); if (ret == -1) throw olm_exception("inbound_session_remove_one_time_keys", account_.get()); return session; } OlmSessionPtr OlmClient::create_outbound_session(const std::string &identity_key, const std::string &one_time_key) { auto session = create_olm_object(); auto random_buf = create_buffer(olm_create_outbound_session_random_length(session.get())); const int ret = olm_create_outbound_session(session.get(), account(), identity_key.data(), identity_key.size(), one_time_key.data(), one_time_key.size(), random_buf.data(), random_buf.size()); if (ret == -1) throw olm_exception("create_outbound_session", session.get()); return session; } nlohmann::json OlmClient::create_room_key_event(const UserId &recipient, const std::string &ed25519_recipient_key, const nlohmann::json &content) const noexcept { return json{{"content", content}, {"keys", {{"ed25519", identity_keys().ed25519}}}, {"recipient", recipient.get()}, {"recipient_keys", {{"ed25519", ed25519_recipient_key}}}, {"sender", user_id_}, {"sender_device", device_id_}, {"type", "m.room_key"}}; } nlohmann::json OlmClient::create_olm_encrypted_content(OlmSession *session, const std::string &room_key_event, const std::string &recipient_key) { size_t msg_type = olm_encrypt_message_type(session); auto encrypted = encrypt_message(session, room_key_event); auto encrypted_str = std::string((char *)encrypted.data(), encrypted.size()); return json{ {"algorithm", "m.olm.v1.curve25519-aes-sha2"}, {"sender_key", identity_keys().curve25519}, {"ciphertext", {{recipient_key, {{"body", encrypted_str}, {"type", msg_type}}}}}}; } std::string OlmClient::save(const std::string &key) { if (!account_) return std::string(); return pickle(account(), key); } std::string mtx::crypto::session_id(OlmSession *s) { auto tmp = create_buffer(olm_session_id_length(s)); olm_session_id(s, tmp.data(), tmp.size()); return std::string(tmp.begin(), tmp.end()); } std::string mtx::crypto::session_id(OlmOutboundGroupSession *s) { auto tmp = create_buffer(olm_outbound_group_session_id_length(s)); olm_outbound_group_session_id(s, tmp.data(), tmp.size()); return std::string(tmp.begin(), tmp.end()); } std::string mtx::crypto::session_key(OlmOutboundGroupSession *s) { auto tmp = create_buffer(olm_outbound_group_session_key_length(s)); olm_outbound_group_session_key(s, tmp.data(), tmp.size()); return std::string(tmp.begin(), tmp.end()); } std::string mtx::crypto::export_session(OlmInboundGroupSession *s) { const size_t len = olm_export_inbound_group_session_length(s); const uint32_t index = olm_inbound_group_session_first_known_index(s); auto session_key = create_buffer(len); const int rc = olm_export_inbound_group_session(s, session_key.data(), session_key.size(), index); if (rc == -1) throw olm_exception("session_key", s); return std::string(session_key.begin(), session_key.end()); } InboundGroupSessionPtr mtx::crypto::import_session(const std::string &session_key) { auto session = create_olm_object(); const int rc = olm_import_inbound_group_session( session.get(), reinterpret_cast(session_key.data()), session_key.size()); if (rc == -1) throw olm_exception("import_session", session.get()); return session; } bool mtx::crypto::matches_inbound_session(OlmSession *session, const std::string &one_time_key_message) { auto tmp = create_buffer(one_time_key_message.size()); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); return olm_matches_inbound_session(session, (void *)tmp.data(), tmp.size()); } bool mtx::crypto::matches_inbound_session_from(OlmSession *session, const std::string &id_key, const std::string &one_time_key_message) { auto tmp = create_buffer(one_time_key_message.size()); std::copy(one_time_key_message.begin(), one_time_key_message.end(), tmp.begin()); return olm_matches_inbound_session_from( session, id_key.data(), id_key.size(), (void *)tmp.data(), tmp.size()); } bool mtx::crypto::verify_identity_signature(nlohmann::json obj, const DeviceId &device_id, const UserId &user_id) { using namespace client::utils; try { const auto sign_key_id = "ed25519:" + device_id.get(); const auto signing_key = obj.at("keys").at(sign_key_id).get(); const auto signature = obj.at("signatures").at(user_id.get()).at(sign_key_id).get(); if (signature.empty()) return false; obj.erase("unsigned"); obj.erase("signatures"); const auto msg = obj.dump(); auto utility = create_olm_object(); auto ret = olm_ed25519_verify(utility.get(), signing_key.data(), signing_key.size(), msg.data(), msg.size(), (void *)signature.data(), signature.size()); if (ret != 0) throw olm_exception("verify_identity_signature", utility.get()); return true; } catch (const nlohmann::json::exception &e) { std::cerr << "verify_identity_signature: " << e.what(); } return false; } std::string mtx::crypto::encrypt_exported_sessions(const mtx::crypto::ExportedSessionKeys &keys, std::string pass) { const auto plaintext = json(keys).dump(); const auto msg_len = plaintext.size(); const auto ciphertext_len = crypto_secretbox_MACBYTES + msg_len; auto nonce = create_buffer(crypto_secretbox_NONCEBYTES); auto ciphertext = create_buffer(ciphertext_len); auto salt = create_buffer(crypto_pwhash_SALTBYTES); auto key = derive_key(pass, salt); crypto_secretbox_easy(reinterpret_cast(ciphertext.data()), reinterpret_cast(plaintext.data()), msg_len, nonce.data(), reinterpret_cast(key.data())); // Format of the output buffer: (nonce + salt + ciphertext) BinaryBuf output{nonce}; output.insert( output.end(), std::make_move_iterator(salt.begin()), std::make_move_iterator(salt.end())); output.insert(output.end(), std::make_move_iterator(ciphertext.begin()), std::make_move_iterator(ciphertext.end())); return std::string(output.begin(), output.end()); } mtx::crypto::ExportedSessionKeys mtx::crypto::decrypt_exported_sessions(const std::string &data, std::string pass) { if (data.size() < crypto_secretbox_MACBYTES + crypto_secretbox_NONCEBYTES + crypto_pwhash_SALTBYTES) throw sodium_exception{"decrypt_exported_sessions", "ciphertext too small"}; const auto nonce_start = data.begin(); const auto nonce_end = nonce_start + crypto_secretbox_NONCEBYTES; auto nonce = BinaryBuf(nonce_start, nonce_end); const auto salt_end = nonce_end + crypto_pwhash_SALTBYTES; auto salt = BinaryBuf(nonce_end, salt_end); auto ciphertext = BinaryBuf(salt_end, data.end()); auto decrypted = create_buffer(ciphertext.size() - crypto_secretbox_MACBYTES); auto key = derive_key(pass, salt); if (crypto_secretbox_open_easy(decrypted.data(), reinterpret_cast(ciphertext.data()), ciphertext.size(), nonce.data(), reinterpret_cast(key.data())) != 0) throw sodium_exception{"crypto_secretbox_open_easy", "failed to decrypt"}; return json::parse(std::string(decrypted.begin(), decrypted.end())); } std::string mtx::crypto::base642bin(const std::string &b64) { std::size_t bin_maxlen = b64.size(); std::size_t bin_len; const char *max_end; auto ciphertext = create_buffer(bin_maxlen); const int rc = sodium_base642bin(reinterpret_cast(ciphertext.data()), ciphertext.size(), b64.data(), b64.size(), nullptr, &bin_len, &max_end, sodium_base64_VARIANT_ORIGINAL); if (rc != 0) throw sodium_exception{"sodium_base642bin", "encoding failed"}; if (bin_len != bin_maxlen) ciphertext.resize(bin_len); return std::string(std::make_move_iterator(ciphertext.begin()), std::make_move_iterator(ciphertext.end())); } std::string mtx::crypto::bin2base64(const std::string &bin) { auto base64buf = create_buffer(sodium_base64_encoded_len(bin.size(), sodium_base64_VARIANT_ORIGINAL)); sodium_bin2base64(reinterpret_cast(base64buf.data()), base64buf.size(), reinterpret_cast(bin.data()), bin.size(), sodium_base64_VARIANT_ORIGINAL); // Removing the null byte. return std::string(base64buf.begin(), base64buf.end() - 1); } BinaryBuf mtx::crypto::derive_key(const std::string &pass, const BinaryBuf &salt) { if (salt.size() != crypto_pwhash_SALTBYTES) throw sodium_exception{"derive_key", "invalid buffer size for salt"}; auto key = create_buffer(crypto_secretbox_KEYBYTES); // Derive a key from the user provided password. if (crypto_pwhash(key.data(), key.size(), pass.data(), pass.size(), salt.data(), crypto_pwhash_OPSLIMIT_INTERACTIVE, crypto_pwhash_MEMLIMIT_INTERACTIVE, crypto_pwhash_ALG_DEFAULT) != 0) { throw sodium_exception{"crypto_pwhash", "out of memory"}; } return key; } mtxclient-0.2.1/lib/crypto/types.cpp000066400000000000000000000042451347137727200175010ustar00rootroot00000000000000#include "mtxclient/crypto/types.hpp" namespace mtx { namespace crypto { void to_json(nlohmann::json &obj, const ExportedSession &s) { obj["sender_claimed_keys"] = s.sender_claimed_keys; obj["forwarding_curve25519_key_chain"] = s.forwarding_curve25519_key_chain; obj["algorithm"] = s.algorithm; obj["room_id"] = s.room_id; obj["sender_key"] = s.sender_key; obj["session_id"] = s.session_id; obj["session_key"] = s.session_key; } void from_json(const nlohmann::json &obj, ExportedSession &s) { s.room_id = obj.at("room_id").get(); s.sender_key = obj.at("sender_key").get(); s.session_id = obj.at("session_id").get(); s.session_key = obj.at("session_key").get(); using ClaimedKeys = std::map; using KeyChain = std::vector; if (obj.find("sender_claimed_keys") != obj.end()) s.sender_claimed_keys = obj.at("sender_claimed_keys").get(); if (obj.find("forwarding_curve25519_key_chain") != obj.end()) s.forwarding_curve25519_key_chain = obj.at("forwarding_curve25519_key_chain").get(); } void to_json(nlohmann::json &obj, const ExportedSessionKeys &keys) { obj["sessions"] = keys.sessions; } void from_json(const nlohmann::json &obj, ExportedSessionKeys &keys) { keys.sessions = obj.at("sessions").get>(); } void to_json(nlohmann::json &obj, const IdentityKeys &keys) { obj[ED25519] = keys.ed25519; obj[CURVE25519] = keys.curve25519; } void from_json(const nlohmann::json &obj, IdentityKeys &keys) { keys.ed25519 = obj.at(ED25519).get(); keys.curve25519 = obj.at(CURVE25519).get(); } void to_json(nlohmann::json &obj, const OneTimeKeys &keys) { obj[CURVE25519] = keys.curve25519; } void from_json(const nlohmann::json &obj, OneTimeKeys &keys) { keys.curve25519 = obj.at(CURVE25519).get>(); } } // namespace crypto } // namespace mtx mtxclient-0.2.1/lib/http/000077500000000000000000000000001347137727200152635ustar00rootroot00000000000000mtxclient-0.2.1/lib/http/client.cpp000066400000000000000000000522161347137727200172530ustar00rootroot00000000000000#include #include #include #include "mtxclient/http/client.hpp" #include "mtxclient/utils.hpp" #include "mtx/requests.hpp" #include "mtx/responses.hpp" using namespace mtx::http; using namespace boost::beast; Client::Client(const std::string &server, uint16_t port) : server_{server} , port_{port} { using namespace boost::asio; const auto threads_num = std::max(1U, std::thread::hardware_concurrency()); for (unsigned int i = 0; i < threads_num; ++i) thread_group_.add_thread(new boost::thread([this]() { ios_.run(); })); } void Client::set_server(const std::string &server) { // Check if the input also contains the port. std::vector parts; boost::split(parts, server, [](char c) { return c == ':'; }); if (parts.size() == 2 && mtx::client::utils::is_number(parts.at(1))) { server_ = parts.at(0); port_ = std::stoi(parts.at(1)); } else { server_ = server; } } void Client::close(bool force) { // We close all open connections. if (force) { shutdown(); ios_.stop(); } // Destroy work object. This allows the I/O thread to // exit the event loop when there are no more pending // asynchronous operations. work_.reset(); // Wait for the worker threads to exit. thread_group_.join_all(); } void Client::setup_auth(Session *session, bool auth) { const auto token = access_token(); if (auth && !token.empty()) session->request.set(boost::beast::http::field::authorization, "Bearer " + token); } // // Client API endpoints // void Client::login(const std::string &user, const std::string &password, const std::string &device_name, Callback callback) { mtx::requests::Login req; req.user = user; req.password = password; req.initial_device_display_name = device_name; login(req, callback); } void Client::login(const std::string &user, const std::string &password, Callback callback) { mtx::requests::Login req; req.user = user; req.password = password; login(req, callback); } void Client::login(const mtx::requests::Login &req, Callback callback) { post( "/client/r0/login", req, [_this = shared_from_this(), callback](const mtx::responses::Login &resp, RequestErr err) { if (!err && resp.access_token.size()) { _this->user_id_ = resp.user_id; _this->device_id_ = resp.device_id; _this->access_token_ = resp.access_token; } callback(resp, err); }, false); } void Client::logout(Callback callback) { mtx::requests::Logout req; post( "/client/r0/logout", req, [_this = shared_from_this(), callback](const mtx::responses::Logout &res, RequestErr err) { if (!err) { // Clear the now invalid access token when logout is successful _this->access_token_.clear(); } // Pass up response and error to supplied callback callback(res, err); }); } void Client::notifications(uint64_t limit, Callback cb) { std::map params; params.emplace("limit", std::to_string(limit)); get( "/client/r0/notifications?" + mtx::client::utils::query_params(params), [cb](const mtx::responses::Notifications &res, HeaderFields, RequestErr err) { cb(res, err); }); } void Client::set_avatar_url(const std::string &avatar_url, ErrCallback callback) { mtx::requests::AvatarUrl req; req.avatar_url = avatar_url; put("/client/r0/profile/" + mtx::client::utils::url_encode(user_id_.to_string()) + "/avatar_url", req, callback); } void Client::set_displayname(const std::string &displayname, ErrCallback callback) { mtx::requests::DisplayName req; req.displayname = displayname; put("/client/r0/profile/" + mtx::client::utils::url_encode(user_id_.to_string()) + "/displayname", req, callback); } void Client::get_profile(const std::string &user_id, Callback callback) { get("/client/r0/profile/" + user_id, [callback](const mtx::responses::Profile &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::get_avatar_url(const std::string &user_id, Callback callback) { get("/client/r0/profile/" + user_id + "/avatar_url", [callback](const mtx::responses::AvatarUrl &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::create_room(const mtx::requests::CreateRoom &room_options, Callback callback) { post( "/client/r0/createRoom", room_options, callback); } void Client::join_room(const std::string &room, Callback callback) { auto api_path = "/client/r0/join/" + room; post(api_path, "", callback); } void Client::leave_room(const std::string &room_id, Callback callback) { auto api_path = "/client/r0/rooms/" + room_id + "/leave"; post(api_path, "", callback); } void Client::invite_user(const std::string &room_id, const std::string &user_id, Callback callback) { mtx::requests::RoomInvite req; req.user_id = user_id; auto api_path = "/client/r0/rooms/" + room_id + "/invite"; post(api_path, req, callback); } void Client::sync(const SyncOpts &opts, Callback callback) { std::map params; if (!opts.filter.empty()) params.emplace("filter", opts.filter); if (!opts.since.empty()) params.emplace("since", opts.since); if (opts.full_state) params.emplace("full_state", "true"); params.emplace("timeout", std::to_string(opts.timeout)); get("/client/r0/sync?" + mtx::client::utils::query_params(params), [callback](const mtx::responses::Sync &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::versions(Callback callback) { get("/client/versions", [callback](const mtx::responses::Versions &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::upload(const std::string &data, const std::string &content_type, const std::string &filename, Callback cb) { std::map params = {{"filename", filename}}; const auto api_path = "/media/r0/upload?" + client::utils::query_params(params); post(api_path, data, cb, true, content_type); } void Client::download(const std::string &mxc_url, std::function callback) { auto url = mtx::client::utils::parse_mxc_url(mxc_url); download(url.server, url.media_id, std::move(callback)); } void Client::get_thumbnail(const ThumbOpts &opts, Callback callback, bool try_download) { std::map params; params.emplace("width", std::to_string(opts.width)); params.emplace("height", std::to_string(opts.height)); params.emplace("method", opts.method); const auto mxc = mtx::client::utils::parse_mxc_url(opts.mxc_url); const auto api_path = "/media/r0/thumbnail/" + mxc.server + "/" + mxc.media_id + "?" + client::utils::query_params(params); get(api_path, [callback, try_download, mxc = std::move(mxc), _this = shared_from_this()]( const std::string &res, HeaderFields, RequestErr err) { if (err && try_download) { const int status_code = static_cast(err->status_code); if (status_code == 404) { _this->download( mxc.server, mxc.media_id, [callback = std::move(callback)]( const std::string &res, const std::string &, // content_type const std::string &, // original_filename RequestErr err) { callback(res, err); }); return; } } callback(res, err); }); } void Client::download(const std::string &server, const std::string &media_id, std::function callback) { const auto api_path = "/media/r0/download/" + server + "/" + media_id; get( api_path, [callback](const std::string &res, HeaderFields fields, RequestErr err) { std::string content_type, original_filename; if (fields) { if (fields->find("Content-Type") != fields->end()) content_type = fields->at("Content-Type").to_string(); if (fields->find("Content-Disposition") != fields->end()) { auto value = fields->at("Content-Disposition").to_string(); std::vector results; boost::split(results, value, [](char c) { return c == '='; }); original_filename = results.back(); } } callback(res, content_type, original_filename, err); }); } void Client::start_typing(const std::string &room_id, uint64_t timeout, ErrCallback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/typing/" + mtx::client::utils::url_encode(user_id_.to_string()); mtx::requests::TypingNotification req; req.typing = true; req.timeout = timeout; put(api_path, req, callback); } void Client::stop_typing(const std::string &room_id, ErrCallback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/typing/" + mtx::client::utils::url_encode(user_id_.to_string()); mtx::requests::TypingNotification req; req.typing = false; put(api_path, req, callback); } void Client::get_event(const std::string &room_id, const std::string &event_id, Callback callback) { using namespace mtx::client::utils; const auto api_path = "/client/r0/rooms/" + url_encode(room_id) + "/event/" + url_encode(event_id); get( api_path, [callback](const mtx::events::collections::TimelineEvent &res, HeaderFields, RequestErr err) { callback(res.data, err); }); } void Client::messages(const MessagesOpts &opts, Callback callback) { std::map params; params.emplace("dir", to_string(opts.dir)); if (!opts.from.empty()) params.emplace("from", opts.from); if (!opts.to.empty()) params.emplace("to", opts.to); if (opts.limit > 0) params.emplace("limit", std::to_string(opts.limit)); if (!opts.filter.empty()) params.emplace("filter", opts.filter); const auto api_path = "/client/r0/rooms/" + opts.room_id + "/messages?" + client::utils::query_params(params); get( api_path, [callback](const mtx::responses::Messages &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::upload_filter(const nlohmann::json &j, Callback callback) { const auto api_path = "/client/r0/user/" + mtx::client::utils::url_encode(user_id_.to_string()) + "/filter"; post(api_path, j, callback); } void Client::read_event(const std::string &room_id, const std::string &event_id, ErrCallback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/read_markers"; nlohmann::json body = {{"m.fully_read", event_id}, {"m.read", event_id}}; post( api_path, body, [callback](const mtx::responses::Empty, RequestErr err) { callback(err); }); } void Client::redact_event(const std::string &room_id, const std::string &event_id, Callback callback) { const auto api_path = "/client/r0/rooms/" + room_id + "/redact/" + event_id + "/" + mtx::client::utils::random_token(); json body = json::object(); put(api_path, body, callback); } void Client::registration(const std::string &user, const std::string &pass, Callback callback) { nlohmann::json req = {{"username", user}, {"password", pass}}; post("/client/r0/register", req, callback, false); } void Client::flow_register(const std::string &user, const std::string &pass, Callback callback) { nlohmann::json req = {{"username", user}, {"password", pass}}; post( "/client/r0/register", req, callback, false); } void Client::flow_response(const std::string &user, const std::string &pass, const std::string &session, const std::string &flow_type, Callback callback) { nlohmann::json req = {{"username", user}, {"password", pass}, {"auth", {{"type", flow_type}, {"session", session}}}}; post("/client/r0/register", req, callback, false); } void Client::send_to_device(const std::string &event_type, const std::string &txn_id, const nlohmann::json &body, ErrCallback callback) { const auto api_path = "/client/r0/sendToDevice/" + event_type + "/" + mtx::client::utils::url_encode(txn_id); put(api_path, body, callback); } // // Group related endpoints. // void Client::create_group(const std::string &localpart, Callback cb) { json req; req["localpart"] = localpart; post("/client/r0/create_group", req, cb); } void Client::joined_groups(Callback cb) { get("/client/r0/joined_groups", [cb](const mtx::responses::JoinedGroups &res, HeaderFields, RequestErr err) { cb(res, err); }); } void Client::group_profile(const std::string &group_id, Callback cb) { get("/client/r0/groups/" + group_id + "/profile", [cb](const mtx::responses::GroupProfile &res, HeaderFields, RequestErr err) { cb(res, err); }); } void Client::group_rooms(const std::string &group_id, Callback cb) { get( "/client/r0/groups/" + group_id + "/rooms", [cb](const nlohmann::json &res, HeaderFields, RequestErr err) { cb(res, err); }); } void Client::set_group_profile(const std::string &group_id, nlohmann::json &req, Callback cb) { post("/client/r0/groups/" + group_id + "/profile", req, cb); } void Client::add_room_to_group(const std::string &room_id, const std::string &group_id, ErrCallback cb) { put( "/client/r0/groups/" + group_id + "/admin/rooms/" + room_id, json::object(), cb); } // // Encryption related endpoints // void Client::upload_keys(const mtx::requests::UploadKeys &req, Callback callback) { post( "/client/r0/keys/upload", req, callback); } void Client::query_keys(const mtx::requests::QueryKeys &req, Callback callback) { post( "/client/r0/keys/query", req, callback); } //! Claims one-time keys for use in pre-key messages. void Client::claim_keys(const std::string &user, const std::vector &devices, Callback cb) { mtx::requests::ClaimKeys req; std::map dev_to_algorithm; for (const auto &d : devices) dev_to_algorithm.emplace(d, "signed_curve25519"); req.one_time_keys[user] = dev_to_algorithm; post( "/client/r0/keys/claim", std::move(req), std::move(cb)); } void Client::key_changes(const std::string &from, const std::string &to, Callback callback) { std::map params; if (!from.empty()) params.emplace("from", from); if (!to.empty()) params.emplace("to", to); get( "/client/r0/keys/changes?" + mtx::client::utils::query_params(params), [callback](const mtx::responses::KeyChanges &res, HeaderFields, RequestErr err) { callback(res, err); }); } void Client::enable_encryption(const std::string &room, Callback callback) { using namespace mtx::events; state::Encryption event; send_state_event(room, "", event, callback); } mtxclient-0.2.1/lib/http/session.cpp000066400000000000000000000106351347137727200174570ustar00rootroot00000000000000#include "mtxclient/http/session.hpp" #include using namespace mtx::http; Session::Session(boost::asio::io_service &ios, boost::asio::ssl::context &ssl_ctx, const std::string &host, uint16_t port, RequestID id, SuccessCallback on_success, FailureCallback on_failure) : resolver_(ios) , socket(ios, ssl_ctx) , host(std::move(host)) , port{port} , id(std::move(id)) , on_success(std::move(on_success)) , on_failure(std::move(on_failure)) , is_shutting_down_(false) { parser.header_limit(8192); parser.body_limit(1 * 1024 * 1024 * 1024); // 1 GiB } void Session::on_resolve(boost::system::error_code ec, boost::asio::ip::tcp::resolver::results_type results) { if (ec) { on_failure(id, ec); return; } boost::asio::async_connect( socket.next_layer(), results, std::bind(&Session::on_connect, shared_from_this(), std::placeholders::_1)); } void Session::on_close(boost::system::error_code ec) { if (ec == boost::asio::error::eof) { // Rationale: // http://stackoverflow.com/questions/25587403/boost-asio-ssl-async-shutdown-always-finishes-with-an-error ec.assign(0, ec.category()); } // SSL_R_SHORT_READ is removed in openssl-1.1 #if defined SSL_R_SHORT_READ if (ERR_GET_REASON(ec.value()) == SSL_R_SHORT_READ) return; #else if (ERR_GET_REASON(ec.value()) == boost::asio::ssl::error::stream_truncated) return; #endif if (ec) // TODO: propagate the error. std::cout << "shutdown: " << ec.message() << std::endl; } void Session::on_connect(const boost::system::error_code &ec) { if (ec) { on_failure(id, ec); return; } // Perform the SSL handshake socket.async_handshake( boost::asio::ssl::stream_base::client, std::bind(&Session::on_handshake, shared_from_this(), std::placeholders::_1)); } void Session::terminate() { is_shutting_down_ = true; shutdown(); } void Session::shutdown() { socket.async_shutdown( std::bind(&Session::on_close, shared_from_this(), std::placeholders::_1)); } void Session::on_request_complete() { if (is_shutting_down_) return; boost::system::error_code ec(error_code); on_success(id, parser.get(), ec); shutdown(); } void Session::on_handshake(const boost::system::error_code &ec) { if (ec) { on_failure(id, ec); return; } boost::beast::http::async_write( socket, request, std::bind( &Session::on_write, shared_from_this(), std::placeholders::_1, std::placeholders::_2)); } void Session::on_write(const boost::system::error_code &ec, std::size_t bytes_transferred) { boost::ignore_unused(bytes_transferred); if (ec) { on_failure(id, ec); return; } // Receive the HTTP response boost::beast::http::async_read( socket, output_buf, parser, std::bind( &Session::on_read, shared_from_this(), std::placeholders::_1, std::placeholders::_2)); } void Session::on_read(const boost::system::error_code &ec, std::size_t bytes_transferred) { boost::ignore_unused(bytes_transferred); if (ec) error_code = ec; on_request_complete(); } void Session::run() noexcept { // Set SNI Hostname (many hosts need this to handshake successfully) if (!SSL_set_tlsext_host_name(socket.native_handle(), host.c_str())) { boost::system::error_code ec{static_cast(::ERR_get_error()), boost::asio::error::get_ssl_category()}; std::cerr << ec.message() << "\n"; return on_failure(id, ec); } resolver_.async_resolve(host, std::to_string(port), std::bind(&Session::on_resolve, shared_from_this(), std::placeholders::_1, std::placeholders::_2)); } mtxclient-0.2.1/lib/structs/000077500000000000000000000000001347137727200160135ustar00rootroot00000000000000mtxclient-0.2.1/lib/structs/common.cpp000066400000000000000000000026251347137727200200140ustar00rootroot00000000000000#include "mtx/common.hpp" namespace mtx { namespace crypto { void from_json(const json &obj, UnsignedDeviceInfo &res) { if (obj.find("device_display_name") != obj.end()) res.device_display_name = obj.at("device_display_name").get(); } void to_json(json &obj, const UnsignedDeviceInfo &res) { if (!res.device_display_name.empty()) obj["device_display_name"] = res.device_display_name; } void from_json(const json &obj, DeviceKeys &res) { res.user_id = obj.at("user_id").get(); res.device_id = obj.at("device_id").get(); res.algorithms = obj.at("algorithms").get>(); res.keys = obj.at("keys").get>(); res.signatures = obj.at("signatures").get>>(); if (obj.find("unsigned") != obj.end()) res.unsigned_info = obj.at("unsigned").get(); } void to_json(json &obj, const DeviceKeys &res) { obj["user_id"] = res.user_id; obj["device_id"] = res.device_id; obj["algorithms"] = res.algorithms; obj["keys"] = res.keys; obj["signatures"] = res.signatures; if (!res.unsigned_info.device_display_name.empty()) obj["unsigned"] = res.unsigned_info; } } } mtxclient-0.2.1/lib/structs/errors.cpp000066400000000000000000000062171347137727200200410ustar00rootroot00000000000000#include "mtx/errors.hpp" namespace mtx { namespace errors { std::string to_string(ErrorCode code) { switch (code) { case ErrorCode::M_UNRECOGNIZED: return "M_UNRECOGNIZED"; case ErrorCode::M_FORBIDDEN: return "M_FORBIDDEN"; case ErrorCode::M_UNKNOWN_TOKEN: return "M_UNKNOWN_TOKEN"; case ErrorCode::M_BAD_JSON: return "M_BAD_JSON"; case ErrorCode::M_NOT_JSON: return "M_NOT_JSON"; case ErrorCode::M_NOT_FOUND: return "M_NOT_FOUND"; case ErrorCode::M_LIMIT_EXCEEDED: return "M_LIMIT_EXCEEDED"; case ErrorCode::M_USER_IN_USE: return "M_USER_IN_USE"; case ErrorCode::M_INVALID_USERNAME: return "M_INVALID_USERNAME"; case ErrorCode::M_ROOM_IN_USE: return "M_ROOM_IN_USE"; case ErrorCode::M_INVALID_ROOM_STATE: return "M_INVALID_ROOM_STATE"; case ErrorCode::M_BAD_PAGINATION: return "M_BAD_PAGINATION"; case ErrorCode::M_THREEPID_IN_USE: return "M_THREEPID_IN_USE"; case ErrorCode::M_THREEPID_NOT_FOUND: return "M_THREEPID_NOT_FOUND"; case ErrorCode::M_SERVER_NOT_TRUSTED: return "M_SERVER_NOT_TRUSTED"; case ErrorCode::M_MISSING_TOKEN: return "M_MISSING_TOKEN"; } return ""; } ErrorCode from_string(const std::string &code) { if (code == "M_UNRECOGNIZED") return ErrorCode::M_UNRECOGNIZED; else if (code == "M_FORBIDDEN") return ErrorCode::M_FORBIDDEN; else if (code == "M_UNKNOWN_TOKEN") return ErrorCode::M_UNKNOWN_TOKEN; else if (code == "M_BAD_JSON") return ErrorCode::M_BAD_JSON; else if (code == "M_NOT_JSON") return ErrorCode::M_NOT_JSON; else if (code == "M_LIMIT_EXCEEDED") return ErrorCode::M_LIMIT_EXCEEDED; else if (code == "M_USER_IN_USE") return ErrorCode::M_USER_IN_USE; else if (code == "M_INVALID_USERNAME") return ErrorCode::M_INVALID_USERNAME; else if (code == "M_ROOM_IN_USE") return ErrorCode::M_ROOM_IN_USE; else if (code == "M_INVALID_ROOM_STATE") return ErrorCode::M_INVALID_ROOM_STATE; else if (code == "M_BAD_PAGINATION") return ErrorCode::M_BAD_PAGINATION; else if (code == "M_THREEPID_IN_USE") return ErrorCode::M_THREEPID_IN_USE; else if (code == "M_THREEPID_NOT_FOUND") return ErrorCode::M_THREEPID_NOT_FOUND; else if (code == "M_SERVER_NOT_TRUSTED") return ErrorCode::M_SERVER_NOT_TRUSTED; else if (code == "M_MISSING_TOKEN") return ErrorCode::M_MISSING_TOKEN; else return ErrorCode::M_UNRECOGNIZED; } void from_json(const json &obj, Error &error) { error.errcode = from_string(obj.at("errcode").get()); error.error = obj.at("error").get(); } } } mtxclient-0.2.1/lib/structs/events.cpp000066400000000000000000000113541347137727200200270ustar00rootroot00000000000000#include "mtx/events.hpp" using json = nlohmann::json; namespace mtx { namespace events { EventType getEventType(const std::string &type) { if (type == "m.room_key_request") return EventType::RoomKeyRequest; else if (type == "m.room.aliases") return EventType::RoomAliases; else if (type == "m.room.avatar") return EventType::RoomAvatar; else if (type == "m.room.canonical_alias") return EventType::RoomCanonicalAlias; else if (type == "m.room.create") return EventType::RoomCreate; else if (type == "m.room.encrypted") return EventType::RoomEncrypted; else if (type == "m.room.encryption") return EventType::RoomEncryption; else if (type == "m.room.guest_access") return EventType::RoomGuestAccess; else if (type == "m.room.history_visibility") return EventType::RoomHistoryVisibility; else if (type == "m.room.join_rules") return EventType::RoomJoinRules; else if (type == "m.room.member") return EventType::RoomMember; else if (type == "m.room.message") return EventType::RoomMessage; else if (type == "m.room.name") return EventType::RoomName; else if (type == "m.room.power_levels") return EventType::RoomPowerLevels; else if (type == "m.room.topic") return EventType::RoomTopic; else if (type == "m.room.redaction") return EventType::RoomRedaction; else if (type == "m.room.pinned_events") return EventType::RoomPinnedEvents; else if (type == "m.sticker") return EventType::Sticker; else if (type == "m.tag") return EventType::Tag; return EventType::Unsupported; } std::string to_string(EventType type) { switch (type) { case EventType::RoomKeyRequest: return "m.room_key_request"; case EventType::RoomAliases: return "m.room.aliases"; case EventType::RoomAvatar: return "m.room.avatar"; case EventType::RoomCanonicalAlias: return "m.room.canonical_alias"; case EventType::RoomCreate: return "m.room.create"; case EventType::RoomEncrypted: return "m.room.encrypted"; case EventType::RoomEncryption: return "m.room.encryption"; case EventType::RoomGuestAccess: return "m.room.guest_access"; case EventType::RoomHistoryVisibility: return "m.room.history_visibility"; case EventType::RoomJoinRules: return "m.room.join_rules"; case EventType::RoomMember: return "m.room.member"; case EventType::RoomMessage: return "m.room.message"; case EventType::RoomName: return "m.room.name"; case EventType::RoomPowerLevels: return "m.room.power_levels"; case EventType::RoomTopic: return "m.room.topic"; case EventType::RoomRedaction: return "m.room.redaction"; case EventType::RoomPinnedEvents: return "m.room.pinned_events"; case EventType::Sticker: return "m.sticker"; case EventType::Tag: return "m.tag"; case EventType::Unsupported: return ""; } return ""; } EventType getEventType(const json &obj) { if (obj.find("type") != obj.end()) return getEventType(obj.at("type").get()); return EventType::Unsupported; } MessageType getMessageType(const std::string &type) { if (type == "m.audio") return MessageType::Audio; else if (type == "m.emote") return MessageType::Emote; else if (type == "m.file") return MessageType::File; else if (type == "m.image") return MessageType::Image; else if (type == "m.location") return MessageType::Location; else if (type == "m.notice") return MessageType::Notice; else if (type == "m.text") return MessageType::Text; else if (type == "m.video") return MessageType::Video; return MessageType::Unknown; } MessageType getMessageType(const json &obj) { if (obj.is_null()) return MessageType::Unknown; if (obj.find("msgtype") == obj.end()) return MessageType::Unknown; return getMessageType(obj.at("msgtype").get()); } } } mtxclient-0.2.1/lib/structs/events/000077500000000000000000000000001347137727200173175ustar00rootroot00000000000000mtxclient-0.2.1/lib/structs/events/aliases.cpp000066400000000000000000000006661347137727200214540ustar00rootroot00000000000000#include using json = nlohmann::json; #include "mtx/events/aliases.hpp" namespace mtx { namespace events { namespace state { void from_json(const json &obj, Aliases &content) { content.aliases = obj.at("aliases").get>(); } void to_json(json &obj, const Aliases &content) { obj["aliases"] = content.aliases; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/avatar.cpp000066400000000000000000000012331347137727200213000ustar00rootroot00000000000000#include #include #include "mtx/events/avatar.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, Avatar &avatar) { if (obj.find("info") != obj.end()) avatar.image_info = obj.at("info").get(); if (obj.find("url") != obj.end() && !obj.at("url").is_null()) avatar.url = obj.at("url").get(); } void to_json(json &obj, const Avatar &avatar) { obj["info"] = avatar.image_info; obj["url"] = avatar.url; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/canonical_alias.cpp000066400000000000000000000010321347137727200231170ustar00rootroot00000000000000#include #include #include "mtx/events/canonical_alias.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, CanonicalAlias &canonical_alias) { if (!obj.at("alias").is_null()) canonical_alias.alias = obj.at("alias").get(); } void to_json(json &obj, const CanonicalAlias &canonical_alias) { obj["alias"] = canonical_alias.alias; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/common.cpp000066400000000000000000000106171347137727200213200ustar00rootroot00000000000000#include #include "mtx/events/common.hpp" using json = nlohmann::json; namespace mtx { namespace common { void from_json(const json &obj, ThumbnailInfo &info) { if (obj.find("h") != obj.end()) info.h = obj.at("h").get(); if (obj.find("w") != obj.end()) info.w = obj.at("w").get(); if (obj.find("size") != obj.end()) info.size = obj.at("size").get(); if (obj.find("mimetype") != obj.end()) info.mimetype = obj.at("mimetype").get(); } void to_json(json &obj, const ThumbnailInfo &info) { obj["h"] = info.h; obj["w"] = info.w; obj["size"] = info.size; obj["mimetype"] = info.mimetype; } void from_json(const json &obj, ImageInfo &info) { if (obj.find("h") != obj.end()) info.h = obj.at("h").get(); if (obj.find("w") != obj.end()) info.w = obj.at("w").get(); if (obj.find("size") != obj.end()) info.size = obj.at("size").get(); if (obj.find("mimetype") != obj.end()) info.mimetype = obj.at("mimetype").get(); if (obj.find("thumbnail_url") != obj.end()) info.thumbnail_url = obj.at("thumbnail_url").get(); if (obj.find("thumbnail_info") != obj.end()) info.thumbnail_info = obj.at("thumbnail_info").get(); } void to_json(json &obj, const ImageInfo &info) { obj["h"] = info.h; obj["w"] = info.w; obj["size"] = info.size; obj["mimetype"] = info.mimetype; obj["thumbnail_url"] = info.thumbnail_url; obj["thumbnail_info"] = info.thumbnail_info; } void from_json(const json &obj, FileInfo &info) { if (obj.find("size") != obj.end()) info.size = obj.at("size").get(); if (obj.find("mimetype") != obj.end()) info.mimetype = obj.at("mimetype").get(); if (obj.find("thumbnail_url") != obj.end()) info.thumbnail_url = obj.at("thumbnail_url").get(); if (obj.find("thumbnail_info") != obj.end()) info.thumbnail_info = obj.at("thumbnail_info").get(); } void to_json(json &obj, const FileInfo &info) { obj["size"] = info.size; obj["mimetype"] = info.mimetype; obj["thumbnail_url"] = info.thumbnail_url; obj["thumbnail_info"] = info.thumbnail_info; } void from_json(const json &obj, AudioInfo &info) { if (obj.find("duration") != obj.end()) info.duration = obj.at("duration").get(); if (obj.find("size") != obj.end()) info.size = obj.at("size").get(); if (obj.find("mimetype") != obj.end()) info.mimetype = obj.at("mimetype").get(); } void to_json(json &obj, const AudioInfo &info) { obj["size"] = info.size; obj["duration"] = info.duration; obj["mimetype"] = info.mimetype; } void from_json(const json &obj, VideoInfo &info) { if (obj.find("w") != obj.end()) info.w = obj.at("w").get(); if (obj.find("h") != obj.end()) info.h = obj.at("h").get(); if (obj.find("size") != obj.end()) info.size = obj.at("size").get(); if (obj.find("duration") != obj.end()) info.duration = obj.at("duration").get(); if (obj.find("mimetype") != obj.end()) info.mimetype = obj.at("mimetype").get(); if (obj.find("thumbnail_url") != obj.end()) info.thumbnail_url = obj.at("thumbnail_url").get(); if (obj.find("thumbnail_info") != obj.end()) info.thumbnail_info = obj.at("thumbnail_info").get(); } void to_json(json &obj, const VideoInfo &info) { obj["size"] = info.size; obj["h"] = info.h; obj["w"] = info.w; obj["duration"] = info.duration; obj["thumbnail_url"] = info.thumbnail_url; obj["thumbnail_info"] = info.thumbnail_info; obj["mimetype"] = info.mimetype; } } // namespace common } // namespace mtx mtxclient-0.2.1/lib/structs/events/create.cpp000066400000000000000000000010521347137727200212640ustar00rootroot00000000000000#include #include "mtx/events/create.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, Create &create) { create.creator = obj.at("creator"); if (obj.find("m.federate") != obj.end()) create.federate = obj.at("m.federate").get(); } void to_json(json &obj, const Create &create) { obj["creator"] = create.creator; obj["m.federate"] = create.federate; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/encrypted.cpp000066400000000000000000000102451347137727200220220ustar00rootroot00000000000000#include #include "mtx/events/encrypted.hpp" static constexpr auto OLM_ALGO = "m.olm.v1.curve25519-aes-sha2"; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, OlmCipherContent &msg) { msg.body = obj.at("body").get(); msg.type = obj.at("type").get(); } void to_json(json &obj, const OlmCipherContent &msg) { obj["body"] = msg.body; obj["type"] = msg.type; } void from_json(const json &obj, OlmEncrypted &msg) { msg.algorithm = OLM_ALGO; msg.sender_key = obj.at("sender_key").get(); msg.ciphertext = obj.at("ciphertext").get>(); } void to_json(json &obj, const OlmEncrypted &msg) { obj["algorithm"] = msg.algorithm; obj["sender_key"] = msg.sender_key; obj["ciphertext"] = msg.ciphertext; } void from_json(const json &obj, Encrypted &content) { content.algorithm = obj.at("algorithm").get(); content.ciphertext = obj.at("ciphertext").get(); content.device_id = obj.at("device_id").get(); content.sender_key = obj.at("sender_key").get(); content.session_id = obj.at("session_id").get(); } void to_json(json &obj, const Encrypted &content) { obj["algorithm"] = content.algorithm; obj["ciphertext"] = content.ciphertext; obj["device_id"] = content.device_id; obj["sender_key"] = content.sender_key; obj["session_id"] = content.session_id; } void from_json(const json &obj, RoomKey &event) { event.algorithm = obj.at("algorithm").get(); event.room_id = obj.at("room_id").get(); event.session_id = obj.at("session_id").get(); event.session_key = obj.at("session_key").get(); } void to_json(json &obj, const RoomKey &event) { obj["algorithm"] = event.algorithm; obj["room_id"] = event.room_id; obj["session_id"] = event.session_id; obj["session_key"] = event.session_key; } void from_json(const json &obj, KeyRequest &event) { event.sender = obj.at("sender"); event.type = mtx::events::getEventType(obj.at("type").get()); event.request_id = obj.at("content").at("request_id"); event.requesting_device_id = obj.at("content").at("requesting_device_id"); auto action = obj.at("content").at("action").get(); if (action == "request") { event.action = RequestAction::Request; event.room_id = obj.at("content").at("body").at("room_id"); event.sender_key = obj.at("content").at("body").at("sender_key"); event.session_id = obj.at("content").at("body").at("session_id"); event.algorithm = obj.at("content").at("body").at("algorithm"); } else if (action == "request_cancellation") { event.action = RequestAction::Cancellation; } } void to_json(json &obj, const KeyRequest &event) { obj = json::object(); obj["sender"] = event.sender; obj["type"] = to_string(event.type); obj["content"] = json::object(); obj["content"]["request_id"] = event.request_id; obj["content"]["requesting_device_id"] = event.requesting_device_id; switch (event.action) { case RequestAction::Request: { obj["content"]["body"] = json::object(); obj["content"]["body"]["room_id"] = event.room_id; obj["content"]["body"]["sender_key"] = event.sender_key; obj["content"]["body"]["session_id"] = event.session_id; obj["content"]["body"]["algorithm"] = "m.megolm.v1.aes-sha2"; obj["content"]["action"] = "request"; break; } case RequestAction::Cancellation: { obj["content"]["action"] = "request_cancellation"; break; } default: break; } } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/encryption.cpp000066400000000000000000000006351347137727200222210ustar00rootroot00000000000000#include #include "mtx/events/encryption.hpp" namespace mtx { namespace events { namespace state { void from_json(const json &obj, Encryption &encryption) { encryption.algorithm = obj.at("algorithm").get(); } void to_json(json &obj, const Encryption &encryption) { obj["algorithm"] = encryption.algorithm; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/guest_access.cpp000066400000000000000000000015621347137727200224770ustar00rootroot00000000000000#include #include #include "mtx/events/guest_access.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { std::string accessStateToString(AccessState state) { if (state == AccessState::CanJoin) return "can_join"; return "forbidden"; } AccessState stringToAccessState(const std::string &state) { if (state == "can_join") return AccessState::CanJoin; return AccessState::Forbidden; } void from_json(const json &obj, GuestAccess &guest_access) { guest_access.guest_access = stringToAccessState(obj.at("guest_access").get()); } void to_json(json &obj, const GuestAccess &guest_access) { obj["guest_access"] = accessStateToString(guest_access.guest_access); } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/history_visibility.cpp000066400000000000000000000024211347137727200237720ustar00rootroot00000000000000#include #include #include "mtx/events/history_visibility.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { std::string visibilityToString(const Visibility &rule) { switch (rule) { case Visibility::WorldReadable: return "world_readable"; case Visibility::Invited: return "invited"; case Visibility::Shared: return "shared"; case Visibility::Joined: return "joined"; } return ""; } Visibility stringToVisibility(const std::string &rule) { if (rule == "world_readable") return Visibility::WorldReadable; else if (rule == "invited") return Visibility::Invited; else if (rule == "shared") return Visibility::Shared; return Visibility::Joined; } void from_json(const json &obj, HistoryVisibility &event) { event.history_visibility = stringToVisibility(obj.at("history_visibility").get()); } void to_json(json &obj, const HistoryVisibility &event) { obj["history_visibility"] = visibilityToString(event.history_visibility); } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/join_rules.cpp000066400000000000000000000022401347137727200221720ustar00rootroot00000000000000#include #include #include "mtx/events/join_rules.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { std::string joinRuleToString(const JoinRule &rule) { switch (rule) { case JoinRule::Public: return "public"; case JoinRule::Invite: return "invite"; case JoinRule::Knock: return "knock"; case JoinRule::Private: return "private"; } return ""; } JoinRule stringToJoinRule(const std::string &rule) { if (rule == "public") return JoinRule::Public; else if (rule == "invite") return JoinRule::Invite; else if (rule == "Knock") return JoinRule::Knock; return JoinRule::Private; } void from_json(const json &obj, JoinRules &join_rules) { join_rules.join_rule = stringToJoinRule(obj.at("join_rule").get()); } void to_json(json &obj, const JoinRules &join_rules) { obj["join_rule"] = joinRuleToString(join_rules.join_rule); } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/member.cpp000066400000000000000000000036101347137727200212720ustar00rootroot00000000000000#include #include #include "mtx/events/member.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { std::string membershipToString(const Membership &membership) { switch (membership) { case Membership::Join: return "join"; case Membership::Invite: return "invite"; case Membership::Ban: return "ban"; case Membership::Leave: return "leave"; case Membership::Knock: return "knock"; } return ""; } Membership stringToMembership(const std::string &membership) { if (membership == "join") return Membership::Join; else if (membership == "invite") return Membership::Invite; else if (membership == "ban") return Membership::Ban; else if (membership == "leave") return Membership::Leave; return Membership::Knock; } void from_json(const json &obj, Member &member) { member.membership = stringToMembership(obj.at("membership").get()); if (obj.count("displayname") != 0 && !obj.at("displayname").is_null()) member.display_name = obj.at("displayname").get(); if (obj.count("avatar_url") != 0 && !obj.at("avatar_url").is_null()) member.avatar_url = obj.at("avatar_url").get(); if (obj.find("is_direct") != obj.end()) member.is_direct = obj.at("is_direct").get(); } void to_json(json &obj, const Member &member) { obj["membership"] = membershipToString(member.membership); obj["avatar_url"] = member.avatar_url; obj["displayname"] = member.display_name; obj["is_direct"] = member.is_direct; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/000077500000000000000000000000001347137727200211265ustar00rootroot00000000000000mtxclient-0.2.1/lib/structs/events/messages/audio.cpp000066400000000000000000000015451347137727200227400ustar00rootroot00000000000000#include #include #include "mtx/events/messages/audio.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Audio &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.find("url") != obj.end()) content.url = obj.at("url").get(); if (obj.find("info") != obj.end()) content.info = obj.at("info").get(); } void to_json(json &obj, const Audio &content) { obj["msgtype"] = "m.audio"; obj["body"] = content.body; obj["url"] = content.url; obj["info"] = content.info; } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/emote.cpp000066400000000000000000000017531347137727200227510ustar00rootroot00000000000000#include #include #include "mtx/events/common.hpp" #include "mtx/events/messages/emote.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Emote &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.count("format") != 0) content.format = obj.at("format").get(); if (obj.count("formatted_body") != 0) content.formatted_body = obj.at("formatted_body").get(); } void to_json(json &obj, const Emote &content) { obj["msgtype"] = "m.emote"; obj["body"] = content.body; if (!content.formatted_body.empty()) { obj["format"] = mtx::common::FORMAT_MSG_TYPE; obj["formatted_body"] = content.formatted_body; } } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/file.cpp000066400000000000000000000020121347137727200225440ustar00rootroot00000000000000#include #include #include "mtx/events/messages/file.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, File &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.find("url") != obj.end()) content.url = obj.at("url").get(); if (obj.find("filename") != obj.end()) content.filename = obj.at("filename").get(); if (obj.find("info") != obj.end()) content.info = obj.at("info").get(); } void to_json(json &obj, const File &content) { obj["msgtype"] = "m.file"; obj["body"] = content.body; obj["filename"] = content.filename; obj["url"] = content.url; obj["info"] = content.info; } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/image.cpp000066400000000000000000000025371347137727200227230ustar00rootroot00000000000000#include #include #include "mtx/events/messages/image.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Image &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.find("url") != obj.end()) content.url = obj.at("url").get(); if (obj.find("info") != obj.end()) content.info = obj.at("info").get(); } void to_json(json &obj, const Image &content) { obj["msgtype"] = "m.image"; obj["body"] = content.body; obj["url"] = content.url; obj["info"] = content.info; } void from_json(const json &obj, StickerImage &content) { content.body = obj.at("body").get(); if (obj.find("url") != obj.end()) content.url = obj.at("url").get(); if (obj.find("info") != obj.end()) content.info = obj.at("info").get(); } void to_json(json &obj, const StickerImage &content) { obj["body"] = content.body; obj["url"] = content.url; obj["info"] = content.info; } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/notice.cpp000066400000000000000000000017571347137727200231250ustar00rootroot00000000000000#include #include #include "mtx/events/common.hpp" #include "mtx/events/messages/notice.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Notice &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.count("format") != 0) content.format = obj.at("format").get(); if (obj.count("formatted_body") != 0) content.formatted_body = obj.at("formatted_body").get(); } void to_json(json &obj, const Notice &content) { obj["msgtype"] = "m.notice"; obj["body"] = content.body; if (!content.formatted_body.empty()) { obj["format"] = mtx::common::FORMAT_MSG_TYPE; obj["formatted_body"] = content.formatted_body; } } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/text.cpp000066400000000000000000000017471347137727200226270ustar00rootroot00000000000000#include #include #include "mtx/events/common.hpp" #include "mtx/events/messages/text.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Text &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.count("format") != 0) content.format = obj.at("format").get(); if (obj.count("formatted_body") != 0) content.formatted_body = obj.at("formatted_body").get(); } void to_json(json &obj, const Text &content) { obj["msgtype"] = "m.text"; obj["body"] = content.body; if (!content.formatted_body.empty()) { obj["format"] = mtx::common::FORMAT_MSG_TYPE; obj["formatted_body"] = content.formatted_body; } } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/messages/video.cpp000066400000000000000000000016061347137727200227430ustar00rootroot00000000000000#include #include #include "mtx/events/common.hpp" #include "mtx/events/messages/video.hpp" using json = nlohmann::json; namespace common = mtx::common; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Video &content) { content.body = obj.at("body").get(); content.msgtype = obj.at("msgtype").get(); if (obj.find("url") != obj.end()) content.url = obj.at("url").get(); if (obj.find("info") != obj.end()) content.info = obj.at("info").get(); } void to_json(json &obj, const Video &content) { obj["msgtype"] = "m.video"; obj["body"] = content.body; obj["url"] = content.url; obj["info"] = content.info; } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/name.cpp000066400000000000000000000007151347137727200207460ustar00rootroot00000000000000#include #include #include "mtx/events/name.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, Name &event) { if (!obj.at("name").is_null()) event.name = obj.at("name").get(); } void to_json(json &obj, const Name &event) { obj["name"] = event.name; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/pinned_events.cpp000066400000000000000000000007141347137727200226660ustar00rootroot00000000000000#include #include #include "mtx/events/pinned_events.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, PinnedEvents &event) { event.pinned = obj.at("pinned").get>(); } void to_json(json &obj, const PinnedEvents &event) { obj["pinned"] = event.pinned; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/power_levels.cpp000066400000000000000000000037711347137727200225410ustar00rootroot00000000000000#include #include #include "mtx/events/power_levels.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, PowerLevels &power_levels) { // SPEC_BUG: Not always present. if (obj.count("ban") != 0) power_levels.ban = obj.at("ban").get(); if (obj.count("invite") != 0) power_levels.invite = obj.at("invite").get(); if (obj.count("kick") != 0) power_levels.kick = obj.at("kick").get(); if (obj.count("redact") != 0) power_levels.redact = obj.at("redact").get(); if (obj.count("events") != 0) power_levels.events = obj.at("events").get>(); if (obj.count("users") != 0) power_levels.users = obj.at("users").get>(); if (obj.count("events_default") != 0) power_levels.events_default = obj.at("events_default").get(); if (obj.count("users_default") != 0) power_levels.users_default = obj.at("users_default").get(); if (obj.count("state_default") != 0) power_levels.state_default = obj.at("state_default").get(); } void to_json(json &obj, const PowerLevels &power_levels) { obj["ban"] = power_levels.ban; obj["kick"] = power_levels.kick; obj["invite"] = power_levels.invite; obj["redact"] = power_levels.redact; if (power_levels.events.size() != 0) obj["events"] = power_levels.events; if (power_levels.users.size() != 0) obj["users"] = power_levels.users; obj["events_default"] = power_levels.events_default; obj["users_default"] = power_levels.users_default; obj["state_default"] = power_levels.state_default; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/redaction.cpp000066400000000000000000000007761347137727200220050ustar00rootroot00000000000000#include #include #include "mtx/events/redaction.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace msg { void from_json(const json &obj, Redaction &event) { if (obj.count("reason") != 0 && !obj.at("reason").is_null()) event.reason = obj.at("reason").get(); } void to_json(json &obj, const Redaction &event) { obj["reason"] = event.reason; } } // namespace msg } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/tag.cpp000066400000000000000000000006351347137727200206020ustar00rootroot00000000000000#include #include "mtx/events/tag.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace account_data { void from_json(const json &obj, Tag &content) { content.tags = obj.at("tags").get>(); } void to_json(json &obj, const Tag &content) { obj["tags"] = content.tags; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/events/topic.cpp000066400000000000000000000006701347137727200211440ustar00rootroot00000000000000#include #include "mtx/events/topic.hpp" using json = nlohmann::json; namespace mtx { namespace events { namespace state { void from_json(const json &obj, Topic &event) { if (!obj.at("topic").is_null()) event.topic = obj.at("topic").get(); } void to_json(json &obj, const Topic &event) { obj["topic"] = event.topic; } } // namespace state } // namespace events } // namespace mtx mtxclient-0.2.1/lib/structs/requests.cpp000066400000000000000000000056671347137727200204100ustar00rootroot00000000000000#include "mtx/requests.hpp" using json = nlohmann::json; namespace mtx { namespace requests { std::string visibilityToString(Visibility visibility) { if (visibility == Visibility::Private) { return "private"; } return "public"; } std::string presetToString(Preset preset) { switch (preset) { case Preset::PrivateChat: return "private_chat"; break; case Preset::PublicChat: return "public_chat"; break; case Preset::TrustedPrivateChat: return "trusted_private_chat"; break; } return "private_chat"; } void to_json(json &obj, const CreateRoom &request) { if (!request.name.empty()) obj["name"] = request.name; if (!request.topic.empty()) obj["topic"] = request.topic; if (!request.room_alias_name.empty()) obj["room_alias_name"] = request.room_alias_name; if (request.invite.size() != 0) obj["invite"] = request.invite; obj["is_direct"] = request.is_direct; obj["preset"] = presetToString(request.preset); obj["visibility"] = visibilityToString(request.visibility); } void to_json(json &obj, const Login &request) { if (!request.medium.empty()) obj["medium"] = request.medium; if (!request.address.empty()) obj["address"] = request.address; if (!request.token.empty()) obj["token"] = request.token; if (!request.password.empty()) obj["password"] = request.password; if (!request.device_id.empty()) obj["device_id"] = request.device_id; if (!request.initial_device_display_name.empty()) obj["initial_device_display_name"] = request.initial_device_display_name; obj["user"] = request.user; obj["type"] = request.type; } void to_json(json &obj, const AvatarUrl &request) { obj["avatar_url"] = request.avatar_url; } void to_json(json &obj, const DisplayName &request) { obj["displayname"] = request.displayname; } void to_json(json &obj, const RoomInvite &request) { obj["user_id"] = request.user_id; } void to_json(json &obj, const TypingNotification &request) { obj["typing"] = request.typing; obj["timeout"] = request.timeout; } void to_json(json &obj, const UploadKeys &request) { obj = json::object(); if (!request.device_keys.user_id.empty()) obj["device_keys"] = request.device_keys; if (!request.one_time_keys.empty()) obj["one_time_keys"] = request.one_time_keys; } void to_json(json &obj, const QueryKeys &request) { obj["timeout"] = request.timeout; obj["device_keys"] = request.device_keys; obj["token"] = request.token; } } // namespace requests } // namespace mtx mtxclient-0.2.1/lib/structs/responses/000077500000000000000000000000001347137727200200345ustar00rootroot00000000000000mtxclient-0.2.1/lib/structs/responses/common.cpp000066400000000000000000000575541347137727200220500ustar00rootroot00000000000000#include "mtx/responses/common.hpp" #include "mtx/events.hpp" #include "mtx/events/aliases.hpp" #include "mtx/events/avatar.hpp" #include "mtx/events/canonical_alias.hpp" #include "mtx/events/create.hpp" #include "mtx/events/guest_access.hpp" #include "mtx/events/history_visibility.hpp" #include "mtx/events/join_rules.hpp" #include "mtx/events/member.hpp" #include "mtx/events/name.hpp" #include "mtx/events/pinned_events.hpp" #include "mtx/events/power_levels.hpp" #include "mtx/events/redaction.hpp" #include "mtx/events/tag.hpp" #include "mtx/events/topic.hpp" #include using json = nlohmann::json; using namespace mtx::events::account_data; using namespace mtx::events::state; namespace mtx { namespace responses { void from_json(const nlohmann::json &obj, GroupId &response) { response.group_id = obj.at("group_id"); } void from_json(const nlohmann::json &obj, EventId &response) { response.event_id = obj.at("event_id"); } void from_json(const nlohmann::json &obj, FilterId &response) { response.filter_id = obj.at("filter_id"); } namespace utils { inline void log_error(json::exception &err, const json &event) { std::cout << err.what() << std::endl; std::cout << event.dump(2) << std::endl; } inline void log_error(std::string err, const json &event) { std::cout << err << std::endl; std::cout << event.dump(2) << std::endl; } void parse_room_account_data_events( const json &events, std::vector &container) { container.clear(); container.reserve(events.size()); for (const auto &e : events) { const auto type = mtx::events::getEventType(e); switch (type) { case events::EventType::Tag: { try { container.emplace_back(events::Event(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomKeyRequest: case events::EventType::RoomAliases: case events::EventType::RoomAvatar: case events::EventType::RoomCanonicalAlias: case events::EventType::RoomCreate: case events::EventType::RoomEncrypted: case events::EventType::RoomEncryption: case events::EventType::RoomGuestAccess: case events::EventType::RoomHistoryVisibility: case events::EventType::RoomJoinRules: case events::EventType::RoomMember: case events::EventType::RoomMessage: case events::EventType::RoomName: case events::EventType::RoomPowerLevels: case events::EventType::RoomTopic: case events::EventType::RoomRedaction: case events::EventType::RoomPinnedEvents: case events::EventType::Sticker: case events::EventType::Unsupported: continue; } } } void parse_timeline_events(const json &events, std::vector &container) { container.clear(); container.reserve(events.size()); for (const auto &e : events) { const auto type = mtx::events::getEventType(e); switch (type) { case events::EventType::RoomAliases: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomAvatar: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCanonicalAlias: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCreate: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomEncrypted: { try { container.emplace_back( events::EncryptedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomEncryption: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomGuestAccess: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomHistoryVisibility: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomJoinRules: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomMember: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomName: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomPowerLevels: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomRedaction: { try { container.emplace_back( events::RedactionEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomTopic: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomMessage: { using MsgType = mtx::events::MessageType; const auto msg_type = mtx::events::getMessageType(e.at("content")); if (msg_type == events::MessageType::Unknown) { try { auto unsigned_data = e.at("unsigned").at("redacted_by").get(); if (unsigned_data.empty()) continue; container.emplace_back( events::RoomEvent(e)); continue; } catch (json::exception &err) { log_error(err, e); } log_error("Invalid event type", e); continue; } switch (msg_type) { case MsgType::Audio: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Emote: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::File: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Image: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Location: { /* events::RoomEvent location = e; */ /* container.emplace_back(location); */ break; } case MsgType::Notice: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Text: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Video: { try { container.emplace_back( events::RoomEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case MsgType::Unknown: continue; } break; } case events::EventType::Sticker: { try { container.emplace_back(events::Sticker(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomPinnedEvents: case events::EventType::RoomKeyRequest: // Not part of the timeline case events::EventType::Tag: // Not part of the timeline or state case events::EventType::Unsupported: continue; } } } void parse_state_events(const json &events, std::vector &container) { container.clear(); container.reserve(events.size()); for (const auto &e : events) { const auto type = mtx::events::getEventType(e); switch (type) { case events::EventType::RoomAliases: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomAvatar: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCanonicalAlias: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCreate: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomEncryption: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomGuestAccess: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomHistoryVisibility: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomJoinRules: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomMember: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomName: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomPowerLevels: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomTopic: { try { container.emplace_back(events::StateEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::Sticker: case events::EventType::RoomEncrypted: /* Does this need to be here? */ case events::EventType::RoomKeyRequest: // Not part of the timeline or state case events::EventType::RoomMessage: case events::EventType::RoomPinnedEvents: case events::EventType::RoomRedaction: case events::EventType::Tag: // Not part of the timeline or state case events::EventType::Unsupported: continue; } } } void parse_stripped_events(const json &events, std::vector &container) { container.clear(); container.reserve(events.size()); for (const auto &e : events) { const auto type = mtx::events::getEventType(e); switch (type) { case events::EventType::RoomAliases: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomAvatar: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCanonicalAlias: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomCreate: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomGuestAccess: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomHistoryVisibility: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomJoinRules: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomMember: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomName: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomPowerLevels: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::RoomTopic: { try { container.emplace_back(events::StrippedEvent(e)); } catch (json::exception &err) { log_error(err, e); } break; } case events::EventType::Sticker: case events::EventType::RoomEncrypted: case events::EventType::RoomEncryption: case events::EventType::RoomMessage: case events::EventType::RoomRedaction: case events::EventType::RoomKeyRequest: // Not part of the timeline or state case events::EventType::RoomPinnedEvents: case events::EventType::Tag: // Not part of the timeline or state case events::EventType::Unsupported: continue; } } } } } } mtxclient-0.2.1/lib/structs/responses/create_room.cpp000066400000000000000000000005031347137727200230350ustar00rootroot00000000000000#include #include "mtx/identifiers.hpp" #include "mtx/responses/create_room.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, CreateRoom &response) { using namespace mtx::identifiers; response.room_id = obj.at("room_id").get(); } } } mtxclient-0.2.1/lib/structs/responses/crypto.cpp000066400000000000000000000010611347137727200220560ustar00rootroot00000000000000#include "mtx/responses/crypto.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const nlohmann::json &obj, UploadKeys &response) { response.one_time_key_counts = obj.at("one_time_key_counts").get>(); } void from_json(const nlohmann::json &obj, QueryKeys &response) { response.failures = obj.at("failures").get>(); response.device_keys = obj.at("device_keys").get>(); } } } mtxclient-0.2.1/lib/structs/responses/empty.cpp000066400000000000000000000003661347137727200217030ustar00rootroot00000000000000#include "mtx/responses/empty.hpp" using json = nlohmann::json; namespace mtx { namespace responses { // Provides a deserialization function to use when empty responses are returned from the server void from_json(const json &, Empty &) {} } } mtxclient-0.2.1/lib/structs/responses/login.cpp000066400000000000000000000010231347137727200216440ustar00rootroot00000000000000#include "mtx/responses/login.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, Login &response) { using namespace mtx::identifiers; response.user_id = obj.at("user_id").get(); response.access_token = obj.at("access_token").get(); response.home_server = obj.at("home_server").get(); if (obj.count("device_id") != 0) response.device_id = obj.at("device_id").get(); } } } mtxclient-0.2.1/lib/structs/responses/media.cpp000066400000000000000000000003461347137727200216220ustar00rootroot00000000000000#include "mtx/responses/media.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, ContentURI &res) { res.content_uri = obj.at("content_uri").get(); } } } mtxclient-0.2.1/lib/structs/responses/messages.cpp000066400000000000000000000006141347137727200223500ustar00rootroot00000000000000#include "mtx/responses/messages.hpp" #include "mtx/responses/common.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, Messages &messages) { messages.start = obj.at("start").get(); messages.end = obj.at("end").get(); utils::parse_timeline_events(obj.at("chunk"), messages.chunk); } } } mtxclient-0.2.1/lib/structs/responses/notifications.cpp000066400000000000000000000023671347137727200234210ustar00rootroot00000000000000#include "mtx/responses/notifications.hpp" #include "mtx/responses/common.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, Notification &res) { res.actions = obj.at("actions"); res.read = obj.at("read"); res.room_id = obj.at("room_id"); res.ts = obj.at("ts"); if (!obj.at("profile_tag").is_null()) res.profile_tag = obj.at("profile_tag"); // HACK to work around the fact that there isn't // a method to parse a timeline event from a json object. // // TODO: Create method that retrieves a TimelineEvents variant from a json object. // Ideally with an optional type to indicate failure. std::vector tmp; tmp.reserve(1); json arr; arr.push_back(obj.at("event")); utils::parse_timeline_events(arr, tmp); if (!tmp.empty()) res.event = tmp.at(0); } void from_json(const json &obj, Notifications &res) { // res.next_token = obj.at("next_token").get(); res.notifications = obj.at("notifications").get>(); } } // namespace responses } // namespace mtx mtxclient-0.2.1/lib/structs/responses/profile.cpp000066400000000000000000000013061347137727200222000ustar00rootroot00000000000000#include #include "mtx/responses/profile.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, Profile &profile) { if (obj.count("avatar_url") != 0 && !obj.at("avatar_url").is_null()) profile.avatar_url = obj.at("avatar_url").get(); if (obj.count("displayname") != 0 && !obj.at("displayname").is_null()) profile.display_name = obj.at("displayname").get(); } void from_json(const json &obj, AvatarUrl &avatar) { if (obj.count("avatar_url") != 0 && !obj.at("avatar_url").is_null()) avatar.avatar_url = obj.at("avatar_url").get(); } } } mtxclient-0.2.1/lib/structs/responses/register.cpp000066400000000000000000000013551347137727200223700ustar00rootroot00000000000000#include "mtx/responses/register.hpp" using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, Register &response) { using namespace mtx::identifiers; response.user_id = obj.at("user_id").get(); response.access_token = obj.at("access_token").get(); response.device_id = obj.at("device_id").get(); } void from_json(const json &obj, Flow &response) { response.stages = obj.at("stages").get>(); } void from_json(const json &obj, RegistrationFlows &response) { response.flows = obj.at("flows").get>(); response.session = obj.at("session").get(); } } } mtxclient-0.2.1/lib/structs/responses/sync.cpp000066400000000000000000000172341347137727200215230ustar00rootroot00000000000000#include "mtx/responses/sync.hpp" #include "mtx/events/collections.hpp" #include "mtx/responses/common.hpp" #include using json = nlohmann::json; namespace mtx { namespace responses { void from_json(const json &obj, RoomAccountData &account_data) { utils::parse_room_account_data_events(obj.at("events"), account_data.events); } void from_json(const json &obj, State &state) { utils::parse_state_events(obj.at("events"), state.events); } void from_json(const json &obj, Timeline &timeline) { timeline.prev_batch = obj.at("prev_batch"); timeline.limited = obj.at("limited"); utils::parse_timeline_events(obj.at("events"), timeline.events); } void from_json(const json &obj, UnreadNotifications ¬ifications) { if (obj.find("highlight_count") != obj.end()) notifications.highlight_count = obj.at("highlight_count"); if (obj.find("notification_count") != obj.end()) notifications.notification_count = obj.at("notification_count"); } void from_json(const json &obj, Ephemeral &ephemeral) { if (obj.count("events") == 0) return; auto events = obj.at("events"); for (auto event : events) { auto type = event.at("type"); if (type == "m.typing") { auto content = event.at("content"); ephemeral.typing = content.at("user_ids").get>(); } else if (type == "m.receipt") { std::map> receipts; const auto content = event.at("content"); for (auto it = content.begin(); it != content.end(); ++it) { std::map user_times; if (it.value().count("m.read") == 0) continue; auto event_id = it.key(); auto users = it.value().at("m.read"); for (auto uit = users.begin(); uit != users.end(); ++uit) { uint64_t ts = 0; try { ts = uit.value().at("ts"); } catch (json::type_error &) { std::cerr << "mtxclient: Workaround synapse bug #4898, " "ignoring timestamp for m.receipt event\n"; } user_times.emplace(uit.key(), ts); } receipts.emplace(event_id, user_times); } ephemeral.receipts = receipts; } } } void from_json(const json &obj, JoinedRoom &room) { if (obj.count("state") != 0) room.state = obj.at("state").get(); if (obj.count("timeline") != 0) room.timeline = obj.at("timeline").get(); if (obj.find("unread_notifications") != obj.end()) room.unread_notifications = obj.at("unread_notifications").get(); if (obj.find("ephemeral") != obj.end()) room.ephemeral = obj.at("ephemeral").get(); if (obj.count("account_data") != 0) { if (obj.at("account_data").count("events") != 0) room.account_data = obj.at("account_data").get(); } } void from_json(const json &obj, LeftRoom &room) { if (obj.count("state") != 0) room.state = obj.at("state").get(); if (obj.count("timeline") != 0) room.timeline = obj.at("timeline").get(); } std::string InvitedRoom::name() const { using Name = mtx::events::StrippedEvent; using Member = mtx::events::StrippedEvent; std::string room_name; std::string member_name; for (const auto &event : invite_state) { if (boost::get(&event) != nullptr) { room_name = boost::get(event).content.name; } else if (boost::get(&event) != nullptr) { if (member_name.empty()) member_name = boost::get(event).content.display_name; } } if (room_name.empty()) return member_name; return room_name; } std::string InvitedRoom::avatar() const { using Avatar = mtx::events::StrippedEvent; using Member = mtx::events::StrippedEvent; std::string room_avatar; std::string member_avatar; for (const auto &event : invite_state) { if (boost::get(&event) != nullptr) { auto msg = boost::get(event); room_avatar = msg.content.url; } else if (boost::get(&event) != nullptr) { auto msg = boost::get(event); // Pick the first avatar. if (member_avatar.empty()) member_avatar = msg.content.avatar_url; } } if (room_avatar.empty()) return member_avatar; return room_avatar; } void from_json(const json &obj, InvitedRoom &room) { utils::parse_stripped_events(obj.at("invite_state").at("events"), room.invite_state); } void from_json(const json &obj, Rooms &rooms) { if (obj.count("join") != 0) { auto joined = obj.at("join"); for (auto it = joined.begin(); it != joined.end(); ++it) rooms.join.emplace(it.key(), it.value()); } if (obj.count("leave") != 0) { auto leave = obj.at("leave"); for (auto it = leave.begin(); it != leave.end(); ++it) rooms.leave.emplace(it.key(), it.value()); } if (obj.count("invite") != 0) { auto invite = obj.at("invite"); for (auto it = invite.begin(); it != invite.end(); ++it) rooms.invite.emplace(it.key(), it.value()); } } void from_json(const json &obj, DeviceLists &device_lists) { if (obj.count("changed") != 0) device_lists.changed = obj.at("changed").get>(); if (obj.count("left") != 0) device_lists.left = obj.at("left").get>(); } void from_json(const json &obj, Sync &response) { if (obj.count("rooms") != 0) response.rooms = obj.at("rooms").get(); if (obj.count("device_lists") != 0) response.device_lists = obj.at("device_lists").get(); if (obj.count("to_device") != 0) { if (obj.at("to_device").count("events") != 0) response.to_device = obj.at("to_device").at("events").get>(); } if (obj.count("device_one_time_keys_count") != 0) response.device_one_time_keys_count = obj.at("device_one_time_keys_count").get>(); response.next_batch = obj.at("next_batch").get(); } } } mtxclient-0.2.1/lib/structs/responses/version.cpp000066400000000000000000000010521347137727200222230ustar00rootroot00000000000000#include #include #include "mtx/responses/version.hpp" using json = nlohmann::json; static std::regex VERSION_REGEX("r(\\d+)\\.(\\d+)\\.(\\d+)"); namespace mtx { namespace responses { void from_json(const json &obj, Versions &response) { response.versions = obj.at("versions").get>(); for (auto &version : response.versions) { if (!std::regex_match(version, VERSION_REGEX)) throw std::invalid_argument(version + ": invalid version"); } } } } mtxclient-0.2.1/lib/utils.cpp000066400000000000000000000076521347137727200161620ustar00rootroot00000000000000#include "mtxclient/utils.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include mtx::client::utils::MxcUrl mtx::client::utils::parse_mxc_url(const std::string &url) { constexpr auto mxc_uri_protocol = "mxc://"; MxcUrl res; if (url.find(mxc_uri_protocol) != 0) return res; auto str_left = url.substr(6); std::vector parts; boost::split(parts, str_left, [](char c) { return c == '/'; }); if (parts.size() != 2) { res.server = parts.at(0); return res; } res.server = parts.at(0); res.media_id = parts.at(1); return res; } bool mtx::client::utils::is_number(const std::string &s) { return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) { return !std::isdigit(c); }) == s.end(); } std::string mtx::client::utils::random_token(uint8_t len, bool with_symbols) noexcept { std::string symbols = "!@#$%^&*()"; std::string alphanumberic("abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "1234567890"); const auto chars = with_symbols ? alphanumberic + symbols : alphanumberic; boost::random::random_device rng; boost::random::uniform_int_distribution<> index_dist(0, chars.size() - 1); std::string token; token.reserve(len); for (uint8_t i = 0; i < len; ++i) token.push_back(chars[index_dist(rng)]); return token; } std::string mtx::client::utils::query_params(const std::map ¶ms) noexcept { if (params.empty()) return ""; auto pb = params.cbegin(); auto pe = params.cend(); std::string data = pb->first + "=" + url_encode(pb->second); ++pb; if (pb == pe) return data; for (; pb != pe; ++pb) data += "&" + pb->first + "=" + url_encode(pb->second); return data; } std::string mtx::client::utils::decompress(const boost::iostreams::array_source &src, const std::string &type) noexcept { boost::iostreams::filtering_istream is; is.set_auto_close(true); std::stringstream decompressed; if (type == "deflate") is.push(boost::iostreams::zlib_decompressor{}); else if (type == "gzip") is.push(boost::iostreams::gzip_decompressor{}); is.push(src); boost::iostreams::copy(is, decompressed); return decompressed.str(); } std::string mtx::client::utils::url_encode(const std::string &value) noexcept { // https: // stackoverflow.com/questions/154536/encode-decode-urls-in-c std::ostringstream escaped; escaped.fill('0'); escaped << std::hex; for (auto i = value.begin(), n = value.end(); i != n; ++i) { std::string::value_type c = (*i); // Keep alphanumeric and other accepted characters intact if (std::isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { escaped << c; continue; } // Any other characters are percent-encoded escaped << std::uppercase; escaped << '%' << std::setw(2) << int((unsigned char)c); escaped << std::nouppercase; } return escaped.str(); } mtxclient-0.2.1/tests/000077500000000000000000000000001347137727200147005ustar00rootroot00000000000000mtxclient-0.2.1/tests/client_api.cpp000066400000000000000000001300301347137727200175100ustar00rootroot00000000000000#include #include #include #include #include #include "mtx/requests.hpp" #include "mtx/responses.hpp" #include "mtxclient/http/client.hpp" #include "test_helpers.hpp" using namespace mtx::client; using namespace mtx::http; using namespace mtx::identifiers; using namespace mtx::events::collections; using namespace std; TEST(ClientAPI, Register) { auto user = std::make_shared("localhost"); user->registration("alice", "secret", [](const mtx::responses::Register &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_USER_IN_USE"); }); auto username = utils::random_token(10, false); // Synapse converts the username to lowercase. boost::algorithm::to_lower(username); user->flow_register( username, "secret", [user, username](const mtx::responses::RegistrationFlows &res, RequestErr) { if (res.flows.size() == 0) return; EXPECT_EQ(res.flows.size(), 2); EXPECT_EQ(res.flows[0].stages[0], "m.login.dummy"); EXPECT_EQ(res.flows[1].stages[0], "m.login.email.identity"); user->flow_response( username, "secret", res.session, "m.login.dummy", [username](const mtx::responses::Register &res, RequestErr err) { const auto user_id = "@" + username + ":localhost"; check_error(err); EXPECT_EQ(res.user_id.to_string(), user_id); }); }); user->close(); } TEST(ClientAPI, LoginSuccess) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login("alice", "secret", [](const mtx::responses::Login &res, RequestErr err) { check_error(err); validate_login("@alice:localhost", res); }); mtx_client->login("bob", "secret", [](const mtx::responses::Login &res, RequestErr err) { check_error(err); validate_login("@bob:localhost", res); }); mtx_client->login("carl", "secret", [](const mtx::responses::Login &res, RequestErr err) { check_error(err); validate_login("@carl:localhost", res); }); mtx_client->close(); } TEST(ClientAPI, LoginWrongPassword) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login( "alice", "wrong_password", [](const mtx::responses::Login &res, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_FORBIDDEN"); EXPECT_EQ(err->status_code, boost::beast::http::status::forbidden); EXPECT_EQ(res.user_id.to_string(), ""); EXPECT_EQ(res.device_id, ""); EXPECT_EQ(res.home_server, ""); EXPECT_EQ(res.access_token, ""); }); mtx_client->close(); } TEST(ClientAPI, LoginWrongUsername) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login("john", "secret", [](const mtx::responses::Login &res, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_FORBIDDEN"); EXPECT_EQ(err->status_code, boost::beast::http::status::forbidden); EXPECT_EQ(res.user_id.to_string(), ""); EXPECT_EQ(res.device_id, ""); EXPECT_EQ(res.home_server, ""); EXPECT_EQ(res.access_token, ""); }); mtx_client->close(); } TEST(ClientAPI, EmptyUserAvatar) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &res, RequestErr err) { ASSERT_FALSE(err); auto const alice_id = res.user_id; validate_login(alice_id.to_string(), res); alice->set_avatar_url("", [alice, alice_id](RequestErr err) { ASSERT_FALSE(err); auto done = false; alice->get_profile( alice_id.to_string(), [&done](const mtx::responses::Profile &res, RequestErr err) { ASSERT_FALSE(err); ASSERT_TRUE(res.avatar_url.size() == 0); done = true; }); while (!done) sleep(); alice->get_avatar_url( alice_id.to_string(), [](const mtx::responses::AvatarUrl &res, RequestErr err) { ASSERT_FALSE(err); ASSERT_TRUE(res.avatar_url.size() == 0); }); }); }); alice->close(); } TEST(ClientAPI, RealUserAvatar) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &res, RequestErr err) { ASSERT_FALSE(err); auto const alice_id = res.user_id; auto const avatar_url = "mxc://matrix.org/wefh34uihSDRGhw34"; validate_login(alice_id.to_string(), res); alice->set_avatar_url(avatar_url, [alice, alice_id, avatar_url](RequestErr err) { ASSERT_FALSE(err); auto done = false; alice->get_profile( alice_id.to_string(), [avatar_url, &done](const mtx::responses::Profile &res, RequestErr err) { ASSERT_FALSE(err); ASSERT_TRUE(res.avatar_url == avatar_url); done = true; }); while (!done) sleep(); alice->get_avatar_url( alice_id.to_string(), [avatar_url](const mtx::responses::AvatarUrl &res, RequestErr err) { ASSERT_FALSE(err); ASSERT_TRUE(res.avatar_url == avatar_url); }); }); }); alice->close(); } TEST(ClientAPI, ChangeDisplayName) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login( "alice", "secret", [mtx_client](const mtx::responses::Login &, RequestErr err) { check_error(err); // Change the display name to Arthur Dent and verify its success through the lack // of an error mtx_client->set_displayname("Arthur Dent", [](RequestErr err) { check_error(err); }); }); mtx_client->close(); } TEST(ClientAPI, EmptyDisplayName) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login( "alice", "secret", [mtx_client](const mtx::responses::Login &, RequestErr err) { check_error(err); // Change the display name to an empty string and verify its success through the // lack of an error mtx_client->set_displayname("", [](RequestErr err) { check_error(err); }); }); mtx_client->close(); } TEST(ClientAPI, CreateRoom) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login( "alice", "secret", [mtx_client](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (mtx_client->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; mtx_client->create_room(req, [](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.room_id.localpart().size() > 10); EXPECT_EQ(res.room_id.hostname(), "localhost"); }); mtx_client->close(); } TEST(ClientAPI, LogoutSuccess) { std::shared_ptr mtx_client = std::make_shared("localhost"); std::string token; // Login and prove that login was successful by creating a room mtx_client->login( "alice", "secret", [&token](const mtx::responses::Login &res, RequestErr err) { check_error(err); token = res.access_token; }); while (token.empty()) sleep(); mtx_client->set_access_token(token); mtx::requests::CreateRoom req; req.name = "Test1"; req.topic = "Topic1"; mtx_client->create_room( req, [](const mtx::responses::CreateRoom &, RequestErr err) { check_error(err); }); // Logout and prove that logout was successful and deleted the access_token_ for the client mtx_client->logout([mtx_client, &token](const mtx::responses::Logout &, RequestErr err) { check_error(err); token.clear(); }); while (token.size()) sleep(); // Verify that sending requests with this mtx_client fails after logout mtx::requests::CreateRoom failReq; failReq.name = "42"; failReq.topic = "LifeUniverseEverything"; mtx_client->create_room(failReq, [](const mtx::responses::CreateRoom &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_MISSING_TOKEN"); }); mtx_client->close(); } TEST(ClientAPI, LogoutInvalidatesTokenOnServer) { std::shared_ptr mtx_client = std::make_shared("localhost"); std::string token; // Login and prove that login was successful by creating a room mtx_client->login( "alice", "secret", [&token](const mtx::responses::Login &res, RequestErr err) { check_error(err); token = res.access_token; }); while (token.empty()) sleep(); mtx_client->set_access_token(token); mtx::requests::CreateRoom req; req.name = "Test1"; req.topic = "Topic1"; mtx_client->create_room( req, [](const mtx::responses::CreateRoom &, RequestErr err) { check_error(err); }); // Logout and prove that logout was successful by verifying the old access_token_ is no // longer valid mtx_client->logout([mtx_client, &token](const mtx::responses::Logout &, RequestErr err) { check_error(err); mtx_client->set_access_token(token); token.clear(); }); while (token.size()) sleep(); // Verify that creating a room with the old access_token_ no longer succeeds after logout mtx::requests::CreateRoom failReq; failReq.name = "42"; failReq.topic = "LifeUniverseEverything"; mtx_client->create_room(failReq, [](const mtx::responses::CreateRoom &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_UNKNOWN_TOKEN"); }); mtx_client->close(); } TEST(ClientAPI, CreateRoomInvites) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); auto carl = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); carl->login("carl", "secret", [carl](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty() || carl->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; req.invite = {"@bob:localhost", "@carl:localhost"}; alice->create_room(req, [bob, carl](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); bob->join_room(room_id, [](const nlohmann::json &, RequestErr err) { check_error(err); }); carl->join_room(room_id, [](const nlohmann::json &, RequestErr err) { check_error(err); }); }); alice->close(); bob->close(); carl->close(); } TEST(ClientAPI, JoinRoom) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); // Creating a random room alias. // TODO: add a type for room aliases. const auto alias = utils::random_token(20, false); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; req.invite = {"@bob:localhost"}; req.room_alias_name = alias; alice->create_room( req, [bob, alias](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); bob->join_room(room_id, [](const nlohmann::json &, RequestErr err) { check_error(err); }); using namespace mtx::identifiers; bob->join_room( "!random_room_id:localhost", [](const nlohmann::json &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_UNRECOGNIZED"); }); // Join the room using an alias. bob->join_room("#" + alias + ":localhost", [](const nlohmann::json &, RequestErr err) { check_error(err); }); }); alice->close(); bob->close(); } TEST(ClientAPI, LeaveRoom) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; req.invite = {"@bob:localhost"}; alice->create_room(req, [bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id; bob->join_room(res.room_id.to_string(), [room_id, bob](const nlohmann::json &, RequestErr err) { check_error(err); bob->leave_room(room_id.to_string(), [](const nlohmann::json &, RequestErr err) { check_error(err); }); }); }); // Trying to leave a non-existent room should fail. bob->leave_room("!random_room_id:localhost", [](const nlohmann::json &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(mtx::errors::to_string(err->matrix_error.errcode), "M_UNRECOGNIZED"); EXPECT_EQ(err->matrix_error.error, "Not a known room"); }); alice->close(); bob->close(); } TEST(ClientAPI, InviteRoom) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; req.invite = {}; alice->create_room( req, [alice, bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); alice->invite_user(room_id, "@bob:localhost", [room_id, bob](const mtx::responses::Empty &, RequestErr err) { check_error(err); bob->join_room( room_id, [](const nlohmann::json &, RequestErr err) { check_error(err); }); }); }); alice->close(); bob->close(); } TEST(ClientAPI, InvalidInvite) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; req.invite = {}; alice->create_room( req, [alice, bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); bob->invite_user(room_id, "@carl:localhost", [room_id, bob](const mtx::responses::Empty &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ( mtx::errors::to_string(err->matrix_error.errcode), "M_FORBIDDEN"); }); }); alice->close(); bob->close(); } TEST(ClientAPI, Sync) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->login( "alice", "secret", [mtx_client](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (mtx_client->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.name = "Name"; req.topic = "Topic"; mtx_client->create_room( req, [mtx_client](const mtx::responses::CreateRoom &, RequestErr err) { check_error(err); SyncOpts opts; opts.timeout = 0; mtx_client->sync(opts, [](const mtx::responses::Sync &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.rooms.join.size() > 0); ASSERT_TRUE(res.next_batch.size() > 0); }); }); mtx_client->close(); } TEST(ClientAPI, Versions) { std::shared_ptr mtx_client = std::make_shared("localhost"); mtx_client->versions([](const mtx::responses::Versions &res, RequestErr err) { check_error(err); EXPECT_EQ(res.versions.size(), 4); EXPECT_EQ(res.versions.at(0), "r0.0.1"); EXPECT_EQ(res.versions.at(1), "r0.1.0"); EXPECT_EQ(res.versions.at(2), "r0.2.0"); EXPECT_EQ(res.versions.at(3), "r0.3.0"); }); mtx_client->close(); } TEST(ClientAPI, Typing) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); mtx::requests::CreateRoom req; alice->create_room(req, [alice](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); alice->start_typing(res.room_id.to_string(), 10000, [alice, res](RequestErr err) { check_error(err); const auto room_id = res.room_id.to_string(); atomic_bool can_continue(false); SyncOpts opts; opts.timeout = 0; alice->sync(opts, [room_id, &can_continue](const mtx::responses::Sync &res, RequestErr err) { check_error(err); can_continue = true; auto room = res.rooms.join.at(room_id); EXPECT_EQ(room.ephemeral.typing.size(), 1); EXPECT_EQ(room.ephemeral.typing.front(), "@alice:localhost"); }); while (!can_continue) sleep(); alice->stop_typing( res.room_id.to_string(), [alice, room_id](RequestErr err) { check_error(err); SyncOpts opts; opts.timeout = 0; alice->sync( opts, [room_id](const mtx::responses::Sync &res, RequestErr err) { check_error(err); auto room = res.rooms.join.at(room_id); EXPECT_EQ(room.ephemeral.typing.size(), 0); }); }); }); }); alice->close(); } TEST(ClientAPI, SendMessages) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.invite = {"@bob:localhost"}; alice->create_room( req, [alice, bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); bob->join_room( room_id, [alice, bob, room_id](const nlohmann::json &, RequestErr err) { check_error(err); // Flag to indicate when those messages would be ready to be read by // alice. vector event_ids; mtx::events::msg::Text text; text.body = "hello alice!"; bob->send_room_message( room_id, text, [&event_ids](const mtx::responses::EventId &res, RequestErr err) { event_ids.push_back(res.event_id.to_string()); check_error(err); }); mtx::events::msg::Emote emote; emote.body = "*bob tests"; bob->send_room_message( room_id, emote, [&event_ids](const mtx::responses::EventId &res, RequestErr err) { event_ids.push_back(res.event_id.to_string()); check_error(err); }); while (event_ids.size() != 2) sleep(); SyncOpts opts; opts.timeout = 0; alice->sync(opts, [room_id, event_ids](const mtx::responses::Sync &res, RequestErr err) { check_error(err); auto ids = get_event_ids( res.rooms.join.at(room_id).timeline.events); // The sent event ids should be visible in the // timeline. for (const auto &event_id : event_ids) ASSERT_TRUE(std::find(ids.begin(), ids.end(), event_id) != std::end(ids)); }); }); }); alice->close(); bob->close(); } TEST(ClientAPI, RedactEvent) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", check_login); while (alice->access_token().empty()) sleep(); mtx::requests::CreateRoom req; alice->create_room(req, [alice](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); mtx::events::msg::Text text; text.body = "hello alice!"; alice ->send_room_message( room_id, text, [room_id, alice](const mtx::responses::EventId &res, RequestErr err) { check_error(err); alice->redact_event( room_id, res.event_id.to_string(), [](const mtx::responses::EventId &res, RequestErr err) { check_error(err); ASSERT_FALSE(res.event_id.to_string().empty()); }); }); }); alice->close(); } TEST(ClientAPI, SendStateEvents) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; req.invite = {"@bob:localhost"}; alice->create_room( req, [alice, bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id; // Flag to indicate when those messages would be ready to be read by // alice. vector event_ids; mtx::events::state::Name event; event.name = "Bob's room"; bob->send_state_event( room_id.to_string(), event, [](const mtx::responses::EventId &, RequestErr err) { ASSERT_TRUE(err); ASSERT_EQ("M_FORBIDDEN", mtx::errors::to_string(err->matrix_error.errcode)); }); mtx::events::state::Name name_event; name_event.name = "Alice's room"; alice ->send_state_event( room_id.to_string(), name_event, [&event_ids](const mtx::responses::EventId &res, RequestErr err) { check_error(err); event_ids.push_back(res.event_id.to_string()); }); mtx::events::state::Avatar avatar; avatar.url = "mxc://localhost/random"; alice->send_state_event( room_id.to_string(), avatar, [&event_ids](const mtx::responses::EventId &res, RequestErr err) { check_error(err); event_ids.push_back(res.event_id.to_string()); }); while (event_ids.size() != 2) sleep(); SyncOpts opts; opts.timeout = 0; alice->sync( opts, [room_id, event_ids](const mtx::responses::Sync &res, RequestErr err) { check_error(err); auto ids = get_event_ids( res.rooms.join.at(room_id.to_string()).timeline.events); // The sent event ids should be visible in the timeline. for (const auto &event_id : event_ids) ASSERT_TRUE(std::find(ids.begin(), ids.end(), event_id) != std::end(ids)); }); }); alice->close(); bob->close(); } TEST(ClientAPI, Pagination) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); mtx::requests::CreateRoom req; alice->create_room(req, [alice](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id; MessagesOpts opts; opts.room_id = res.room_id.to_string(); alice->messages( opts, [room_id, alice](const mtx::responses::Messages &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.chunk.size() > 5); ASSERT_NE(res.start, res.end); MessagesOpts opts; opts.from = res.end; opts.room_id = room_id.to_string(); alice->messages(opts, [](const mtx::responses::Messages &res, RequestErr err) { check_error(err); // We reached the start of the timeline. EXPECT_EQ(res.start, res.end); EXPECT_EQ(res.chunk.size(), 0); }); }); }); alice->close(); } TEST(ClientAPI, UploadFilter) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); nlohmann::json j = { {"room", {{"include_leave", true}, {"account_data", {{"not_types", {"*"}}}}}}, {"account_data", {{"not_types", {"*"}}}}, {"presence", {{"not_types", {"*"}}}}}; alice->upload_filter(j, [](const mtx::responses::FilterId &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.filter_id.size() > 0); }); alice->close(); } TEST(ClientAPI, ReadMarkers) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); mtx::requests::CreateRoom req; alice->create_room(req, [alice](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); string event_id; mtx::events::msg::Text text; text.body = "hello alice!"; const auto room_id = res.room_id; alice ->send_room_message( room_id.to_string(), text, [alice, &event_id, room_id](const mtx::responses::EventId &res, RequestErr err) { check_error(err); alice->read_event(room_id.to_string(), res.event_id.to_string(), [&event_id, res](RequestErr err) { check_error(err); event_id = res.event_id.to_string(); }); }); while (event_id.size() == 0) sleep(); SyncOpts opts; opts.timeout = 0; alice->sync( opts, [room_id, event_id](const mtx::responses::Sync &res, RequestErr err) { check_error(err); auto receipts = res.rooms.join.at(room_id.to_string()).ephemeral.receipts; EXPECT_EQ(receipts.size(), 1); auto users = receipts[event_id]; EXPECT_EQ(users.size(), 1); ASSERT_TRUE(users["@alice:localhost"] > 0); }); }); alice->close(); } TEST(ClientAPI, SendToDevice) { auto alice = std::make_shared("localhost"); auto bob = std::make_shared("localhost"); alice->login("alice", "secret", &check_login); bob->login("bob", "secret", &check_login); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); json body{{"messages", {{bob->user_id().to_string(), {{bob->device_id(), {{"example_content_key", "test"}}}}}}}}; alice->send_to_device("m.test", body, [bob](RequestErr err) { check_error(err); SyncOpts opts; opts.timeout = 0; bob->sync(opts, [](const mtx::responses::Sync &res, RequestErr err) { check_error(err); EXPECT_EQ(res.to_device.size(), 1); auto msg = res.to_device.at(0); EXPECT_EQ(msg.at("content").at("example_content_key"), "test"); EXPECT_EQ(msg.at("type"), "m.test"); EXPECT_EQ(msg.at("sender"), "@alice:localhost"); }); }); alice->close(); bob->close(); } TEST(ClientAPI, RetrieveSingleEvent) { auto bob = std::make_shared("localhost"); bob->login("bob", "secret", check_login); while (bob->access_token().empty()) sleep(); mtx::requests::CreateRoom req; bob->create_room(req, [bob](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); auto room_id = res.room_id.to_string(); mtx::events::msg::Text text; text.body = "Hello Alice!"; bob->send_room_message( room_id, text, [room_id, bob](const mtx::responses::EventId &res, RequestErr err) { check_error(err); bob->get_event( room_id, res.event_id.to_string(), [event_id = res.event_id.to_string()]( const mtx::events::collections::TimelineEvents &res, RequestErr err) { check_error(err); ASSERT_TRUE( boost::get>( &res) != nullptr); auto e = boost::get>( res); EXPECT_EQ(e.content.body, "Hello Alice!"); EXPECT_EQ(e.sender, "@bob:localhost"); EXPECT_EQ(e.event_id, event_id); }); bob->get_event( room_id, "$random_event:localhost", [event_id = res.event_id.to_string()]( const mtx::events::collections::TimelineEvents &, RequestErr err) { ASSERT_TRUE(err); EXPECT_EQ(static_cast(err->status_code), 404); }); }); }); bob->close(); } TEST(Groups, Rooms) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", check_login); WAIT_UNTIL(!alice->access_token().empty()) std::atomic rooms_created(0); std::vector rooms_ids; auto create_room_cb = [&rooms_created, &rooms_ids](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); rooms_created += 1; rooms_ids.push_back(res.room_id.to_string()); }; mtx::requests::CreateRoom req; alice->create_room(req, create_room_cb); alice->create_room(req, create_room_cb); WAIT_UNTIL(rooms_created == 2) auto random_group_id = to_string(random_number()); alice->create_group( random_group_id, [alice, rooms_ids, random_group_id](const mtx::responses::GroupId &res, RequestErr err) { check_error(err); std::atomic rooms_added(0); alice->add_room_to_group( rooms_ids.at(0), res.group_id, [&rooms_added](RequestErr err) { check_error(err); rooms_added += 1; }); alice->add_room_to_group( rooms_ids.at(1), res.group_id, [&rooms_added](RequestErr err) { check_error(err); rooms_added += 1; }); WAIT_UNTIL(rooms_added == 2) alice->joined_groups( [random_group_id](const mtx::responses::JoinedGroups &res, RequestErr err) { check_error(err); ASSERT_GE(res.groups.size(), 1); for (const auto &g : res.groups) { if (g == std::string("+" + random_group_id + ":localhost")) return; } FAIL(); }); alice->group_rooms("+" + random_group_id + ":localhost", [](const nlohmann::json &res, RequestErr err) { check_error(err); EXPECT_GE(res.at("chunk").size(), 2); }); }); alice->close(); } TEST(Groups, Profiles) { auto alice = std::make_shared("localhost"); alice->login("alice", "secret", check_login); WAIT_UNTIL(!alice->access_token().empty()) auto random_group_id = to_string(random_number()); alice->create_group( random_group_id, [alice, random_group_id](const mtx::responses::GroupId &res, RequestErr err) { check_error(err); EXPECT_GE(res.group_id.size(), random_group_id.size()); json profile; profile["name"] = "Name"; alice->set_group_profile( "+" + random_group_id + ":localhost", profile, [alice, random_group_id](const nlohmann::json &, RequestErr err) { check_error(err); alice->group_profile( "+" + random_group_id + ":localhost", [](const mtx::responses::GroupProfile &res, RequestErr err) { check_error(err); EXPECT_EQ(res.name, "Name"); EXPECT_EQ(res.avatar_url, ""); }); }); }); alice->close(); } mtxclient-0.2.1/tests/connection.cpp000066400000000000000000000045601347137727200175500ustar00rootroot00000000000000#include #include #include "mtx/responses.hpp" #include "mtxclient/http/client.hpp" #include "mtxclient/http/errors.hpp" #include "test_helpers.hpp" using namespace mtx::http; using namespace mtx::client; using namespace std; TEST(Basic, Connection) { auto alice = std::make_shared("localhost", 8448); auto bob = std::make_shared("localhost", 443); alice->versions( [](const mtx::responses::Versions &, RequestErr err) { ASSERT_FALSE(err); }); bob->versions([](const mtx::responses::Versions &, RequestErr err) { ASSERT_FALSE(err); }); bob->close(); alice->close(); } TEST(Basic, ServerWithPort) { auto alice = std::make_shared("matrix.org"); alice->set_server("localhost:8448"); EXPECT_EQ(alice->server(), "localhost"); EXPECT_EQ(alice->port(), 8448); alice->versions( [](const mtx::responses::Versions &, RequestErr err) { ASSERT_FALSE(err); }); alice->close(); } TEST(Basic, Failure) { auto alice = std::make_shared("not-resolvable-example-domain.wrong"); alice->versions([](const mtx::responses::Versions &, RequestErr err) { ASSERT_TRUE(err); }); alice->close(); } TEST(Basic, Shutdown) { std::shared_ptr client = std::make_shared("localhost"); client->login("carl", "secret", [client](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (client->access_token().empty()) sleep(); std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); SyncOpts opts; opts.timeout = 40'000; // milliseconds client->sync(opts, [client, &opts](const mtx::responses::Sync &res, RequestErr err) { check_error(err); opts.since = res.next_batch; client->sync(opts, [](const mtx::responses::Sync &, RequestErr) {}); }); std::this_thread::sleep_for(std::chrono::seconds(1)); // Force terminate all active connections. client->shutdown(); client->close(); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); auto diff = std::chrono::duration_cast(end - begin).count(); ASSERT_TRUE(diff < 5); } mtxclient-0.2.1/tests/crypto.cpp000066400000000000000000000047161347137727200167340ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace mtx::crypto; TEST(Crypto, DeviceKeys) { DeviceKeys device1; device1.user_id = "@alice:example.com"; device1.device_id = "JLAFKJWSCS"; device1.keys = {{"curve25519:JLAFKJWSCS", "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI"}, {"ed25519:JLAFKJWSCS", "lEuiRJBit0IG6nUf5pUzWTUEsRVVe/HJkoKuEww9ULI"}}; device1.signatures = { {"@alice:example.com", {{"ed25519:JLAFKJWSCS", "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/" "a+myXS367WT6NAIcBA"}}}}; json j = device1; ASSERT_EQ(j.dump(), "{\"algorithms\":[\"m.olm.v1.curve25519-aes-sha2\",\"m.megolm.v1.aes-sha2\"]," "\"device_id\":\"JLAFKJWSCS\",\"keys\":{\"curve25519:JLAFKJWSCS\":" "\"3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI\",\"ed25519:JLAFKJWSCS\":" "\"lEuiRJBit0IG6nUf5pUzWTUEsRVVe/" "HJkoKuEww9ULI\"},\"signatures\":{\"@alice:example.com\":{\"ed25519:JLAFKJWSCS\":" "\"dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/" "a+myXS367WT6NAIcBA\"}},\"user_id\":\"@alice:example.com\"}"); json data = R"({ "user_id": "@alice:example.com", "device_id": "JLAFKJWSCS", "algorithms": [ "m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2" ], "keys": { "curve25519:JLAFKJWSCS": "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI", "ed25519:JLAFKJWSCS": "lEuiRJBit0IG6nUf5pUzWTUEsRVVe/HJkoKuEww9ULI" }, "signatures": { "@alice:example.com": { "ed25519:JLAFKJWSCS": "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA" } }, "unsigned": { "device_display_name": "Alice's mobile phone" } })"_json; DeviceKeys device2 = data; EXPECT_EQ(device2.user_id, device1.user_id); EXPECT_EQ(device2.device_id, device1.device_id); EXPECT_EQ(device2.keys, device1.keys); EXPECT_EQ(device2.algorithms, device1.algorithms); EXPECT_EQ(device2.signatures, device1.signatures); EXPECT_EQ(device2.unsigned_info.device_display_name, "Alice's mobile phone"); } mtxclient-0.2.1/tests/e2ee.cpp000066400000000000000000001312611347137727200162300ustar00rootroot00000000000000#include #include #include #include #include "mtxclient/crypto/client.hpp" #include "mtxclient/crypto/types.hpp" #include "mtxclient/http/client.hpp" #include "mtx/requests.hpp" #include "mtx/responses.hpp" #include "test_helpers.hpp" using namespace mtx::client; using namespace mtx::http; using namespace mtx::crypto; using namespace mtx::identifiers; using namespace mtx::events::collections; using namespace mtx::responses; using namespace std; struct OlmCipherContent { std::string body; uint8_t type; }; inline void from_json(const nlohmann::json &obj, OlmCipherContent &msg) { msg.body = obj.at("body"); msg.type = obj.at("type"); } struct OlmMessage { std::string sender_key; std::string sender; using RecipientKey = std::string; std::map ciphertext; }; constexpr auto OLM_ALGO = "m.olm.v1.curve25519-aes-sha2"; inline void from_json(const nlohmann::json &obj, OlmMessage &msg) { if (obj.at("type") != "m.room.encrypted") { throw std::invalid_argument("invalid type for olm message"); } if (obj.at("content").at("algorithm") != OLM_ALGO) throw std::invalid_argument("invalid algorithm for olm message"); msg.sender = obj.at("sender"); msg.sender_key = obj.at("content").at("sender_key"); msg.ciphertext = obj.at("content").at("ciphertext").get>(); } mtx::requests::UploadKeys generate_keys(std::shared_ptr account) { auto idks = account->identity_keys(); account->generate_one_time_keys(1); auto otks = account->one_time_keys(); return account->create_upload_keys_request(otks); } TEST(Encryption, UploadIdentityKeys) { auto alice = std::make_shared("localhost"); auto olm_account = std::make_shared(); olm_account->create_new_account(); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); olm_account->set_user_id(alice->user_id().to_string()); olm_account->set_device_id(alice->device_id()); auto id_keys = olm_account->identity_keys(); ASSERT_TRUE(id_keys.curve25519.size() > 10); ASSERT_TRUE(id_keys.curve25519.size() > 10); mtx::crypto::OneTimeKeys unused; auto request = olm_account->create_upload_keys_request(unused); // Make the request with the signed identity keys. alice->upload_keys(request, [](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 0); }); alice->close(); } TEST(Encryption, UploadOneTimeKeys) { auto alice = std::make_shared("localhost"); auto olm_account = std::make_shared(); olm_account->create_new_account(); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); olm_account->set_user_id(alice->user_id().to_string()); olm_account->set_device_id(alice->device_id()); auto nkeys = olm_account->generate_one_time_keys(5); EXPECT_EQ(nkeys, 5); json otks = olm_account->one_time_keys(); mtx::requests::UploadKeys req; // Create the proper structure for uploading. std::map unsigned_keys; auto obj = otks.at("curve25519"); for (auto it = obj.begin(); it != obj.end(); ++it) unsigned_keys["curve25519:" + it.key()] = it.value(); req.one_time_keys = unsigned_keys; alice->upload_keys(req, [](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("curve25519"), 5); }); alice->close(); } TEST(Encryption, UploadSignedOneTimeKeys) { auto alice = std::make_shared("localhost"); auto olm_account = std::make_shared(); olm_account->create_new_account(); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); olm_account->set_user_id(alice->user_id().to_string()); olm_account->set_device_id(alice->device_id()); auto nkeys = olm_account->generate_one_time_keys(5); EXPECT_EQ(nkeys, 5); auto one_time_keys = olm_account->one_time_keys(); mtx::requests::UploadKeys req; req.one_time_keys = olm_account->sign_one_time_keys(one_time_keys); alice->upload_keys(req, [nkeys](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), nkeys); }); alice->close(); } TEST(Encryption, UploadKeys) { auto alice = std::make_shared("localhost"); auto olm_account = std::make_shared(); olm_account->create_new_account(); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty()) sleep(); olm_account->set_user_id(alice->user_id().to_string()); olm_account->set_device_id(alice->device_id()); auto req = generate_keys(olm_account); alice->upload_keys(req, [](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 1); }); alice->close(); } TEST(Encryption, QueryKeys) { auto alice = std::make_shared("localhost"); auto alice_olm = std::make_shared(); auto bob = std::make_shared("localhost"); auto bob_olm = std::make_shared(); alice_olm->create_new_account(); bob_olm->create_new_account(); alice->login("alice", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); bob->login( "bob", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); alice_olm->set_user_id(alice->user_id().to_string()); alice_olm->set_device_id(alice->device_id()); bob_olm->set_user_id(bob->user_id().to_string()); bob_olm->set_device_id(bob->device_id()); // Create and upload keys for both users. auto alice_req = ::generate_keys(alice_olm); auto bob_req = ::generate_keys(bob_olm); // Validates that both upload requests are finished. atomic_int uploads(0); alice->upload_keys(alice_req, [&uploads](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 1); uploads += 1; }); bob->upload_keys(bob_req, [&uploads](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 1); uploads += 1; }); while (uploads != 2) sleep(); atomic_int responses(0); // Each user is requests each other's keys. mtx::requests::QueryKeys alice_rk; alice_rk.device_keys[bob->user_id().to_string()] = {}; alice->query_keys( alice_rk, [&responses, bob, bob_req](const mtx::responses::QueryKeys &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.failures.size() == 0); auto bob_devices = res.device_keys.at(bob->user_id().to_string()); ASSERT_TRUE(bob_devices.size() > 0); auto dev_keys = bob_devices.at(bob->device_id()); EXPECT_EQ(dev_keys.user_id, bob->user_id().to_string()); EXPECT_EQ(dev_keys.device_id, bob->device_id()); EXPECT_EQ(dev_keys.keys, bob_req.device_keys.keys); EXPECT_EQ(dev_keys.signatures, bob_req.device_keys.signatures); responses += 1; }); mtx::requests::QueryKeys bob_rk; bob_rk.device_keys[alice->user_id().to_string()] = {}; bob->query_keys( bob_rk, [&responses, alice, alice_req](const mtx::responses::QueryKeys &res, RequestErr err) { check_error(err); ASSERT_TRUE(res.failures.size() == 0); auto bob_devices = res.device_keys.at(alice->user_id().to_string()); ASSERT_TRUE(bob_devices.size() > 0); auto dev_keys = bob_devices.at(alice->device_id()); EXPECT_EQ(dev_keys.user_id, alice->user_id().to_string()); EXPECT_EQ(dev_keys.device_id, alice->device_id()); EXPECT_EQ(dev_keys.keys, alice_req.device_keys.keys); EXPECT_EQ(dev_keys.signatures, alice_req.device_keys.signatures); responses += 1; }); while (responses != 2) sleep(); alice->close(); bob->close(); } TEST(Encryption, ClaimKeys) { using namespace mtx::crypto; auto alice = std::make_shared("localhost"); auto alice_olm = std::make_shared(); alice_olm->create_new_account(); alice->login("alice", "secret", check_login); auto bob = std::make_shared("localhost"); auto bob_olm = std::make_shared(); bob_olm->create_new_account(); bob->login("bob", "secret", check_login); while (alice->access_token().empty() || bob->access_token().empty()) sleep(); alice_olm->set_user_id(alice->user_id().to_string()); alice_olm->set_device_id(alice->device_id()); bob_olm->set_user_id(bob->user_id().to_string()); bob_olm->set_device_id(bob->device_id()); atomic_bool uploaded(false); // Bob uploads his keys. bob_olm->generate_one_time_keys(1); bob->upload_keys(bob_olm->create_upload_keys_request(), [&uploaded](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 1); uploaded = true; }); // Waiting for the upload to finish. while (!uploaded) sleep(); // Alice retrieves bob's keys & claims one signed one-time key. mtx::requests::QueryKeys alice_rk; alice_rk.device_keys[bob->user_id().to_string()] = {}; alice->query_keys( alice_rk, [alice_olm, alice, bob](const mtx::responses::QueryKeys &res, RequestErr err) { check_error(err); auto bob_devices = res.device_keys.at(bob->user_id().to_string()); ASSERT_TRUE(bob_devices.size() > 0); auto devices = {bob->device_id()}; // Retrieve the identity key for the current device. auto bob_ed25519 = bob_devices.at(bob->device_id()).keys.at("ed25519:" + bob->device_id()); const auto current_device = bob_devices.at(bob->device_id()); // Verify signature. ASSERT_TRUE(verify_identity_signature(json(current_device), DeviceId(bob->device_id()), UserId(bob->user_id().to_string()))); alice->claim_keys(bob->user_id().to_string(), devices, [alice_olm, bob, bob_ed25519]( const mtx::responses::ClaimKeys &res, RequestErr err) { check_error(err); const auto user_id = bob->user_id().to_string(); const auto device_id = bob->device_id(); // The device exists. EXPECT_EQ(res.one_time_keys.size(), 1); EXPECT_EQ(res.one_time_keys.at(user_id).size(), 1); // The key is the one bob sent. auto one_time_key = res.one_time_keys.at(user_id).at(device_id); ASSERT_TRUE(one_time_key.is_object()); auto algo = one_time_key.begin().key(); auto contents = one_time_key.begin().value(); }); }); alice->close(); bob->close(); } TEST(Encryption, ClaimMultipleDeviceKeys) { using namespace mtx::crypto; // Login with alice multiple times auto alice1 = std::make_shared("localhost"); auto alice2 = std::make_shared("localhost"); auto alice3 = std::make_shared("localhost"); alice1->login("alice", "secret", check_login); alice2->login("alice", "secret", check_login); alice3->login("alice", "secret", check_login); WAIT_UNTIL(!alice1->access_token().empty() && !alice2->access_token().empty() && !alice3->access_token().empty()) atomic_int uploads(0); auto upload_cb = [&uploads](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 10); uploads += 1; }; auto olm1 = std::make_shared(); olm1->create_new_account(); olm1->generate_one_time_keys(10); olm1->set_user_id(alice1->user_id().to_string()); olm1->set_device_id(alice1->device_id()); auto olm2 = std::make_shared(); olm2->create_new_account(); olm2->generate_one_time_keys(10); olm2->set_user_id(alice2->user_id().to_string()); olm2->set_device_id(alice2->device_id()); auto olm3 = std::make_shared(); olm3->create_new_account(); olm3->generate_one_time_keys(10); olm3->set_user_id(alice3->user_id().to_string()); olm3->set_device_id(alice3->device_id()); alice1->upload_keys(olm1->create_upload_keys_request(), upload_cb); alice2->upload_keys(olm2->create_upload_keys_request(), upload_cb); alice3->upload_keys(olm3->create_upload_keys_request(), upload_cb); WAIT_UNTIL(uploads == 3); // Bob will claim all keys from alice auto bob = std::make_shared("localhost"); bob->login("bob", "secret", check_login); WAIT_UNTIL(!bob->access_token().empty()) std::vector devices_; devices_.push_back(alice1->device_id()); devices_.push_back(alice2->device_id()); devices_.push_back(alice3->device_id()); bob->claim_keys(alice1->user_id().to_string(), devices_, [user_id = alice1->user_id().to_string()]( const mtx::responses::ClaimKeys &res, RequestErr err) { check_error(err); auto retrieved_devices = res.one_time_keys.at(user_id); EXPECT_EQ(retrieved_devices.size(), 3); }); bob->close(); alice1->close(); alice2->close(); alice3->close(); } TEST(Encryption, KeyChanges) { auto carl = std::make_shared("localhost"); auto carl_olm = std::make_shared(); carl_olm->create_new_account(); carl->login("carl", "secret", [](const mtx::responses::Login &, RequestErr err) { check_error(err); }); while (carl->access_token().empty()) sleep(); carl_olm->set_device_id(carl->device_id()); carl_olm->set_user_id(carl->user_id().to_string()); mtx::requests::CreateRoom req; carl->create_room( req, [carl, carl_olm](const mtx::responses::CreateRoom &, RequestErr err) { check_error(err); // Carl syncs to get the first next_batch token. SyncOpts opts; opts.timeout = 0; carl->sync( opts, [carl, carl_olm](const mtx::responses::Sync &res, RequestErr err) { check_error(err); const auto next_batch_token = res.next_batch; auto key_req = ::generate_keys(carl_olm); atomic_bool keys_uploaded(false); // Changes his keys. carl->upload_keys( key_req, [&keys_uploaded](const mtx::responses::UploadKeys &, RequestErr err) { check_error(err); keys_uploaded = true; }); while (!keys_uploaded) sleep(); // The key changes should contain his username // because of the key uploading. carl->key_changes( next_batch_token, "", [carl](const mtx::responses::KeyChanges &res, RequestErr err) { check_error(err); EXPECT_EQ(res.changed.size(), 1); EXPECT_EQ(res.left.size(), 0); EXPECT_EQ(res.changed.at(0), carl->user_id().to_string()); }); }); }); carl->close(); } TEST(Encryption, EnableEncryption) { auto bob = make_shared("localhost"); auto carl = make_shared("localhost"); bob->login("bob", "secret", [](const Login &, RequestErr err) { check_error(err); }); carl->login("carl", "secret", [](const Login &, RequestErr err) { check_error(err); }); while (bob->access_token().empty() || carl->access_token().empty()) sleep(); atomic_int responses(0); mtx::identifiers::Room joined_room; mtx::requests::CreateRoom req; req.invite = {"@carl:localhost"}; bob->create_room( req, [bob, carl, &responses, &joined_room](const mtx::responses::CreateRoom &res, RequestErr err) { check_error(err); joined_room = res.room_id; bob->enable_encryption( res.room_id.to_string(), [&responses](const mtx::responses::EventId &, RequestErr err) { check_error(err); responses += 1; }); carl->join_room(res.room_id.to_string(), [&responses](const nlohmann::json &, RequestErr err) { check_error(err); responses += 1; }); }); while (responses != 2) sleep(); SyncOpts opts; opts.timeout = 0; carl->sync(opts, [&joined_room](const Sync &res, RequestErr err) { check_error(err); auto events = res.rooms.join.at(joined_room.to_string()).timeline.events; using namespace mtx::events; int has_encryption = 0; for (const auto &e : events) { if (boost::get>(&e) != nullptr) has_encryption = 1; } ASSERT_TRUE(has_encryption == 1); }); bob->close(); carl->close(); } TEST(Encryption, CreateOutboundGroupSession) { auto alice = make_shared(); auto bob = make_shared(); alice->create_new_account(); bob->create_new_account(); bob->generate_one_time_keys(1); alice->generate_one_time_keys(1); auto outbound_session = alice->init_outbound_group_session(); auto session_id = mtx::crypto::session_id(outbound_session.get()); auto session_key = mtx::crypto::session_key(outbound_session.get()); } TEST(Encryption, OlmSessions) { using namespace mtx::crypto; auto alice = std::make_shared(); alice->create_new_account(); alice->generate_one_time_keys(1); auto bob = std::make_shared(); bob->create_new_account(); bob->generate_one_time_keys(1); std::string alice_key = alice->identity_keys().curve25519; std::string alice_one_time_key = alice->one_time_keys().curve25519.begin()->second; std::string bob_key = bob->identity_keys().curve25519; std::string bob_one_time_key = bob->one_time_keys().curve25519.begin()->second; // Alice is preparing to send a pre-shared message to Bob by opening // a new 1-1 outbound session. auto alice_outbound_session = alice->create_outbound_session(bob_key, bob_one_time_key); // Alice encrypts the message using the current session. auto plaintext = "Hello, Bob!"; size_t msgtype = olm_encrypt_message_type(alice_outbound_session.get()); auto ciphertext = alice->encrypt_message(alice_outbound_session.get(), plaintext); auto ciphertext_str = std::string((char *)ciphertext.data(), ciphertext.size()); EXPECT_EQ(msgtype, 0); // Bob creates an inbound session to receive Alice's message. auto bob_inbound_session = bob->create_inbound_session(ciphertext_str); // Bob validates that the message was meant for him. ASSERT_EQ(1, matches_inbound_session(bob_inbound_session.get(), ciphertext_str)); // Bob validates that the message was sent from Alice. ASSERT_EQ( 1, matches_inbound_session_from(bob_inbound_session.get(), alice_key, ciphertext_str)); // Bob validates that the message wasn't sent by someone else. ASSERT_EQ(0, matches_inbound_session_from(bob_inbound_session.get(), bob_key, ciphertext_str)); // Bob decrypts the message auto decrypted = bob->decrypt_message(bob_inbound_session.get(), msgtype, ciphertext_str); auto body_str = std::string((char *)decrypted.data(), decrypted.size()); ASSERT_EQ(body_str, plaintext); } TEST(Encryption, MegolmSessions) { auto alice = std::make_shared(); alice->create_new_account(); alice->generate_one_time_keys(1); auto bob = std::make_shared(); bob->create_new_account(); bob->generate_one_time_keys(1); // Alice wants to send an encrypted megolm message to Bob. const std::string secret_message = "Hey, Bob!"; // Alice creates an outbound megolm session that will be used by both parties. auto outbound_megolm_session = alice->init_outbound_group_session(); auto msg_index = olm_outbound_group_session_message_index(outbound_megolm_session.get()); ASSERT_EQ(msg_index, 0); // Alice extracts the session id & session key so she can share them with Bob. const auto session_id = mtx::crypto::session_id(outbound_megolm_session.get()); const auto session_key = mtx::crypto::session_key(outbound_megolm_session.get()); // Encrypt the message using megolm. auto encrypted_secret_message = alice->encrypt_group_message(outbound_megolm_session.get(), secret_message); msg_index = olm_outbound_group_session_message_index(outbound_megolm_session.get()); ASSERT_EQ(msg_index, 1); // First she will create an outbound olm session so she can share the session data. // Alice will need Bob's curve25519 key and one claimed one time key. auto outbound_olm_session = alice->create_outbound_session( bob->identity_keys().curve25519, bob->one_time_keys().curve25519.begin()->second); const auto msg_type = olm_encrypt_message_type(outbound_olm_session.get()); // Plaintext version of the session data to be shared. const auto session_data = json{{"session_id", session_id}, {"session_key", session_key}}; // Alice encrypts the session data using olm. const auto encrypted_session_data = alice->encrypt_message(outbound_olm_session.get(), session_data.dump()); const auto encrypted_session_data_str = std::string((char *)encrypted_session_data.data(), encrypted_session_data.size()); // // Alice sends the olm & megolm messages to Bob ... // // Bob creates an inbound olm session to receive the session data. auto inbound_olm_session = bob->create_inbound_session(encrypted_session_data); // and validates that the message was indeed from Alice. ASSERT_EQ(1, matches_inbound_session_from(inbound_olm_session.get(), alice->identity_keys().curve25519, encrypted_session_data_str)); // Bob decrypts the encrypted olm message. auto plaintext_session_data = bob->decrypt_message(inbound_olm_session.get(), msg_type, encrypted_session_data_str); auto session_str_data = json::parse( std::string((char *)plaintext_session_data.data(), plaintext_session_data.size())); // Validate that the output matches the input. ASSERT_EQ(session_id, session_str_data.at("session_id").get()); ASSERT_EQ(session_key, session_str_data.at("session_key").get()); // Bob will use the session_key to create an inbound megolm session. // The session_id will be used to map future messages to this session. auto inbound_megolm_session = bob->init_inbound_group_session(session_key); // Bob can finally decrypt Alice's original message. auto ciphertext = std::string((char *)encrypted_secret_message.data(), encrypted_secret_message.size()); auto bob_plaintext = bob->decrypt_group_message(inbound_megolm_session.get(), ciphertext); auto output_str = std::string((char *)bob_plaintext.data.data(), bob_plaintext.data.size()); ASSERT_EQ(output_str, secret_message); } TEST(Encryption, OlmRoomKeyEncryption) { // Alice wants to use olm to send data to Bob. auto alice_olm = std::make_shared(); auto alice_http = std::make_shared("localhost"); alice_olm->create_new_account(); alice_olm->generate_one_time_keys(10); auto bob_olm = std::make_shared(); auto bob_http = std::make_shared("localhost"); bob_olm->create_new_account(); bob_olm->generate_one_time_keys(10); alice_http->login("alice", "secret", &check_login); bob_http->login("bob", "secret", &check_login); WAIT_UNTIL(!bob_http->access_token().empty() && !alice_http->access_token().empty()) bob_olm->set_user_id(bob_http->user_id().to_string()); bob_olm->set_device_id(bob_http->device_id()); alice_olm->set_user_id(alice_http->user_id().to_string()); alice_olm->set_device_id(alice_http->device_id()); // Both users upload their identity & one time keys atomic_int uploads(0); auto upload_cb = [&uploads](const mtx::responses::UploadKeys &res, RequestErr err) { check_error(err); EXPECT_EQ(res.one_time_key_counts.size(), 1); EXPECT_EQ(res.one_time_key_counts.at("signed_curve25519"), 10); uploads += 1; }; alice_http->upload_keys(alice_olm->create_upload_keys_request(), upload_cb); bob_http->upload_keys(bob_olm->create_upload_keys_request(), upload_cb); WAIT_UNTIL(uploads == 2) atomic_bool request_finished(false); std::string bob_ed25519, bob_curve25519, bob_otk; // Alice needs Bob's ed25519 device key. mtx::requests::QueryKeys query; query.device_keys[bob_http->user_id().to_string()] = {}; alice_http->query_keys(query, [&request_finished, &bob_ed25519, &bob_curve25519, bob = bob_http]( const mtx::responses::QueryKeys &res, RequestErr err) { check_error(err); const auto device_id = bob->device_id(); const auto user_id = bob->user_id().to_string(); const auto devices = res.device_keys.at(user_id); assert(devices.find(device_id) != devices.end()); bob_ed25519 = devices.at(device_id).keys.at("ed25519:" + device_id); bob_curve25519 = devices.at(device_id).keys.at("curve25519:" + device_id); request_finished = true; }); WAIT_UNTIL(request_finished); // Alice needs one of Bob's one time keys. request_finished = false; alice_http->claim_keys(bob_http->user_id().to_string(), {bob_http->device_id()}, [&bob_otk, bob = bob_http, &request_finished]( const mtx::responses::ClaimKeys &res, RequestErr err) { check_error(err); const auto user_id = bob->user_id().to_string(); const auto device_id = bob->device_id(); auto retrieved_devices = res.one_time_keys.at(user_id); for (const auto &device : retrieved_devices) { if (device.first == device_id) { bob_otk = device.second.begin()->at("key"); break; } } request_finished = true; }); WAIT_UNTIL(request_finished); EXPECT_EQ(bob_ed25519, bob_olm->identity_keys().ed25519); EXPECT_EQ(bob_curve25519, bob_olm->identity_keys().curve25519); EXPECT_EQ(bob_otk, bob_olm->one_time_keys().curve25519.begin()->second); constexpr auto SECRET_TEXT = "Hello Bob!"; // Alice create m.room.key request json payload = json{{"secret", SECRET_TEXT}}; auto room_key = alice_olm->create_room_key_event( UserId("@bob:localhost"), bob_olm->identity_keys().ed25519, payload); // Alice creates an outbound session. auto out_session = alice_olm->create_outbound_session(bob_curve25519, bob_otk); auto device_msg = alice_olm->create_olm_encrypted_content( out_session.get(), room_key.dump(), bob_curve25519); // Finally sends the olm encrypted message to Bob's device. atomic_bool is_sent(false); json body{ {"messages", {{bob_http->user_id().to_string(), {{bob_http->device_id(), device_msg}}}}}}; alice_http->send_to_device("m.room.encrypted", body, [&is_sent](RequestErr err) { check_error(err); is_sent = true; }); WAIT_UNTIL(is_sent) SyncOpts opts; opts.timeout = 0; bob_http->sync( opts, [bob = bob_olm, SECRET_TEXT](const mtx::responses::Sync &res, RequestErr err) { check_error(err); assert(!res.to_device.empty()); assert(res.to_device.size() == 1); OlmMessage olm_msg = res.to_device[0]; auto cipher = olm_msg.ciphertext.begin(); EXPECT_EQ(cipher->first, bob->identity_keys().curve25519); const auto msg_body = cipher->second.body; const auto msg_type = cipher->second.type; assert(msg_type == 0); auto inbound_session = bob->create_inbound_session(msg_body); ASSERT_TRUE(matches_inbound_session_from( inbound_session.get(), olm_msg.sender_key, msg_body)); auto output = bob->decrypt_message(inbound_session.get(), msg_type, msg_body); // Parsing the original plaintext json object. auto plaintext = json::parse(std::string((char *)output.data(), output.size())); std::string secret = plaintext.at("content").at("secret"); ASSERT_EQ(secret, SECRET_TEXT); }); alice_http->close(); bob_http->close(); } TEST(Encryption, PickleAccount) { auto alice = std::make_shared(); alice->create_new_account(); alice->generate_one_time_keys(10); auto alice_pickled = pickle(alice->account(), "secret"); auto bob = std::make_shared(); bob->restore_account(alice_pickled, "secret"); EXPECT_EQ(json(bob->identity_keys()).dump(), json(alice->identity_keys()).dump()); EXPECT_EQ(json(bob->one_time_keys()).dump(), json(alice->one_time_keys()).dump()); auto carl = std::make_shared(); // BAD_ACCOUNT_KEY EXPECT_THROW(carl->restore_account(alice_pickled, "another_secret"), olm_exception); } TEST(Encryption, PickleOlmSessions) { auto alice = std::make_shared(); alice->create_new_account(); auto bob = std::make_shared(); bob->create_new_account(); bob->generate_one_time_keys(1); std::string bob_key = bob->identity_keys().curve25519; std::string bob_one_time_key = bob->one_time_keys().curve25519.begin()->second; auto outbound_session = alice->create_outbound_session(bob_key, bob_one_time_key); auto initial_session_id = session_id(outbound_session.get()); auto plaintext = "Hello, Bob!"; size_t msgtype = olm_encrypt_message_type(outbound_session.get()); auto ciphertext = alice->encrypt_message(outbound_session.get(), plaintext); auto ciphertext_str = std::string((char *)ciphertext.data(), ciphertext.size()); EXPECT_EQ(msgtype, 0); auto saved_outbound_session = pickle(outbound_session.get(), "wat"); auto restored_outbound_session = unpickle(saved_outbound_session, "wat"); EXPECT_EQ(session_id(restored_outbound_session.get()), initial_session_id); EXPECT_THROW(unpickle(saved_outbound_session, "another_secret"), olm_exception); msgtype = olm_encrypt_message_type(restored_outbound_session.get()); EXPECT_EQ(msgtype, 0); auto restored_ciphertext = alice->encrypt_message(restored_outbound_session.get(), plaintext); auto restored_ciphertext_str = std::string((char *)restored_ciphertext.data(), restored_ciphertext.size()); auto inbound_session = bob->create_inbound_session(ciphertext_str); auto saved_inbound_session = pickle(inbound_session.get(), "woot"); auto restored_inbound_session = unpickle(saved_inbound_session, "woot"); EXPECT_THROW(unpickle(saved_inbound_session, "another_secret"), olm_exception); ASSERT_EQ(1, matches_inbound_session(inbound_session.get(), ciphertext_str)); ASSERT_EQ(1, matches_inbound_session(inbound_session.get(), restored_ciphertext_str)); ASSERT_EQ(1, matches_inbound_session(restored_inbound_session.get(), restored_ciphertext_str)); ASSERT_EQ(1, matches_inbound_session(restored_inbound_session.get(), ciphertext_str)); auto d1 = bob->decrypt_message(inbound_session.get(), msgtype, ciphertext_str); auto d2 = bob->decrypt_message(restored_inbound_session.get(), msgtype, ciphertext_str); auto d3 = bob->decrypt_message(inbound_session.get(), msgtype, restored_ciphertext_str); auto d4 = bob->decrypt_message(restored_inbound_session.get(), msgtype, restored_ciphertext_str); EXPECT_EQ(d1, d2); EXPECT_EQ(d2, d3); EXPECT_EQ(d3, d4); EXPECT_EQ(d1, d4); EXPECT_EQ(d2, d4); EXPECT_EQ(std::string((char *)d1.data(), d1.size()), "Hello, Bob!"); } TEST(Encryption, PickleMegolmSessions) { // Outbound Session auto alice = make_shared(); alice->create_new_account(); auto outbound_session = alice->init_outbound_group_session(); const auto original_session_id = mtx::crypto::session_id(outbound_session.get()); const auto original_session_key = mtx::crypto::session_key(outbound_session.get()); auto saved_session = pickle(outbound_session.get(), "secret"); auto restored_outbound_session = unpickle(saved_session, "secret"); const auto restored_session_id = mtx::crypto::session_id(restored_outbound_session.get()); const auto restored_session_key = mtx::crypto::session_key(restored_outbound_session.get()); EXPECT_EQ(original_session_id, restored_session_id); EXPECT_EQ(original_session_key, restored_session_key); // BAD_ACCOUNT_KEY EXPECT_THROW(unpickle(saved_session, "another_secret"), olm_exception); const auto SECRET = "Hello World!"; auto encrypted = alice->encrypt_group_message(outbound_session.get(), SECRET); auto ciphertext = std::string((char *)encrypted.data(), encrypted.size()); // Inbound Session auto inbound_session = alice->init_inbound_group_session(original_session_key); auto plaintext = alice->decrypt_group_message(inbound_session.get(), ciphertext); saved_session = pickle(inbound_session.get(), "secret"); auto restored_inbound_session = unpickle(saved_session, "secret"); auto restored_plaintext = alice->decrypt_group_message(restored_inbound_session.get(), ciphertext); EXPECT_EQ( std::string((char *)plaintext.data.data(), plaintext.data.size()), std::string((char *)restored_plaintext.data.data(), restored_plaintext.data.size())); EXPECT_EQ(std::string((char *)plaintext.data.data(), plaintext.data.size()), SECRET); } TEST(Base64, EncodingDecoding) { std::string random_str = "+7TE+9qmFWHPnrBLd03MtoXsRlhYaQt2tLBg4kZJI+NFcXVxqNUI1S3c97eV8aVgSj1/" "eo8PsnRNO29c2TgPLXvah2GDl90ehHjzH/" "vMBJKPdqyE31ch7NYBgvLBVoesrRyDoIYDlbRhHiRDTmLKMC55WN1YvDJu2Pvg3WxZiANobk" "0EPzHABqOYLaYiVxFrdko7mm8pDZXlatys+dvLv9Zf6lxfd/5MPK1C52m/UhnrZ3shS/" "XBzxRfBikZQjl7C9IMo7l170ffipN8QHb5LmZlj4V41DUJHCU="; EXPECT_EQ(base642bin(bin2base64(random_str)), random_str); EXPECT_EQ(bin2base64(base642bin(random_str)), random_str); } TEST(ExportSessions, EncryptDecrypt) { constexpr auto PASS = "secret_passphrase"; ExportedSession s1; s1.room_id = "!room_id:example.org"; s1.session_id = "sid"; s1.session_key = "skey"; ExportedSessionKeys keys; keys.sessions = {s1, s1, s1}; std::string ciphertext = mtx::crypto::encrypt_exported_sessions(keys, PASS); EXPECT_TRUE(ciphertext.size() > 0); auto encoded = bin2base64(ciphertext); auto decoded = base642bin(encoded); auto restored_keys = mtx::crypto::decrypt_exported_sessions(decoded, PASS); EXPECT_EQ(json(keys).dump(), json(restored_keys).dump()); } TEST(ExportSessions, InboundMegolmSessions) { auto alice = std::make_shared(); alice->create_new_account(); alice->generate_one_time_keys(1); auto bob = std::make_shared(); bob->create_new_account(); bob->generate_one_time_keys(1); // ==================== SESSION SETUP =================== // // Alice wants to send an encrypted megolm message to Bob. const std::string secret_message = "Hey, Bob!"; // Alice creates an outbound megolm session that will be used by both parties. auto outbound_megolm_session = alice->init_outbound_group_session(); auto msg_index = olm_outbound_group_session_message_index(outbound_megolm_session.get()); ASSERT_EQ(msg_index, 0); // Alice extracts the session id & session key so she can share them with Bob. const auto session_id = mtx::crypto::session_id(outbound_megolm_session.get()); const auto session_key = mtx::crypto::session_key(outbound_megolm_session.get()); // Encrypt the message using megolm. auto encrypted_secret_message = alice->encrypt_group_message(outbound_megolm_session.get(), secret_message); msg_index = olm_outbound_group_session_message_index(outbound_megolm_session.get()); ASSERT_EQ(msg_index, 1); // Bob will use the session_key to create an inbound megolm session. // The session_id will be used to map future messages to this session. auto inbound_megolm_session = bob->init_inbound_group_session(session_key); // Bob can finally decrypt Alice's original message. auto ciphertext = std::string((char *)encrypted_secret_message.data(), encrypted_secret_message.size()); auto bob_plaintext = bob->decrypt_group_message(inbound_megolm_session.get(), ciphertext); auto output_str = std::string((char *)bob_plaintext.data.data(), bob_plaintext.data.size()); ASSERT_EQ(output_str, secret_message); // ==================== SESSION IMPORT/EXPORT =================== // auto exported_session_key = export_session(inbound_megolm_session.get()); auto restored_inbound_session = import_session(exported_session_key); // Decrypt message again. auto restored_ciphertext = std::string((char *)encrypted_secret_message.data(), encrypted_secret_message.size()); auto restored_plaintext = bob->decrypt_group_message(restored_inbound_session.get(), restored_ciphertext); auto restored_output_str = std::string((char *)restored_plaintext.data.data(), restored_plaintext.data.size()); ASSERT_EQ(restored_output_str, secret_message); } TEST(Encryption, DISABLED_HandleRoomKeyEvent) {} TEST(Encryption, DISABLED_HandleRoomKeyRequestEvent) {} TEST(Encryption, DISABLED_HandleNewDevices) {} TEST(Encryption, DISABLED_HandleLeftDevices) {} TEST(Encryption, DISABLED_SendEncryptedMessageWithMegolm) {} TEST(Encryption, DISABLED_RotateMegolmSession) {} mtxclient-0.2.1/tests/errors.cpp000066400000000000000000000011351347137727200167200ustar00rootroot00000000000000#include #include using namespace mtx::errors; TEST(MatrixErrors, BasicError) { json data = R"({ "errcode": "M_UNRECOGNIZED", "error": "Unrecognized request" })"_json; Error err = data; EXPECT_EQ(err.errcode, ErrorCode::M_UNRECOGNIZED); EXPECT_EQ(err.error, "Unrecognized request"); json data2 = R"({ "errcode": "M_MISSING_TOKEN", "error": "Missing access token" })"_json; err = data2; EXPECT_EQ(err.errcode, ErrorCode::M_MISSING_TOKEN); EXPECT_EQ(err.error, "Missing access token"); } mtxclient-0.2.1/tests/events.cpp000066400000000000000000000714331347137727200167200ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; namespace ns = mtx::events; TEST(Events, Redaction) { json data = R"({ "unsigned": { "age": 146 }, "content": { "reason": "No reason" }, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "redacts": "$1521361675759563UDexf:matrix.org", "sender": "@example:localhost", "type": "m.room.redaction" })"_json; ns::RedactionEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomRedaction); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.redacts, "$1521361675759563UDexf:matrix.org"); EXPECT_EQ(event.content.reason, "No reason"); } TEST(Events, Conversions) { EXPECT_EQ("m.room.aliases", ns::to_string(ns::EventType::RoomAliases)); EXPECT_EQ("m.room.avatar", ns::to_string(ns::EventType::RoomAvatar)); EXPECT_EQ("m.room.canonical_alias", ns::to_string(ns::EventType::RoomCanonicalAlias)); EXPECT_EQ("m.room.create", ns::to_string(ns::EventType::RoomCreate)); EXPECT_EQ("m.room.guest_access", ns::to_string(ns::EventType::RoomGuestAccess)); EXPECT_EQ("m.room.history_visibility", ns::to_string(ns::EventType::RoomHistoryVisibility)); EXPECT_EQ("m.room.join_rules", ns::to_string(ns::EventType::RoomJoinRules)); EXPECT_EQ("m.room.member", ns::to_string(ns::EventType::RoomMember)); EXPECT_EQ("m.room.message", ns::to_string(ns::EventType::RoomMessage)); EXPECT_EQ("m.room.name", ns::to_string(ns::EventType::RoomName)); EXPECT_EQ("m.room.power_levels", ns::to_string(ns::EventType::RoomPowerLevels)); EXPECT_EQ("m.room.topic", ns::to_string(ns::EventType::RoomTopic)); EXPECT_EQ("m.room.redaction", ns::to_string(ns::EventType::RoomRedaction)); EXPECT_EQ("m.room.pinned_events", ns::to_string(ns::EventType::RoomPinnedEvents)); EXPECT_EQ("m.tag", ns::to_string(ns::EventType::Tag)); } TEST(StateEvents, Aliases) { json data = R"({ "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "aliases": [ "#somewhere:localhost", "#another:localhost" ] }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example:localhost", "state_key": "localhost", "type": "m.room.aliases" })"_json; ns::StateEvent aliases = data; EXPECT_EQ(aliases.type, ns::EventType::RoomAliases); EXPECT_EQ(aliases.event_id, "$WLGTSEFSEF:localhost"); EXPECT_EQ(aliases.room_id, "!Cuyf34gef24t:localhost"); EXPECT_EQ(aliases.sender, "@example:localhost"); EXPECT_EQ(aliases.unsigned_data.age, 242352); EXPECT_EQ(aliases.unsigned_data.transaction_id, "txnid"); EXPECT_EQ(aliases.origin_server_ts, 1431961217939L); EXPECT_EQ(aliases.state_key, "localhost"); EXPECT_EQ(aliases.content.aliases.size(), 2); EXPECT_EQ(aliases.content.aliases[0], "#somewhere:localhost"); EXPECT_EQ(aliases.content.aliases[1], "#another:localhost"); } TEST(StateEvents, Avatar) { json data = R"({ "origin_server_ts": 1506762071625, "sender": "@mujx:matrix.org", "event_id": "$15067620711415511reUFC:matrix.org", "age": 3717700323, "unsigned": { "age": 3717700323 }, "state_key": "", "content": { "url": "mxc://matrix.org/EPKcIsAPzREMrvZIjrIuJnEl" }, "room_id": "!VaMCVKSVcyPtXbcMXh:matrix.org", "user_id": "@mujx:matrix.org", "type": "m.room.avatar" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomAvatar); EXPECT_EQ(event.event_id, "$15067620711415511reUFC:matrix.org"); EXPECT_EQ(event.room_id, "!VaMCVKSVcyPtXbcMXh:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.unsigned_data.age, 3717700323); EXPECT_EQ(event.origin_server_ts, 1506762071625L); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.url, "mxc://matrix.org/EPKcIsAPzREMrvZIjrIuJnEl"); } TEST(StateEvents, CanonicalAlias) { json data = R"({ "origin_server_ts": 1506762071625, "sender": "@mujx:matrix.org", "event_id": "$15067620711415511reUFC:matrix.org", "age": 3717700323, "unsigned": { "age": 3717700323 }, "state_key": "", "content": { "alias": "#alias:matrix.org" }, "room_id": "!VaMCVKSVcyPtXbcMXh:matrix.org", "user_id": "@mujx:matrix.org", "type": "m.room.canonical_alias" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomCanonicalAlias); EXPECT_EQ(event.event_id, "$15067620711415511reUFC:matrix.org"); EXPECT_EQ(event.room_id, "!VaMCVKSVcyPtXbcMXh:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.unsigned_data.age, 3717700323); EXPECT_EQ(event.origin_server_ts, 1506762071625L); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.alias, "#alias:matrix.org"); } TEST(StateEvents, Create) { json data = R"({ "origin_server_ts": 1506761923948, "sender": "@mujx:matrix.org", "event_id": "$15067619231414398jhvQC:matrix.org", "unsigned": { "age": 3715756343 }, "state_key": "", "content": { "creator": "@mujx:matrix.org" }, "type": "m.room.create" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomCreate); EXPECT_EQ(event.event_id, "$15067619231414398jhvQC:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.unsigned_data.age, 3715756343L); EXPECT_EQ(event.origin_server_ts, 1506761923948L); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.creator, "@mujx:matrix.org"); } TEST(StateEvents, GuestAccess) { json data = R"({ "origin_server_ts": 1506761923948, "sender": "@mujx:matrix.org", "event_id": "$15067619231414398jhvQC:matrix.org", "unsigned": { "age": 3715756343 }, "state_key": "", "content": { "guest_access": "can_join" }, "type": "m.room.guest_access" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomGuestAccess); EXPECT_EQ(event.event_id, "$15067619231414398jhvQC:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.unsigned_data.age, 3715756343L); EXPECT_EQ(event.origin_server_ts, 1506761923948L); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.guest_access, mtx::events::state::AccessState::CanJoin); } TEST(StateEvents, HistoryVisibility) { json data = R"({ "origin_server_ts": 1510473133072, "sender": "@nheko_test:matrix.org", "event_id": "$15104731332646268uOFJp:matrix.org", "unsigned": { "age": 140 }, "state_key": "", "content": { "history_visibility": "shared" }, "type": "m.room.history_visibility", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomHistoryVisibility); EXPECT_EQ(event.event_id, "$15104731332646268uOFJp:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510473133072L); EXPECT_EQ(event.unsigned_data.age, 140); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.history_visibility, ns::state::Visibility::Shared); json data2 = R"({ "origin_server_ts": 1510476778190, "sender": "@nheko_test:matrix.org", "event_id": "$15104767782674661tXoeB:matrix.org", "unsigned": { "prev_content": { "history_visibility": "shared" }, "prev_sender": "@nheko_test:matrix.org", "replaces_state": "$15104731332646268uOFJp:matrix.org", "age": 48 }, "state_key": "", "content": { "history_visibility": "invited" }, "type": "m.room.history_visibility", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; ns::StateEvent event2 = data2; EXPECT_EQ(event2.type, ns::EventType::RoomHistoryVisibility); EXPECT_EQ(event2.event_id, "$15104767782674661tXoeB:matrix.org"); EXPECT_EQ(event2.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event2.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event2.origin_server_ts, 1510476778190L); EXPECT_EQ(event2.unsigned_data.age, 48); EXPECT_EQ(event2.unsigned_data.replaces_state, "$15104731332646268uOFJp:matrix.org"); EXPECT_EQ(event2.state_key, ""); EXPECT_EQ(event2.content.history_visibility, ns::state::Visibility::Invited); } TEST(StateEvents, JoinRules) { json data = R"({ "origin_server_ts": 1506761924018, "sender": "@mujx:matrix.org", "event_id": "$15067619241414401ASocy:matrix.org", "unsigned": { "age": 3715756273 }, "state_key": "", "content": { "join_rule": "invite" }, "type": "m.room.join_rules" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomJoinRules); EXPECT_EQ(event.event_id, "$15067619241414401ASocy:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.unsigned_data.age, 3715756273); EXPECT_EQ(event.origin_server_ts, 1506761924018L); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.join_rule, ns::state::JoinRule::Invite); } TEST(StateEvents, Member) { json data = R"({ "origin_server_ts": 1510473132947, "sender": "@nheko_test:matrix.org", "event_id": "$15104731322646264oUPqj:matrix.org", "unsigned": { "age": 72 }, "state_key": "@nheko_test:matrix.org", "content": { "membership": "join", "avatar_url": "mxc://matrix.org/JKiSOBDDxCHxmaLAgoQwSAHa", "displayname": "NhekoTest" }, "membership": "join", "type": "m.room.member", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomMember); EXPECT_EQ(event.event_id, "$15104731322646264oUPqj:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510473132947L); EXPECT_EQ(event.unsigned_data.age, 72); EXPECT_EQ(event.state_key, "@nheko_test:matrix.org"); EXPECT_EQ(event.content.membership, ns::state::Membership::Join); EXPECT_EQ(event.content.display_name, "NhekoTest"); EXPECT_EQ(event.content.avatar_url, "mxc://matrix.org/JKiSOBDDxCHxmaLAgoQwSAHa"); json data2 = R"({ "prev_content": { "membership": "join", "avatar_url": "mxc://matrix.org/IvqcnGakfvwwKeZxbJWhblFp", "displayname": "NhekoTest" }, "origin_server_ts": 1509214100884, "sender": "@nheko_test:matrix.org", "event_id": "$15092141005099019aHvYG:matrix.org", "age": 1259000688, "unsigned": { "prev_content": { "membership": "join", "avatar_url": "mxc://matrix.org/IvqcnGakfvwwKeZxbJWhblFp", "displayname": "NhekoTest" }, "prev_sender": "@nheko_test:matrix.org", "replaces_state": "$15092124385075888YpYOh:matrix.org", "age": 1259000688 }, "state_key": "@nheko_test:matrix.org", "content": { "membership": "join", "avatar_url": "mxc://matrix.org/JKiSOBDDxCHxmaLAgoQwSAHa", "displayname": "NhekoTest" }, "membership": "join", "room_id": "!VaMCVKSVcyPtXbcMXh:matrix.org", "user_id": "@nheko_test:matrix.org", "replaces_state": "$15092124385075888YpYOh:matrix.org", "type": "m.room.member" })"_json; ns::StateEvent event2 = data2; EXPECT_EQ(event2.type, ns::EventType::RoomMember); EXPECT_EQ(event2.event_id, "$15092141005099019aHvYG:matrix.org"); EXPECT_EQ(event2.room_id, "!VaMCVKSVcyPtXbcMXh:matrix.org"); EXPECT_EQ(event2.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event2.origin_server_ts, 1509214100884L); EXPECT_EQ(event2.unsigned_data.replaces_state, "$15092124385075888YpYOh:matrix.org"); EXPECT_EQ(event2.unsigned_data.age, 1259000688); EXPECT_EQ(event2.unsigned_data.age, 1259000688); EXPECT_EQ(event2.state_key, "@nheko_test:matrix.org"); EXPECT_EQ(event2.content.membership, ns::state::Membership::Join); EXPECT_EQ(event2.content.display_name, "NhekoTest"); EXPECT_EQ(event2.content.avatar_url, "mxc://matrix.org/JKiSOBDDxCHxmaLAgoQwSAHa"); } TEST(StateEvents, Name) { json data = R"({ "origin_server_ts": 1510473133142, "sender": "@nheko_test:matrix.org", "event_id": "$15104731332646270uaKBS:matrix.org", "unsigned": { "age": 70 }, "state_key": "", "content": { "name": "Random name" }, "type": "m.room.name", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomName); EXPECT_EQ(event.event_id, "$15104731332646270uaKBS:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510473133142L); EXPECT_EQ(event.unsigned_data.age, 70); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.name, "Random name"); } TEST(StateEvents, PinnedEvents) { json data = R"({ "unsigned": { "age": 242352 }, "content": { "pinned": [ "$one:localhost", "$two:localhost", "$three:localhost" ] }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "sender": "@example:localhost", "state_key": "", "type": "m.room.pinned_events" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomPinnedEvents); EXPECT_EQ(event.event_id, "$WLGTSEFSEF:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1431961217939L); EXPECT_EQ(event.unsigned_data.age, 242352); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.pinned.size(), 3); EXPECT_EQ(event.content.pinned[0], "$one:localhost"); EXPECT_EQ(event.content.pinned[1], "$two:localhost"); EXPECT_EQ(event.content.pinned[2], "$three:localhost"); } TEST(StateEvents, PowerLevels) { json data = R"({ "origin_server_ts": 1506761923995, "sender": "@mujx:matrix.org", "event_id": "$15067619231414400iQDgf:matrix.org", "unsigned": { "age": 3715756296 }, "state_key": "", "content": { "events_default": 0, "invite": 0, "state_default": 50, "redact": 50, "ban": 50, "users_default": 0, "kick": 50, "events": { "m.room.avatar": 29, "m.room.name": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 120, "m.room.power_levels": 109 }, "users": { "@mujx:matrix.org": 30 } }, "type": "m.room.power_levels" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomPowerLevels); EXPECT_EQ(event.event_id, "$15067619231414400iQDgf:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1506761923995); EXPECT_EQ(event.unsigned_data.age, 3715756296); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.kick, 50); EXPECT_EQ(event.content.ban, 50); EXPECT_EQ(event.content.invite, 0); EXPECT_EQ(event.content.redact, 50); EXPECT_EQ(event.content.events_default, 0); EXPECT_EQ(event.content.users_default, 0); EXPECT_EQ(event.content.state_default, 50); EXPECT_EQ(event.content.events.size(), 5); EXPECT_EQ(event.content.events["m.room.name"], 50); EXPECT_EQ(event.content.events["m.room.avatar"], 29); EXPECT_EQ(event.content.events["m.room.canonical_alias"], 50); EXPECT_EQ(event.content.events["m.room.history_visibility"], 120); EXPECT_EQ(event.content.events["m.room.power_levels"], 109); EXPECT_EQ(event.content.users.size(), 1); EXPECT_EQ(event.content.users["@mujx:matrix.org"], 30); EXPECT_EQ(event.content.event_level("m.room.name"), 50); EXPECT_EQ(event.content.event_level("m.room.avatar"), 29); EXPECT_EQ(event.content.event_level("m.room.canonical_alias"), 50); EXPECT_EQ(event.content.event_level("m.room.history_visibility"), 120); EXPECT_EQ(event.content.event_level("m.room.power_levels"), 109); EXPECT_EQ(event.content.event_level("m.custom.event"), event.content.events_default); EXPECT_EQ(event.content.user_level("@mujx:matrix.org"), 30); EXPECT_EQ(event.content.user_level("@not:matrix.org"), event.content.users_default); } TEST(StateEvents, Topic) { json data = R"({ "origin_server_ts": 1510476064445, "sender": "@nheko_test:matrix.org", "event_id": "$15104760642668662QICBu:matrix.org", "unsigned": { "age": 37 }, "state_key": "", "content": { "topic": "Test topic" }, "type": "m.room.topic", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; ns::StateEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomTopic); EXPECT_EQ(event.event_id, "$15104760642668662QICBu:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510476064445); EXPECT_EQ(event.unsigned_data.age, 37); EXPECT_EQ(event.state_key, ""); EXPECT_EQ(event.content.topic, "Test topic"); } TEST(RoomEvents, OlmEncrypted) { json data = R"({ "content": { "algorithm": "m.olm.v1.curve25519-aes-sha2", "ciphertext": { "1OaiUJ7OfIEGAtnMQyTPFi9Ou6LD5UjSZ4eMk6WzI3E": { "body": "AwogkcAq9+r4YNvCwvBXmipeM30ZVhVDYBWPZ.......69/rEhCK38SIILvCA5NvEH", "type": 0 } }, "sender_key": "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA" }, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "sender": "@example:localhost", "type": "m.room.encrypted", "unsigned": { "age": 146, "transaction_id": "m1476648745605.19" } })"_json; ns::EncryptedEvent event = data; const auto key = event.content.ciphertext.begin()->first; EXPECT_EQ(event.type, ns::EventType::RoomEncrypted); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.content.algorithm, "m.olm.v1.curve25519-aes-sha2"); EXPECT_EQ(event.content.ciphertext.at(key).type, 0); EXPECT_EQ(event.content.ciphertext.at(key).body, "AwogkcAq9+r4YNvCwvBXmipeM30ZVhVDYBWPZ.......69/rEhCK38SIILvCA5NvEH"); EXPECT_EQ(event.content.sender_key, "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA"); ns::msg::OlmEncrypted e1; e1.algorithm = "m.olm.v1.curve25519-aes-sha2"; e1.ciphertext = { {"1OaiUJ7OfIEGAtnMQyTPFi9Ou6LD5UjSZ4eMk6WzI3E", {"AwogkcAq9+r4YNvCwvBXmipeM30ZVhVDYBWPZ.......69/rEhCK38SIILvCA5NvEH", 0}}}; e1.sender_key = "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA"; json j = e1; ASSERT_EQ( j.dump(), "{\"algorithm\":\"m.olm.v1.curve25519-aes-sha2\"," "\"ciphertext\":{\"1OaiUJ7OfIEGAtnMQyTPFi9Ou6LD5UjSZ4eMk6WzI3E\":{\"body\":\"AwogkcAq9+" "r4YNvCwvBXmipeM30ZVhVDYBWPZ.......69/rEhCK38SIILvCA5NvEH\",\"type\":0}}," "\"sender_key\":\"IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA\"}"); } TEST(RoomEvents, Encrypted) { json data = R"({ "content": { "algorithm": "m.megolm.v1.aes-sha2", "ciphertext": "AwgAEnACgAkLmt6qF84IK++J7UDH2Za1YVchHyprqTqsg2yyOwAtHaZTwyNg37afzg8f3r9IsN9r4RNFg7MaZencUJe4qvELiDiopUjy5wYVDAtqdBzer5bWRD9ldxp1FLgbQvBcjkkywYjCsmsq6+hArLd9oAQZnGKn/qLsK+5uNX3PaWzDRC9wZPQvWYYPCTov3jCwXKTPsLKIiTrcCXDqMvnn8m+T3zF/I2zqxg158tnUwWWIw51UO", "device_id": "RJYKSTBOIE", "sender_key": "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA", "session_id": "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ" }, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "sender": "@example:localhost", "type": "m.room.encrypted", "unsigned": { "age": 146, "transaction_id": "m1476648745605.19" } })"_json; ns::EncryptedEvent event = data; EXPECT_EQ(event.type, ns::EventType::RoomEncrypted); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.content.algorithm, "m.megolm.v1.aes-sha2"); EXPECT_EQ( event.content.ciphertext, "AwgAEnACgAkLmt6qF84IK++" "J7UDH2Za1YVchHyprqTqsg2yyOwAtHaZTwyNg37afzg8f3r9IsN9r4RNFg7MaZencUJe4qvELiDiopUjy5wYVDAt" "qdBzer5bWRD9ldxp1FLgbQvBcjkkywYjCsmsq6+hArLd9oAQZnGKn/" "qLsK+5uNX3PaWzDRC9wZPQvWYYPCTov3jCwXKTPsLKIiTrcCXDqMvnn8m+T3zF/I2zqxg158tnUwWWIw51UO"); EXPECT_EQ(event.content.device_id, "RJYKSTBOIE"); EXPECT_EQ(event.content.sender_key, "IlRMeOPX2e0MurIyfWEucYBRVOEEUMrOHqn/8mLqMjA"); EXPECT_EQ(event.content.session_id, "X3lUlvLELLYxeTx4yOVu6UDpasGEVO0Jbu+QFnm0cKQ"); ns::msg::Encrypted e1; e1.algorithm = "m.megolm.v1.aes-sha2"; e1.ciphertext = "AwgAEoABgw1DG6mgKwvrAJU+V7jPu3poEaujNWPnMtIO6+1kFHzEcK6vbYpbg/WlPq/" "B23wqKWJ3DIaBsV305VdpisGK7dMN5WgnnTp9JhtztxpCuXnX92rWFBUFM9+" "PC5xVJExVBm1qwv8xgWjD5NFqfcVsZ3jLGbGiftPHairq8bxPxTsjrblMHLpXyXLhK6A7YGTey" "okcrdXS+IQ4Apq1RLP+kw5RF6M8a/aK3UhUlSAf7OLjaj/03qEwE3TGNaBbLBdOxzoGpxNfQ8"; e1.device_id = "YEGDJGLQTZ"; e1.sender_key = "FyYq6RrnjvsIw0XLGF1jHYlorPgDmJQd15lMJw3D7QI"; e1.session_id = "/bHcdWPHsJLFd8dkyvG0n7q/RTDmfBIc+gC4laHJCQQ"; json j = e1; ASSERT_EQ( j.dump(), "{\"algorithm\":\"m.megolm.v1.aes-sha2\"," "\"ciphertext\":\"AwgAEoABgw1DG6mgKwvrAJU+V7jPu3poEaujNWPnMtIO6+1kFHzEcK6vbYpbg/" "WlPq/B23wqKWJ3DIaBsV305VdpisGK7dMN5WgnnTp9JhtztxpCuXnX92rWFBUFM9" "+PC5xVJExVBm1qwv8xgWjD5NFqfcVsZ3jLGbGiftPHairq8bxPxTsjrblMHLpXyXLhK6A7YGTeyokcrdXS" "+IQ4Apq1RLP+kw5RF6M8a/aK3UhUlSAf7OLjaj/03qEwE3TGNaBbLBdOxzoGpxNfQ8\"," "\"device_id\":\"YEGDJGLQTZ\"," "\"sender_key\":\"FyYq6RrnjvsIw0XLGF1jHYlorPgDmJQd15lMJw3D7QI\"," "\"session_id\":\"/bHcdWPHsJLFd8dkyvG0n7q/RTDmfBIc+gC4laHJCQQ\"}"); } TEST(ToDevice, KeyRequest) { json request_data = R"({ "content": { "action": "request", "body": { "algorithm": "m.megolm.v1.aes-sha2", "room_id": "!iapLxlpZgOzqGnWkXR:matrix.org", "sender_key": "9im1n0bSYQpnF700sXJqAAYiqGgkyRqMZRdobj0kymY", "session_id": "oGj6sEDraRDf+NdmvZTI7urDJk/Z+i7TX2KFLbfMGlE" }, "request_id": "m1529936829480.0", "requesting_device_id": "GGUBYESVPI" }, "sender": "@mujx:matrix.org", "type": "m.room_key_request" })"_json; ns::msg::KeyRequest event = request_data; EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.type, mtx::events::EventType::RoomKeyRequest); EXPECT_EQ(event.action, ns::msg::RequestAction::Request); EXPECT_EQ(event.algorithm, "m.megolm.v1.aes-sha2"); EXPECT_EQ(event.room_id, "!iapLxlpZgOzqGnWkXR:matrix.org"); EXPECT_EQ(event.sender_key, "9im1n0bSYQpnF700sXJqAAYiqGgkyRqMZRdobj0kymY"); EXPECT_EQ(event.session_id, "oGj6sEDraRDf+NdmvZTI7urDJk/Z+i7TX2KFLbfMGlE"); EXPECT_EQ(event.request_id, "m1529936829480.0"); EXPECT_EQ(event.requesting_device_id, "GGUBYESVPI"); EXPECT_EQ(request_data.dump(), json(event).dump()); } TEST(ToDevice, KeyCancellation) { json cancellation_data = R"({ "content": { "action": "request_cancellation", "request_id": "m1529936829480.0", "requesting_device_id": "GGUBYESVPI" }, "sender": "@mujx:matrix.org", "type": "m.room_key_request" })"_json; ns::msg::KeyRequest event = cancellation_data; EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.type, mtx::events::EventType::RoomKeyRequest); EXPECT_EQ(event.action, ns::msg::RequestAction::Cancellation); EXPECT_EQ(event.request_id, "m1529936829480.0"); EXPECT_EQ(event.requesting_device_id, "GGUBYESVPI"); EXPECT_EQ(cancellation_data.dump(), json(event).dump()); } TEST(Collection, Events) { json data = R"({ "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "aliases": [ "#somewhere:localhost", "#another:localhost" ] }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example:localhost", "state_key": "localhost", "type": "m.room.aliases" })"_json; mtx::events::collections::TimelineEvent event = data; ASSERT_TRUE(boost::get>(&event.data) != nullptr); } TEST(RoomAccountData, Tag) { json data = R"({ "content": { "tags": { "m.favourite": { "order": 1 }, "u.Project1": { "order": 0 }, "com.example.nheko.text": { "associated_data": ["some", "json", "list"] } } }, "type": "m.tag" })"_json; ns::Event event = data; EXPECT_EQ(event.type, ns::EventType::Tag); EXPECT_EQ(event.content.tags.size(), 3); EXPECT_EQ(event.content.tags.at("m.favourite").at("order"), 1); EXPECT_EQ(event.content.tags.at("u.Project1").at("order"), 0); EXPECT_EQ(event.content.tags.at("com.example.nheko.text").at("associated_data").size(), 3); } mtxclient-0.2.1/tests/fixtures/000077500000000000000000000000001347137727200165515ustar00rootroot00000000000000mtxclient-0.2.1/tests/fixtures/kiwi.svg000066400000000000000000000045411347137727200202410ustar00rootroot00000000000000 mtxclient-0.2.1/tests/fixtures/responses/000077500000000000000000000000001347137727200205725ustar00rootroot00000000000000mtxclient-0.2.1/tests/fixtures/responses/sync.json000066400000000000000000115703211347137727200224530ustar00rootroot00000000000000{ "next_batch": "s333358558_324502987_444424_65663508_21685260_193623_2377336_2940807_454", "rooms": { "invite": {}, "join": { "!BPvgRcBVHzyFSlYkrg:matrix.org": { "account_data": { "events": [ { "content": { "tags": { "m.favourite": { "order": 0.8125 } } }, "type": "m.tag" }, { "content": { "event_id": "$15104028021825985fpivx:matrix.org" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "user_ids": [] }, "type": "m.typing" }, { "content": { "$1493012095444993JeMrW:matrix.org": { "m.read": { "@trilobite17:matrix.org": { "ts": 1493020945945 } } }, "$1493135885261887UVyOW:matrix.org": { "m.read": { "@aaron:matrix.org": { "ts": 1493161552008 } } }, "$149339947230ohuCC:krtdex.com": { "m.read": { "@walle303:matrix.eastcoast.hosting": { "ts": 1493404654684 } } }, "$1493556582917fOMpi:vurpo.fi": { "m.read": { "@matthew2:matrix.org": { "ts": 1493557057338 } } }, "$14935874261161012PaoJD:matrix.org": { "m.read": { "@frantisek:gajdusek.net": { "ts": 1493623595682 } } }, "$14948743207211HioSZ:exul.org": { "m.read": { "@xinode:matrix.org": { "ts": 1494877444637 } } }, "$14950054091437001SfkID:matrix.org": { "m.read": { "@TheKolomoets:matrix.org": { "ts": 1495011664367 } } }, "$1495172118401995cruhv:matrix.org": { "m.read": { "@deg_at_work:matrix.org": { "ts": 1495192761458 } } }, "$1495300071794194Cenbp:matrix.org": { "m.read": { "@QuuxNL:matrix.org": { "ts": 1495300577770 } } }, "$1495481772155098ENbWY:matrix.org": { "m.read": { "@Zeplin:matrix.org": { "ts": 1495521662715 }, "@htpl:matrix.org": { "ts": 1495501226736 } } }, "$14962195124841296SgSre:matrix.org": { "m.read": { "@david:davidar.io": { "ts": 1496222579974 } } }, "$1496237797195396SXuMj:matrix.org": { "m.read": { "@ha:matrix.org": { "ts": 1496237971710 } } }, "$14965219963087275qIdGW:matrix.org": { "m.read": { "@MTRNord:matrix.eclabs.de": { "ts": 1496567149796 } } }, "$1496568768458ndVtI:matrix.ffslfl.net": { "m.read": { "@moyamo:matrix.org": { "ts": 1496574007510 } } }, "$14967021351874MUjom:kolm.io": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1496703077346 } } }, "$14967030801758nOchr:half-shot.uk": { "m.read": { "@emblemparade:emblemparade.com": { "ts": 1496707740077 } } }, "$149675062837688zpfCm:matrix.org": { "m.read": { "@nheko_test:matrix.org": { "ts": 1496750725599 } } }, "$1498568057210NJFDv:msgs.tk": { "m.read": { "@ablebear368:matrix.org": { "ts": 1498585922389 } } }, "$14989283861068571vQxkg:matrix.org": { "m.read": { "@lime_:matrix.org": { "ts": 1498928512989 } } }, "$1499463902114ianUK:kolm.io": { "m.read": { "@Minijackson:matrix.org": { "ts": 1499506905177 } } }, "$14995287601654DixSO:terracrypt.net": { "m.read": { "@AX3L:matrix.org": { "ts": 1499530713797 } } }, "$1500129720758bAQkM:kolm.io": { "m.read": { "@am2on:atauno.com": { "ts": 1500330584915 } } }, "$150041869788ETDQN:raim.ist": { "m.read": { "@tx:matrix.org": { "ts": 1500450739556 } } }, "$15012837091730214tAQxR:matrix.org": { "m.read": { "@testminikr:banter.city": { "ts": 1501299321886 } } }, "$1501321724390Pxajn:matrix.ffslfl.net": { "m.read": { "@winterfox:matrix.org": { "ts": 1501330258027 } } }, "$15016487676552004uqwUH:matrix.org": { "m.read": { "@jearc:matrix.org": { "ts": 1501929054810 } } }, "$15019476882963147hXJDp:matrix.org": { "m.read": { "@sim6:matrix.org": { "ts": 1501947731536 } } }, "$1502659736913772gxqSB:matrix.org": { "m.read": { "@Ario:matrix.org": { "ts": 1502670187614 } } }, "$150303898911303ZzPly:kek.community": { "m.read": { "@April:matrix.org": { "ts": 1503061777792 } } }, "$15033405915327814mSXJF:matrix.org": { "m.read": { "@nebutronic:matrix.org": { "ts": 1503342031395 } } }, "$1503693068616PKpCU:matrix.ffslfl.net": { "m.read": { "@max_power:matrix.org": { "ts": 1503702105212 } } }, "$15051114821952245CSUyq:matrix.org": { "m.read": { "@jofa:matrix.org": { "ts": 1505218171830 } } }, "$150617287813067iYonq:disroot.org": { "m.read": { "@yep:matrix.org": { "ts": 1506177169147 } } }, "$150651211476MXbnW:vurpo.fi": { "m.read": { "@LottieVixen:matrix.org": { "ts": 1506512122031 } } }, "$1506711604896902iPdob:matrix.org": { "m.read": { "@ethan.c2h6:matrix.org": { "ts": 1506714397970 } } }, "$150681632724185klJqS:disroot.org": { "m.read": { "@PizzicatoWolf:matrix.org": { "ts": 1506822027645 } } }, "$15069472861946751iihMF:matrix.org": { "m.read": { "@bitman:matrix.org": { "ts": 1506947299022 } } }, "$1507299600149BAWBE:matrix.ffslfl.net": { "m.read": { "@fennecbyte:matrix.org": { "ts": 1507301874109 }, "@z3ntu:matrix.org": { "ts": 1507313400934 } } }, "$1507477790463aoJTz:matrix.ffslfl.net": { "m.read": { "@ollieparanoid:disroot.org": { "ts": 1507479833159 } } }, "$1507661011585987IQQzF:matrix.org": { "m.read": { "@kmmndr:matrix.org": { "ts": 1507663874158 } } }, "$15076999001102fxmbB:matrix.ffslfl.net": { "m.read": { "@gregknicholson:matrix.org": { "ts": 1507703889313 } } }, "$150773329051427ACqKx:matrix.org": { "m.read": { "@calher:matrix.org": { "ts": 1507792142854 } } }, "$1507888795551KhiJA:disroot.org": { "m.read": { "@karroffel:matrix.org": { "ts": 1507888798596 } } }, "$150826491012591iMMHo:ralith.com": { "m.read": { "@SijmenSchoon:matrix.org": { "ts": 1509040298449 } } }, "$15085542362280534pCdnb:matrix.org": { "m.read": { "@zwindl:matrix.org": { "ts": 1508561434265 } } }, "$1508615065298QhQKh:vurpo.fi": { "m.read": { "@liathit:matrix.org": { "ts": 1508681311566 } } }, "$1508681760290osIZp:krtdex.com": { "m.read": { "@fru:matrix.org": { "ts": 1508685444558 } } }, "$150873837021039xargb:ralith.com": { "m.read": { "@zach:ghostcorp.net": { "ts": 1508768909373 } } }, "$15093389722613jCgrC:matrix.heldscal.la": { "m.read": { "@RAOF:matrix.org": { "ts": 1509346512274 } } }, "$150938928855DYHbA:openpsychology.net": { "m.read": { "@mglsmn:matrix.org": { "ts": 1509393544758 } } }, "$150951576181ZBrER:krtdex.com": { "m.read": { "@asafniv1:matrix.org": { "ts": 1509515779566 } } }, "$1509519878207nIdAE:openpsychology.net": { "m.read": { "@kilogramm:matrix.org": { "ts": 1509521296498 } } }, "$15095681832964694OryuL:matrix.org": { "m.read": { "@lowee:matrix.org": { "ts": 1509568191929 } } }, "$1509645839256LDajy:krtdex.com": { "m.read": { "@carlosam:matrix.org": { "ts": 1509645861379 } } }, "$1509693169298YyJqd:krtdex.com": { "m.read": { "@pafcu:matrix.org": { "ts": 1509697649839 } } }, "$15096976554737206pXknL:matrix.org": { "m.read": { "@tompa:matrix.org": { "ts": 1509711846087 } } }, "$15097349098210bczZO:ralith.com": { "m.read": { "@nouts:matrix.org": { "ts": 1509737188650 } } }, "$15097521211657CWoTt:vurpo.fi": { "m.read": { "@fredix:matrix.org": { "ts": 1509757930154 } } }, "$150982159710333PeFVs:ralith.com": { "m.read": { "@simple.:matrix.org": { "ts": 1509821616889 } } }, "$150982362610447zrsYT:ralith.com": { "m.read": { "@musoke:matrix.org": { "ts": 1509823636919 } } }, "$15099631691558AYmQU:krtdex.com": { "m.read": { "@suy:matrix.org": { "ts": 1509963804786 } } }, "$15099909524147959BZZrp:matrix.org": { "m.read": { "@commagray:matrix.org": { "ts": 1509994345817 } } }, "$1510005476630NJoJI:safaradeg.net": { "m.read": { "@noperope:matrix.org": { "ts": 1510006008434 } } }, "$15100862111176KqOPD:kamax.io": { "m.read": { "@voyager:t2bot.io": { "ts": 1510086217087 } } }, "$151010054516703rMVjD:ralith.com": { "m.read": { "@nfsprodriver:matrix.org": { "ts": 1510100601673 } } }, "$151010562716775ueSVR:ralith.com": { "m.read": { "@kevin:potatofrom.space": { "ts": 1510109893100 } } }, "$151025916814904JfIEt:matrix.org": { "m.read": { "@m1nd:m1nd.io": { "ts": 1510270662727 } } }, "$15103354991030603SBgxW:matrix.org": { "m.read": { "@walle303:kek.community": { "ts": 1510337824267 } } }, "$15103558511376745cvgwM:matrix.org": { "m.read": { "@sven:matrix.nordlab-ev.de": { "ts": 1510363288286 } } }, "$15104062091862649ybZqU:matrix.org": { "m.read": { "@MTRNord:matrix.org": { "ts": 1510416368901 }, "@airin:matrix.org": { "ts": 1510407292797 } } }, "$15104249182091944Mkomx:matrix.org": { "m.read": { "@travis:t2l.io": { "ts": 1510431502403 } } }, "$15104381962271433tWlYy:matrix.org": { "m.read": { "@PhoenixLandPirate:matrix.org": { "ts": 1510630539168 }, "@Tokodomo:matrix.org": { "ts": 1510588032780 }, "@matthew:matrix.org": { "ts": 1510440324233 }, "@memoryruins:matrix.org": { "ts": 1510518443679 }, "@nagua:2hg.org": { "ts": 1510451215569 }, "@nioshd:matrix.org": { "ts": 1510521086750 }, "@strixaluco:matrix.org": { "ts": 1510538536116 }, "@vurpo:vurpo.fi": { "ts": 1510438197023 } } }, "$15106345441366160GiUzl:matrix.org": { "m.read": { "@uhoreg:matrix.org": { "ts": 1510635515885 } } }, "$15106371861399KUtur:openpsychology.net": { "m.read": { "@BrainBlasted:matrix.org": { "ts": 1510639037107 }, "@jon:terracrypt.net": { "ts": 1510637612962 } } }, "$151064068529149GZQtA:ralith.com": { "m.read": { "@JigmeDatse:openpsychology.net": { "ts": 1510640693934 }, "@aaron:raim.ist": { "ts": 1510640699392 } } }, "$151064073329151RXcMw:ralith.com": { "m.read": { "@dirb:matrix.heldscal.la": { "ts": 1510642775654 } } }, "$15106442712312XKRBB:krtdex.com": { "m.read": { "@PureTryOut:matrix.org": { "ts": 1510647627441 }, "@exul:exul.org": { "ts": 1510646246098 } } }, "$15106476461505786atmJh:matrix.org": { "m.read": { "@MTRNord:matrix.ffslfl.net": { "ts": 1510648456949 }, "@betrayer:matrix.org": { "ts": 1510648274212 }, "@bobderbaumeister:matrix.org": { "ts": 1510661170399 }, "@evse:matrix.org": { "ts": 1510653264832 }, "@jan.christian:gruenhage.xyz": { "ts": 1510663995382 }, "@karroffel:disroot.org": { "ts": 1510663928129 }, "@kitsune:matrix.org": { "ts": 1510653315835 }, "@krombel:msgs.tk": { "ts": 1510648088790 }, "@levans:safaradeg.net": { "ts": 1510647861915 }, "@max:kamax.io": { "ts": 1510659046636 }, "@mujx:matrix.org": { "ts": 1510667872833 }, "@ralith:ralith.com": { "ts": 1510649421055 }, "@rokups:matrix.org": { "ts": 1510655714083 }, "@seequ:krtdex.com": { "ts": 1510647662007 }, "@yaniel:kolm.io": { "ts": 1510653798546 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "avatar_url": "mxc://vurpo.fi/rAVYYdwTozdZslBFduliksPR", "displayname": "vurpo", "membership": "join" }, "event_id": "$1509487241671IXXUL:vurpo.fi", "membership": "join", "origin_server_ts": 1509487241632, "sender": "@vurpo:vurpo.fi", "state_key": "@vurpo:vurpo.fi", "type": "m.room.member", "unsigned": { "age": 1180711046, "prev_content": { "avatar_url": "mxc://vurpo.fi/dEKpSjbzDlMftunBLxhPACWo", "displayname": "vurpo", "membership": "join" }, "prev_sender": "@vurpo:vurpo.fi", "replaces_state": "$1508011796158ODQlp:vurpo.fi" } }, { "content": { "avatar_url": null, "displayname": "Pizzicato Wolf", "membership": "join" }, "event_id": "$1502703618345905qcdqv:matrix.org", "membership": "join", "origin_server_ts": 1502703618598, "sender": "@PizzicatoWolf:matrix.org", "state_key": "@PizzicatoWolf:matrix.org", "type": "m.room.member", "unsigned": { "age": 7964334080 } }, { "content": { "avatar_url": "mxc://davidar.io/cOYetNDarmZwGRtxaKIntyJn", "displayname": "davidar", "membership": "join" }, "event_id": "$1493007332518xaCcX:davidar.io", "origin_server_ts": 1493007332633, "sender": "@david:davidar.io", "state_key": "@david:davidar.io", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "github": { "default_repo": "mujx/nheko" } }, "event_id": "$1506709067854020GhnpN:matrix.org", "origin_server_ts": 1506709067538, "sender": "@mujx:matrix.org", "state_key": "_@_neb_github:matrix.org", "type": "m.room.bot.options", "unsigned": { "age": 3958885140 } }, { "content": { "membership": "leave" }, "event_id": "$150129933326995AjpAg:banter.city", "membership": "leave", "origin_server_ts": 1501299333680, "sender": "@testminikr:banter.city", "state_key": "@testminikr:banter.city", "type": "m.room.member", "unsigned": { "age": 9368618998, "prev_content": { "avatar_url": null, "displayname": "testminikr", "membership": "join" }, "prev_sender": "@testminikr:banter.city", "replaces_state": "$150087595521309ruiey:banter.city" } }, { "content": { "avatar_url": "mxc://matrix.org/hsJBWSKOjvUPjxNNOHTVfMid", "displayname": "zwindl", "membership": "join" }, "event_id": "$1493565620905072ZsChr:matrix.org", "membership": "join", "origin_server_ts": 1493565620256, "sender": "@zwindl:matrix.org", "state_key": "@zwindl:matrix.org", "type": "m.room.member", "unsigned": { "age": 17102332422 } }, { "content": { "avatar_url": "mxc://kek.community/TJtugdaBqBJuINxDfCYvrXaf", "displayname": "walle303", "membership": "join" }, "event_id": "$150303898911303ZzPly:kek.community", "membership": "join", "origin_server_ts": 1503038989087, "sender": "@walle303:kek.community", "state_key": "@walle303:kek.community", "type": "m.room.member", "unsigned": { "age": 7628963591, "prev_content": { "avatar_url": "mxc://kek.community/zfMDWhcIdyIgULdfBBRuRQPj", "displayname": "walle303", "membership": "join" }, "prev_sender": "@walle303:kek.community", "replaces_state": "$149309046750ctgQZ:kek.community" } }, { "content": { "avatar_url": "mxc://matrix.org/OTwzRbBmrqwemBNaGtOTIwoN", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15068893911313569eYKpy:matrix.org", "membership": "join", "origin_server_ts": 1506889391444, "sender": "@MTRNord:matrix.org", "state_key": "@MTRNord:matrix.org", "type": "m.room.member", "unsigned": { "age": 3778561234, "replaces_state": "$1506889316414MzZvk:matrix.ffslfl.net" } }, { "content": { "membership": "leave" }, "event_id": "$15069473181947182jCDtl:matrix.org", "membership": "leave", "origin_server_ts": 1506947318530, "sender": "@bitman:matrix.org", "state_key": "@bitman:matrix.org", "type": "m.room.member", "unsigned": { "age": 3720634148, "replaces_state": "$1506843838804192DvcRx:matrix.org" } }, { "content": { "avatar_url": "mxc://gruenhage.xyz/HOkBeFWIoDOiuDxqXHPrFLUE", "displayname": "jcgruenhage", "membership": "join" }, "event_id": "$1510385952389yFPMx:gruenhage.xyz", "membership": "join", "origin_server_ts": 1510385952373, "sender": "@jan.christian:gruenhage.xyz", "state_key": "@jan.christian:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 282000305, "prev_content": { "avatar_url": "mxc://gruenhage.xyz/QsgpIokavDaHBQhAohxCpvVS", "displayname": "jcgruenhage", "membership": "join" }, "prev_sender": "@jan.christian:gruenhage.xyz", "replaces_state": "$1507996728515YbKoy:gruenhage.xyz" } }, { "content": { "url": "mxc://matrix.org/pFUfshTtyiLsZAODtmHOOLop" }, "event_id": "$1492979180130021xdrUS:matrix.org", "origin_server_ts": 1492979180466, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 17688772212, "replaces_state": "$1492979175129974UYDGf:matrix.org" } }, { "content": { "avatar_url": "mxc://kolm.io/IDCMlXKxLvjrXMYjiRqOgBTA", "displayname": "Yaniel", "membership": "join" }, "event_id": "$14971688942319vLJYN:kolm.io", "membership": "join", "origin_server_ts": 1497168894416, "sender": "@yaniel:kolm.io", "state_key": "@yaniel:kolm.io", "type": "m.room.member", "unsigned": { "age": 13499058262, "prev_content": { "avatar_url": "mxc://kolm.io/eaaRXvqUPJZAWiHDgRsFxiui", "displayname": "Yaniel", "membership": "join" }, "prev_sender": "@yaniel:kolm.io", "replaces_state": "$149530459630EwfGO:kolm.io" } }, { "content": { "avatar_url": "mxc://home.shrike.me/iNujBfwoycHLsXIJwZwuOYJF", "displayname": "Shrike", "membership": "join" }, "event_id": "$150010245316sLrCS:home.shrike.me", "origin_server_ts": 1500102453175, "sender": "@Shrike:home.shrike.me", "state_key": "@Shrike:home.shrike.me", "type": "m.room.member", "unsigned": { "age": 25 } }, { "content": { "creator": "@mujx:matrix.org" }, "event_id": "$1492978955127158hOXMQ:matrix.org", "origin_server_ts": 1492978955508, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.create", "unsigned": { "age": 17688997170 } }, { "content": { "avatar_url": null, "displayname": "nagua", "membership": "join" }, "event_id": "$14933636741LjAuq:2hg.org", "origin_server_ts": 1493363674219, "sender": "@nagua:2hg.org", "state_key": "@nagua:2hg.org", "type": "m.room.member", "unsigned": { "age": 23 } }, { "content": { "membership": "leave" }, "event_id": "$1509393820583784ryIYQ:matrix.org", "membership": "leave", "origin_server_ts": 1509393820942, "sender": "@mglsmn:matrix.org", "state_key": "@mglsmn:matrix.org", "type": "m.room.member", "unsigned": { "age": 1274131736, "replaces_state": "$15090449463046723hdlzB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.nordlab-ev.de/ClWiyduWyhoZSTwfiBUdZfos", "displayname": "svenfl", "membership": "join" }, "event_id": "$1506273465500lYdXd:matrix.nordlab-ev.de", "membership": "join", "origin_server_ts": 1506273465708, "sender": "@sven:matrix.nordlab-ev.de", "state_key": "@sven:matrix.nordlab-ev.de", "type": "m.room.member", "unsigned": { "age": 4394486970, "prev_content": { "avatar_url": "mxc://matrix.nordlab-ev.de/kZpzlHcUtHRwhDhMXZqrXVXq", "displayname": "svenfl", "membership": "join" }, "prev_sender": "@sven:matrix.nordlab-ev.de", "replaces_state": "$1506273202391zPKuK:matrix.nordlab-ev.de" } }, { "content": { "avatar_url": "mxc://matrix.org/beiKfrHGnctoGSnamVwLCiXa", "displayname": "nebutronic", "membership": "join" }, "event_id": "$15023715402932232Qmyxn:matrix.org", "membership": "join", "origin_server_ts": 1502371540990, "sender": "@nebutronic:matrix.org", "state_key": "@nebutronic:matrix.org", "type": "m.room.member", "unsigned": { "age": 8296411688 } }, { "content": { "avatar_url": "mxc://terracrypt.net/dgrTvNjRusPYHJNDqgvscjwZ", "displayname": "Jon ☎️", "membership": "join" }, "event_id": "$14987368072edYJb:terracrypt.net", "origin_server_ts": 1498736812860, "sender": "@jon:terracrypt.net", "state_key": "@jon:terracrypt.net", "type": "m.room.member", "unsigned": { "age": 468 } }, { "content": { "avatar_url": "mxc://matrix.org/OonjUOmcuVpUnmOWKtzPmAFe", "displayname": "uhoreg", "membership": "join" }, "event_id": "$14941094891062681HRltV:matrix.org", "membership": "join", "origin_server_ts": 1494109489536, "sender": "@uhoreg:matrix.org", "state_key": "@uhoreg:matrix.org", "type": "m.room.member", "unsigned": { "age": 16558463142 } }, { "content": { "membership": "leave" }, "event_id": "$14989287131072053kHIbs:matrix.org", "membership": "leave", "origin_server_ts": 1498928713291, "sender": "@lime_:matrix.org", "state_key": "@lime_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11739239387, "replaces_state": "$14989282081066694iutGN:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/qsxcTtCavszGZrmPtpYzsaoO", "displayname": "max", "membership": "join" }, "event_id": "$14935874261161012PaoJD:matrix.org", "membership": "join", "origin_server_ts": 1493587426117, "sender": "@max_power:matrix.org", "state_key": "@max_power:matrix.org", "type": "m.room.member", "unsigned": { "age": 17080526561 } }, { "content": { "avatar_url": "mxc://ghostcorp.net/WwoGfRcBjFEPmFCpprQhdrKM", "displayname": "Zach Oglesby", "membership": "join" }, "event_id": "$150656704517bgnWz:ghostcorp.net", "origin_server_ts": 1506567046197, "sender": "@zach:ghostcorp.net", "state_key": "@zach:ghostcorp.net", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": "mxc://matrix.org/gTOWJidCaxMlJdbOAKsNLIWk", "displayname": null, "membership": "join" }, "event_id": "$1507210848639872StHsq:matrix.org", "membership": "join", "origin_server_ts": 1507210848250, "sender": "@betrayer:matrix.org", "state_key": "@betrayer:matrix.org", "type": "m.room.member", "unsigned": { "age": 3457104428, "replaces_state": "$1507210837639695pfNLT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ChCvydqCAkVsoToAnkRDUDgp", "displayname": "Evil Matthew", "membership": "join" }, "event_id": "$1492989920244452iWojS:matrix.org", "membership": "join", "origin_server_ts": 1492989920140, "sender": "@matthew2:matrix.org", "state_key": "@matthew2:matrix.org", "type": "m.room.member", "unsigned": { "age": 17678032538 } }, { "content": { "avatar_url": null, "displayname": "evse", "membership": "join" }, "event_id": "$15103354991030603SBgxW:matrix.org", "membership": "join", "origin_server_ts": 1510335499711, "sender": "@evse:matrix.org", "state_key": "@evse:matrix.org", "type": "m.room.member", "unsigned": { "age": 332452967 } }, { "content": { "avatar_url": "mxc://disroot.org/qkDLUAEOKKyXugjtWtVKyVud", "displayname": "ollieparanoid", "membership": "join" }, "event_id": "$150490984123464XLJce:disroot.org", "origin_server_ts": 1504909841011, "sender": "@ollieparanoid:disroot.org", "state_key": "@ollieparanoid:disroot.org", "type": "m.room.member", "unsigned": { "age": 232 } }, { "content": { "avatar_url": null, "displayname": "jofa", "membership": "join" }, "event_id": "$1495172118401995cruhv:matrix.org", "membership": "join", "origin_server_ts": 1495172118267, "sender": "@jofa:matrix.org", "state_key": "@jofa:matrix.org", "type": "m.room.member", "unsigned": { "age": 15495834411 } }, { "content": { "alias": "#nheko:matrix.org" }, "event_id": "$14961803334512378JNsgM:matrix.org", "origin_server_ts": 1496180333869, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 14487618809 } }, { "content": { "avatar_url": "mxc://matrix.org/vuBSjBtKhBEAUsltnKuEkvcY", "displayname": "Alejandro Exojo", "membership": "join" }, "event_id": "$1496956658289185bXrKt:matrix.org", "membership": "join", "origin_server_ts": 1496956658872, "sender": "@suy:matrix.org", "state_key": "@suy:matrix.org", "type": "m.room.member", "unsigned": { "age": 13711293806 } }, { "content": { "avatar_url": "mxc://m1nd.io/CSlwxfezyxwZbvLYzdeGjMSB", "displayname": "m1nd", "membership": "join" }, "event_id": "$1504893926606867jPJLw:m1nd.io", "origin_server_ts": 1504893919741, "sender": "@m1nd:m1nd.io", "state_key": "@m1nd:m1nd.io", "type": "m.room.member", "unsigned": { "age": 19 } }, { "content": { "avatar_url": null, "displayname": "simple.", "membership": "join" }, "event_id": "$15095322092381612BpeTQ:matrix.org", "membership": "join", "origin_server_ts": 1509532209116, "sender": "@simple.:matrix.org", "state_key": "@simple.:matrix.org", "type": "m.room.member", "unsigned": { "age": 1135743562 } }, { "content": { "avatar_url": null, "displayname": "musoke", "membership": "join" }, "event_id": "$1493012095444993JeMrW:matrix.org", "membership": "join", "origin_server_ts": 1493012095022, "sender": "@musoke:matrix.org", "state_key": "@musoke:matrix.org", "type": "m.room.member", "unsigned": { "age": 17655857656 } }, { "content": { "name": "nheko" }, "event_id": "$1492978955127164kMPrR:matrix.org", "origin_server_ts": 1492978955797, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.name", "unsigned": { "age": 17688996881 } }, { "content": { "guest_access": "can_join" }, "event_id": "$1492978955127163ptuUH:matrix.org", "origin_server_ts": 1492978955763, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 17688996915 } }, { "content": { "avatar_url": "mxc://matrix.org/InEVOHDpdEKGVnUzyjNsKMog", "displayname": "Tokodomo", "membership": "join" }, "event_id": "$15085542362280534pCdnb:matrix.org", "membership": "join", "origin_server_ts": 1508554236859, "sender": "@Tokodomo:matrix.org", "state_key": "@Tokodomo:matrix.org", "type": "m.room.member", "unsigned": { "age": 2113715819 } }, { "content": { "avatar_url": null, "displayname": "fredix", "membership": "join" }, "event_id": "$15039400332933244fJKZd:matrix.org", "membership": "join", "origin_server_ts": 1503940033995, "sender": "@fredix:matrix.org", "state_key": "@fredix:matrix.org", "type": "m.room.member", "unsigned": { "age": 6727918683 } }, { "content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "TravisR", "membership": "join" }, "event_id": "$1492990665601zkcOT:t2l.io", "origin_server_ts": 1492990665603, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": "mxc://matrix.org/ykxIKBSTenevuFOniPakWmMb", "displayname": "fennecbyte", "membership": "join" }, "event_id": "$14985665283221591phbOz:matrix.org", "membership": "join", "origin_server_ts": 1498566528784, "sender": "@fennecbyte:matrix.org", "state_key": "@fennecbyte:matrix.org", "type": "m.room.member", "unsigned": { "age": 12101423894 } }, { "content": { "membership": "leave" }, "event_id": "$14934086711136axJke:matrix.eastcoast.hosting", "membership": "leave", "origin_server_ts": 1493408671237, "sender": "@walle303:matrix.eastcoast.hosting", "state_key": "@walle303:matrix.eastcoast.hosting", "type": "m.room.member", "unsigned": { "age": 17259281441, "prev_content": { "avatar_url": "mxc://matrix.eastcoast.hosting/BnQCMnaTnvTLifnqLByobMUz", "displayname": "walle303", "membership": "join" }, "prev_sender": "@walle303:matrix.eastcoast.hosting", "replaces_state": "$14930520611612cJABH:matrix.eastcoast.hosting" } }, { "content": { "avatar_url": null, "displayname": "Franta", "membership": "join" }, "event_id": "$149332795956cVNOB:gajdusek.net", "origin_server_ts": 1493327958883, "sender": "@frantisek:gajdusek.net", "state_key": "@frantisek:gajdusek.net", "type": "m.room.member", "unsigned": { "age": 532 } }, { "content": { "avatar_url": "mxc://matrix.org/zkMbjEiCToqWCfBIXcYRMLnz", "displayname": "Jon", "membership": "join" }, "event_id": "$15091549124536623zSDDs:matrix.org", "membership": "join", "origin_server_ts": 1509154912512, "sender": "@jfred:matrix.org", "state_key": "@jfred:matrix.org", "type": "m.room.member", "unsigned": { "age": 1513040166 } }, { "age_ts": 1506859070339, "content": { "avatar_url": "mxc://potatofrom.space/hxCzNDQuotDaGfuctEOCgwVy", "displayname": "Pneumaticat", "membership": "join" }, "event_id": "$15068590702mNlxL:potatofrom.space", "origin_server_ts": 1506859069858, "sender": "@kevin:potatofrom.space", "state_key": "@kevin:potatofrom.space", "type": "m.room.member", "unsigned": { "age": 88, "replaces_state": "$150446017484vSQjm:potatofrom.space" } }, { "content": { "membership": "leave" }, "event_id": "$14965219963087275qIdGW:matrix.org", "membership": "leave", "origin_server_ts": 1496521996701, "sender": "@ha:matrix.org", "state_key": "@ha:matrix.org", "type": "m.room.member", "unsigned": { "age": 14145955977, "replaces_state": "$1495300071794194Cenbp:matrix.org" } }, { "content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "join" }, "event_id": "$15076511924011TwJjF:kamax.io", "membership": "join", "origin_server_ts": 1507651192472, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 3016760206, "prev_content": { "avatar_url": "mxc://kamax.io/wYRWRxBIculnprUZBpMrgQsD", "displayname": "Maximus", "membership": "join" }, "prev_sender": "@max:kamax.io", "replaces_state": "$15074728263234CglvI:kamax.io" } }, { "content": { "avatar_url": "mxc://matrix.org/UydveHmMmodaBEMbGhEtFCNr", "displayname": "kitsune", "membership": "join" }, "event_id": "$1503744028988391zZuwm:matrix.org", "membership": "join", "origin_server_ts": 1503744028087, "sender": "@kitsune:matrix.org", "state_key": "@kitsune:matrix.org", "type": "m.room.member", "unsigned": { "age": 6923924591 } }, { "content": { "membership": "leave" }, "event_id": "$14959810602620882vdbhg:matrix.org", "membership": "leave", "origin_server_ts": 1495981060537, "sender": "@mrphi:matrix.org", "state_key": "@mrphi:matrix.org", "type": "m.room.member", "unsigned": { "age": 14686892141, "replaces_state": "$14959809912620357sgKzm:matrix.org" } }, { "content": { "aliases": [ "#nheko:matrix.org" ] }, "event_id": "$1492979148129750VDmPj:matrix.org", "origin_server_ts": 1492979148949, "sender": "@mujx:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 17688803729 } }, { "content": { "avatar_url": null, "displayname": "nioshd", "membership": "join" }, "event_id": "$15099026592291680ovtOA:matrix.org", "membership": "join", "origin_server_ts": 1509902659272, "sender": "@nioshd:matrix.org", "state_key": "@nioshd:matrix.org", "type": "m.room.member", "unsigned": { "age": 765293406 } }, { "content": { "avatar_url": "mxc://atauno.com/arTKTcpxTBsoESxJARrukaSE", "displayname": "am2on", "membership": "join" }, "event_id": "$14932555154921IdVlK:atauno.com", "origin_server_ts": 1493255515207, "sender": "@am2on:atauno.com", "state_key": "@am2on:atauno.com", "type": "m.room.member", "unsigned": { "age": 16 } }, { "content": { "membership": "leave" }, "event_id": "$1496707747931cBXoc:emblemparade.com", "membership": "leave", "origin_server_ts": 1496707747161, "sender": "@emblemparade:emblemparade.com", "state_key": "@emblemparade:emblemparade.com", "type": "m.room.member", "unsigned": { "age": 13960205517, "prev_content": { "avatar_url": "mxc://emblemparade.com/kAAKUpmbinVnByISjJnZipyR", "displayname": "emblemparade", "membership": "join" }, "prev_sender": "@emblemparade:emblemparade.com", "replaces_state": "$1496079352122hlqCb:emblemparade.com" } }, { "content": { "avatar_url": "mxc://krtdex.com/vsKSsrMRnuQqvVRnePgCPjOp", "displayname": "seequ_", "membership": "join" }, "event_id": "$1505801337855PVKJn:krtdex.com", "membership": "join", "origin_server_ts": 1505801337926, "sender": "@seequ:krtdex.com", "state_key": "@seequ:krtdex.com", "type": "m.room.member", "unsigned": { "age": 4866614752, "replaces_state": "$1505765620722gnIpx:krtdex.com" } }, { "content": { "membership": "join" }, "event_id": "$149391986124831sKGiV:matrix.org", "membership": "join", "origin_server_ts": 1493919861179, "sender": "@liathit:matrix.org", "state_key": "@liathit:matrix.org", "type": "m.room.member", "unsigned": { "age": 16748091499, "redacted_because": { "content": {}, "event_id": "$149391987925094FNieO:matrix.org", "origin_server_ts": 1493919879123, "redacts": "$149391986124831sKGiV:matrix.org", "sender": "@liathit:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 16748073555 } }, "redacted_by": "$149391987925094FNieO:matrix.org" } }, { "content": { "avatar_url": "mxc://disroot.org/mofkIpoHsNajFJsuIAVIAWjD", "displayname": "karroffel", "membership": "join" }, "event_id": "$1507888795551KhiJA:disroot.org", "membership": "join", "origin_server_ts": 1507888795655, "sender": "@karroffel:disroot.org", "state_key": "@karroffel:disroot.org", "type": "m.room.member", "unsigned": { "age": 2779157023 } }, { "content": { "membership": "leave" }, "event_id": "$15019477392963654VlNZV:matrix.org", "membership": "leave", "origin_server_ts": 1501947739500, "sender": "@sim6:matrix.org", "state_key": "@sim6:matrix.org", "type": "m.room.member", "unsigned": { "age": 8720213178, "replaces_state": "$1501182889513334dvOBS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KfkLMomWWjVZMbgVCKisfFPy", "displayname": "Github", "inviter": "@PureTryOut:matrix.org", "membership": "join" }, "event_id": "$15057718462421965CscEf:matrix.org", "membership": "join", "origin_server_ts": 1505771846885, "sender": "@_neb_github:matrix.org", "state_key": "@_neb_github:matrix.org", "type": "m.room.member", "unsigned": { "age": 4896105793, "replaces_state": "$15057718462421954lfNTE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zgNxjNNzAQMuUkITcrKvmUen", "displayname": "PureTryOut", "membership": "join" }, "event_id": "$1492979262130655KIBPE:matrix.org", "membership": "join", "origin_server_ts": 1492979262782, "sender": "@PureTryOut:matrix.org", "state_key": "@PureTryOut:matrix.org", "type": "m.room.member", "unsigned": { "age": 17688689896 } }, { "content": { "avatar_url": "mxc://openpsychology.net/aFGnbIWgCIpkoLkPdkwEcGQf", "displayname": "JigmeDatse (OPP)", "membership": "join" }, "event_id": "$150938928855DYHbA:openpsychology.net", "origin_server_ts": 1509389288325, "sender": "@JigmeDatse:openpsychology.net", "state_key": "@JigmeDatse:openpsychology.net", "type": "m.room.member", "unsigned": { "age": 141 } }, { "content": { "avatar_url": "mxc://matrix.ffslfl.net/EOkmaOykMGKOuYMykParCAQr", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15022885942427OPgBf:matrix.ffslfl.net", "membership": "join", "origin_server_ts": 1502288594832, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@MTRNord:matrix.ffslfl.net", "type": "m.room.member", "unsigned": { "age": 8379357846, "replaces_state": "$15022884282373NPuCE:matrix.ffslfl.net" } }, { "content": { "avatar_url": "mxc://matrix.org/FHOkGaCPEztYmMgEuHRZWVPF", "displayname": "Sijmen Schoon", "membership": "join" }, "event_id": "$15074720701894161LlBbp:matrix.org", "membership": "join", "origin_server_ts": 1507472070269, "sender": "@SijmenSchoon:matrix.org", "state_key": "@SijmenSchoon:matrix.org", "type": "m.room.member", "unsigned": { "age": 3195882409 } }, { "content": { "membership": "leave" }, "event_id": "$15095682072965161SNpFF:matrix.org", "membership": "leave", "origin_server_ts": 1509568207249, "sender": "@lowee:matrix.org", "state_key": "@lowee:matrix.org", "type": "m.room.member", "unsigned": { "age": 1099745429, "replaces_state": "$15080124112821833wSszw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tx", "membership": "join" }, "event_id": "$15004507642459967MeViv:matrix.org", "membership": "join", "origin_server_ts": 1500450764275, "sender": "@tx:matrix.org", "state_key": "@tx:matrix.org", "type": "m.room.member", "unsigned": { "age": 10217188403 } }, { "content": { "avatar_url": "mxc://matrix.org/lniRpHiPcsxiXOjUgKXSBZBJ", "displayname": "Other Matthew", "membership": "join" }, "event_id": "$15078916551225516btNhB:matrix.org", "membership": "join", "origin_server_ts": 1507891655247, "sender": "@matthewtest:matrix.org", "state_key": "@matthewtest:matrix.org", "type": "m.room.member", "unsigned": { "age": 2776297431 } }, { "content": { "membership": "leave" }, "event_id": "$14967030801758nOchr:half-shot.uk", "membership": "leave", "origin_server_ts": 1496703080739, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 13964871939, "prev_content": { "avatar_url": "mxc://half-shot.uk/oSnvUaEqIQcsVfAuulWeeBVB", "displayname": "Half-Shot", "membership": "join" }, "prev_sender": "@Half-Shot:half-shot.uk", "replaces_state": "$149568144711836UfxHO:half-shot.uk" } }, { "content": { "avatar_url": "mxc://matrix.org/fItFZIpRznztQxwfaTwmpzKv", "displayname": "z3ntu", "membership": "join" }, "event_id": "$14954609891939707ClTBL:matrix.org", "membership": "join", "origin_server_ts": 1495460989514, "sender": "@z3ntu:matrix.org", "state_key": "@z3ntu:matrix.org", "type": "m.room.member", "unsigned": { "age": 15206963164 } }, { "content": { "avatar_url": "mxc://matrix.org/EWhmaQHInpmimCJhBTCaBYjJ", "displayname": "Magnolia", "membership": "join" }, "event_id": "$1502645165740893VKTQN:matrix.org", "membership": "join", "origin_server_ts": 1502645165058, "sender": "@airin:matrix.org", "state_key": "@airin:matrix.org", "type": "m.room.member", "unsigned": { "age": 8022787620, "replaces_state": "$1502466694294891UXWlK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vJUTyPJnstYsTITppMGEqjkM", "displayname": "Carlos", "membership": "join" }, "event_id": "$149321521438675laMEZ:matrix.org", "membership": "join", "origin_server_ts": 1493215214444, "sender": "@carlosam:matrix.org", "state_key": "@carlosam:matrix.org", "type": "m.room.member", "unsigned": { "age": 17452738234 } }, { "content": { "avatar_url": "mxc://matrix.org/dhNtimyMZYPpsdUNCoTBboNv", "displayname": "strixaluco", "membership": "join" }, "event_id": "$14991344753287297zokmg:matrix.org", "membership": "join", "origin_server_ts": 1499134475756, "sender": "@strixaluco:matrix.org", "state_key": "@strixaluco:matrix.org", "type": "m.room.member", "unsigned": { "age": 11533476922 } }, { "content": { "avatar_url": null, "displayname": "ablebear368", "membership": "join" }, "event_id": "$14985650183205124vtGaq:matrix.org", "membership": "join", "origin_server_ts": 1498565018302, "sender": "@ablebear368:matrix.org", "state_key": "@ablebear368:matrix.org", "type": "m.room.member", "unsigned": { "age": 12102934376 } }, { "content": { "avatar_url": null, "displayname": "Github [@mujx:matrix.org]", "membership": "join" }, "event_id": "$1493077291496317ZkRPJ:matrix.org", "membership": "join", "origin_server_ts": 1493077291561, "sender": "@_neb_github_=40mujx=3amatrix.org:matrix.org", "state_key": "@_neb_github_=40mujx=3amatrix.org:matrix.org", "type": "m.room.member", "unsigned": { "age": 17590661117, "replaces_state": "$1493077290496311SuOhC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "AX3L", "membership": "join" }, "event_id": "$1499530713937032LLnkn:matrix.org", "membership": "join", "origin_server_ts": 1499530713876, "sender": "@AX3L:matrix.org", "state_key": "@AX3L:matrix.org", "type": "m.room.member", "unsigned": { "age": 11137238802 } }, { "content": { "avatar_url": "mxc://matrix.org/sOLzqYRPONAAwbuSCpPvNMAN", "displayname": "xinode", "membership": "join" }, "event_id": "$14947886311620169nsSNj:matrix.org", "membership": "join", "origin_server_ts": 1494788631921, "sender": "@xinode:matrix.org", "state_key": "@xinode:matrix.org", "type": "m.room.member", "unsigned": { "age": 15879320757 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150936049323247bpxie:matrix.org", "membership": "join", "origin_server_ts": 1509360493140, "sender": "@kilogramm:matrix.org", "state_key": "@kilogramm:matrix.org", "type": "m.room.member", "unsigned": { "age": 1307459538 } }, { "content": { "membership": "leave" }, "event_id": "$15101006121596442YiPJV:matrix.org", "membership": "leave", "origin_server_ts": 1510100612503, "sender": "@nfsprodriver:matrix.org", "state_key": "@nfsprodriver:matrix.org", "type": "m.room.member", "unsigned": { "age": 567340175, "replaces_state": "$15093155946251044sJmnV:matrix.org" } }, { "content": { "avatar_url": "mxc://msgs.tk/xxkoXPvoQvvStEYaBXWTXjqh", "displayname": "krombel", "membership": "join" }, "event_id": "$1494576945361lWcWM:msgs.tk", "membership": "join", "origin_server_ts": 1494576945653, "sender": "@krombel:msgs.tk", "state_key": "@krombel:msgs.tk", "type": "m.room.member", "unsigned": { "age": 16091007025, "replaces_state": "$1494541814358TnJRJ:msgs.tk" } }, { "content": { "avatar_url": "mxc://matrix.org/JvpkntvBzMlavJdXhDchZyNb", "displayname": "Phoenix Land Pirate 😸 🐺 🐇", "membership": "join" }, "event_id": "$1509724721245821aGnEs:matrix.org", "membership": "join", "origin_server_ts": 1509724721101, "sender": "@PhoenixLandPirate:matrix.org", "state_key": "@PhoenixLandPirate:matrix.org", "type": "m.room.member", "unsigned": { "age": 943231577 } }, { "content": { "avatar_url": "mxc://matrix.org/innneUtFAxyvcyiqNYatsEBI", "displayname": "asafniv1", "membership": "join" }, "event_id": "$15082445472129642lEHUC:matrix.org", "membership": "join", "origin_server_ts": 1508244547275, "sender": "@asafniv1:matrix.org", "state_key": "@asafniv1:matrix.org", "type": "m.room.member", "unsigned": { "age": 2423405403 } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15084727121958pWlAt:t2bot.io", "membership": "join", "origin_server_ts": 1508472712039, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 2195240639, "replaces_state": "$15072208635476agHwC:t2bot.io" } }, { "content": { "membership": "leave" }, "event_id": "$15078888661192396rQlJx:matrix.org", "membership": "leave", "origin_server_ts": 1507888866844, "sender": "@karroffel:matrix.org", "state_key": "@karroffel:matrix.org", "type": "m.room.member", "unsigned": { "age": 2779085834, "replaces_state": "$1507864788931654dgOnp:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oUxxDyzQOHdVDMxgwFzyCWEe", "displayname": "Matthew", "membership": "join" }, "event_id": "$1506686211491230QUMcq:matrix.org", "membership": "join", "origin_server_ts": 1506686211654, "sender": "@matthew:matrix.org", "state_key": "@matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 3981741024, "replaces_state": "$15046822582006957WogKI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.heldscal.la/KmVcjDBvGNsKvVPcUMyMnHcd", "displayname": "dirb", "membership": "join" }, "event_id": "$15093389722613jCgrC:matrix.heldscal.la", "origin_server_ts": 1509338972961, "sender": "@dirb:matrix.heldscal.la", "state_key": "@dirb:matrix.heldscal.la", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "membership": "leave" }, "event_id": "$1493135885261887UVyOW:matrix.org", "membership": "leave", "origin_server_ts": 1493135885755, "sender": "@aaron:matrix.org", "state_key": "@aaron:matrix.org", "type": "m.room.member", "unsigned": { "age": 17532066923, "replaces_state": "$1493074060461584LYvTu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pudJEwkOpQyhbcaMGSTmyvOz", "displayname": "BrainBlasted", "membership": "join" }, "event_id": "$1506295576318000Demmd:matrix.org", "membership": "join", "origin_server_ts": 1506295576741, "sender": "@BrainBlasted:matrix.org", "state_key": "@BrainBlasted:matrix.org", "type": "m.room.member", "unsigned": { "age": 4372375937 } }, { "content": { "membership": "leave" }, "event_id": "$15099943704221166JrRIm:matrix.org", "membership": "leave", "origin_server_ts": 1509994370235, "sender": "@commagray:matrix.org", "state_key": "@commagray:matrix.org", "type": "m.room.member", "unsigned": { "age": 673582443, "replaces_state": "$15058262013261554GfOVr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/AtzwirvniYllJrOFQhHAcJOI", "displayname": "bob", "membership": "join" }, "event_id": "$14936510531806136KywCq:matrix.org", "membership": "join", "origin_server_ts": 1493651053876, "sender": "@bobderbaumeister:matrix.org", "state_key": "@bobderbaumeister:matrix.org", "type": "m.room.member", "unsigned": { "age": 17016898802 } }, { "content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@mujx:matrix.org": 100 }, "users_default": 0 }, "event_id": "$1492978955127160KOtBV:matrix.org", "origin_server_ts": 1492978955573, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 17688997105 } }, { "content": { "avatar_url": "mxc://matrix.org/vybVhVIXennssGAVcckuxEYP", "displayname": "Cal", "membership": "join" }, "event_id": "$15094803631780792DYXTQ:matrix.org", "membership": "join", "origin_server_ts": 1509480363612, "sender": "@calher:matrix.org", "state_key": "@calher:matrix.org", "type": "m.room.member", "unsigned": { "age": 1187589066, "replaces_state": "$1507661011585987IQQzF:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15086854703643218OxBcj:matrix.org", "membership": "leave", "origin_server_ts": 1508685470164, "sender": "@fru:matrix.org", "state_key": "@fru:matrix.org", "type": "m.room.member", "unsigned": { "age": 1982482514, "replaces_state": "$15076973141125638smCUL:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nBgnlGEqgqmnihdGCnITbxiF", "displayname": "tompa", "membership": "join" }, "event_id": "$15044164791181175iMqgd:matrix.org", "membership": "join", "origin_server_ts": 1504416479660, "sender": "@tompa:matrix.org", "state_key": "@tompa:matrix.org", "type": "m.room.member", "unsigned": { "age": 6251473018 } }, { "content": { "avatar_url": "mxc://matrix.org/XzEMCcfMTsOebjOOfjSTMulD", "displayname": "Greg K Nicholson", "membership": "join" }, "event_id": "$1498920277989355sEEFs:matrix.org", "membership": "join", "origin_server_ts": 1498920277733, "sender": "@gregknicholson:matrix.org", "state_key": "@gregknicholson:matrix.org", "type": "m.room.member", "unsigned": { "age": 11747674945 } }, { "content": { "avatar_url": "mxc://matrix.org/RwMLvRcIEmLUPikvKGlsGYUk", "displayname": "Kat Vance", "membership": "join" }, "event_id": "$1499887494546283rrnEr:matrix.org", "membership": "join", "origin_server_ts": 1499887494018, "sender": "@noperope:matrix.org", "state_key": "@noperope:matrix.org", "type": "m.room.member", "unsigned": { "age": 10780458660, "replaces_state": "$1499882467470952mwgDS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jearc", "membership": "join" }, "event_id": "$15019290642804283iBxJH:matrix.org", "membership": "join", "origin_server_ts": 1501929064115, "sender": "@jearc:matrix.org", "state_key": "@jearc:matrix.org", "type": "m.room.member", "unsigned": { "age": 8738888563 } }, { "content": { "avatar_url": "mxc://matrix.org/wMiNraFCdIMHHNHsnpFWYyXN", "displayname": "memoryruins", "membership": "join" }, "event_id": "$1508108613357389bVfom:matrix.org", "membership": "join", "origin_server_ts": 1508108613783, "sender": "@memoryruins:matrix.org", "state_key": "@memoryruins:matrix.org", "type": "m.room.member", "unsigned": { "age": 2559338895, "replaces_state": "$1508101052252052GVmgL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Charlotte", "membership": "join" }, "event_id": "$149674877520865ooCdg:matrix.org", "membership": "join", "origin_server_ts": 1496748775868, "sender": "@LottieVixen:matrix.org", "state_key": "@LottieVixen:matrix.org", "type": "m.room.member", "unsigned": { "age": 13919176810 } }, { "content": { "avatar_url": "mxc://matrix.org/wQipUeDNkbKKPCRHhIzgRyhD", "displayname": "Hexafox", "membership": "join" }, "event_id": "$15046904242096854HdDdC:matrix.org", "membership": "join", "origin_server_ts": 1504690424784, "sender": "@winterfox:matrix.org", "state_key": "@winterfox:matrix.org", "type": "m.room.member", "unsigned": { "age": 5977527894, "replaces_state": "$1504345330482390NnpUv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TgGsjOLrmFZpeBFIsGSUdTcV", "displayname": "moyamo", "membership": "join" }, "event_id": "$14965739713467191gBRJS:matrix.org", "membership": "join", "origin_server_ts": 1496573971921, "sender": "@moyamo:matrix.org", "state_key": "@moyamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 14093980757 } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$14958373021605626LcGQc:matrix.org", "membership": "join", "origin_server_ts": 1495837302787, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 14830649891, "replaces_state": "$1492978955127159urDNa:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/rcTpvIkIMSRhohvdqKzPrpai", "displayname": "equinox", "membership": "join" }, "event_id": "$1509735984447029SpBXx:matrix.org", "membership": "join", "origin_server_ts": 1509735984829, "sender": "@equinox:matrix.org", "state_key": "@equinox:matrix.org", "type": "m.room.member", "unsigned": { "age": 931967849 } }, { "content": { "avatar_url": null, "displayname": "Ralith", "membership": "join" }, "event_id": "$149323015014469nbdZk:ralith.com", "origin_server_ts": 1493230150195, "sender": "@ralith:ralith.com", "state_key": "@ralith:ralith.com", "type": "m.room.member", "unsigned": { "age": 83 } }, { "content": { "topic": "Discussion about nheko, the desktop client for Matrix (github.com/mujx/nheko)" }, "event_id": "$14941661301412493zWxOp:matrix.org", "origin_server_ts": 1494166130750, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 16501821928, "replaces_state": "$1493071926436400wYBPX:matrix.org" } }, { "content": { "join_rule": "public" }, "event_id": "$1492979148129751MEZBn:matrix.org", "origin_server_ts": 1492979148964, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 17688803714, "replaces_state": "$1492978955127161Yudxw:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/lJHALGUciFXJvkTKFQBAGhUu", "displayname": "April", "membership": "join" }, "event_id": "$15020901804257678jVnKu:matrix.org", "membership": "join", "origin_server_ts": 1502090180399, "sender": "@April:matrix.org", "state_key": "@April:matrix.org", "type": "m.room.member", "unsigned": { "age": 8577772279 } }, { "content": { "membership": "leave" }, "event_id": "$15096976554737206pXknL:matrix.org", "membership": "leave", "origin_server_ts": 1509697655760, "sender": "@pafcu:matrix.org", "state_key": "@pafcu:matrix.org", "type": "m.room.member", "unsigned": { "age": 970296918, "replaces_state": "$15093026516056440eizkc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14965678303399NYZzX:matrix.eclabs.de", "membership": "leave", "origin_server_ts": 1496567830227, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "@MTRNord:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 14100122451, "prev_content": { "avatar_url": "mxc://matrix.eclabs.de/jmpGtDurboZtbLKMSnsQAupn", "displayname": "MTRNord", "membership": "join" }, "prev_sender": "@MTRNord:matrix.eclabs.de", "replaces_state": "$149580323726206ObrGo:matrix.eclabs.de" } }, { "content": { "avatar_url": "mxc://exul.org/FVeNMVznVXFlxJgLfSAqZZEW", "displayname": "exul", "membership": "join" }, "event_id": "$14948743207211HioSZ:exul.org", "origin_server_ts": 1494874320630, "sender": "@exul:exul.org", "state_key": "@exul:exul.org", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": "mxc://matrix.org/lIoOYiVOfUizpwAwdmlfNEJo", "displayname": "Nouts", "membership": "join" }, "event_id": "$15004627192579574bnogw:matrix.org", "membership": "join", "origin_server_ts": 1500462719508, "sender": "@nouts:matrix.org", "state_key": "@nouts:matrix.org", "type": "m.room.member", "unsigned": { "age": 10205233170 } }, { "content": { "avatar_url": "mxc://matrix.org/GcrhKnCBhgLDxXuqCDtCOVCr", "displayname": "RAOF", "membership": "join" }, "event_id": "$1493253491570152CVEjv:matrix.org", "membership": "join", "origin_server_ts": 1493253491963, "sender": "@RAOF:matrix.org", "state_key": "@RAOF:matrix.org", "type": "m.room.member", "unsigned": { "age": 17414460715 } }, { "content": { "avatar_url": "mxc://raim.ist/FXOzjAdHBpcxFBqpKIbQWInl", "displayname": "Aaron Raimist", "membership": "join" }, "event_id": "$150041869788ETDQN:raim.ist", "origin_server_ts": 1500418696806, "sender": "@aaron:raim.ist", "state_key": "@aaron:raim.ist", "type": "m.room.member", "unsigned": { "age": 518 } }, { "content": { "avatar_url": null, "displayname": "masoodahm", "membership": "join" }, "event_id": "$1495521606488455DJbmI:matrix.org", "membership": "join", "origin_server_ts": 1495521606903, "sender": "@Zeplin:matrix.org", "state_key": "@Zeplin:matrix.org", "type": "m.room.member", "unsigned": { "age": 15146345775, "replaces_state": "$149381726892998NeJlX:matrix.org" } }, { "content": { "history_visibility": "world_readable" }, "event_id": "$1492979148129749iYkpD:matrix.org", "origin_server_ts": 1492979148900, "sender": "@mujx:matrix.org", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 17688803778, "replaces_state": "$1492978955127162wDvla:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/McXjkUJujtDBkuHyIgXUKQWB", "displayname": "rokups", "membership": "join" }, "event_id": "$15069454511923662zOUsB:matrix.org", "membership": "join", "origin_server_ts": 1506945451172, "sender": "@rokups:matrix.org", "state_key": "@rokups:matrix.org", "type": "m.room.member", "unsigned": { "age": 3722501506, "replaces_state": "$15069453951922928gRgaX:matrix.org" } }, { "content": { "avatar_url": "mxc://safaradeg.net/TfUUoDkOWpbbIwuIpShznpNp", "displayname": "Levans", "membership": "join" }, "event_id": "$150576879161hqroy:safaradeg.net", "origin_server_ts": 1505768791458, "sender": "@levans:safaradeg.net", "state_key": "@levans:safaradeg.net", "type": "m.room.member", "unsigned": { "age": 121 } } ] }, "timeline": { "events": [ { "content": { "body": "Ralith: unstable", "format": "org.matrix.custom.html", "formatted_body": "Ralith: unstable", "msgtype": "m.text" }, "event_id": "$15106397502300xjKTb:krtdex.com", "origin_server_ts": 1510639750713, "sender": "@seequ:krtdex.com", "type": "m.room.message", "unsigned": { "age": 28201965 } }, { "content": { "body": "seequ_: when did you last update?", "format": "org.matrix.custom.html", "formatted_body": "seequ_: when did you last update?", "msgtype": "m.text" }, "event_id": "$151064037229144kqPto:ralith.com", "origin_server_ts": 1510640372882, "sender": "@ralith:ralith.com", "type": "m.room.message", "unsigned": { "age": 27579796 } }, { "content": { "body": "On that machine, probably a month or two ago", "msgtype": "m.text" }, "event_id": "$15106404082310ZvvZi:krtdex.com", "origin_server_ts": 1510640408245, "sender": "@seequ:krtdex.com", "type": "m.room.message", "unsigned": { "age": 27544433 } }, { "content": { "body": "well, llvmPackages_5 has been in since 17.09", "msgtype": "m.text" }, "event_id": "$151064068529149GZQtA:ralith.com", "origin_server_ts": 1510640685933, "sender": "@ralith:ralith.com", "type": "m.room.message", "unsigned": { "age": 27266745 } }, { "content": { "body": "have a look at your exact git revision if you want to sanity-check", "msgtype": "m.text" }, "event_id": "$151064073329151RXcMw:ralith.com", "origin_server_ts": 1510640733691, "sender": "@ralith:ralith.com", "type": "m.room.message", "unsigned": { "age": 27218987 } }, { "content": { "body": "seequ_: When I try to sent messages really fast (single characters) the queue ends up being blocked and nothing is processed ", "msgtype": "m.text" }, "event_id": "$15106440021469864spVyc:matrix.org", "origin_server_ts": 1510644002681, "sender": "@mujx:matrix.org", "type": "m.room.message", "unsigned": { "age": 23949997 } }, { "content": { "body": "Can't reproduce. I just got ratelimited and the queue cleared slowly", "msgtype": "m.text" }, "event_id": "$15106440552311XDPWn:krtdex.com", "origin_server_ts": 1510644055529, "sender": "@seequ:krtdex.com", "type": "m.room.message", "unsigned": { "age": 23897149 } }, { "content": { "body": "try matrix.org", "msgtype": "m.text" }, "event_id": "$15106440951470781UvRZF:matrix.org", "origin_server_ts": 1510644095612, "sender": "@mujx:matrix.org", "type": "m.room.message", "unsigned": { "age": 23857066 } }, { "content": { "body": "Can't in a while", "msgtype": "m.text" }, "event_id": "$15106442712312XKRBB:krtdex.com", "origin_server_ts": 1510644271208, "sender": "@seequ:krtdex.com", "type": "m.room.message", "unsigned": { "age": 23681470 } }, { "content": { "body": "JigmeDatse (OPP): yeah I'm going to change the git url to https in the ebuild", "format": "org.matrix.custom.html", "formatted_body": "JigmeDatse (OPP): yeah I'm going to change the git url to https in the ebuild", "msgtype": "m.text" }, "event_id": "$15106476461505786atmJh:matrix.org", "origin_server_ts": 1510647646577, "sender": "@PureTryOut:matrix.org", "type": "m.room.message", "unsigned": { "age": 20306101 } } ], "limited": true, "prev_batch": "t10853-333025362_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": { "highlight_count": 0, "notification_count": 0 } }, "!FArEnfvrFQccPhuaHa:thebeckmeyers.xyz": { "account_data": { "events": [] }, "ephemeral": { "events": [ { "content": { "$15091423982311hbEtb:thebeckmeyers.xyz": { "m.read": { "@travis:t2l.io": { "ts": 1509142400273 } } }, "$1509834555449BuYpW:kamax.io": { "m.read": { "@zottel:matrix.zottel.net": { "ts": 1509837585343 } } }, "$1509861655635wJbXr:kamax.io": { "m.read": { "@davidar:matrix.org": { "ts": 1509862701008 } } }, "$15101521337342DNHTs:thebeckmeyers.xyz": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1510176314958 } } }, "$15102855601573qCmXc:kamax.io": { "m.read": { "@abeckmeyer:matrix.org": { "ts": 1510320738741 } } }, "$15103515872068djLfZ:kamax.io": { "m.read": { "@voyager:t2bot.io": { "ts": 1510351593980 } } }, "$15103524111324197MNTdV:matrix.org": { "m.read": { "@Magnap:matrix.org": { "ts": 1510353389112 } } }, "$15103569071510zzPgw:thebeckmeyers.xyz": { "m.read": { "@jimmycuadra:matrix.org": { "ts": 1510356911461 } } }, "$15103632102188xGADp:kamax.io": { "m.read": { "@musoke:matrix.org": { "ts": 1510366835671 } } }, "$15105256192635VpkAK:kamax.io": { "m.read": { "@seequ:krtdex.com": { "ts": 1510525715085 } } }, "$15105582733607046MmGxG:matrix.org": { "m.read": { "@Cadair:matrix.org": { "ts": 1510561851733 }, "@MrCustomizer:matrix.org": { "ts": 1510558579973 }, "@TimePath:timepath.xyz": { "ts": 1510564079720 }, "@adam:thebeckmeyers.xyz": { "ts": 1510562462950 }, "@florianjacob:matrix.org": { "ts": 1510565464920 }, "@jan.christian:gruenhage.xyz": { "ts": 1510567313762 }, "@levans:safaradeg.net": { "ts": 1510558824353 }, "@magnap:magnap.dk": { "ts": 1510570397728 }, "@max:kamax.io": { "ts": 1510559321344 }, "@sandhose:sandhose.fr": { "ts": 1510560951860 }, "@thematizer:matrix.org": { "ts": 1510558273605 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "aliases": [ "#eventually-matrix:kamax.io", "#e-mx:kamax.io" ] }, "event_id": "$15105143482578FXUAr:kamax.io", "origin_server_ts": 1510514348063, "sender": "@max:kamax.io", "state_key": "kamax.io", "type": "m.room.aliases", "unsigned": { "age": 153604615, "prev_content": { "aliases": [ "#matrix-disorg:kamax.io" ] }, "prev_sender": "@max:kamax.io", "replaces_state": "$15090543101659qWdEf:kamax.io" } }, { "content": { "avatar_url": "mxc://thebeckmeyers.xyz/MpWpOzvvdeSOsDPmkEVMmviz", "displayname": "&Adam", "membership": "join" }, "event_id": "$1509053575983KLAsw:thebeckmeyers.xyz", "membership": "join", "origin_server_ts": 1509053575839, "sender": "@adam:thebeckmeyers.xyz", "state_key": "@adam:thebeckmeyers.xyz", "type": "m.room.member", "unsigned": { "age": 355231 } }, { "content": { "groups": [ "+disorg:thebeckmeyers.xyz" ] }, "event_id": "$15090589501118wnfWd:thebeckmeyers.xyz", "origin_server_ts": 1509058950853, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.related_groups", "unsigned": { "age": 1609001825, "prev_content": { "groups": [] }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542641019WWRYq:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://sandhose.fr/KapZOYYVmbVTnAQymlxssGrh", "displayname": "Sandhose", "membership": "join" }, "event_id": "$1510348459930SYaQO:sandhose.fr", "origin_server_ts": 1510348458821, "sender": "@sandhose:sandhose.fr", "state_key": "@sandhose:sandhose.fr", "type": "m.room.member", "unsigned": { "age": 177 } }, { "content": { "alias": "#eventually:matrix.org" }, "event_id": "$15090617221195PJbyN:thebeckmeyers.xyz", "origin_server_ts": 1509061722962, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 1606229716, "prev_content": { "alias": "#disorg:matrix.org" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542641016uBrfh:thebeckmeyers.xyz" } }, { "content": { "aliases": [ "#matrix-disorg:magnap.dk" ] }, "event_id": "$1509054548257LMsXp:magnap.dk", "origin_server_ts": 1509054548312, "sender": "@magnap:magnap.dk", "state_key": "magnap.dk", "type": "m.room.aliases", "unsigned": { "age": 1613404366 } }, { "content": { "avatar_url": null, "displayname": "musoke", "membership": "join" }, "event_id": "$15103663601508196eYtdO:matrix.org", "membership": "join", "origin_server_ts": 1510366360734, "sender": "@musoke:matrix.org", "state_key": "@musoke:matrix.org", "type": "m.room.member", "unsigned": { "age": 301591944 } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$15103406121118482TwNXu:matrix.org", "membership": "join", "origin_server_ts": 1510340612915, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 327339763 } }, { "content": { "name": "Eventually Matrix" }, "event_id": "$15090612671181sgYRx:thebeckmeyers.xyz", "origin_server_ts": 1509061267230, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.name", "unsigned": { "age": 1606685448, "prev_content": { "name": "matrix-disorg" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$1509053576988aeHhH:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "join" }, "event_id": "$1509057282696VJzbE:half-shot.uk", "origin_server_ts": 1509057282101, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 21309, "prev_content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "invite" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542351013PQija:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://matrix.trancendances.fr/OdaedmdfbXozfmjSPyKsfKIa", "displayname": "Brendan Abolivier", "membership": "join" }, "event_id": "$1510390116458lNkkX:matrix.trancendances.fr", "origin_server_ts": 1510390132054, "sender": "@Brendan:matrix.trancendances.fr", "state_key": "@Brendan:matrix.trancendances.fr", "type": "m.room.member", "unsigned": { "age": 30 } }, { "content": { "guest_access": "can_join" }, "event_id": "$1509053576987CsrYV:thebeckmeyers.xyz", "origin_server_ts": 1509053576109, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 354961 } }, { "content": { "topic": "We hope we'll get merged | https://github.com/eventually-matrix" }, "event_id": "$15090612671182tnIFC:thebeckmeyers.xyz", "origin_server_ts": 1509061267338, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 1606685340 } }, { "content": { "membership": "leave", "reason": "RAAAAAAAAAAAR!" }, "event_id": "$15098446644229XAlJI:thebeckmeyers.xyz", "membership": "leave", "origin_server_ts": 1509844664958, "sender": "@adam:thebeckmeyers.xyz", "state_key": "@_neb_wikipedia:matrix.org", "type": "m.room.member", "unsigned": { "age": 823287720, "prev_content": { "avatar_url": "mxc://matrix.org/NkKVqDsXRglcbcDCGFIfvYXt", "displayname": "Wikipedia", "inviter": "@adam:thebeckmeyers.xyz", "membership": "join" }, "prev_sender": "@_neb_wikipedia:matrix.org", "replaces_state": "$15098446161732185gTXJO:matrix.org" } }, { "content": { "avatar_url": "mxc://gruenhage.xyz/HOkBeFWIoDOiuDxqXHPrFLUE", "displayname": "jcgruenhage", "membership": "join" }, "event_id": "$151038582691jqOTF:gruenhage.xyz", "membership": "join", "origin_server_ts": 1510385826509, "sender": "@jan.christian:gruenhage.xyz", "state_key": "@jan.christian:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 282126169, "prev_content": { "avatar_url": "mxc://gruenhage.xyz/QsgpIokavDaHBQhAohxCpvVS", "displayname": "jcgruenhage", "membership": "join" }, "prev_sender": "@jan.christian:gruenhage.xyz", "replaces_state": "$15103478241xLJQj:gruenhage.xyz" } }, { "age_ts": 1509054248466, "content": { "avatar_url": "mxc://magnap.dk/IECIiaFLQGVHVkYgDkEoexad", "displayname": "Magnap​", "membership": "join" }, "event_id": "$1509054242252Wcecd:magnap.dk", "origin_server_ts": 1509054240682, "sender": "@magnap:magnap.dk", "state_key": "@magnap:magnap.dk", "type": "m.room.member", "unsigned": { "age": 160, "prev_content": { "avatar_url": "mxc://magnap.dk/IECIiaFLQGVHVkYgDkEoexad", "displayname": "Magnap​", "membership": "invite" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542341012fpwFd:thebeckmeyers.xyz" } }, { "content": { "join_rule": "public" }, "event_id": "$15090542641018pCuMz:thebeckmeyers.xyz", "origin_server_ts": 1509054264421, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 1613688257, "prev_content": { "join_rule": "invite" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$1509053575985qPDOo:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/XcoBYiEebcHikyXHjagpCRJv", "displayname": "@davidar:matrix.org", "membership": "join" }, "event_id": "$15095464152567220SukTN:matrix.org", "membership": "join", "origin_server_ts": 1509546415168, "sender": "@davidar:matrix.org", "state_key": "@davidar:matrix.org", "type": "m.room.member", "unsigned": { "age": 1121537510 } }, { "content": { "avatar_url": "mxc://matrix.org/clGHBKhiRyaSpbMHXwYJbIGP", "displayname": "Cadair", "membership": "join" }, "event_id": "$15095472212580851BSIph:matrix.org", "membership": "join", "origin_server_ts": 1509547221148, "sender": "@Cadair:matrix.org", "state_key": "@Cadair:matrix.org", "type": "m.room.member", "unsigned": { "age": 1120731530 } }, { "content": { "avatar_url": "mxc://matrix.org/qFCbQbISMJKkumHFtvGUADZp", "displayname": "Jimmy", "membership": "join" }, "event_id": "$15103568661389533TWBgJ:matrix.org", "membership": "join", "origin_server_ts": 1510356866562, "sender": "@jimmycuadra:matrix.org", "state_key": "@jimmycuadra:matrix.org", "type": "m.room.member", "unsigned": { "age": 311086116 } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15091422665980ddlng:t2bot.io", "origin_server_ts": 1509142266826, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 9 } }, { "age_ts": 1509631658107, "content": { "avatar_url": "mxc://hveem.no/ASgrrXHwVdVhtzLWlzVxFFTo", "displayname": "ivar", "membership": "join" }, "event_id": "$15096316571474FzvmO:hveem.no", "origin_server_ts": 1509631657809, "sender": "@ivarbot:hveem.no", "state_key": "@ivarbot:hveem.no", "type": "m.room.member", "unsigned": { "age": 9, "prev_content": { "avatar_url": "mxc://hveem.no/ASgrrXHwVdVhtzLWlzVxFFTo", "displayname": "ivar", "membership": "invite" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15096316567290WiCMr:thebeckmeyers.xyz" } }, { "content": { "creator": "@adam:thebeckmeyers.xyz" }, "event_id": "$1509053575982MLavz:thebeckmeyers.xyz", "origin_server_ts": 1509053575732, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.create", "unsigned": { "age": 355338 } }, { "age_ts": 1509054239480, "content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "join" }, "event_id": "$15090542391653tYCSs:kamax.io", "origin_server_ts": 1509054239240, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 7, "prev_content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "invite" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542331011Encre:thebeckmeyers.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$15091424081187nENwk:t2l.io", "membership": "leave", "origin_server_ts": 1509142408065, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 1525544613, "replaces_state": "$15091423751185HWdtl:t2l.io" } }, { "content": { "avatar_url": "mxc://matrix.org/lCevNQCwrIZemrlaGmaMUQrd", "displayname": "Magnap's HS sucks", "membership": "join" }, "event_id": "$15103533881339087oNnlx:matrix.org", "membership": "join", "origin_server_ts": 1510353388528, "sender": "@Magnap:matrix.org", "state_key": "@Magnap:matrix.org", "type": "m.room.member", "unsigned": { "age": 314564150 } }, { "content": { "avatar_url": "mxc://matrix.org/KYqGRtEIArCaZZTjdOyVfvsa", "displayname": "art|code", "membership": "join" }, "event_id": "$15091433814397257TBUKh:matrix.org", "membership": "join", "origin_server_ts": 1509143381386, "sender": "@thematizer:matrix.org", "state_key": "@thematizer:matrix.org", "type": "m.room.member", "unsigned": { "age": 1524571292 } }, { "content": { "avatar_url": "mxc://matrix.zottel.net/YsrfijXnxjlBfIlStuXJRVgx", "displayname": "zottel", "membership": "join" }, "event_id": "$1509143215357YIIGx:matrix.zottel.net", "origin_server_ts": 1509143215375, "sender": "@zottel:matrix.zottel.net", "state_key": "@zottel:matrix.zottel.net", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "aliases": [ "#eventually:matrix.org", "#eventuallymatrix:matrix.org", "#disorg:matrix.org" ] }, "event_id": "$15090614513314923Jnftl:matrix.org", "origin_server_ts": 1509061451062, "sender": "@abeckmeyer:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 1606501616, "replaces_state": "$15090541933217447tPgym:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hGflZQNxFcDTropATvVZChBI", "displayname": "Florian", "membership": "join" }, "event_id": "$15103467221226610TauYc:matrix.org", "membership": "join", "origin_server_ts": 1510346722818, "sender": "@florianjacob:matrix.org", "state_key": "@florianjacob:matrix.org", "type": "m.room.member", "unsigned": { "age": 321229860 } }, { "content": { "avatar_url": "mxc://krtdex.com/vsKSsrMRnuQqvVRnePgCPjOp", "displayname": "seequ_", "membership": "join" }, "event_id": "$15098436531513IiGfM:krtdex.com", "origin_server_ts": 1509843652997, "sender": "@seequ:krtdex.com", "state_key": "@seequ:krtdex.com", "type": "m.room.member", "unsigned": { "age": 17, "replaces_state": "$15098436454196ohyTu:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "TimePath", "membership": "join" }, "event_id": "$1509630144863CBsQW:timepath.xyz", "origin_server_ts": 1509630144137, "sender": "@TimePath:timepath.xyz", "state_key": "@TimePath:timepath.xyz", "type": "m.room.member", "unsigned": { "age": 459 } }, { "content": { "history_visibility": "world_readable" }, "event_id": "$15090542641017XQlfp:thebeckmeyers.xyz", "origin_server_ts": 1509054264417, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 1613688261, "prev_content": { "history_visibility": "shared" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$1509053576986SRwVX:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/QOAKpstCmMXewwYiChckurDP", "displayname": "$Adam", "membership": "join" }, "event_id": "$15090539303212860IidGy:matrix.org", "origin_server_ts": 1509053930630, "sender": "@abeckmeyer:matrix.org", "state_key": "@abeckmeyer:matrix.org", "type": "m.room.member", "unsigned": { "age": 1614021763, "replaces_state": "$15090538211002XAIEV:thebeckmeyers.xyz" } }, { "content": { "url": "mxc://thebeckmeyers.xyz/JsdBEyXzzdKEtnWFZdkxDLkm" }, "event_id": "$15096407307418YEmQx:thebeckmeyers.xyz", "origin_server_ts": 1509640730487, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 36938, "prev_content": {}, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090563771086QnIhR:thebeckmeyers.xyz" } }, { "content": { "ban": 50, "events": { "im.vector.modular.widgets": 50, "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100, "m.room.topic": 50 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@adam:thebeckmeyers.xyz": 100, "@magnap:magnap.dk": 50, "@max:kamax.io": 50 }, "users_default": 0 }, "event_id": "$15090542911023ejmqC:thebeckmeyers.xyz", "origin_server_ts": 1509054291214, "sender": "@adam:thebeckmeyers.xyz", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 1613661464, "prev_content": { "ban": 50, "events": { "im.vector.modular.widgets": 50, "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100, "m.room.topic": 50 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@adam:thebeckmeyers.xyz": 100, "@magnap:magnap.dk": 50 }, "users_default": 0 }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$15090542791022npKof:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://safaradeg.net/TfUUoDkOWpbbIwuIpShznpNp", "displayname": "Levans", "membership": "join" }, "event_id": "$15103490511219nAgrZ:safaradeg.net", "origin_server_ts": 1510349051214, "sender": "@levans:safaradeg.net", "state_key": "@levans:safaradeg.net", "type": "m.room.member", "unsigned": { "age": 5 } } ] }, "timeline": { "events": [ { "content": { "body": "art|code: I'm not aware of any such document", "format": "org.matrix.custom.html", "formatted_body": "art|code: I'm not aware of any such document", "msgtype": "m.text" }, "event_id": "$15105354802655HSPxS:kamax.io", "origin_server_ts": 1510535480287, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 132472391 } }, { "content": { "body": "definitly sound like something we should have", "msgtype": "m.text" }, "event_id": "$15105354952656aZCSn:kamax.io", "origin_server_ts": 1510535495846, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 132456832 } }, { "content": { "body": "art|code: it does fit", "format": "org.matrix.custom.html", "formatted_body": "art|code: it does fit", "msgtype": "m.text" }, "event_id": "$15105355142657IPyQp:kamax.io", "origin_server_ts": 1510535514413, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 132438265 } }, { "content": { "body": "ping (me?) in here again when you have time", "msgtype": "m.text" }, "event_id": "$15105355282658QEZOx:kamax.io", "origin_server_ts": 1510535528457, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 132424221 } }, { "content": { "body": "I would be happy to put together a first draft", "msgtype": "m.text" }, "event_id": "$15105355392659NHaPJ:kamax.io", "origin_server_ts": 1510535539995, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 132412683 } }, { "content": { "body": "Cool. Will do. I'd be glad to review anything you send my way.", "format": "org.matrix.custom.html", "formatted_body": "Cool. Will do. I'd be glad to review anything you send my way.", "msgtype": "m.text" }, "event_id": "$15105368273397024LtBUF:matrix.org", "origin_server_ts": 1510536827830, "sender": "@thematizer:matrix.org", "type": "m.room.message", "unsigned": { "age": 131124848 } }, { "content": { "body": "oh I meant we can try to put something together :)", "msgtype": "m.text" }, "event_id": "$15105370572663nxIUn:kamax.io", "origin_server_ts": 1510537057143, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 130895535 } }, { "content": { "body": "I'm not a great PR/sales person, but we can brainstorm about it. I got few ideas, we can see if it fits your idea of such document", "msgtype": "m.text" }, "event_id": "$15105370902664Aabhj:kamax.io", "origin_server_ts": 1510537090239, "sender": "@max:kamax.io", "type": "m.room.message", "unsigned": { "age": 130862439 } }, { "content": { "avatar_url": null, "displayname": "MrCustomizer", "membership": "join" }, "event_id": "$15105540353570718ukDEY:matrix.org", "membership": "join", "origin_server_ts": 1510554035951, "sender": "@MrCustomizer:matrix.org", "state_key": "@MrCustomizer:matrix.org", "type": "m.room.member", "unsigned": { "age": 113916727 } }, { "content": { "body": "Seems like a good approach.", "msgtype": "m.text" }, "event_id": "$15105582733607046MmGxG:matrix.org", "origin_server_ts": 1510558273389, "sender": "@thematizer:matrix.org", "type": "m.room.message", "unsigned": { "age": 109679289 } } ], "limited": true, "prev_batch": "t1982-331556724_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": {} }, "!FyQrGcOoVamcLcvdob:matrix.org": { "account_data": { "events": [ { "content": { "event_id": "$15100686441007800eyjNs:matrix.org" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "user_ids": [] }, "type": "m.typing" }, { "content": { "$1490375423120549cjTEN:matrix.org": { "m.read": { "@lieuwex:matrix.org": { "ts": 1490375470974 } } }, "$1490803157176CHxcX:telekollektiv.org": { "m.read": { "@cryptix:matrix.org": { "ts": 1490803539228 } } }, "$149096478816129FFblf:zboxapp.com": { "m.read": { "@keks:matrix.org": { "ts": 1491060463237 } } }, "$14910829291082232MElGy:matrix.org": { "m.read": { "@abeckmeyer:matrix.org": { "ts": 1491237628751 } } }, "$149142364060UAsNG:firc.de": { "m.read": { "@jerrykan:matrix.org": { "ts": 1491441835286 } } }, "$1492788373172290eYlai:matrix.org": { "m.read": { "@dmitry_da:matrix.org": { "ts": 1492788588131 } } }, "$1494867742663dmDfK:57north.org.uk": { "m.read": { "@PureTryOut:matrix.org": { "ts": 1494874079950 } } }, "$149512790018342lqble:matrix.org": { "m.read": { "@alien:matrix.org": { "ts": 1495130679489 } } }, "$1495193643559779zLVcl:matrix.org": { "m.read": { "@fireglow:firc.de": { "ts": 1495197129353 } } }, "$14956480321748523NvDON:matrix.org": { "m.read": { "@sirmitco:matrix.org": { "ts": 1495669733689 } } }, "$14958145971327785CYSQh:matrix.org": { "m.read": { "@AndrewJDR:matrix.org": { "ts": 1495826917773 } } }, "$149674913823980pEkHC:matrix.org": { "m.read": { "@ylecollen:matrix.org": { "ts": 1496752178438 } } }, "$1496872592206089xkBzG:matrix.org": { "m.read": { "@SimbaLion:matrix.org": { "ts": 1496901950384 } } }, "$1497046594344DXQug:kamax.io": { "m.read": { "@gabrin:matrix.org": { "ts": 1497094720897 } } }, "$1497284397188822mPUuX:matrix.org": { "m.read": { "@Bitti:mybitti.de": { "ts": 1497284929742 } } }, "$1497629680196725PqMmn:matrix.org": { "m.read": { "@BennZoid:matrix.org": { "ts": 1497719764941 } } }, "$14979315081484FrgGe:kek.community": { "m.read": { "@GreyHands:matrix.org": { "ts": 1497960535582 } } }, "$1498254115416453xDSwI:matrix.org": { "m.read": { "@MaxwellK:maxwellkepler.uk": { "ts": 1498255474685 } } }, "$1498300005736381KOwJo:matrix.org": { "m.read": { "@al-al:matrix.org": { "ts": 1498305146266 } } }, "$1498312680826767GSXQf:matrix.org": { "m.read": { "@matheusp:matrix.org": { "ts": 1498336048507 } } }, "$14984109491621453qAvEM:matrix.org": { "m.read": { "@dare-to-recurse:matrix.org": { "ts": 1498417426309 }, "@philipnelson:matrix.org": { "ts": 1498417462035 } } }, "$14984415731914489bCUqS:matrix.org": { "m.read": { "@USER122:matrix.org": { "ts": 1498444447206 } } }, "$1498661477931903lUbGY:matrix.org": { "m.read": { "@gustavo:zboxapp.com": { "ts": 1498661546841 } } }, "$14988059083agKWr:rigel.gurgy.me:8448": { "m.read": { "@BurNiinTRee:matrix.org": { "ts": 1498842899898 } } }, "$1498850425823YMWtC:sandhose.fr": { "m.read": { "@bobderbaumeister:matrix.org": { "ts": 1498891391776 } } }, "$1499018307697iTXig:spydar007.com": { "m.read": { "@kudos:matrix.org": { "ts": 1499247649796 } } }, "$14990696152224646GQIxK:matrix.org": { "m.read": { "@rcorrear:matrix.org": { "ts": 1499074512885 } } }, "$1499261795596GzeUk:matrix.trancendances.fr": { "m.read": { "@cognitivereflex:matrix.org": { "ts": 1499265256757 }, "@gurgy:rigel.gurgy.me:8448": { "ts": 1499262927644 } } }, "$14992748395105042EESzE:matrix.org": { "m.read": { "@Bitti:miui-germany.de": { "ts": 1499326294101 } } }, "$1499360773822021XhYqT:matrix.org": { "m.read": { "@shamil:matrix.shamilk.me": { "ts": 1499364068379 } } }, "$1499448006192771zOWPb:matrix.org": { "m.read": { "@hef:synapse.arbitrarion.com": { "ts": 1499464248598 }, "@mruuh:matrix.org": { "ts": 1499455720767 } } }, "$14999602181353126AixFp:matrix.org": { "m.read": { "@aviraldg:matrix.org": { "ts": 1499977939275 }, "@elcyborg:elcyb.org": { "ts": 1499970669932 } } }, "$150008299562zpIyU:timepath.xyz": { "m.read": { "@orphanizer:matrix.org": { "ts": 1500239392549 } } }, "$15003851945868ocEFY:lant.uk": { "m.read": { "@groza:matrix.org": { "ts": 1500412097124 } } }, "$1500657347383604jcbdb:matrix.org": { "m.read": { "@kfatehi:matrix.org": { "ts": 1500745649881 }, "@rhizo:matrix.org": { "ts": 1500755188704 } } }, "$15007783791650670HqhSZ:matrix.org": { "m.read": { "@dolanor:matrix.org": { "ts": 1500855320696 } } }, "$15009148432983311LDtKg:matrix.org": { "m.read": { "@Paul90:matrix.org": { "ts": 1500970936004 }, "@rogh.diamond:matrix.org": { "ts": 1500919237846 } } }, "$15010022844055936SBNze:matrix.org": { "m.read": { "@hfinch:matrix.org": { "ts": 1501005489132 } } }, "$15010062890nfeCX:matrix.trancendances.fr": { "m.read": { "@Gurgy:matrix.sidus.io": { "ts": 1501055471830 }, "@ometh:matrix.org": { "ts": 1501021330058 } } }, "$15010771934934362cUbFb:matrix.org": { "m.read": { "@astracode:matrix.org": { "ts": 1501102940590 } } }, "$1501313954677PCCBS:lmas.se": { "m.read": { "@martindale:matrix.org": { "ts": 1501382914106 } } }, "$15014194582893636gIuXa:matrix.org": { "m.read": { "@ChrisCeutz:matrix.org": { "ts": 1501509592172 } } }, "$15015149024330080uhLSC:matrix.org": { "m.read": { "@Densuke:matrix.org": { "ts": 1501576975472 }, "@gerco:home.gdries.nl": { "ts": 1501649441602 }, "@hef:arbitrarion.com": { "ts": 1501540718375 } } }, "$1501758908851055PBqQp:matrix.org": { "m.read": { "@kiki1:matrix.org": { "ts": 1501767852397 } } }, "$15017965301411892GYnVn:matrix.org": { "m.read": { "@bencevans:matrix.org": { "ts": 1501801634867 } } }, "$15018947022544304hwhhF:matrix.org": { "m.read": { "@tokodomo:im.nostrodomo.tk": { "ts": 1501967597497 } } }, "$15018963412560974nkESh:matrix.org": { "m.read": { "@Nik05:matrix.org": { "ts": 1501960391887 }, "@kinnarr:matrix.org": { "ts": 1502098057984 } } }, "$15021122804474727oegqC:matrix.org": { "m.read": { "@eleete0712:matrix.org": { "ts": 1502112337019 } } }, "$15022838231904309PlDPY:matrix.org": { "m.read": { "@jjj:matrix.org": { "ts": 1502339934743 } } }, "$1502471657356747xnBIC:matrix.org": { "m.read": { "@wervenyt:matrix.org": { "ts": 1502483924184 } } }, "$15024876365216NHNvr:kamax.io": { "m.read": { "@sudoreboot:matrix.org": { "ts": 1502527014540 } } }, "$1502630976157YEVoM:eggy.cc": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1502631004040 } } }, "$150281407168aslEf:matrix.trancendances.fr": { "m.read": { "@fah:matrix.org": { "ts": 1502818268464 } } }, "$150290566898NVqxJ:matrix.trancendances.fr": { "m.read": { "@cryptix:telekollektiv.org": { "ts": 1502994608936 } } }, "$15030038351831271preMf:matrix.org": { "m.read": { "@newaxon:matrix.org": { "ts": 1503003835730 } } }, "$15030057851859034sHKGE:matrix.org": { "m.read": { "@ycy:matrix.org": { "ts": 1503033482008 } } }, "$15030537502334230iIgVo:matrix.org": { "m.read": { "@ster:disroot.org": { "ts": 1503053939602 } } }, "$1503313601142roeBN:sw1v.org": { "m.read": { "@anna7:matrix.org": { "ts": 1503313841168 } } }, "$1503318590633drANT:57north.org.uk": { "m.read": { "@Spydar007:spydar007.com": { "ts": 1503318604372 } } }, "$15034899691510928bMtid:matrix.org": { "m.read": { "@weddle:matrix.org": { "ts": 1503495790862 } } }, "$15034993071647754NEYxy:matrix.org": { "m.read": { "@nico:alaena.fr": { "ts": 1503503438113 } } }, "$1503507212152lzxTo:matrix.trancendances.fr": { "m.read": { "@vicky.:matrix.org": { "ts": 1503507756656 } } }, "$15035152132051062SBXjT:matrix.org": { "m.read": { "@necrophcodr:matrix.org": { "ts": 1503519412606 } } }, "$1503599787378duJNI:sw1v.org": { "m.read": { "@TimWolla:matrix.org": { "ts": 1503615459999 } } }, "$1503748805837trIlY:riot.ovh": { "m.read": { "@Acorn:matrix.org": { "ts": 1503765074329 }, "@IncubusRK:matrix.org": { "ts": 1503781104095 }, "@gurgy:sidus.io": { "ts": 1503905992943 } } }, "$15038682542181628xeyTV:matrix.org": { "m.read": { "@psYchotic:matrix.org": { "ts": 1504001044504 } } }, "$15040906321165178dmvNl:matrix.org": { "m.read": { "@jeff:i2p.rocks": { "ts": 1504095821372 } } }, "$1504188831292AIpiN:jki.re": { "m.read": { "@rxl881:matrix.org": { "ts": 1504189676668 } } }, "$1504258988792xPErp:sw1v.org": { "m.read": { "@TheRealJackRabbit:matrix.org": { "ts": 1504259900607 } } }, "$150426642830hXfvt:matrix.trancendances.fr": { "m.read": { "@aperez:igalia.com": { "ts": 1504268273977 } } }, "$1504403724300xOlmd:magnap.dk": { "m.read": { "@technikhil:matrix.org": { "ts": 1504424306542 } } }, "$15044247591240955qyJKI:matrix.org": { "m.read": { "@MEP:matrix.org": { "ts": 1504477888333 }, "@adam:thebeckmeyers.xyz": { "ts": 1504498760975 } } }, "$15045525272755EuqfL:thebeckmeyers.xyz": { "m.read": { "@horrified:matrix.org": { "ts": 1504564498922 } } }, "$15046182321174021bpphQ:matrix.org": { "m.read": { "@alimobini:chakavak.goldnet.ir": { "ts": 1504618234056 } } }, "$15046226421241763DhWxH:matrix.org": { "m.read": { "@aaronluoxiao:matrix.org": { "ts": 1504623249626 } } }, "$15046329631412792MJFKW:matrix.org": { "m.read": { "@awdd:matrix.org": { "ts": 1504647560001 }, "@kevin-ng:matrix.org": { "ts": 1504641796840 }, "@noperope:matrix.org": { "ts": 1504642745686 } } }, "$15047164382470857hNBFj:matrix.org": { "m.read": { "@ethan.c2h6:matrix.org": { "ts": 1504744682599 } } }, "$1504806055249Gybmy:jki.re": { "m.read": { "@ewave:matrix.org": { "ts": 1504830116368 }, "@tx:matrix.org": { "ts": 1504811743281 } } }, "$15048829564557940vmgQj:matrix.org": { "m.read": { "@lmas:lmas.se": { "ts": 1504959147255 } } }, "$15052176613207367wnKxZ:matrix.org": { "m.read": { "@mcfly4:matrix.org": { "ts": 1505229616077 } } }, "$15053149164508680grofi:matrix.org": { "m.read": { "@timconner:matrix.org": { "ts": 1505315164996 } } }, "$15053166204561666BMJVz:matrix.org": { "m.read": { "@yangm97:matrix.org": { "ts": 1505319137968 } } }, "$1505425692101hsqRA:msgs.tk": { "m.read": { "@Asiannoodles42:matrix.org": { "ts": 1505566423758 }, "@gregerwin256:matrix.org": { "ts": 1505447878775 } } }, "$15058176233097646AQtPQ:matrix.org": { "m.read": { "@gergoe:matrix.bgsoft.hu": { "ts": 1505831778583 } } }, "$15059174354544686OCCCn:matrix.org": { "m.read": { "@RZP:matrix.org": { "ts": 1505917507353 } } }, "$1506253510717AEWEV:gruenhage.xyz": { "m.read": { "@Amandine:matrix.org": { "ts": 1506253519464 } } }, "$15062633553146205whHvn:matrix.org": { "m.read": { "@Moose:matrix.org": { "ts": 1506281639655 }, "@maxpy:matrix.org": { "ts": 1506306382566 } } }, "$15065120951118qfScl:gruenhage.xyz": { "m.read": { "@jimmycuadra:matrix.org": { "ts": 1506516050312 } } }, "$1506579026403ivfwK:matrix.trancendances.fr": { "m.read": { "@Thomas12:matrix.org": { "ts": 1506604871247 }, "@sull:matrix.org": { "ts": 1506604246502 } } }, "$1506614425165744HytWI:matrix.org": { "m.read": { "@robswain:matrix.org": { "ts": 1506671789337 } } }, "$1506702918755135XxTZD:matrix.org": { "m.read": { "@Mjark:matrix.org": { "ts": 1506704821213 } } }, "$1506717312116XBsza:planitz.at": { "m.read": { "@jelen:matrix.org": { "ts": 1506889323113 } } }, "$1506883219850HdxhW:vurpo.fi": { "m.read": { "@scoregoblin:matrix.org": { "ts": 1506888989608 } } }, "$15069534194111xZbbA:monkeystew.net": { "m.read": { "@jurek28:matrix.org": { "ts": 1506969525471 } } }, "$15069763561052lTTIA:kamax.io": { "m.read": { "@cellardoor:matrix.org": { "ts": 1507019961335 } } }, "$1507215802721468MydeC:matrix.org": { "m.read": { "@nheko_test:matrix.org": { "ts": 1507215843559 } } }, "$1507288005665KAvgT:jki.re": { "m.read": { "@jon:terracrypt.net": { "ts": 1509406423455 } } }, "$1507579165864hWIpr:matrix.ffslfl.net": { "m.read": { "@sfunk1x:sfunk1x.com": { "ts": 1507590865590 } } }, "$15076244241924210ljXdy:matrix.org": { "m.read": { "@fruitloop:matrix.org": { "ts": 1507626178885 } } }, "$1507641843932DTgwX:jki.re": { "m.read": { "@gregknicholson:matrix.org": { "ts": 1507641871129 } } }, "$1507646965131peBmO:sw1v.org": { "m.read": { "@demyan:matrix.org": { "ts": 1507647080270 } } }, "$15077373141172GrCFI:matrix.ffslfl.net": { "m.read": { "@pamo:matrix.org": { "ts": 1508162197189 } } }, "$1507742215130777LCogS:matrix.org": { "m.read": { "@meinashi:matrix.org": { "ts": 1507773316905 } } }, "$150791201178fUEsp:jki.re": { "m.read": { "@SijmenSchoon:matrix.org": { "ts": 1507912264124 } } }, "$15079124501547656VamiH:matrix.org": { "m.read": { "@silloopa:matrix.org": { "ts": 1507936541927 } } }, "$15079365491962045DaPjK:matrix.org": { "m.read": { "@erdnaxeli:cervoi.se": { "ts": 1507969883552 } } }, "$15080663073398596LvDpA:matrix.org": { "m.read": { "@makeyou:matrix.org": { "ts": 1508067063195 } } }, "$1508513018200mfPwb:matrix.ffslfl.net": { "m.read": { "@Foxy:matrix.org": { "ts": 1508619411719 }, "@airin:matrix.org": { "ts": 1508712969905 }, "@anaxios:matrix.daedalist.net": { "ts": 1508724667490 } } }, "$150883978946506vaWKC:matrix.org": { "m.read": { "@zhaojie:finogeeks.club": { "ts": 1508840785969 } } }, "$150884226274985oSGYh:matrix.org": { "m.read": { "@monsterj:chat.weho.st": { "ts": 1508863510741 } } }, "$15089421451519668XfMrt:matrix.org": { "m.read": { "@intelfx:intelfx.name": { "ts": 1508946082608 } } }, "$1508953133578WSNqk:jki.re": { "m.read": { "@remi:remireuvekamp.nl": { "ts": 1508967225329 } } }, "$150896632794adQPf:dries.info": { "m.read": { "@mooshoe:matrix.org": { "ts": 1508982365930 } } }, "$15090178192580728VTkpa:matrix.org": { "m.read": { "@abokth:matrix.org": { "ts": 1509020479835 } } }, "$150904144785JyZEU:matrix.trancendances.fr": { "m.read": { "@tom:lant.uk": { "ts": 1509042123384 } } }, "$1509077769109iSUWZ:owls.io": { "m.read": { "@alec:owls.io": { "ts": 1509095887699 } } }, "$15091160883934690hoqrI:matrix.org": { "m.read": { "@MaXGGXaM:matrix.org": { "ts": 1509186601111 }, "@jsweb1:matrix.org": { "ts": 1509388924382 }, "@trung:matrix.org": { "ts": 1509244396428 }, "@uha:goa.ninja": { "ts": 1509284521626 }, "@webdevguru:matrix.org": { "ts": 1509308024022 } } }, "$15092844643KLeQl:goa.ninja": { "m.read": { "@illyohs:matrix.org": { "ts": 1509298389917 } } }, "$1509411317857054xmmNq:matrix.org": { "m.read": { "@lanza:kaizen.bzh": { "ts": 1509435326409 }, "@walle303:kek.community": { "ts": 1509429997056 } } }, "$15094891661501VVAEr:amorgan.xyz": { "m.read": { "@kalle:matrix.c4hx.com": { "ts": 1509511366435 } } }, "$15095202821jrTKu:hris.to": { "m.read": { "@esh:ravne.land": { "ts": 1509574504978 } } }, "$1509666060207DnfgO:jki.re": { "m.read": { "@alex:matrix.tha.kz": { "ts": 1509686223291 } } }, "$1509728531223kTaYF:matrix.trancendances.fr": { "m.read": { "@FSMaxB:maxbruckner.de": { "ts": 1509730859176 } } }, "$1509736321239rOUcW:matrix.trancendances.fr": { "m.read": { "@Ren:matrix.org": { "ts": 1509740135249 }, "@equinox:matrix.org": { "ts": 1509771127865 } } }, "$1509812395228lclYG:jki.re": { "m.read": { "@esa:matrix.esav.fi": { "ts": 1509812553635 } } }, "$15098246072524xtQIM:amorgan.xyz": { "m.read": { "@nocylah:waffle.tech": { "ts": 1509826834996 } } }, "$1509885330253IVHPw:jki.re": { "m.read": { "@quite:matrix.org": { "ts": 1509886702236 } } }, "$1509898609257eAagJ:jki.re": { "m.read": { "@magnap:magnap.dk": { "ts": 1509901119952 } } }, "$15099075112359309WqmcE:matrix.org": { "m.read": { "@zach:ghostcorp.net": { "ts": 1509907704820 } } }, "$1509962603870xcXGK:kamax.io": { "m.read": { "@jontow:zenbsd.net": { "ts": 1509967753639 } } }, "$15099851764027472LfEGo:matrix.org": { "m.read": { "@gerco:dries.info": { "ts": 1509999762705 }, "@roland:planitz.at": { "ts": 1509987169366 }, "@shell:57north.org.uk": { "ts": 1509987704036 } } }, "$1510000336180nbPmd:horsein.space": { "m.read": { "@ycy:disroot.org": { "ts": 1510014889815 } } }, "$15100686441007800eyjNs:matrix.org": { "m.read": { "@mujx:matrix.org": { "ts": 1510069385091 } } }, "$1510101418220SyFJs:westwork.org": { "m.read": { "@eddie666:matrix.org": { "ts": 1510103818748 } } }, "$1510140511936OKSpR:riot.ovh": { "m.read": { "@voyager:t2bot.io": { "ts": 1510140513760 } } }, "$1510180269248745LfahF:matrix.org": { "m.read": { "@eggster:matrix.org": { "ts": 1510191581689 }, "@eggy:eggy.cc": { "ts": 1510190746163 } } }, "$1510239026746388XbxSS:matrix.org": { "m.read": { "@kyrias:kyriasis.com": { "ts": 1510241000952 } } }, "$15102535621027506ELDLY:matrix.org": { "m.read": { "@general:matrix.org": { "ts": 1510280508022 } } }, "$1510385871216GRDjy:gruenhage.xyz": { "m.read": { "@kbraham:matrix.braham.eu": { "ts": 1510392580924 }, "@kegan:matrix.org": { "ts": 1510397650056 } } }, "$15103993111793671nehHs:matrix.org": { "m.read": { "@ERIIX:matrix.org": { "ts": 1510418728545 }, "@MTRNord:matrix.org": { "ts": 1510399375120 }, "@chrislesch:matrix.org": { "ts": 1510458701633 }, "@kurt:roeckx.be": { "ts": 1510407696623 }, "@mikaela:disroot.org": { "ts": 1510478484282 }, "@reyawn:matrix.org": { "ts": 1510423955887 }, "@teej:matrix.org": { "ts": 1510505197407 } } }, "$15105208071395zYbyz:amorgan.xyz": { "m.read": { "@schnuffle:matrix.org": { "ts": 1510521029967 } } }, "$15105252861431whzxA:amorgan.xyz": { "m.read": { "@WGH:torlan.ru": { "ts": 1510525291989 } } }, "$15105258531432GbLEH:amorgan.xyz": { "m.read": { "@TimePath:timepath.xyz": { "ts": 1510564489448 }, "@cdelisle:matrix.xwiki.com": { "ts": 1510526479567 } } }, "$1510579582126928aCxnR:matrix.org": { "m.read": { "@Tokodomo:matrix.org": { "ts": 1510579877613 } } }, "$1510580900157EghKM:sw1v.org": { "m.read": { "@li:matrix.org": { "ts": 1510580913510 }, "@vurpo:vurpo.fi": { "ts": 1510580973650 } } }, "$1510581214225viIGm:jki.re": { "m.read": { "@leapX:matrix.org": { "ts": 1510582749548 }, "@luozhaofeng:finogeeks.club": { "ts": 1510581218551 }, "@max:kamax.io": { "ts": 1510584693304 }, "@rschulman:westwork.org": { "ts": 1510581254992 } } }, "$1510588740247AccLw:jki.re": { "m.read": { "@dave:matrix.org": { "ts": 1510588791106 } } }, "$1510590233195dAyYE:sw1v.org": { "m.read": { "@seequ:krtdex.com": { "ts": 1510590234262 } } }, "$1510595262399452DrIQp:matrix.org": { "m.read": { "@bookworm:matrix.org": { "ts": 1510596216473 } } }, "$1510598644264pTaIR:sw1v.org": { "m.read": { "@mcfly2:matrix.org": { "ts": 1510598677206 } } }, "$1510599883270KLZZx:sw1v.org": { "m.read": { "@aaron:raim.ist": { "ts": 1510600720379 }, "@roland.lammel:matrix.org": { "ts": 1510600204161 }, "@sandhose:sandhose.fr": { "ts": 1510605638531 } } }, "$1510608220645023OtjQD:matrix.org": { "m.read": { "@st4t3:horsein.space": { "ts": 1510609840788 } } }, "$1510612727324ksxca:sw1v.org": { "m.read": { "@DatseMultimedia:matrix.org": { "ts": 1510615435280 }, "@Ekho:matrix.org": { "ts": 1510632892146 }, "@MrCustomizer:matrix.org": { "ts": 1510642624036 }, "@exul:exul.org": { "ts": 1510646163320 }, "@jzk:matrix.org": { "ts": 1510648001794 }, "@matthew:matrix.org": { "ts": 1510620273223 }, "@thrrgilag:monkeystew.net": { "ts": 1510620927761 }, "@travis:t2l.io": { "ts": 1510612884505 }, "@uhoreg:matrix.org": { "ts": 1510615200723 } } }, "$15106535441576353rbLJL:matrix.org": { "m.read": { "@Brendan:matrix.trancendances.fr": { "ts": 1510654178212 }, "@Coffee:matrix.org": { "ts": 1510661885999 }, "@Jikstra:matrix.org": { "ts": 1510654839822 }, "@MTRNord:matrix.ffslfl.net": { "ts": 1510666966283 }, "@andrewm:amorgan.xyz": { "ts": 1510653608574 }, "@dupa11111dupa:matrix.org": { "ts": 1510655629192 }, "@erikj:jki.re": { "ts": 1510654853773 }, "@jan.christian:gruenhage.xyz": { "ts": 1510654129711 }, "@krombel:msgs.tk": { "ts": 1510653550353 }, "@ptman:matrix.org": { "ts": 1510656113025 }, "@richvdh:sw1v.org": { "ts": 1510664106046 }, "@x:riot.ovh": { "ts": 1510653638653 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "avatar_url": "mxc://vurpo.fi/rAVYYdwTozdZslBFduliksPR", "displayname": "vurpo", "membership": "join" }, "event_id": "$1509487245680TnRoO:vurpo.fi", "membership": "join", "origin_server_ts": 1509487245380, "sender": "@vurpo:vurpo.fi", "state_key": "@vurpo:vurpo.fi", "type": "m.room.member", "unsigned": { "age": 1180707298, "prev_content": { "avatar_url": "mxc://vurpo.fi/dEKpSjbzDlMftunBLxhPACWo", "displayname": "vurpo", "membership": "join" }, "prev_sender": "@vurpo:vurpo.fi", "replaces_state": "$1508011798167MZNZC:vurpo.fi" } }, { "content": { "avatar_url": "mxc://sfunk1x.com/bveisjHRKBSRzVrInfcBsTGW", "displayname": "sfunk1x", "membership": "join" }, "event_id": "$15056064121eIKNm:sfunk1x.com", "origin_server_ts": 1505606413476, "sender": "@sfunk1x:sfunk1x.com", "state_key": "@sfunk1x:sfunk1x.com", "type": "m.room.member", "unsigned": { "age": 114 } }, { "content": { "avatar_url": "mxc://sw1v.org/rARZrbDMGnNQOKKWZtCVxusq", "displayname": "richvdh", "membership": "join" }, "event_id": "$1487177656127LvErz:sw1v.org", "origin_server_ts": 1487177656062, "sender": "@richvdh:sw1v.org", "state_key": "@richvdh:sw1v.org", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "avatar_url": null, "displayname": "WGH", "membership": "join" }, "event_id": "$1487179915391DTJeF:torlan.ru", "origin_server_ts": 1487179915475, "sender": "@WGH:torlan.ru", "state_key": "@WGH:torlan.ru", "type": "m.room.member", "unsigned": { "age": 470 } }, { "content": { "avatar_url": "mxc://matrix.shamilk.me/fFKqULUGPLHFUhwKTGyoYHeO", "displayname": "Shamil", "membership": "join" }, "event_id": "$149838133896SNVTw:matrix.shamilk.me", "origin_server_ts": 1498381338771, "sender": "@shamil:matrix.shamilk.me", "state_key": "@shamil:matrix.shamilk.me", "type": "m.room.member", "unsigned": { "age": 154 } }, { "content": { "avatar_url": "mxc://westwork.org/ExApBngirLIibAFdkekKsizI", "displayname": "Ross Schulman", "membership": "join" }, "event_id": "$1505598976110ljziz:westwork.org", "origin_server_ts": 1505598976085, "sender": "@rschulman:westwork.org", "state_key": "@rschulman:westwork.org", "type": "m.room.member", "unsigned": { "age": 159 } }, { "content": { "github": { "default_repo": "matrix-org/dendrite" } }, "event_id": "$1487949496452975cwaXN:matrix.org", "origin_server_ts": 1487949496821, "sender": "@kegan:matrix.org", "state_key": "_@_neb_github:matrix.org", "type": "m.room.bot.options", "unsigned": { "age": 22718455857 } }, { "content": { "avatar_url": null, "displayname": "teej", "membership": "join" }, "event_id": "$15089282141311368CAebn:matrix.org", "membership": "join", "origin_server_ts": 1508928214339, "sender": "@teej:matrix.org", "state_key": "@teej:matrix.org", "type": "m.room.member", "unsigned": { "age": 1739738339 } }, { "content": { "avatar_url": "mxc://horsein.space/jfxgxGIThDWadiuORQjVjoiY", "displayname": "st4t3", "membership": "join" }, "event_id": "$1510000336180nbPmd:horsein.space", "origin_server_ts": 1510000336865, "sender": "@st4t3:horsein.space", "state_key": "@st4t3:horsein.space", "type": "m.room.member", "unsigned": { "age": 21 } }, { "content": { "avatar_url": null, "displayname": "fruitloop", "membership": "join" }, "event_id": "$1506717312116XBsza:planitz.at", "membership": "join", "origin_server_ts": 1506717312034, "sender": "@roland:planitz.at", "state_key": "@roland:planitz.at", "type": "m.room.member", "unsigned": { "age": 3950640644, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@roland:planitz.at", "replaces_state": "$150668306333druCW:planitz.at" } }, { "content": { "membership": "join" }, "event_id": "$SuCVJ0GVqDV8EnkR:dendrite1.negativecurvature.net", "origin_server_ts": 1498230213206, "sender": "@mjark:dendrite1.negativecurvature.net", "state_key": "@mjark:dendrite1.negativecurvature.net", "type": "m.room.member", "unsigned": { "replaces_state": "$rKHAZs3IjzOPo3cy:dendrite1.negativecurvature.net" } }, { "content": { "membership": "leave" }, "event_id": "$1507969983613wgumV:cervoi.se", "membership": "leave", "origin_server_ts": 1507969983385, "sender": "@erdnaxeli:cervoi.se", "state_key": "@erdnaxeli:cervoi.se", "type": "m.room.member", "unsigned": { "age": 2697969293, "replaces_state": "$150262392726918xrCez:cervoi.se" } }, { "content": { "avatar_url": "mxc://matrix.org/UVqqcXVQkeywHCzsvZnADeGR", "displayname": "Ekho", "membership": "join" }, "event_id": "$1509411317857054xmmNq:matrix.org", "membership": "join", "origin_server_ts": 1509411317658, "sender": "@Ekho:matrix.org", "state_key": "@Ekho:matrix.org", "type": "m.room.member", "unsigned": { "age": 1256635020 } }, { "content": { "avatar_url": "mxc://matrix.org/nUpzboMouUDsVJTtwQUtaFXq", "displayname": "jzk", "membership": "join" }, "event_id": "$15084901761263738djBZN:matrix.org", "membership": "join", "origin_server_ts": 1508490176186, "sender": "@jzk:matrix.org", "state_key": "@jzk:matrix.org", "type": "m.room.member", "unsigned": { "age": 2177776492 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15100827401281487sZZfN:matrix.org", "membership": "join", "origin_server_ts": 1510082740408, "sender": "@eddie666:matrix.org", "state_key": "@eddie666:matrix.org", "type": "m.room.member", "unsigned": { "age": 585212270 } }, { "content": { "avatar_url": "mxc://kek.community/TJtugdaBqBJuINxDfCYvrXaf", "displayname": "walle303", "membership": "join" }, "event_id": "$150303892611250VFwaZ:kek.community", "membership": "join", "origin_server_ts": 1503038926862, "sender": "@walle303:kek.community", "state_key": "@walle303:kek.community", "type": "m.room.member", "unsigned": { "age": 7629025816, "replaces_state": "$14979315081484FrgGe:kek.community" } }, { "content": { "avatar_url": "mxc://matrix.org/GLIBVHEmaaHSTmJuIvUJsewa", "displayname": null, "membership": "join" }, "event_id": "$15046232511251550EDAeE:matrix.org", "membership": "join", "origin_server_ts": 1504623251234, "sender": "@aaronluoxiao:matrix.org", "state_key": "@aaronluoxiao:matrix.org", "type": "m.room.member", "unsigned": { "age": 6044701444 } }, { "content": { "avatar_url": null, "displayname": "MV", "membership": "join" }, "event_id": "$15033381045291584MCGxR:matrix.org", "membership": "join", "origin_server_ts": 1503338104457, "sender": "@mcfly2:matrix.org", "state_key": "@mcfly2:matrix.org", "type": "m.room.member", "unsigned": { "age": 7329848221, "replaces_state": "$15014150092857182XNEQI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OTwzRbBmrqwemBNaGtOTIwoN", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15101635422746730vQQyG:matrix.org", "membership": "join", "origin_server_ts": 1510163542587, "sender": "@MTRNord:matrix.org", "state_key": "@MTRNord:matrix.org", "type": "m.room.member", "unsigned": { "age": 504410091 } }, { "content": { "avatar_url": "mxc://matrix.org/ukfJsuTFLRmOXgCcpyYejrXp", "displayname": "ERIIX Blaike", "membership": "join" }, "event_id": "$15059205514597239fNaIa:matrix.org", "membership": "join", "origin_server_ts": 1505920551054, "sender": "@ERIIX:matrix.org", "state_key": "@ERIIX:matrix.org", "type": "m.room.member", "unsigned": { "age": 4747401624 } }, { "content": { "avatar_url": "mxc://eggy.cc/vySkCYKWuZHDgqybvdxxglBW", "displayname": "Matt (eggy)", "membership": "join" }, "event_id": "$1508196225384VBJbX:eggy.cc", "membership": "join", "origin_server_ts": 1508196225653, "sender": "@eggy:eggy.cc", "state_key": "@eggy:eggy.cc", "type": "m.room.member", "unsigned": { "age": 2471727025, "prev_content": { "avatar_url": "mxc://eggy.cc/OxKidJFlIaKvlsVNPvvoQzki", "displayname": "Matt (eggy)", "membership": "join" }, "prev_sender": "@eggy:eggy.cc", "replaces_state": "$1508196156362zqgPE:eggy.cc" } }, { "content": { "avatar_url": "mxc://magnap.dk/IECIiaFLQGVHVkYgDkEoexad", "displayname": "Magnap​", "membership": "join" }, "event_id": "$1504403724300xOlmd:magnap.dk", "origin_server_ts": 1504403724573, "sender": "@magnap:magnap.dk", "state_key": "@magnap:magnap.dk", "type": "m.room.member", "unsigned": { "age": 23 } }, { "content": { "avatar_url": "mxc://matrix.org/ZnBnDzDPzGtpeiTNzMkIXjzK", "displayname": "Paul", "membership": "join" }, "event_id": "$15031372623266334xkPxa:matrix.org", "membership": "join", "origin_server_ts": 1503137262384, "sender": "@ptman:matrix.org", "state_key": "@ptman:matrix.org", "type": "m.room.member", "unsigned": { "age": 7530690294 } }, { "content": { "avatar_url": null, "displayname": "asthma", "membership": "join" }, "event_id": "$15095202821jrTKu:hris.to", "origin_server_ts": 1509520412046, "sender": "@mihaylov:hris.to", "state_key": "@mihaylov:hris.to", "type": "m.room.member", "unsigned": { "age": 73 } }, { "content": { "avatar_url": "mxc://gruenhage.xyz/HOkBeFWIoDOiuDxqXHPrFLUE", "displayname": "jcgruenhage", "membership": "join" }, "event_id": "$1510385871216GRDjy:gruenhage.xyz", "membership": "join", "origin_server_ts": 1510385871021, "sender": "@jan.christian:gruenhage.xyz", "state_key": "@jan.christian:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 282081657, "prev_content": { "avatar_url": "mxc://gruenhage.xyz/QsgpIokavDaHBQhAohxCpvVS", "displayname": "jcgruenhage", "membership": "join" }, "prev_sender": "@jan.christian:gruenhage.xyz", "replaces_state": "$1507996701464lXGKi:gruenhage.xyz" } }, { "content": { "avatar_url": null, "displayname": "Github [@kegan:matrix.org]", "membership": "join" }, "event_id": "$14876108101514551aNcpF:matrix.org", "membership": "join", "origin_server_ts": 1487610810235, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "state_key": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.member", "unsigned": { "age": 23057142443, "replaces_state": "$14876108091514547uNxKZ:matrix.org" } }, { "content": { "url": "mxc://matrix.org/GvRtJWGUdxhajtZPxQbTBeyK" }, "event_id": "$148715928724182FsCDt:matrix.org", "origin_server_ts": 1487159287452, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 23508665226 } }, { "content": { "avatar_url": null, "displayname": "varesa", "membership": "join" }, "event_id": "$150029089130248BYoXN:matrix.esav.fi", "origin_server_ts": 1500290891803, "sender": "@esa:matrix.esav.fi", "state_key": "@esa:matrix.esav.fi", "type": "m.room.member", "unsigned": { "age": 40 } }, { "content": { "creator": "@matthew:matrix.org" }, "event_id": "$148715913723534HgrwM:matrix.org", "origin_server_ts": 1487159137233, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.create", "unsigned": { "age": 23508815445 } }, { "content": { "membership": "leave" }, "event_id": "$150164965214teTND:home.gdries.nl", "membership": "leave", "origin_server_ts": 1501649652855, "sender": "@gerco:home.gdries.nl", "state_key": "@gerco:home.gdries.nl", "type": "m.room.member", "unsigned": { "age": 9018299823, "prev_content": { "avatar_url": null, "displayname": "Gerco Dries", "membership": "join" }, "prev_sender": "@gerco:home.gdries.nl", "replaces_state": "$150164936913kwqpi:home.gdries.nl" } }, { "content": { "avatar_url": "mxc://matrix.org/FmzDrTFoPWASqZVmNgSWZzIs", "displayname": "Finch", "membership": "join" }, "event_id": "$15009901083862805mxMoE:matrix.org", "membership": "join", "origin_server_ts": 1500990108977, "sender": "@hfinch:matrix.org", "state_key": "@hfinch:matrix.org", "type": "m.room.member", "unsigned": { "age": 9677843701, "replaces_state": "$15009900893862540yqLpE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15023067332246477riJlM:matrix.org", "membership": "join", "origin_server_ts": 1502306733688, "sender": "@pamo:matrix.org", "state_key": "@pamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 8361218990 } }, { "content": { "avatar_url": "mxc://disroot.org/KkbzOHatWrlFaWKUsGGnbZPS", "displayname": "Mikaela", "membership": "join" }, "event_id": "$15040169059372HEMah:disroot.org", "membership": "join", "origin_server_ts": 1504016905596, "sender": "@mikaela:disroot.org", "state_key": "@mikaela:disroot.org", "type": "m.room.member", "unsigned": { "age": 6651047082, "prev_content": { "avatar_url": "mxc://disroot.org/KkbzOHatWrlFaWKUsGGnbZPS", "displayname": "Mikaela 🇫🇮", "membership": "join" }, "prev_sender": "@mikaela:disroot.org", "replaces_state": "$15040107188888xGDIq:disroot.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YvGXZMmdVizRTNhECBKOBNNo", "displayname": "Yan Minari", "membership": "join" }, "event_id": "$15042545873293363rjVQk:matrix.org", "membership": "join", "origin_server_ts": 1504254587648, "sender": "@yangm97:matrix.org", "state_key": "@yangm97:matrix.org", "type": "m.room.member", "unsigned": { "age": 6413365030, "replaces_state": "$15042542843290518LFoQj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sebastiaan Veld", "membership": "join" }, "event_id": "$15028624492823659AqmAm:matrix.org", "membership": "join", "origin_server_ts": 1502862449730, "sender": "@sveld:matrix.org", "state_key": "@sveld:matrix.org", "type": "m.room.member", "unsigned": { "age": 7805502948 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15040985158rOwXN:i2p.rocks", "origin_server_ts": 1504098514805, "sender": "@jeff:i2p.rocks", "state_key": "@jeff:i2p.rocks", "type": "m.room.member", "unsigned": { "age": 230, "replaces_state": "$150283990990rjCgn:i2p.rocks" } }, { "content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "TimePath", "membership": "join" }, "event_id": "$1502283441272kIkqn:timepath.xyz", "membership": "join", "origin_server_ts": 1502283441122, "sender": "@TimePath:timepath.xyz", "state_key": "@TimePath:timepath.xyz", "type": "m.room.member", "unsigned": { "age": 8384511556, "prev_content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "‮htaPemiT‬", "membership": "join" }, "prev_sender": "@TimePath:timepath.xyz", "replaces_state": "$1502272347153bYmBE:timepath.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/FjqrLbqOohdLbecVrBxVSHeo", "displayname": "Nik05", "membership": "join" }, "event_id": "$15008949392707977eODIv:matrix.org", "membership": "join", "origin_server_ts": 1500894939580, "sender": "@Nik05:matrix.org", "state_key": "@Nik05:matrix.org", "type": "m.room.member", "unsigned": { "age": 9773013098, "replaces_state": "$15008948272706847GUeXF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nVPfFsMfobpLqaFoKAdAlLfX", "displayname": "Chris", "membership": "join" }, "event_id": "$15054077426126108huzTd:matrix.org", "membership": "join", "origin_server_ts": 1505407742073, "sender": "@chrislesch:matrix.org", "state_key": "@chrislesch:matrix.org", "type": "m.room.member", "unsigned": { "age": 5260210605 } }, { "content": { "membership": "leave" }, "event_id": "$1503503449102ZSDml:alaena.fr", "membership": "leave", "origin_server_ts": 1503503449482, "sender": "@nico:alaena.fr", "state_key": "@nico:alaena.fr", "type": "m.room.member", "unsigned": { "age": 7164503196, "prev_content": { "avatar_url": null, "displayname": "Nico", "membership": "join" }, "prev_sender": "@nico:alaena.fr", "replaces_state": "$1503503303100HIliH:alaena.fr" } }, { "content": { "avatar_url": null, "displayname": "jontow", "membership": "join" }, "event_id": "$149053555726uoslQ:zenbsd.net", "origin_server_ts": 1490535557156, "sender": "@jontow:zenbsd.net", "state_key": "@jontow:zenbsd.net", "type": "m.room.member", "unsigned": { "age": 38 } }, { "content": { "membership": "leave" }, "event_id": "$1496948194163580uGiIA:matrix.org", "membership": "leave", "origin_server_ts": 1496948194111, "sender": "@ylecollen:matrix.org", "state_key": "@ylecollen:matrix.org", "type": "m.room.member", "unsigned": { "age": 13719758567, "replaces_state": "$1492786499145648reSpL:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dEingjzhIixnpSWKCfWOalnM", "displayname": "gray", "membership": "join" }, "event_id": "$15044247591240955qyJKI:matrix.org", "membership": "join", "origin_server_ts": 1504424759761, "sender": "@general:matrix.org", "state_key": "@general:matrix.org", "type": "m.room.member", "unsigned": { "age": 6243192917 } }, { "content": { "avatar_url": "mxc://terracrypt.net/dgrTvNjRusPYHJNDqgvscjwZ", "displayname": "Jon ☎️", "membership": "join" }, "event_id": "$14945052353693OcSMM:terracrypt.net", "membership": "join", "origin_server_ts": 1494505235342, "sender": "@jon:terracrypt.net", "state_key": "@jon:terracrypt.net", "type": "m.room.member", "unsigned": { "age": 16162717336, "prev_content": { "avatar_url": "mxc://terracrypt.net/zOJfsibJKQKbxQBEMKZRlyJA", "displayname": "Jon ☎️", "membership": "join" }, "prev_sender": "@jon:terracrypt.net", "replaces_state": "$1492734432814sStem:terracrypt.net" } }, { "content": { "avatar_url": "mxc://matrix.org/OonjUOmcuVpUnmOWKtzPmAFe", "displayname": "uhoreg", "membership": "join" }, "event_id": "$1487177584159363NMVVB:matrix.org", "membership": "join", "origin_server_ts": 1487177584915, "sender": "@uhoreg:matrix.org", "state_key": "@uhoreg:matrix.org", "type": "m.room.member", "unsigned": { "age": 23490367763 } }, { "content": { "avatar_url": "mxc://ghostcorp.net/WwoGfRcBjFEPmFCpprQhdrKM", "displayname": "Zach Oglesby", "membership": "join" }, "event_id": "$150656765521JDgVD:ghostcorp.net", "origin_server_ts": 1506567654824, "sender": "@zach:ghostcorp.net", "state_key": "@zach:ghostcorp.net", "type": "m.room.member", "unsigned": { "age": 1086 } }, { "content": { "avatar_url": null, "displayname": "Bitti", "membership": "join" }, "event_id": "$14980822923ebVpl:miui-germany.de", "origin_server_ts": 1498082292526, "sender": "@Bitti:miui-germany.de", "state_key": "@Bitti:miui-germany.de", "type": "m.room.member", "unsigned": { "age": 147 } }, { "content": { "membership": "leave" }, "event_id": "$14987555386483JPNMJ:zboxapp.com", "membership": "leave", "origin_server_ts": 1498755538205, "sender": "@gustavo:zboxapp.com", "state_key": "@gustavo:zboxapp.com", "type": "m.room.member", "unsigned": { "age": 11912414473, "replaces_state": "$149091150316093Tzpsw:zboxapp.com" } }, { "content": { "membership": "leave" }, "event_id": "$15075729731234512MOzod:matrix.org", "membership": "leave", "origin_server_ts": 1507572973673, "sender": "@Asiannoodles42:matrix.org", "state_key": "@Asiannoodles42:matrix.org", "type": "m.room.member", "unsigned": { "age": 3094979005, "replaces_state": "$15017851841226978RfhFU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$149946419014WWaOZ:synapse.arbitrarion.com", "origin_server_ts": 1499464189742, "sender": "@hef:synapse.arbitrarion.com", "state_key": "@hef:synapse.arbitrarion.com", "type": "m.room.member", "unsigned": { "age": 710 } }, { "content": { "avatar_url": null, "displayname": "jsweb1", "membership": "join" }, "event_id": "$15089232181253039fIThB:matrix.org", "membership": "join", "origin_server_ts": 1508923218142, "sender": "@jsweb1:matrix.org", "state_key": "@jsweb1:matrix.org", "type": "m.room.member", "unsigned": { "age": 1744734536 } }, { "content": { "alias": "#dendrite-dev:matrix.org" }, "event_id": "$148715921023868ydEcB:matrix.org", "origin_server_ts": 1487159210467, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 23508742211 } }, { "content": { "avatar_url": "mxc://matrix.org/VkXaqVkLHVzdSeAaBUklCzQy", "displayname": "Coffee", "membership": "join" }, "event_id": "$14887843491773295SbnCT:matrix.org", "membership": "join", "origin_server_ts": 1488784349007, "sender": "@Coffee:matrix.org", "state_key": "@Coffee:matrix.org", "type": "m.room.member", "unsigned": { "age": 21883603671, "replaces_state": "$1488554479548296BmtPA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sam Vilain", "membership": "join" }, "event_id": "$1490909817208503dVBKy:matrix.org", "membership": "join", "origin_server_ts": 1490909817826, "sender": "@samv:matrix.org", "state_key": "@samv:matrix.org", "type": "m.room.member", "unsigned": { "age": 19758134852 } }, { "content": { "avatar_url": "mxc://raim.ist/FXOzjAdHBpcxFBqpKIbQWInl", "displayname": "Aaron Raimist", "membership": "join" }, "event_id": "$14927408247GRVZe:raim.ist", "origin_server_ts": 1492740817197, "sender": "@aaron:raim.ist", "state_key": "@aaron:raim.ist", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": null, "displayname": "Bitti", "membership": "join" }, "event_id": "$149702818912MWeVn:mybitti.de", "origin_server_ts": 1497028189621, "sender": "@Bitti:mybitti.de", "state_key": "@Bitti:mybitti.de", "type": "m.room.member", "unsigned": { "age": 119 } }, { "content": { "avatar_url": "mxc://maxbruckner.de/BradnfJZWdkoUMlQqazMhWVr", "displayname": "FSMaxB", "membership": "join" }, "event_id": "$14985965943RhrmB:maxbruckner.de", "origin_server_ts": 1498596591247, "sender": "@FSMaxB:maxbruckner.de", "state_key": "@FSMaxB:maxbruckner.de", "type": "m.room.member", "unsigned": { "age": 2797 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14991953604220765OgjOA:matrix.org", "membership": "join", "origin_server_ts": 1499195360666, "sender": "@cognitivereflex:matrix.org", "state_key": "@cognitivereflex:matrix.org", "type": "m.room.member", "unsigned": { "age": 11472592012 } }, { "content": { "guest_access": "can_join" }, "event_id": "$148715913723540PJIVh:matrix.org", "origin_server_ts": 1487159137497, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 23508815181 } }, { "content": { "avatar_url": "mxc://dries.info/XbsxfpMAsRspdPPyOivoHjZl", "displayname": "Gerco", "membership": "join" }, "event_id": "$150896632794adQPf:dries.info", "membership": "join", "origin_server_ts": 1508966327124, "sender": "@gerco:dries.info", "state_key": "@gerco:dries.info", "type": "m.room.member", "unsigned": { "age": 1701625554, "prev_content": { "avatar_url": "mxc://dries.info/MwTchfktpdiQBpOamTEddpVZ", "displayname": "Gerco", "membership": "join" }, "prev_sender": "@gerco:dries.info", "replaces_state": "$1503513241360xaleg:dries.info" } }, { "content": { "avatar_url": "mxc://matrix.org/InEVOHDpdEKGVnUzyjNsKMog", "displayname": "Tokodomo", "membership": "join" }, "event_id": "$15080727323465182YMRuk:matrix.org", "membership": "join", "origin_server_ts": 1508072732179, "sender": "@Tokodomo:matrix.org", "state_key": "@Tokodomo:matrix.org", "type": "m.room.member", "unsigned": { "age": 2595220499 } }, { "content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "TravisR", "membership": "join" }, "event_id": "$14871774231133kEzvE:t2l.io", "origin_server_ts": 1487177423468, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 8 } }, { "content": { "avatar_url": "mxc://matrix.org/qzaNAnzhghheUNahmnJPpRsZ", "displayname": "SchnuffleMatrix", "membership": "join" }, "event_id": "$15058370143463873BFlGw:matrix.org", "membership": "join", "origin_server_ts": 1505837014848, "sender": "@schnuffle:matrix.org", "state_key": "@schnuffle:matrix.org", "type": "m.room.member", "unsigned": { "age": 4830937830 } }, { "content": { "avatar_url": null, "displayname": "silloopa", "membership": "join" }, "event_id": "$15079365491962045DaPjK:matrix.org", "membership": "join", "origin_server_ts": 1507936549140, "sender": "@silloopa:matrix.org", "state_key": "@silloopa:matrix.org", "type": "m.room.member", "unsigned": { "age": 2731403538 } }, { "content": { "avatar_url": "mxc://matrix.org/CcDzsloOcDqBxNRQNOxgMakP#auto", "displayname": "Hirmes", "membership": "join" }, "event_id": "$14980276024189597pPgro:matrix.org", "membership": "join", "origin_server_ts": 1498027602179, "sender": "@MaXGGXaM:matrix.org", "state_key": "@MaXGGXaM:matrix.org", "type": "m.room.member", "unsigned": { "age": 12640350499 } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15084726561888sGReg:t2bot.io", "membership": "join", "origin_server_ts": 1508472656485, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 2195296193, "replaces_state": "$15072238057718uXMSH:t2bot.io" } }, { "content": { "avatar_url": null, "displayname": "Q", "membership": "join" }, "event_id": "$14982990852tquyv:roeckx.be", "origin_server_ts": 1498299085799, "sender": "@kurt:roeckx.be", "state_key": "@kurt:roeckx.be", "type": "m.room.member", "unsigned": { "age": 65 } }, { "content": { "avatar_url": "mxc://matrix.org/qnGtjcKvJKHHeTnGzPdDuPEO", "displayname": "illy", "membership": "join" }, "event_id": "$14966165953906454mLqhL:matrix.org", "membership": "join", "origin_server_ts": 1496616595215, "sender": "@illyohs:matrix.org", "state_key": "@illyohs:matrix.org", "type": "m.room.member", "unsigned": { "age": 14051357463, "replaces_state": "$14965315233185615LgaQA:matrix.org" } }, { "content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "join" }, "event_id": "$15076511833967QBOPz:kamax.io", "membership": "join", "origin_server_ts": 1507651183356, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 3016769322, "prev_content": { "avatar_url": "mxc://kamax.io/wYRWRxBIculnprUZBpMrgQsD", "displayname": "Maximus", "membership": "join" }, "prev_sender": "@max:kamax.io", "replaces_state": "$15041233062019jJIaj:kamax.io" } }, { "content": { "avatar_url": null, "displayname": "elcyborg", "membership": "join" }, "event_id": "$149807502133GNhmr:elcyb.org", "origin_server_ts": 1498075020845, "sender": "@elcyborg:elcyb.org", "state_key": "@elcyborg:elcyb.org", "type": "m.room.member", "unsigned": { "age": 231 } }, { "content": { "membership": "leave" }, "event_id": "$15068890531309334nxnwo:matrix.org", "membership": "leave", "origin_server_ts": 1506889053496, "sender": "@scoregoblin:matrix.org", "state_key": "@scoregoblin:matrix.org", "type": "m.room.member", "unsigned": { "age": 3778899182, "replaces_state": "$15068890081308801IKBFj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "laptop_nativ", "membership": "join" }, "event_id": "$15047071282310082smwuF:matrix.org", "membership": "join", "origin_server_ts": 1504707128314, "sender": "@mcfly4:matrix.org", "state_key": "@mcfly4:matrix.org", "type": "m.room.member", "unsigned": { "age": 5960824364 } }, { "content": { "aliases": [ "#dendrite-dev:matrix.org" ] }, "event_id": "$148715921023866EohBi:matrix.org", "origin_server_ts": 1487159210293, "sender": "@matthew:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 23508742385 } }, { "content": { "avatar_url": "mxc://matrix.org/oUxxDyzQOHdVDMxgwFzyCWEe", "displayname": "Matthew", "membership": "join" }, "event_id": "$1506686376493933ogmFV:matrix.org", "membership": "join", "origin_server_ts": 1506686376755, "sender": "@matthew:matrix.org", "state_key": "@matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 3981575923, "replaces_state": "$15046822492006835vqcbv:matrix.org" } }, { "content": { "avatar_url": "mxc://krtdex.com/vsKSsrMRnuQqvVRnePgCPjOp", "displayname": "seequ_", "membership": "join" }, "event_id": "$1505801327805vqVwQ:krtdex.com", "membership": "join", "origin_server_ts": 1505801327090, "sender": "@seequ:krtdex.com", "state_key": "@seequ:krtdex.com", "type": "m.room.member", "unsigned": { "age": 4866625588, "prev_content": { "avatar_url": "mxc://krtdex.com/gVUmZjRdXLRANmNqGGQPDZDT", "displayname": "seequ_", "membership": "join" }, "prev_sender": "@seequ:krtdex.com", "replaces_state": "$1505765615701jpFYV:krtdex.com" } }, { "content": { "avatar_url": "mxc://matrix.org/KfkLMomWWjVZMbgVCKisfFPy", "displayname": "Github", "membership": "join" }, "event_id": "$14882013235524FkZfI:matrix.org", "membership": "join", "origin_server_ts": 1488201323709, "sender": "@_neb_github:matrix.org", "state_key": "@_neb_github:matrix.org", "type": "m.room.member", "unsigned": { "age": 22466628969, "replaces_state": "$1487949490452933IMhho:matrix.org" } }, { "content": { "avatar_url": "mxc://kyriasis.com/qrwijqmjDpeEHLnNeQQFUpTh", "displayname": "​remmy​", "membership": "join" }, "event_id": "$1497303680140qQhiB:kyriasis.com", "origin_server_ts": 1497303680199, "sender": "@kyrias:kyriasis.com", "state_key": "@kyrias:kyriasis.com", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": "mxc://spydar007.com/svfwamnWoXsdBiyceKLinQTa", "displayname": "Spydar007", "membership": "join" }, "event_id": "$1499018307697iTXig:spydar007.com", "membership": "join", "origin_server_ts": 1499018307745, "sender": "@Spydar007:spydar007.com", "state_key": "@Spydar007:spydar007.com", "type": "m.room.member", "unsigned": { "age": 11649644933, "replaces_state": "$1499018107274rsEJo:spydar007.com" } }, { "content": { "membership": "leave" }, "event_id": "$15088635163928zfXEz:chat.weho.st", "membership": "leave", "origin_server_ts": 1508863516196, "sender": "@monsterj:chat.weho.st", "state_key": "@monsterj:chat.weho.st", "type": "m.room.member", "unsigned": { "age": 1804436482, "prev_content": { "avatar_url": null, "displayname": "monsterj", "membership": "join" }, "prev_sender": "@monsterj:chat.weho.st", "replaces_state": "$15088621593755tYGhR:chat.weho.st" } }, { "content": { "avatar_url": null, "displayname": "vicky", "membership": "join" }, "event_id": "$15033224255050393giNtL:matrix.org", "membership": "join", "origin_server_ts": 1503322425606, "sender": "@vicky.:matrix.org", "state_key": "@vicky.:matrix.org", "type": "m.room.member", "unsigned": { "age": 7345527072 } }, { "content": { "avatar_url": "mxc://matrix.org/epEsstRLpSbyqhBiVHGjCECv", "displayname": "Mjark", "membership": "join" }, "event_id": "$148715945325017DJDCh:matrix.org", "membership": "join", "origin_server_ts": 1487159453594, "sender": "@Mjark:matrix.org", "state_key": "@Mjark:matrix.org", "type": "m.room.member", "unsigned": { "age": 23508499084, "replaces_state": "$148715930424251eWTPS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "leapX", "membership": "join" }, "event_id": "$1502625113541933OADyd:matrix.org", "membership": "join", "origin_server_ts": 1502625113007, "sender": "@leapX:matrix.org", "state_key": "@leapX:matrix.org", "type": "m.room.member", "unsigned": { "age": 8042839671 } }, { "content": { "avatar_url": "mxc://matrix.org/yGQQvirvXKTRebqNeWTbANZm", "displayname": "aviraldg", "membership": "join" }, "event_id": "$14983504101181312YsXcI:matrix.org", "membership": "join", "origin_server_ts": 1498350410490, "sender": "@aviraldg:matrix.org", "state_key": "@aviraldg:matrix.org", "type": "m.room.member", "unsigned": { "age": 12317542188 } }, { "content": { "avatar_url": "mxc://matrix.ffslfl.net/EOkmaOykMGKOuYMykParCAQr", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15022886052436RKrsx:matrix.ffslfl.net", "membership": "join", "origin_server_ts": 1502288605591, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@MTRNord:matrix.ffslfl.net", "type": "m.room.member", "unsigned": { "age": 8379347087, "replaces_state": "$15022884432382bZniY:matrix.ffslfl.net" } }, { "content": { "avatar_url": "mxc://matrix.org/FHOkGaCPEztYmMgEuHRZWVPF", "displayname": "Sijmen Schoon", "membership": "join" }, "event_id": "$15074681911851609zloiN:matrix.org", "membership": "join", "origin_server_ts": 1507468191766, "sender": "@SijmenSchoon:matrix.org", "state_key": "@SijmenSchoon:matrix.org", "type": "m.room.member", "unsigned": { "age": 3199760912, "replaces_state": "$15074610381783327fLhuX:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tx", "membership": "join" }, "event_id": "$15003686671460412ECgwr:matrix.org", "membership": "join", "origin_server_ts": 1500368667356, "sender": "@tx:matrix.org", "state_key": "@tx:matrix.org", "type": "m.room.member", "unsigned": { "age": 10299285322 } }, { "content": { "avatar_url": "mxc://matrix.org/izrAwSPCQqkFrcCaPAjAogqc", "displayname": "Rick", "membership": "join" }, "event_id": "$149457798360778OQcCV:matrix.org", "membership": "join", "origin_server_ts": 1494577983126, "sender": "@rxl881:matrix.org", "state_key": "@rxl881:matrix.org", "type": "m.room.member", "unsigned": { "age": 16089969552 } }, { "content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "join" }, "event_id": "$15078322963307zkYyT:half-shot.uk", "membership": "join", "origin_server_ts": 1507832296385, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 2835656293, "prev_content": { "avatar_url": "mxc://half-shot.uk/oSnvUaEqIQcsVfAuulWeeBVB", "displayname": "Half-Shot", "membership": "join" }, "prev_sender": "@Half-Shot:half-shot.uk", "replaces_state": "$15029507153382eOXgZ:half-shot.uk" } }, { "content": { "membership": "leave" }, "event_id": "$14986780941184140qEojb:matrix.org", "membership": "leave", "origin_server_ts": 1498678094823, "sender": "@dare-to-recurse:matrix.org", "state_key": "@dare-to-recurse:matrix.org", "type": "m.room.member", "unsigned": { "age": 11989857855, "replaces_state": "$1498300005736381KOwJo:matrix.org" } }, { "content": {}, "event_id": "$1500892559720pvjnc:sw1v.org", "origin_server_ts": 1500892559666, "sender": "@richvdh:sw1v.org", "state_key": "googledocs_%40kegan%3Amatrix.org_1500625151717", "type": "im.vector.modular.widgets", "unsigned": { "age": 9775393012, "prev_content": { "data": { "cUrl": "https://docs.google.com/spreadsheets/d/1tkMNpIpPjvuDJWjPFbw_xzNzOHBA-Hp50Rkpcr43xTw/edit?widget=true&headers=false&chrome=false" }, "type": "googledocs", "url": "https://scalar-staging.riot.im/scalar/api/widgets/googleDocs.html?url=https%3A%2F%2Fdocs.google.com%2Fspreadsheets%2Fd%2F1tkMNpIpPjvuDJWjPFbw_xzNzOHBA-Hp50Rkpcr43xTw%2Fedit%3Fwidget%3Dtrue%26headers%3Dfalse%26chrome%3Dfalse" }, "prev_sender": "@kegan:matrix.org", "replaces_state": "$15006251514623380DeIrk:matrix.org" } }, { "content": { "avatar_url": "mxc://sandhose.fr/KapZOYYVmbVTnAQymlxssGrh", "displayname": "Sandhose", "membership": "join" }, "event_id": "$1498850425823YMWtC:sandhose.fr", "origin_server_ts": 1498850425363, "sender": "@sandhose:sandhose.fr", "state_key": "@sandhose:sandhose.fr", "type": "m.room.member", "unsigned": { "age": 177 } }, { "content": { "membership": "leave" }, "event_id": "$15030057851859034sHKGE:matrix.org", "membership": "leave", "origin_server_ts": 1503005785714, "sender": "@newaxon:matrix.org", "state_key": "@newaxon:matrix.org", "type": "m.room.member", "unsigned": { "age": 7662166964, "replaces_state": "$15030032101821584EAhOt:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.tha.kz/cbUssrDFpbgPUnDkJgVfiXXA", "displayname": "Алекс", "membership": "join" }, "event_id": "$1509088258128TrbsG:matrix.tha.kz", "origin_server_ts": 1509088258776, "sender": "@alex:matrix.tha.kz", "state_key": "@alex:matrix.tha.kz", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": "mxc://matrix.org/EWhmaQHInpmimCJhBTCaBYjJ", "displayname": "Magnolia", "membership": "join" }, "event_id": "$1502645164740889GQUBT:matrix.org", "membership": "join", "origin_server_ts": 1502645164673, "sender": "@airin:matrix.org", "state_key": "@airin:matrix.org", "type": "m.room.member", "unsigned": { "age": 8022788005, "replaces_state": "$1502466693294888NdnSL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Ricardo", "membership": "join" }, "event_id": "$148967548431325ksqRP:matrix.org", "membership": "join", "origin_server_ts": 1489675484272, "sender": "@rcorrear:matrix.org", "state_key": "@rcorrear:matrix.org", "type": "m.room.member", "unsigned": { "age": 20992468406 } }, { "content": { "avatar_url": "mxc://amorgan.xyz/lYiIcCTEuLjgQdzqLtKnwhkN", "displayname": "anoa", "membership": "join" }, "event_id": "$1509054445185oRgfp:amorgan.xyz", "origin_server_ts": 1509054445352, "sender": "@andrewm:amorgan.xyz", "state_key": "@andrewm:amorgan.xyz", "type": "m.room.member", "unsigned": { "age": 189 } }, { "content": { "avatar_url": null, "displayname": "Remi", "membership": "join" }, "event_id": "$1508026609212aMryf:remireuvekamp.nl", "origin_server_ts": 1508026608962, "sender": "@remi:remireuvekamp.nl", "state_key": "@remi:remireuvekamp.nl", "type": "m.room.member", "unsigned": { "age": 335 } }, { "content": { "avatar_url": "mxc://matrix.org/VNZPEUHOORbwNiWbDyHerFxN", "displayname": "JigmeDatse", "membership": "join" }, "event_id": "$1493761865615709mJrnM:matrix.org", "membership": "join", "origin_server_ts": 1493761865659, "sender": "@DatseMultimedia:matrix.org", "state_key": "@DatseMultimedia:matrix.org", "type": "m.room.member", "unsigned": { "age": 16906087019 } }, { "content": { "avatar_url": null, "displayname": "yatsenim", "membership": "join" }, "event_id": "$15090838343544871heMDM:matrix.org", "membership": "join", "origin_server_ts": 1509083834555, "sender": "@yatsenim:matrix.org", "state_key": "@yatsenim:matrix.org", "type": "m.room.member", "unsigned": { "age": 1584118123 } }, { "content": { "avatar_url": "mxc://matrix.org/NeNDgdgVFtZCTdxwJiblKtDE", "displayname": "Li", "membership": "join" }, "event_id": "$15082997453023136yXxXX:matrix.org", "membership": "join", "origin_server_ts": 1508299745514, "sender": "@li:matrix.org", "state_key": "@li:matrix.org", "type": "m.room.member", "unsigned": { "age": 2368207164 } }, { "content": { "avatar_url": "mxc://matrix.org/uogVCiUgOSBZYUiJZCvCyVFE", "displayname": "quite", "membership": "join" }, "event_id": "$15073957031114313GyUbP:matrix.org", "membership": "join", "origin_server_ts": 1507395703681, "sender": "@quite:matrix.org", "state_key": "@quite:matrix.org", "type": "m.room.member", "unsigned": { "age": 3272248997 } }, { "content": { "membership": "leave" }, "event_id": "$15093095559AsiTz:goa.ninja", "membership": "leave", "origin_server_ts": 1509309555516, "sender": "@uha:goa.ninja", "state_key": "@uha:goa.ninja", "type": "m.room.member", "unsigned": { "age": 1358397162, "prev_content": { "avatar_url": "mxc://goa.ninja/HiTdeFVbmRWcaealLmXQnjrF", "displayname": "ॐ uha ॐ", "membership": "join" }, "prev_sender": "@uha:goa.ninja", "replaces_state": "$15092844643KLeQl:goa.ninja" } }, { "content": { "avatar_url": "mxc://riot.ovh/printErCATzZijQsSDWorRaK", "displayname": "Michael (t3chguy)", "membership": "join" }, "event_id": "$1503748805837trIlY:riot.ovh", "origin_server_ts": 1503748805331, "sender": "@x:riot.ovh", "state_key": "@x:riot.ovh", "type": "m.room.member", "unsigned": { "age": 43 } }, { "content": { "avatar_url": "mxc://57north.org.uk/nGXtwcEYslycjSODYzpjnXxi", "displayname": "Shell", "membership": "join" }, "event_id": "$1494860364635KLHjF:57north.org.uk", "origin_server_ts": 1494860364932, "sender": "@shell:57north.org.uk", "state_key": "@shell:57north.org.uk", "type": "m.room.member", "unsigned": { "age": 46 } }, { "content": { "avatar_url": "mxc://matrix.org/IssHdyiXMcSnRCxCzqoaocGL", "displayname": "Dave", "membership": "join" }, "event_id": "$1487177461158299njmFW:matrix.org", "membership": "join", "origin_server_ts": 1487177461438, "sender": "@dave:matrix.org", "state_key": "@dave:matrix.org", "type": "m.room.member", "unsigned": { "age": 23490491240 } }, { "content": { "membership": "leave" }, "event_id": "$15007783791650670HqhSZ:matrix.org", "membership": "leave", "origin_server_ts": 1500778379146, "sender": "@kfatehi:matrix.org", "state_key": "@kfatehi:matrix.org", "type": "m.room.member", "unsigned": { "age": 9889573532, "replaces_state": "$15005888154272770nRDdi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15045525272755EuqfL:thebeckmeyers.xyz", "membership": "leave", "origin_server_ts": 1504552527472, "sender": "@adam:thebeckmeyers.xyz", "state_key": "@adam:thebeckmeyers.xyz", "type": "m.room.member", "unsigned": { "age": 6115425206, "prev_content": { "avatar_url": "mxc://thebeckmeyers.xyz/PIeZsqgwqbhqiBchafnEgeSk", "displayname": "&Adam", "membership": "join" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$1499895366320kpbNy:thebeckmeyers.xyz" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150344878715615rpjCK:disroot.org", "membership": "join", "origin_server_ts": 1503448787827, "sender": "@ycy:disroot.org", "state_key": "@ycy:disroot.org", "type": "m.room.member", "unsigned": { "age": 7219164851 } }, { "content": { "avatar_url": "mxc://sidus.io/KXsyMEVrkHExiAdHWFadbQYt", "displayname": "Gurgy", "membership": "join" }, "event_id": "$1502300135158qSiFv:sidus.io", "origin_server_ts": 1502300135263, "sender": "@gurgy:sidus.io", "state_key": "@gurgy:sidus.io", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "membership": "leave" }, "event_id": "$15010576404ZXdSA:matrix.sidus.io", "membership": "leave", "origin_server_ts": 1501057640582, "sender": "@Gurgy:matrix.sidus.io", "state_key": "@Gurgy:matrix.sidus.io", "type": "m.room.member", "unsigned": { "age": 9610312096, "prev_content": { "avatar_url": "mxc://matrix.sidus.io/gfSgkRdwnEblxRnaGmqQJbCo", "displayname": "Gurgy", "membership": "join" }, "prev_sender": "@Gurgy:matrix.sidus.io", "replaces_state": "$15009952933nsIiy:matrix.sidus.io" } }, { "content": { "avatar_url": "mxc://matrix.org/iiXSowWgENNvlCjGdymjtjQJ", "displayname": "[RTA] Trung", "membership": "join" }, "event_id": "$15018513741947323KBggR:matrix.org", "membership": "join", "origin_server_ts": 1501851374565, "sender": "@trung:matrix.org", "state_key": "@trung:matrix.org", "type": "m.room.member", "unsigned": { "age": 8816578113, "replaces_state": "$1494890595481733ItVIv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xnxiRONAhXWxSwqCbykiQsvF", "displayname": "rhizo", "membership": "join" }, "event_id": "$15007566131442552OxFcP:matrix.org", "membership": "join", "origin_server_ts": 1500756613273, "sender": "@rhizo:matrix.org", "state_key": "@rhizo:matrix.org", "type": "m.room.member", "unsigned": { "age": 9911339405, "replaces_state": "$15007566011442422VZOSa:matrix.org" } }, { "content": { "avatar_url": "mxc://msgs.tk/xxkoXPvoQvvStEYaBXWTXjqh", "displayname": "krombel", "membership": "join" }, "event_id": "$1497303914405WFSGn:msgs.tk", "origin_server_ts": 1497303914528, "sender": "@krombel:msgs.tk", "state_key": "@krombel:msgs.tk", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": null, "displayname": "Nostradamos", "membership": "join" }, "event_id": "$1510596205416469iPyXC:matrix.org", "membership": "join", "origin_server_ts": 1510596205784, "sender": "@Jikstra:matrix.org", "state_key": "@Jikstra:matrix.org", "type": "m.room.member", "unsigned": { "age": 71746894, "prev_content": { "avatar_url": null, "displayname": "test234", "membership": "join" }, "prev_sender": "@Jikstra:matrix.org", "replaces_state": "$1510596137415309aZyht:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150762618910462UTeYH:matrix.org", "membership": "leave", "origin_server_ts": 1507626189605, "sender": "@fruitloop:matrix.org", "state_key": "@fruitloop:matrix.org", "type": "m.room.member", "unsigned": { "age": 3041763073, "replaces_state": "$15060883611271527afuBM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15049591788EiYFg:lmas.se", "membership": "leave", "origin_server_ts": 1504959178386, "sender": "@lmas:lmas.se", "state_key": "@lmas:lmas.se", "type": "m.room.member", "unsigned": { "age": 5708774292, "prev_content": { "avatar_url": "mxc://lmas.se/NVPbHkPRMqvQmQyHTCMMRexA", "displayname": "lmas", "membership": "join" }, "prev_sender": "@lmas:lmas.se", "replaces_state": "$1501313954677PCCBS:lmas.se" } }, { "content": { "avatar_url": "mxc://maxwellkepler.uk/CGImvdoLVGbwESnsCUUzTOFl", "displayname": "MaxwellK", "membership": "join" }, "event_id": "$150403688789ZPWBv:maxwellkepler.uk", "membership": "join", "origin_server_ts": 1504036887979, "sender": "@MaxwellK:maxwellkepler.uk", "state_key": "@MaxwellK:maxwellkepler.uk", "type": "m.room.member", "unsigned": { "age": 6631064699, "replaces_state": "$1492993572318bwrgM:maxwellkepler.uk" } }, { "content": { "avatar_url": "mxc://matrix.org/BLlZpAPrnmemAEssgcEanrwf", "displayname": "Wizard 𝖙3𝖈𝖍𝖌𝖚𝖞", "membership": "join" }, "event_id": "$15089270021297491cvbuj:matrix.org", "membership": "join", "origin_server_ts": 1508927002979, "sender": "@webdevguru:matrix.org", "state_key": "@webdevguru:matrix.org", "type": "m.room.member", "unsigned": { "age": 1740949699 } }, { "content": { "avatar_url": null, "displayname": "jsweb", "membership": "join" }, "event_id": "$15089227401247372LbHZj:matrix.org", "membership": "join", "origin_server_ts": 1508922740185, "sender": "@jsweb:matrix.org", "state_key": "@jsweb:matrix.org", "type": "m.room.member", "unsigned": { "age": 1745212493 } }, { "content": { "avatar_url": "mxc://matrix.org/dEszbcuDYYCqonluEKZkZJHc", "displayname": "TimWolla", "membership": "join" }, "event_id": "$1502626268551012EazAj:matrix.org", "membership": "join", "origin_server_ts": 1502626268025, "sender": "@TimWolla:matrix.org", "state_key": "@TimWolla:matrix.org", "type": "m.room.member", "unsigned": { "age": 8041684653 } }, { "content": { "disable": true }, "event_id": "$14876857801966157rzWIJ:matrix.org", "origin_server_ts": 1487685780061, "sender": "@kegan:matrix.org", "state_key": "", "type": "org.matrix.room.preview_urls", "unsigned": { "age": 22982172617 } }, { "content": { "membership": "leave" }, "event_id": "$1509435342207WAmwj:kaizen.bzh", "membership": "leave", "origin_server_ts": 1509435342658, "sender": "@lanza:kaizen.bzh", "state_key": "@lanza:kaizen.bzh", "type": "m.room.member", "unsigned": { "age": 1232610020, "prev_content": { "avatar_url": "mxc://kaizen.bzh/EveDubKZPXKRGdqjUAomSifx", "displayname": "Lanza Le Monsieur Da Miou", "membership": "join" }, "prev_sender": "@lanza:kaizen.bzh", "replaces_state": "$1509315752159FJrzg:kaizen.bzh" } }, { "content": { "avatar_url": "mxc://matrix.org/uyMbaULWJjhAAoTVGnhdDNSO", "displayname": "Ryan", "membership": "join" }, "event_id": "$15014194582893636gIuXa:matrix.org", "membership": "join", "origin_server_ts": 1501419458361, "sender": "@weddle:matrix.org", "state_key": "@weddle:matrix.org", "type": "m.room.member", "unsigned": { "age": 9248494317 } }, { "content": { "avatar_url": null, "displayname": "dolanor", "membership": "join" }, "event_id": "$15008553232353573lJfXu:matrix.org", "membership": "join", "origin_server_ts": 1500855323776, "sender": "@dolanor:matrix.org", "state_key": "@dolanor:matrix.org", "type": "m.room.member", "unsigned": { "age": 9812628902 } }, { "content": { "avatar_url": "mxc://matrix.org/cmPTldrCcvkXzZYnRuweNTwj", "displayname": "Rob", "membership": "join" }, "event_id": "$1506680379428205vXVWC:matrix.org", "membership": "join", "origin_server_ts": 1506680379461, "sender": "@robswain:matrix.org", "state_key": "@robswain:matrix.org", "type": "m.room.member", "unsigned": { "age": 3987573217, "replaces_state": "$1506680193425981RKyHG:matrix.org" } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QGtlZ2FuOm1hdHJpeC5vcmcgZMiBXLrEZiQnSvyXcrdautg.aW1hZ2UvanBlZw==.jpeg", "displayname": "Kegan", "membership": "join" }, "event_id": "$148715956925505dncaY:matrix.org", "membership": "join", "origin_server_ts": 1487159569474, "sender": "@kegan:matrix.org", "state_key": "@kegan:matrix.org", "type": "m.room.member", "unsigned": { "age": 23508383204, "replaces_state": "$148715931124276WNMzp:matrix.org" } }, { "content": { "avatar_url": "mxc://intelfx.name/dwfeuyvPSsHFkrpmsvCrwesf", "displayname": "Ivan Shapovalov", "membership": "join" }, "event_id": "$1487369969846Bhnzf:intelfx.name", "origin_server_ts": 1487369968963, "sender": "@intelfx:intelfx.name", "state_key": "@intelfx:intelfx.name", "type": "m.room.member", "unsigned": { "age": 153 } }, { "content": { "avatar_url": null, "displayname": "anna7", "membership": "join" }, "event_id": "$15033130214937877rtayt:matrix.org", "membership": "join", "origin_server_ts": 1503313021684, "sender": "@anna7:matrix.org", "state_key": "@anna7:matrix.org", "type": "m.room.member", "unsigned": { "age": 7354930994 } }, { "content": { "membership": "leave" }, "event_id": "$14951971126610kmupZ:firc.de", "membership": "leave", "origin_server_ts": 1495197112746, "sender": "@fireglow:firc.de", "state_key": "@fireglow:firc.de", "type": "m.room.member", "unsigned": { "age": 15470839932, "prev_content": { "avatar_url": "mxc://firc.de/kWDgEREtSLxGLomAHlKyqpEq", "displayname": "fireglow", "membership": "join" }, "prev_sender": "@fireglow:firc.de", "replaces_state": "$1494336670978ghPVC:firc.de" } }, { "content": { "membership": "leave" }, "event_id": "$1505132514448wGcgA:telekollektiv.org", "membership": "leave", "origin_server_ts": 1505132514936, "sender": "@cryptix:telekollektiv.org", "state_key": "@cryptix:telekollektiv.org", "type": "m.room.member", "unsigned": { "age": 5535437742, "prev_content": { "avatar_url": "mxc://telekollektiv.org/fjZKbPDuitkfbbqiktoroHjV", "displayname": "cryptix", "membership": "join" }, "prev_sender": "@cryptix:telekollektiv.org", "replaces_state": "$1491488873351xDNAa:telekollektiv.org" } }, { "content": { "avatar_url": null, "displayname": "ster", "membership": "join" }, "event_id": "$1501776012403XniCY:disroot.org", "membership": "join", "origin_server_ts": 1501776012239, "sender": "@ster:disroot.org", "state_key": "@ster:disroot.org", "type": "m.room.member", "unsigned": { "age": 8891940439 } }, { "content": { "avatar_url": "mxc://matrix.org/QqlwGgMbSuNaxBdTSYZkGoEu", "displayname": null, "membership": "join" }, "event_id": "$1510220319479615AaBdB:matrix.org", "membership": "join", "origin_server_ts": 1510220319134, "sender": "@roland.lammel:matrix.org", "state_key": "@roland.lammel:matrix.org", "type": "m.room.member", "unsigned": { "age": 447633544 } }, { "content": { "avatar_url": "mxc://matrix.braham.eu/mDDkLfqlEVqqkrZsfetfMxcJ", "displayname": "KBraham", "membership": "join" }, "event_id": "$1498748611150nyeas:matrix.braham.eu", "origin_server_ts": 1498748611459, "sender": "@kbraham:matrix.braham.eu", "state_key": "@kbraham:matrix.braham.eu", "type": "m.room.member", "unsigned": { "age": 216 } }, { "content": { "avatar_url": "mxc://rigel.gurgy.me:8448/BFvSGmJIZcnUTNgBbztqgtyT", "displayname": "gurgy", "membership": "join" }, "event_id": "$14988059083agKWr:rigel.gurgy.me:8448", "origin_server_ts": 1498805908729, "sender": "@gurgy:rigel.gurgy.me:8448", "state_key": "@gurgy:rigel.gurgy.me:8448", "type": "m.room.member", "unsigned": { "age": 30 } }, { "content": { "membership": "leave" }, "event_id": "$150426827421621JwEHx:igalia.com", "membership": "leave", "origin_server_ts": 1504268274954, "sender": "@aperez:igalia.com", "state_key": "@aperez:igalia.com", "type": "m.room.member", "unsigned": { "age": 6399677724, "replaces_state": "$150306395812195qzWsn:igalia.com" } }, { "content": { "avatar_url": "mxc://matrix.c4hx.com/nsUbnntexEmpvVvtMjNwLJkS", "displayname": "Spht", "membership": "join" }, "event_id": "$150749270530YFjFx:matrix.c4hx.com", "membership": "join", "origin_server_ts": 1507492705726, "sender": "@kalle:matrix.c4hx.com", "state_key": "@kalle:matrix.c4hx.com", "type": "m.room.member", "unsigned": { "age": 3175246952, "replaces_state": "$150743802627IjzRt:matrix.c4hx.com" } }, { "content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@Mjark:matrix.org": 100, "@dave:matrix.org": 100, "@erikj:jki.re": 100, "@kegan:matrix.org": 100, "@matthew:matrix.org": 100, "@richvdh:sw1v.org": 100 }, "users_default": 0 }, "event_id": "$1492508299435004btRyG:matrix.org", "origin_server_ts": 1492508299962, "sender": "@kegan:matrix.org", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 18159652716, "replaces_state": "$1492508287434911fQfSs:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/fuOFngjCSnQETTlBChQDOfyS", "displayname": "エリエン", "membership": "join" }, "event_id": "$1493052794163674bvutX:matrix.org", "membership": "join", "origin_server_ts": 1493052794300, "sender": "@alien:matrix.org", "state_key": "@alien:matrix.org", "type": "m.room.member", "unsigned": { "age": 17615158378, "replaces_state": "$1493052399158598oKrMe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1504564522637710AEFGh:matrix.org", "membership": "leave", "origin_server_ts": 1504564522794, "sender": "@horrified:matrix.org", "state_key": "@horrified:matrix.org", "type": "m.room.member", "unsigned": { "age": 6103429884, "replaces_state": "$15028233882361880uYSYM:matrix.org" } }, { "content": { "avatar_url": "mxc://waffle.tech/ETITUwJwXtgAXAlboGXZPUGQ", "displayname": "nocylah", "membership": "join" }, "event_id": "$150930332928ihXTg:waffle.tech", "origin_server_ts": 1509303329864, "sender": "@nocylah:waffle.tech", "state_key": "@nocylah:waffle.tech", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": "mxc://matrix.org/XzEMCcfMTsOebjOOfjSTMulD", "displayname": "Greg K Nicholson", "membership": "join" }, "event_id": "$14985632113186677kIfqM:matrix.org", "membership": "join", "origin_server_ts": 1498563211534, "sender": "@gregknicholson:matrix.org", "state_key": "@gregknicholson:matrix.org", "type": "m.room.member", "unsigned": { "age": 12104741144 } }, { "content": { "avatar_url": "mxc://matrix.org/KDoyvQkfzWrWKexsMiNlRNtE", "displayname": "sull", "membership": "join" }, "event_id": "$15047142342433971LJeHM:matrix.org", "membership": "join", "origin_server_ts": 1504714234728, "sender": "@sull:matrix.org", "state_key": "@sull:matrix.org", "type": "m.room.member", "unsigned": { "age": 5953717950 } }, { "content": { "membership": "leave" }, "event_id": "$15058318014CRROm:matrix.bgsoft.hu", "membership": "leave", "origin_server_ts": 1505831801766, "sender": "@gergoe:matrix.bgsoft.hu", "state_key": "@gergoe:matrix.bgsoft.hu", "type": "m.room.member", "unsigned": { "age": 4836150912, "prev_content": { "avatar_url": "mxc://matrix.bgsoft.hu/xujmUoPqXPAvCHSCyyiHfrEa", "displayname": "Gergő", "membership": "join" }, "prev_sender": "@gergoe:matrix.bgsoft.hu", "replaces_state": "$1498717085682BoFsW:matrix.bgsoft.hu" } }, { "age_ts": 1508834593385, "content": { "avatar_url": "mxc://finogeeks.club/ZOMPhLtrImEyoXEbPJPIIOCN", "displayname": "骆昭峰", "membership": "join" }, "event_id": "$15088345921388WJvLJ:finogeeks.club", "origin_server_ts": 1508834592421, "sender": "@luozhaofeng:finogeeks.club", "state_key": "@luozhaofeng:finogeeks.club", "type": "m.room.member", "unsigned": { "age": 51 } }, { "content": { "history_visibility": "world_readable" }, "event_id": "$148715921023865PnsQk:matrix.org", "origin_server_ts": 1487159210140, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 23508742538, "replaces_state": "$148715913723538eEXkr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15088408272498etUtQ:finogeeks.club", "membership": "leave", "origin_server_ts": 1508840827185, "sender": "@zhaojie:finogeeks.club", "state_key": "@zhaojie:finogeeks.club", "type": "m.room.member", "unsigned": { "age": 1827125493, "prev_content": { "avatar_url": "mxc://finogeeks.club/UVGuLDLYduTFwgPgSVJEwUbV", "displayname": "赵杰", "membership": "join" }, "prev_sender": "@zhaojie:finogeeks.club", "replaces_state": "$15088347891439sSSDf:finogeeks.club" } }, { "content": { "avatar_url": null, "displayname": "keks", "membership": "join" }, "event_id": "$1489486443663511ntMQw:matrix.org", "membership": "join", "origin_server_ts": 1489486443482, "sender": "@keks:matrix.org", "state_key": "@keks:matrix.org", "type": "m.room.member", "unsigned": { "age": 21181509196 } }, { "content": { "avatar_url": null, "displayname": "ewave", "membership": "join" }, "event_id": "$15047049012273346onTva:matrix.org", "membership": "join", "origin_server_ts": 1504704901311, "sender": "@ewave:matrix.org", "state_key": "@ewave:matrix.org", "type": "m.room.member", "unsigned": { "age": 5963051367 } }, { "content": { "membership": "leave" }, "event_id": "$1509077769109iSUWZ:owls.io", "membership": "leave", "origin_server_ts": 1509077769284, "sender": "@alec:owls.io", "state_key": "@alec:owls.io", "type": "m.room.member", "unsigned": { "age": 1590183394, "replaces_state": "$150877123410EnRVU:owls.io" } }, { "content": { "avatar_url": "mxc://matrix.org/gWLPZZSJPbhgHoyShiGSesXS", "displayname": "Amandine", "membership": "join" }, "event_id": "$1498231558108079linkz:matrix.org", "membership": "join", "origin_server_ts": 1498231558637, "sender": "@Amandine:matrix.org", "state_key": "@Amandine:matrix.org", "type": "m.room.member", "unsigned": { "age": 12436394041 } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$14958373011605606TIKGp:matrix.org", "membership": "join", "origin_server_ts": 1495837301643, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 14830651035, "replaces_state": "$1491856439311949JZtmE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/rcTpvIkIMSRhohvdqKzPrpai", "displayname": "equinox", "membership": "join" }, "event_id": "$15070654393674265MuldC:matrix.org", "membership": "join", "origin_server_ts": 1507065439023, "sender": "@equinox:matrix.org", "state_key": "@equinox:matrix.org", "type": "m.room.member", "unsigned": { "age": 3602513655 } }, { "content": { "avatar_url": "mxc://matrix.org/irEkZxjOpbiJBcrgTiTRRYdG", "displayname": "Andrew", "membership": "join" }, "event_id": "$1502725959602707dJERp:matrix.org", "membership": "join", "origin_server_ts": 1502725959986, "sender": "@andy.mtp:matrix.org", "state_key": "@andy.mtp:matrix.org", "type": "m.room.member", "unsigned": { "age": 7941992692, "replaces_state": "$14991600373620847FraiZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QnDUfUtyOxUpPYhrcFeBXtJH", "displayname": "Matt (eggster)", "membership": "join" }, "event_id": "$15041132161518432pxiVE:matrix.org", "membership": "join", "origin_server_ts": 1504113216828, "sender": "@eggster:matrix.org", "state_key": "@eggster:matrix.org", "type": "m.room.member", "unsigned": { "age": 6554735850, "replaces_state": "$15038075621634353BKxbE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wOBNNKMavEOSRJJarykFdXoi", "displayname": "ycy", "membership": "join" }, "event_id": "$1502692628245626NSlvk:matrix.org", "membership": "join", "origin_server_ts": 1502692628518, "sender": "@ycy:matrix.org", "state_key": "@ycy:matrix.org", "type": "m.room.member", "unsigned": { "age": 7975324160 } }, { "content": { "avatar_url": "mxc://matrix.trancendances.fr/OdaedmdfbXozfmjSPyKsfKIa", "displayname": "Brendan Abolivier", "membership": "join" }, "event_id": "$150469347920QBFPa:matrix.trancendances.fr", "membership": "join", "origin_server_ts": 1504693479021, "sender": "@Brendan:matrix.trancendances.fr", "state_key": "@Brendan:matrix.trancendances.fr", "type": "m.room.member", "unsigned": { "age": 5974473657, "prev_content": { "avatar_url": "mxc://matrix.trancendances.fr/OnvGlkBtjEcPCUHkkHKIbRQB", "displayname": "Brendan Abolivier", "membership": "join" }, "prev_sender": "@Brendan:matrix.trancendances.fr", "replaces_state": "$150461873822pVvjn:matrix.trancendances.fr" } }, { "content": { "avatar_url": "mxc://monkeystew.net/ROUZXmLGlbIYqrpqmXlUIYAy", "displayname": "Morgan McMillian (thrrgilag)", "membership": "join" }, "event_id": "$15069534194111xZbbA:monkeystew.net", "membership": "join", "origin_server_ts": 1506953419297, "sender": "@thrrgilag:monkeystew.net", "state_key": "@thrrgilag:monkeystew.net", "type": "m.room.member", "unsigned": { "age": 3714533381, "prev_content": { "avatar_url": "mxc://monkeystew.net/RmxwBumTvtBlFRPKLQovOwMq", "displayname": "Morgan McMillian (thrrgilag)", "membership": "join" }, "prev_sender": "@thrrgilag:monkeystew.net", "replaces_state": "$15060086865882avdPL:monkeystew.net" } }, { "content": { "avatar_url": "mxc://matrix.org/YAUTfiCrgfvfDpFBXZokyZHL", "displayname": "Demyan", "membership": "join" }, "event_id": "$15031408443291970lkauh:matrix.org", "membership": "join", "origin_server_ts": 1503140844968, "sender": "@demyan:matrix.org", "state_key": "@demyan:matrix.org", "type": "m.room.member", "unsigned": { "age": 7527107710 } }, { "content": { "topic": "dendrite developer discussion - progress: https://docs.google.com/spreadsheets/d/1tkMNpIpPjvuDJWjPFbw_xzNzOHBA-Hp50Rkpcr43xTw | Help out! https://github.com/matrix-org/dendrite/blob/master/CONTRIBUTING.md" }, "event_id": "$1507288005665KAvgT:jki.re", "origin_server_ts": 1507288005843, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 3379946835, "prev_content": { "topic": "dendrite developer discussion - progress: https://docs.google.com/spreadsheets/d/1tkMNpIpPjvuDJWjPFbw_xzNzOHBA-Hp50Rkpcr43xTw/edit?usp=sharing | Help out! https://github.com/matrix-org/dendrite/blob/master/CONTRIBUTING.md" }, "prev_sender": "@erikj:jki.re", "replaces_state": "$1507287950664jehyy:jki.re" } }, { "content": { "avatar_url": "mxc://matrix.org/WehAJrWyduSaXKIvDjwoAOec#auto", "displayname": "Andrew J", "membership": "join" }, "event_id": "$1490376218130219bEFHv:matrix.org", "membership": "join", "origin_server_ts": 1490376218838, "sender": "@AndrewJDR:matrix.org", "state_key": "@AndrewJDR:matrix.org", "type": "m.room.member", "unsigned": { "age": 20291733840 } }, { "content": { "avatar_url": null, "displayname": "justtesting", "membership": "join" }, "event_id": "$15042936743808763THpLP:matrix.org", "membership": "join", "origin_server_ts": 1504293674672, "sender": "@dupa11111dupa:matrix.org", "state_key": "@dupa11111dupa:matrix.org", "type": "m.room.member", "unsigned": { "age": 6374278006 } }, { "content": { "avatar_url": "mxc://matrix.xwiki.com/NaYdwdsJuqogGmaBXCLiAxuR", "displayname": "cjd🔒", "membership": "join" }, "event_id": "$150693257236498YBKIh:matrix.xwiki.com", "membership": "join", "origin_server_ts": 1506932572221, "sender": "@cdelisle:matrix.xwiki.com", "state_key": "@cdelisle:matrix.xwiki.com", "type": "m.room.member", "unsigned": { "age": 3735380457, "replaces_state": "$15052002306797yraTb:matrix.xwiki.com" } }, { "content": { "join_rule": "public" }, "event_id": "$148715921023863nhNfC:matrix.org", "origin_server_ts": 1487159210002, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 23508742676, "replaces_state": "$148715913723537oItJY:matrix.org" } }, { "content": { "avatar_url": "mxc://ravne.land/PwSaNYDbphSFrWKACWgcnTPa", "displayname": "esh", "membership": "join" }, "event_id": "$1505869739102FWVkj:ravne.land", "origin_server_ts": 1505869741066, "sender": "@esh:ravne.land", "state_key": "@esh:ravne.land", "type": "m.room.member", "unsigned": { "age": 30 } }, { "content": { "avatar_url": "mxc://matrix.org/VOCXveydAbdDcubQwTEvaLgh", "displayname": "bookworm", "membership": "join" }, "event_id": "$1499924738957790Uupwj:matrix.org", "membership": "join", "origin_server_ts": 1499924738383, "sender": "@bookworm:matrix.org", "state_key": "@bookworm:matrix.org", "type": "m.room.member", "unsigned": { "age": 10743214295 } }, { "content": { "avatar_url": "mxc://arbitrarion.com/IfEUvukQHEnKXzTcrbFAhrOl", "displayname": "hef", "membership": "join" }, "event_id": "$1501709056112syPPh:arbitrarion.com", "membership": "join", "origin_server_ts": 1501709056070, "sender": "@hef:arbitrarion.com", "state_key": "@hef:arbitrarion.com", "type": "m.room.member", "unsigned": { "age": 8958896608, "replaces_state": "$150170895084NcZKE:arbitrarion.com" } }, { "content": { "avatar_url": "mxc://matrix.org/qFCbQbISMJKkumHFtvGUADZp", "displayname": "Jimmy", "membership": "join" }, "event_id": "$1498908578898316jNUZT:matrix.org", "membership": "join", "origin_server_ts": 1498908578938, "sender": "@jimmycuadra:matrix.org", "state_key": "@jimmycuadra:matrix.org", "type": "m.room.member", "unsigned": { "age": 11759373740 } }, { "content": { "membership": "leave" }, "event_id": "$15015144704314301htXhA:matrix.org", "membership": "leave", "origin_server_ts": 1501514470925, "sender": "@SimbaLion:matrix.org", "state_key": "@SimbaLion:matrix.org", "type": "m.room.member", "unsigned": { "age": 9153481753, "replaces_state": "$1492029430307536eNsfO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/fzfaTjoawhcXItrTQzrxdPkK", "displayname": "reyawn", "membership": "join" }, "event_id": "$15089421451519668XfMrt:matrix.org", "membership": "join", "origin_server_ts": 1508942145299, "sender": "@reyawn:matrix.org", "state_key": "@reyawn:matrix.org", "type": "m.room.member", "unsigned": { "age": 1725807379, "replaces_state": "$15048825084550172lPuqP:matrix.org" } }, { "content": { "avatar_url": "mxc://lant.uk/PPxwmHXKIMJcQabqUUUOYdOB", "displayname": "toml", "membership": "join" }, "event_id": "$15035662753310UjMFy:lant.uk", "membership": "join", "origin_server_ts": 1503566275816, "sender": "@tom:lant.uk", "state_key": "@tom:lant.uk", "type": "m.room.member", "unsigned": { "age": 7101676862, "replaces_state": "$15035063422950yMpuH:lant.uk" } }, { "content": { "avatar_url": "mxc://matrix.org/stQSGunhOSYHnlnxMBvHYwbo", "displayname": "Dmitry", "membership": "join" }, "event_id": "$149010440024354xLNLh:matrix.org", "membership": "join", "origin_server_ts": 1490104400755, "sender": "@dmitry_da:matrix.org", "state_key": "@dmitry_da:matrix.org", "type": "m.room.member", "unsigned": { "age": 20563551923 } }, { "content": { "membership": "leave" }, "event_id": "$1504618254432GGMZa:chakavak.goldnet.ir", "membership": "leave", "origin_server_ts": 1504618254601, "sender": "@alimobini:chakavak.goldnet.ir", "state_key": "@alimobini:chakavak.goldnet.ir", "type": "m.room.member", "unsigned": { "age": 6049698077, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@alimobini:chakavak.goldnet.ir", "replaces_state": "$1504618211431qllWK:chakavak.goldnet.ir" } }, { "content": { "avatar_url": "mxc://exul.org/FVeNMVznVXFlxJgLfSAqZZEW", "displayname": "exul", "membership": "join" }, "event_id": "$15026238555970SVhwg:exul.org", "origin_server_ts": 1502623855574, "sender": "@exul:exul.org", "state_key": "@exul:exul.org", "type": "m.room.member", "unsigned": { "age": 49 } }, { "content": { "membership": "leave" }, "event_id": "$1490803548206580HujKX:matrix.org", "membership": "leave", "origin_server_ts": 1490803548741, "sender": "@cryptix:matrix.org", "state_key": "@cryptix:matrix.org", "type": "m.room.member", "unsigned": { "age": 19864403937, "replaces_state": "$1490716251754192UCCIq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150807271817LPknB:im.nostrodomo.tk", "membership": "leave", "origin_server_ts": 1508072718902, "sender": "@tokodomo:im.nostrodomo.tk", "state_key": "@tokodomo:im.nostrodomo.tk", "type": "m.room.member", "unsigned": { "age": 2595233776, "prev_content": { "avatar_url": "mxc://im.nostrodomo.tk/GSAViXGWDIWsaJcEgJNRWQdd", "displayname": "Tokodomo", "membership": "join" }, "prev_sender": "@tokodomo:im.nostrodomo.tk", "replaces_state": "$148718243822LDXWn:im.nostrodomo.tk" } }, { "content": { "avatar_url": "mxc://matrix.org/aVokmLEJzCggFvzyUpDukSCl", "displayname": "Foxy", "membership": "join" }, "event_id": "$1496965432392137FTkEc:matrix.org", "membership": "join", "origin_server_ts": 1496965432874, "sender": "@Foxy:matrix.org", "state_key": "@Foxy:matrix.org", "type": "m.room.member", "unsigned": { "age": 13702519804 } }, { "content": { "membership": "leave" }, "event_id": "$15082011831637976Bklvq:matrix.org", "membership": "leave", "origin_server_ts": 1508201183158, "sender": "@Moose:matrix.org", "state_key": "@Moose:matrix.org", "type": "m.room.member", "unsigned": { "age": 2466769520, "replaces_state": "$1502644861737608Gzuoh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150872467322JgamT:matrix.daedalist.net", "membership": "leave", "origin_server_ts": 1508724673490, "sender": "@anaxios:matrix.daedalist.net", "state_key": "@anaxios:matrix.daedalist.net", "type": "m.room.member", "unsigned": { "age": 1943279188, "prev_content": { "avatar_url": "mxc://matrix.daedalist.net/rJmCAEckVTwkJNkZTecdJTWb", "displayname": "anaxios", "membership": "join" }, "prev_sender": "@anaxios:matrix.daedalist.net", "replaces_state": "$150872443721fbWHS:matrix.daedalist.net" } }, { "content": { "avatar_url": "mxc://jki.re/GVSWoYAaZphVlOxPuwtQCFCl", "displayname": "Erik", "membership": "join" }, "event_id": "$1487177781203QFaDt:jki.re", "origin_server_ts": 1487177781299, "sender": "@erikj:jki.re", "state_key": "@erikj:jki.re", "type": "m.room.member", "unsigned": { "age": 525 } }, { "content": { "avatar_url": null, "displayname": "Thomas12", "membership": "join" }, "event_id": "$150660487313737NBHoe:matrix.org", "membership": "join", "origin_server_ts": 1506604873110, "sender": "@Thomas12:matrix.org", "state_key": "@Thomas12:matrix.org", "type": "m.room.member", "unsigned": { "age": 4063079568 } }, { "content": { "avatar_url": null, "displayname": "MrCustomizer", "membership": "join" }, "event_id": "$15057682312368112btNWn:matrix.org", "membership": "join", "origin_server_ts": 1505768231683, "sender": "@MrCustomizer:matrix.org", "state_key": "@MrCustomizer:matrix.org", "type": "m.room.member", "unsigned": { "age": 4899720995 } } ] }, "timeline": { "events": [ { "content": { "body": "[matrix-org/dendrite] anoadragon453 synchronize pull request #318: Check for existing filter before inserting a new one [open] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "format": "org.matrix.custom.html", "formatted_body": "[matrix-org/dendrite] anoadragon453 synchronize pull request #318: Check for existing filter before inserting a new one [open] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "msgtype": "m.notice" }, "event_id": "$1510608132643452nRenG:matrix.org", "origin_server_ts": 1510608132987, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.message", "unsigned": { "age": 59819691 } }, { "content": { "body": "[matrix-org/dendrite] anoadragon453 synchronize pull request #318: Check for existing filter before inserting a new one [open] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "format": "org.matrix.custom.html", "formatted_body": "[matrix-org/dendrite] anoadragon453 synchronize pull request #318: Check for existing filter before inserting a new one [open] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "msgtype": "m.notice" }, "event_id": "$1510608220645023OtjQD:matrix.org", "origin_server_ts": 1510608220065, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.message", "unsigned": { "age": 59732613 } }, { "content": { "body": "ok, and the reason that it works on master and not on my branch is that the `gotype` linter isn't actually working on master", "format": "org.matrix.custom.html", "formatted_body": "ok, and the reason that it works on master and not on my branch is that the gotype linter isn't actually working on master", "msgtype": "m.text" }, "event_id": "$1510612549320KNTig:sw1v.org", "origin_server_ts": 1510612549386, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 55403292 } }, { "content": { "body": "```\nDEBUG: [gotype.1]: warning: /home/rav/work/dendrite/bin/gotype returned exit status 2: read src/github.com/matrix-org/dendrite/clientapi/auth: is a directory\n```", "format": "org.matrix.custom.html", "formatted_body": "
DEBUG: [gotype.1]: warning: /home/rav/work/dendrite/bin/gotype returned exit status 2: read src/github.com/matrix-org/dendrite/clientapi/auth: is a directory\n
\n", "msgtype": "m.text" }, "event_id": "$1510612557321BLLlq:sw1v.org", "origin_server_ts": 1510612557448, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 55395230 } }, { "content": { "body": "whereas if you upgrade gometalinter, then that makes the gotype linter actually spit out errors, which are a problem", "msgtype": "m.text" }, "event_id": "$1510612597322mrAtv:sw1v.org", "origin_server_ts": 1510612597598, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 55355080 } }, { "content": { "body": "what I still don't understand is why `gotype` (and other linters) can't find the packages in the vendor dir when they are on my GOPATH", "format": "org.matrix.custom.html", "formatted_body": "what I still don't understand is why gotype (and other linters) can't find the packages in the vendor dir when they are on my GOPATH", "msgtype": "m.text" }, "event_id": "$1510612639323QqWbv:sw1v.org", "origin_server_ts": 1510612639338, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 55313340 } }, { "content": { "body": "but I shall wonder about it tomorrow", "msgtype": "m.text" }, "event_id": "$1510612727324ksxca:sw1v.org", "origin_server_ts": 1510612727309, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 55225369 } }, { "content": { "body": "[matrix-org/dendrite] erikjohnston closed issue #298: Deduplicate identical filters [closed] - https://github.com/matrix-org/dendrite/issues/298", "format": "org.matrix.custom.html", "formatted_body": "[matrix-org/dendrite] erikjohnston closed issue #298: Deduplicate identical filters [closed] - https://github.com/matrix-org/dendrite/issues/298", "msgtype": "m.notice" }, "event_id": "$15106533841574291IRfzf:matrix.org", "origin_server_ts": 1510653384717, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.message", "unsigned": { "age": 14567961 } }, { "content": { "body": "[matrix-org/dendrite] erikjohnston closed pull request #318: Check for existing filter before inserting a new one [closed] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "format": "org.matrix.custom.html", "formatted_body": "[matrix-org/dendrite] erikjohnston closed pull request #318: Check for existing filter before inserting a new one [closed] to erikjohnston - https://github.com/matrix-org/dendrite/pull/318", "msgtype": "m.notice" }, "event_id": "$15106533841574297AswLh:matrix.org", "origin_server_ts": 1510653384880, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.message", "unsigned": { "age": 14567798 } }, { "content": { "body": "[matrix-org/dendrite] erikjohnston closed pull request #319: Add device display names [closed] to erikjohnston - https://github.com/matrix-org/dendrite/pull/319", "format": "org.matrix.custom.html", "formatted_body": "[matrix-org/dendrite] erikjohnston closed pull request #319: Add device display names [closed] to erikjohnston - https://github.com/matrix-org/dendrite/pull/319", "msgtype": "m.notice" }, "event_id": "$15106535441576353rbLJL:matrix.org", "origin_server_ts": 1510653544038, "sender": "@_neb_github_=40kegan=3amatrix.org:matrix.org", "type": "m.room.message", "unsigned": { "age": 14408640 } } ], "limited": true, "prev_batch": "t9599-332524363_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": { "highlight_count": 0, "notification_count": 0 } }, "!OYyXUbcTKVsDBUniNn:matrix.eclabs.de": { "account_data": { "events": [ { "content": { "event_id": "$15012555511332901uKdQl:matrix.org" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "$1491582620142507eyFlo:matrix.org": { "m.read": { "@mwwilde:matrix.org": { "ts": 1491701462999 } } }, "$14942457572002004qNXQk:matrix.org": { "m.read": { "@johnlin109:matrix.org": { "ts": 1494250240886 } } }, "$149510190227443RTBWr:matrix.org": { "m.read": { "@indgamer:matrix.org": { "ts": 1495101994565 } } }, "$149554821747MZgQZ:matrix.eita.org.br": { "m.read": { "@sven:matrix.rouvinez.me": { "ts": 1495548336889 } } }, "$14959123452145181ZBgRU:matrix.org": { "m.read": { "@magicienap:matrix.org": { "ts": 1495926597331 } } }, "$14963729232OUQAd:matrix.eita.org.br": { "m.read": { "@alantygel:matrix.snieecs.eita.org.br": { "ts": 1496403054811 } } }, "$14965325201074SDkOU:kolosowscy.pl": { "m.read": { "@MTRNord:matrix.eclabs.de": { "ts": 1496567137926 } } }, "$1496570605132YuQdW:matrix.eita.org.br": { "m.read": { "@held:sibnsk.net": { "ts": 1496595098162 } } }, "$14966074113773019EoNKc:matrix.org": { "m.read": { "@jurek:kolosowscy.pl": { "ts": 1496612872875 } } }, "$1496852034251qXVfd:msgs.tk": { "m.read": { "@TBK:matrix.org": { "ts": 1496852109203 } } }, "$149694085710JXhvI:msgs.tk": { "m.read": { "@Achsenknopf:matrix.org": { "ts": 1496950363118 }, "@Shantarli:matrix.org": { "ts": 1497001869248 } } }, "$1497084907313XKlFK:matrix.ffslfl.net": { "m.read": { "@kitsune:matrix.org": { "ts": 1497089714599 } } }, "$149712144052PzZpI:matrix.shamilk.me": { "m.read": { "@noteness:matrix.org": { "ts": 1497121445386 } } }, "$1497305714500036UcllQ:matrix.org": { "m.read": { "@airin:matrix.org": { "ts": 1497305715377 } } }, "$1497306539509039xFzbF:matrix.org": { "m.read": { "@yusf:matrix.org": { "ts": 1497339990049 } } }, "$1497340396788970EjHuQ:matrix.org": { "m.read": { "@phodan:matrix.org": { "ts": 1497624964282 } } }, "$1497406703671841HFPQF:matrix.org": { "m.read": { "@n3niu:matrix.org": { "ts": 1497409449287 } } }, "$14974734381426005oZCCS:matrix.org": { "m.read": { "@PureTryOut:matrix.org": { "ts": 1497473666292 } } }, "$14977992511418Ljmno:matrix.eita.org.br": { "m.read": { "@nerkdesign:matrix.org": { "ts": 1497805057868 } } }, "$149790879116nWcHc:matrix.ffslfl.net": { "m.read": { "@jeangb:matrix.org": { "ts": 1497945943237 } } }, "$1497968282103BqZcU:matrix.ffslfl.net": { "m.read": { "@marek:matrix.org": { "ts": 1497971691939 }, "@romeolopcam:matrix.org": { "ts": 1497970692063 } } }, "$1497976888233qULpg:msgs.tk": { "m.read": { "@RiotTranslate:matrix.org": { "ts": 1497977085984 } } }, "$14980120584061512vXHQc:matrix.org": { "m.read": { "@jlpinheiro:matrix.org": { "ts": 1498043838659 }, "@priba:matrix.cvc.uab.es": { "ts": 1498040369188 } } }, "$1498052596195FLjwb:matrix.ffslfl.net": { "m.read": { "@AugustoBorin:matrix.org": { "ts": 1498143575395 }, "@johannes24384:matrix.org": { "ts": 1498094395396 }, "@turci:matrix.org": { "ts": 1498120292723 } } }, "$14981520851119pcCIe:win32exe.me": { "m.read": { "@RBuzz:matrix.org": { "ts": 1498211843044 } } }, "$1498228898177KjbCc:msgs.tk": { "m.read": { "@lucnx:matrix.org": { "ts": 1498232191197 } } }, "$14982691467363MeFAF:hveem.no": { "m.read": { "@dtygel:matrix.eita.org.br": { "ts": 1498341716423 } } }, "$1498285726654593rKuqT:matrix.org": { "m.read": { "@andr:matrix.org": { "ts": 1498306791536 }, "@dtygel:matrix.org": { "ts": 1498320448772 } } }, "$1498525349197WxYXH:msgs.tk": { "m.read": { "@Ypsilik:matrix.org": { "ts": 1498545154488 } } }, "$149858043856626ZuaxJ:matrix.org": { "m.read": { "@vimacs:matrixim.cc": { "ts": 1498581485020 } } }, "$14987274101685774NpdoP:matrix.org": { "m.read": { "@candidoht:matrix.org": { "ts": 1499061033787 }, "@lenox:matrix.org": { "ts": 1499114740613 }, "@naberpravda:matrix.org": { "ts": 1499039777819 } } }, "$14991628763648984RcMYW:matrix.org": { "m.read": { "@Murz:matrix.org": { "ts": 1499163982108 } } }, "$14991969064255392vUACW:matrix.org": { "m.read": { "@haloha:matrix.org": { "ts": 1499244929465 } } }, "$149926174121105ebptK:lant.uk": { "m.read": { "@cl37mici:matrix.org": { "ts": 1499336151096 }, "@prabudeva_subramani:matrix.org": { "ts": 1499276726331 } } }, "$149936393662vKAGq:matrix.ffslfl.net": { "m.read": { "@shamil:matrix.shamilk.me": { "ts": 1499364170022 } } }, "$149936506813695qFjWL:matrix.org": { "m.read": { "@francesco92:matrix.org": { "ts": 1499434710802 } } }, "$149936510314010tsDPL:matrix.org": { "m.read": { "@yangm97:matrix.org": { "ts": 1499365130157 } } }, "$1499511048774989QwQws:matrix.org": { "m.read": { "@WaleSky:matrix.org": { "ts": 1499512838165 } } }, "$149954733597sgKFS:westwork.org": { "m.read": { "@Rodoslav:matrix.org": { "ts": 1499547712888 } } }, "$1499594472139019UAscI:cervoi.se": { "m.read": { "@maxigaz:matrix.org": { "ts": 1499602371680 }, "@quique251:matrix.org": { "ts": 1499604710244 } } }, "$14998563982649RBvAl:chat.rios.org.br": { "m.read": { "@aloisdg:matrix.org": { "ts": 1499966936141 }, "@rschulman:westwork.org": { "ts": 1499879145309 } } }, "$14999409393423DcHxk:chat.rios.org.br": { "m.read": { "@fill:matrix.org": { "ts": 1500047671364 } } }, "$1500063198279VMAdj:amiwx.net": { "m.read": { "@ErCiccione:matrix.org": { "ts": 1500077431463 }, "@sindelar-fr:matrix.org": { "ts": 1500125323844 } } }, "$1500077427477038bNdKd:matrix.org": { "m.read": { "@Anderson709:matrix.org": { "ts": 1500091145319 } } }, "$1500128084873250nhRBm:matrix.org": { "m.read": { "@Olivier.Nyssen:matrix.org": { "ts": 1500254468770 }, "@amp.nonius:matrix.org": { "ts": 1500381698538 }, "@amp:matrix.org": { "ts": 1500318731612 }, "@i.kocevski:matrix.org": { "ts": 1500239131348 }, "@shagi:matrix.org": { "ts": 1500360522820 }, "@sigmaister:matrix.org": { "ts": 1500319265945 } } }, "$1500479818595CxrZc:i9technologies.com": { "m.read": { "@j3ss3:matrix.org": { "ts": 1500512143103 } } }, "$15005248343420968bIzuZ:matrix.org": { "m.read": { "@zachariah:matrix.org": { "ts": 1500713226984 } } }, "$150062504986318SWNKZ:yoitsu.moe": { "m.read": { "@gcarlsgaard:amiwx.net": { "ts": 1500659561207 } } }, "$15007251961107881vxAqi:matrix.org": { "m.read": { "@Lexi:matrix.org": { "ts": 1500909035463 }, "@igotmail2:matrix.org": { "ts": 1500758353429 }, "@saulo:matrix.org": { "ts": 1500863979119 }, "@videojeux4:matrix.org": { "ts": 1500922583071 } } }, "$15007912937678afeZF:tedomum.net": { "m.read": { "@EddieZhong:matrix.org": { "ts": 1500800774445 }, "@TimK87:matrix.org": { "ts": 1500840014535 } } }, "$15008400892193773FiOhR:matrix.org": { "m.read": { "@lfy:matrix.org": { "ts": 1500870039169 } } }, "$15008700742481434qaePO:matrix.org": { "m.read": { "@kegan:matrix.org": { "ts": 1500885154247 } } }, "$15009318139943gStNp:tedomum.net": { "m.read": { "@Amandine:matrix.org": { "ts": 1500934634843 } } }, "$15009346823302215pktMT:matrix.org": { "m.read": { "@phil-flexhk:matrix.org": { "ts": 1500947841944 }, "@schortl:matrix.org": { "ts": 1500982164818 } } }, "$15013940412707172EkYtH:matrix.org": { "m.read": { "@announ:matrix.org": { "ts": 1501460110250 } } }, "$15014621583YGkKp:westwork.org": { "m.read": { "@Nudelsalat:matrix.org": { "ts": 1501502704729 } } }, "$1501551739779ocKwS:matrix.feder8.ru": { "m.read": { "@ea120:matrix.org": { "ts": 1501635274201 } } }, "$15016795941280PLMSj:matrix.ffslfl.net": { "m.read": { "@alejandro1992:matrix.org": { "ts": 1501694283941 } } }, "$15019292662805696cefUR:matrix.org": { "m.read": { "@ZerataX:matrix.org": { "ts": 1502078208847 }, "@mar6767:matrix.org": { "ts": 1502043750544 }, "@ri1co1:matrix.org": { "ts": 1502090622441 }, "@toterbriefkasten:matrix.org": { "ts": 1502110529939 } } }, "$1502166689627870WfUTg:matrix.org": { "m.read": { "@hvdkaa:matrix.org": { "ts": 1502193688619 } } }, "$15022903462450AxNkj:matrix.ffslfl.net": { "m.read": { "@USER122:matrix.org": { "ts": 1502290348900 } } }, "$1502306747355WWkEX:matrix.zottel.net": { "m.read": { "@toferc:matrix.org": { "ts": 1502307787774 } } }, "$15023185002421065pTEVD:matrix.org": { "m.read": { "@pskosinski:matrix.org": { "ts": 1502355549098 } } }, "$15023558882753279dzxpb:matrix.org": { "m.read": { "@Lander:matrix.org": { "ts": 1502367174320 } } }, "$15024041183430663uKGID:matrix.org": { "m.read": { "@e:ravne.land": { "ts": 1502404471918 } } }, "$150244332839951OVWuP:chat.weho.st": { "m.read": { "@Manu:matrix.org": { "ts": 1502443632812 } } }, "$1502447028202tOsNR:matrix.flyar.net": { "m.read": { "@glass:chat.weho.st": { "ts": 1502447109181 } } }, "$1502447352677zcKNP:matrix.eclabs.de": { "m.read": { "@Spydar007:spydar007.com": { "ts": 1502450101753 } } }, "$1502473206244aQmcw:matrix.ffslfl.net": { "m.read": { "@markus:matrix.flyar.net": { "ts": 1502475431390 } } }, "$15024876415251waGUG:kamax.io": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1502606159957 }, "@haessler:matrix.org": { "ts": 1502547301080 } } }, "$1502645162740854TaEMU:matrix.org": { "m.read": { "@Ario:matrix.org": { "ts": 1502661461278 }, "@isobelle.mtp:matrix.org": { "ts": 1502793951273 } } }, "$15028300903976VjWtP:disroot.org": { "m.read": { "@zhongjin:matrix.org": { "ts": 1502844286698 } } }, "$1502919497802NRTsh:matrix.ffslfl.net": { "m.read": { "@mdnor:matrix.org": { "ts": 1502944724506 } } }, "$1502987820451omSEj:msgs.tk": { "m.read": { "@freem:matrix.org": { "ts": 1502995407349 }, "@sufobey:matrix.org": { "ts": 1503056668322 } } }, "$15030711542565393lzLwm:matrix.org": { "m.read": { "@zeug:matrix.org": { "ts": 1503125829384 } } }, "$15031258203190313RhpXh:matrix.org": { "m.read": { "@purpleroot:disroot.org": { "ts": 1503133402147 } } }, "$15031846473756590yCUwf:matrix.org": { "m.read": { "@sekaichifudanshi:matrix.org": { "ts": 1503300428993 } } }, "$15033004324816203vLkTp:matrix.org": { "m.read": { "@anna7:matrix.org": { "ts": 1503312892680 }, "@doriangray:matrix.org": { "ts": 1503303516257 } } }, "$1503379935190787RsDWH:matrix.org": { "m.read": { "@Underforest:matrix.org": { "ts": 1503439574087 }, "@ainjuser:matrix.org": { "ts": 1503393802688 } } }, "$150348655615Rygov:msgs.tk": { "m.read": { "@Magorak:matrix.org": { "ts": 1503582149296 }, "@Mriot:matrix.org": { "ts": 1503551308060 }, "@NgoHoangTan:matrix.org": { "ts": 1503533944456 }, "@bob6527:matrix.org": { "ts": 1503574865394 }, "@carlb:matrix.org": { "ts": 1503521793264 }, "@dansk-hotter:matrix.org": { "ts": 1503520041190 }, "@juank9008:matrix.org": { "ts": 1503580241704 }, "@nidarsh:matrix.org": { "ts": 1503545724220 } } }, "$15035320322308290MmTBy:matrix.org": { "m.read": { "@eti:matrix.org": { "ts": 1503532255345 } } }, "$1503648592474qtdZl:matrix.feder8.ru": { "m.read": { "@srr:matrix.org": { "ts": 1503657497019 } } }, "$150366011117698WMncy:matrix.org": { "m.read": { "@Tryes:matrix.org": { "ts": 1503699366183 }, "@bamstam:matrix.org": { "ts": 1503695895281 } } }, "$1503745213996980kgVQC:matrix.org": { "m.read": { "@steelista:matrix.org": { "ts": 1503770165307 } } }, "$15037700921244311GQdcG:matrix.org": { "m.read": { "@jp.fox:matrix.org": { "ts": 1503902546140 } } }, "$15038133101676246LPzDy:matrix.org": { "m.read": { "@raylex:matrix.org": { "ts": 1503819504840 } } }, "$15038487491950973kwJdd:matrix.org": { "m.read": { "@baget:matrix.org": { "ts": 1504016199427 } } }, "$15039067632530620hgOeY:matrix.org": { "m.read": { "@jose.jorge:matrix.org": { "ts": 1503910652221 } } }, "$150399762413974FcWoZ:matrix.org": { "m.read": { "@themole:matrix.org": { "ts": 1503999775582 } } }, "$1504337112426929EGuRm:matrix.org": { "m.read": { "@KEir:matrix.org": { "ts": 1504475786271 }, "@T0MuX:matrix.org": { "ts": 1504337654884 }, "@carlbennetts:matrix.org": { "ts": 1504483585546 }, "@lowee:matrix.org": { "ts": 1504414594357 } } }, "$1504545047171isFKu:matrix.ffslfl.net": { "m.read": { "@testownikad:matrix.org": { "ts": 1504615730793 } } }, "$15046229391246350VXQRR:matrix.org": { "m.read": { "@aaronluoxiao:matrix.org": { "ts": 1504623269300 } } }, "$1504628462248zNdUc:matrix.ffslfl.net": { "m.read": { "@RoEn:matrix.org": { "ts": 1504644469306 }, "@tomtryf:matrix.org": { "ts": 1504678923923 }, "@ylecollen:matrix.org": { "ts": 1504679871212 } } }, "$1504690300138UoZDY:matrix.eclabs.de": { "m.read": { "@gorkaazk:matrix.org": { "ts": 1504691929599 } } }, "$15046943082YXnUL:matrix.eclabs.de": { "m.read": { "@webdevguru:matrix.org": { "ts": 1504695511611 } } }, "$15047173294552VojpC:cervoi.se": { "m.read": { "@DatseMultimedia:matrix.org": { "ts": 1504721736889 } } }, "$15047217452561987cEBzD:matrix.org": { "m.read": { "@birdstache:matrix.org": { "ts": 1504729486227 } } }, "$15047768413233087coTbo:matrix.org": { "m.read": { "@ztl8702:matrix.org": { "ts": 1504787507249 } } }, "$15048727294409081seBsj:matrix.org": { "m.read": { "@mechanized-snail:matrix.org": { "ts": 1504885362037 } } }, "$15048964131614ZayEF:chat.rios.org.br": { "m.read": { "@Osoitz:matrix.org": { "ts": 1504966189631 } } }, "$1504980876565AtLRp:matrix.ffslfl.net": { "m.read": { "@mlt:matrix.org": { "ts": 1505178067414 }, "@rberaldo:matrix.org": { "ts": 1505002009710 }, "@shashikanth171:matrix.org": { "ts": 1505074298492 } } }, "$15050743101598594NEElG:matrix.org": { "m.read": { "@gerte:matrix.org": { "ts": 1505119300050 }, "@nghieng:matrix.org": { "ts": 1505139857946 } } }, "$15052129513157281ecaKv:matrix.org": { "m.read": { "@matteo:hirschstein.it": { "ts": 1505216262355 } } }, "$150521647618rOcvb:hirschstein.it": { "m.read": { "@Selukov:matrix.org": { "ts": 1505216619795 } } }, "$15052286173361216YTGpv:matrix.org": { "m.read": { "@HostFat:matrix.org": { "ts": 1505229345906 } } }, "$1505247172440ceoJq:hveem.no": { "m.read": { "@mvprzy:matrix.org": { "ts": 1505256110928 } } }, "$1505281432210jrmeH:yoitsu.moe": { "m.read": { "@tonghuix:matrix.org": { "ts": 1505292321970 } } }, "$15052941544183692bNViV:matrix.org": { "m.read": { "@captainplanet:matrix.org": { "ts": 1505294720016 } } }, "$15053111474392490wfffw:matrix.org": { "m.read": { "@horo:yoitsu.moe": { "ts": 1505312922834 } } }, "$1505387512457ibRrS:naszademokracja.pl": { "m.read": { "@BartG95:matrix.org": { "ts": 1505395193433 }, "@ucs2:matrix.org": { "ts": 1505451848068 } } }, "$15054978181381OKwtv:matrix.ffslfl.net": { "m.read": { "@August39:matrix.org": { "ts": 1505502251384 }, "@attemoro:matrix.org": { "ts": 1505579826166 }, "@che3674:matrix.org": { "ts": 1505527502455 } } }, "$15056459304441ZBjuR:disroot.org": { "m.read": { "@BlueNutterfly:matrix.org": { "ts": 1505646401408 } } }, "$15057484681692qeuHd:matrix.ffslfl.net": { "m.read": { "@noolimits:matrix.org": { "ts": 1505759929612 } } }, "$15057599662226516fhceA:matrix.org": { "m.read": { "@jvs:matrix.org": { "ts": 1505762574443 } } }, "$150576559210bbizg:matrix.ffslfl.net": { "m.read": { "@benscmidth:matrix.org": { "ts": 1505793170340 }, "@farialima:matrix.org": { "ts": 1505822831167 } } }, "$15058365563455217ukkEs:matrix.org": { "m.read": { "@Testlol123lol:matrix.org": { "ts": 1505865442149 }, "@esh:ravne.land": { "ts": 1505854183232 }, "@hieronymousch:matrix.org": { "ts": 1505981708470 } } }, "$15058654433973649rlUId:matrix.org": { "m.read": { "@vaclav.fiser:internet-portal.cz": { "ts": 1505927839176 } } }, "$15060867251245598Nwscg:matrix.org": { "m.read": { "@drets:matrix.org": { "ts": 1506090810784 }, "@redplanet:matrix.org": { "ts": 1506093532572 } } }, "$15061068061572267Miiwy:matrix.org": { "m.read": { "@grigruss:matrix.org": { "ts": 1506146931672 }, "@reip:matrix.org": { "ts": 1506111028844 } } }, "$15061502841956imald:hveem.no": { "m.read": { "@DoctorRoom:matrix.org": { "ts": 1506150285577 } } }, "$15061503852070168xWQWp:matrix.org": { "m.read": { "@chipsterjulien:matrix.org": { "ts": 1506331771780 }, "@rafaelff:matrix.org": { "ts": 1506225985322 } } }, "$15061504012070310zTIbk:matrix.org": { "m.read": { "@travelperson:matrix.org": { "ts": 1506164490933 } } }, "$15061645012181069aHEte:matrix.org": { "m.read": { "@bbigras:matrix.org": { "ts": 1506194601627 }, "@serjor:matrix.org": { "ts": 1506181203151 } } }, "$15061946062503288gHuOp:matrix.org": { "m.read": { "@King3543:matrix.org": { "ts": 1506385898562 } } }, "$1506336705685048VhQkb:matrix.org": { "m.read": { "@Ivantan:matrix.org": { "ts": 1506356441641 }, "@Murguia:matrix.org": { "ts": 1506515427959 }, "@anibal:matrix.org": { "ts": 1506626966195 } } }, "$1506417791711981ZIwLX:matrix.org": { "m.read": { "@ensco:matrix.org": { "ts": 1506439679080 }, "@sergio:matrix.org": { "ts": 1506422881962 } } }, "$1506626986382424jjMSJ:matrix.org": { "m.read": { "@laquiessssssss:matrix.org": { "ts": 1506841001308 }, "@nexor:matrix.org": { "ts": 1506864897022 }, "@tinkerbell:matrix.org": { "ts": 1506848594912 } } }, "$1506716804984516cKbBb:matrix.org": { "m.read": { "@benson:disroot.org": { "ts": 1506856174963 } } }, "$15069406781867018aOoGz:matrix.org": { "m.read": { "@minasov:matrix.org": { "ts": 1506955697669 } } }, "$15069666442271774Puuxn:matrix.org": { "m.read": { "@bhuvankrishna:matrix.org": { "ts": 1507044940157 }, "@stud.bechtle:matrix.org": { "ts": 1507032667141 }, "@thenubianmuha:matrix.org": { "ts": 1507040959349 } } }, "$1507201300505585xnQkQ:matrix.org": { "m.read": { "@tom:lant.uk": { "ts": 1507201463316 } } }, "$150723295735WiDqn:matrix.ffslfl.net": { "m.read": { "@rvilar:matrix.org": { "ts": 1507271252198 } } }, "$150728924366BGxJq:matrix.ffslfl.net": { "m.read": { "@x:riot.ovh": { "ts": 1507289433362 } } }, "$1507289440501IKkHG:riot.ovh": { "m.read": { "@507_elisapoc_fiT1:matrix.org": { "ts": 1507294185475 } } }, "$1507326747426461VhNmg:matrix.org": { "m.read": { "@chrislesch:matrix.org": { "ts": 1507344091588 } } }, "$1507373460879200DWQKK:matrix.org": { "m.read": { "@win32.executioner:matrix.org": { "ts": 1507391834808 } } }, "$1507422955414PDpFx:matrix.ffslfl.net": { "m.read": { "@rawwaha:matrix.org": { "ts": 1507640186275 } } }, "$1507491287279bGWUP:status.im": { "m.read": { "@nenadalm:matrix.org": { "ts": 1507493156333 } } }, "$1507501410298jKSPk:status.im": { "m.read": { "@1122121dftrtsdrtgse:matrix.org": { "ts": 1507541357471 }, "@andy.mtp:matrix.org": { "ts": 1507568006011 } } }, "$15076511924009cvfLw:kamax.io": { "m.read": { "@Tycho.Schipper:matrix.org": { "ts": 1507661833823 }, "@newone:matrix.org": { "ts": 1507665485161 } } }, "$1507665478677880XMAvb:matrix.org": { "m.read": { "@testaccountman:status.im": { "ts": 1507740214233 } } }, "$15076998231150727htJaC:matrix.org": { "m.read": { "@Bbb88:matrix.org": { "ts": 1507738082210 }, "@pini:matrix.org": { "ts": 1507726130752 } } }, "$150773942077862eYjjz:matrix.org": { "m.read": { "@oon:matrix.org": { "ts": 1507756256615 } } }, "$15077612631937eTmfE:cervoi.se": { "m.read": { "@erdnaxeli:cervoi.se": { "ts": 1507800304124 }, "@jbhj:matrix.org": { "ts": 1507775369392 } } }, "$1507825776304022gPMsr:matrix.org": { "m.read": { "@unhammer:matrix.org": { "ts": 1507827203635 } } }, "$15078952221268715GFEbD:matrix.org": { "m.read": { "@sven:matrix.eclabs.de": { "ts": 1507895262614 } } }, "$15079179131645616FgYKA:matrix.org": { "m.read": { "@freenando75:disroot.org": { "ts": 1507936673361 } } }, "$15079893812511557NTaVo:matrix.org": { "m.read": { "@TOPKEK:matrix.org": { "ts": 1507994298836 } } }, "$1508065983293rKviN:vurpo.fi": { "m.read": { "@azizi:matrix.org": { "ts": 1508070017114 } } }, "$1508137203812KOFMP:matrix.zottel.net": { "m.read": { "@root:010.az": { "ts": 1508139285251 } } }, "$1508147202772000jfXwH:matrix.org": { "m.read": { "@general50:matrix.org": { "ts": 1508163796710 } } }, "$15082547192310589ZXHFK:matrix.org": { "m.read": { "@kosirm:matrix.org": { "ts": 1508255664586 } } }, "$15082562322339527wvhhz:matrix.org": { "m.read": { "@crazy2000:matrix.org": { "ts": 1508256903490 } } }, "$15083567723839906FiXkX:matrix.org": { "m.read": { "@simonchan:matrix.org": { "ts": 1508404336787 } } }, "$150841132435393kPtPw:matrix.org": { "m.read": { "@syam3526:matrix.org": { "ts": 1508412688415 } } }, "$15084245016VwiXv:msgs.tk": { "m.read": { "@asdfmovie:matrix.org": { "ts": 1508424516899 }, "@juorder:zboxapp.com": { "ts": 1508499057930 } } }, "$15084729382276qQjcw:t2bot.io": { "m.read": { "@dahhowl:matrix.org": { "ts": 1508480234048 } } }, "$1508513638105dxSXd:win32exe.me": { "m.read": { "@hontti:matrix.org": { "ts": 1508596977056 }, "@tulir:maunium.net": { "ts": 1508591911562 } } }, "$15086591483368027ufQkX:matrix.org": { "m.read": { "@josh45:matrix.org": { "ts": 1508659151853 }, "@marcin:naszademokracja.pl": { "ts": 1508691301059 } } }, "$15087418834627993oskvh:matrix.org": { "m.read": { "@harcesz:naszademokracja.pl": { "ts": 1508851048133 } } }, "$15089419811516719BaWRA:matrix.org": { "m.read": { "@gagadsb:chat.weho.st": { "ts": 1509015008096 } } }, "$15089465621605323xADNO:matrix.org": { "m.read": { "@groza:matrix.org": { "ts": 1509042933574 }, "@man:matrix.org": { "ts": 1508956022779 } } }, "$15090447763043568elzDb:matrix.org": { "m.read": { "@guest69:matrix.org": { "ts": 1509061870309 } } }, "$15091127473878665zyJAc:matrix.org": { "m.read": { "@-pep-:matrix.org": { "ts": 1509137073983 }, "@HelloTest:matrix.org": { "ts": 1509116616391 }, "@florianjacob:matrix.org": { "ts": 1509113020061 }, "@shevchuk:matrix.org": { "ts": 1509119475377 } } }, "$15091370434302746HXfDc:matrix.org": { "m.read": { "@s.pantaleev:matrix.org": { "ts": 1509158718329 } } }, "$15091588734573478rTjuE:matrix.org": { "m.read": { "@MaXGGXaM:matrix.org": { "ts": 1509186576065 } } }, "$15092908755888474ugwke:matrix.org": { "m.read": { "@MTRNord:matrix.org": { "ts": 1509298475002 } } }, "$15093068286120988uPwoP:matrix.org": { "m.read": { "@silex:slxh.eu": { "ts": 1509306888367 } } }, "$150935425916yLCDZ:msgs.tk": { "m.read": { "@huudoanh:matrix.org": { "ts": 1510054269994 } } }, "$150935446017wUGFo:msgs.tk": { "m.read": { "@snoopiwire:matrix.org": { "ts": 1509599133691 } } }, "$15093556706681763VLzVQ:matrix.org": { "m.read": { "@voyager:t2bot.io": { "ts": 1509355679273 } } }, "$15093568376694816CSlrh:matrix.org": { "m.read": { "@debendraoli:matrix.org": { "ts": 1509360335995 }, "@rubo77:matrix.eclabs.de": { "ts": 1509366754181 } } }, "$150936035221742XEWrZ:matrix.org": { "m.read": { "@kaiyou:tedomum.net": { "ts": 1509369503732 }, "@tamasmagyar:matrix.org": { "ts": 1509373980944 } } }, "$15094494671239381QbsDN:matrix.org": { "m.read": { "@hossein:matrix.org": { "ts": 1509481710766 } } }, "$1509487238666Gviub:vurpo.fi": { "m.read": { "@wolflighting:matrix.org": { "ts": 1509604769610 } } }, "$15096176223566749WtBQF:matrix.org": { "m.read": { "@dtygel:chat.rios.org.br": { "ts": 1509623373807 } } }, "$1509739464131ImTUL:matrix.ffslfl.net": { "m.read": { "@mujx:matrix.org": { "ts": 1510075335868 }, "@viccuad:matrix.org": { "ts": 1509745321406 }, "@zehnzwanzig:matrix.org": { "ts": 1509783350117 } } }, "$1509745349611081pLpyC:matrix.org": { "m.read": { "@Angedestenebres:matrix.org": { "ts": 1509794909634 }, "@win32.exe:win32exe.me": { "ts": 1509754139416 }, "@zottel:matrix.zottel.net": { "ts": 1509827922141 } } }, "$150975405864Mnazo:win32exe.me": { "m.read": { "@nobodyiswatching:matrix.org": { "ts": 1509970060007 }, "@studinsky:matrix.org": { "ts": 1509822439216 } } }, "$15101360992022739ziwDp:matrix.org": { "m.read": { "@richvdh:sw1v.org": { "ts": 1510136123345 } } }, "$15101462012373856pLmmr:matrix.org": { "m.read": { "@matthew:matrix.org": { "ts": 1510146224342 } } }, "$15101502642467026BauHP:matrix.org": { "m.read": { "@glit6h:matrix.org": { "ts": 1510201409202 }, "@lb:ldbco.de": { "ts": 1510150271763 } } }, "$151022622625FgrpN:matrix.ffslfl.net": { "m.read": { "@dave:matrix.org": { "ts": 1510226251536 } } }, "$151022661341amxRY:pvagner.tk": { "m.read": { "@strixaluco:matrix.org": { "ts": 1510233456791 } } }, "$151026035539923lVNPw:matrix.org": { "m.read": { "@vclang:matrix.org": { "ts": 1510292043819 } } }, "$1510301137553862WnIye:matrix.org": { "m.read": { "@balogic:matrix.org": { "ts": 1510348955030 }, "@dupa11111dupa:matrix.org": { "ts": 1510410658164 }, "@nouts:matrix.org": { "ts": 1510353163055 }, "@szimszon:oregpreshaz.eu": { "ts": 1510310924345 } } }, "$1510322115797500saclQ:matrix.org": { "m.read": { "@gabrin:matrix.org": { "ts": 1510389350846 }, "@jankudrik:matrix.org": { "ts": 1510390610517 } } }, "$15104106731910002eCPXi:matrix.org": { "m.read": { "@realitygaps:chat.weho.st": { "ts": 1510411294553 }, "@travis:t2l.io": { "ts": 1510468612739 } } }, "$151049225522ogIFw:matrix.ffslfl.net": { "m.read": { "@jonius:matrix.org": { "ts": 1510492268575 } } }, "$15104924232817889gGTxe:matrix.org": { "m.read": { "@MTRNord:matrix.ffslfl.net": { "ts": 1510493404025 }, "@krombel:msgs.tk": { "ts": 1510494191592 }, "@thiyasun:matrix.org": { "ts": 1510499711132 } } }, "$15104954672851280tMovP:matrix.org": { "m.read": { "@XoseM:matrix.org": { "ts": 1510500507634 }, "@aaron:raim.ist": { "ts": 1510523276808 }, "@bldr:matrix.org": { "ts": 1510524196678 }, "@bobderbaumeister:matrix.org": { "ts": 1510505842961 }, "@brli:matrix.org": { "ts": 1510498846053 }, "@lazz:matrix.org": { "ts": 1510502698381 }, "@max:kamax.io": { "ts": 1510502560630 }, "@mikaela:disroot.org": { "ts": 1510500661207 }, "@pg:naszademokracja.pl": { "ts": 1510651214336 }, "@pztrn:matrix.feder8.ru": { "ts": 1510642650438 }, "@s8321414:matrix.org": { "ts": 1510497237844 }, "@teej:matrix.org": { "ts": 1510505878008 }, "@uhoreg:matrix.org": { "ts": 1510542443041 } } }, "$151057710310879QzRJB:disroot.org": { "m.read": { "@speaker:matrix.org": { "ts": 1510585524981 }, "@vurpo:vurpo.fi": { "ts": 1510578033012 } } }, "$1510586925245688jViEG:matrix.org": { "m.read": { "@lupa18:matrix.org": { "ts": 1510591724659 }, "@pafcu:matrix.org": { "ts": 1510587086739 }, "@sven:matrix.nordlab-ev.de": { "ts": 1510587112676 } } }, "$1510591729334838ybxAH:matrix.org": { "m.read": { "@carlosam:matrix.org": { "ts": 1510594242041 }, "@pvagner:pvagner.tk": { "ts": 1510647043151 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "aliases": [ "#riotweb-translations:matrix.ffslfl.net" ] }, "event_id": "$1496568472374EfkWj:matrix.ffslfl.net", "origin_server_ts": 1496568472449, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "matrix.ffslfl.net", "type": "m.room.aliases", "unsigned": { "age": 14099480229 } }, { "content": { "avatar_url": "mxc://vurpo.fi/rAVYYdwTozdZslBFduliksPR", "displayname": "vurpo", "membership": "join" }, "event_id": "$1509487238666Gviub:vurpo.fi", "membership": "join", "origin_server_ts": 1509487238826, "sender": "@vurpo:vurpo.fi", "state_key": "@vurpo:vurpo.fi", "type": "m.room.member", "unsigned": { "age": 1180713852, "prev_content": { "avatar_url": "mxc://vurpo.fi/dEKpSjbzDlMftunBLxhPACWo", "displayname": "vurpo", "membership": "join" }, "prev_sender": "@vurpo:vurpo.fi", "replaces_state": "$1508011793153xxXBw:vurpo.fi" } }, { "content": { "avatar_url": "mxc://sw1v.org/rARZrbDMGnNQOKKWZtCVxusq", "displayname": "richvdh", "membership": "join" }, "event_id": "$14975452061458kGIDQ:sw1v.org", "origin_server_ts": 1497545206810, "sender": "@richvdh:sw1v.org", "state_key": "@richvdh:sw1v.org", "type": "m.room.member", "unsigned": { "age": 14 } }, { "content": { "avatar_url": "mxc://matrix.org/zYMfehSiSpenGUyCJrwHiZhj", "displayname": "Tom Tryfonidis", "membership": "join" }, "event_id": "$14972024642445410NOHag:matrix.org", "membership": "join", "origin_server_ts": 1497202464458, "sender": "@tomtryf:matrix.org", "state_key": "@tomtryf:matrix.org", "type": "m.room.member", "unsigned": { "age": 13465488220 } }, { "age_ts": 1497121440747, "content": { "avatar_url": "mxc://matrix.shamilk.me/fFKqULUGPLHFUhwKTGyoYHeO", "displayname": "Shamil", "membership": "join" }, "event_id": "$149712144052PzZpI:matrix.shamilk.me", "origin_server_ts": 1497121440547, "sender": "@shamil:matrix.shamilk.me", "state_key": "@shamil:matrix.shamilk.me", "type": "m.room.member", "unsigned": { "age": 31 } }, { "content": { "membership": "leave" }, "event_id": "$15014621583YGkKp:westwork.org", "membership": "leave", "origin_server_ts": 1501462158459, "sender": "@rschulman:westwork.org", "state_key": "@rschulman:westwork.org", "type": "m.room.member", "unsigned": { "age": 9205794219, "replaces_state": "$149948376150HeIHL:westwork.org" } }, { "content": { "avatar_url": null, "displayname": "teej", "membership": "join" }, "event_id": "$15092510865519793PGtwC:matrix.org", "membership": "join", "origin_server_ts": 1509251086708, "sender": "@teej:matrix.org", "state_key": "@teej:matrix.org", "type": "m.room.member", "unsigned": { "age": 1416865970 } }, { "content": { "avatar_url": null, "displayname": "shashikanth171", "membership": "join" }, "event_id": "$15050743101598594NEElG:matrix.org", "membership": "join", "origin_server_ts": 1505074310236, "sender": "@shashikanth171:matrix.org", "state_key": "@shashikanth171:matrix.org", "type": "m.room.member", "unsigned": { "age": 5593642442 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1510279303339329uSBld:matrix.org", "membership": "join", "origin_server_ts": 1510279303035, "sender": "@vclang:matrix.org", "state_key": "@vclang:matrix.org", "type": "m.room.member", "unsigned": { "age": 388649643 } }, { "content": { "avatar_url": "mxc://matrix.org/TdCDJslEDCTjmALLYOFBNOMl", "displayname": "thiyasun", "membership": "join" }, "event_id": "$15094494671239381QbsDN:matrix.org", "membership": "join", "origin_server_ts": 1509449467490, "sender": "@thiyasun:matrix.org", "state_key": "@thiyasun:matrix.org", "type": "m.room.member", "unsigned": { "age": 1218485188, "replaces_state": "$15035541532538086xJNGh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15072941901741408EqurE:matrix.org", "membership": "leave", "origin_server_ts": 1507294190075, "sender": "@507_elisapoc_fiT1:matrix.org", "state_key": "@507_elisapoc_fiT1:matrix.org", "type": "m.room.member", "unsigned": { "age": 3373762603, "replaces_state": "$15071219774334109cmnhK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14983207362238qppns:matrix.eita.org.br", "membership": "leave", "origin_server_ts": 1498320736243, "sender": "@dtygel:matrix.eita.org.br", "state_key": "@dtygel:matrix.eita.org.br", "type": "m.room.member", "unsigned": { "age": 12347216435, "prev_content": { "avatar_url": "mxc://matrix.eita.org.br/IWZTiVSjlzlKmLBrPwYQUWvs", "displayname": "daniel", "membership": "join" }, "prev_sender": "@dtygel:matrix.eita.org.br", "replaces_state": "$149476321318MxDZF:matrix.eita.org.br" } }, { "content": { "avatar_url": null, "displayname": "nobodyiswatching", "membership": "join" }, "event_id": "$1507800176714563NvYLT:matrix.org", "membership": "join", "origin_server_ts": 1507800176671, "sender": "@nobodyiswatching:matrix.org", "state_key": "@nobodyiswatching:matrix.org", "type": "m.room.member", "unsigned": { "age": 2867776007, "replaces_state": "$15076998231150727htJaC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150841132435393kPtPw:matrix.org", "membership": "leave", "origin_server_ts": 1508411324316, "sender": "@simonchan:matrix.org", "state_key": "@simonchan:matrix.org", "type": "m.room.member", "unsigned": { "age": 2256628362, "replaces_state": "$150773942077862eYjjz:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wgoehTWngIunWJoKoumdVmHF", "displayname": "the_general", "membership": "join" }, "event_id": "$14966074113773019EoNKc:matrix.org", "membership": "join", "origin_server_ts": 1496607411056, "sender": "@general50:matrix.org", "state_key": "@general50:matrix.org", "type": "m.room.member", "unsigned": { "age": 14060541622, "replaces_state": "$14965982993674716oNLFN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1502915925378499NayUk:matrix.org", "membership": "leave", "origin_server_ts": 1502915925119, "sender": "@ZerataX:matrix.org", "state_key": "@ZerataX:matrix.org", "type": "m.room.member", "unsigned": { "age": 7752027559, "replaces_state": "$14979822783681563zIbOr:matrix.org" } }, { "content": { "avatar_url": "mxc://riot.nordgedanken.de/YlEIEYsJuv1EO3oqKuSq7mHcKrnbK0_no5WUe-FE83s", "displayname": "MTRNord_Dendrite", "membership": "join" }, "event_id": "$j0EOZtdtCS3xkPOg:riot.nordgedanken.de", "origin_server_ts": 1507465661557, "sender": "@MTRNord:riot.nordgedanken.de", "state_key": "@MTRNord:riot.nordgedanken.de", "type": "m.room.member", "unsigned": { "replaces_state": "$MAcrddelLoYODIDS:riot.nordgedanken.de" } }, { "content": { "avatar_url": null, "displayname": "Testlol123lol", "membership": "join" }, "event_id": "$15058654433973649rlUId:matrix.org", "membership": "join", "origin_server_ts": 1505865443933, "sender": "@Testlol123lol:matrix.org", "state_key": "@Testlol123lol:matrix.org", "type": "m.room.member", "unsigned": { "age": 4802508745 } }, { "content": { "avatar_url": "mxc://matrix.org/ilxOUmOdfbFFFEeWXfmjnCyY", "displayname": "zehnzwanzig", "membership": "join" }, "event_id": "$1508876049654062kohsy:matrix.org", "membership": "join", "origin_server_ts": 1508876049773, "sender": "@zehnzwanzig:matrix.org", "state_key": "@zehnzwanzig:matrix.org", "type": "m.room.member", "unsigned": { "age": 1791902905 } }, { "content": { "avatar_url": "mxc://slxh.eu/firYUbGCedTKEeYmayUSnKUz", "displayname": "Silke", "membership": "join" }, "event_id": "$15022936174461NTHDX:slxh.eu", "membership": "join", "origin_server_ts": 1502293617501, "sender": "@silex:slxh.eu", "state_key": "@silex:slxh.eu", "type": "m.room.member", "unsigned": { "age": 8374335177, "replaces_state": "$15022924024402LGRmW:slxh.eu" } }, { "content": { "avatar_url": "mxc://matrix.org/OTwzRbBmrqwemBNaGtOTIwoN", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15035320322308290MmTBy:matrix.org", "membership": "join", "origin_server_ts": 1503532032139, "sender": "@MTRNord:matrix.org", "state_key": "@MTRNord:matrix.org", "type": "m.room.member", "unsigned": { "age": 7135920539, "replaces_state": "$1491331629181684EnwBF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "SkyKing", "kind": "guest", "membership": "join" }, "event_id": "$14975171651831842FADUO:matrix.org", "membership": "join", "origin_server_ts": 1497517165255, "sender": "@263332:matrix.org", "state_key": "@263332:matrix.org", "type": "m.room.member", "unsigned": { "age": 13150787423 } }, { "content": { "avatar_url": "mxc://matrix.org/hWyjqmZzZccDDobtjYeAdBbG", "displayname": "steelista", "membership": "join" }, "event_id": "$15037700921244311GQdcG:matrix.org", "membership": "join", "origin_server_ts": 1503770092862, "sender": "@steelista:matrix.org", "state_key": "@steelista:matrix.org", "type": "m.room.member", "unsigned": { "age": 6897859816, "replaces_state": "$15029871451570346DgYZa:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QIgCMdoqOiPkxFrzyTcZZbYX", "displayname": "phodan", "membership": "join" }, "event_id": "$1493550740760066mcVZb:matrix.org", "membership": "join", "origin_server_ts": 1493550740601, "sender": "@phodan:matrix.org", "state_key": "@phodan:matrix.org", "type": "m.room.member", "unsigned": { "age": 17117212077 } }, { "content": { "avatar_url": "mxc://matrix.org/fmOVvFEoGrCmykkdahzKCcDf", "displayname": "Syam", "membership": "join" }, "event_id": "$15070139862904196AzSKP:matrix.org", "membership": "join", "origin_server_ts": 1507013986870, "sender": "@syam3526:matrix.org", "state_key": "@syam3526:matrix.org", "type": "m.room.member", "unsigned": { "age": 3653965808 } }, { "content": { "avatar_url": "mxc://matrix.org/RAMgGaiizcOBAHQlWnsuqHPO", "displayname": "Bruno", "membership": "join" }, "event_id": "$15061946062503288gHuOp:matrix.org", "membership": "join", "origin_server_ts": 1506194606783, "sender": "@bbigras:matrix.org", "state_key": "@bbigras:matrix.org", "type": "m.room.member", "unsigned": { "age": 4473345895 } }, { "content": { "avatar_url": null, "displayname": "Antoine Proulx", "membership": "join" }, "event_id": "$14958968892011196phBwq:matrix.org", "membership": "join", "origin_server_ts": 1495896889074, "sender": "@magicienap:matrix.org", "state_key": "@magicienap:matrix.org", "type": "m.room.member", "unsigned": { "age": 14771063604 } }, { "content": { "membership": "leave" }, "event_id": "$15091588734573478rTjuE:matrix.org", "membership": "leave", "origin_server_ts": 1509158873185, "sender": "@s.pantaleev:matrix.org", "state_key": "@s.pantaleev:matrix.org", "type": "m.room.member", "unsigned": { "age": 1509079493, "replaces_state": "$15038133101676246LPzDy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vbzeOUnmlTnSltyDMuQfSvlA", "displayname": "IMbigbrother", "membership": "join" }, "event_id": "$15085486462221212QXQUG:matrix.org", "membership": "join", "origin_server_ts": 1508548646802, "sender": "@guest69:matrix.org", "state_key": "@guest69:matrix.org", "type": "m.room.member", "unsigned": { "age": 2119305876, "replaces_state": "$15085486172220824kmsNN:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "anibal", "membership": "join" }, "event_id": "$1506626986382424jjMSJ:matrix.org", "membership": "join", "origin_server_ts": 1506626986080, "sender": "@anibal:matrix.org", "state_key": "@anibal:matrix.org", "type": "m.room.member", "unsigned": { "age": 4040966598 } }, { "content": { "avatar_url": "mxc://matrix.feder8.ru/ObjlyneWHiEyXpiYNgJHdnDU", "displayname": "pztrn", "membership": "join" }, "event_id": "$1501551739779ocKwS:matrix.feder8.ru", "membership": "join", "origin_server_ts": 1501551739024, "sender": "@pztrn:matrix.feder8.ru", "state_key": "@pztrn:matrix.feder8.ru", "type": "m.room.member", "unsigned": { "age": 9116213654, "replaces_state": "$1496813344931VuMID:matrix.feder8.ru" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1510016559203571ITgmZ:matrix.org", "membership": "join", "origin_server_ts": 1510016559096, "sender": "@speaker:matrix.org", "state_key": "@speaker:matrix.org", "type": "m.room.member", "unsigned": { "age": 651393582 } }, { "content": { "avatar_url": null, "displayname": "bhuvankrishna", "membership": "join" }, "event_id": "$14961459944031848vZqtB:matrix.org", "membership": "join", "origin_server_ts": 1496145994976, "sender": "@bhuvankrishna:matrix.org", "state_key": "@bhuvankrishna:matrix.org", "type": "m.room.member", "unsigned": { "age": 14521957702 } }, { "content": { "membership": "leave" }, "event_id": "$14991755073768282aeunG:matrix.org", "membership": "leave", "origin_server_ts": 1499175507432, "sender": "@Murz:matrix.org", "state_key": "@Murz:matrix.org", "type": "m.room.member", "unsigned": { "age": 11492445246, "replaces_state": "$14991523753537864wttut:matrix.org" } }, { "content": { "creator": "@MTRNord:matrix.eclabs.de" }, "event_id": "$14901239856720WZgNp:matrix.eclabs.de", "origin_server_ts": 1490123985966, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "", "type": "m.room.create", "unsigned": { "age": 1156582150 } }, { "content": { "avatar_url": null, "displayname": "jonius", "membership": "join" }, "event_id": "$15104920342813943eaCGc:matrix.org", "membership": "join", "origin_server_ts": 1510492034789, "sender": "@jonius:matrix.org", "state_key": "@jonius:matrix.org", "type": "m.room.member", "unsigned": { "age": 175917889 } }, { "content": { "avatar_url": null, "displayname": "Guest 255382", "kind": "guest", "membership": "join" }, "event_id": "$1496783426215309Lwcpe:matrix.org", "membership": "join", "origin_server_ts": 1496783426133, "sender": "@255382:matrix.org", "state_key": "@255382:matrix.org", "type": "m.room.member", "unsigned": { "age": 13884526545 } }, { "content": { "membership": "leave" }, "event_id": "$150521647618rOcvb:hirschstein.it", "membership": "leave", "origin_server_ts": 1505216476179, "sender": "@matteo:hirschstein.it", "state_key": "@matteo:hirschstein.it", "type": "m.room.member", "unsigned": { "age": 5451476499, "prev_content": { "avatar_url": "mxc://hirschstein.it/OKiGKSzHFfViqnproIEGWQpw", "displayname": "Matteo Hirschstein", "membership": "join" }, "prev_sender": "@matteo:hirschstein.it", "replaces_state": "$150497941772nguAZ:hirschstein.it" } }, { "content": { "avatar_url": null, "displayname": "Magorak", "membership": "join" }, "event_id": "$15035821472830134jkqSn:matrix.org", "membership": "join", "origin_server_ts": 1503582147640, "sender": "@Magorak:matrix.org", "state_key": "@Magorak:matrix.org", "type": "m.room.member", "unsigned": { "age": 7085805038 } }, { "content": { "avatar_url": "mxc://matrix.org/nmvUisKRxZMPXkoNpBkPuBKT", "displayname": "Hosein", "membership": "join" }, "event_id": "$15069666442271774Puuxn:matrix.org", "membership": "join", "origin_server_ts": 1506966644825, "sender": "@hossein:matrix.org", "state_key": "@hossein:matrix.org", "type": "m.room.member", "unsigned": { "age": 3701307853, "replaces_state": "$1499915201878325qJSno:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "newone", "membership": "join" }, "event_id": "$1507665478677880XMAvb:matrix.org", "membership": "join", "origin_server_ts": 1507665478810, "sender": "@newone:matrix.org", "state_key": "@newone:matrix.org", "type": "m.room.member", "unsigned": { "age": 3002473868 } }, { "content": { "avatar_url": "mxc://disroot.org/KkbzOHatWrlFaWKUsGGnbZPS", "displayname": "Mikaela", "membership": "join" }, "event_id": "$15040168409199QvTaY:disroot.org", "membership": "join", "origin_server_ts": 1504016840037, "sender": "@mikaela:disroot.org", "state_key": "@mikaela:disroot.org", "type": "m.room.member", "unsigned": { "age": 6651112641, "replaces_state": "$15040106098713hQJbB:disroot.org" } }, { "content": { "membership": "leave" }, "event_id": "$14974636011278746gqKjj:matrix.org", "membership": "leave", "origin_server_ts": 1497463601885, "sender": "@n3niu:matrix.org", "state_key": "@n3niu:matrix.org", "type": "m.room.member", "unsigned": { "age": 13204350793, "replaces_state": "$14971066281668764blSaE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15090429573010393DJVRZ:matrix.org", "membership": "leave", "origin_server_ts": 1509042957973, "sender": "@groza:matrix.org", "state_key": "@groza:matrix.org", "type": "m.room.member", "unsigned": { "age": 1624994705, "replaces_state": "$14958270511481590ySVUy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1509393803583486goBnX:matrix.org", "membership": "leave", "origin_server_ts": 1509393803024, "sender": "@mglsmn:matrix.org", "state_key": "@mglsmn:matrix.org", "type": "m.room.member", "unsigned": { "age": 1274149654, "replaces_state": "$15090447763043568elzDb:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.nordlab-ev.de/ClWiyduWyhoZSTwfiBUdZfos", "displayname": "svenfl", "membership": "join" }, "event_id": "$1506273454489EnCry:matrix.nordlab-ev.de", "membership": "join", "origin_server_ts": 1506273454071, "sender": "@sven:matrix.nordlab-ev.de", "state_key": "@sven:matrix.nordlab-ev.de", "type": "m.room.member", "unsigned": { "age": 4394498607, "prev_content": { "avatar_url": "mxc://matrix.nordlab-ev.de/kZpzlHcUtHRwhDhMXZqrXVXq", "displayname": "svenfl", "membership": "join" }, "prev_sender": "@sven:matrix.nordlab-ev.de", "replaces_state": "$1506273175386GXbzO:matrix.nordlab-ev.de" } }, { "content": { "avatar_url": null, "displayname": "Manu", "membership": "join" }, "event_id": "$14967404285275790VGTtF:matrix.org", "membership": "join", "origin_server_ts": 1496740428312, "sender": "@Manu:matrix.org", "state_key": "@Manu:matrix.org", "type": "m.room.member", "unsigned": { "age": 13927524366 } }, { "content": { "membership": "leave" }, "event_id": "$14959123452145181ZBgRU:matrix.org", "membership": "leave", "origin_server_ts": 1495912345739, "sender": "@_neb_github_=40_m_t_r_nord=3amatrix.eclabs.de:matrix.org", "state_key": "@_neb_github_=40_m_t_r_nord=3amatrix.eclabs.de:matrix.org", "type": "m.room.member", "unsigned": { "age": 14755606939, "replaces_state": "$14923317851099555AefUw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1507373460879200DWQKK:matrix.org", "membership": "leave", "origin_server_ts": 1507373460648, "sender": "@chrislesch:matrix.org", "state_key": "@chrislesch:matrix.org", "type": "m.room.member", "unsigned": { "age": 3294492030, "replaces_state": "$1505651504936964WzJOS:matrix.org" } }, { "content": { "avatar_url": "mxc://disroot.org/nrASEWwoVHBpocUuxYRJHfCl", "displayname": "Benson", "membership": "join" }, "event_id": "$15056372194334XYFMr:disroot.org", "membership": "join", "origin_server_ts": 1505637219578, "sender": "@benson:disroot.org", "state_key": "@benson:disroot.org", "type": "m.room.member", "unsigned": { "age": 5030733100, "replaces_state": "$15056372104330XkSzC:disroot.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KBxWxuuVnLjNwWumWbtkZzir", "displayname": "halohaL", "membership": "join" }, "event_id": "$14987274101685774NpdoP:matrix.org", "membership": "join", "origin_server_ts": 1498727410276, "sender": "@haloha:matrix.org", "state_key": "@haloha:matrix.org", "type": "m.room.member", "unsigned": { "age": 11940542402, "replaces_state": "$14987273301684855yNbby:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1507422927413HMYih:matrix.ffslfl.net", "membership": "leave", "origin_server_ts": 1507422927685, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@_neb_rssbot_=40_m_t_r_nord=3amatrix.ffslfl.net:matrix.org", "type": "m.room.member", "unsigned": { "age": 3245024993, "prev_content": { "membership": "invite" }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$15022950762462kdQHr:matrix.ffslfl.net" } }, { "content": { "avatar_url": null, "displayname": "asdfmovie", "membership": "join" }, "event_id": "$150842408422435uMbkh:matrix.org", "membership": "join", "origin_server_ts": 1508424084794, "sender": "@asdfmovie:matrix.org", "state_key": "@asdfmovie:matrix.org", "type": "m.room.member", "unsigned": { "age": 2243867884 } }, { "content": { "membership": "leave" }, "event_id": "$15061645012181069aHEte:matrix.org", "membership": "leave", "origin_server_ts": 1506164501505, "sender": "@travelperson:matrix.org", "state_key": "@travelperson:matrix.org", "type": "m.room.member", "unsigned": { "age": 4503451173, "replaces_state": "$15060867251245598Nwscg:matrix.org" } }, { "content": { "join_rule": "public" }, "event_id": "$14901241156729LpEfm:matrix.eclabs.de", "origin_server_ts": 1490124115025, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 1156453091, "replaces_state": "$14901239866723LFDLx:matrix.eclabs.de" } }, { "content": { "membership": "leave" }, "event_id": "$15070328593115191CikcM:matrix.org", "membership": "leave", "origin_server_ts": 1507032859587, "sender": "@stud.bechtle:matrix.org", "state_key": "@stud.bechtle:matrix.org", "type": "m.room.member", "unsigned": { "age": 3635093091, "replaces_state": "$1491582620142507eyFlo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OonjUOmcuVpUnmOWKtzPmAFe", "displayname": "uhoreg", "membership": "join" }, "event_id": "$149727420145540XvyCa:matrix.org", "membership": "join", "origin_server_ts": 1497274201600, "sender": "@uhoreg:matrix.org", "state_key": "@uhoreg:matrix.org", "type": "m.room.member", "unsigned": { "age": 13393751078 } }, { "content": { "avatar_url": "mxc://matrix.org/oxIuZZqJjMCVeImSHzSzqRYP", "displayname": null, "membership": "join" }, "event_id": "$14996584722039185aIhlO:matrix.org", "membership": "join", "origin_server_ts": 1499658472840, "sender": "@lupa18:matrix.org", "state_key": "@lupa18:matrix.org", "type": "m.room.member", "unsigned": { "age": 11009479838 } }, { "content": { "avatar_url": "mxc://matrix.eclabs.de/MxCGAcuKFGuPBhzTtcuiqHAk", "displayname": "rubo77", "membership": "join" }, "event_id": "$1504687548121rWuRH:matrix.eclabs.de", "membership": "join", "origin_server_ts": 1504687548831, "sender": "@rubo77:matrix.eclabs.de", "state_key": "@rubo77:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 5980403847, "prev_content": { "membership": "leave" }, "prev_sender": "@rubo77:matrix.eclabs.de", "replaces_state": "$1502400512565dhbyw:matrix.eclabs.de" } }, { "content": { "membership": "leave" }, "event_id": "$15064398041019512zfmJK:matrix.org", "membership": "leave", "origin_server_ts": 1506439804670, "sender": "@ensco:matrix.org", "state_key": "@ensco:matrix.org", "type": "m.room.member", "unsigned": { "age": 4228148008, "replaces_state": "$15064397031017713buZHo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GNyTqUUAQaXwDIndiOHwRhTq", "displayname": "toferc", "membership": "join" }, "event_id": "$1499798320439690fLJcO:matrix.org", "membership": "join", "origin_server_ts": 1499798320630, "sender": "@toferc:matrix.org", "state_key": "@toferc:matrix.org", "type": "m.room.member", "unsigned": { "age": 10869632048 } }, { "content": { "avatar_url": "mxc://matrix.org/NPsGKcMVOpFeIfRpKiGXFxXl", "displayname": "Shevchuk", "membership": "join" }, "event_id": "$15012545971318557wloWb:matrix.org", "membership": "join", "origin_server_ts": 1501254597816, "sender": "@shevchuk:matrix.org", "state_key": "@shevchuk:matrix.org", "type": "m.room.member", "unsigned": { "age": 9413354862, "replaces_state": "$1501116640431128oRmDU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1506336705685048VhQkb:matrix.org", "membership": "leave", "origin_server_ts": 1506336705271, "sender": "@chipsterjulien:matrix.org", "state_key": "@chipsterjulien:matrix.org", "type": "m.room.member", "unsigned": { "age": 4331247407, "replaces_state": "$1506336610684149Nhpfu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RaPizwoTQMGriniKbGNNlkfR", "displayname": "XoseM", "membership": "join" }, "event_id": "$15079179131645616FgYKA:matrix.org", "membership": "join", "origin_server_ts": 1507917913896, "sender": "@XoseM:matrix.org", "state_key": "@XoseM:matrix.org", "type": "m.room.member", "unsigned": { "age": 2750038782, "replaces_state": "$15079178851645092jiAvT:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150240714321aSUzB:ravne.land", "membership": "leave", "origin_server_ts": 1502407143436, "sender": "@e:ravne.land", "state_key": "@e:ravne.land", "type": "m.room.member", "unsigned": { "age": 8260809242, "replaces_state": "$15017883622hohbB:ravne.land" } }, { "content": { "alias": "#riotweb-translations:matrix.org" }, "event_id": "$1496568471373HUISQ:matrix.ffslfl.net", "origin_server_ts": 1496568471801, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 14099480877, "replaces_state": "$14901241156728ZZtNe:matrix.eclabs.de" } }, { "content": { "avatar_url": null, "displayname": "Testing", "membership": "join" }, "event_id": "$1507501410298jKSPk:status.im", "membership": "join", "origin_server_ts": 1507501410245, "sender": "@testaccountman:status.im", "state_key": "@testaccountman:status.im", "type": "m.room.member", "unsigned": { "age": 3166542433, "replaces_state": "$1507491287279bGWUP:status.im" } }, { "content": { "avatar_url": null, "displayname": "glass", "membership": "join" }, "event_id": "$150244167439731mtHpK:chat.weho.st", "membership": "join", "origin_server_ts": 1502441674915, "sender": "@glass:chat.weho.st", "state_key": "@glass:chat.weho.st", "type": "m.room.member", "unsigned": { "age": 8226277763 } }, { "content": { "avatar_url": "mxc://raim.ist/FXOzjAdHBpcxFBqpKIbQWInl", "displayname": "Aaron Raimist", "membership": "join" }, "event_id": "$1494982602518GKPdY:raim.ist", "origin_server_ts": 1494982602500, "sender": "@aaron:raim.ist", "state_key": "@aaron:raim.ist", "type": "m.room.member", "unsigned": { "age": 16 } }, { "content": { "data": { "padName": "!OYyXUbcTKVsDBUniNn:matrix.eclabs.de_IdeasTodos", "padSuffix": "IdeasTodos" }, "name": "Etherpad - IdeasTodos", "type": "etherpad", "url": "https://scalar-staging.riot.im/scalar/api/widgets/etherpad.html?padName=!OYyXUbcTKVsDBUniNn:matrix.eclabs.de_IdeasTodos&userName=$matrix_user_id" }, "event_id": "$15079026221320LvHfx:matrix.ffslfl.net", "origin_server_ts": 1507902622240, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "etherpad_%40MTRNord%3Amatrix.ffslfl.net_1507902580947", "type": "im.vector.modular.widgets", "unsigned": { "age": 2765330438 } }, { "content": { "avatar_url": "mxc://matrix.org/qLhQVkEWEEwXhDyETWclanDK", "displayname": "Balaji", "membership": "join" }, "event_id": "$1506716804984516cKbBb:matrix.org", "membership": "join", "origin_server_ts": 1506716804806, "sender": "@balogic:matrix.org", "state_key": "@balogic:matrix.org", "type": "m.room.member", "unsigned": { "age": 3951147872, "replaces_state": "$1506714537946908gwmnB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/gANaWVmjtEgxwFJsVniRPOwE", "displayname": "Bart Groeneveld", "membership": "join" }, "event_id": "$15053951985926849snpPZ:matrix.org", "membership": "join", "origin_server_ts": 1505395198996, "sender": "@BartG95:matrix.org", "state_key": "@BartG95:matrix.org", "type": "m.room.member", "unsigned": { "age": 5272753682 } }, { "content": { "avatar_url": "mxc://matrix.org/vJUTyPJnstYsTITppMGEqjkM", "displayname": "Carlos", "membership": "join" }, "event_id": "$14964458322494502axAoz:matrix.org", "membership": "join", "origin_server_ts": 1496445832996, "sender": "@carlosam:matrix.org", "state_key": "@carlosam:matrix.org", "type": "m.room.member", "unsigned": { "age": 14222119682 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1502166689627870WfUTg:matrix.org", "membership": "join", "origin_server_ts": 1502166689954, "sender": "@zilola:matrix.org", "state_key": "@zilola:matrix.org", "type": "m.room.member", "unsigned": { "age": 8501262724 } }, { "content": { "avatar_url": null, "displayname": "sindelar-fr", "membership": "join" }, "event_id": "$1500125322847334IBsZZ:matrix.org", "membership": "join", "origin_server_ts": 1500125322801, "sender": "@sindelar-fr:matrix.org", "state_key": "@sindelar-fr:matrix.org", "type": "m.room.member", "unsigned": { "age": 10542629877 } }, { "content": { "avatar_url": "mxc://matrix.org/vFByVCDVeLLKunRPvycnTxKe", "displayname": "lazz", "membership": "join" }, "event_id": "$15082772222740830JEwRx:matrix.org", "membership": "join", "origin_server_ts": 1508277222879, "sender": "@lazz:matrix.org", "state_key": "@lazz:matrix.org", "type": "m.room.member", "unsigned": { "age": 2390729799, "replaces_state": "$1493572729984759TqXdY:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "🐨\n", "membership": "join" }, "event_id": "$1510322115797500saclQ:matrix.org", "membership": "join", "origin_server_ts": 1510322115441, "sender": "@bob6527:matrix.org", "state_key": "@bob6527:matrix.org", "type": "m.room.member", "unsigned": { "age": 345837237, "prev_content": { "avatar_url": null, "displayname": "🐡\n", "membership": "join" }, "prev_sender": "@bob6527:matrix.org", "replaces_state": "$1510321887794000ASykZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14979724433545316cIyaI:matrix.org", "membership": "leave", "origin_server_ts": 1497972443267, "sender": "@romeolopcam:matrix.org", "state_key": "@romeolopcam:matrix.org", "type": "m.room.member", "unsigned": { "age": 12695509411, "replaces_state": "$14979721963541607vVkxk:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/epTimJAXXYBmCbGXRWSKRvNN", "displayname": "Jean", "membership": "join" }, "event_id": "$14962157144808938pgxls:matrix.org", "membership": "join", "origin_server_ts": 1496215714720, "sender": "@jeangb:matrix.org", "state_key": "@jeangb:matrix.org", "type": "m.room.member", "unsigned": { "age": 14452237958, "replaces_state": "$14961896584607418QynPG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "johnlin109", "membership": "join" }, "event_id": "$1493781362854476ngyJV:matrix.org", "membership": "join", "origin_server_ts": 1493781362487, "sender": "@johnlin109:matrix.org", "state_key": "@johnlin109:matrix.org", "type": "m.room.member", "unsigned": { "age": 16886590191 } }, { "age_ts": 1492033262714, "content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "TravisR", "membership": "join" }, "event_id": "$1492033262150kLfxP:t2l.io", "origin_server_ts": 1492033262412, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 22 } }, { "content": { "membership": "leave" }, "event_id": "$1498320582899518PtXil:matrix.org", "membership": "leave", "origin_server_ts": 1498320582183, "sender": "@dtygel:matrix.org", "state_key": "@dtygel:matrix.org", "type": "m.room.member", "unsigned": { "age": 12347370495, "replaces_state": "$14939043641252613mseFk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ErCiccione", "membership": "join" }, "event_id": "$1500077427477038bNdKd:matrix.org", "membership": "join", "origin_server_ts": 1500077427434, "sender": "@ErCiccione:matrix.org", "state_key": "@ErCiccione:matrix.org", "type": "m.room.member", "unsigned": { "age": 10590525244 } }, { "content": { "avatar_url": "mxc://matrix.org/owFmTYzinWDfobfbvknuXFoI", "displayname": "brli", "membership": "join" }, "event_id": "$14980270074184824YtPND:matrix.org", "membership": "join", "origin_server_ts": 1498027007289, "sender": "@brli:matrix.org", "state_key": "@brli:matrix.org", "type": "m.room.member", "unsigned": { "age": 12640945389 } }, { "content": { "avatar_url": "mxc://matrix.org/oFchGOOxkLaIoIvlpbrzBcKs", "displayname": "tonghuix", "membership": "join" }, "event_id": "$14990813162332743MilAF:matrix.org", "membership": "join", "origin_server_ts": 1499081316903, "sender": "@tonghuix:matrix.org", "state_key": "@tonghuix:matrix.org", "type": "m.room.member", "unsigned": { "age": 11586635775 } }, { "content": { "avatar_url": "mxc://matrix.org/CcDzsloOcDqBxNRQNOxgMakP#auto", "displayname": "Hirmes", "membership": "join" }, "event_id": "$14980275854189453dUxPh:matrix.org", "membership": "join", "origin_server_ts": 1498027585777, "sender": "@MaXGGXaM:matrix.org", "state_key": "@MaXGGXaM:matrix.org", "type": "m.room.member", "unsigned": { "age": 12640366901 } }, { "content": { "avatar_url": "mxc://chat.rios.org.br/wwOURbNTgIZPkMMTsSusXNZw", "displayname": "daniel", "membership": "join" }, "event_id": "$15070609168621VmOAo:chat.rios.org.br", "membership": "join", "origin_server_ts": 1507060916295, "sender": "@dtygel:chat.rios.org.br", "state_key": "@dtygel:chat.rios.org.br", "type": "m.room.member", "unsigned": { "age": 3607036383, "replaces_state": "$15070609078591NHSsn:chat.rios.org.br" } }, { "content": { "avatar_url": "mxc://matrix.org/PgcmuIePYsjBcXeKQEvPYhJt", "displayname": "sergio", "membership": "join" }, "event_id": "$14929590761817291UicgF:matrix.org", "membership": "join", "origin_server_ts": 1492959076324, "sender": "@sergio:matrix.org", "state_key": "@sergio:matrix.org", "type": "m.room.member", "unsigned": { "age": 17708876354, "replaces_state": "$14929496671728490IiIfQ:matrix.org" } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15084729382276qQjcw:t2bot.io", "membership": "join", "origin_server_ts": 1508472938280, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 2195014398, "replaces_state": "$15072218336296dOcrD:t2bot.io" } }, { "age_ts": 1497526086717, "content": { "avatar_url": "mxc://hveem.no/ASgrrXHwVdVhtzLWlzVxFFTo", "displayname": "ivar", "membership": "join" }, "event_id": "$14975260856218vVENR:hveem.no", "origin_server_ts": 1497526085333, "sender": "@ivarbot:hveem.no", "state_key": "@ivarbot:hveem.no", "type": "m.room.member", "unsigned": { "age": 639, "prev_content": { "avatar_url": "mxc://hveem.no/ASgrrXHwVdVhtzLWlzVxFFTo", "displayname": "ivar", "membership": "invite" }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$1497526084987RBCmN:matrix.ffslfl.net" } }, { "content": { "membership": "leave" }, "event_id": "$14955483411766xhvPl:matrix.rouvinez.me", "membership": "leave", "origin_server_ts": 1495548341086, "sender": "@sven:matrix.rouvinez.me", "state_key": "@sven:matrix.rouvinez.me", "type": "m.room.member", "unsigned": { "age": 15119611592, "replaces_state": "$1494863784930wNoaA:matrix.rouvinez.me" } }, { "content": { "avatar_url": "mxc://ldbco.de/vANKPVQpdQMsLJnUFWSLcKQf", "displayname": "luke", "membership": "join" }, "event_id": "$1509641386218GlpxA:ldbco.de", "membership": "join", "origin_server_ts": 1509641386823, "sender": "@lb:ldbco.de", "state_key": "@lb:ldbco.de", "type": "m.room.member", "unsigned": { "age": 1026565855, "prev_content": { "avatar_url": "mxc://ldbco.de/vANKPVQpdQMsLJnUFWSLcKQf", "displayname": "luke_", "membership": "join" }, "prev_sender": "@lb:ldbco.de", "replaces_state": "$1508321809366johJM:ldbco.de" } }, { "content": { "membership": "leave" }, "event_id": "$15023558882753279dzxpb:matrix.org", "membership": "leave", "origin_server_ts": 1502355888090, "sender": "@pskosinski:matrix.org", "state_key": "@pskosinski:matrix.org", "type": "m.room.member", "unsigned": { "age": 8312064588, "replaces_state": "$15022649111708611FSyLa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15057625782270634XteBm:matrix.org", "membership": "leave", "origin_server_ts": 1505762578672, "sender": "@jvs:matrix.org", "state_key": "@jvs:matrix.org", "type": "m.room.member", "unsigned": { "age": 4905374006, "replaces_state": "$14970983011602212jyfqF:matrix.org" } }, { "content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "join" }, "event_id": "$15076511924009cvfLw:kamax.io", "membership": "join", "origin_server_ts": 1507651192236, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 3016760442, "prev_content": { "avatar_url": "mxc://kamax.io/wYRWRxBIculnprUZBpMrgQsD", "displayname": "Maximus", "membership": "join" }, "prev_sender": "@max:kamax.io", "replaces_state": "$15041233112056rMMrk:kamax.io" } }, { "content": { "avatar_url": "mxc://matrix.org/VdJchdhEtMtpQQGeXcGpYsPJ", "displayname": "Josh's phone", "membership": "join" }, "event_id": "$15086591483368027ufQkX:matrix.org", "membership": "join", "origin_server_ts": 1508659148474, "sender": "@josh45:matrix.org", "state_key": "@josh45:matrix.org", "type": "m.room.member", "unsigned": { "age": 2008804204 } }, { "content": { "avatar_url": "mxc://matrix.org/PAnMfZYjFJJSYNVMSgWFIdce", "displayname": "Wutuyin", "membership": "join" }, "event_id": "$15082547192310589ZXHFK:matrix.org", "membership": "join", "origin_server_ts": 1508254719324, "sender": "@Wutuyin:matrix.org", "state_key": "@Wutuyin:matrix.org", "type": "m.room.member", "unsigned": { "age": 2413233354 } }, { "content": { "avatar_url": "mxc://win32exe.me/TrJMtjsOJfCOLcwmrEWQIxTj", "displayname": "カーシー (CuSith)", "membership": "join" }, "event_id": "$150975405864Mnazo:win32exe.me", "membership": "join", "origin_server_ts": 1509754058774, "sender": "@win32.exe:win32exe.me", "state_key": "@win32.exe:win32exe.me", "type": "m.room.member", "unsigned": { "age": 913893904, "prev_content": { "avatar_url": "mxc://win32exe.me/TrJMtjsOJfCOLcwmrEWQIxTj", "displayname": "カーシー (Cu Sith)", "membership": "join" }, "prev_sender": "@win32.exe:win32exe.me", "replaces_state": "$150975405254UDUEX:win32exe.me" } }, { "content": { "avatar_url": "mxc://oregpreshaz.eu/uFgnkISRwyxXjDIMztdjfQCK", "displayname": "szimszon", "membership": "join" }, "event_id": "$1497991672357KkxCn:oregpreshaz.eu", "origin_server_ts": 1497991672488, "sender": "@szimszon:oregpreshaz.eu", "state_key": "@szimszon:oregpreshaz.eu", "type": "m.room.member", "unsigned": { "age": 567 } }, { "content": { "avatar_url": null, "displayname": "Vini Melo", "kind": "guest", "membership": "join" }, "event_id": "$14947303711257739WzNCk:matrix.org", "membership": "join", "origin_server_ts": 1494730371391, "sender": "@233559:matrix.org", "state_key": "@233559:matrix.org", "type": "m.room.member", "unsigned": { "age": 15937581287 } }, { "content": { "avatar_url": "mxc://matrix.org/GTaULzowvqqpaGHpMOXbAZAr", "displayname": "oon", "membership": "join" }, "event_id": "$15023998773370271oGsUZ:matrix.org", "membership": "join", "origin_server_ts": 1502399877566, "sender": "@oon:matrix.org", "state_key": "@oon:matrix.org", "type": "m.room.member", "unsigned": { "age": 8268075112 } }, { "content": { "avatar_url": "mxc://matrix.org/VkMiIWzCUnAecRXjAYQFunxj", "displayname": "GrigRuss", "membership": "join" }, "event_id": "$15070501173396182WGdsk:matrix.org", "membership": "join", "origin_server_ts": 1507050117446, "sender": "@grigruss:matrix.org", "state_key": "@grigruss:matrix.org", "type": "m.room.member", "unsigned": { "age": 3617835232, "replaces_state": "$1503379935190787RsDWH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oUxxDyzQOHdVDMxgwFzyCWEe", "displayname": "Matthew", "membership": "join" }, "event_id": "$1506686271492183WonVh:matrix.org", "membership": "join", "origin_server_ts": 1506686271942, "sender": "@matthew:matrix.org", "state_key": "@matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 3981680736, "replaces_state": "$15046823182008373beyCu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ea120", "membership": "join" }, "event_id": "$15016352936421683iPaPg:matrix.org", "membership": "join", "origin_server_ts": 1501635293856, "sender": "@ea120:matrix.org", "state_key": "@ea120:matrix.org", "type": "m.room.member", "unsigned": { "age": 9032658822 } }, { "content": { "membership": "leave" }, "event_id": "$1503439610987583cTMPf:matrix.org", "membership": "leave", "origin_server_ts": 1503439610851, "sender": "@Underforest:matrix.org", "state_key": "@Underforest:matrix.org", "type": "m.room.member", "unsigned": { "age": 7228341827, "replaces_state": "$1503439587987222NzsgR:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nVftvUqFGHOjsgxvMotpfBNx", "displayname": "RiotTranslate", "inviter": "@MTRNord:matrix.ffslfl.net", "membership": "join" }, "event_id": "$15023004582150334uOkVR:matrix.org", "membership": "join", "origin_server_ts": 1502300458820, "sender": "@RiotTranslate:matrix.org", "state_key": "@RiotTranslate:matrix.org", "type": "m.room.member", "unsigned": { "age": 8367493858, "replaces_state": "$15023004242502Mkkpn:matrix.ffslfl.net" } }, { "content": { "membership": "leave" }, "event_id": "$150592789731pyYjJ:internet-portal.cz", "membership": "leave", "origin_server_ts": 1505927897824, "sender": "@vaclav.fiser:internet-portal.cz", "state_key": "@vaclav.fiser:internet-portal.cz", "type": "m.room.member", "unsigned": { "age": 4740054854, "replaces_state": "$150592782730ngECK:internet-portal.cz" } }, { "content": { "avatar_url": "mxc://matrix.org/KfkLMomWWjVZMbgVCKisfFPy", "displayname": "Github", "membership": "join" }, "event_id": "$149337410110678VmJMp:matrix.org", "membership": "join", "origin_server_ts": 1493374101032, "sender": "@_neb_github:matrix.org", "state_key": "@_neb_github:matrix.org", "type": "m.room.member", "unsigned": { "age": 17293851646, "replaces_state": "$1492703128915635AxVXD:matrix.org" } }, { "content": { "avatar_url": "mxc://spydar007.com/svfwamnWoXsdBiyceKLinQTa", "displayname": "Spydar007", "membership": "join" }, "event_id": "$1499018378749NOkoU:spydar007.com", "membership": "join", "origin_server_ts": 1499018378175, "sender": "@Spydar007:spydar007.com", "state_key": "@Spydar007:spydar007.com", "type": "m.room.member", "unsigned": { "age": 11649574503, "replaces_state": "$1499018084246xwZsY:spydar007.com" } }, { "content": { "avatar_url": "mxc://matrix.org/HroHJaJIYFujVVRVOleMTABT", "displayname": "rvilar", "membership": "join" }, "event_id": "$15089357011410422iafPR:matrix.org", "membership": "join", "origin_server_ts": 1508935701806, "sender": "@rvilar:matrix.org", "state_key": "@rvilar:matrix.org", "type": "m.room.member", "unsigned": { "age": 1732250872, "replaces_state": "$15089329681370728JVYkb:matrix.org" } }, { "content": { "avatar_url": "mxc://naszademokracja.pl/DhYftYwdzjzPZAxmJoysQvNV", "displayname": "Marcin", "membership": "join" }, "event_id": "$150512318099WWKdI:naszademokracja.pl", "membership": "join", "origin_server_ts": 1505123180825, "sender": "@marcin:naszademokracja.pl", "state_key": "@marcin:naszademokracja.pl", "type": "m.room.member", "unsigned": { "age": 5544771853, "prev_content": { "avatar_url": "mxc://naszademokracja.pl/TzuxmmSYMNFAefyyTcRAAkHK", "displayname": "Marcin", "membership": "join" }, "prev_sender": "@marcin:naszademokracja.pl", "replaces_state": "$150512312288JOsMx:naszademokracja.pl" } }, { "content": { "membership": "leave" }, "event_id": "$15008400892193773FiOhR:matrix.org", "membership": "leave", "origin_server_ts": 1500840089623, "sender": "@TimK87:matrix.org", "state_key": "@TimK87:matrix.org", "type": "m.room.member", "unsigned": { "age": 9827863055, "replaces_state": "$15008400672193493lLgOX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GLIBVHEmaaHSTmJuIvUJsewa", "displayname": null, "membership": "join" }, "event_id": "$15046232701251957qosCQ:matrix.org", "membership": "join", "origin_server_ts": 1504623270918, "sender": "@aaronluoxiao:matrix.org", "state_key": "@aaronluoxiao:matrix.org", "type": "m.room.member", "unsigned": { "age": 6044681760 } }, { "content": { "membership": "leave" }, "event_id": "$14974736811429819vgFnd:matrix.org", "membership": "leave", "origin_server_ts": 1497473681242, "sender": "@PureTryOut:matrix.org", "state_key": "@PureTryOut:matrix.org", "type": "m.room.member", "unsigned": { "age": 13194271436, "replaces_state": "$14959693302540592kmLRN:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TpxSyCeaXqFyfTvVSPAUUlwt", "displayname": "unhammer", "membership": "join" }, "event_id": "$1507805090775251oKiJu:matrix.org", "membership": "join", "origin_server_ts": 1507805090758, "sender": "@unhammer:matrix.org", "state_key": "@unhammer:matrix.org", "type": "m.room.member", "unsigned": { "age": 2862861920 } }, { "content": { "avatar_url": "mxc://matrix.ffslfl.net/EOkmaOykMGKOuYMykParCAQr", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15022885852421XzMoN:matrix.ffslfl.net", "membership": "join", "origin_server_ts": 1502288585625, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@MTRNord:matrix.ffslfl.net", "type": "m.room.member", "unsigned": { "age": 8379367053, "replaces_state": "$15022883992367ExQEe:matrix.ffslfl.net" } }, { "content": { "membership": "leave" }, "event_id": "$1500479818595CxrZc:i9technologies.com", "membership": "leave", "origin_server_ts": 1500479818342, "sender": "@michelk:i9technologies.com", "state_key": "@michelk:i9technologies.com", "type": "m.room.member", "unsigned": { "age": 10188134336, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@michelk:i9technologies.com", "replaces_state": "$1500412145441nOTWZ:i9technologies.com" } }, { "content": { "avatar_url": "mxc://matrix.org/pSRRlghRUvOqWjAKluoulgVO", "displayname": "bldr", "membership": "join" }, "event_id": "$15040848911102989fwIiR:matrix.org", "membership": "join", "origin_server_ts": 1504084891351, "sender": "@bldr:matrix.org", "state_key": "@bldr:matrix.org", "type": "m.room.member", "unsigned": { "age": 6583061327 } }, { "content": { "membership": "leave" }, "event_id": "$150244505127920yCDQm:matrix.org", "membership": "leave", "origin_server_ts": 1502445051422, "sender": "@haessler:matrix.org", "state_key": "@haessler:matrix.org", "type": "m.room.member", "unsigned": { "age": 8222901256, "replaces_state": "$150244499927381TEesJ:matrix.org" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$149452974269447CaAEJ:matrix.org", "membership": "leave", "origin_server_ts": 1494529742167, "sender": "@230924:matrix.org", "state_key": "@230924:matrix.org", "type": "m.room.member", "unsigned": { "age": 16138210511, "replaces_state": "$14944453011185161QsnRF:matrix.org" } }, { "content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "join" }, "event_id": "$15078323093526pzxhy:half-shot.uk", "membership": "join", "origin_server_ts": 1507832309930, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 2835642748, "prev_content": { "avatar_url": "mxc://half-shot.uk/oSnvUaEqIQcsVfAuulWeeBVB", "displayname": "Half-Shot", "membership": "join" }, "prev_sender": "@Half-Shot:half-shot.uk", "replaces_state": "$15029507213442ifPqB:half-shot.uk" } }, { "content": { "avatar_url": "mxc://matrix.org/GgnrkRsfoozIvGlqFvSwnufs", "displayname": "Walter", "membership": "join" }, "event_id": "$14939065971286522iOgop:matrix.org", "membership": "join", "origin_server_ts": 1493906597189, "sender": "@studinsky:matrix.org", "state_key": "@studinsky:matrix.org", "type": "m.room.member", "unsigned": { "age": 16761355489 } }, { "content": { "avatar_url": null, "displayname": "HostFat", "membership": "join" }, "event_id": "$15013940412707172EkYtH:matrix.org", "membership": "join", "origin_server_ts": 1501394041350, "sender": "@HostFat:matrix.org", "state_key": "@HostFat:matrix.org", "type": "m.room.member", "unsigned": { "age": 9273911328 } }, { "content": { "avatar_url": "mxc://chat.weho.st/XlzTiogyMizkwBtlFIxduDlJ", "displayname": "404BOX", "membership": "join" }, "event_id": "$15090161673845ldklU:chat.weho.st", "membership": "join", "origin_server_ts": 1509016167989, "sender": "@gagadsb:chat.weho.st", "state_key": "@gagadsb:chat.weho.st", "type": "m.room.member", "unsigned": { "age": 1651784689, "prev_content": { "avatar_url": "mxc://chat.weho.st/XlzTiogyMizkwBtlFIxduDlJ", "displayname": "gagadsb", "membership": "join" }, "prev_sender": "@gagadsb:chat.weho.st", "replaces_state": "$15090146853758UNwMZ:chat.weho.st" } }, { "content": { "avatar_url": "mxc://matrix.org/YvGXZMmdVizRTNhECBKOBNNo", "displayname": "Yan Minari", "membership": "join" }, "event_id": "$15042545853293336waHTL:matrix.org", "membership": "join", "origin_server_ts": 1504254585564, "sender": "@yangm97:matrix.org", "state_key": "@yangm97:matrix.org", "type": "m.room.member", "unsigned": { "age": 6413367114, "replaces_state": "$15042542823290477TfnNe:matrix.org" } }, { "content": { "avatar_url": "mxc://pvagner.tk/UFbfLlDrvpzthdxQGKLGfJIu#auto", "displayname": "Peter Vágner", "membership": "join" }, "event_id": "$151013458916BzwxV:pvagner.tk", "origin_server_ts": 1510134589057, "sender": "@pvagner:pvagner.tk", "state_key": "@pvagner:pvagner.tk", "type": "m.room.member", "unsigned": { "age": 19 } }, { "content": { "avatar_url": "mxc://matrix.org/pzYZeNScZVpIaDWSUrPjjPuh", "displayname": "Radium", "membership": "join" }, "event_id": "$14959894692690137GbqAX:matrix.org", "membership": "join", "origin_server_ts": 1495989469188, "sender": "@ztl8702:matrix.org", "state_key": "@ztl8702:matrix.org", "type": "m.room.member", "unsigned": { "age": 14678483490 } }, { "content": { "avatar_url": "mxc://matrix.org/EWhmaQHInpmimCJhBTCaBYjJ", "displayname": "Magnolia", "membership": "join" }, "event_id": "$1502645162740854TaEMU:matrix.org", "membership": "join", "origin_server_ts": 1502645162431, "sender": "@airin:matrix.org", "state_key": "@airin:matrix.org", "type": "m.room.member", "unsigned": { "age": 8022790247, "replaces_state": "$1502466690294826nBJhh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Alan Tygel", "kind": "guest", "membership": "join" }, "event_id": "$14923639821355331iCcHp:matrix.org", "membership": "join", "origin_server_ts": 1492363982097, "sender": "@208778:matrix.org", "state_key": "@208778:matrix.org", "type": "m.room.member", "unsigned": { "age": 18303970581 } }, { "content": { "avatar_url": "mxc://matrix.org/kTyMJxIzXZlXdGucEHdhheZk", "displayname": "Ma Shamil", "membership": "join" }, "event_id": "$14959055182084870GSmvJ:matrix.org", "membership": "join", "origin_server_ts": 1495905518177, "sender": "@noteness:matrix.org", "state_key": "@noteness:matrix.org", "type": "m.room.member", "unsigned": { "age": 14762434501, "replaces_state": "$1494947834923982NXPkP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vpAmlCRXHomcQrpKfasWFBoK", "displayname": "Nerkdesign", "membership": "join" }, "event_id": "$1494861074155478SoMSq:matrix.org", "membership": "join", "origin_server_ts": 1494861074878, "sender": "@nerkdesign:matrix.org", "state_key": "@nerkdesign:matrix.org", "type": "m.room.member", "unsigned": { "age": 15806877800 } }, { "content": { "avatar_url": "mxc://matrix.org/dhNtimyMZYPpsdUNCoTBboNv", "displayname": "strixaluco", "membership": "join" }, "event_id": "$14944860171509744UBfSb:matrix.org", "membership": "join", "origin_server_ts": 1494486017789, "sender": "@strixaluco:matrix.org", "state_key": "@strixaluco:matrix.org", "type": "m.room.member", "unsigned": { "age": 16181934889 } }, { "content": { "membership": "leave" }, "event_id": "$1500659574909DZWfj:amiwx.net", "membership": "leave", "origin_server_ts": 1500659574332, "sender": "@gcarlsgaard:amiwx.net", "state_key": "@gcarlsgaard:amiwx.net", "type": "m.room.member", "unsigned": { "age": 10008378346, "prev_content": { "avatar_url": "mxc://amiwx.net/pQTvxAoqQqeCYOXBkbsKrMfo", "displayname": "George Carlsgaard", "membership": "join" }, "prev_sender": "@gcarlsgaard:amiwx.net", "replaces_state": "$1500063198279VMAdj:amiwx.net" } }, { "content": { "membership": "leave" }, "event_id": "$15047217452561987cEBzD:matrix.org", "membership": "leave", "origin_server_ts": 1504721745277, "sender": "@DatseMultimedia:matrix.org", "state_key": "@DatseMultimedia:matrix.org", "type": "m.room.member", "unsigned": { "age": 5946207401, "replaces_state": "$14959429882387943voLSD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14970898081542348nNjHZ:matrix.org", "membership": "leave", "origin_server_ts": 1497089808976, "sender": "@kitsune:matrix.org", "state_key": "@kitsune:matrix.org", "type": "m.room.member", "unsigned": { "age": 13578143702, "replaces_state": "$14923917041628875ZZXtQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150860366068BgAwQ:maunium.net", "membership": "leave", "origin_server_ts": 1508603660494, "sender": "@tulir:maunium.net", "state_key": "@tulir:maunium.net", "type": "m.room.member", "unsigned": { "age": 2064292184, "prev_content": { "avatar_url": "mxc://maunium.net/jdlSfvudiMSmcRrleeiYjjFO", "displayname": "tulir", "membership": "join" }, "prev_sender": "@tulir:maunium.net", "replaces_state": "$14958700271tLehp:maunium.net" } }, { "content": { "avatar_url": "mxc://matrix.org/WIzzpfChIosOlViKxhuKJPgC", "displayname": "Angedestenebres", "membership": "join" }, "event_id": "$15035736662725480JsKKq:matrix.org", "membership": "join", "origin_server_ts": 1503573666722, "sender": "@Angedestenebres:matrix.org", "state_key": "@Angedestenebres:matrix.org", "type": "m.room.member", "unsigned": { "age": 7094285956 } }, { "content": { "membership": "leave" }, "event_id": "$1507289440501IKkHG:riot.ovh", "membership": "leave", "origin_server_ts": 1507289440108, "sender": "@x:riot.ovh", "state_key": "@x:riot.ovh", "type": "m.room.member", "unsigned": { "age": 3378512570, "replaces_state": "$1505651589116vIUKc:riot.ovh" } }, { "content": { "avatar_url": "mxc://matrix.org/PHnCyofsJaPhEJPrjvjfkeIY", "displayname": "maxigaz", "membership": "join" }, "event_id": "$14970369741118323zAlMZ:matrix.org", "membership": "join", "origin_server_ts": 1497036974817, "sender": "@maxigaz:matrix.org", "state_key": "@maxigaz:matrix.org", "type": "m.room.member", "unsigned": { "age": 13630977861 } }, { "content": { "avatar_url": "mxc://matrix.org/vNdZxFlnxzMHwwRgMWeCDlmS", "displayname": "⚡Wolf Lightning⚡", "membership": "join" }, "event_id": "$15019292662805696cefUR:matrix.org", "membership": "join", "origin_server_ts": 1501929266619, "sender": "@wolflighting:matrix.org", "state_key": "@wolflighting:matrix.org", "type": "m.room.member", "unsigned": { "age": 8738686059 } }, { "content": { "avatar_url": "mxc://matrix.org/IssHdyiXMcSnRCxCzqoaocGL", "displayname": "Dave", "membership": "join" }, "event_id": "$14949566141025259bFduP:matrix.org", "membership": "join", "origin_server_ts": 1494956614116, "sender": "@dave:matrix.org", "state_key": "@dave:matrix.org", "type": "m.room.member", "unsigned": { "age": 15711338562, "replaces_state": "$14949566071025162SCitD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zxNbgNCNbOlhFBleoUjApgxi", "displayname": "Rodoslav", "membership": "join" }, "event_id": "$14995500741139466KIGsP:matrix.org", "membership": "join", "origin_server_ts": 1499550074955, "sender": "@Rodoslav:matrix.org", "state_key": "@Rodoslav:matrix.org", "type": "m.room.member", "unsigned": { "age": 11117877723, "replaces_state": "$1499535363980371ENFmZ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Holmes2", "membership": "join" }, "event_id": "$15023708492921328szcuU:matrix.org", "membership": "join", "origin_server_ts": 1502370849224, "sender": "@Holmes2:matrix.org", "state_key": "@Holmes2:matrix.org", "type": "m.room.member", "unsigned": { "age": 8297103454 } }, { "content": { "membership": "leave" }, "event_id": "$15082562322339527wvhhz:matrix.org", "membership": "leave", "origin_server_ts": 1508256232672, "sender": "@kosirm:matrix.org", "state_key": "@kosirm:matrix.org", "type": "m.room.member", "unsigned": { "age": 2411720006, "replaces_state": "$15031846473756590yCUwf:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$15046044141010888Nrynv:matrix.org", "membership": "join", "origin_server_ts": 1504604414300, "sender": "@mechanized-snail:matrix.org", "state_key": "@mechanized-snail:matrix.org", "type": "m.room.member", "unsigned": { "age": 6063538378, "redacted_because": { "content": {}, "event_id": "$15046044231010971xfPxN:matrix.org", "origin_server_ts": 1504604423881, "redacts": "$15046044141010888Nrynv:matrix.org", "sender": "@mechanized-snail:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 6063528797 } }, "redacted_by": "$15046044231010971xfPxN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15047294942687485UnOae:matrix.org", "membership": "leave", "origin_server_ts": 1504729494808, "sender": "@birdstache:matrix.org", "state_key": "@birdstache:matrix.org", "type": "m.room.member", "unsigned": { "age": 5938457870, "replaces_state": "$15044519281489782AEzVQ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "RoEn", "membership": "join" }, "event_id": "$1503745213996980kgVQC:matrix.org", "membership": "join", "origin_server_ts": 1503745213951, "sender": "@RoEn:matrix.org", "state_key": "@RoEn:matrix.org", "type": "m.room.member", "unsigned": { "age": 6922738727 } }, { "content": { "membership": "leave" }, "event_id": "$1500318769641403ijXIp:matrix.org", "membership": "leave", "origin_server_ts": 1500318769526, "sender": "@amp:matrix.org", "state_key": "@amp:matrix.org", "type": "m.room.member", "unsigned": { "age": 10349183152, "replaces_state": "$1500318735640073NotGT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/iuRpzTjMfddpeVIFbEJPoQPA", "displayname": "indygamer", "membership": "join" }, "event_id": "$1491472817749118KugGl:matrix.org", "membership": "join", "origin_server_ts": 1491472817906, "sender": "@indgamer:matrix.org", "state_key": "@indgamer:matrix.org", "type": "m.room.member", "unsigned": { "age": 19195134772 } }, { "content": { "aliases": [ "#riotweb-translations:matrix.org" ] }, "event_id": "$1491331719182845nddgC:matrix.org", "origin_server_ts": 1491331719699, "sender": "@MTRNord:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 19336232979 } }, { "content": { "avatar_url": null, "displayname": "azizi", "membership": "join" }, "event_id": "$15080554783294394yIsjj:matrix.org", "membership": "join", "origin_server_ts": 1508055478368, "sender": "@azizi:matrix.org", "state_key": "@azizi:matrix.org", "type": "m.room.member", "unsigned": { "age": 2612474310 } }, { "content": { "avatar_url": null, "displayname": "Guest 254967", "kind": "guest", "membership": "join" }, "event_id": "$1496765282228372zfwZO:matrix.org", "membership": "join", "origin_server_ts": 1496765282210, "sender": "@254967:matrix.org", "state_key": "@254967:matrix.org", "type": "m.room.member", "unsigned": { "age": 13902670468 } }, { "age_ts": 1493889794339, "content": { "avatar_url": "mxc://msgs.tk/xxkoXPvoQvvStEYaBXWTXjqh", "displayname": "krombel", "membership": "join" }, "event_id": "$1493889793108PbMIn:msgs.tk", "origin_server_ts": 1493889794099, "sender": "@krombel:msgs.tk", "state_key": "@krombel:msgs.tk", "type": "m.room.member", "unsigned": { "age": 75 } }, { "content": { "avatar_url": null, "displayname": "dansk-hotter", "membership": "join" }, "event_id": "$15035200392135900IKMhS:matrix.org", "membership": "join", "origin_server_ts": 1503520039587, "sender": "@dansk-hotter:matrix.org", "state_key": "@dansk-hotter:matrix.org", "type": "m.room.member", "unsigned": { "age": 7147913091 } }, { "content": { "membership": "leave" }, "event_id": "$1498581495167WRGSN:matrixim.cc", "membership": "leave", "origin_server_ts": 1498581495772, "sender": "@vimacs:matrixim.cc", "state_key": "@vimacs:matrixim.cc", "type": "m.room.member", "unsigned": { "age": 12086456906, "prev_content": { "avatar_url": "mxc://matrixim.cc/LCdVuiUgajzKQPMhUJozNSVg", "displayname": "vimacs", "membership": "join" }, "prev_sender": "@vimacs:matrixim.cc", "replaces_state": "$1498492784101YJpHX:matrixim.cc" } }, { "content": { "membership": "leave" }, "event_id": "$14991148382902129CJwat:matrix.org", "membership": "leave", "origin_server_ts": 1499114838804, "sender": "@lenox:matrix.org", "state_key": "@lenox:matrix.org", "type": "m.room.member", "unsigned": { "age": 11553113874, "replaces_state": "$14991147492900221YUhUA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "cas606", "membership": "join" }, "event_id": "$15096983674745015CCZje:matrix.org", "membership": "join", "origin_server_ts": 1509698367310, "sender": "@cas606:matrix.org", "state_key": "@cas606:matrix.org", "type": "m.room.member", "unsigned": { "age": 969585368 } }, { "content": { "avatar_url": "mxc://matrix.org/BLlZpAPrnmemAEssgcEanrwf", "displayname": "Wizard 𝖙3𝖈𝖍𝖌𝖚𝖞", "membership": "join" }, "event_id": "$15007251961107881vxAqi:matrix.org", "membership": "join", "origin_server_ts": 1500725196674, "sender": "@webdevguru:matrix.org", "state_key": "@webdevguru:matrix.org", "type": "m.room.member", "unsigned": { "age": 9942756004, "replaces_state": "$14984908282381477mRpHm:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oiMfMORiseDWSZbgpXEQWugX", "displayname": "eti", "membership": "join" }, "event_id": "$15035322582311029gdIgM:matrix.org", "membership": "join", "origin_server_ts": 1503532258343, "sender": "@eti:matrix.org", "state_key": "@eti:matrix.org", "type": "m.room.member", "unsigned": { "age": 7135694335 } }, { "age_ts": 1492775188819, "content": { "avatar_url": null, "displayname": "Alan Tygel", "membership": "join" }, "event_id": "$14927751881tQImt:matrix.snieecs.eita.org.br", "origin_server_ts": 1492775188426, "sender": "@alantygel:matrix.snieecs.eita.org.br", "state_key": "@alantygel:matrix.snieecs.eita.org.br", "type": "m.room.member", "unsigned": { "age": 50 } }, { "content": { "avatar_url": "mxc://matrix.org/QCbSStOCRvuhKaCdpBaxFGBz", "displayname": "Tamas", "membership": "join" }, "event_id": "$150399762413974FcWoZ:matrix.org", "membership": "join", "origin_server_ts": 1503997624649, "sender": "@tamasmagyar:matrix.org", "state_key": "@tamasmagyar:matrix.org", "type": "m.room.member", "unsigned": { "age": 6670328029 } }, { "content": { "membership": "leave" }, "event_id": "$1509745349611081pLpyC:matrix.org", "membership": "leave", "origin_server_ts": 1509745349137, "sender": "@viccuad:matrix.org", "state_key": "@viccuad:matrix.org", "type": "m.room.member", "unsigned": { "age": 922603541, "replaces_state": "$15033282385139868bzaFF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jbhj", "membership": "join" }, "event_id": "$1507775374453579KBijV:matrix.org", "membership": "join", "origin_server_ts": 1507775374151, "sender": "@jbhj:matrix.org", "state_key": "@jbhj:matrix.org", "type": "m.room.member", "unsigned": { "age": 2892578527 } }, { "age_ts": 1503141960837, "content": { "avatar_url": "mxc://cervoi.se/lKGCTFLJtTkQEPuOuBiaCuMR", "displayname": "erdnaxeli", "membership": "join" }, "event_id": "$15031419821772peymw:cervoi.se", "origin_server_ts": 1503141960446, "sender": "@erdnaxeli:cervoi.se", "state_key": "@erdnaxeli:cervoi.se", "type": "m.room.member", "unsigned": { "age": 645, "replaces_state": "$1499594472139019UAscI:cervoi.se" } }, { "content": { "name": "Riot-Web Translations" }, "event_id": "$14914720154685qjbaZ:matrix.eclabs.de", "origin_server_ts": 1491472015849, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "", "type": "m.room.name", "unsigned": { "age": 19195936829, "replaces_state": "$14901239866726gPydO:matrix.eclabs.de" } }, { "age_ts": 1496820377354, "content": { "avatar_url": "mxc://matrix.zottel.net/YsrfijXnxjlBfIlStuXJRVgx", "displayname": "zottel", "membership": "join" }, "event_id": "$14968203771370KMDwf:matrix.zottel.net", "origin_server_ts": 1496820376881, "sender": "@zottel:matrix.zottel.net", "state_key": "@zottel:matrix.zottel.net", "type": "m.room.member", "unsigned": { "age": 106, "replaces_state": "$14968202911368NDJkN:matrix.zottel.net" } }, { "content": { "avatar_url": "mxc://chat.weho.st/qgGFaSnvtkdXGBotgrUuaQGR", "displayname": "realitygaps", "membership": "join" }, "event_id": "$149692941616735XcVqI:chat.weho.st", "origin_server_ts": 1496929416638, "sender": "@realitygaps:chat.weho.st", "state_key": "@realitygaps:chat.weho.st", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QGtlZ2FuOm1hdHJpeC5vcmcgZMiBXLrEZiQnSvyXcrdautg.aW1hZ2UvanBlZw==.jpeg", "displayname": "Kegan", "membership": "join" }, "event_id": "$14961423383996099BOsQS:matrix.org", "membership": "join", "origin_server_ts": 1496142338561, "sender": "@kegan:matrix.org", "state_key": "@kegan:matrix.org", "type": "m.room.member", "unsigned": { "age": 14525614117, "replaces_state": "$14961417223990314XnlBg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15053741073525DCdiV:yoitsu.moe", "membership": "leave", "origin_server_ts": 1505374107224, "sender": "@horo:yoitsu.moe", "state_key": "@horo:yoitsu.moe", "type": "m.room.member", "unsigned": { "age": 5293845454, "prev_content": { "avatar_url": "mxc://yoitsu.moe/ryOVquCuxNwFyqPHwrHZZyVn", "displayname": "ヨイツの賢狼ホロ | 7th style", "membership": "join" }, "prev_sender": "@horo:yoitsu.moe", "replaces_state": "$1505281432210jrmeH:yoitsu.moe" } }, { "content": { "avatar_url": "mxc://naszademokracja.pl/rYZxKqjExqzupsZPhJhTQhld", "displayname": "harcesz", "membership": "join" }, "event_id": "$150454319212Hgoji:naszademokracja.pl", "membership": "join", "origin_server_ts": 1504543192266, "sender": "@harcesz:naszademokracja.pl", "state_key": "@harcesz:naszademokracja.pl", "type": "m.room.member", "unsigned": { "age": 6124760412, "replaces_state": "$150454312011VVKNY:naszademokracja.pl" } }, { "content": { "membership": "leave" }, "event_id": "$1504530333152606cuPhP:matrix.org", "membership": "leave", "origin_server_ts": 1504530333754, "sender": "@T0MuX:matrix.org", "state_key": "@T0MuX:matrix.org", "type": "m.room.member", "unsigned": { "age": 6137618924, "replaces_state": "$15042863773698148rMoPU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JiyERwWFodxMOAEOdhhNdDFj", "displayname": "fm1", "membership": "join" }, "event_id": "$1507208337600014SoDfM:matrix.org", "membership": "join", "origin_server_ts": 1507208337383, "sender": "@freem:matrix.org", "state_key": "@freem:matrix.org", "type": "m.room.member", "unsigned": { "age": 3459615295, "replaces_state": "$15009030722804908jlDZe:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/AtzwirvniYllJrOFQhHAcJOI", "displayname": "bob", "membership": "join" }, "event_id": "$14912805672687826OYnat:matrix.org", "origin_server_ts": 1491280567906, "sender": "@bobderbaumeister:matrix.org", "state_key": "@bobderbaumeister:matrix.org", "type": "m.room.member", "unsigned": { "age": 19387384758 } }, { "content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@MTRNord:matrix.eclabs.de": 100, "@MTRNord:matrix.ffslfl.net": 100, "@MTRNord:matrix.org": 100, "@MTRNord:riot.nordgedanken.de": 1, "@dave:matrix.org": 50, "@matthew:matrix.org": 50 }, "users_default": 0 }, "event_id": "$1507422955414PDpFx:matrix.ffslfl.net", "origin_server_ts": 1507422955439, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 3244997239, "prev_content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@MTRNord:matrix.eclabs.de": 100, "@MTRNord:matrix.ffslfl.net": 100, "@MTRNord:matrix.org": 100, "@dave:matrix.org": 50, "@matthew:matrix.org": 50 }, "users_default": 0 }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$1497017757209ihlDg:matrix.ffslfl.net" } }, { "content": { "avatar_url": "mxc://matrix.org/vHdfXtfpbioYFOXimKYLfAdC", "displayname": "Nidarsh", "membership": "join" }, "event_id": "$1506417791711981ZIwLX:matrix.org", "membership": "join", "origin_server_ts": 1506417791435, "sender": "@nidarsh:matrix.org", "state_key": "@nidarsh:matrix.org", "type": "m.room.member", "unsigned": { "age": 4250161243, "replaces_state": "$14991969064255392vUACW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.eclabs.de/uakjsYpKsfCPqLEHSTqmFDSV", "displayname": "sven", "membership": "join" }, "event_id": "$1495994752221FhwBZ:matrix.eclabs.de", "membership": "join", "origin_server_ts": 1495994752310, "sender": "@sven:matrix.eclabs.de", "state_key": "@sven:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 14673200368, "prev_content": { "membership": "leave" }, "prev_sender": "@sven:matrix.eclabs.de", "replaces_state": "$14920331957196zeaEA:matrix.eclabs.de" } }, { "content": { "membership": "leave" }, "event_id": "$14966128811085NdLXm:kolosowscy.pl", "membership": "leave", "origin_server_ts": 1496612881969, "sender": "@jurek:kolosowscy.pl", "state_key": "@jurek:kolosowscy.pl", "type": "m.room.member", "unsigned": { "age": 14055070709, "prev_content": { "avatar_url": "mxc://kolosowscy.pl/grGjSXBWCsntsGChhZgjhyTb", "displayname": "Jurek", "membership": "join" }, "prev_sender": "@jurek:kolosowscy.pl", "replaces_state": "$14965325201074SDkOU:kolosowscy.pl" } }, { "content": { "guest_access": "can_join" }, "event_id": "$14901239866725UKjyc:matrix.eclabs.de", "origin_server_ts": 1490123986332, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 1156581784 } }, { "content": { "avatar_url": "mxc://matrix.org/UgbtrknfRDpSrwjjtqrrmoxd", "displayname": "Achſenknopf", "membership": "join" }, "event_id": "$1492300695869592xOGVC:matrix.org", "membership": "join", "origin_server_ts": 1492300695433, "sender": "@Achsenknopf:matrix.org", "state_key": "@Achsenknopf:matrix.org", "type": "m.room.member", "unsigned": { "age": 18367257245 } }, { "content": { "aliases": [ "#riot-translations:matrix.eclabs.de" ] }, "event_id": "$14901241156727OQfoW:matrix.eclabs.de", "origin_server_ts": 1490124115009, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "matrix.eclabs.de", "type": "m.room.aliases", "unsigned": { "age": 1156453107 } }, { "content": { "url": "mxc://matrix.ffslfl.net/VGJOdyZBVQTZGtAxAKeRohEl" }, "event_id": "$1497043157245XabrA:matrix.ffslfl.net", "origin_server_ts": 1497043157996, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 13624794682, "replaces_state": "$1497043006242Fvqja:matrix.ffslfl.net" } }, { "content": { "avatar_url": "mxc://matrix.org/aWrWFZYQaOsUhuWWwyGuNbuD", "displayname": "snoopywire", "membership": "join" }, "event_id": "$15089465621605323xADNO:matrix.org", "membership": "join", "origin_server_ts": 1508946562988, "sender": "@snoopiwire:matrix.org", "state_key": "@snoopiwire:matrix.org", "type": "m.room.member", "unsigned": { "age": 1721389690, "replaces_state": "$15081900471488548URufL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15044519781490378GXnhC:matrix.org", "membership": "leave", "origin_server_ts": 1504451978857, "sender": "@neb_giphy:matrix.org", "state_key": "@neb_giphy:matrix.org", "type": "m.room.member", "unsigned": { "age": 6215973821, "replaces_state": "$15044519581490139QAJin:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "noolimits", "membership": "join" }, "event_id": "$15057599662226516fhceA:matrix.org", "membership": "join", "origin_server_ts": 1505759966328, "sender": "@noolimits:matrix.org", "state_key": "@noolimits:matrix.org", "type": "m.room.member", "unsigned": { "age": 4907986350 } }, { "content": { "history_visibility": "world_readable" }, "event_id": "$1491331719182841eBmBx:matrix.org", "origin_server_ts": 1491331719616, "sender": "@MTRNord:matrix.org", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 19336233062, "replaces_state": "$14901239866724zrQkG:matrix.eclabs.de" } }, { "content": { "avatar_url": "mxc://zboxapp.com/ArUxvPGCDuiWZHqpqdJeQEIT", "displayname": "Johuder G", "membership": "join" }, "event_id": "$14960670091164diUcF:zboxapp.com", "origin_server_ts": 1496066999143, "sender": "@juorder:zboxapp.com", "state_key": "@juorder:zboxapp.com", "type": "m.room.member", "unsigned": { "age": 444 } }, { "content": { "membership": "leave" }, "event_id": "$15013212561401uemWp:colloqui.eu", "membership": "leave", "origin_server_ts": 1501321256804, "sender": "@ks:colloqui.eu", "state_key": "@ks:colloqui.eu", "type": "m.room.member", "unsigned": { "age": 9346695874, "prev_content": { "avatar_url": "mxc://colloqui.eu/ZmnSuZiaPMDqhBhKDLqiKlaE", "displayname": "Kaj-Simon (tuks)", "membership": "join" }, "prev_sender": "@ks:colloqui.eu", "replaces_state": "$15013211541400NMuvE:colloqui.eu" } }, { "content": { "avatar_url": "mxc://matrix.org/gWLPZZSJPbhgHoyShiGSesXS", "displayname": "Amandine", "membership": "join" }, "event_id": "$1494866373216010MYDBQ:matrix.org", "membership": "join", "origin_server_ts": 1494866373923, "sender": "@Amandine:matrix.org", "state_key": "@Amandine:matrix.org", "type": "m.room.member", "unsigned": { "age": 15801578755 } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$14964183122144972IEhhD:matrix.org", "membership": "join", "origin_server_ts": 1496418312912, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 14249639766 } }, { "content": { "avatar_url": "mxc://matrix.org/irEkZxjOpbiJBcrgTiTRRYdG", "displayname": "Andrew", "membership": "join" }, "event_id": "$1502725961602739Gmwug:matrix.org", "membership": "join", "origin_server_ts": 1502725961243, "sender": "@andy.mtp:matrix.org", "state_key": "@andy.mtp:matrix.org", "type": "m.room.member", "unsigned": { "age": 7941991435, "replaces_state": "$14991600793621206tUiIK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dvnproiuMykLDbACKWGWlpQN", "displayname": "s8321414", "membership": "join" }, "event_id": "$14980202404133465iufrc:matrix.org", "membership": "join", "origin_server_ts": 1498020240091, "sender": "@s8321414:matrix.org", "state_key": "@s8321414:matrix.org", "type": "m.room.member", "unsigned": { "age": 12647712587 } }, { "content": { "avatar_url": "mxc://matrix.org/iBGvAziVUAqBYgelMGXuTQsr", "displayname": "benscmidth", "membership": "join" }, "event_id": "$15051854752896001IiSdt:matrix.org", "membership": "join", "origin_server_ts": 1505185475467, "sender": "@benscmidth:matrix.org", "state_key": "@benscmidth:matrix.org", "type": "m.room.member", "unsigned": { "age": 5482477211, "replaces_state": "$15051814092855132dtTjW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nwJgkzwPapHKzxBdeuMWmhhG", "displayname": "Osoitz", "membership": "join" }, "event_id": "$150166798018325ImAFd:matrix.org", "membership": "join", "origin_server_ts": 1501667980851, "sender": "@Osoitz:matrix.org", "state_key": "@Osoitz:matrix.org", "type": "m.room.member", "unsigned": { "age": 8999971827 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15051273352101029kQlgV:matrix.org", "membership": "join", "origin_server_ts": 1505127335158, "sender": "@reip:matrix.org", "state_key": "@reip:matrix.org", "type": "m.room.member", "unsigned": { "age": 5540617520 } }, { "content": { "avatar_url": "mxc://matrix.org/ldkRGqwbkwWhMBnewQxgqVKX", "displayname": "win32.exe (Mtrx)", "membership": "join" }, "event_id": "$15048727294409081seBsj:matrix.org", "membership": "join", "origin_server_ts": 1504872729345, "sender": "@win32.executioner:matrix.org", "state_key": "@win32.executioner:matrix.org", "type": "m.room.member", "unsigned": { "age": 5795223333, "replaces_state": "$14967173205090536gMJSA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FrShVjirXkcSFCWuOEHwGGnw", "displayname": "HelloTest", "membership": "join" }, "event_id": "$15070210242978246tSome:matrix.org", "membership": "join", "origin_server_ts": 1507021024353, "sender": "@HelloTest:matrix.org", "state_key": "@HelloTest:matrix.org", "type": "m.room.member", "unsigned": { "age": 3646928325, "replaces_state": "$15030707572559265sXfKR:matrix.org" } }, { "content": { "topic": "How to add translations: https://github.com/vector-im/riot-web/blob/develop/docs/translating.md Translation Website: https://translate.riot.im Pad direct link: https://demo.riot.im/etherpad/p/!OYyXUbcTKVsDBUniNn:matrix.eclabs.de_IdeasTodos" }, "event_id": "$1509739464131ImTUL:matrix.ffslfl.net", "origin_server_ts": 1509739464494, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 928488184, "prev_content": { "topic": "How to add translations: https://github.com/vector-im/riot-web/blob/develop/docs/translating.md Translation Website: https://translate.riot.im" }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$1502985313842UNQAl:matrix.ffslfl.net" } }, { "content": { "avatar_url": null, "displayname": "zeug", "membership": "join" }, "event_id": "$15031258203190313RhpXh:matrix.org", "membership": "join", "origin_server_ts": 1503125820929, "sender": "@zeug:matrix.org", "state_key": "@zeug:matrix.org", "type": "m.room.member", "unsigned": { "age": 7542131749 } }, { "content": { "membership": "leave" }, "event_id": "$15002544852038047uhitO:matrix.org", "membership": "leave", "origin_server_ts": 1500254485468, "sender": "@Olivier.Nyssen:matrix.org", "state_key": "@Olivier.Nyssen:matrix.org", "type": "m.room.member", "unsigned": { "age": 10413467210, "replaces_state": "$1494905856593331wEQxp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15104106731910002eCPXi:matrix.org", "membership": "leave", "origin_server_ts": 1510410673706, "sender": "@dupa11111dupa:matrix.org", "state_key": "@dupa11111dupa:matrix.org", "type": "m.room.member", "unsigned": { "age": 257278972, "prev_content": { "avatar_url": null, "displayname": "justtesting", "membership": "join" }, "prev_sender": "@dupa11111dupa:matrix.org", "replaces_state": "$15041215261645333zNcZQ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Tryes", "membership": "join" }, "event_id": "$15005248343420968bIzuZ:matrix.org", "membership": "join", "origin_server_ts": 1500524834509, "sender": "@Tryes:matrix.org", "state_key": "@Tryes:matrix.org", "type": "m.room.member", "unsigned": { "age": 10143118169 } }, { "content": { "membership": "leave" }, "event_id": "$15033004324816203vLkTp:matrix.org", "membership": "leave", "origin_server_ts": 1503300432494, "sender": "@sekaichifudanshi:matrix.org", "state_key": "@sekaichifudanshi:matrix.org", "type": "m.room.member", "unsigned": { "age": 7367520184, "replaces_state": "$14963149381038139JEQAB:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15081416090wSRmJ:010.az", "membership": "leave", "origin_server_ts": 1508141609736, "sender": "@root:010.az", "state_key": "@root:010.az", "type": "m.room.member", "unsigned": { "age": 2526342942, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@root:010.az", "replaces_state": "$150813928015SvCUG:010.az" } }, { "content": { "membership": "leave" }, "event_id": "$1499524929883205OnaOZ:matrix.org", "membership": "leave", "origin_server_ts": 1499524929707, "sender": "@WaleSky:matrix.org", "state_key": "@WaleSky:matrix.org", "type": "m.room.member", "unsigned": { "age": 11143022971, "replaces_state": "$1499512855787038FNjoL:matrix.org" } }, { "content": { "avatar_url": "mxc://ravne.land/PwSaNYDbphSFrWKACWgcnTPa", "displayname": "esh", "membership": "join" }, "event_id": "$150333927439ApumS:ravne.land", "membership": "join", "origin_server_ts": 1503339274403, "sender": "@esh:ravne.land", "state_key": "@esh:ravne.land", "type": "m.room.member", "unsigned": { "age": 7328678275, "prev_content": { "avatar_url": "mxc://ravne.land/cfHmYdbTZFQiRItvIGVgWmKg", "displayname": "esh", "membership": "join" }, "prev_sender": "@esh:ravne.land", "replaces_state": "$15028532395GaVBa:ravne.land" } }, { "content": { "avatar_url": null, "displayname": "-pep-", "membership": "join" }, "event_id": "$15091370434302746HXfDc:matrix.org", "membership": "join", "origin_server_ts": 1509137043118, "sender": "@-pep-:matrix.org", "state_key": "@-pep-:matrix.org", "type": "m.room.member", "unsigned": { "age": 1530909560 } }, { "content": { "membership": "leave" }, "event_id": "$15008700742481434qaePO:matrix.org", "membership": "leave", "origin_server_ts": 1500870074602, "sender": "@lfy:matrix.org", "state_key": "@lfy:matrix.org", "type": "m.room.member", "unsigned": { "age": 9797878076, "replaces_state": "$15008700442481210ZoOEy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15052975804221110owKtM:matrix.org", "membership": "leave", "origin_server_ts": 1505297580746, "sender": "@captainplanet:matrix.org", "state_key": "@captainplanet:matrix.org", "type": "m.room.member", "unsigned": { "age": 5370371932, "replaces_state": "$15052947314189952vEAfp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "harcesz", "membership": "join" }, "event_id": "$15046157361138513peIAI:matrix.org", "membership": "join", "origin_server_ts": 1504615736271, "sender": "@testownikad:matrix.org", "state_key": "@testownikad:matrix.org", "type": "m.room.member", "unsigned": { "age": 6052216407 } }, { "content": { "avatar_url": null, "displayname": "Guest 229755", "kind": "guest", "membership": "join" }, "event_id": "$14944381151101484HOzgl:matrix.org", "membership": "join", "origin_server_ts": 1494438115271, "sender": "@229755:matrix.org", "state_key": "@229755:matrix.org", "type": "m.room.member", "unsigned": { "age": 16229837407 } }, { "content": { "membership": "leave" }, "event_id": "$1496595108482ywvkF:sibnsk.net", "membership": "leave", "origin_server_ts": 1496595108038, "sender": "@held:sibnsk.net", "state_key": "@held:sibnsk.net", "type": "m.room.member", "unsigned": { "age": 14072844640, "prev_content": { "avatar_url": null, "displayname": "Холден", "membership": "join" }, "prev_sender": "@held:sibnsk.net", "replaces_state": "$1494765308234nSpAB:sibnsk.net" } }, { "content": { "avatar_url": null, "displayname": "Stefan", "membership": "join" }, "event_id": "$15038487491950973kwJdd:matrix.org", "membership": "join", "origin_server_ts": 1503848749022, "sender": "@pafcu:matrix.org", "state_key": "@pafcu:matrix.org", "type": "m.room.member", "unsigned": { "age": 6819203656 } }, { "content": { "avatar_url": "mxc://matrix.org/nkiyKSvNRMgsxVSWkcjusDeS", "displayname": "Jan Kudrik", "membership": "join" }, "event_id": "$15038696632196825onjAv:matrix.org", "membership": "join", "origin_server_ts": 1503869663965, "sender": "@jankudrik:matrix.org", "state_key": "@jankudrik:matrix.org", "type": "m.room.member", "unsigned": { "age": 6798288713 } }, { "content": { "membership": "leave" }, "event_id": "$15052452093630137KtmJN:matrix.org", "membership": "leave", "origin_server_ts": 1505245209944, "sender": "@fs_IU9ZeVhVYmNUS1ZzREJVbmlObjptYXRyaXguZWNsYWJzLmRl:matrix.org", "state_key": "@fs_IU9ZeVhVYmNUS1ZzREJVbmlObjptYXRyaXguZWNsYWJzLmRl:matrix.org", "type": "m.room.member", "unsigned": { "age": 5422742734, "replaces_state": "$15052451903629830RVcrC:matrix.org" } }, { "content": { "avatar_url": "mxc://lant.uk/PPxwmHXKIMJcQabqUUUOYdOB", "displayname": "toml", "membership": "join" }, "event_id": "$15035662893347JkgIT:lant.uk", "membership": "join", "origin_server_ts": 1503566289679, "sender": "@tom:lant.uk", "state_key": "@tom:lant.uk", "type": "m.room.member", "unsigned": { "age": 7101662999, "prev_content": { "avatar_url": "mxc://lant.uk/PPxwmHXKIMJcQabqUUUOYdOB", "displayname": "toml · 🦃", "membership": "join" }, "prev_sender": "@tom:lant.uk", "replaces_state": "$15035063562987Dlcqb:lant.uk" } }, { "content": { "membership": "leave" }, "event_id": "$15061504012070310zTIbk:matrix.org", "membership": "leave", "origin_server_ts": 1506150401192, "sender": "@DoctorRoom:matrix.org", "state_key": "@DoctorRoom:matrix.org", "type": "m.room.member", "unsigned": { "age": 4517551486, "replaces_state": "$15061490652058973uVHeD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hGflZQNxFcDTropATvVZChBI", "displayname": "Florian", "membership": "join" }, "event_id": "$1492547573935102SCEMu:matrix.org", "membership": "join", "origin_server_ts": 1492547573038, "sender": "@florianjacob:matrix.org", "state_key": "@florianjacob:matrix.org", "type": "m.room.member", "unsigned": { "age": 18120379640 } }, { "content": { "membership": "leave" }, "event_id": "$14965677803389IJusQ:matrix.eclabs.de", "membership": "leave", "origin_server_ts": 1496567780380, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "@MTRNord:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 14100172298, "prev_content": { "avatar_url": "mxc://matrix.eclabs.de/jmpGtDurboZtbLKMSnsQAupn", "displayname": "MTRNord", "membership": "join" }, "prev_sender": "@MTRNord:matrix.eclabs.de", "replaces_state": "$149580323226187EmiZv:matrix.eclabs.de" } }, { "content": { "avatar_url": "mxc://matrix.org/lIoOYiVOfUizpwAwdmlfNEJo", "displayname": "Nouts", "membership": "join" }, "event_id": "$1494866261214776OxqEf:matrix.org", "membership": "join", "origin_server_ts": 1494866261202, "sender": "@nouts:matrix.org", "state_key": "@nouts:matrix.org", "type": "m.room.member", "unsigned": { "age": 15801691476 } }, { "content": { "avatar_url": null, "displayname": "andrey", "membership": "join" }, "event_id": "$149858041456255oGvuT:matrix.org", "membership": "join", "origin_server_ts": 1498580414600, "sender": "@man:matrix.org", "state_key": "@man:matrix.org", "type": "m.room.member", "unsigned": { "age": 12087538078 } }, { "content": { "avatar_url": "mxc://tedomum.net/msrXodeLXfEqPpdObUyMDaMQ", "displayname": "kaiyou", "membership": "join" }, "event_id": "$15007912937678afeZF:tedomum.net", "origin_server_ts": 1500791292976, "sender": "@kaiyou:tedomum.net", "state_key": "@kaiyou:tedomum.net", "type": "m.room.member", "unsigned": { "age": 51 } }, { "content": { "avatar_url": "mxc://matrix.org/yqHrLuxVqzcGPIsHQREolPMS", "displayname": "Morgan Bazalgette", "membership": "join" }, "event_id": "$1507494018240949GxYVU:matrix.org", "membership": "join", "origin_server_ts": 1507494018403, "sender": "@dahhowl:matrix.org", "state_key": "@dahhowl:matrix.org", "type": "m.room.member", "unsigned": { "age": 3173934275 } }, { "content": { "membership": "leave" }, "event_id": "$1507422920412XrGtc:matrix.ffslfl.net", "membership": "leave", "origin_server_ts": 1507422920085, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@riottranslate:matrix.org", "type": "m.room.member", "unsigned": { "age": 3245032593, "prev_content": { "membership": "invite" }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$149796486769PVXDS:matrix.ffslfl.net" } }, { "content": { "avatar_url": "mxc://matrix.org/nBgnlGEqgqmnihdGCnITbxiF", "displayname": "tompa", "membership": "join" }, "event_id": "$15015081994168021tnjUk:matrix.org", "membership": "join", "origin_server_ts": 1501508199321, "sender": "@tompa:matrix.org", "state_key": "@tompa:matrix.org", "type": "m.room.member", "unsigned": { "age": 9159753357 } }, { "content": { "avatar_url": null, "displayname": "mvprzy", "membership": "join" }, "event_id": "$15052447593622568apdmR:matrix.org", "membership": "join", "origin_server_ts": 1505244759842, "sender": "@mvprzy:matrix.org", "state_key": "@mvprzy:matrix.org", "type": "m.room.member", "unsigned": { "age": 5423192836 } }, { "content": { "membership": "leave" }, "event_id": "$1498040445538UFfyA:matrix.cvc.uab.es", "membership": "leave", "origin_server_ts": 1498040445655, "sender": "@priba:matrix.cvc.uab.es", "state_key": "@priba:matrix.cvc.uab.es", "type": "m.room.member", "unsigned": { "age": 12627507023, "prev_content": { "avatar_url": "mxc://matrix.cvc.uab.es/GEOtXLqEGCvDJHTlowqdTaDt", "displayname": "Pau Riba", "membership": "join" }, "prev_sender": "@priba:matrix.cvc.uab.es", "replaces_state": "$1498040361537NvzoB:matrix.cvc.uab.es" } }, { "content": { "membership": "leave" }, "event_id": "$1502475443218oyiFM:matrix.flyar.net", "membership": "leave", "origin_server_ts": 1502475443836, "sender": "@markus:matrix.flyar.net", "state_key": "@markus:matrix.flyar.net", "type": "m.room.member", "unsigned": { "age": 8192508842, "replaces_state": "$1502446933201eNcBg:matrix.flyar.net" } }, { "content": { "avatar_url": null, "displayname": "pg", "membership": "join" }, "event_id": "$1505385876447PEvhe:naszademokracja.pl", "membership": "join", "origin_server_ts": 1505385876479, "sender": "@pg:naszademokracja.pl", "state_key": "@pg:naszademokracja.pl", "type": "m.room.member", "unsigned": { "age": 5282076199 } }, { "content": { "membership": "leave" }, "event_id": "$150936035221742XEWrZ:matrix.org", "membership": "leave", "origin_server_ts": 1509360352156, "sender": "@debendraoli:matrix.org", "state_key": "@debendraoli:matrix.org", "type": "m.room.member", "unsigned": { "age": 1307600522, "replaces_state": "$15091116283860799vYbyi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150267068367228WcSLB:matrix.org", "membership": "leave", "origin_server_ts": 1502670683820, "sender": "@HaiKuoTianKong:matrix.org", "state_key": "@HaiKuoTianKong:matrix.org", "type": "m.room.member", "unsigned": { "age": 7997268858, "replaces_state": "$150266685430851bLvKD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GMgKdpmYbbGLDVrmkEofCUFW", "displayname": "gabrin", "membership": "join" }, "event_id": "$15086040702756873EhSKE:matrix.org", "membership": "join", "origin_server_ts": 1508604070226, "sender": "@gabrin:matrix.org", "state_key": "@gabrin:matrix.org", "type": "m.room.member", "unsigned": { "age": 2063882452 } } ] }, "timeline": { "events": [ { "content": { "body": "Hi there. I am not sure if I am right here. But there is a bad grammar mistake in the german translation on the registration page, that should be corrected. The imperative is \"Gib\" instead of \"Gebe\" where the user enters the verification code.", "msgtype": "m.text" }, "event_id": "$15104921412815039poWho:matrix.org", "origin_server_ts": 1510492141543, "sender": "@jonius:matrix.org", "type": "m.room.message", "unsigned": { "age": 175811135 } }, { "content": { "body": "Hi there", "msgtype": "m.text" }, "event_id": "$15104921872815489GdBot:matrix.org", "origin_server_ts": 1510492187605, "sender": "@jonius:matrix.org", "type": "m.room.message", "unsigned": { "age": 175765073 } }, { "content": { "body": "Why are my messages disappearing all the time?", "msgtype": "m.text" }, "event_id": "$15104922092815731Fvgah:matrix.org", "origin_server_ts": 1510492209169, "sender": "@jonius:matrix.org", "type": "m.room.message", "unsigned": { "age": 175743509 } }, { "content": { "body": "jonius: they don't on my side. you might need to reload your riot", "format": "org.matrix.custom.html", "formatted_body": "jonius: they don't on my side. you might need to reload your riot", "msgtype": "m.text" }, "event_id": "$151049225522ogIFw:matrix.ffslfl.net", "origin_server_ts": 1510492255538, "sender": "@MTRNord:matrix.ffslfl.net", "type": "m.room.message", "unsigned": { "age": 175697140 } }, { "content": { "body": "you are right", "msgtype": "m.text" }, "event_id": "$15104924152817815HPaNh:matrix.org", "origin_server_ts": 1510492415989, "sender": "@jonius:matrix.org", "type": "m.room.message", "unsigned": { "age": 175536689 } }, { "content": { "body": "now they persist", "msgtype": "m.text" }, "event_id": "$15104924232817889gGTxe:matrix.org", "origin_server_ts": 1510492423739, "sender": "@jonius:matrix.org", "type": "m.room.message", "unsigned": { "age": 175528939 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15104954672851280tMovP:matrix.org", "membership": "join", "origin_server_ts": 1510495467887, "sender": "@thocking:matrix.org", "state_key": "@thocking:matrix.org", "type": "m.room.member", "unsigned": { "age": 172484791 } }, { "content": { "avatar_url": null, "displayname": "Jim Username", "membership": "join" }, "event_id": "$151057710310879QzRJB:disroot.org", "membership": "join", "origin_server_ts": 1510577103323, "sender": "@nonprofitlicense:disroot.org", "state_key": "@nonprofitlicense:disroot.org", "type": "m.room.member", "unsigned": { "age": 90849355 } }, { "content": { "membership": "leave" }, "event_id": "$1510586925245688jViEG:matrix.org", "membership": "leave", "origin_server_ts": 1510586925761, "sender": "@speaker:matrix.org", "state_key": "@speaker:matrix.org", "type": "m.room.member", "unsigned": { "age": 81026917, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@speaker:matrix.org", "replaces_state": "$1510016559203571ITgmZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1510591729334838ybxAH:matrix.org", "membership": "leave", "origin_server_ts": 1510591729260, "sender": "@lupa18:matrix.org", "state_key": "@lupa18:matrix.org", "type": "m.room.member", "unsigned": { "age": 76223418, "prev_content": { "avatar_url": "mxc://matrix.org/oxIuZZqJjMCVeImSHzSzqRYP", "displayname": null, "membership": "join" }, "prev_sender": "@lupa18:matrix.org", "replaces_state": "$14996584722039185aIhlO:matrix.org" } } ], "limited": true, "prev_batch": "t6897-330991476_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": { "highlight_count": 0, "notification_count": 0 } }, "!XqBunHwQIXUiqCaoxq:matrix.org": { "account_data": { "events": [ { "content": { "event_id": "$15095726344eZJWP:polypeak.biz" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "user_ids": [] }, "type": "m.typing" }, { "content": { "$1444906875441211LqxSn:matrix.org": { "read": { "@erikj:jki.re": { "ts": 1444909725366 } } }, "$1444942649470349pvBIx:matrix.org": { "read": { "@Giom:matrix.org": { "ts": 1444942906609 } } }, "$1444989648570085UXoqw:matrix.org": { "read": { "@illicitonion:matrix.org": { "ts": 1444989653302 } } }, "$1444997995575678hLDwD:matrix.org": { "read": { "@ylecollen:matrix.org": { "ts": 1444998014917 } } }, "$1445086124624032xemSw:matrix.org": { "read": { "@alien:matrix.org": { "ts": 1445124334703 } } }, "$1445157925657308UGMvb:matrix.org": { "read": { "@kegan:matrix.org": { "ts": 1445176357003 } } }, "$1445235196692182lrtXq:matrix.org": { "read": { "@testme:matrix.org": { "ts": 1445235665794 } } }, "$1445240016693466mNgPt:matrix.org": { "read": { "@bobderbaumeister:matrix.org": { "ts": 1445240381874 } } }, "$1445241200693761cqnxr:matrix.org": { "read": { "@matthew:matrix.org": { "ts": 1445241676648 } } }, "$1446084711126120YesBj:matrix.org": { "read": { "@skaverat:m.skaverat.net": { "ts": 1446099191370 } } }, "$1446579494482607ucTRH:matrix.org": { "m.read": { "@pztrn:matrix.pztrn.name": { "ts": 1446584876791 } } }, "$14479272172244XERWy:matrix.org": { "m.read": { "@xenolf:matrix.org": { "ts": 1447927225575 } } }, "$144795348728592IfVlp:matrix.org": { "m.read": { "@giom:matrix.org": { "ts": 1447953513609 } } }, "$1448545776302661iNKcI:matrix.org": { "m.read": { "@CounterAttack:matrix.org": { "ts": 1448545778771 } } }, "$1448556896315088IiILG:matrix.org": { "m.read": { "@Mjark:negativecurvature.net": { "ts": 1448558614333 } } }, "$14490088890GczDu:aimmac23.com:8448": { "m.read": { "@aimmac23:matrix.org": { "ts": 1449008899640 } } }, "$1449010818791DAPVH:jki.re": { "m.read": { "@applec:matrix.org": { "ts": 1449032206506 } } }, "$1449102934400986AUmRx:matrix.org": { "m.read": { "@john.woolf:matrix.org": { "ts": 1449103119881 } } }, "$144917766810YitNO:rbs.io": { "m.read": { "@aimmac23:aimmac23.com": { "ts": 1449177863082 } } }, "$14491976871462ZykXN:home.rdash.in": { "m.read": { "@gianluca311:new.grdev.io": { "ts": 1449216479548 } } }, "$14494336175027qhEnA:whatthefuck.computer": { "m.read": { "@isthatyou:matrix.org": { "ts": 1449433625576 } } }, "$144979751837234sijGC:matrix.org": { "m.read": { "@szia:matrix.org": { "ts": 1449797601518 } } }, "$1449837401134vKgFT:hveem.no": { "m.read": { "@saltlet:matrix.org": { "ts": 1449838745974 } } }, "$1449924645162962LZgAL:matrix.org": { "m.read": { "@golan:matrix.org": { "ts": 1449924984962 } } }, "$1450434237177974PpMRN:matrix.org": { "m.read": { "@perfectlylegalonion:matrix.org": { "ts": 1450434335053 } } }, "$14504358511122ZdWaG:matrix.org": { "m.read": { "@a.stella:matrix.org": { "ts": 1450435854513 } } }, "$1450879448444664DCQup:matrix.org": { "m.read": { "@conoramurphy:matrix.org": { "ts": 1450880437499 } } }, "$1451475299494292dWWWc:matrix.org": { "m.read": { "@herah:matrix.org": { "ts": 1451478108339 } } }, "$1451559042573961DLJtA:matrix.org": { "m.read": { "@soup:matrix.org": { "ts": 1451604151817 } } }, "$1451763561722793NtpOu:matrix.org": { "m.read": { "@jakobm:matrix.orly.cf": { "ts": 1451765077077 } } }, "$145220880375MGnOh:m.skaverat.net": { "m.read": { "@sonata:matrix.sonatagreen.com": { "ts": 1452210971636 } } }, "$1452348063106647vWPbm:matrix.org": { "m.read": { "@kiwi:matrix.org": { "ts": 1452351018446 } } }, "$1452616761381660KUvxc:matrix.org": { "m.read": { "@aitam:matrix.org": { "ts": 1452616762606 } } }, "$14527762129040tqlPD:matrix.org": { "m.read": { "@joachim:matrix.org": { "ts": 1452776926941 } } }, "$14527876956406EYwdg:matrix.org": { "m.read": { "@jaen:matrix.org": { "ts": 1452789683454 } } }, "$145287023395973QXhSJ:matrix.org": { "m.read": { "@cobaltdr:matrix.org": { "ts": 1452870259916 } } }, "$1452936020165495ldnPK:matrix.org": { "m.read": { "@DeltaWhy:deltawhy.me": { "ts": 1452981900676 } } }, "$145305899151292hVurf:matrix.org": { "m.read": { "@Xena:xeserv.us": { "ts": 1453059005381 } } }, "$1453118496104248gpact:matrix.org": { "m.read": { "@WillNM:matrix.org": { "ts": 1453118498094 }, "@meir:matrix.org": { "ts": 1453127051568 } } }, "$14532179215262fdpQT:matrix.org": { "m.read": { "@krld:matrix.org": { "ts": 1453221319173 } } }, "$1453361879149531MStAa:matrix.org": { "m.read": { "@TsiyonMente:matrix.org": { "ts": 1453363068019 } } }, "$145350458429772hbQhR:matrix.org": { "m.read": { "@crosswick:matrix.org": { "ts": 1453553165015 } } }, "$1453832655129265VFKQj:matrix.org": { "m.read": { "@shohel:matrix.org": { "ts": 1453847986915 } } }, "$145391240924132qygHu:matrix.org": { "m.read": { "@Xh1pher:matrix.org": { "ts": 1453912828339 } } }, "$145397171892175rYFZm:matrix.org": { "m.read": { "@baselab:matrix.org": { "ts": 1453972196774 } } }, "$145400506820WJBWb:oob.systems": { "m.read": { "@sdfdsfds:matrix.org": { "ts": 1454006110259 } } }, "$145401243379EmYoY:oob.systems": { "m.read": { "@stalund:matrix.org": { "ts": 1454015156287 } } }, "$1454106946159cEPoR:oob.systems": { "m.read": { "@rg:matrix.org": { "ts": 1454107045463 } } }, "$145423362546538ydbjL:matrix.org": { "m.read": { "@mikehearn:matrix.org": { "ts": 1454253843659 } } }, "$14542538523362WlxBF:matrix.org": { "m.read": { "@rschulman:rbs.io": { "ts": 1454269402863 } } }, "$145435664067vQzCj:jki.re": { "m.read": { "@volongoto:matrix.org": { "ts": 1454359033247 } } }, "$14543610649339ibWVE:matrix.org": { "m.read": { "@BugRoger:matrix.org": { "ts": 1454361598183 } } }, "$145436377221mxBkJ:hveem.no": { "m.read": { "@teopeurt:matrix.org": { "ts": 1454363796371 } } }, "$145436611818930EJiJd:matrix.org": { "m.read": { "@tvon:matrix.org": { "ts": 1454369016545 } } }, "$145438639945338CEjtl:matrix.org": { "m.read": { "@da:matrix.org": { "ts": 1454391231585 } } }, "$14544136128229iJpBd:matrix.org": { "m.read": { "@joseluis:matrix.org": { "ts": 1454413849779 } } }, "$14544220491186FNfvV:matrix.org": { "m.read": { "@JPL:matrix.org": { "ts": 1454423580598 } } }, "$145443646510099ErTjo:matrix.org": { "m.read": { "@andrey.utkin:matrix.org": { "ts": 1454437791237 } } }, "$145444868132134BCWsq:matrix.org": { "m.read": { "@rrix:whatthefuck.computer": { "ts": 1454450845352 } } }, "$14545995495428taqaW:matrix.org": { "m.read": { "@arviceblot:matrix.org": { "ts": 1454599555263 } } }, "$1454671036103246JozQC:matrix.org": { "m.read": { "@cactipus:matrix.org": { "ts": 1454671051637 } } }, "$1454677655109331NoicM:matrix.org": { "m.read": { "@kimedaka:matrix.org": { "ts": 1454686953883 } } }, "$1454950058407sIDso:matrix.org": { "m.read": { "@krisa:matrix.org": { "ts": 1454950970200 } } }, "$14550181532688eQlYB:matrix.org": { "m.read": { "@kkzz123:matrix.org": { "ts": 1455018167232 } } }, "$14550182752730loYIW:matrix.org": { "m.read": { "@quite:matrix.org": { "ts": 1455019814397 } } }, "$14551907992466KEMrM:matrix.org": { "m.read": { "@K8te:matrix.org": { "ts": 1455624761301 } } }, "$14552046553pYaTi:xmine128.tk": { "m.read": { "@alexander255:xmine128.tk": { "ts": 1455204699726 } } }, "$14552089081465vBCEp:matrix.org": { "m.read": { "@george1511:matrix.org": { "ts": 1455208918184 } } }, "$14552164899254oWXhy:matrix.org": { "m.read": { "@0x004a:matrix.org": { "ts": 1455216492361 } } }, "$145533543771448mTRFt:matrix.org": { "m.read": { "@pebble:matrix.org": { "ts": 1455335443966 } } }, "$14556662304826smBHd:matrix.org": { "m.read": { "@mitch9654:matrix.org": { "ts": 1455666237614 } } }, "$14556899999217bayCB:matrix.org": { "m.read": { "@jackvt93:matrix.org": { "ts": 1455693256202 } } }, "$145572920523727aPmGq:matrix.org": { "m.read": { "@DarthShader:matrix.org": { "ts": 1455729322802 } } }, "$145574533384bSeyj:v42.dk": { "m.read": { "@killme:matrix.org": { "ts": 1455745694621 } } }, "$1455794192105CXdYK:hveem.no": { "m.read": { "@dextor:matrix.org": { "ts": 1455794223894 } } }, "$145595962039926zWdmi:matrix.org": { "m.read": { "@adufilie:matrix.org": { "ts": 1455966359897 } } }, "$14560432192FJNKH:polonkai.eu": { "m.read": { "@Gergely:matrix.org": { "ts": 1456043223565 } } }, "$145606548363991ahBWE:matrix.org": { "m.read": { "@peregrine:matrix.org": { "ts": 1456096553065 } } }, "$145617886118122gnIyg:matrix.org": { "m.read": { "@hakonb:matrix.org": { "ts": 1456178892825 } } }, "$1456731177190473cBcYi:matrix.org": { "m.read": { "@themole:matrix.org": { "ts": 1456731182229 } } }, "$1456845115264503DvJWr:matrix.org": { "m.read": { "@PurpureGecko:matrix.org": { "ts": 1456845154201 } } }, "$1456855991273881uyUVF:matrix.org": { "m.read": { "@mozboz:matrix.mozboz.com": { "ts": 1456857995218 } } }, "$1456860253277200FIUHk:matrix.org": { "m.read": { "@Uniaika:queertoo.org": { "ts": 1456860352818 } } }, "$1456870671285260emhTQ:matrix.org": { "m.read": { "@bblanco:matrix.org": { "ts": 1456870780411 } } }, "$1456978883347205UPuoV:matrix.org": { "m.read": { "@PeterGardenas:matrix.org": { "ts": 1456993523073 } } }, "$145702616310266YnFKw:matrix.org": { "m.read": { "@blackdog:matrix.org": { "ts": 1457044700797 }, "@internetjanitor:matrix.org": { "ts": 1457030206072 } } }, "$145708886541026LKvzV:matrix.org": { "m.read": { "@pawel:matrix.org": { "ts": 1457089333700 } } }, "$145713816819829pGGra:matrix.org": { "m.read": { "@orjan:matrix.org": { "ts": 1457138173942 } } }, "$145714064621052lAeVe:matrix.org": { "m.read": { "@matt:matrix.matthughes.info": { "ts": 1457165884729 } } }, "$14571817231064WxFPy:hveem.no": { "m.read": { "@maximo4k:matrix.org": { "ts": 1457188071221 } } }, "$145720086339164vBrlU:matrix.org": { "m.read": { "@cane:matrix.org": { "ts": 1457200868059 } } }, "$145730847679717iuqaP:matrix.org": { "m.read": { "@deterok:matrix.org": { "ts": 1457310250446 } } }, "$1457372342109033BirPH:matrix.org": { "m.read": { "@skaverat:matrix.org": { "ts": 1457377292295 } } }, "$1457537335194947waugi:matrix.org": { "m.read": { "@MadsRC:v42.dk": { "ts": 1457537628503 } } }, "$1457694175151KwrXv:jki.re": { "m.read": { "@wldhx:opendatascience.mtrx.space": { "ts": 1457695737007 } } }, "$145770442449645QxrOD:matrix.org": { "m.read": { "@faith:matrix.org": { "ts": 1457721563837 }, "@flootr3:matrix.org": { "ts": 1457719168525 } } }, "$145776363983872AmGBP:matrix.org": { "m.read": { "@prempal:matrix.org": { "ts": 1457770376974 } } }, "$145779772795247AmFng:matrix.org": { "m.read": { "@zed:matrix.org": { "ts": 1457803154407 } } }, "$145798215612297bvEJK:matrix.org": { "m.read": { "@tdfischer:oob.systems": { "ts": 1457982231512 } } }, "$145813529834iDsyp:jki.re": { "m.read": { "@Tor:hveem.no": { "ts": 1458135352839 } } }, "$1458136297298irHoO:souppenguin.com": { "m.read": { "@fladd:matrix.org": { "ts": 1458136457676 } } }, "$145814475821fNBzv:polonkai.eu": { "m.read": { "@kendrick:matrix.org": { "ts": 1458145641825 } } }, "$145814808861342otsNs:matrix.org": { "m.read": { "@katygreen:matrix.org": { "ts": 1458150474981 } } }, "$145829062351271TGPPW:matrix.org": { "m.read": { "@yoesak:matrix.org": { "ts": 1458294773491 } } }, "$145834571983577JjTdv:matrix.org": { "m.read": { "@illicitonion:matrix.org": { "ts": 1458346962936 } } }, "$1458461372120411BxlRm:matrix.org": { "m.read": { "@emil:matrix.org": { "ts": 1458461800173 } } }, "$1458535721148576YPOCR:matrix.org": { "m.read": { "@qwerty:matrix.org": { "ts": 1458537555690 } } }, "$145875352124rNKPJ:jki.re": { "m.read": { "@matthewtest5:matrix.org": { "ts": 1458758740948 }, "@tjardick:vanderkraan.net": { "ts": 1459405354038 } } }, "$1458947799145455DwqPG:matrix.org": { "m.read": { "@AcrylicStyle:matrix.org": { "ts": 1458983710144 } } }, "$1459005728197640hnzZK:matrix.org": { "m.read": { "@ekleog:binets.fr": { "ts": 1459013662443 } } }, "$14590136971987gURiN:binets.fr": { "m.read": { "@ilkka_leinonen:matrix.org": { "ts": 1459080492015 } } }, "$1459174729362699aaunS:matrix.org": { "m.read": { "@azhwkd:shvl.io": { "ts": 1459175026259 } } }, "$145935769826aNiof:matrix.freelock.com": { "m.read": { "@nadrieril:matrix.loboto.net": { "ts": 1459357791377 } } }, "$145937082321qbsLs:polonkai.eu": { "m.read": { "@Half-Shot:souppenguin.com": { "ts": 1459371433354 } } }, "$1459425866224738BOiYW:matrix.org": { "m.read": { "@theingi:matrix.org": { "ts": 1459427480205 } } }, "$1459682570178786XmyEt:matrix.org": { "m.read": { "@matze:zackn.de": { "ts": 1459684040060 } } }, "$1459686738181735WcarU:matrix.org": { "m.read": { "@djames:matrix.org": { "ts": 1459696998041 } } }, "$1459709936205541iEIiC:matrix.org": { "m.read": { "@mickeyk6000:matrix.org": { "ts": 1459709941655 } } }, "$1459719591224pkoxg:jki.re": { "m.read": { "@xcaliber:matrix.org": { "ts": 1459742903503 } } }, "$1459913555243423WWkkh:matrix.org": { "m.read": { "@brendan:bbqsrc.net": { "ts": 1459922917055 } } }, "$1459931451260391HfCss:matrix.org": { "m.read": { "@davidar-test:matrix.org": { "ts": 1459931617689 } } }, "$1459944534275299VwNbj:matrix.org": { "m.read": { "@fride:matrix.org": { "ts": 1459944547750 } } }, "$1460016284386195EBeln:matrix.org": { "m.read": { "@notworkingcode:matrix.org": { "ts": 1460016289143 } } }, "$1460023063392929hXzVu:matrix.org": { "m.read": { "@tipiman:matrix.org": { "ts": 1460023067174 } } }, "$1460055351447531bGOYL:matrix.org": { "m.read": { "@primus:matrix.org": { "ts": 1460055383283 } } }, "$1460063115462283gRUbL:matrix.org": { "m.read": { "@:matrix.org": { "ts": 1460063117843 } } }, "$1460066267467682dcNun:matrix.org": { "m.read": { "@Simsa:matrix.org": { "ts": 1460072634708 } } }, "$1460200854616887dxnZV:matrix.org": { "m.read": { "@crashkopf:matrix.org": { "ts": 1460220824697 } } }, "$1460289967384tGgxj:jki.re": { "m.read": { "@Ivan13:matrix.org": { "ts": 1460333674051 } } }, "$1460384518564hYiYw:jki.re": { "m.read": { "@mboo2005:matrix.org": { "ts": 1460385039675 } } }, "$1460400006822327vTvGj:matrix.org": { "m.read": { "@lucid00:matrix.org": { "ts": 1460414779104 } } }, "$14604841161468RtEzO:half-shot.uk": { "m.read": { "@venttiarmas:matrix.org": { "ts": 1460484331119 } } }, "$14605710753GrwFt:matrix.org": { "m.read": { "@cyan:matrix.org": { "ts": 1460605155695 } } }, "$146074180420134kxsgc:matrix.org": { "m.read": { "@po:matrix.org": { "ts": 1460743079593 } } }, "$14611663338409kiTme:matrix.org": { "m.read": { "@GoogilyBoogily:matrix.org": { "ts": 1461168792379 } } }, "$146134942046760wYGqy:matrix.org": { "m.read": { "@klcvhnsz:matrix.org": { "ts": 1461352894861 } } }, "$1461471579182916ZYiDD:matrix.org": { "m.read": { "@gerc:matrix.org": { "ts": 1461475019859 } } }, "$14615189401570GWCrs:half-shot.uk": { "m.read": { "@jheenan:matrix.org": { "ts": 1461527317743 } } }, "$1461790750658FknbH:half-shot.uk": { "m.read": { "@sxu:matrix.org": { "ts": 1461813963772 } } }, "$1462073952268952Jxiwq:matrix.org": { "m.read": { "@rbsns:matrix.org": { "ts": 1462073962350 } } }, "$1462296811549376bHvkv:matrix.org": { "m.read": { "@vitalyster:matrix.org": { "ts": 1462309748150 } } }, "$146243993073448TlfXc:matrix.org": { "m.read": { "@pox1:matrix.org": { "ts": 1462439936310 } } }, "$146295655791909LyKkx:matrix.org": { "m.read": { "@Uniaika:matrix.queertoo.org": { "ts": 1462958504323 } } }, "$146348854311675RKURu:matrix.org": { "m.read": { "@Ahsan1234:matrix.org": { "ts": 1463490284226 } } }, "$146350796927LMSIj:goryachev.org": { "m.read": { "@delitrem:matrix.org": { "ts": 1463507978776 } } }, "$1463770152275877wfsrf:matrix.org": { "m.read": { "@josh:terracrypt.net": { "ts": 1463770158023 } } }, "$1464018243537139XWKln:matrix.org": { "m.read": { "@jfred:matrix.org": { "ts": 1464018256166 } } }, "$1464037771574815HbkDp:matrix.org": { "m.read": { "@foofighter:matrix.org": { "ts": 1464037776204 } } }, "$1464090518633675RTmuq:matrix.org": { "m.read": { "@user_test:matrix.org": { "ts": 1464090542063 } } }, "$14641010305276ekfuq:matrix.org": { "m.read": { "@descartin:matrix.org": { "ts": 1464101047140 } } }, "$1464513074268307dYLig:matrix.org": { "m.read": { "@Esteth:matrix.org": { "ts": 1464524728891 } } }, "$1464525557277283pegJx:matrix.org": { "m.read": { "@cyzoonic:matrix.org": { "ts": 1464533022147 } } }, "$1464617726373773izvUo:matrix.org": { "m.read": { "@-Gui-:matrix.org": { "ts": 1464633080031 } } }, "$1464683366446810ojNlB:matrix.org": { "m.read": { "@12611:matrix.org": { "ts": 1464683396958 } } }, "$146468610935tbuiq:matrix.lopezjuan.com": { "m.read": { "@ralesk:matrix.org": { "ts": 1464689015532 } } }, "$146471826417hpfrm:half-shot.uk": { "m.read": { "@bitman:matrix.org": { "ts": 1464718639369 } } }, "$146474281955192JHAOn:matrix.org": { "m.read": { "@themk:matrix.org": { "ts": 1464744461062 } } }, "$14647904735929mEzEl:matrix.org": { "m.read": { "@vyacheslav:matrix.org": { "ts": 1464801356697 } } }, "$146481066620078cjcGx:matrix.org": { "m.read": { "@kyugo:matrix.org": { "ts": 1464813531428 } } }, "$146494384472201lSyEA:matrix.org": { "m.read": { "@NeatBasis:matrix.org": { "ts": 1464954603646 } } }, "$14649627626373vJnDT:matrix.org": { "m.read": { "@:jki.re": { "ts": 1464963366110 } } }, "$146508537116lErWh:darmstadt.ccc.de": { "m.read": { "@minjh:matrix.org": { "ts": 1465105179727 } } }, "$1465105231155327sVtQy:matrix.org": { "m.read": { "@bobbytables:matrix.org": { "ts": 1465109869650 } } }, "$1465121094166544OIyYH:matrix.org": { "m.read": { "@albertgasset:matrix.org": { "ts": 1465141685858 }, "@georgyo:matrix.org": { "ts": 1465144211638 } } }, "$1465144217187785UQZgg:matrix.org": { "m.read": { "@matkam:matrix.org": { "ts": 1465145538980 } } }, "$1465178378232427PLOof:matrix.org": { "m.read": { "@firecat53:matrix.org": { "ts": 1465180780297 } } }, "$146521721016413KZpRV:matrix.org": { "m.read": { "@prosodyContexte:matrix.org": { "ts": 1465221445137 } } }, "$146525563672veTVi:darmstadt.ccc.de": { "m.read": { "@georgyo:nycresistor.com": { "ts": 1465268968438 } } }, "$146527853082271LFLyf:matrix.org": { "m.read": { "@fil:matrix.org": { "ts": 1465292011164 } } }, "$1465317605277tOhaw:cloudfleet.io": { "m.read": { "@ywwg:matrix.org": { "ts": 1465321092373 } } }, "$1465393512847zsXif:matrix.org": { "m.read": { "@eriol:matrix.org": { "ts": 1465396303710 } } }, "$146550049756167mcDgj:matrix.org": { "m.read": { "@tcarrio:matrix.org": { "ts": 1465503427644 } } }, "$1465513956393Pgmwj:cloudfleet.io": { "m.read": { "@CoolSpot:matrix.org": { "ts": 1465514417497 }, "@jonah:matrix.org": { "ts": 1465515082929 }, "@magnap:magnap.cu.cc": { "ts": 1465514030016 } } }, "$1465537406112618hmKVE:matrix.org": { "m.read": { "@Riku:matrix.org": { "ts": 1465537463007 } } }, "$1465553841134983EluEf:matrix.org": { "m.read": { "@bph:matrix.org": { "ts": 1465555144222 } } }, "$1465580863189312uBnjP:matrix.org": { "m.read": { "@rryan:matrix.org": { "ts": 1465580906279 } } }, "$1465581502190838BLcYn:matrix.org": { "m.read": { "@Magnap:matrix.org": { "ts": 1465583727251 } } }, "$146559028721mmdTV:im.nostrodomo.tk": { "m.read": { "@andmalc:matrix.org": { "ts": 1465591053675 } } }, "$1465593598105yckuY:matrix.magnap.dk": { "m.read": { "@dakrone:matrix.org": { "ts": 1465608629216 } } }, "$1465757654399036rKzgJ:matrix.org": { "m.read": { "@jle:matrix.org": { "ts": 1465764065357 } } }, "$14658310301486Ffoov:sw1v.org": { "m.read": { "@17728:matrix.org": { "ts": 1465831594235 } } }, "$146584399331iyRkf:darmstadt.ccc.de": { "m.read": { "@Dan:matrix.org": { "ts": 1465844219319 } } }, "$1465854759556318bvIfl:matrix.org": { "m.read": { "@ccheckk:matrix.org": { "ts": 1465857280567 } } }, "$14659225831157rYapt:matrix.magnap.dk": { "m.read": { "@alefteris:matrix.org": { "ts": 1465922684768 } } }, "$1465976552752030Uayox:matrix.org": { "m.read": { "@moredhel:matrix.aoeu.me": { "ts": 1465980146107 } } }, "$1465986668765829xpKCr:matrix.org": { "m.read": { "@muhriddin:matrix.org": { "ts": 1465986674594 } } }, "$14659967812877sULgd:half-shot.uk": { "m.read": { "@jh:matrix.org": { "ts": 1466009462773 } } }, "$146609633959qOajk:im.nostrodomo.tk": { "m.read": { "@Dusk:dusky.horse": { "ts": 1466096951140 }, "@blide:matrix.org": { "ts": 1466096360233 } } }, "$14661047393WwSXf:ralith.com": { "m.read": { "@zuper:matrix.org": { "ts": 1466111717425 } } }, "$146612069656zJyjr:darmstadt.ccc.de": { "m.read": { "@JesseW:matrix.org": { "ts": 1466123572186 } } }, "$1466176188788gqrmw:half-shot.uk": { "m.read": { "@hexis:matrix.org": { "ts": 1466196564463 } } }, "$1466237990400179FjWse:matrix.org": { "m.read": { "@JudenMagie3:matrix.org": { "ts": 1466276520538 }, "@mcastro:matrix.org": { "ts": 1466251549103 } } }, "$1466276522453180TOJrK:matrix.org": { "m.read": { "@JudenMagie4:matrix.org": { "ts": 1466276612602 } } }, "$1466416125619823KeqMz:matrix.org": { "m.read": { "@spykeburn:matrix.org": { "ts": 1466418501323 } } }, "$1466512114805571jkywZ:matrix.org": { "m.read": { "@Binan:matrix.org": { "ts": 1466513533498 } } }, "$1466513533809191qOiKM:matrix.org": { "m.read": { "@Siilwyn:matrix.org": { "ts": 1466523487316 } } }, "$14667487341291714kdkVc:matrix.org": { "m.read": { "@wissemKa:matrix.org": { "ts": 1466764243694 } } }, "$14667995241396318ZoSnt:matrix.org": { "m.read": { "@FreestyleCrafter:matrix.org": { "ts": 1466851953752 }, "@unlost:matrix.org": { "ts": 1466799549756 } } }, "$14669387371563011GMweo:matrix.org": { "m.read": { "@jf:matrix.org": { "ts": 1466939110916 } } }, "$14670378631689920ynrsP:matrix.org": { "m.read": { "@Mo:matrix.org": { "ts": 1467038863498 } } }, "$14670491901955YhOuL:safaradeg.net": { "m.read": { "@flocomkoko:matrix.org": { "ts": 1467062524518 } } }, "$14671062051820547cctas:matrix.org": { "m.read": { "@prakash:matrix.org": { "ts": 1467106284734 } } }, "$14671074277iXRYt:kentshikama.com": { "m.read": { "@theworldbright:matrix.org": { "ts": 1467107455220 } } }, "$14672036342005806gkRGi:matrix.org": { "m.read": { "@robin:matrix.org": { "ts": 1467203635547 } } }, "$14672287412065048RaVKI:matrix.org": { "m.read": { "@DavidBoeie:matrix.org": { "ts": 1467229780524 } } }, "$14673045992210638IWOPQ:matrix.org": { "m.read": { "@igor:goryachev.org": { "ts": 1467304625360 } } }, "$14673454422297705byTnQ:matrix.org": { "m.read": { "@UraniumFighters1:matrix.org": { "ts": 1467346036295 } } }, "$146749743535YeqAB:sw1v.org": { "m.read": { "@breakpointer:matrix.org": { "ts": 1467505301417 } } }, "$14676595615281NqBdo:ralith.com": { "m.read": { "@pbaur:matrix.org": { "ts": 1467659614080 } } }, "$14676639842795060OdDGV:matrix.org": { "m.read": { "@knip:matrix.org": { "ts": 1467667057765 } } }, "$14677198042875130KkqnW:matrix.org": { "m.read": { "@newuser:matrix.org": { "ts": 1467723121477 } } }, "$14677404812934869TMPdJ:matrix.org": { "m.read": { "@judge_dredd:matrix.org": { "ts": 1467749033596 } } }, "$146791333421340hBQzu:matrix.org": { "m.read": { "@qwertyuioppo:matrix.org": { "ts": 1467923540899 } } }, "$1468082928331088BcayX:matrix.org": { "m.read": { "@voldemort:matrix.org": { "ts": 1468082955397 } } }, "$1468139177409616DeAiO:matrix.org": { "m.read": { "@fuloating:matrix.org": { "ts": 1468146762804 } } }, "$14681761862XwJDN:kickass.systems": { "m.read": { "@noctilon:matrix.org": { "ts": 1468184344555 }, "@q:matrix.org": { "ts": 1468184233837 } } }, "$1468340967184037AGkKp:matrix.org": { "m.read": { "@PurpleGecko:matrix.org": { "ts": 1468341025916 } } }, "$1468345602198509JBdBs:matrix.org": { "m.read": { "@wolf544:matrix.org": { "ts": 1468347234631 } } }, "$14684795158934CdUIZ:ralith.com": { "m.read": { "@knownbuckethead:matrix.org": { "ts": 1468483140173 } } }, "$1468509231466NyrSa:sw1v.org": { "m.read": { "@naggie:matrix.org": { "ts": 1468512191044 } } }, "$1468690041211bYQfB:jki.re": { "m.read": { "@popey:matrix.org": { "ts": 1468767444349 } } }, "$14689040561240900QsqWZ:matrix.org": { "m.read": { "@nizam:matrix.org": { "ts": 1468904057911 } } }, "$1468921107145EZBsk:onedefence.com": { "m.read": { "@roger:matrix.heldscal.la": { "ts": 1468921114579 } } }, "$146911087825EeyRf:kentshikama.com": { "m.read": { "@oddvar2:matrix.org": { "ts": 1469110949035 } } }, "$1469117678188963QeTLX:matrix.org": { "m.read": { "@huf:matrix.org": { "ts": 1469180571765 } } }, "$1469189415776gZPYY:kolm.io": { "m.read": { "@arthurp:matrix.org": { "ts": 1469190862244 } } }, "$1469206642363070vSUQe:matrix.org": { "m.read": { "@j:matrix.org": { "ts": 1469218030618 }, "@wwwi7891:matrix.org": { "ts": 1469206666235 } } }, "$1469228301410316DYbbR:matrix.org": { "m.read": { "@commendatore:matrix.org": { "ts": 1469228522669 } } }, "$146939852239345WuAGi:matrix.org": { "m.read": { "@arcadio:matrix.org": { "ts": 1469398928513 } } }, "$146944254334XtpWd:half-shot.uk": { "m.read": { "@27017:matrix.org": { "ts": 1469442917494 } } }, "$14694461816iafFR:onedefence.com": { "m.read": { "@hemantdangi11:matrix.org": { "ts": 1469446257095 } } }, "$1469455449128884RhpfX:matrix.org": { "m.read": { "@roblabla:cmc.im": { "ts": 1469455724959 } } }, "$1469521611368ChSDi:sw1v.org": { "m.read": { "@silvia_schia:matrix.org": { "ts": 1469521937073 } } }, "$146968027217594bGYIK:ralith.com": { "m.read": { "@waqee:matrix.org": { "ts": 1469685115079 } } }, "$1469726508414567cDNfj:matrix.org": { "m.read": { "@sterling_archer:matrix.org": { "ts": 1469727271042 } } }, "$1469784543529451nRIrF:matrix.org": { "m.read": { "@tbn:matrix.org": { "ts": 1483533806571 } } }, "$1469838147651035OtKSm:matrix.org": { "m.read": { "@sallp:matrix.org": { "ts": 1469840533873 } } }, "$146990347090JIEzA:jki.re": { "m.read": { "@Ludovic:matrix.org": { "ts": 1469903629849 } } }, "$1469927150768727vKSaQ:matrix.org": { "m.read": { "@gootigoot:matrix.org": { "ts": 1469984845658 } } }, "$1470092816589CScTX:half-shot.uk": { "m.read": { "@gamingwithaxay:matrix.org": { "ts": 1470142952041 } } }, "$147015520131217kLfKM:matrix.org": { "m.read": { "@boli:darkboli.net": { "ts": 1470155281124 }, "@comet:matrix.org": { "ts": 1470163312322 } } }, "$1470180481103873CaKLV:matrix.org": { "m.read": { "@ckocagil:matrix.org": { "ts": 1470181214655 } } }, "$147018367016sksth:arasphere.net": { "m.read": { "@mistake:matrix.org": { "ts": 1470197425276 } } }, "$1470349550317232pHzJe:matrix.org": { "m.read": { "@hierophantos:matrix.org": { "ts": 1470349554648 } } }, "$147040971928131dAkVK:matrix.org": { "m.read": { "@Ralith:matrix.org": { "ts": 1470429547050 } } }, "$1470479983211JQuAk:half-shot.uk": { "m.read": { "@heggman:matrix.org": { "ts": 1470480257801 }, "@jzhu98:matrix.org": { "ts": 1470480213208 } } }, "$14706269447341yhWXU:ralith.com": { "m.read": { "@rayth:matrix.org": { "ts": 1470626988712 } } }, "$14706629084841Zffmp:kolm.io": { "m.read": { "@daniel.centore:matrix.org": { "ts": 1470665825622 } } }, "$1470903519168SGkjU:sw1v.org": { "m.read": { "@stefanpearson:matrix.org": { "ts": 1470908906920 } } }, "$147092612749698oXwok:matrix.org": { "m.read": { "@Bugworm:matrix.org": { "ts": 1470933415271 } } }, "$1470944074138myeNQ:matrix.freelock.com": { "m.read": { "@nocylah:waffle.tech": { "ts": 1470949551471 } } }, "$147101059531UuulK:sphericalelephant.com": { "m.read": { "@f.shahbazi:sphericalelephant.com": { "ts": 1471510198366 } } }, "$1471230897647090GcaTk:matrix.org": { "m.read": { "@tkoizumi:matrix.org": { "ts": 1471244705111 } } }, "$14714487666963HxyRP:matrix.org": { "m.read": { "@Hawkheart:hawkheart.xyz": { "ts": 1471463641732 } } }, "$147153044247442gNNzR:matrix.org": { "m.read": { "@sebastien.haberer:matrix.org": { "ts": 1471530445806 } } }, "$14716307515603VTNBj:matrix.org": { "m.read": { "@bobqwerty:matrix.org": { "ts": 1471632554573 } } }, "$1471714937158495DsCHi:matrix.org": { "m.read": { "@deadrat:matrix.org": { "ts": 1471757097225 } } }, "$1471813797342756UCpmL:matrix.org": { "m.read": { "@darknumbers:matrix.org": { "ts": 1471825377762 } } }, "$147189764392225GQWTl:matrix.org": { "m.read": { "@gio:matrix.org": { "ts": 1473150693571 } } }, "$14719432104108LCuqr:kolm.io": { "m.read": { "@blropb:matrix.org": { "ts": 1471962210619 } } }, "$1471967497247962SnZIH:matrix.org": { "m.read": { "@IgorFuzdapp:matrix.org": { "ts": 1471967508702 } } }, "$147204678724gJndi:jki.re": { "m.read": { "@rubo78:matrix.org": { "ts": 1472047676165 } } }, "$147205507434602WSdFj:matrix.org": { "m.read": { "@pafnat:matrix.org": { "ts": 1472055081116 } } }, "$1472157920289799viKaJ:matrix.org": { "m.read": { "@grobie:matrix.org": { "ts": 1472158387903 } } }, "$14721700859467isgep:ralith.com": { "m.read": { "@hluanvu:matrix.org": { "ts": 1472186973627 } } }, "$147220621116kkMps:oddvar.org": { "m.read": { "@bara:zebar.de": { "ts": 1472208537676 } } }, "$14722169865626suCIn:matrix.org": { "m.read": { "@testtest:matrix.org": { "ts": 1472217114850 } } }, "$147222215310919PENZd:matrix.org": { "m.read": { "@atig:matrix.org": { "ts": 1472228388931 }, "@bastinik:matrix.org": { "ts": 1472225853275 } } }, "$1472434134399543YAWjF:matrix.org": { "m.read": { "@Stripe:matrix.org": { "ts": 1472455173103 } } }, "$14724857800tqSwS:m.skaverat.net": { "m.read": { "@rade:matrix.org": { "ts": 1472497745837 } } }, "$1472506449561171gKODQ:matrix.org": { "m.read": { "@testsk:matrix.org": { "ts": 1472506452379 } } }, "$14725124843HZmzS:m.skaverat.net": { "m.read": { "@mitchhentges:matrix.org": { "ts": 1472519734201 }, "@sn1ckels:matrix.org": { "ts": 1472517287893 } } }, "$1472558522653009mcVHK:matrix.org": { "m.read": { "@audiotest:matrix.org": { "ts": 1472561000206 } } }, "$147258480623BbtIu:takios.de": { "m.read": { "@Takios:matrix.org": { "ts": 1472584810997 } } }, "$1472634289144933hKpAO:matrix.org": { "m.read": { "@user142:matrix.org": { "ts": 1472634304081 } } }, "$1472780078124883Cciel:matrix.org": { "m.read": { "@Skyrixy:matrix.org": { "ts": 1472783629546 } } }, "$14728799081YOpfV:onedefence.com": { "m.read": { "@hooram:matrix.org": { "ts": 1472883386563 } } }, "$147307272019344JpdHL:matrix.org": { "m.read": { "@terence977:matrix.org": { "ts": 1473074827693 } } }, "$1473237650199809YibAb:matrix.org": { "m.read": { "@dollarone:matrix.org": { "ts": 1473240027003 } } }, "$14733292985782oraDH:matrix.org": { "m.read": { "@bradlegge:matrix.org": { "ts": 1473329900625 } } }, "$147334373321573bvJhU:matrix.org": { "m.read": { "@bzzrd:matrix.org": { "ts": 1473343744378 } } }, "$14734207855257AGnKO:matrix.org": { "m.read": { "@mikel2:matrix.org": { "ts": 1473434750237 } } }, "$1473470749124655EuCov:matrix.org": { "m.read": { "@sabolduc:matrix.org": { "ts": 1473470758183 } } }, "$1473499083124LBaxL:timepath.xyz": { "m.read": { "@TimePath:timepath.ddns.info": { "ts": 1473500145094 } } }, "$1473530097218908VHCOg:matrix.org": { "m.read": { "@luke:ldbco.de": { "ts": 1473530123578 } } }, "$14735651891978yvcHM:berigora.net": { "m.read": { "@Trustable:matrix.org": { "ts": 1473575872819 } } }, "$147376912321510Vpeln:matrix.org": { "m.read": { "@smacbrillacciao:matrix.org": { "ts": 1473778047608 }, "@sobek:safaradeg.net": { "ts": 1473771593175 } } }, "$1473826992165878qfwZp:matrix.org": { "m.read": { "@pirboazo:matrix.org": { "ts": 1473827420387 } } }, "$1473879869101529MXYmL:kickass.systems": { "m.read": { "@Anatoly:matrix.org": { "ts": 1473888838028 } } }, "$1473897773355375ySAdb:matrix.org": { "m.read": { "@mightyhood:matrix.org": { "ts": 1473947164842 } } }, "$147397186857605CdkKK:matrix.org": { "m.read": { "@h226077:matrix.org": { "ts": 1473976592804 } } }, "$1474044532405kTrGR:57north.org.uk": { "m.read": { "@mathias:chat.mathiasp.me": { "ts": 1474045239666 } } }, "$1474316434684938hzwZA:matrix.org": { "m.read": { "@modig:matrix.org": { "ts": 1474318535189 } } }, "$1474359411794326XDngi:matrix.org": { "m.read": { "@Purple:matrix.org": { "ts": 1474364511690 } } }, "$147436870016qSaLh:torlan.ru": { "m.read": { "@testme:matrix.org": { "ts": 1474368810855 } } }, "$1474430953183156ujjwq:matrix.org": { "m.read": { "@noahskocilich:matrix.org": { "ts": 1474444395410 } } }, "$1474451208860TtwbP:sw1v.org": { "m.read": { "@xt:matrix.org": { "ts": 1474452723909 } } }, "$1474453104218584iplXu:matrix.org": { "m.read": { "@TestSBG:matrix.org": { "ts": 1474453230947 } } }, "$1474461530293QAVIV:darmstadt.ccc.de": { "m.read": { "@LinLinLin:matrix.org": { "ts": 1474463717657 } } }, "$1474469509265811EPfFL:matrix.org": { "m.read": { "@wrl:matrix.org": { "ts": 1474472710206 } } }, "$1474474039283218hvMNK:matrix.org": { "m.read": { "@irx:0pt.pw": { "ts": 1474474470008 } } }, "$1474487328563rPvJr:57north.org.uk": { "m.read": { "@bdib:matrix.org": { "ts": 1474494991493 } } }, "$14745587289zzesm:jki.re": { "m.read": { "@hankybanky:matrix.org": { "ts": 1474558762624 } } }, "$14745767271373IrFNg:sw1v.org": { "m.read": { "@JigmeDatse:dmp-develop.com": { "ts": 1474583969753 } } }, "$1474626229234111FOGRV:matrix.org": { "m.read": { "@kykc:matrix.org": { "ts": 1474627391560 }, "@lamawithonel:matrix.org": { "ts": 1474646055251 } } }, "$14748500541130856ETzvI:matrix.org": { "m.read": { "@xdxdxd:matrix.org": { "ts": 1474865363789 } } }, "$14748798421189377PBOqV:matrix.org": { "m.read": { "@jkozak:matrix.org": { "ts": 1474879928637 } } }, "$1474937398519blIQj:onedefence.com": { "m.read": { "@d_abelski:matrix.org": { "ts": 1474943837468 } } }, "$147498870484734STZbw:matrix.org": { "m.read": { "@jonixas:matrix.org": { "ts": 1474990099333 } } }, "$1475105465667328WlTKe:matrix.org": { "m.read": { "@circlepower:matrix.org": { "ts": 1475109996805 } } }, "$1475110994578VcAuw:terracrypt.net": { "m.read": { "@AndrewGaspar:matrix.org": { "ts": 1475129373745 } } }, "$14752475981216435HcRyR:matrix.org": { "m.read": { "@shadowkyogre:matrix.org": { "ts": 1475266151363 } } }, "$14752815741335876pyvTW:matrix.org": { "m.read": { "@mbtamuli:matrix.org": { "ts": 1475310307614 } } }, "$147537790224oOTvV:raim.ist": { "m.read": { "@test:im.nostrodomo.tk": { "ts": 1475428120092 } } }, "$14754502511732973hiHcf:matrix.org": { "m.read": { "@mlt:matrix.org": { "ts": 1475450359586 } } }, "$14756001792178335tXWIr:matrix.org": { "m.read": { "@gitterbot:matrix.org": { "ts": 1475600190087 } } }, "$14756097212219830STwPZ:matrix.org": { "m.read": { "@steven:openmarket.com": { "ts": 1475613028077 } } }, "$1475715716112UGaiA:darmstadt.ccc.de": { "m.read": { "@fmw:matrix.org": { "ts": 1475724768951 } } }, "$14757403772630016coVkG:matrix.org": { "m.read": { "@sudk1896:matrix.org": { "ts": 1475741099566 } } }, "$14757786223036490ZIgTA:matrix.org": { "m.read": { "@Jsilence:matrix.org": { "ts": 1475817982412 } } }, "$14758263341642ihqmi:sw1v.org": { "m.read": { "@nelius:von-und-zu-weiss.de": { "ts": 1475826406214 } } }, "$1475851428108QnpOB:matrix.org": { "m.read": { "@Sasy:matrix.org": { "ts": 1475851661308 } } }, "$147589024418720GRLub:ralith.com": { "m.read": { "@roder:matrix.org": { "ts": 1475901271128 } } }, "$1475934975701701LtZFY:matrix.org": { "m.read": { "@eswinson:matrix.org": { "ts": 1475935002292 } } }, "$14759965361090WfMHu:kentshikama.com": { "m.read": { "@57557:matrix.org": { "ts": 1476006940863 } } }, "$1476049367836LeDaW:half-shot.uk": { "m.read": { "@mkmgcom:matrix.org": { "ts": 1476058058918 } } }, "$1476117186605AWerz:exul.org": { "m.read": { "@phbucher:matrix.org": { "ts": 1476117233782 } } }, "$1476209485190754rrKCQ:matrix.org": { "m.read": { "@vinjdw:matrix.org": { "ts": 1476210231827 } } }, "$147626600914311kaeGU:matrix.org": { "m.read": { "@p-a:matrix.org": { "ts": 1476271102593 } } }, "$147632596312458zrPxR:57north.org.uk": { "m.read": { "@gwillen:matrix.org": { "ts": 1476326003859 } } }, "$1476333463540069VlwnZ:matrix.org": { "m.read": { "@gst:matrix.org": { "ts": 1476333467844 } } }, "$14763935671562WjLtQ:darmstadt.ccc.de": { "m.read": { "@Dandy:matrix.org": { "ts": 1476398760092 } } }, "$1476403952789499NyqXm:matrix.org": { "m.read": { "@blakewoodink:matrix.org": { "ts": 1476419880263 } } }, "$1476459939946614EYeSO:matrix.org": { "m.read": { "@jerry:matrix.org": { "ts": 1476459986105 } } }, "$14767960805989fVAET:kolm.io": { "m.read": { "@carlsalyer:matrix.org": { "ts": 1476800102087 } } }, "$1476918652145234FEpTY:matrix.org": { "m.read": { "@makemagic:matrix.org": { "ts": 1476918680060 } } }, "$1476969771539krNde:berigora.net": { "m.read": { "@test123:159.100.250.180": { "ts": 1476974392306 } } }, "$1476990730995RMSBd:darmstadt.ccc.de": { "m.read": { "@igor:medinasod.zapto.org": { "ts": 1476999734536 } } }, "$1476999793120AnJsA:medinasod.zapto.org": { "m.read": { "@sven.kiessig:consaltum.de": { "ts": 1477000258139 } } }, "$1477066641620789QwRPi:matrix.org": { "m.read": { "@AlexSchock:matrix.org": { "ts": 1477070726755 } } }, "$14773008411305XTsjL:sw1v.org": { "m.read": { "@erikj:matrix.org": { "ts": 1477302843440 } } }, "$147741261455dWaAS:torlan.ru": { "m.read": { "@JigmeDatseHS:matrix.dmp-develop.com": { "ts": 1477412633826 } } }, "$1477440653731muXbl:onedefence.com": { "m.read": { "@massdonati:matrix.org": { "ts": 1477443939481 } } }, "$1477515791430008FDrIu:matrix.org": { "m.read": { "@cainerland:matrix.org": { "ts": 1477562161606 }, "@oddvar:oddvar.org": { "ts": 1478269469992 } } }, "$147757215085949Wpces:matrix.org": { "m.read": { "@lime:57north.org.uk": { "ts": 1477580080225 } } }, "$1477613562250DJtvi:berigora.net": { "m.read": { "@fd0422b08:matrix.org": { "ts": 1477623305771 } } }, "$14776636811647NEXFi:half-shot.uk": { "m.read": { "@nomadicoder:matrix.org": { "ts": 1477665258449 } } }, "$1477678760118372oPRYN:matrix.org": { "m.read": { "@aki003:matrix.org": { "ts": 1477686901347 } } }, "$1477771918442VpsuS:darmstadt.ccc.de": { "m.read": { "@PerBoussard:matrix.org": { "ts": 1477800211162 } } }, "$147787604413FwZar:h3ndr1k.de": { "m.read": { "@hotgiraffe:matrix.org": { "ts": 1477925422928 } } }, "$14780750142LCzCe:h3ndr1k.de": { "m.read": { "@souvikbhattacharyas:matrix.org": { "ts": 1478076588332 } } }, "$14781164031432809fHVKY:matrix.org": { "m.read": { "@cwd:matrix.org": { "ts": 1478122021070 } } }, "$14782611081921763MFOaU:matrix.org": { "m.read": { "@ikuradon:gsn.im": { "ts": 1478261913050 } } }, "$14784123912391979DPDmW:matrix.org": { "m.read": { "@Marzanna:matrix.org": { "ts": 1478430902864 } } }, "$14784309262424345qmTMN:matrix.org": { "m.read": { "@adde9708:matrix.org": { "ts": 1478432564909 } } }, "$147846783811HSguV:zackn.de": { "m.read": { "@wakest:matrix.org": { "ts": 1478490827016 } } }, "$1478553825150658jJLtX:matrix.org": { "m.read": { "@69585:matrix.org": { "ts": 1478553841534 } } }, "$1478644953100gzvoG:sw1v.org": { "m.read": { "@shakib:matrix.org": { "ts": 1478654215418 } } }, "$1478771407959031XGABM:matrix.org": { "m.read": { "@BennyHill:matrix.org": { "ts": 1478784820470 } } }, "$1478815052147038qfZEr:matrix.org": { "m.read": { "@MaxwellK:matrix.org": { "ts": 1478817705941 } } }, "$1478913411211BSpPI:57north.org.uk": { "m.read": { "@pseudonnym:matrix.org": { "ts": 1478914436475 } } }, "$1478986146693013VBzGS:matrix.org": { "m.read": { "@ibpx:matrix.org": { "ts": 1479012662793 } } }, "$1479063851909380zNGMQ:matrix.org": { "m.read": { "@bastoon:matrix.org": { "ts": 1479063866459 } } }, "$14791038571036517QPAEp:matrix.org": { "m.read": { "@bot:matrix.org": { "ts": 1479114500486 } } }, "$147914141223638gBekh:matrix.org": { "m.read": { "@georgemcjr:matrix.org": { "ts": 1479142343266 } } }, "$147914546643573AzxLG:matrix.org": { "m.read": { "@StuPidasso:matrix.org": { "ts": 1479145698901 } } }, "$1479213711289757RxiGc:matrix.org": { "m.read": { "@jippa:matrix.org": { "ts": 1479221679953 } } }, "$1479323187117lGaTb:sw1v.org": { "m.read": { "@eberle:matrix.org": { "ts": 1479328205565 } } }, "$1479338551159IfHIO:tapenet.org": { "m.read": { "@Ineentho:matrix.org": { "ts": 1479338714489 } } }, "$1479500560710pwOQm:exul.org": { "m.read": { "@zach:ghostcorp.net": { "ts": 1479502357327 } } }, "$14795991701229lshxJ:kentshikama.com": { "m.read": { "@nothisrat:matrix.org": { "ts": 1479608538551 } } }, "$1479662922402444oJEKc:matrix.org": { "m.read": { "@Tifinchi:matrix.org": { "ts": 1479664598677 } } }, "$1479754839639142rxHIQ:matrix.org": { "m.read": { "@daniele:matrix.org": { "ts": 1479757781165 } } }, "$1479919724589MreIi:ardaxi.com": { "m.read": { "@Mex:matrix.org": { "ts": 1479920735582 } } }, "$1479977163633GSMiU:matrix.slimroms.org": { "m.read": { "@cybo:matrix.slimroms.org": { "ts": 1479977165718 } } }, "$148000905686885pXMlD:matrix.org": { "m.read": { "@Matthias:zackn.de": { "ts": 1480009080090 } } }, "$1480033291189921KrYpM:matrix.org": { "m.read": { "@martydelaney3:matrix.org": { "ts": 1480040779267 } } }, "$1480092274381341FEQYG:matrix.org": { "m.read": { "@maxlinux2000:matrix.org": { "ts": 1480092384102 } } }, "$1480117581488030qUFTr:matrix.org": { "m.read": { "@87161:matrix.org": { "ts": 1480119557200 } } }, "$14803256871158965LPjuj:matrix.org": { "m.read": { "@Shaka:matrix.org": { "ts": 1480327545390 } } }, "$14803672631364565dIcSp:matrix.org": { "m.read": { "@Cobra36093:matrix.org": { "ts": 1480367313750 } } }, "$1480416543272iNBCu:kyriasis.com": { "m.read": { "@pedroc:matrix.org": { "ts": 1480417020180 } } }, "$14804390822198GjCSo:home.rdash.in": { "m.read": { "@wm.wragg:matrix.org": { "ts": 1480439260398 } } }, "$14804396781778dvndl:57north.org.uk": { "m.read": { "@saintaquinas:matrix.org": { "ts": 1480439922814 } } }, "$148052271015105UpRvW:half-shot.uk": { "m.read": { "@agent:matrix.org": { "ts": 1480523945016 } } }, "$14805402861fTuFu:wagwar.com": { "m.read": { "@tsmooth:matrix.org": { "ts": 1480540649184 } } }, "$14805665092055RkNih:matrix.freelock.com": { "m.read": { "@nwf:matrix.org": { "ts": 1480572976133 } } }, "$14806009242354169WtDju:matrix.org": { "m.read": { "@AlexPops:matrix.org": { "ts": 1480601744397 } } }, "$14806026462363655mxwtA:matrix.org": { "m.read": { "@juju:matrix.org": { "ts": 1480602648619 } } }, "$14806156092436796eRnJQ:matrix.org": { "m.read": { "@test7457:matrix.org": { "ts": 1480615645129 } } }, "$148072092728gYMst:torlan.ru": { "m.read": { "@akr:matrix.org": { "ts": 1480723458921 } } }, "$148088556519702yuWEg:ralith.com": { "m.read": { "@douglas-lee:matrix.molinkx.com": { "ts": 1480885568622 } } }, "$1480965677530OAHQS:sw1v.org": { "m.read": { "@lexik:matrix.org": { "ts": 1480981153710 } } }, "$1481031128178Gimqk:kyriasis.com": { "m.read": { "@erlend_sh:matrix.org": { "ts": 1481031338400 } } }, "$148106676929TvNrz:maxwellkepler.uk": { "m.read": { "@bigpenguin:matrix.org": { "ts": 1481077220130 } } }, "$1481104067331125EuWkf:matrix.org": { "m.read": { "@MarkusDEL:matrix.org": { "ts": 1481104189034 } } }, "$148110724947gZQYH:kyriasis.com": { "m.read": { "@10GQy8TIqNCJGg:matrix.org": { "ts": 1481107330836 }, "@mirrom:matrix.org": { "ts": 1481107551147 } } }, "$1481131475184ohuwR:kyriasis.com": { "m.read": { "@hostbbb:matrix.org": { "ts": 1481136438208 } } }, "$1481198329761216IZVDm:matrix.org": { "m.read": { "@freddy:hamburg.freifunk.net": { "ts": 1481209640035 } } }, "$1481231929178BIVqP:krtdex.com": { "m.read": { "@onsombal:matrix.org": { "ts": 1481231921776 } } }, "$1481316548490823lRACf:matrix.org": { "m.read": { "@conor:synapse.bb.informatik-bs.de": { "ts": 1481318229581 } } }, "$148133928042822DWtIq:matrix.org": { "m.read": { "@hostile:matrix.org": { "ts": 1481339624109 } } }, "$148138427031bWglc:matrix.molinkx.com": { "m.read": { "@mataleo:vodeoo.com": { "ts": 1481385065362 } } }, "$1481416402166451ixPAS:matrix.org": { "m.read": { "@sigwinch:matrix.org": { "ts": 1481416785490 } } }, "$1481422510175215kvoOT:matrix.org": { "m.read": { "@neurocis:matrix.org": { "ts": 1481425519635 } } }, "$148144306879qyTuT:timepath.xyz": { "m.read": { "@Narfinger:matrix.org": { "ts": 1481446285115 } } }, "$1481474232333964UqElC:matrix.org": { "m.read": { "@Lucifer:matrix.org": { "ts": 1481474464879 } } }, "$1481503078157UpaWU:kolm.io": { "m.read": { "@austinhc:matrix.org": { "ts": 1481506745704 } } }, "$1481571471141ZbmNh:57north.org.uk": { "m.read": { "@Christian:matrix.org": { "ts": 1481572150943 } } }, "$148165070148417jUJYY:matrix.org": { "m.read": { "@beefboolean:volotenko.net": { "ts": 1481677383443 } } }, "$1481689911128FmakF:berigora.net": { "m.read": { "@companioncube:companioncube.me": { "ts": 1481690377345 } } }, "$1481730212191nZklC:half-shot.uk": { "m.read": { "@jakespitz:matrix.org": { "ts": 1481732881235 } } }, "$1481836046876953QXPow:matrix.org": { "m.read": { "@protprot123:matrix.org": { "ts": 1481844129230 } } }, "$14818851551087747WUmGZ:matrix.org": { "m.read": { "@nikken:matrix.org": { "ts": 1481890525362 } } }, "$14820189041823IcmSB:57north.org.uk": { "m.read": { "@miloignis:matrix.org": { "ts": 1482019639854 } } }, "$1482047335660699HFdnT:matrix.org": { "m.read": { "@anders:unix.se": { "ts": 1482079068521 } } }, "$1482092314827159LPyVC:matrix.org": { "m.read": { "@TiagoDanin:matrix.org": { "ts": 1482092320257 } } }, "$14821687701180194vUuWR:matrix.org": { "m.read": { "@lb1bi:bendiksverden.net": { "ts": 1482176507575 } } }, "$14821974921357831TLKWy:matrix.org": { "m.read": { "@nosmas:matrix.org": { "ts": 1482200523974 } } }, "$148220542622Vxnaz:onedefence.com": { "m.read": { "@toall:matrix.org": { "ts": 1482209822774 } } }, "$14822351261514194oavEE:matrix.org": { "m.read": { "@gl3nn:glennarens.com": { "ts": 1482236872512 } } }, "$1482273612140cgDIC:darmstadt.ccc.de": { "m.read": { "@soup:matrixsoup.pw": { "ts": 1482326662440 } } }, "$1482339315550844bdGTm:matrix.org": { "m.read": { "@itsthe1:matrix.org": { "ts": 1482350749651 } } }, "$1482361818700488gSrcc:matrix.org": { "m.read": { "@R1CH:tldev.eu": { "ts": 1482362352449 } } }, "$14823677382581XwZAm:ralith.com": { "m.read": { "@jballanc:matrix.org": { "ts": 1482371514664 } } }, "$1482440346141tLwUR:ralith.com": { "m.read": { "@skaverat:m.skaverat.net": { "ts": 1482718032787 } } }, "$14824415991125732XNRpQ:matrix.org": { "m.read": { "@jhauschildt:matrix.org": { "ts": 1482441772776 } } }, "$14824421621129919LThQG:matrix.org": { "m.read": { "@potatoe:matrix.org": { "ts": 1482442287548 } } }, "$14824451641151559bNuSC:matrix.org": { "m.read": { "@x2a:kweli.info": { "ts": 1482447145345 } } }, "$14824632651247376yhylD:matrix.org": { "m.read": { "@case:matrix.backwardsgiraffe.net": { "ts": 1482463269132 } } }, "$14824827151335092EHORd:matrix.org": { "m.read": { "@chugaistero:matrix.org": { "ts": 1482484566052 } } }, "$14824918311241bjBqY:matrix.feder8.ru": { "m.read": { "@qolop:matrix.org": { "ts": 1482498860994 }, "@shanek:matrix.org": { "ts": 1482500581185 }, "@xiaoming:matrix.org": { "ts": 1482495939596 } } }, "$148252336414NkVZr:dhp.com": { "m.read": { "@boirleaud:matrix.org": { "ts": 1482527591764 } } }, "$1482548094496WYPcX:anemone.me": { "m.read": { "@signaluser:matrix.org": { "ts": 1482548804546 } } }, "$14825516541690288QEFhe:matrix.org": { "m.read": { "@klevermonicker:matrix.org": { "ts": 1482562692321 } } }, "$1482592854873GkoQv:sw1v.org": { "m.read": { "@nasaboy:matrix.org": { "ts": 1482593005055 } } }, "$14826097721900374dymjl:matrix.org": { "m.read": { "@zeppi673:matrix.org": { "ts": 1482617915787 } } }, "$14826350381994516NJuMH:matrix.org": { "m.read": { "@foratemp:matrix.org": { "ts": 1482640367514 } } }, "$14826435062020204HYThM:matrix.org": { "m.read": { "@crc:matrix.org": { "ts": 1482646499888 } } }, "$14826758102109235CHnPp:matrix.org": { "m.read": { "@xuyan:matrix.org": { "ts": 1482680791947 } } }, "$14827613362425866FnKlG:matrix.org": { "m.read": { "@victor:matrix.lopezjuan.com": { "ts": 1482769662839 } } }, "$14828066412643403tewcI:matrix.org": { "m.read": { "@DanielDent:matrix.org": { "ts": 1482807917299 } } }, "$148281272658BnEqz:danieldent.qa2.com": { "m.read": { "@saladus:www.priva.club": { "ts": 1482831319400 } } }, "$14828420302778128LJwnU:matrix.org": { "m.read": { "@kaustavdm:matrix.org": { "ts": 1482842392222 } } }, "$14828729786ExWBT:dawninglight.net": { "m.read": { "@md.fr:matrix.org": { "ts": 1482873124687 } } }, "$14829124993164129KUrfa:matrix.org": { "m.read": { "@L0L022:matrix.org": { "ts": 1482932218172 } } }, "$14829565473388527ZFdjZ:matrix.org": { "m.read": { "@tstephen:matrix.org": { "ts": 1482956550800 } } }, "$1482994856136aGKjH:cntalk.xyz": { "m.read": { "@anhusa:matrix.org": { "ts": 1482996168297 } } }, "$14830271913736346tKzyJ:matrix.org": { "m.read": { "@lifent:cntalk.xyz": { "ts": 1483053319405 } } }, "$148302991714UsIIR:noepito.me": { "m.read": { "@rryan:matrix.rjryan.me": { "ts": 1483905897948 } } }, "$1483121293119haJmy:half-shot.uk": { "m.read": { "@alex:klen.site": { "ts": 1483121310886 } } }, "$14831310975vqxpj:matrix.xsteadfastx.org": { "m.read": { "@xsteadfastx:matrix.org": { "ts": 1483131116770 } } }, "$148314022077CJYgl:productionservers.net": { "m.read": { "@dwmunster:themunsters.org": { "ts": 1483140367276 } } }, "$1483194280334644chqld:matrix.org": { "m.read": { "@lief:matrix.org": { "ts": 1483194379318 } } }, "$1483202851378674gKLoW:matrix.org": { "m.read": { "@neodarz:matrix.org": { "ts": 1483203217608 } } }, "$14832101675EtFkB:vodik.xyz": { "m.read": { "@Silvus:matrix.org": { "ts": 1483221095084 } } }, "$1483348699326752lISYA:matrix.org": { "m.read": { "@tsujamin:bgroberts.id.au": { "ts": 1483349882432 } } }, "$148336095693RfnyY:matrix.thewagner.net": { "m.read": { "@joseph:matrix.thewagner.net": { "ts": 1483360960761 } } }, "$1483472787257rNTrs:sw1v.org": { "m.read": { "@nothoughts:matrix.org": { "ts": 1483472795600 } } }, "$148347939345suaNF:krtdex.com": { "m.read": { "@arpagon:matrix.org": { "ts": 1483479363238 } } }, "$14835236278vJlCK:krtdex.com": { "m.read": { "@hendrik:matrix.org": { "ts": 1483523757970 } } }, "$14835444387cbVqg:catalk.xyz": { "m.read": { "@minhazav:matrix.org": { "ts": 1483545877771 } } }, "$148356730711091qPQPv:ralith.com": { "m.read": { "@chr1s:matrix.org": { "ts": 1483567475857 } } }, "$14835687941654025CqBVz:matrix.org": { "m.read": { "@machrider:matrix.org": { "ts": 1483570582987 }, "@saad:matrix.org": { "ts": 1483572429107 } } }, "$148363120427031AurPz:matrix.org": { "m.read": { "@ar_ch:matrix.org": { "ts": 1483793300474 } } }, "$14836370871UhOpP:sibnsk.net": { "m.read": { "@stefan:ubbink.org": { "ts": 1483637231171 } } }, "$1483738270692140xpTtj:matrix.org": { "m.read": { "@KajMagnus:matrix.org": { "ts": 1483738323650 } } }, "$148374078536WBIjW:berigora.net": { "m.read": { "@mva1985:matrix.org": { "ts": 1483740787593 } } }, "$14838072120wsomD:schnuffle.de": { "m.read": { "@snowping:matrix.org": { "ts": 1483807223061 } } }, "$1483808235165742YMIUx:matrix.org": { "m.read": { "@schnuffle:schnuffle.de": { "ts": 1483808237879 } } }, "$1483842167360293xadel:matrix.org": { "m.read": { "@666tester999:matrix.org": { "ts": 1483842283985 } } }, "$1483882443753aNtyL:chat.weho.st": { "m.read": { "@schnuffle:kolab.schnuffle.de": { "ts": 1483882496937 } } }, "$1483923254137tWxTV:catalk.xyz": { "m.read": { "@msknathan:matrix.org": { "ts": 1483926614778 } } }, "$1483927793739216EHNeX:matrix.org": { "m.read": { "@Baffy:matrix.org": { "ts": 1483932374040 } } }, "$1483973132939407KPufw:matrix.org": { "m.read": { "@gergoe:matrix.bgsoft.hu": { "ts": 1483973413192 } } }, "$148399230514uTxpC:kyriasis.com": { "m.read": { "@yannik:yannikenss.de": { "ts": 1483992378503 } } }, "$148406270167811iECDQ:matrix.org": { "m.read": { "@zany:darkride.net": { "ts": 1484070069842 } } }, "$148407873517676oooIX:matrix.org": { "m.read": { "@acharles:matrix.org": { "ts": 1484082462414 } } }, "$14841552521584fgUoI:kolm.io": { "m.read": { "@scj643:matrix.org": { "ts": 1484155268991 } } }, "$14841770764553JSKGP:matrix.org": { "m.read": { "@wervenyt:matrix.org": { "ts": 1484179938616 } } }, "$14842219078ksECM:kyriasis.com": { "m.read": { "@pascal:reeb.io": { "ts": 1484222404389 } } }, "$1484240002334978uPtfF:matrix.org": { "m.read": { "@Torrion:matrix.org": { "ts": 1484241823870 } } }, "$1484270133554685vhPgt:matrix.org": { "m.read": { "@qzorg:matrix.org": { "ts": 1484270217914 } } }, "$14844450411461470dnqPc:matrix.org": { "m.read": { "@yep:42is.life": { "ts": 1484445196595 } } }, "$14844681501548663VUrkY:matrix.org": { "m.read": { "@Gapmeister:matrix.org": { "ts": 1484469335566 } } }, "$14845049311692630DLjsF:matrix.org": { "m.read": { "@MrAdamJohn:matrix.org": { "ts": 1484505520509 } } }, "$14845350931857144EGgRN:matrix.org": { "m.read": { "@107262:matrix.org": { "ts": 1484535190287 } } }, "$14845628931974121JMcWu:matrix.org": { "m.read": { "@congratulations:peregrination.life": { "ts": 1484563084136 } } }, "$14845934172151150FisHC:matrix.org": { "m.read": { "@taurec:matrix.org": { "ts": 1484593614155 } } }, "$14845946442161865BaTBK:matrix.org": { "m.read": { "@itsyogesh:matrix.org": { "ts": 1484594712556 } } }, "$148460356011NiVdk:half-shot.uk": { "m.read": { "@dmitry.sinina:onat.edu.ua": { "ts": 1484604018285 } } }, "$14846385872408077ZerVM:matrix.org": { "m.read": { "@Nebual:nebtown.info": { "ts": 1484639608336 } } }, "$14846439272428276GXxRD:matrix.org": { "m.read": { "@FruitieX:matrix.org": { "ts": 1484644002297 } } }, "$148464742829sbSjB:matrixim.cc": { "m.read": { "@jasonrm:matrix.org": { "ts": 1484647516852 } } }, "$1484670802231qKnFE:kyriasis.com": { "m.read": { "@negi.n:matrix.org": { "ts": 1484758892277 } } }, "$14846804332667777RHzWV:matrix.org": { "m.read": { "@kyrizide:matrix.org": { "ts": 1484680629375 } } }, "$1484682310402sRBxt:pintobyte.com": { "m.read": { "@satan666:matrix.org": { "ts": 1486660146967 } } }, "$14846843752701369QfUqc:matrix.org": { "m.read": { "@luar:matrix.org": { "ts": 1484685566214 } } }, "$1484712094897IzBlf:berigora.net": { "m.read": { "@bubbles229693:matrix.org": { "ts": 1484712193240 } } }, "$148473654283kYkJL:jki.re": { "m.read": { "@epsilon:matrix.org": { "ts": 1484737506233 } } }, "$148475289358MQqcq:schnuffle.de": { "m.read": { "@dave:anemone.me": { "ts": 1484828077808 }, "@rojr:matrix.org": { "ts": 1484764793586 } } }, "$14847758283250291Vhmof:matrix.org": { "m.read": { "@howethomas:matrix.org": { "ts": 1484775831019 } } }, "$14847801542epUpd:57north.org.uk": { "m.read": { "@caffey:matrix.org": { "ts": 1484780235604 } } }, "$14847877164gMvWt:dawninglight.net": { "m.read": { "@christian:christian-vogeley.de": { "ts": 1484790230777 } } }, "$148482342023NEFpY:matrix.xsteadfastx.org": { "m.read": { "@yjchen:matrix.org": { "ts": 1484823705476 } } }, "$148484497383NGKJZ:matrixim.cc": { "m.read": { "@oliverlumby:matrix.org": { "ts": 1484844992841 } } }, "$148484508084zYYui:matrixim.cc": { "m.read": { "@lanker:matrix.org": { "ts": 1484845143420 } } }, "$14848597466OzHBo:t2l.io": { "m.read": { "@tomfitzhenry:matrix.org": { "ts": 1484863314518 } } }, "$14848767833848406vUNsB:matrix.org": { "m.read": { "@czechton:matrix.org": { "ts": 1484881366589 } } }, "$1484906590804eAGzu:sw1v.org": { "m.read": { "@bb010g:matrix.org": { "ts": 1484906597777 } } }, "$1484908469806Gvgqr:sw1v.org": { "m.read": { "@vinnitu:matrix.org": { "ts": 1484908518673 } } }, "$1484941383183363hddld:matrix.org": { "m.read": { "@oleg:fiksel.info": { "ts": 1484941383920 } } }, "$1484956936301597mRSSU:matrix.org": { "m.read": { "@mattos:matrix.org": { "ts": 1484967969221 }, "@rickcogley:matrix.org": { "ts": 1484957798636 } } }, "$1484974389385091uZIax:matrix.org": { "m.read": { "@qbit:tapenet.org": { "ts": 1485006540307 } } }, "$14849947240swWAm:codewalr.us": { "m.read": { "@zhangxu:matrix.molinkx.com": { "ts": 1484996767734 } } }, "$1485077384848117IXZmS:matrix.org": { "m.read": { "@Juju:codewalr.us": { "ts": 1485077899341 } } }, "$14851713161316194lkTTz:matrix.org": { "m.read": { "@vurpo:matrix.org": { "ts": 1485171774883 } } }, "$14852025691568277MEhHe:matrix.org": { "m.read": { "@stanko:matrix.org": { "ts": 1485204262768 } } }, "$14853218398QWeGl:matrixim.cc": { "m.read": { "@vith:n3t.work": { "ts": 1485321978144 } } }, "$1485367100174495rXrEE:matrix.org": { "m.read": { "@NewTribeAlbum:matrix.org": { "ts": 1485367113535 } } }, "$14853703494NHtzl:maxwellkepler.uk": { "m.read": { "@ack43:matrix.org": { "ts": 1485370410799 } } }, "$1485376871255238gWxXD:matrix.org": { "m.read": { "@LaurentDu:matrix.org": { "ts": 1485377343874 } } }, "$14854356161358UyaQQ:kamax.io": { "m.read": { "@rymdhund:matrix.org": { "ts": 1485442674073 } } }, "$1485446149639419iRXNw:matrix.org": { "m.read": { "@Rain:home.rdash.in": { "ts": 1485446200482 } } }, "$1485450468674655HrvdZ:matrix.org": { "m.read": { "@zamicol:matrix.org": { "ts": 1485450472258 } } }, "$1485472698581IGkVw:pintobyte.com": { "m.read": { "@dahaus:matrix.org": { "ts": 1485477270760 } } }, "$1485489783945283RaXpb:matrix.org": { "m.read": { "@moltonlava:chittychat.me": { "ts": 1485499622747 } } }, "$1485501884212gaRhT:im.nostrodomo.tk": { "m.read": { "@cataldoc:matrix.cigliola.com": { "ts": 1485509754627 } } }, "$1485518304618YNDuz:sw1v.org": { "m.read": { "@maxbeier:tools.f4.htw-berlin.de": { "ts": 1485527894685 } } }, "$14855299771144513xmTAn:matrix.org": { "m.read": { "@admin:gruenhage.xyz": { "ts": 1485539303172 } } }, "$14855597611381830UnjQE:matrix.org": { "m.read": { "@lmorchard:matrix.org": { "ts": 1485568878015 } } }, "$1485810298160959OujMu:matrix.org": { "m.read": { "@Jbritton:matrix.org": { "ts": 1485812673413 } } }, "$14858633375516DEEOI:matrix.org": { "m.read": { "@pergolas:matrix.org": { "ts": 1485865424047 } } }, "$148587475173684gPVul:matrix.org": { "m.read": { "@manish:matrix.org": { "ts": 1485890831637 }, "@test123aa:matrix.org": { "ts": 1485874782788 } } }, "$1485899912289227wLOYq:matrix.org": { "m.read": { "@fractal:matrix.org": { "ts": 1485900041203 } } }, "$1485985238215353xvGWm:matrix.org": { "m.read": { "@johnpatrickdelcastillo:matrix.org": { "ts": 1485985300717 } } }, "$1485988940445VybIW:onedefence.com": { "m.read": { "@quvide:qux.fi": { "ts": 1485997830841 } } }, "$1486065825618wyqtO:pintobyte.com": { "m.read": { "@nilsja:matrix.org": { "ts": 1486066889965 }, "@yaniel:kolm.io": { "ts": 1486066001683 } } }, "$148606730712099oGczR:kolm.io": { "m.read": { "@nioshd:matrix.org": { "ts": 1486071815165 } } }, "$14860863410jBBih:raim.ist": { "m.read": { "@compile:matrix.org": { "ts": 1486086369126 } } }, "$14861605462414LDsvo:57north.org.uk": { "m.read": { "@tkburbidge:matrix.org": { "ts": 1486160548158 } } }, "$1486165820643914MgtZD:matrix.org": { "m.read": { "@GreyCat:matrix.org": { "ts": 1486165984972 }, "@six:matrix.org": { "ts": 1486176143550 } } }, "$1486188346487heqWc:catalk.xyz": { "m.read": { "@lifent:catalk.xyz": { "ts": 1486188347269 } } }, "$1486217407843227RZEnc:matrix.org": { "m.read": { "@aeromax:matrix.org": { "ts": 1486217643363 } } }, "$1486223206870216VTEAG:matrix.org": { "m.read": { "@YaBoyBiggs:matrix.org": { "ts": 1486223228813 } } }, "$14862888591183202Vqmbv:matrix.org": { "m.read": { "@seequ2:matrix.org": { "ts": 1486289149780 } } }, "$148631628457fKEFI:pintobyte.com": { "m.read": { "@Takios:takios.de": { "ts": 1486317680945 } } }, "$14863913431686279EVIhh:matrix.org": { "m.read": { "@Rym:matrix.org": { "ts": 1486391364381 } } }, "$14863919451690272nuuBP:matrix.org": { "m.read": { "@omegax00:matrix.org": { "ts": 1486391955793 } } }, "$14863969221728732eNtYV:matrix.org": { "m.read": { "@PureTryOut:matrix.org": { "ts": 1486397251698 } } }, "$148640582930rUgJn:ralith.com": { "m.read": { "@OverlordAlyx:matrix.org": { "ts": 1486407123054 } } }, "$1486433191606VIYIW:ralith.com": { "m.read": { "@trantion:matrix.org": { "ts": 1486442946301 } } }, "$14864550792092632qUnVj:matrix.org": { "m.read": { "@Keven:matrix.org": { "ts": 1486456994691 } } }, "$14864592112110099pdwUK:matrix.org": { "m.read": { "@stevenh7n:matrix.org": { "ts": 1486465979565 } } }, "$148650300621xAzWl:jki.re": { "m.read": { "@damo22:matrix.zammit.org": { "ts": 1488453348657 } } }, "$14865034002427113FMWjd:matrix.org": { "m.read": { "@vbezhenar:matrix.org": { "ts": 1486503859366 } } }, "$14865321692589831PdwjN:matrix.org": { "m.read": { "@rjrix:matrix.org": { "ts": 1486542685678 } } }, "$14865531382513vUGRS:tedomum.net": { "m.read": { "@ashish3805:matrix.org": { "ts": 1486562915099 } } }, "$148665960685880Eejwb:matrix.org": { "m.read": { "@MikeMike1:matrix.org": { "ts": 1486662538858 }, "@diamaths:matrix.org": { "ts": 1486662924832 } } }, "$148666864923033uMgeS:matrix.org": { "m.read": { "@ndl:matrix.org": { "ts": 1486672048099 } } }, "$1486671672148IxTXJ:im.nostrodomo.tk": { "m.read": { "@cmdsft:matrix.org": { "ts": 1489698787641 } } }, "$1486778208407mUlMU:kamax.io": { "m.read": { "@bolton:matrix.org": { "ts": 1486780826441 } } }, "$14868203751786aOUIR:57north.org.uk": { "m.read": { "@friedger:hackerspace.be": { "ts": 1486821893501 } } }, "$14868284731018yzixP:berigora.net": { "m.read": { "@acuity:matrix.org": { "ts": 1486839352113 } } }, "$1486841556979527VilOH:matrix.org": { "m.read": { "@zed:moulticast.net": { "ts": 1487575720657 } } }, "$14868786511168592tsnpG:matrix.org": { "m.read": { "@test:matrix.ozlabs.org": { "ts": 1486889189740 } } }, "$148689589941RIoDF:www.kfeq.net": { "m.read": { "@its_notjack:matrix.org": { "ts": 1486895950339 } } }, "$1486901771104VdKYM:kamax.io": { "m.read": { "@pfault:matrix.org": { "ts": 1486901783190 } } }, "$14869046501255947LgvrV:matrix.org": { "m.read": { "@ibu:matrix.controlled.space": { "ts": 1486906619872 } } }, "$14869781873TppzU:imninja.net": { "m.read": { "@vt0r:sbin.me": { "ts": 1487009686014 } } }, "$1487049129479106MFyvJ:matrix.org": { "m.read": { "@throwaway:matrix.org": { "ts": 1487061059363 } } }, "$1487067709184OMVJr:kolosowscy.pl": { "m.read": { "@tomek:kolosowscy.pl": { "ts": 1487070470592 } } }, "$14871676401630KcLEU:pintobyte.com": { "m.read": { "@eds:k7try.co": { "ts": 1487167649043 } } }, "$14871679101633XUsRe:pintobyte.com": { "m.read": { "@thebastinik:matrix.org": { "ts": 1487167973683 } } }, "$1487174762133341SWrxc:matrix.org": { "m.read": { "@riot_muppeth:matrix.org": { "ts": 1487174999796 } } }, "$1487176875675YNSuL:ldbco.de": { "m.read": { "@vlaho:matrix.org": { "ts": 1487179461919 } } }, "$14873261049714jJqEE:matrix.org": { "m.read": { "@apenguin:matrix.org": { "ts": 1487326112182 } } }, "$1487358964237QWSxV:57north.org.uk": { "m.read": { "@Sir666:matrix.org": { "ts": 1487362875383 } } }, "$14873656102491yZlgx:pintobyte.com": { "m.read": { "@stuart:pook.it": { "ts": 1487369760061 } } }, "$1487451063681004weHpz:matrix.org": { "m.read": { "@peter:matrix.laxpeter.net": { "ts": 1487451128073 } } }, "$1487514463972038cEPQL:matrix.org": { "m.read": { "@g1gn0:matrix.darkgen.ru": { "ts": 1487514597317 } } }, "$148751629774MwITo:matrix.penguin42.com": { "m.read": { "@izabella:unixpimps.net": { "ts": 1487517817063 } } }, "$14875352932yCnCh:roeckx.be": { "m.read": { "@baldo:toppoint.de": { "ts": 1487541593800 }, "@konus:imgif.top": { "ts": 1487535435028 } } }, "$148755471119UURne:matrix.chicagolug.org": { "m.read": { "@walker:joranhonig.nl": { "ts": 1488025487046 } } }, "$1487554793322CZRQj:kamax.io": { "m.read": { "@jim:matrix.chicagolug.org": { "ts": 1487555467752 } } }, "$1487589408362JgjRP:kamax.io": { "m.read": { "@BenBE:toppoint.de": { "ts": 1487589721531 }, "@richard:vegasky.io": { "ts": 1487591347622 } } }, "$1487631524457TGReS:kamax.io": { "m.read": { "@zig:matrix.org": { "ts": 1487638707635 } } }, "$14876387191726073NnodA:matrix.org": { "m.read": { "@rangak:matrix.selwahealth.org": { "ts": 1488157679489 } } }, "$1487703152518oqYzo:kamax.io": { "m.read": { "@morteza:matrix.org": { "ts": 1487703162215 } } }, "$14877062982133002GziDr:matrix.org": { "m.read": { "@Silke:matrix.org": { "ts": 1487710045182 } } }, "$1487756488151oMdbM:sw1v.org": { "m.read": { "@guesting:matrix.org": { "ts": 1487756590287 } } }, "$14877901877EVjYA:57north.org.uk": { "m.read": { "@user318:matrix.org": { "ts": 1487790804441 } } }, "$1487797435217RosiY:sw1v.org": { "m.read": { "@it_ing:matrix.org": { "ts": 1487797441665 } } }, "$148779796223qZslb:57north.org.uk": { "m.read": { "@daph:matrix.org": { "ts": 1487798232051 } } }, "$1487814538438157pxqal:matrix.org": { "m.read": { "@Aenohy0r:matrix.org": { "ts": 1487815378662 } } }, "$148783657771PUxWF:kamax.io": { "m.read": { "@erik.qvam:www.kfeq.net": { "ts": 1497788990927 } } }, "$1487867928527byWVx:sw1v.org": { "m.read": { "@iav:matrix.org": { "ts": 1487868256906 } } }, "$1487932497345761BvDbF:matrix.org": { "m.read": { "@david.blewett:matrix.org": { "ts": 1487947339599 } } }, "$14879597582TQzXu:roeckx.be": { "m.read": { "@fadenb:utzutzutz.net": { "ts": 1487960184566 } } }, "$1487993367761705qrKPa:matrix.org": { "m.read": { "@sean_:matrix.org": { "ts": 1488002880101 } } }, "$14880104189CJhHa:2hg.org": { "m.read": { "@federicac:matrix.org": { "ts": 1488014566947 } } }, "$148801507928qgLMM:sciuro.org": { "m.read": { "@esm:matrix.org": { "ts": 1488022754023 } } }, "$148802554136gLpIj:schnuffle.de": { "m.read": { "@bouken:matrix.org": { "ts": 1488030294978 } } }, "$1488032032900166lRUUd:matrix.org": { "m.read": { "@jan:teamly.eu": { "ts": 1488056413714 } } }, "$14880700621114706syKfh:matrix.org": { "m.read": { "@piroko:pintobyte.com": { "ts": 1488076375458 }, "@tekacs:matrix.org": { "ts": 1488076364632 } } }, "$14881236385823SYqbA:half-shot.uk": { "m.read": { "@joshrickmar:matrix.org": { "ts": 1488143682392 } } }, "$14881640131594978oiood:matrix.org": { "m.read": { "@y.wang:matrix.org": { "ts": 1488168390566 } } }, "$148821884861HrwvU:michahelles.club": { "m.read": { "@tx:styxmatrix.1337.cx": { "ts": 1488221833031 } } }, "$1488228450133ZQOFY:im.nostrodomo.tk": { "m.read": { "@farodin91:matrix.org": { "ts": 1488231658649 } } }, "$1488243086243342NJyrs:matrix.org": { "m.read": { "@jakob:michahelles.club": { "ts": 1488293890919 } } }, "$148830698093874VROXS:matrix.org": { "m.read": { "@jake9wi2:matrix.org": { "ts": 1488307006463 } } }, "$148830795981rETqn:sw1v.org": { "m.read": { "@erikqvam:matrix.org": { "ts": 1488309562297 } } }, "$1488375169171rQBul:kamax.io": { "m.read": { "@depate:matrix.org": { "ts": 1488375192064 } } }, "$1488413555511wXmYE:57north.org.uk": { "m.read": { "@mitchell:matrix.9net.org": { "ts": 1488413587992 } } }, "$148841596835732cnSOn:wobscale.chat": { "m.read": { "@Snarfburglar:matrix.org": { "ts": 1488415975051 } } }, "$1488449520258xioBX:im.nostrodomo.tk": { "m.read": { "@Uniaika:matrix.org": { "ts": 1488450139570 } } }, "$14885388786485QDeWo:cervoi.se": { "m.read": { "@heftig:archlinux.org": { "ts": 1488543828804 } } }, "$14886534841104432hPloU:matrix.org": { "m.read": { "@philsnow:philsnow.io": { "ts": 1488714950369 } } }, "$1488668253430zncrG:57north.org.uk": { "m.read": { "@ilmari:matrix.org": { "ts": 1497100335485 } } }, "$14887334301488970DatIS:matrix.org": { "m.read": { "@shanavas:matrix.org": { "ts": 1488735689494 } } }, "$14887759191ikhoC:matrix.selwahealth.org": { "m.read": { "@unilovelight:matrix.org": { "ts": 1488776711506 } } }, "$14887846611774450eimED:matrix.org": { "m.read": { "@bobby:synapse.uneyahourtiere.fr": { "ts": 1488787166466 } } }, "$1488811382229oRnPT:sw1v.org": { "m.read": { "@hernad:matrix.org": { "ts": 1488812601773 } } }, "$14888277732066938qDZIE:matrix.org": { "m.read": { "@jots:matrix.org": { "ts": 1488827812035 } } }, "$14888727482351492CIMqX:matrix.org": { "m.read": { "@woutifier:matrix.wbdv.nl": { "ts": 1488872799715 } } }, "$1488879909453fqRGt:sw1v.org": { "m.read": { "@frobel:matrix.org": { "ts": 1488880377909 } } }, "$14888946364SEdPm:57north.org.uk": { "m.read": { "@shell:matrix.org": { "ts": 1488894643122 } } }, "$14889358492849206JMSIh:matrix.org": { "m.read": { "@Ibrahim:matrix.org": { "ts": 1488940969618 } } }, "$1489062854814aatmp:sw1v.org": { "m.read": { "@lieff:matrix.org": { "ts": 1489062881560 } } }, "$1489081384144xyrJz:epiphyte.network": { "m.read": { "@Eli:matrix.org": { "ts": 1489081389632 } } }, "$1489083269211011cLkOw:matrix.org": { "m.read": { "@enckse:epiphyte.network": { "ts": 1489083662084 } } }, "$148910429027808UGlKJ:ralith.com": { "m.read": { "@zsc:matrix.org": { "ts": 1489114167571 } } }, "$1489186786159FMNyn:tchncs.de": { "m.read": { "@Xena:matrix.org": { "ts": 1489186776873 } } }, "$1489203842677127Miutn:matrix.org": { "m.read": { "@mahmoud:matrix.org": { "ts": 1489204714636 } } }, "$1489220226231AZbOJ:sw1v.org": { "m.read": { "@KEANO:matrix.org": { "ts": 1489245640364 }, "@ajay_aju:matrix.org": { "ts": 1489225082058 } } }, "$1489237839820944nLYgW:matrix.org": { "m.read": { "@rttest123456:matrix.org": { "ts": 1489239532064 } } }, "$14892917261183458HQfLN:matrix.org": { "m.read": { "@christian.wantia:matrix.org": { "ts": 1489300063140 } } }, "$14893197401OeoQD:athena.0xd182.net": { "m.read": { "@THS:matrix.org": { "ts": 1489322407751 } } }, "$14893339201oKOwa:matrix.freelock.com": { "m.read": { "@Claudius7916:matrix.org": { "ts": 1489333932622 } } }, "$14893896590DxLcr:tchncs.de": { "m.read": { "@fcro:matrix.org": { "ts": 1489478169359 } } }, "$148944738720CBaym:eridian.systems": { "m.read": { "@vad:matrix.org": { "ts": 1489458561622 } } }, "$148949397164qpOZC:matrix.dust-puppy.net": { "m.read": { "@test2:matrix.dust-puppy.net": { "ts": 1502875753410 } } }, "$1489503850200QvUuF:epiphyte.network": { "m.read": { "@moeller:matrix.vivai.de": { "ts": 1489504284008 }, "@sam:macbeth.cc": { "ts": 1492505774214 } } }, "$1489505409155728zcbMD:matrix.org": { "m.read": { "@testuserpleaseignore:matrix.org": { "ts": 1489505566006 } } }, "$1489515786269166kMxmt:matrix.org": { "m.read": { "@apero:matrix.org": { "ts": 1489525269215 }, "@janus99:matrix.org": { "ts": 1489532867396 } } }, "$1489569775659084qLKeB:matrix.org": { "m.read": { "@bryan:emeraldtomb.com": { "ts": 1489569787207 } } }, "$148957432013080VFfwe:matrix.org": { "m.read": { "@hamber_dick:chat.alko-sbk.de": { "ts": 1489574622205 } } }, "$148958057119785ISpfh:matrix.org": { "m.read": { "@jspies:matrix.vivai.de": { "ts": 1489580581285 } } }, "$1489588781150oPDsy:sw1v.org": { "m.read": { "@dani:gemma18.uni-mb.si": { "ts": 1489588802612 } } }, "$1489591628199GsJcw:sw1v.org": { "m.read": { "@rugvip:matrix.org": { "ts": 1489592183238 } } }, "$14896203674142neVqe:matrix.eclabs.de": { "m.read": { "@hristo:matrix.org": { "ts": 1489626017598 } } }, "$1489626021341590nxpah:matrix.org": { "m.read": { "@trisimix:matrix.org": { "ts": 1489637212130 } } }, "$1489645229214uUSIn:sw1v.org": { "m.read": { "@Hiro:lynxie.net": { "ts": 1489646900966 } } }, "$148967618039008PNJDM:matrix.org": { "m.read": { "@elBextown:matrix.org": { "ts": 1489678682977 } } }, "$148968059289303mKjAS:matrix.org": { "m.read": { "@VoteBlanc:matrix.org": { "ts": 1489680597796 } } }, "$1489707292366988EUMUT:matrix.org": { "m.read": { "@llongoria:matrix.org": { "ts": 1489707297600 } } }, "$1489717520622Vvzmy:berigora.net": { "m.read": { "@jan.renz:matrix.org": { "ts": 1489729558429 } } }, "$1489744826599882ctAzU:matrix.org": { "m.read": { "@ganlub:matrix.org": { "ts": 1489744831046 } } }, "$14897460511688HeaLr:57north.org.uk": { "m.read": { "@pacien:pacien.net": { "ts": 1489746059619 } } }, "$1489788155577nckTR:dereferenced.org": { "m.read": { "@zxp:matrix.org": { "ts": 1489793078004 } } }, "$14899925242317248BYaya:matrix.org": { "m.read": { "@loaloys:matrix.org": { "ts": 1490000669269 } } }, "$14900167432477826kYCYZ:matrix.org": { "m.read": { "@Nonga:lowpolydev.de": { "ts": 1490016815855 } } }, "$149004169272ylAWg:half-shot.uk": { "m.read": { "@jmnx:matrix.org": { "ts": 1490043229926 }, "@yatekii:matrix.darkchannel.net": { "ts": 1490043345146 } } }, "$149010822167936VPVLC:matrix.org": { "m.read": { "@oliver:lumby.me": { "ts": 1490113226336 } } }, "$14901808222555Sygwz:orbstheorem.ch": { "m.read": { "@roosemberth:orbstheorem.ch": { "ts": 1490188049144 } } }, "$1490187624711637SfwKl:matrix.org": { "m.read": { "@oz:matrix.org": { "ts": 1490188138026 } } }, "$1490196722807947eJzJa:matrix.org": { "m.read": { "@auger:sindustries.net": { "ts": 1491441670330 } } }, "$1490208295942546mTpZs:matrix.org": { "m.read": { "@D-VOLK:matrix.org": { "ts": 1490209977297 } } }, "$14902527931316876zVOmA:matrix.org": { "m.read": { "@KenDai:matrix.org": { "ts": 1490256397191 }, "@wjt:matrix.org": { "ts": 1490256327947 } } }, "$14902608441363158nLUUF:matrix.org": { "m.read": { "@mantisds:matrix.org": { "ts": 1490263222449 } } }, "$14902832271060KadsJ:tyler.cat": { "m.read": { "@ThatWikiDude:matrix.org": { "ts": 1490283328050 } } }, "$14903625242263698CBDXZ:matrix.org": { "m.read": { "@cdelisle:matrix.xwiki.com": { "ts": 1490362531500 } } }, "$14903647376189SzDCX:matrix.org": { "m.read": { "@TheGreatNi:matrix.org": { "ts": 1490367765731 } } }, "$149037051967070maZnQ:matrix.org": { "m.read": { "@phrag:nsa.wtf": { "ts": 1490372015035 } } }, "$1490379969169540yhhQz:matrix.org": { "m.read": { "@wipeout:dhp.com": { "ts": 1490380317856 } } }, "$149040411666734HMkxP:ralith.com": { "m.read": { "@YQ.Wang:matrix.org": { "ts": 1490404420184 } } }, "$1490471206474WthJj:vurpo.fi": { "m.read": { "@Mopolo:matrix.org": { "ts": 1490471398675 } } }, "$14904832551901WogAk:t2l.io": { "m.read": { "@rschulman:matrix.org": { "ts": 1490483747389 } } }, "$14904898271985DyAkz:t2l.io": { "m.read": { "@kyalta:matrix.org": { "ts": 1490521349218 } } }, "$14905383494jOGMu:cadair.com": { "m.read": { "@wilko:rens.onl": { "ts": 1490534938926 } } }, "$149055082569491ZkxXN:ralith.com": { "m.read": { "@Famicoman:tomesh.net": { "ts": 1490550832408 } } }, "$149061527610TDCsR:vurpo.fi": { "m.read": { "@mathijs:matrix.vgorcum.com": { "ts": 1497273992825 } } }, "$14906262711891272udMLP:matrix.org": { "m.read": { "@fox_test:matrix.org": { "ts": 1490626770593 } } }, "$149062886464uCfHE:nsa.lol": { "m.read": { "@FBosman:matrix.org": { "ts": 1490629054431 } } }, "$14906363381307jCSUz:lant.uk": { "m.read": { "@goern:matrix.org": { "ts": 1490638145905 } } }, "$1490684090454350kZADs:matrix.org": { "m.read": { "@saadqureshi:matrix.org": { "ts": 1490688328421 } } }, "$1490691582508334zLntU:matrix.org": { "m.read": { "@heinz:matrix.org": { "ts": 1490691620040 } } }, "$149070959255mdSCk:cloud.tgcm.eu": { "m.read": { "@bmwilding:matrix.org": { "ts": 1490713924106 }, "@heluca:matrix.org": { "ts": 1490718705080 } } }, "$14907382642RAsFc:matrix.rkm.id.au": { "m.read": { "@bmiller59test:matrix.org": { "ts": 1490738709694 }, "@roikiermedia:roikier.media": { "ts": 1490746307902 } } }, "$1490855986699438fVDwC:matrix.org": { "m.read": { "@timo:lowpolydev.de": { "ts": 1490860749799 } } }, "$1490875407858031LvoMs:matrix.org": { "m.read": { "@aka:matrix.org": { "ts": 1490876237743 } } }, "$14908773721228hotMw:vurpo.fi": { "m.read": { "@jelmer:matrix.org": { "ts": 1490884226709 } } }, "$14909443341439Rukft:vurpo.fi": { "m.read": { "@magnap:matrix.magnap.dk": { "ts": 1490947233671 } } }, "$149095574817554ZOHcX:matrix.org": { "m.read": { "@trevor:wagwar.com": { "ts": 1490960908360 } } }, "$1490981087273372uGSpL:matrix.org": { "m.read": { "@Stefan:disroot.org": { "ts": 1490981662113 } } }, "$1491032030691783YgsUB:matrix.org": { "m.read": { "@pherr:matrix.pherr.net": { "ts": 1491033890526 } } }, "$14910460111573JhTJc:57north.org.uk": { "m.read": { "@reactormonk:matrix.reactormonk.org": { "ts": 1491046461261 } } }, "$149106095467LqswG:matrix.nordlab-ev.de": { "m.read": { "@daltonfury42:matrix.org": { "ts": 1491062842703 } } }, "$14910829301082234yXwOr:matrix.org": { "m.read": { "@Torxed:matrix.org": { "ts": 1491083548625 } } }, "$14911235581344044qoaue:matrix.org": { "m.read": { "@hamidbilal:matrix.org": { "ts": 1491124408942 } } }, "$14911560402404mIMNA:vurpo.fi": { "m.read": { "@zbychuk:matrix.org": { "ts": 1491156376694 } } }, "$14911800554QIGrq:vurpo.fi": { "m.read": { "@kdar:matrix.org": { "ts": 1491186594129 } } }, "$14911866801843970UckLU:matrix.org": { "m.read": { "@Alyx:overlordalyx.com": { "ts": 1491188409672 } } }, "$14912072251976612xPesV:matrix.org": { "m.read": { "@azata:gazizova.net": { "ts": 1491207231194 } } }, "$14912117571796XovkJ:57north.org.uk": { "m.read": { "@silwol:matrix.org": { "ts": 1491221180551 } } }, "$1491228896603DcDnj:sw1v.org": { "m.read": { "@autmnmute:matrix.org": { "ts": 1491229396289 } } }, "$14912688292596925sHmpP:matrix.org": { "m.read": { "@ira:matrix.org": { "ts": 1491274125548 } } }, "$14913105532FcOXK:linagkar.me": { "m.read": { "@Aileen:matrix.org": { "ts": 1491312091160 }, "@gklech:matrix.org": { "ts": 1491313111963 } } }, "$14913134846belVH:theta.eu.org": { "m.read": { "@test:matrix.org": { "ts": 1491313786278 } } }, "$14913484080pCmYg:faraone.cc": { "m.read": { "@bch:matrix.org": { "ts": 1491370882688 }, "@fraudgod:matrix.org": { "ts": 1491367731842 } } }, "$1491434947449041JWGie:matrix.org": { "m.read": { "@zak:matrix.org": { "ts": 1491436105148 } } }, "$1491481128235OtAMb:kamax.io": { "m.read": { "@fpletz:lodere.es": { "ts": 1491481584688 } } }, "$149148158411XuWsK:lodere.es": { "m.read": { "@rosston:thinkingsauce.com": { "ts": 1491482343351 } } }, "$1491483382729gtBhk:thinkingsauce.com": { "m.read": { "@eneas:matrix.org": { "ts": 1491487435781 } } }, "$1491501562750ZFJMO:sw1v.org": { "m.read": { "@testrsns213:matrix.org": { "ts": 1491505312015 } } }, "$1491512852812iawaV:sw1v.org": { "m.read": { "@aaaaAaaaa:matrix.org": { "ts": 1491533274226 } } }, "$1491557245603RXolf:57north.org.uk": { "m.read": { "@kim:sosnowkadub.de": { "ts": 1491557271972 } } }, "$14915712785207RKnac:elynx.fr": { "m.read": { "@KingKong:matrix.org": { "ts": 1491571282018 } } }, "$149157156211355ZyaQg:matrix.org": { "m.read": { "@e:matrix.org": { "ts": 1491572096142 } } }, "$1491608277429532KGsZh:matrix.org": { "m.read": { "@ek:wobscale.chat": { "ts": 1491608291587 } } }, "$1491639073791tAImT:57north.org.uk": { "m.read": { "@judge_dom:screeps.domnomnom.com": { "ts": 1491639096164 } } }, "$149163910093TQiQq:screeps.domnomnom.com": { "m.read": { "@root.force:matrix.org": { "ts": 1491667673624 } } }, "$1491844446154386TqpCg:matrix.org": { "m.read": { "@drb420:matrix.org": { "ts": 1491844680380 }, "@falko:matrix.habales.de": { "ts": 1491847553925 } } }, "$1491862252385046NZyMu:matrix.org": { "m.read": { "@sam_w:wlcx.cc": { "ts": 1491864980287 } } }, "$149186499211exsRY:wlcx.cc": { "m.read": { "@christian:dependable.space": { "ts": 1491870946150 } } }, "$149191645986VYael:theta.eu.org": { "m.read": { "@eeeeeta9:matrix.org": { "ts": 1491916493485 } } }, "$1491919756501usfXI:sw1v.org": { "m.read": { "@mikos:matrix.org": { "ts": 1491919770387 } } }, "$1492048753508909iINYF:matrix.org": { "m.read": { "@magicienap:matrix.org": { "ts": 1492050046515 } } }, "$14921678691142vTymY:theta.eu.org": { "m.read": { "@peterhoeg:matrix.org": { "ts": 1492169262234 } } }, "$14921975509oLzFZ:matrix.zottel.net": { "m.read": { "@aperezdc:matrix.org": { "ts": 1493212901308 }, "@moyamo:matrix.org": { "ts": 1496573212754 }, "@yookoala:matrix.org": { "ts": 1494927656262 } } }, "$1492253607445198WzFiL:matrix.org": { "m.read": { "@htc:matrix.org": { "ts": 1492253611615 } } }, "$14923202371023395hhZWV:matrix.org": { "m.read": { "@uncle.von.cloud:matrix.org": { "ts": 1492344617406 } } }, "$14924269721899382gbiAM:matrix.org": { "m.read": { "@naser9878:matrix.org": { "ts": 1492441811472 } } }, "$1492450356224VhwjJ:firc.de": { "m.read": { "@Caerdwyn:home.rdash.in": { "ts": 1492476671720 } } }, "$1492524882621431ZTUhh:matrix.org": { "m.read": { "@kevin:potatofrom.space": { "ts": 1492525581894 } } }, "$14925271281079dEecY:sw1v.org": { "m.read": { "@abbot_test:matrix.org": { "ts": 1492527719286 } } }, "$1492543287262TVqAu:kamax.io": { "m.read": { "@Eliza:matrix.org": { "ts": 1492543947124 } } }, "$14925924632646aebZt:half-shot.uk": { "m.read": { "@rubo77:matrix.org": { "ts": 1492592468155 } } }, "$14926137211597099fqwQh:matrix.org": { "m.read": { "@dahlke:matrix.org": { "ts": 1492614265445 } } }, "$1492618372597AbRZU:krtdex.com": { "m.read": { "@chittti:matrix.org": { "ts": 1492627970009 } } }, "$14927438281408417Wsihi:matrix.org": { "m.read": { "@LinAGKar:linagkar.me": { "ts": 1492756307120 }, "@mhr:matrix.org": { "ts": 1492751995779 } } }, "$1492808653445069yJnxF:matrix.org": { "m.read": { "@jack:jack-server.com": { "ts": 1492808738105 } } }, "$1492845754793344sYgzK:matrix.org": { "m.read": { "@Jackneill:matrix.org": { "ts": 1492875233102 } } }, "$14929452592163IaQbC:57north.org.uk": { "m.read": { "@kodo:tyler.cat": { "ts": 1492955160551 } } }, "$14930313623226huMOF:matrix.org": { "m.read": { "@Dalar:matrix.org": { "ts": 1493035433552 } } }, "$14930590262490lzPih:57north.org.uk": { "m.read": { "@david.blewett:dawninglight.net": { "ts": 1493153018355 } } }, "$1493074885471143tLoko:matrix.org": { "m.read": { "@joseph:envelope.xyz": { "ts": 1493075570881 } } }, "$1493108670779745MPmpi:matrix.org": { "m.read": { "@Negzi:matrix.org": { "ts": 1493109241864 } } }, "$1493132259209UinCc:half-shot.uk": { "m.read": { "@hugo:freigeist.io": { "ts": 1493141091231 }, "@m0lok:matrix.org": { "ts": 1493139099696 } } }, "$149314699211402ORfWe:freigeist.io": { "m.read": { "@archange:activis.me": { "ts": 1493152884361 } } }, "$1493187644813DjvnQ:sw1v.org": { "m.read": { "@lb:matrix.org": { "ts": 1493195218450 } } }, "$1493197393873HTxmo:sw1v.org": { "m.read": { "@sijmen:sijmenschoon.nl": { "ts": 1493199446934 } } }, "$149321943010EjdXQ:gruenhage.xyz": { "m.read": { "@thiras:matrix.org": { "ts": 1493219754554 } } }, "$1493238463235tETJJ:ralith.com": { "m.read": { "@psaavedra:igalia.com": { "ts": 1493243265945 } } }, "$14932440091203Onhhh:igalia.com": { "m.read": { "@monkeytest118:matrix.org": { "ts": 1493267248484 }, "@psaavedra:matrix-beta.igalia.com": { "ts": 1493244083134 } } }, "$149330733057GKymo:jki.re": { "m.read": { "@battleturd:matrix.org": { "ts": 1493311014434 } } }, "$1493408767281KRHyv:kek.community": { "m.read": { "@walle303:matrix.eastcoast.hosting": { "ts": 1493408769290 } } }, "$1493423017622111MXXZf:matrix.org": { "m.read": { "@simonklb:matrix.org": { "ts": 1495052168194 } } }, "$14934710611042703iHLol:matrix.org": { "m.read": { "@duo.oratar:matrix.ensign.cloud": { "ts": 1493480904710 } } }, "$1493563821885735nOTpE:matrix.org": { "m.read": { "@lhunath:lyndir.com": { "ts": 1493584551255 }, "@pik:matrix.amaznev.net": { "ts": 1493564198073 } } }, "$1493658085293qNRvj:krtdex.com": { "m.read": { "@jeff:cloud.agnos.is": { "ts": 1493658243523 } } }, "$14936826391okVCN:boli.rocks": { "m.read": { "@Anusmith:matrix.org": { "ts": 1493712388579 }, "@CharmedBaryon:matrix.org": { "ts": 1493735523011 }, "@kevind:sh.dalleau.me": { "ts": 1493732966163 }, "@projectmoon:agnos.is": { "ts": 1493717550053 } } }, "$1493756335529288FbJNO:matrix.org": { "m.read": { "@ivegotasthma:matrix.org": { "ts": 1493759406217 } } }, "$1493808267371ylYZQ:kamax.io": { "m.read": { "@shadowtux:matrix.org": { "ts": 1493810467967 } } }, "$1493811784390bIIhb:kamax.io": { "m.read": { "@zwily:matrix.org": { "ts": 1493812295064 } } }, "$149381233527535juTIb:matrix.org": { "m.read": { "@aylesm:matrix.org": { "ts": 1493812957078 } } }, "$149381370945245cgDDq:matrix.org": { "m.read": { "@Dor:matrix.org": { "ts": 1493814734702 }, "@filharvey:matrix.org": { "ts": 1493814255318 } } }, "$149381693188229ihpfE:matrix.org": { "m.read": { "@Telc:matrix.org": { "ts": 1493818569979 }, "@longsleep:matrix.org": { "ts": 1493823754990 } } }, "$1493837022412010drnYs:matrix.org": { "m.read": { "@kartikeys:matrix.org": { "ts": 1493918275524 } } }, "$1493841019475452XwIxi:matrix.org": { "m.read": { "@dag:idlechat.org": { "ts": 1493844939587 } } }, "$149384494415wGUQn:idlechat.org": { "m.read": { "@jan:matrix.myown.one": { "ts": 1493850173741 } } }, "$1493865230327cyRuA:boli.rocks": { "m.read": { "@justin:laelath.us": { "ts": 1493865535080 } } }, "$1493879803125ZzbMF:berigora.net": { "m.read": { "@finalstate:matrix.org": { "ts": 1493884168192 } } }, "$14938973231154604Ojapr:matrix.org": { "m.read": { "@neosam:matrix.org": { "ts": 1493897966735 } } }, "$149390033574DgDaz:gruenhage.xyz": { "m.read": { "@Cradam:matrix.org": { "ts": 1493904128396 } } }, "$149391059631aVKGq:boli.rocks": { "m.read": { "@romain.lecarrer:matrix.org": { "ts": 1493910930777 } } }, "$14939176007193MUSTD:matrix.org": { "m.read": { "@wolfgang:voos.info": { "ts": 1493917892502 } } }, "$1493919092177GROKu:berigora.net": { "m.read": { "@martinklepsch:matrix.org": { "ts": 1493919107021 } } }, "$14939805481420GoQmb:vurpo.fi": { "m.read": { "@Mattias.Wass:office.wisbytankers.se": { "ts": 1493984314625 } } }, "$1493984393131WhLBS:office.wisbytankers.se": { "m.read": { "@mattias.wass:matrix.org": { "ts": 1493986289554 } } }, "$1494028397499211QZmKa:matrix.org": { "m.read": { "@xiphneo:matrix.org": { "ts": 1494044681079 } } }, "$14940602081517foGOG:vurpo.fi": { "m.read": { "@dmitru:matrix.org": { "ts": 1494067702226 } } }, "$1494083573205qJftD:sw1v.org": { "m.read": { "@andreas:matrix.notice.at": { "ts": 1494084299399 } } }, "$14940927408nxtin:horel.org": { "m.read": { "@neurochemical:matrix.org": { "ts": 1494095251589 } } }, "$1494147012491wcZGX:riot.ovh": { "m.read": { "@jeremycahill:matrix.org": { "ts": 1494147920059 } } }, "$14941648291402743rdRZF:matrix.org": { "m.read": { "@yannick:veeedo.com": { "ts": 1494167829348 } } }, "$14941784391513602LKDID:matrix.org": { "m.read": { "@alozie:matrix.org": { "ts": 1494178444379 }, "@meznak:matrix.org": { "ts": 1494179237357 } } }, "$1494191826218iCpar:sw1v.org": { "m.read": { "@jani.siivola:matrix.org": { "ts": 1494226480394 }, "@wtfwtfdef:matrix.org": { "ts": 1494216303959 } } }, "$1494263154419IFsLV:matrix.notice.at": { "m.read": { "@antilopa:disroot.org": { "ts": 1494267395063 } } }, "$1494272387106ZhYNZ:horel.org": { "m.read": { "@228943:matrix.org": { "ts": 1494278184826 } } }, "$14943098972623916Tetew:matrix.org": { "m.read": { "@Thibaut:horel.org": { "ts": 1494310589237 } } }, "$1494310594138iUpHk:horel.org": { "m.read": { "@rvalles:matrix.org": { "ts": 1494319817448 }, "@uoltah:matrix.org": { "ts": 1494323061241 } } }, "$1494423796927008YyQwl:matrix.org": { "m.read": { "@John77:matrix.org": { "ts": 1494424406381 } } }, "$1494426231954973oQmvW:matrix.org": { "m.read": { "@cows:matrix.org": { "ts": 1494436394732 } } }, "$149443988714cKzQo:sw1v.org": { "m.read": { "@G-Ray:matrix.org": { "ts": 1494450777758 }, "@phirsch:matrix.org": { "ts": 1494444640740 } } }, "$1494496833617tSjCr:gruenhage.xyz": { "m.read": { "@yagelnet:matrix.org": { "ts": 1494496885816 } } }, "$1494578206778pLtAg:krtdex.com": { "m.read": { "@nicorikken:matrix.org": { "ts": 1494578555227 } } }, "$149458067676ElhHv:matrix.bingo-boom.ru": { "m.read": { "@yaeh:matrix.org": { "ts": 1494581446418 } } }, "$1494603157284604naNAZ:matrix.org": { "m.read": { "@fle:matrix.org": { "ts": 1494603483416 }, "@laotze:matrix.org": { "ts": 1494603667816 } } }, "$1494681541864922EzcSB:matrix.org": { "m.read": { "@hendrik:h3ndr1k.de": { "ts": 1494746489852 }, "@sorch:matrix.org": { "ts": 1494723612286 } } }, "$14947892216750RteKP:exul.org": { "m.read": { "@adam:zientek.pl": { "ts": 1494789983036 } } }, "$14948096491772869HxyNX:matrix.org": { "m.read": { "@Zenexer:matrix.org": { "ts": 1494819364742 } } }, "$1494857445113020ARYkO:matrix.org": { "m.read": { "@martinkl:matrix.org": { "ts": 1494857871160 } } }, "$14948720051iYkic:wgnr.io": { "m.read": { "@thaumiel:matrix.org": { "ts": 1494872653966 } } }, "$1494872658288570IXUOZ:matrix.org": { "m.read": { "@mittwinter:wgnr.io": { "ts": 1494874762489 } } }, "$1494879093365548oetLg:matrix.org": { "m.read": { "@Pezzle:matrix.org": { "ts": 1494879095707 } } }, "$149489374614UwaCa:handmadedev.org": { "m.read": { "@deg_at_work:matrix.org": { "ts": 1494913863859 } } }, "$1494926752306RTGsu:sw1v.org": { "m.read": { "@dmitry_da:matrix.org": { "ts": 1494927988970 } } }, "$14949458031968bfalP:t2l.io": { "m.read": { "@sophiehp:matrix.org": { "ts": 1494949586159 } } }, "$14949595941061047OijYq:matrix.org": { "m.read": { "@sorch:ilp.moe": { "ts": 1494962417276 } } }, "$14950024161418109uapiF:matrix.org": { "m.read": { "@dovf:matrix.org": { "ts": 1495003384754 } } }, "$14950427871797247AWUuf:matrix.org": { "m.read": { "@ldionmarcil:matrix.org": { "ts": 1495060411775 } } }, "$14950976752254103OYAbS:matrix.org": { "m.read": { "@neonxp:matrix.org": { "ts": 1495098248670 } } }, "$1495103641332rSAoR:msgs.tk": { "m.read": { "@PrasannaEppa:matrix.org": { "ts": 1495103703325 } } }, "$149511386541aJjoZ:jki.re": { "m.read": { "@OOAK:matrix.org": { "ts": 1495114541855 } } }, "$1495115689686RKTHs:sw1v.org": { "m.read": { "@khorne:khorne.me": { "ts": 1495177670404 } } }, "$149511764134MumAE:krtdex.com": { "m.read": { "@indgamer:matrix.org": { "ts": 1495117672750 } } }, "$1495128853327nJbAi:boli.rocks": { "m.read": { "@swastik:matrix.org": { "ts": 1495128880112 } } }, "$1495160679123HDttX:t2l.io": { "m.read": { "@220455:matrix.org": { "ts": 1495165057269 } } }, "$149520533835643WfkeI:matrix.org": { "m.read": { "@alien:matrix.org": { "ts": 1495205346172 } } }, "$1495229385322557mWhUB:matrix.org": { "m.read": { "@abit2:matrix.org": { "ts": 1495271601175 } } }, "$14952304358jTCZT:pfe.io": { "m.read": { "@chenxiaozhi:matrix.org": { "ts": 1495241971508 } } }, "$1495241995429947aBZvG:matrix.org": { "m.read": { "@Spferical:matrix.org": { "ts": 1495260475851 } } }, "$1495283513873VMDHp:riot.ovh": { "m.read": { "@evck:matrix.org": { "ts": 1495309682323 } } }, "$1495365872196YXhaw:disroot.org": { "m.read": { "@sYDlG2oxoPDJ4sQ1np6R:matrix.org": { "ts": 1495378571357 } } }, "$14953884761397339kvqEe:matrix.org": { "m.read": { "@zaz:poneybl.eu": { "ts": 1495446491319 } } }, "$14954605071934412DuBoF:matrix.org": { "m.read": { "@doublemalt:cloudfleet.io": { "ts": 1495528139674 } } }, "$1495485969209111KvlDW:matrix.org": { "m.read": { "@chris:settgast.org": { "ts": 1495486262623 } } }, "$149549467510488KpZOK:noepito.me": { "m.read": { "@htpl:matrix.org": { "ts": 1495499586783 } } }, "$14955784011GSrjl:pcxserver.com": { "m.read": { "@MoneyPenny:matrix.org": { "ts": 1495579246078 } } }, "$14956293691443735Ondfx:matrix.org": { "m.read": { "@Sneurlax:matrix.org": { "ts": 1495631652219 } } }, "$14956437431683834gmNhn:matrix.org": { "m.read": { "@bin7me:matrix.org": { "ts": 1495643912635 } } }, "$149564615995BFXAo:t2l.io": { "m.read": { "@txgvnn:matrix.org": { "ts": 1495646204771 } } }, "$1495741134491711mJzjB:matrix.org": { "m.read": { "@okashi:loliarmy.me": { "ts": 1495741160784 } } }, "$1495765299813627QwKRG:matrix.org": { "m.read": { "@oztko:noepito.me": { "ts": 1495767987670 } } }, "$1495775952953061fIBsu:matrix.org": { "m.read": { "@tdfischer:hackerbots.net": { "ts": 1505835743393 } } }, "$14957906291083677JgJpY:matrix.org": { "m.read": { "@jaijszler:matrix.org": { "ts": 1495792276708 } } }, "$14958112011283569PSrUJ:matrix.org": { "m.read": { "@mp1:p2px.me": { "ts": 1495811553578 } } }, "$14958137231316529AhfiU:matrix.org": { "m.read": { "@cdhagmann:matrix.org": { "ts": 1495813725117 } } }, "$149592670119Mxsil:yhager.com": { "m.read": { "@atc:matrix.org": { "ts": 1495929890217 } } }, "$14959416712379965rKrdF:matrix.org": { "m.read": { "@mithrandi:matrix.org": { "ts": 1495951012116 } } }, "$14959715112554443CGscq:matrix.org": { "m.read": { "@noteness:matrix.org": { "ts": 1495974350919 } } }, "$14960193432951106ZMKhc:matrix.org": { "m.read": { "@roccen:teraspek.com": { "ts": 1496025741678 } } }, "$149605697042CFXxn:disroot.org": { "m.read": { "@cw:cw.doesntexist.com": { "ts": 1496058307744 } } }, "$14960726253378631exdvt:matrix.org": { "m.read": { "@Wolffy:matrix.org": { "ts": 1496072642157 } } }, "$14961062063726156Oaiqf:matrix.org": { "m.read": { "@yhager:yhager.com": { "ts": 1496122974990 } } }, "$14961243203847088UpqpD:matrix.org": { "m.read": { "@Ciblia:matrix.org": { "ts": 1496129219998 } } }, "$14961436654008184AbNsP:matrix.org": { "m.read": { "@Ocker:matrix.org": { "ts": 1496215489435 }, "@offlinenik1:matrix.org": { "ts": 1496147279365 } } }, "$1496245061298750jQIZp:matrix.org": { "m.read": { "@Nowee:matrix.org": { "ts": 1496250440167 } } }, "$1496280533751719vxTim:matrix.org": { "m.read": { "@bchris:matrix.org": { "ts": 1496305025082 }, "@ov_maslov:matrix.bingo-boom.ru": { "ts": 1497866081011 } } }, "$14963238521132687qqzCZ:matrix.org": { "m.read": { "@helmut:birdee.at": { "ts": 1496331574218 } } }, "$149634097082FXQka:msgs.tk": { "m.read": { "@djokeefe:matrix.org": { "ts": 1496344622873 } } }, "$14963627024MERpE:its.chat": { "m.read": { "@146376:matrix.org": { "ts": 1496362809622 } } }, "$149638588043Robod:disroot.org": { "m.read": { "@alex:maximum.guru": { "ts": 1496385894797 } } }, "$14963968181904803QmVfc:matrix.org": { "m.read": { "@waz1:matrix.org": { "ts": 1496407651619 } } }, "$14964553672570080ZcyqQ:matrix.org": { "m.read": { "@alxu:alxu.ca": { "ts": 1496495136784 }, "@neiljp:matrix.org": { "ts": 1496456818273 } } }, "$14965641153402498rauFh:matrix.org": { "m.read": { "@MTRNord:matrix.eclabs.de": { "ts": 1496565432342 } } }, "$14966139163861962tMqAa:matrix.org": { "m.read": { "@Ansarrahman:matrix.org": { "ts": 1496614804443 } } }, "$14966347434141584znsdN:matrix.org": { "m.read": { "@boli:boli.rocks": { "ts": 1496637904498 } } }, "$14966537864335191hgWSJ:matrix.org": { "m.read": { "@fuckdiscorduptheass:matrix.org": { "ts": 1496655770163 } } }, "$14966665044448265fBMGA:matrix.org": { "m.read": { "@t3chguy:matrix.wdg.ovh": { "ts": 1496667184929 } } }, "$14966682324471248Aarsl:matrix.org": { "m.read": { "@abgan68:matrix.org": { "ts": 1496668233691 } } }, "$1496676172692tCnDu:kamax.io": { "m.read": { "@tttterhbg3:matrix.org": { "ts": 1496695352679 } } }, "$14966768254587540HpHJV:matrix.org": { "m.read": { "@pizza:matrix.org": { "ts": 1496680205634 } } }, "$14967002394915233HKTMq:matrix.org": { "m.read": { "@dylanger:onedefence.com": { "ts": 1496704910441 } } }, "$14967177725094334NOeWi:matrix.org": { "m.read": { "@tolot:jupiter.solar-empire.de": { "ts": 1496727751537 } } }, "$149672776681QPJrw:jupiter.solar-empire.de": { "m.read": { "@alfie:matrix.org": { "ts": 1496730885422 }, "@sergei.kaganski:matrix.org": { "ts": 1496731242035 } } }, "$14967533319Yzeid:timepath.xyz": { "m.read": { "@brainbreaker:matrix.org": { "ts": 1501774001941 }, "@fabrixxm:matrix.org": { "ts": 1499338881308 }, "@thomersch:matrix.org": { "ts": 1499090955705 } } }, "$1496761494168aOBru:msgs.tk": { "m.read": { "@alex:lexserv.xyz": { "ts": 1496761501264 } } }, "$1496761524253JfejX:lexserv.xyz": { "m.read": { "@oddvar:matrix.org": { "ts": 1496768402293 } } }, "$149678121076SsxDj:kamax.io": { "m.read": { "@colonelkrud:matrix.colonelkrud.com": { "ts": 1496798956502 } } }, "$1496826653605188VsTpY:matrix.org": { "m.read": { "@av8ta:matrix.org": { "ts": 1496828579225 } } }, "$1496828582622319WzFXO:matrix.org": { "m.read": { "@Gigaa:chat.giga.is": { "ts": 1496829320719 } } }, "$1496877319263746CsLeM:matrix.org": { "m.read": { "@maxwell44:matrix.org": { "ts": 1496878326167 } } }, "$1496934276788TlGbp:sw1v.org": { "m.read": { "@arnoldpaye:matrix.org": { "ts": 1496934299873 } } }, "$149694335910Lvijw:allthingssquared.com": { "m.read": { "@SpEcHiDe_riot:matrix.org": { "ts": 1496944543808 } } }, "$1496990792602318iDoDk:matrix.org": { "m.read": { "@chazdiezal:allthingssquared.com": { "ts": 1497016369347 } } }, "$1496998365661184SXfKr:matrix.org": { "m.read": { "@dax:matrix.org": { "ts": 1497051312138 }, "@floogulinc:matrix.org": { "ts": 1497029768978 } } }, "$14971043686349BSMcX:riot.ovh": { "m.read": { "@BeS:matrix.org": { "ts": 1497104466376 } } }, "$14971045021651274GyJWO:matrix.org": { "m.read": { "@reactormonk:reactormonk.org": { "ts": 1497110200597 } } }, "$14972083462508859JmBIt:matrix.org": { "m.read": { "@Bitti:mybitti.de": { "ts": 1497208401221 } } }, "$14972113249YbUOj:kyriasis.com": { "m.read": { "@fxrh:matrix.org": { "ts": 1497211532141 } } }, "$14972166352599018vYdkd:matrix.org": { "m.read": { "@tim:stoo.org": { "ts": 1497216963269 } } }, "$14972624102973022uPMKD:matrix.org": { "m.read": { "@gabrin:matrix.org": { "ts": 1497264394255 } } }, "$14972774906816GVsQP:riot.ovh": { "m.read": { "@ekoifish:matrix.org": { "ts": 1497281150577 } } }, "$1497297006247ccvNs:t2l.io": { "m.read": { "@gonight:noepito.me": { "ts": 1497301626213 } } }, "$1497304113479896UVOXP:matrix.org": { "m.read": { "@tulir:maunium.net": { "ts": 1497334669120 } } }, "$1497350416204zQBWl:matrix.org": { "m.read": { "@Druecker:matrix.org": { "ts": 1497350806596 } } }, "$149735987547613FQnfZ:matrix.org": { "m.read": { "@jithinsri:matrix.org": { "ts": 1497359876462 } } }, "$1497403664643285piYnQ:matrix.org": { "m.read": { "@phenix2417:matrix.org": { "ts": 1497410238943 }, "@rociously:matrix.org": { "ts": 1497403666242 } } }, "$149753784167bUkCU:jki.re": { "m.read": { "@ryzokuken:matrix.org": { "ts": 1497537877534 } } }, "$14975402322101313bIcxl:matrix.org": { "m.read": { "@dvillarreal:matrix.org": { "ts": 1497541644817 }, "@f0x52:matrix.org": { "ts": 1497561507347 }, "@orkun:matrix.org": { "ts": 1497555426749 } } }, "$14976182567739xGsjN:riot.ovh": { "m.read": { "@CaptainOblivious:matrix.org": { "ts": 1497619256522 } } }, "$1497691319888663FDMPn:matrix.org": { "m.read": { "@lieuwex:matrix.org": { "ts": 1497691764038 } } }, "$1497693173901038yTFXa:matrix.org": { "m.read": { "@marek:matrix.org": { "ts": 1497710425107 } } }, "$14977137187953VRPDN:riot.ovh": { "m.read": { "@aetin0:matrix.org": { "ts": 1497715257360 } } }, "$1497736861239139BncgY:matrix.org": { "m.read": { "@schroeffu:matrix.org": { "ts": 1497740091784 } } }, "$14977407151ABCwx:frasinich.in.ua": { "m.read": { "@penguin42:matrix.penguin42.com": { "ts": 1497740728159 } } }, "$14977407530BaPJL:matrix.penguin42.com": { "m.read": { "@denys:frasinich.in.ua": { "ts": 1497740772260 } } }, "$14977409842PSyHO:frasinich.in.ua": { "m.read": { "@joenio:matrix.org": { "ts": 1497751986748 } } }, "$1497757232402502tnHAj:matrix.org": { "m.read": { "@VoxelDan:matrix.org": { "ts": 1497768469024 } } }, "$1497777142522008BQjoX:matrix.org": { "m.read": { "@hakimus:hakimus.de": { "ts": 1497795081919 } } }, "$1497779843132CkMnH:matrix.org": { "m.read": { "@Mr.Pickle:matrix.org": { "ts": 1497780086980 }, "@konfou:matrix.org": { "ts": 1497788625349 } } }, "$149778862732421eoMxt:matrix.org": { "m.read": { "@czen:protect.moe": { "ts": 1497791639685 } } }, "$1497800676617uRuQM:disroot.org": { "m.read": { "@testuser:matrix.aeminium.org": { "ts": 1497800730263 } } }, "$14978007452EiMRN:matrix.aeminium.org": { "m.read": { "@Fahrenholtz:matrix.org": { "ts": 1497810381481 } } }, "$1497870138105eNAlF:msgs.tk": { "m.read": { "@ahdev:matrix.org": { "ts": 1497872385795 } } }, "$14978811241652jVaUc:matrix.nordlab-ev.de": { "m.read": { "@hugo8888:matrix.org": { "ts": 1497884345562 } } }, "$149789467064040evzFJ:matrix.org": { "m.read": { "@GreyHands:matrix.org": { "ts": 1497944620220 } } }, "$149789568420326rgoCK:matrix.org": { "m.read": { "@elcyborg:matrix.elcyb.org": { "ts": 1497899749615 }, "@penguin42:matrix.org": { "ts": 1497901217889 } } }, "$14979692223498124uGSNU:matrix.org": { "m.read": { "@wilt:matrix.org": { "ts": 1497973100899 } } }, "$1497979104165dEXqa:matrix.nordlab-ev.de": { "m.read": { "@Xenar:matrix.org": { "ts": 1497979370063 } } }, "$149799185135dSeeA:t2l.io": { "m.read": { "@fossie:matrix.forster.cc": { "ts": 1497992002341 } } }, "$14979947973861750xkPHO:matrix.org": { "m.read": { "@jimscarver:matrix.org": { "ts": 1497995290569 } } }, "$1498007683424LQoWO:kamax.io": { "m.read": { "@unlmtd:matrix.org": { "ts": 1498024889566 } } }, "$1498079345400607qEBtM:matrix.org": { "m.read": { "@guillaume.didier:binets.fr": { "ts": 1498079686566 } } }, "$1498113651373BkAWY:matrix.zottel.net": { "m.read": { "@richvdh:matrix.org": { "ts": 1498130846960 } } }, "$1498122564797439PeKeH:matrix.org": { "m.read": { "@christ0phe:matrix.org": { "ts": 1498124187084 } } }, "$14981594661278366UPtsf:matrix.org": { "m.read": { "@niklas:matrix.niklasfi.de": { "ts": 1498159589184 } } }, "$14982204322240icAGw:gottsnack.net": { "m.read": { "@alefburzmali:matrix.org": { "ts": 1498220627558 } } }, "$1498234079143863yDlxD:matrix.org": { "m.read": { "@gitgud:banter.city": { "ts": 1498266481608 }, "@jfalarie:matrix.org": { "ts": 1498235318428 } } }, "$14982665025dMoMc:banter.city": { "m.read": { "@seth:banter.city": { "ts": 1507592525373 } } }, "$1498300024736498gVaIK:matrix.org": { "m.read": { "@david:davidar.io": { "ts": 1498300395102 } } }, "$1498320708900757KiXcg:matrix.org": { "m.read": { "@dtygel:matrix.eita.org.br": { "ts": 1498320713724 } } }, "$1498326041953947vZTJI:matrix.org": { "m.read": { "@fgaz:matrix.org": { "ts": 1498330584231 }, "@nonin:matrix.org": { "ts": 1498330629413 } } }, "$14983876169116kUsjN:riot.ovh": { "m.read": { "@almereyda:matrix.org": { "ts": 1498387618239 } } }, "$14983876361424260fdURe:matrix.org": { "m.read": { "@meeh:matrix.org": { "ts": 1498388445615 } } }, "$149840980179dHHSW:matrixim.cc": { "m.read": { "@markrwilliams:matrix.org": { "ts": 1498410898447 } } }, "$14984195591709001hvSAG:matrix.org": { "m.read": { "@solace:matrix.org": { "ts": 1498423043558 } } }, "$14984373201882596SiiVh:matrix.org": { "m.read": { "@USER122:matrix.org": { "ts": 1498444433332 }, "@lukeb:matrix.org": { "ts": 1498466742367 } } }, "$149848055514LAFbn:internet-portal.cz": { "m.read": { "@babolivier:matrix.org": { "ts": 1498482950529 }, "@soltix:matrix.netzgehirn.de": { "ts": 1498481530761 } } }, "$14985493493050875vKXgd:matrix.org": { "m.read": { "@frabrunelle:matrix.org": { "ts": 1498551228523 } } }, "$1498584240110593cIevS:matrix.org": { "m.read": { "@DzzzzzzR:matrix.org": { "ts": 1498585793694 } } }, "$1498585814132083qMLZD:matrix.org": { "m.read": { "@ehayel:matrix.org": { "ts": 1498592971971 } } }, "$1498606969422176CSRdO:matrix.org": { "m.read": { "@ratvachefolle:damnesdelinter.net": { "ts": 1498607136626 } } }, "$149864037131KWdnN:magnap.dk": { "m.read": { "@zboerner:phanerox.com": { "ts": 1498645208067 } } }, "$14986483535532CITrX:matrix.bingo-boom.ru": { "m.read": { "@w1r0x:matrix.org": { "ts": 1498648358204 } } }, "$14986567706324rIgJl:matrix.bingo-boom.ru": { "m.read": { "@viderizer:paivola.fi": { "ts": 1498656820472 } } }, "$149865731666XVHVL:kvlt.ee": { "m.read": { "@martin:matrix.homply.xyz": { "ts": 1498675344844 } } }, "$14986993531446258ZZYMP:matrix.org": { "m.read": { "@-Arne:matrix.org": { "ts": 1498709792008 }, "@krskrs:matrix.org": { "ts": 1498719198553 } } }, "$14987274121685803SAYak:matrix.org": { "m.read": { "@sjeanne:matrix.org": { "ts": 1498728829867 } } }, "$14987600767cmuuC:t2l.io": { "m.read": { "@kooda:upyum.com": { "ts": 1498774198979 } } }, "$14987653981612bDPyV:hispagatos.org": { "m.read": { "@Remram:matrix.org": { "ts": 1498775414598 }, "@meeh:greyhat.im": { "ts": 1498767788543 } } }, "$1498780540800tCtJh:57north.org.uk": { "m.read": { "@Willferal:matrix.org": { "ts": 1498791963481 } } }, "$1498798930669554ysVMK:matrix.org": { "m.read": { "@ibrokemypie:matrix.org": { "ts": 1498799550248 } } }, "$1498808657122HAwyE:matrix.zottel.net": { "m.read": { "@rek2hispagatos:matrix.org": { "ts": 1498808677558 } } }, "$1498808686745364eBzWg:matrix.org": { "m.read": { "@donpdonp:matrix.org": { "ts": 1498843830405 } } }, "$149896234319Fihsg:t2l.io": { "m.read": { "@kesterite:matrix.org": { "ts": 1498977612108 } } }, "$14989875211535458oEbim:matrix.org": { "m.read": { "@bobtest1:matrix.org": { "ts": 1498991514718 } } }, "$14990725842vBvMz:sw1v.org": { "m.read": { "@cturner:igalia.com": { "ts": 1499072862828 } } }, "$14990842472360893RNuno:matrix.org": { "m.read": { "@edzob:matrix.org": { "ts": 1499084257221 } } }, "$14991182602978720XsiXU:matrix.org": { "m.read": { "@gavinjohn.noonan:matrix.org": { "ts": 1499118269985 } } }, "$1499119124383Ofgaw:unixpimps.net": { "m.read": { "@dv:matrix.org": { "ts": 1499121057270 } } }, "$14991211333042425LrYeG:matrix.org": { "m.read": { "@DonViktorio:matrix.org": { "ts": 1499121333117 }, "@matthias:edgeryders.eu": { "ts": 1499158736340 } } }, "$1499234904642yTJfQ:ralith.com": { "m.read": { "@tgzhujik:matrix.org": { "ts": 1499254716109 } } }, "$14992396444700676UpTAP:matrix.org": { "m.read": { "@disperso:matrix.org": { "ts": 1499246474192 } } }, "$1499255269802KZUMz:riot.ovh": { "m.read": { "@Bitti:miui-germany.de": { "ts": 1499256104968 } } }, "$14992590644882324icHtG:matrix.org": { "m.read": { "@olive:chat.happycom.org": { "ts": 1499259218421 } } }, "$14992739645092542tauio:matrix.org": { "m.read": { "@shamil:matrix.shamilk.me": { "ts": 1499274011228 } } }, "$149932342710sXEak:icymatrix.ml": { "m.read": { "@Snipper:matrix.org": { "ts": 1499327031039 } } }, "$149933333322Ngwad:firematrix.ml": { "m.read": { "@dan.i.l:matrix.org": { "ts": 1499333513748 } } }, "$1499347624640505zlmvW:matrix.org": { "m.read": { "@haloha:matrix.org": { "ts": 1499347633376 } } }, "$14993723212GYYsV:berigora.net": { "m.read": { "@VladoB:matrix.org": { "ts": 1499382503608 }, "@chensixian:matrix.org": { "ts": 1499386979769 }, "@de5calante:matrix.org": { "ts": 1499402885692 } } }, "$1499451505240659hDVra:matrix.org": { "m.read": { "@aviraldg:matrix.org": { "ts": 1499462771199 } } }, "$1499461178374763vhMOj:matrix.org": { "m.read": { "@daniel:danieldent.qa2.com": { "ts": 1499461231778 } } }, "$1499462724227nfWrh:sw1v.org": { "m.read": { "@hef:synapse.arbitrarion.com": { "ts": 1499462772268 } } }, "$1499469755477142vNTIu:matrix.org": { "m.read": { "@faguoma:matrix.org": { "ts": 1499469921576 } } }, "$1499502679720966rtVYy:matrix.org": { "m.read": { "@Raivice:matrix.org": { "ts": 1499503011188 } } }, "$1499508008754229bxtsK:matrix.org": { "m.read": { "@ander:kvlt.ee": { "ts": 1499508525348 } } }, "$1499511860780569MnVEz:matrix.org": { "m.read": { "@levsha:matrix.org": { "ts": 1499516250562 } } }, "$1499583097141getYQ:theta.eu.org": { "m.read": { "@Shrike:matrix.org": { "ts": 1499589844873 } } }, "$1499617898177IQAnT:matrix.eclabs.de": { "m.read": { "@nemno:kuopzi.nl": { "ts": 1499619296594 } } }, "$1499621112310RlEga:theta.eu.org": { "m.read": { "@vanous:matrix.org": { "ts": 1499621200351 } } }, "$14996278761756789ANXEi:matrix.org": { "m.read": { "@Y4Rv1K:matrix.org": { "ts": 1499669059437 } } }, "$14996471681947369MmgnR:matrix.org": { "m.read": { "@slang:matrix.org": { "ts": 1499666155034 } } }, "$1499696301337fZknc:sw1v.org": { "m.read": { "@holger:matrix.org": { "ts": 1499697112162 } } }, "$1499702365738HGHOi:riot.ovh": { "m.read": { "@titusstahl:matrix.org": { "ts": 1499702376062 } } }, "$14997246951951tcUuh:chat.rios.org.br": { "m.read": { "@skand:matrix.org": { "ts": 1499724732804 } } }, "$149978826911535yZtPK:ralith.com": { "m.read": { "@MTRNord:matrix.ffslfl.net": { "ts": 1499788973549 }, "@sigmawarrior:matrix.org": { "ts": 1499791510734 } } }, "$149980664188WIaYP:theta.eu.org": { "m.read": { "@ronsor2:matrix.org": { "ts": 1499807551094 } } }, "$1499811629648138kvXrD:matrix.org": { "m.read": { "@myriottest:matrix.org": { "ts": 1499822217360 } } }, "$149984658610CoDgT:kardash.su": { "m.read": { "@davetest:matrix.org": { "ts": 1499857413391 } } }, "$1499882225423iBHXW:theta.eu.org": { "m.read": { "@vorpal:matrix.org": { "ts": 1499882587699 } } }, "$1499885623518343fKall:matrix.org": { "m.read": { "@Nurshod55:matrix.org": { "ts": 1499885709763 } } }, "$1499888321558657wxQuW:matrix.org": { "m.read": { "@Wolfe:matrix.org": { "ts": 1499889578754 } } }, "$1499907956811009eVKXB:matrix.org": { "m.read": { "@PhasecoreX:pcxserver.com": { "ts": 1499912019004 }, "@udee:matrix.org": { "ts": 1499911263859 } } }, "$14999500041203985UhzzF:matrix.org": { "m.read": { "@joshb:matrix.org": { "ts": 1499960616640 } } }, "$1499982010669iJUcs:riot.ovh": { "m.read": { "@Shrike:home.shrike.me": { "ts": 1500017086477 } } }, "$150005142511uZWzv:msgs.tk": { "m.read": { "@hlogeon11:matrix.org": { "ts": 1500093401870 } } }, "$150005200769hpMEL:wbdv.nl": { "m.read": { "@usernamer:matrix.org": { "ts": 1500052378324 } } }, "$1500115714767132xGKYp:matrix.org": { "m.read": { "@al:alscs.net": { "ts": 1500126084738 }, "@icy:firematrix.ml": { "ts": 1500124103536 } } }, "$15001576881183005xPqhH:matrix.org": { "m.read": { "@apophys:kubikmilan.sk": { "ts": 1500162344601 } } }, "$15001830451392974nJdsU:matrix.org": { "m.read": { "@Half-Shot:matrix.org": { "ts": 1500236074580 } } }, "$15002272341763076lgkup:matrix.org": { "m.read": { "@Mr.Riddle:matrix.org": { "ts": 1500228783303 }, "@gandhiano:matrix.allmende.io": { "ts": 1500232814419 } } }, "$15002623752101596lnmVC:matrix.org": { "m.read": { "@adam:brap.party": { "ts": 1500264407119 }, "@dare-to-recurse:matrix.org": { "ts": 1500262385446 } } }, "$15002902571ykvwg:alanpearce.eu": { "m.read": { "@alan:alanpearce.eu": { "ts": 1500290673872 } } }, "$15002954451318FWynz:riot.ovh": { "m.read": { "@PaulMitzkin:matrix.org": { "ts": 1500297296015 } } }, "$15003199779841CWQbG:thebeckmeyers.xyz": { "m.read": { "@Yanet:matrix.org": { "ts": 1500319944360 } } }, "$15003333461011757ZcXzR:matrix.org": { "m.read": { "@excelereight:matrix.org": { "ts": 1500333365154 } } }, "$15003642041070FPpNT:matrix.zottel.net": { "m.read": { "@andrew:shadura.me": { "ts": 1500368621298 } } }, "$150036864161RvAeB:shadura.me": { "m.read": { "@mignag:matrix.org": { "ts": 1500370388992 } } }, "$1500384252379RdygV:nsa.lol": { "m.read": { "@pooja.goyal:matrix.org": { "ts": 1500384341845 } } }, "$1500387457398wSRwU:nsa.lol": { "m.read": { "@rodarima:matrix.org": { "ts": 1500402460263 } } }, "$15003880641689665PBORS:matrix.org": { "m.read": { "@a.pierce:matrix.org": { "ts": 1500394915821 } } }, "$1500418896323OaLnt:kamax.io": { "m.read": { "@Jetable:matrix.org": { "ts": 1500447779424 }, "@smiddy:matrix.matthewsmith.id.au": { "ts": 1500429701586 } } }, "$15004756172746842ragMV:matrix.org": { "m.read": { "@zhaowei:matrix.molinkx.com": { "ts": 1500478542322 } } }, "$1500479785588SrvLj:i9technologies.com": { "m.read": { "@am2on:atauno.com": { "ts": 1500482044227 } } }, "$15005157733321371ouLdn:matrix.org": { "m.read": { "@phil-flexhk:matrix.org": { "ts": 1500537435401 } } }, "$15005298833461936BxWSI:matrix.org": { "m.read": { "@rogier:sciuro.org": { "ts": 1500535379176 } } }, "$15005481733663780EcsHI:matrix.org": { "m.read": { "@duck:matrix.org": { "ts": 1500548175270 } } }, "$150054923031GuKEh:msgs.tk": { "m.read": { "@dq11:matrix.org": { "ts": 1500552619511 } } }, "$150056117019IAILF:devpi.de": { "m.read": { "@cremuzzi:agetic.gob.bo": { "ts": 1500561700793 } } }, "$15005655120Nxqhn:msgs.tk": { "m.read": { "@pik:matrix.org": { "ts": 1500565735336 } } }, "$15005702043979375PzauH:matrix.org": { "m.read": { "@k3vmcd:matrix.org": { "ts": 1500571194691 } } }, "$15005891884277573EzhpF:matrix.org": { "m.read": { "@Evalelynn:matrix.org": { "ts": 1500611160984 } } }, "$1500589882106MMPps:timecube.club": { "m.read": { "@aesgcm:matrix.org": { "ts": 1500590619248 }, "@loraafsd:matrix.org": { "ts": 1500590320780 } } }, "$15006320672029Tawtk:riot.ovh": { "m.read": { "@paveltavoda:matrix.org": { "ts": 1500632068658 } } }, "$1500639418559ZRuDj:kamax.io": { "m.read": { "@Dalza:matrix.org": { "ts": 1500640887126 } } }, "$1500652673313424XkmtW:matrix.org": { "m.read": { "@ajay_gupta:matrix.org": { "ts": 1500657655623 } } }, "$1500674892665044LwKjF:matrix.org": { "m.read": { "@divya.goel:matrix.org": { "ts": 1500710214381 } } }, "$1500677016695937rkoQY:matrix.org": { "m.read": { "@arekinath:tchncs.de": { "ts": 1500677902500 }, "@satdav:matrix.org": { "ts": 1500677375830 } } }, "$15007275201705tYFIn:kamax.io": { "m.read": { "@MaxwellK:maxwellkepler.uk": { "ts": 1500742026435 } } }, "$150074743137057qTkJi:ralith.com": { "m.read": { "@habnabit:matrix.org": { "ts": 1500747439781 } } }, "$15007727188296FDsvB:kek.community": { "m.read": { "@kfatehi:matrix.org": { "ts": 1500778312345 } } }, "$15007963271785633XiFQz:matrix.org": { "m.read": { "@vegai:matrix.org": { "ts": 1500799197626 } } }, "$15008332342109953herLE:matrix.org": { "m.read": { "@apply55gx:matrix.org": { "ts": 1500881366083 } } }, "$15008988712750676yuVhl:matrix.org": { "m.read": { "@ardaxi:ardaxi.com": { "ts": 1500898877905 } } }, "$150091611012mMUmu:msgs.tk": { "m.read": { "@Milikik:matrix.org": { "ts": 1500922538042 } } }, "$15009232743118275CbJgJ:matrix.org": { "m.read": { "@lazz:matrix.org": { "ts": 1500924804690 } } }, "$15009818773758223SWQXP:matrix.org": { "m.read": { "@ShadowRZ:matrixim.cc": { "ts": 1502624187803 } } }, "$15009879363830884ZVAIS:matrix.org": { "m.read": { "@kegan2:matrix.org": { "ts": 1500990509074 } } }, "$15010049077TYrUF:seite3.net": { "m.read": { "@jan:seite3.net": { "ts": 1501007630365 } } }, "$15010085981DNYye:tedomum.net": { "m.read": { "@dtygel:matrix.org": { "ts": 1501009277899 } } }, "$1501065712331YDDVz:sorunome.de": { "m.read": { "@Neco:matrix.org": { "ts": 1501066094382 } } }, "$15010660984798972uHTZn:matrix.org": { "m.read": { "@Priyansh1:matrix.org": { "ts": 1501069884661 } } }, "$15010981382825hYkJr:riot.brocolo.us": { "m.read": { "@saqura:matrix.org": { "ts": 1501100025758 } } }, "$1501129220736OUkPI:hugs.at": { "m.read": { "@synapseuser:matrix.org": { "ts": 1501138783272 } } }, "$150114987511244qEhcf:matrix.org": { "m.read": { "@karl:hugs.at": { "ts": 1501150525400 } } }, "$1501173455361711mpzMl:matrix.org": { "m.read": { "@jamil:matrix.org": { "ts": 1501176000138 }, "@vovcia:matrix.avsystem.com": { "ts": 1501179672285 } } }, "$150119418749676NoMCI:ralith.com": { "m.read": { "@rykoZ:matrix.org": { "ts": 1501230972963 } } }, "$1501200971765562zZwMb:matrix.org": { "m.read": { "@bandpzy:matrix.org": { "ts": 1501218995092 } } }, "$1501239536671QqijQ:sorunome.de": { "m.read": { "@dthq:matrix.org": { "ts": 1501243165326 } } }, "$15012747611617227dqQhR:matrix.org": { "m.read": { "@Trillon:matrix.org": { "ts": 1501277529360 }, "@whoops:matrix.org": { "ts": 1501277177785 } } }, "$15013002801883538ZvxxQ:matrix.org": { "m.read": { "@siigna:its.chat": { "ts": 1501311633130 } } }, "$150136068631925BUVhO:sorunome.de": { "m.read": { "@andrey:golovko.me": { "ts": 1501361361327 } } }, "$15014355033056183mGTDf:matrix.org": { "m.read": { "@heyalex:matrix.org": { "ts": 1501463880474 }, "@pkovac:matrix.org": { "ts": 1501451241319 } } }, "$15014748473798096Siesu:matrix.org": { "m.read": { "@xiaolai:matrix.org": { "ts": 1501495647002 } } }, "$15014999474111809JXxYe:matrix.org": { "m.read": { "@westlanewanderer:matrix.org": { "ts": 1501500546421 } } }, "$15015079454167081VxxBW:matrix.org": { "m.read": { "@qwertyuiop1993:matrix.org": { "ts": 1501510398545 }, "@tavoda:matrix.org": { "ts": 1501508316587 } } }, "$150151699235635pCmpp:sorunome.de": { "m.read": { "@tybee:matrix.org": { "ts": 1501521063933 } } }, "$15015332864872588ndLkR:matrix.org": { "m.read": { "@panos.asproulis:matrix.org": { "ts": 1501533319279 } } }, "$15015410384983431yddUs:matrix.org": { "m.read": { "@rbole:matrix.org": { "ts": 1501570442903 } } }, "$15015817973730dLbGc:riot.ovh": { "m.read": { "@rami:matrix.org": { "ts": 1501581807779 } } }, "$15015912055492028HtWke:matrix.org": { "m.read": { "@ryk0z:matrix.org": { "ts": 1501591227177 } } }, "$15016088455983167biLVe:matrix.org": { "m.read": { "@Vezca:matrix.org": { "ts": 1501608963511 } } }, "$15016197006223438UlzOz:matrix.org": { "m.read": { "@hef:arbitrarion.com": { "ts": 1501620230856 } } }, "$15016557926408iGNgD:tedomum.net": { "m.read": { "@elvisangelaccio:matrix.org": { "ts": 1501656930758 }, "@scde:matrix.org": { "ts": 1501655793787 } } }, "$150166947754FrIvA:gruenhage.xyz": { "m.read": { "@test:team-senate.ddns.net": { "ts": 1501669480584 } } }, "$1501673720425woQhS:berigora.net": { "m.read": { "@aria:ar1as.space": { "ts": 1501674128824 } } }, "$1501684490216123Kbacc:matrix.org": { "m.read": { "@hitaim:matrix.org": { "ts": 1501684554453 } } }, "$15016853688dGSvl:dasbiersec.com": { "m.read": { "@110343:matrix.org": { "ts": 1501686739875 } } }, "$15016987874321oyfzv:riot.ovh": { "m.read": { "@sdfsdfsdfsf:matrix.org": { "ts": 1501702842364 } } }, "$1501704003258173iBdhk:matrix.org": { "m.read": { "@TimWolla:matrix.org": { "ts": 1501704157273 } } }, "$1501705364281130tguVD:matrix.org": { "m.read": { "@clokep:matrix.org": { "ts": 1501710268675 }, "@tcfox:tc.nz": { "ts": 1501743360147 }, "@ylavoie:matrix.org": { "ts": 1501711329245 } } }, "$1501706257296666IJaBt:matrix.org": { "m.read": { "@Ren:matrix.org": { "ts": 1501761852923 } } }, "$15017875101265179EkqdK:matrix.org": { "m.read": { "@luisputnik:matrix.org": { "ts": 1501787999404 } } }, "$1501792712159axHNw:sw1v.org": { "m.read": { "@Tiehscher:matrix.org": { "ts": 1501794319179 } } }, "$1501807376440clcHM:greyface.org": { "m.read": { "@smithsps:matrix.org": { "ts": 1501807942571 } } }, "$15018545431988741czdLc:matrix.org": { "m.read": { "@fiatjaf:matrix.org": { "ts": 1501857526371 } } }, "$15018618271PAnKU:inferiorlattice.com": { "m.read": { "@Sebastian:x18.id4net.de": { "ts": 1501862479569 } } }, "$1501884169653maDtg:krtdex.com": { "m.read": { "@friedericktan21:matrix.org": { "ts": 1501906876614 }, "@jimmycuadra:matrix.org": { "ts": 1501886421124 } } }, "$15019805583310648PIPgw:matrix.org": { "m.read": { "@klaas:matrix.org": { "ts": 1501981405481 } } }, "$15020305633692974xxHKv:matrix.org": { "m.read": { "@hugor:matrix.org": { "ts": 1502031554130 }, "@r3dey3:pwn.party": { "ts": 1502035409403 } } }, "$15020562213960709MFxXR:matrix.org": { "m.read": { "@ethan:matrix.disobedientmedia.com": { "ts": 1502056416968 } } }, "$150211382718PFCyP:maxwell.ydns.eu": { "m.read": { "@sirmitco:matrix.org": { "ts": 1502124406918 }, "@yes9527:matrix.org": { "ts": 1502181494297 } } }, "$1502130530208585KWCNp:matrix.org": { "m.read": { "@hvdkaa:matrix.org": { "ts": 1502132958670 } } }, "$150219067427sWDhp:alscs.net": { "m.read": { "@epi:matrix.org": { "ts": 1502192487226 }, "@mohsinali:matrix.org": { "ts": 1502195556905 } } }, "$150220567611009johqC:chat.rios.org.br": { "m.read": { "@thomas88:matrix.org": { "ts": 1502219035210 } } }, "$15022440051541612WSoay:matrix.org": { "m.read": { "@194984:matrix.org": { "ts": 1502244352453 } } }, "$15023635072829757WuCyu:matrix.org": { "m.read": { "@vwiencek:matrix.org": { "ts": 1502363512535 } } }, "$1502440380951ymfMR:sw1v.org": { "m.read": { "@DaveBullock:matrixaz2.lanetelecom.com": { "ts": 1502440388421 } } }, "$1502456907155555vOFTB:matrix.org": { "m.read": { "@neutral:matrix.org": { "ts": 1502459131641 } } }, "$15024692914724WQRUV:kamax.io": { "m.read": { "@tristan:matrix.org": { "ts": 1502469357569 } } }, "$15024726095662gPmlK:riot.ovh": { "m.read": { "@kent:kentshikama.com": { "ts": 1502472694902 } } }, "$1502477580462262LfbAP:matrix.org": { "m.read": { "@nullwarp:dasbiersec.com": { "ts": 1502478384620 } } }, "$1502491621950632IGHPH:matrix.org": { "m.read": { "@FritzTheCat:candybarchat.ddns.net": { "ts": 1502491901509 } } }, "$15024946291025092CQOAx:matrix.org": { "m.read": { "@qweiur:matrix.org": { "ts": 1502502795681 } } }, "$15025304251393160GxqFI:matrix.org": { "m.read": { "@epidemik:matrix.org": { "ts": 1502538270619 } } }, "$15025621361691003hvKjQ:matrix.org": { "m.read": { "@kodo:matrix.org": { "ts": 1502562344091 } } }, "$15025710062006718bshfG:matrix.org": { "m.read": { "@Scott1083:matrix.org": { "ts": 1502571522233 } } }, "$150261919426870rEUJx:cervoi.se": { "m.read": { "@nmlt:matrix.org": { "ts": 1502625960001 } } }, "$1502636603645919DzpMk:matrix.org": { "m.read": { "@Auxim:matrix.org": { "ts": 1502637346387 } } }, "$1502713518441283daspK:matrix.org": { "m.read": { "@thejflo:matrix.org": { "ts": 1502713519913 } } }, "$15027140411224iXcxp:sw1v.org": { "m.read": { "@dan:djc.id.au": { "ts": 1502714076250 } } }, "$15027168701233UXiAF:sw1v.org": { "m.read": { "@duerer:matrix.org": { "ts": 1502717382030 } } }, "$1502806452425JNgFO:devpi.de": { "m.read": { "@alexander:ninetailed.ninja": { "ts": 1502806464859 } } }, "$1502809532431loPpp:devpi.de": { "m.read": { "@win32.executioner:matrix.org": { "ts": 1502812301826 } } }, "$15028241596253LyolS:riot.ovh": { "m.read": { "@aqeeliz:matrix.org": { "ts": 1502824912079 }, "@cave:matrix.cavebeat.org": { "ts": 1502827341547 } } }, "$15028593052798936kKHmH:matrix.org": { "m.read": { "@thomas:tardis.network": { "ts": 1502859376419 } } }, "$150287638841ncmXV:matrix.dust-puppy.net": { "m.read": { "@cg:matrix.dust-puppy.net": { "ts": 1502876484646 } } }, "$15028824303020699vvShT:matrix.org": { "m.read": { "@TripleSnail:matrix.org": { "ts": 1502882431684 } } }, "$150288303967kuvYm:riot.ovh": { "m.read": { "@siim.naur:frozennet.eu": { "ts": 1502889856051 } } }, "$15029808481469071rMzJV:matrix.org": { "m.read": { "@Alexendoo:matrix.org": { "ts": 1502983421031 } } }, "$15029848161532155xBjjn:matrix.org": { "m.read": { "@molida:matrix.org": { "ts": 1503014474115 } } }, "$15029853101539872KxqSo:matrix.org": { "m.read": { "@quickquesiton1231231214:matrix.org": { "ts": 1502997535882 } } }, "$15030095421906810EeIoA:matrix.org": { "m.read": { "@gregoriomezquita:matrix.org": { "ts": 1503010863875 } } }, "$15030517592315341JeTmE:matrix.org": { "m.read": { "@CerebralStud:matrix.org": { "ts": 1503051827863 } } }, "$150307559311760HkhQf:kek.community": { "m.read": { "@carbans:matrix.org": { "ts": 1503075666120 } } }, "$15030756762635999krIeq:matrix.org": { "m.read": { "@walle303:kek.community": { "ts": 1503077481483 } } }, "$15030796722698198TwlEd:matrix.org": { "m.read": { "@arekinath:timecube.club": { "ts": 1503100698279 } } }, "$15031472833345486EKSuA:matrix.org": { "m.read": { "@AndrewJDR:matrix.org": { "ts": 1503192595376 }, "@douglas:matrix.molinkx.com": { "ts": 1503147617768 } } }, "$1503228325905KtSQu:riot.ovh": { "m.read": { "@evan2718281828:matrix.org": { "ts": 1503228440444 } } }, "$1503233147924yhnhT:riot.ovh": { "m.read": { "@HJcole:matrix.org": { "ts": 1503233235203 } } }, "$15033125074932712vBZTM:matrix.org": { "m.read": { "@dev3dev:matrix.org": { "ts": 1503318139235 } } }, "$15033271955122712QzgMU:matrix.org": { "m.read": { "@tom:inferiorlattice.com": { "ts": 1503329246040 } } }, "$1503433754899527JkeSd:matrix.org": { "m.read": { "@axx:matrix.org": { "ts": 1503434240780 } } }, "$15034725726444OlsQa:cervoi.se": { "m.read": { "@stefano:matrix.org": { "ts": 1503473997534 } } }, "$1503494155601rjymB:riot.ovh": { "m.read": { "@KFR_FRITZ:matrix.org": { "ts": 1503515481341 }, "@RaMer:matrix.org": { "ts": 1503515275475 }, "@kc1212:cong.eu": { "ts": 1503518506811 } } }, "$15035198952133319uUiPs:matrix.org": { "m.read": { "@demyan:matrix.org": { "ts": 1503520277042 } } }, "$15035229772185315EHKsk:matrix.org": { "m.read": { "@simon:vodik.xyz": { "ts": 1503523803239 } } }, "$15035827022837989USIpL:matrix.org": { "m.read": { "@ReqX:matrix.org": { "ts": 1503591560317 } } }, "$15036050433211215qtMju:matrix.org": { "m.read": { "@Justgivemeaname:matrix.org": { "ts": 1503605110955 } } }, "$15036278171362jJdbd:berigora.net": { "m.read": { "@washort:greyface.org": { "ts": 1503628051366 } } }, "$15036303033521350mjXrU:matrix.org": { "m.read": { "@thesmiddy:matrix.org": { "ts": 1503630981299 } } }, "$15036460803660251mWBfb:matrix.org": { "m.read": { "@IncubusRK:matrix.org": { "ts": 1503649184579 } } }, "$150365931012573zxWcP:cervoi.se": { "m.read": { "@bjoern.vonderlinde:open-xchange.com": { "ts": 1503659741256 }, "@keralk:matrix.org": { "ts": 1503661835142 } } }, "$1503665754377FwkCS:riot.ovh": { "m.read": { "@deisel16:matrix.org": { "ts": 1503665806402 } } }, "$1503686621408664hzUGR:matrix.org": { "m.read": { "@William:matrix.org": { "ts": 1503688077406 } } }, "$1503691494480210hEDDU:matrix.org": { "m.read": { "@knolle:matrix.org": { "ts": 1503691709444 } } }, "$1503699345114436VAMFl:ralith.com": { "m.read": { "@ster:disroot.org": { "ts": 1503699375848 } } }, "$15037444707894WTAKg:chat.weho.st": { "m.read": { "@Chickee:matrix.org": { "ts": 1503746433504 } } }, "$15037804751168gjfxU:riot.ovh": { "m.read": { "@Mr.Tomato:matrix.org": { "ts": 1503780490769 }, "@cpt:matrix.org": { "ts": 1503781521725 } } }, "$150378384292WkPxf:eggy.cc": { "m.read": { "@Lander:matrix.org": { "ts": 1503841815225 }, "@kevincox:matrix.org": { "ts": 1503785012721 } } }, "$1503955730371knWVY:coding.chat": { "m.read": { "@ron:ganja.nl": { "ts": 1503958451507 } } }, "$150396768819HfvtE:ganja.nl": { "m.read": { "@auditcranium:matrix.org": { "ts": 1503983491683 } } }, "$1504027182414701fcbqB:matrix.org": { "m.read": { "@sudobaal:matrix.org": { "ts": 1504027247814 } } }, "$15040728951036aMhRS:riot.ovh": { "m.read": { "@sebasgo86:matrix.org": { "ts": 1504080353940 }, "@skyler14:matrix.org": { "ts": 1504114974924 } } }, "$15040816791hkaAa:internet-portal.cz": { "m.read": { "@jan:matrix.org": { "ts": 1504089037396 } } }, "$15040913821162YrmjQ:riot.ovh": { "m.read": { "@lefei:matrix.molinkx.com": { "ts": 1504092160487 } } }, "$15040945201209907hXznT:matrix.org": { "m.read": { "@sohum:nsb0.net": { "ts": 1504103973856 } } }, "$15041183941949SiXKf:kamax.io": { "m.read": { "@elcyborg:elcyb.org": { "ts": 1504120474356 } } }, "$15041898240zhGqb:chat.tei.li": { "m.read": { "@sschueller:chat.tei.li": { "ts": 1504189831148 } } }, "$15041917851615oYSLb:riot.ovh": { "m.read": { "@heftig:matrix.org": { "ts": 1504191793292 } } }, "$15041928412479172hqjRv:matrix.org": { "m.read": { "@haniel.87:matrix.org": { "ts": 1504195158921 } } }, "$15042454743207742ceTcC:matrix.org": { "m.read": { "@annie007:matrix.org": { "ts": 1504247245915 } } }, "$15042705213463969lrtcf:matrix.org": { "m.read": { "@damao:matrix.org": { "ts": 1504270768378 } } }, "$150429248723fNRUO:imaginair.es": { "m.read": { "@throwaway_efefefefef:matrix.org": { "ts": 1504293839988 } } }, "$1504343101466517jaVic:matrix.org": { "m.read": { "@fitmove:matrix.org": { "ts": 1504343835325 } } }, "$1504363831648128txBfB:matrix.org": { "m.read": { "@worldwarthree:matrix.org": { "ts": 1504364734252 } } }, "$1504374479767574ndRcN:matrix.org": { "m.read": { "@yangm97:matrix.org": { "ts": 1504377287675 } } }, "$150439856010nterq:zoronunderground.club": { "m.read": { "@Ringil:matrix.org": { "ts": 1504415146161 }, "@trush:matrix.org": { "ts": 1504401290254 } } }, "$15044021751066790Dfozi:matrix.org": { "m.read": { "@TheX:zoronunderground.club": { "ts": 1504402462288 } } }, "$150446295394953PoUCg:matrix.org": { "m.read": { "@christian:matrix.giraffensaal.de": { "ts": 1504465589247 } } }, "$1504468569163266FGfGL:matrix.org": { "m.read": { "@ipsecguy:matrix.org": { "ts": 1504475791051 } } }, "$1504476087180ANlNl:msgs.tk": { "m.read": { "@am2on:matrix.org": { "ts": 1504480609347 } } }, "$1504500413483092pbUva:matrix.org": { "m.read": { "@adrianhoe:matrix.org": { "ts": 1504503451398 } } }, "$1504509546558361oFtet:matrix.org": { "m.read": { "@petruknisme:hispagatos.org": { "ts": 1504509548901 } } }, "$150451785615476rpMNC:matrix.org": { "m.read": { "@rbdz:matrix.org": { "ts": 1504518083080 } } }, "$1504534470208235ScSDS:matrix.org": { "m.read": { "@jerico39:matrix.org": { "ts": 1504534478998 } } }, "$150456294665fjfYM:cervoi.se": { "m.read": { "@jmingus:matrix.org": { "ts": 1504576168856 } } }, "$150459837358618pHrxE:matrix.heldscal.la": { "m.read": { "@deepakm:matrix.org": { "ts": 1504609895301 }, "@general:matrix.org": { "ts": 1504609795312 } } }, "$1504611198239EHSjT:msgs.tk": { "m.read": { "@alex:matrix.ikandros.com": { "ts": 1504613330673 } } }, "$150461122382eMjPs:coding.chat": { "m.read": { "@aaronluoxiao:matrix.org": { "ts": 1504623096159 } } }, "$15046471571641553HDIIH:matrix.org": { "m.read": { "@awdd:matrix.org": { "ts": 1504647482309 } } }, "$1504688745264jbzpJ:kamax.io": { "m.read": { "@rubo77:matrix.eclabs.de": { "ts": 1504688822349 } } }, "$1504694527359LYKKM:kamax.io": { "m.read": { "@dhole:matrix.org": { "ts": 1504724050680 } } }, "$15047776193241261gFFDc:matrix.org": { "m.read": { "@kolorafa:matrix.org": { "ts": 1504782088153 }, "@ztl8702:matrix.org": { "ts": 1504787524066 } } }, "$15047930343430184unOst:matrix.org": { "m.read": { "@fredcy:matrix.org": { "ts": 1504793126168 } } }, "$15047971135617qcpGi:lant.uk": { "m.read": { "@iambismark:matrix.org": { "ts": 1504797491738 } } }, "$15047990221316zDunH:riot.ovh": { "m.read": { "@bbigras:matrix.org": { "ts": 1504799269407 } } }, "$15048085041381EbBHW:riot.ovh": { "m.read": { "@ewave:matrix.org": { "ts": 1504830104710 }, "@vezquex:matrix.org": { "ts": 1504847936783 } } }, "$15048201733865612rtBnh:matrix.org": { "m.read": { "@galactic_hitchhiker:matrix.org": { "ts": 1504826225097 } } }, "$1504886022515oJEbj:t2l.io": { "m.read": { "@Zil0:matrix.org": { "ts": 1504907712518 }, "@ajb:matrix.org": { "ts": 1504888317654 }, "@lehmanju:matrix.org": { "ts": 1504948806566 }, "@notriddle:matrix.org": { "ts": 1504898122627 } } }, "$15048873714630173usAFv:matrix.org": { "m.read": { "@ks:mocker.org": { "ts": 1504888766808 } } }, "$15048888412hKiyW:mocker.org": { "m.read": { "@ravel:maeli.net": { "ts": 1504895081479 } } }, "$15049217055494JoAgz:matrix.org": { "m.read": { "@matrixisreal:matrix.org": { "ts": 1504923366902 } } }, "$15049809291311ZgHvc:matrix.rehack.me": { "m.read": { "@ryanadm:ryan-vps-1.bradyrtech.com": { "ts": 1504986976658 } } }, "$1505008183934669ZkeMm:matrix.org": { "m.read": { "@micah:matrix.rehack.me": { "ts": 1505008251538 } } }, "$15050311431771MAAOQ:matrixim.cc": { "m.read": { "@JAkutenshi:matrix.org": { "ts": 1505033236555 } } }, "$15050633381459057hcscR:matrix.org": { "m.read": { "@redwolf:disroot.org": { "ts": 1505067402107 } } }, "$15050895491758388YrbSD:matrix.org": { "m.read": { "@chronal:isengard.online": { "ts": 1505089660619 } } }, "$15051302302129766xBiBP:matrix.org": { "m.read": { "@ylecollen:matrix.org": { "ts": 1505131024927 } } }, "$15051402042256825VNfuF:matrix.org": { "m.read": { "@erenPhayte:matrix.org": { "ts": 1505140965078 } } }, "$1505146065711ytbVp:57north.org.uk": { "m.read": { "@zhangjie:matrix.org": { "ts": 1505146836122 } } }, "$1505150606434OiWsN:riot.ovh": { "m.read": { "@webdevguru:matrix.org": { "ts": 1505150781361 } } }, "$1505152248779ZJthb:t2l.io": { "m.read": { "@Nik05:matrix.org": { "ts": 1505154995514 } } }, "$15051805722846817GLANv:matrix.org": { "m.read": { "@agu:matrix.org": { "ts": 1505184818824 } } }, "$15052087163112155qxmAU:matrix.org": { "m.read": { "@matthew:arasphere.net": { "ts": 1505214046293 }, "@thunder:matrix.loboto.net": { "ts": 1505208842046 } } }, "$150522512693SjQoy:kamax.io": { "m.read": { "@bartmann:matrix.org": { "ts": 1505225146020 } } }, "$1505229911232ZeuEC:devpi.de": { "m.read": { "@mascha:findeichscha.de": { "ts": 1505230080044 } } }, "$1505234822137awXyB:kamax.io": { "m.read": { "@desnudopenguino:buckytownsend.me": { "ts": 1505236378483 } } }, "$1505236244271NYnjQ:devpi.de": { "m.read": { "@J08nY:matrix.org": { "ts": 1505237661094 }, "@cworobetz:matrix.org": { "ts": 1505236254651 } } }, "$15053124584435300Qysls:matrix.org": { "m.read": { "@MarcoM:matrix.org": { "ts": 1505312743850 }, "@homulilly:matrix.org": { "ts": 1505331214476 } } }, "$15053805675758013YXUww:matrix.org": { "m.read": { "@d4vid2:matrix.org": { "ts": 1505387962241 } } }, "$1505394102549OXSPK:riot.ovh": { "m.read": { "@testjbf:matrix.org": { "ts": 1505394213702 } } }, "$1505394794569rzesW:riot.ovh": { "m.read": { "@king:shitposters.club": { "ts": 1505400045816 } } }, "$15054077996126938zyNKX:matrix.org": { "m.read": { "@jtree:matrix.org": { "ts": 1505407803882 } } }, "$15054332886514360vycLH:matrix.org": { "m.read": { "@hetiu:matrix.org": { "ts": 1505458558610 } } }, "$15054743956929039mHvji:matrix.org": { "m.read": { "@tekkeitserktok:matrix.org": { "ts": 1505475973673 } } }, "$15054834697058189RlAZK:matrix.org": { "m.read": { "@rxl881:matrix.org": { "ts": 1505489128256 } } }, "$15054909897187547FplkL:matrix.org": { "m.read": { "@flytouniverse:matrix.org": { "ts": 1505492041531 } } }, "$15055003855MUMsG:matrix.bitchslapper.org": { "m.read": { "@test:schnuffle.de": { "ts": 1505502356369 } } }, "$15055026677385169JeTCl:matrix.org": { "m.read": { "@spllg:matrix.org": { "ts": 1505507389330 } } }, "$15055280027719112RYSeP:matrix.org": { "m.read": { "@skaverat:skaverat.net": { "ts": 1505528013635 } } }, "$150556049850lwySz:riot.ovh": { "m.read": { "@h.muenchhoff:x18.id4net.de": { "ts": 1505563802271 } } }, "$150559458785lhVer:kamax.io": { "m.read": { "@chrisdg:matrix.org": { "ts": 1505604195237 } } }, "$15056136913EnQiw:kamax.io": { "m.read": { "@jmolmo:matrix.org": { "ts": 1505613959712 }, "@skiant:matrix.org": { "ts": 1505645462468 } } }, "$1505658292115cbmMV:kamax.io": { "m.read": { "@ios:matrix.org": { "ts": 1505659019270 } } }, "$1505667139151FGaCB:kamax.io": { "m.read": { "@Golarmo:matrix.org": { "ts": 1505668089622 } } }, "$15056982771487938KZGqL:matrix.org": { "m.read": { "@therainingmonkey:matrix.org": { "ts": 1505701515755 } } }, "$1505728281419VWdOv:kamax.io": { "m.read": { "@eqyiel:matrix.rkm.id.au": { "ts": 1505728319478 } } }, "$1505728414421iwKhi:kamax.io": { "m.read": { "@peshoooo:matrix.org": { "ts": 1505729099227 } } }, "$15057361711853623GenYU:matrix.org": { "m.read": { "@leonh:matrix.org": { "ts": 1505737921449 }, "@vdhtest10:sw1v.org": { "ts": 1505738132931 } } }, "$1505762560391HHyhe:t2l.io": { "m.read": { "@asdfghjklzxcvbnm:matrix.org": { "ts": 1505762570821 } } }, "$1505788412171ZQZzT:kickass.systems": { "m.read": { "@soupbowl:matrix.org": { "ts": 1506653712042 } } }, "$15058212153170754ixJlL:matrix.org": { "m.read": { "@sudoreboot:matrix.org": { "ts": 1505821309160 } } }, "$15058276106127DmfmL:thebeckmeyers.xyz": { "m.read": { "@54h:matrix.org": { "ts": 1506034058270 } } }, "$15058278723292115TejyL:matrix.org": { "m.read": { "@jooert:matrix.org": { "ts": 1505827879318 } } }, "$15058297063325774GTBXE:matrix.org": { "m.read": { "@me:schnuffle.de": { "ts": 1505833821129 } } }, "$150584705442979hZgpI:tchncs.de": { "m.read": { "@vgrdju375:matrix.org": { "ts": 1505849183143 } } }, "$1505852263979ZcONt:krtdex.com": { "m.read": { "@Ultimate:coding.chat": { "ts": 1505886719959 } } }, "$15059352424842681ktzVq:matrix.org": { "m.read": { "@nhewitt:nhewitt-redmine.port0.org": { "ts": 1505935263344 } } }, "$150593668835TIFcM:internet-portal.cz": { "m.read": { "@ephro:chat.incitotrading.com": { "ts": 1505939254216 } } }, "$15059842655394758mfaQV:matrix.org": { "m.read": { "@nag_loggin2:matrix.org": { "ts": 1505984266625 } } }, "$150598960418543ehzCq:matrix.org": { "m.read": { "@broken-physicality:matrix.reticent-castanet.tech": { "ts": 1505993050109 } } }, "$1505996746135bTDmn:hirschstein.it": { "m.read": { "@12steven:matrix.org": { "ts": 1505997410069 } } }, "$1505998133138AqUrU:hirschstein.it": { "m.read": { "@Ohtohf:matrix.org": { "ts": 1506052406728 } } }, "$1506031691665474rQwoQ:matrix.org": { "m.read": { "@Buli:toastwerk.net": { "ts": 1506033032005 }, "@bittakeshi:matrix.org": { "ts": 1506078362978 }, "@dell4valt:matrix.org": { "ts": 1506075090694 }, "@gbiscuolo:matrix.org": { "ts": 1506080795457 } } }, "$15060996761455733vWPKh:matrix.org": { "m.read": { "@astronavt:matrix.org": { "ts": 1506100879121 } } }, "$150611793257498xxjaq:tchncs.de": { "m.read": { "@agates:matrix.org": { "ts": 1506126445206 } } }, "$1506139145830iBqtE:t2l.io": { "m.read": { "@bachp:matrix.org": { "ts": 1506151737513 }, "@spacewalker:matrix.org": { "ts": 1506168296743 } } }, "$15061734841157AgJiD:riot.ovh": { "m.read": { "@tobiasrautenkranz:matrix.org": { "ts": 1506177056094 } } }, "$15061931182484470FIvDu:matrix.org": { "m.read": { "@colibrin:matrix.org": { "ts": 1506198427822 }, "@jazzbug03189:matrix.org": { "ts": 1506202540654 } } }, "$15062415632952377ZyFLw:matrix.org": { "m.read": { "@daniel.bast:matrix.org": { "ts": 1506242518185 }, "@matteo:hirschstein.it": { "ts": 1506242637678 } } }, "$15062539953056413bulZN:matrix.org": { "m.read": { "@KokorinIlya:matrix.org": { "ts": 1506254033129 } } }, "$15062602313113388XVgLR:matrix.org": { "m.read": { "@sbts:matrix.org": { "ts": 1506260672274 } } }, "$15062672973192793VkyWc:matrix.org": { "m.read": { "@airin:disroot.org": { "ts": 1506268606735 } } }, "$15062691351975skEgn:kamax.io": { "m.read": { "@minhnhdo:matrix.org": { "ts": 1507179604807 } } }, "$1506280849143216XwYUm:matrix.org": { "m.read": { "@Whyned:matrix.bitchslapper.org": { "ts": 1506283265901 } } }, "$1506287895235789EPxyo:matrix.org": { "m.read": { "@sanjivrai:matrix.org": { "ts": 1506287904328 } } }, "$150633830466VlOfq:sw1v.org": { "m.read": { "@naushil:matrix.org": { "ts": 1506339056614 } } }, "$1506350079124tKOcd:sw1v.org": { "m.read": { "@Krombel:matrix.org": { "ts": 1506350497033 } } }, "$1506379009321935EzFHW:matrix.org": { "m.read": { "@matias:matrix.deprecated.org": { "ts": 1506382996123 } } }, "$15063811484oUWyS:matrix.deprecated.org": { "m.read": { "@paulfree:matrix.org": { "ts": 1506390048566 } } }, "$1506414944680596vZuLd:matrix.org": { "m.read": { "@sauyon:sio.pw": { "ts": 1506416974517 } } }, "$1506417381707832dwQAK:matrix.org": { "m.read": { "@psaavedra:matrix.org": { "ts": 1506417481648 } } }, "$1506434415925340xSXlO:matrix.org": { "m.read": { "@Mjark:matrix.org": { "ts": 1506434420841 } } }, "$15064510921223809XHLEf:matrix.org": { "m.read": { "@crw:matrix.org": { "ts": 1506451760902 } } }, "$15064571211334408zBrxS:matrix.org": { "m.read": { "@rtr63gdh:matrix.org": { "ts": 1506459749488 } } }, "$15064731361559754RbaMN:matrix.org": { "m.read": { "@pavel:kardash.su": { "ts": 1506483796430 } } }, "$15064973543218anAGL:matrix.xsteadfastx.org": { "m.read": { "@baldo:matrix.org": { "ts": 1506504070273 } } }, "$15065043131873302GCUMN:matrix.org": { "m.read": { "@gooz:matrix.heldscal.la": { "ts": 1506512566875 } } }, "$150653425719790eWJVk:thebeckmeyers.xyz": { "m.read": { "@nagua:2hg.org": { "ts": 1506555925420 }, "@remi:matrix.org": { "ts": 1506561421963 } } }, "$1506601623175RRGNm:telekollektiv.org": { "m.read": { "@nag_loggin1:matrix.org": { "ts": 1506601695381 } } }, "$1506606324315fhzWJ:telekollektiv.org": { "m.read": { "@ffes:matrix.org": { "ts": 1506606349796 } } }, "$150661211527tUCUG:sw1v.org": { "m.read": { "@talle:matrix.org": { "ts": 1506612129849 } } }, "$150661628430Zbhgu:jki.re": { "m.read": { "@cnhridol:matrix.org": { "ts": 1506618384553 } } }, "$150664467267324suEId:matrix.org": { "m.read": { "@falcon15500:nine-hells.net": { "ts": 1506644691602 } } }, "$1506648654113131vHKkH:matrix.org": { "m.read": { "@chronal:matrix.org": { "ts": 1506648738758 } } }, "$1506648896115978jyfdf:matrix.org": { "m.read": { "@chr:cybre.space": { "ts": 1506652619460 } } }, "$1506655669184177AhZkv:matrix.org": { "m.read": { "@equalunique:matrix.org": { "ts": 1506656223514 } } }, "$150665993823942dompU:ralith.com": { "m.read": { "@s-makrushin:matrix.org": { "ts": 1506662873746 } } }, "$1506669148308972CwZCo:matrix.org": { "m.read": { "@hiq:matrix.org": { "ts": 1506674362586 } } }, "$1506680386428355aqvXB:matrix.org": { "m.read": { "@yusf:matrix.org": { "ts": 1506680671640 } } }, "$15067190181020457xhLbZ:matrix.org": { "m.read": { "@adnissen:matrix.org": { "ts": 1506719179152 } } }, "$15067203310KghBi:matrix.philippdumke.net": { "m.read": { "@einarr:matrix.org": { "ts": 1506768348091 } } }, "$1506832204711888GSJRQ:matrix.org": { "m.read": { "@sn0:matrix.org": { "ts": 1506835799795 } } }, "$150684563338AOVkO:softing.com": { "m.read": { "@cryptix:telekollektiv.org": { "ts": 1506875970481 } } }, "$1506851327865714NKiwD:matrix.org": { "m.read": { "@schneefux:schneefux.xyz": { "ts": 1506852414489 } } }, "$150688437327736wErlP:ralith.com": { "m.read": { "@rosecheval:matrix.org": { "ts": 1506884638515 } } }, "$1506949939917JiBjP:kamax.io": { "m.read": { "@vaclav.fiser:internet-portal.cz": { "ts": 1507294461636 } } }, "$15069501421485zYbLm:kolosowscy.pl": { "m.read": { "@Spydar007:spydar007.com": { "ts": 1506950367693 }, "@alexgleason:matrix.org": { "ts": 1506953293820 } } }, "$15069713721011vUyGB:kamax.io": { "m.read": { "@jerrykan:matrix.org": { "ts": 1506997078099 } } }, "$15069848772586529CXQKK:matrix.org": { "m.read": { "@Zorroness:matrix.org": { "ts": 1506985080408 } } }, "$15070284943064822iTtiY:matrix.org": { "m.read": { "@kumina-rutger:matrix.org": { "ts": 1507041557982 } } }, "$15070466931232EtYaR:kamax.io": { "m.read": { "@farialima:matrix.org": { "ts": 1507046709173 } } }, "$1507062642815aUnbQ:t2l.io": { "m.read": { "@tyngdekraften:matrix.org": { "ts": 1507162037857 } } }, "$1507111889770wQIGJ:berigora.net": { "m.read": { "@Khorne:matrix.org": { "ts": 1507111895302 } } }, "$15071520394891629HQpad:matrix.org": { "m.read": { "@smou:matrix.org": { "ts": 1507154335532 } } }, "$1507206066564987iNizf:matrix.org": { "m.read": { "@LeoNerd:matrix.org": { "ts": 1507206485850 }, "@Odilbert:matrix.org": { "ts": 1507207232177 }, "@asj:matrix.org": { "ts": 1507207158227 }, "@kevinliao:matrix.org": { "ts": 1507211377290 } } }, "$1507214472564APhTi:jki.re": { "m.read": { "@science-bot:matrix.org": { "ts": 1507214509468 } } }, "$1507220272602upijQ:jki.re": { "m.read": { "@rzr:matrix.org": { "ts": 1507220290091 } } }, "$150725593060ZbWng:eggy.cc": { "m.read": { "@b3ng:im.datenpunk.io": { "ts": 1507277226228 }, "@dasisteintestname:matrix.org": { "ts": 1507283669461 } } }, "$15072717041497879ctBYn:matrix.org": { "m.read": { "@bisongde:matrix.org": { "ts": 1507274924175 } } }, "$1507309593134830rSwci:matrix.org": { "m.read": { "@ryandelgrosso:matrix.org": { "ts": 1507312607950 } } }, "$150731693948tjdnN:westwork.org": { "m.read": { "@simple.:matrix.org": { "ts": 1507336218884 } } }, "$150734096650kCaxm:vurpo.fi": { "m.read": { "@lok:matrix.org": { "ts": 1507343632829 } } }, "$1507379824937823fdKrC:matrix.org": { "m.read": { "@TheKolomoets:matrix.org": { "ts": 1507386605283 } } }, "$150743706519HksHW:matrix.c4hx.com": { "m.read": { "@jnaeff:matrix.org": { "ts": 1507448295975 } } }, "$150749619343118jWBqw:ralith.com": { "m.read": { "@corvus:matrix.cccgoe.de": { "ts": 1507496318184 } } }, "$1507497390316hpMlY:vurpo.fi": { "m.read": { "@tester668:matrix.org": { "ts": 1507497415268 } } }, "$1507517517531112pgDpU:matrix.org": { "m.read": { "@nousers:matrix.org": { "ts": 1507520305069 } } }, "$150752928044486cEfIZ:ralith.com": { "m.read": { "@morpheusB:matrix.org": { "ts": 1507530892934 }, "@peterahl:matrix.org": { "ts": 1507534174379 } } }, "$1507543160779108NXBPZ:matrix.org": { "m.read": { "@McOmghall:matrix.org": { "ts": 1507546665149 } } }, "$15075675251136705NWJGF:matrix.org": { "m.read": { "@commagray:matrix.org": { "ts": 1507567639863 } } }, "$1507568696261NTqWa:sw1v.org": { "m.read": { "@doatta:matrix.org": { "ts": 1507568720238 } } }, "$15075687261156586kVhRv:matrix.org": { "m.read": { "@morph:gantongym.com": { "ts": 1507572577043 } } }, "$15075896093678bVeDg:kamax.io": { "m.read": { "@sfunk1x:sfunk1x.com": { "ts": 1507590952850 } } }, "$150761260617emKck:matrixim.cc": { "m.read": { "@vimacs:disroot.org": { "ts": 1507612961718 } } }, "$150761430021ikoaI:matrixim.cc": { "m.read": { "@hssong:matrix.org": { "ts": 1507615637438 } } }, "$15076574295Wpqph:sw1v.org": { "m.read": { "@Gregory.K:matrix.org": { "ts": 1507668308187 }, "@wxcafe:imaginair.es": { "ts": 1507670713199 } } }, "$1507670716263yuTiH:imaginair.es": { "m.read": { "@rocketpig:matrix.org": { "ts": 1507673827363 }, "@sysysy:matrix.org": { "ts": 1507691824032 } } }, "$15077109571269407ADkMo:matrix.org": { "m.read": { "@dani:fws.fr": { "ts": 1507713041662 } } }, "$15077162841336639caXzL:matrix.org": { "m.read": { "@TimePath:matrix.org": { "ts": 1507717440897 } } }, "$150772984316123qTncm:matrix.org": { "m.read": { "@shadowGergoe:matrix.org": { "ts": 1507730331900 } } }, "$1507738212312BnBKV:riot.ovh": { "m.read": { "@CIA:matrix.org": { "ts": 1507740196356 } } }, "$1507745601194743dwyaC:matrix.org": { "m.read": { "@olzenith:matrix.org": { "ts": 1507746051412 } } }, "$1507793565996VSZfI:softing.com": { "m.read": { "@apwhitehat:matrix.org": { "ts": 1507801757627 } } }, "$1507848292719354HFqgK:matrix.org": { "m.read": { "@traumschule:matrix.org": { "ts": 1507848641336 } } }, "$1507892747321wFORH:cervoi.se": { "m.read": { "@buzz-dee:matrix.org": { "ts": 1507893106770 } } }, "$15079003331340141vnAdQ:matrix.org": { "m.read": { "@tvslut:matrix.org": { "ts": 1507905332211 } } }, "$1507905943487LNyNA:cervoi.se": { "m.read": { "@redsteakraw:matrix.org": { "ts": 1507905944520 } } }, "$15079163531618153EULhU:matrix.org": { "m.read": { "@jascot:matrix.org": { "ts": 1507916624521 }, "@mteufel:matrix.org": { "ts": 1507916671324 } } }, "$1507940291198wuupY:vurpo.fi": { "m.read": { "@someuname:matrix.org": { "ts": 1507940293105 } } }, "$15079403202012453ffDMg:matrix.org": { "m.read": { "@wouerner:matrix.org": { "ts": 1507940891854 } } }, "$15079777152398098OHJqn:matrix.org": { "m.read": { "@maRlOprI:matrix.org": { "ts": 1507978963879 } } }, "$15079794812414312rDTRK:matrix.org": { "m.read": { "@cAkwNLHysr:matrix.org": { "ts": 1507979484818 } } }, "$15079805022424120USqNL:matrix.org": { "m.read": { "@anaqreon:matrix.org": { "ts": 1507980726131 } } }, "$1507990164627cYjxQ:riot.ovh": { "m.read": { "@philipp:matrix.philippdumke.net": { "ts": 1507990266303 } } }, "$15080042192701596kuoyQ:matrix.org": { "m.read": { "@SijmenSchoon:matrix.org": { "ts": 1508012789964 }, "@limansky:matrix.org": { "ts": 1508015875537 } } }, "$15080322293076603evpYT:matrix.org": { "m.read": { "@insu1109:matrix.org": { "ts": 1508033036277 } } }, "$15080392133149695DTRlP:matrix.org": { "m.read": { "@general50:matrix.org": { "ts": 1508039283012 } } }, "$15080469273221001RnVLp:matrix.org": { "m.read": { "@lecom:matrix.org": { "ts": 1508053383974 } } }, "$15080579803314848MQaxc:matrix.org": { "m.read": { "@notafile:matrix.org": { "ts": 1508065377902 }, "@tester44174:matrix.org": { "ts": 1508058146050 } } }, "$15080705073442930MIrtC:matrix.org": { "m.read": { "@tokodomo:im.nostrodomo.tk": { "ts": 1508070668694 } } }, "$15080760163501757FMwnE:matrix.org": { "m.read": { "@nolan:thewordnerd.info": { "ts": 1508080525414 } } }, "$15080847551PAuny:biocage.io": { "m.read": { "@fennecbyte:matrix.org": { "ts": 1508084910601 } } }, "$150808865343383yrwSw:matrix.org": { "m.read": { "@caloyannis:matrix.org": { "ts": 1508088663610 } } }, "$1508097652200091ZRPKl:matrix.org": { "m.read": { "@tjuberg:matrix.org": { "ts": 1508098958595 } } }, "$150811019623mYXtY:westwork.org": { "m.read": { "@bilge_emulsion:matrix.org": { "ts": 1508110406033 } } }, "$1508111594394625hnZzv:matrix.org": { "m.read": { "@blzut3:maniacsvault.net": { "ts": 1508111621434 } } }, "$15081117189Abdhb:maniacsvault.net": { "m.read": { "@aaronraimist:matrix.org": { "ts": 1508112070719 } } }, "$1508117825613AzsRT:vurpo.fi": { "m.read": { "@dtygel:chat.rios.org.br": { "ts": 1508119150734 }, "@technowizard:matrix.org": { "ts": 1508118040868 } } }, "$1508141072701480IRwZB:matrix.org": { "m.read": { "@PC-Admin:matrix.org": { "ts": 1508147795802 } } }, "$1508156372882336NCJIA:matrix.org": { "m.read": { "@henryjuan:matrix.org": { "ts": 1508157830023 } } }, "$1508159277925536BCQQi:matrix.org": { "m.read": { "@eyecreate:matrix.org": { "ts": 1508160582145 } } }, "$15081742715APaUf:stratum0.org": { "m.read": { "@slepp:spod.ca": { "ts": 1508178112752 } } }, "$15081874661442744yHEgD:matrix.org": { "m.read": { "@hexa:darmstadt.ccc.de": { "ts": 1508187646914 } } }, "$15081879111451184KLFKo:matrix.org": { "m.read": { "@jwheare:matrix.org": { "ts": 1508190938103 } } }, "$15081885871462874tklsZ:matrix.org": { "m.read": { "@stephanj:matrix.org": { "ts": 1508189271460 } } }, "$15082270941917699mhwjW:matrix.org": { "m.read": { "@notworking:matrix.org": { "ts": 1508227419416 }, "@rob:ipcortex.co.uk": { "ts": 1508227052414 } } }, "$15082362852025582STUFe:matrix.org": { "m.read": { "@betz:hackerspace.be": { "ts": 1508236390033 } } }, "$15082426342102670knYVd:matrix.org": { "m.read": { "@winterfox:matrix.org": { "ts": 1508243488440 } } }, "$150824975615hgOBS:softing.com": { "m.read": { "@yannic:unroot.de": { "ts": 1508250203984 } } }, "$15082637712478655QoCeD:matrix.org": { "m.read": { "@gregknicholson:matrix.org": { "ts": 1508263773141 } } }, "$15082651572506210wXgjF:matrix.org": { "m.read": { "@veryhappy:home.matrix.one-crazy-human.net": { "ts": 1508265793295 } } }, "$1508273062157247mRKNw:sorunome.de": { "m.read": { "@pokvo:matrix.org": { "ts": 1508274973722 } } }, "$1508273229157269sgkFo:sorunome.de": { "m.read": { "@keslerm:stackweave.co": { "ts": 1508292672514 } } }, "$15083426388314JiulD:disroot.org": { "m.read": { "@ethan.c2h6:matrix.org": { "ts": 1508343297071 } } }, "$150840084952571fudlT:chat.weho.st": { "m.read": { "@centiledevs5:matrix.org": { "ts": 1508400862514 } } }, "$150840463252959tQZIx:chat.weho.st": { "m.read": { "@msrd0:matrix.org": { "ts": 1508404713435 } } }, "$15084049184419772WQddR:matrix.org": { "m.read": { "@anonyx:matrix.org": { "ts": 1509549999888 } } }, "$15084089924279yeGFv:matrix.org": { "m.read": { "@esm:logic.net": { "ts": 1508410823873 } } }, "$150841260950217sfbcn:matrix.org": { "m.read": { "@Gargron:matrix.org": { "ts": 1508416320934 } } }, "$1508418641131695UKNyD:matrix.org": { "m.read": { "@alserro:matrix.org": { "ts": 1508419203135 }, "@eta:theta.eu.org": { "ts": 1508419659443 } } }, "$15084379131469aHhiJ:charity.az": { "m.read": { "@dtzWill:matrix.org": { "ts": 1508438019373 } } }, "$1508451011391120mRRqQ:matrix.org": { "m.read": { "@willem:canarymod.net": { "ts": 1508451251345 } } }, "$15084929961315757uXraq:matrix.org": { "m.read": { "@erwin:matrix.org": { "ts": 1508499105239 } } }, "$15085174341957TCseB:kamax.io": { "m.read": { "@freelocke:matrix.org": { "ts": 1508518059628 } } }, "$15085190451768127mGsVU:matrix.org": { "m.read": { "@satan:matrix.org": { "ts": 1508519049179 } } }, "$15085290361951765DfSEu:matrix.org": { "m.read": { "@sim6:matrix.org": { "ts": 1508529582262 } } }, "$15085296101961489XozUK:matrix.org": { "m.read": { "@jplatte:matrix.org": { "ts": 1508530045053 } } }, "$15085333902027436EbvOZ:matrix.org": { "m.read": { "@someunmae:matrix.org": { "ts": 1508533520366 } } }, "$15085391962114038hpnxa:matrix.org": { "m.read": { "@matthew:pfe.io": { "ts": 1508539198002 } } }, "$15085445262175826CWKEf:matrix.org": { "m.read": { "@koschei:matrix.org": { "ts": 1508545141168 } } }, "$15085842982532188STmfT:matrix.org": { "m.read": { "@andrew:matrix.reticu.li": { "ts": 1508585143737 } } }, "$15085937462625829uiUFY:matrix.org": { "m.read": { "@Felix:secureim.de": { "ts": 1508595038778 }, "@katarpilar:matrix.org": { "ts": 1508594196670 } } }, "$15086122922875737tCGkN:matrix.org": { "m.read": { "@dim:snf-758099.vm.okeanos.grnet.gr": { "ts": 1508864804785 } } }, "$15086269231xRJuw:zerebubuth.social": { "m.read": { "@Kooda:elynx.fr": { "ts": 1508628300615 } } }, "$1508635004356fEhVZ:t2l.io": { "m.read": { "@kyhwana:matrix.infursec.furry.nz": { "ts": 1508638059474 } } }, "$15086391653201943WJFlz:matrix.org": { "m.read": { "@taoeffect:matrix.org": { "ts": 1508642838825 } } }, "$15086513803309252FiCfm:matrix.org": { "m.read": { "@rociously:awful.systems": { "ts": 1508659038631 } } }, "$15086682043458932rCLPa:matrix.org": { "m.read": { "@juju:fucktheinternet.org": { "ts": 1508669353412 } } }, "$15086817383597440OFwLy:matrix.org": { "m.read": { "@horrified:matrix.org": { "ts": 1508681865236 } } }, "$15086874373668987MrBuz:matrix.org": { "m.read": { "@Sascha:matrix.org": { "ts": 1508688636632 }, "@janosberghorn:matrix.org": { "ts": 1508690520585 } } }, "$15086906923712090ZIEzI:matrix.org": { "m.read": { "@anaxios:matrix.org": { "ts": 1508691155318 } } }, "$15086920453729905qkxfM:matrix.org": { "m.read": { "@riottoir:matrix.neo.codes": { "ts": 1508703723609 } } }, "$1508699261130KTRrV:peterscholtens.net": { "m.read": { "@noformnocontent:matrix.org": { "ts": 1508702671702 }, "@pangelo:matrix.org": { "ts": 1508701235075 } } }, "$150871301413XnkGN:berigora.net": { "m.read": { "@william:one-zero.one": { "ts": 1508713195322 } } }, "$15087180724345426oKQmT:matrix.org": { "m.read": { "@Jean:matrix.org": { "ts": 1508718166809 } } }, "$15087200554374325EeBwM:matrix.org": { "m.read": { "@alec:owls.io": { "ts": 1508720993793 }, "@spacekitteh:matrix.org": { "ts": 1508743470264 } } }, "$15087627754878942YDcys:matrix.org": { "m.read": { "@sraja:matrix.org": { "ts": 1508764590881 } } }, "$150877824410UxTuR:matrix.alliante.com": { "m.read": { "@tuckerm:matrix.org": { "ts": 1508779235264 } } }, "$15087891935355628grmNq:matrix.org": { "m.read": { "@Jeferson.souza:matrix.org": { "ts": 1508789443587 } } }, "$150879008510pMEZo:t2l.io": { "m.read": { "@Jeff:matrix.alliante.com": { "ts": 1508790162984 } } }, "$150879343657ODMxJ:magnap.dk": { "m.read": { "@Foxy:matrix.org": { "ts": 1508793440201 } } }, "$1508796965106ApzMv:berigora.net": { "m.read": { "@remi:remireuvekamp.nl": { "ts": 1508797015302 } } }, "$1508798300148kLAmB:magnap.dk": { "m.read": { "@K0HAX:matrix.org": { "ts": 1508798371343 } } }, "$1508803260349QYDNL:kamax.io": { "m.read": { "@bennabiy:matrix.org": { "ts": 1508808853159 } } }, "$150881023817PsBij:pi2.nsupdate.info:8448": { "m.read": { "@luke:faraone.cc": { "ts": 1508813257477 } } }, "$15088249805814452cPBKD:matrix.org": { "m.read": { "@anaxios:matrix.daedalist.net": { "ts": 1508824980964 } } }, "$15088350828273lXqUc:matrix.org": { "m.read": { "@airin:matrix.org": { "ts": 1508835135392 }, "@max:matrix.org": { "ts": 1508835162156 } } }, "$150883761231wSHFs:kamax.io": { "m.read": { "@cadair:cadair.com": { "ts": 1508842987108 } } }, "$1508847924149747pfEUA:matrix.org": { "m.read": { "@Yu-Ri:matrix.org": { "ts": 1508847932674 } } }, "$1508848708208ukiAr:berigora.net": { "m.read": { "@enough:matrix.org": { "ts": 1508848714571 } } }, "$1508849286216cNNwg:berigora.net": { "m.read": { "@bob555:matrix.org": { "ts": 1508849289171 } } }, "$1508851829210107shoXG:matrix.org": { "m.read": { "@loredan13:matrix.org": { "ts": 1508852659238 } } }, "$1508858829131826JVINE:m1nd.io": { "m.read": { "@talle:0db.nl": { "ts": 1508859101026 } } }, "$1508874370492dLIEw:sw1v.org": { "m.read": { "@Milan:tchncs.de": { "ts": 1508874794379 } } }, "$15088745342mYziu:tchncs.de": { "m.read": { "@matt:zerebubuth.social": { "ts": 1508874715870 } } }, "$1508875303532Fzzar:chat.weho.st": { "m.read": { "@passant:matrix.org": { "ts": 1508877256816 } } }, "$1508880855509jMFop:t2l.io": { "m.read": { "@petersch:peterscholtens.net": { "ts": 1508881622137 } } }, "$150888182887eOsya:riot.ovh": { "m.read": { "@illandan:matrix.org": { "ts": 1508881839381 } } }, "$1508882963778891iWSWI:matrix.org": { "m.read": { "@brian:levianetwork.dynu.net": { "ts": 1508892438516 }, "@thekyriarchy:matrix.org": { "ts": 1508884849623 } } }, "$1508898755988030ZEsvT:matrix.org": { "m.read": { "@jooize:esko.bar": { "ts": 1508899977148 } } }, "$15089053051060212YLrzc:matrix.org": { "m.read": { "@entrio:matrix.org": { "ts": 1508905526264 } } }, "$15089092381099403TKPOA:matrix.org": { "m.read": { "@KindOne:matrix.org": { "ts": 1508909290693 } } }, "$1508919206534XPjKm:sw1v.org": { "m.read": { "@fenuks:sibnsk.net": { "ts": 1508919216747 } } }, "$1508933292197koFVl:riot.ovh": { "m.read": { "@pafcu:matrix.org": { "ts": 1509017602558 } } }, "$1508936399240mhuyT:riot.ovh": { "m.read": { "@Jelv:matrix.org": { "ts": 1508936666800 } } }, "$15089375141439215zKJHw:matrix.org": { "m.read": { "@muppeth:disroot.org": { "ts": 1508937529916 } } }, "$1508945235303APmaf:riot.ovh": { "m.read": { "@intelfx:intelfx.name": { "ts": 1508946294272 } } }, "$15089483561638360vBtEL:matrix.org": { "m.read": { "@f0x:matrix.org": { "ts": 1508948418932 } } }, "$15089904922301618KpJJD:matrix.org": { "m.read": { "@tom:lant.uk": { "ts": 1509006734930 } } }, "$15090304722783739OdxLc:matrix.org": { "m.read": { "@wouter:wbdv.nl": { "ts": 1509030629745 }, "@woutifier:matrix.org": { "ts": 1509030473465 } } }, "$1509033108540sUQGM:riot.ovh": { "m.read": { "@Valodim:stratum0.org": { "ts": 1509033155698 } } }, "$15090343631653CitWX:thebeckmeyers.xyz": { "m.read": { "@Amandine:matrix.org": { "ts": 1509034590483 } } }, "$15090351482869031XbACQ:matrix.org": { "m.read": { "@abo:matrix.org": { "ts": 1509036467744 } } }, "$1509044677938YmmIl:t2l.io": { "m.read": { "@pavi:disroot.org": { "ts": 1509044820981 } } }, "$15090942761012XqPpR:sw1v.org": { "m.read": { "@JTE:matrix.org": { "ts": 1509098579945 }, "@TurBoss:matrix.org": { "ts": 1509098330593 } } }, "$15091039613758529JpBgG:matrix.org": { "m.read": { "@spellauge:matrix.org": { "ts": 1509103989278 } } }, "$15091193881125UEYuo:sw1v.org": { "m.read": { "@simon.naab:stusta.de": { "ts": 1509123587558 } } }, "$15091846451141eXLDg:sw1v.org": { "m.read": { "@MaXGGXaM:matrix.org": { "ts": 1509186378962 }, "@beatpanic:matrix.org": { "ts": 1509204447857 }, "@christoph:tools.f4.htw-berlin.de": { "ts": 1509186908205 } } }, "$15091891034813647LIQLF:matrix.org": { "m.read": { "@fireglow:firc.de": { "ts": 1509199250311 } } }, "$15092049124978578LKKIZ:matrix.org": { "m.read": { "@jonas:johni0702.de": { "ts": 1509204975344 } } }, "$15092169191145ElRBB:sw1v.org": { "m.read": { "@jon:terracrypt.net": { "ts": 1509216919930 } } }, "$15092193761147XGBEy:sw1v.org": { "m.read": { "@jaredmonkey:matrix.org": { "ts": 1509224276892 } } }, "$15092287875292403ufEcq:matrix.org": { "m.read": { "@kkr:matrix.org": { "ts": 1509232355069 } } }, "$15092692935663977OmUjW:matrix.org": { "m.read": { "@kegan:matrix.org": { "ts": 1509272001031 } } }, "$15092752025714103LIGEg:matrix.org": { "m.read": { "@rek2:hispagatos.org": { "ts": 1509284069948 } } }, "$15092752435714494fCzsm:matrix.org": { "m.read": { "@testeruser1:matrix.org": { "ts": 1509277197754 } } }, "$15092777035739618TlIvs:matrix.org": { "m.read": { "@mihaylov:hris.to": { "ts": 1509277966451 } } }, "$1509284627136BEAfR:kamax.io": { "m.read": { "@matt:io4.us": { "ts": 1509284745690 } } }, "$150930312469aoxiC:zenfolie.org": { "m.read": { "@silex:slxh.eu": { "ts": 1509305543052 } } }, "$1509325639284fsELN:kamax.io": { "m.read": { "@eoiki:matrix.org": { "ts": 1509348060034 }, "@jurek:kolosowscy.pl": { "ts": 1509357690277 }, "@poulad:matrix.org": { "ts": 1509328863779 }, "@traverseda:matrix.org": { "ts": 1509325894200 } } }, "$15093436376565166AuVBf:matrix.org": { "m.read": { "@hash:matrix.org": { "ts": 1509347278155 } } }, "$15093728912060ZaLjY:matrix.veritasgenetics.com": { "m.read": { "@jan:jpath.de": { "ts": 1509373132689 } } }, "$1509375731322odKNo:kamax.io": { "m.read": { "@creamyhorror:matrix.org": { "ts": 1509377287854 } } }, "$1509389300498929kDwrz:matrix.org": { "m.read": { "@patrickr:matrix.org": { "ts": 1509389513283 } } }, "$15094001931691IceUs:cervoi.se": { "m.read": { "@rmookhram:matrix.org": { "ts": 1509400186856 } } }, "$1509401044708781HsRCf:matrix.org": { "m.read": { "@florianjacob:matrix.org": { "ts": 1509401065060 } } }, "$15094027411706gMFfj:cervoi.se": { "m.read": { "@istand:matrix.org": { "ts": 1509403399795 } } }, "$1509405596778026DARyk:matrix.org": { "m.read": { "@morignot2011:iiens.net": { "ts": 1509405751106 } } }, "$1509430657117KZKLV:openpsychology.net": { "m.read": { "@mele:matrix.org": { "ts": 1509435714111 } } }, "$150944343644244qVUPa:m1nd.io": { "m.read": { "@ander:matrix.org": { "ts": 1509443443188 } } }, "$150944767390FJjZI:riot.ovh": { "m.read": { "@SuljoDelic:matrix.veritasgenetics.com": { "ts": 1509448648796 } } }, "$1509470023543IgOZz:magnap.dk": { "m.read": { "@bryce234:matrix.org": { "ts": 1509472701791 } } }, "$15094761401706058OpgHl:matrix.org": { "m.read": { "@madguy02:matrix.org": { "ts": 1509477546373 } } }, "$1509482211777UnrsY:magnap.dk": { "m.read": { "@martin8412:unixpimps.net": { "ts": 1509493113315 } } }, "$15094848621861920lXXOx:matrix.org": { "m.read": { "@matthewtest:matrix.org": { "ts": 1509484963512 } } }, "$15094938352003626rPyPp:matrix.org": { "m.read": { "@al76:alscs.net": { "ts": 1509505147667 } } }, "$15095074272166381VcaZD:matrix.org": { "m.read": { "@kalle:matrix.c4hx.com": { "ts": 1509509218934 } } }, "$15095124652210383RweEd:matrix.org": { "m.read": { "@tom:karp.id.au": { "ts": 1509513038298 } } }, "$15095288612347317sRPGF:matrix.org": { "m.read": { "@roc:rvalles.net": { "ts": 1509529709445 } } }, "$150953759475RHsjs:kittenface.studio": { "m.read": { "@ZombBi:matrix.org": { "ts": 1509547131738 }, "@digital:sorunome.de": { "ts": 1509539400913 } } }, "$1509539900586Hhdif:matrix.veritasgenetics.com": { "m.read": { "@agd:epiphyte.network": { "ts": 1509981633343 } } }, "$1509540253601FbwXu:matrix.veritasgenetics.com": { "m.read": { "@dluciv:matrix.org": { "ts": 1509540349354 } } }, "$15095442191qDTEU:matrix.veritasgenetics.com": { "m.read": { "@dv_ryabyy:matrix.bingo-boom.ru": { "ts": 1509545516058 } } }, "$1509559685337Jciej:riot.ovh": { "m.read": { "@kbraham:matrix.braham.eu": { "ts": 1509560791529 } } }, "$15095640883971NyCKC:ralith.com": { "m.read": { "@b707:matrix.org": { "ts": 1509564093703 } } }, "$15095664462928678rvCbt:matrix.org": { "m.read": { "@ed:polypeak.biz": { "ts": 1509567318122 }, "@trinary:matrix.org": { "ts": 1509566890287 } } }, "$15095794593160622tarmp:matrix.org": { "m.read": { "@rrix:kickass.systems": { "ts": 1509579500209 } } }, "$15095834463217010aujGK:matrix.org": { "m.read": { "@kyrias:kyriasis.com": { "ts": 1509584402387 } } }, "$15096091883472958DTkvn:matrix.org": { "m.read": { "@suy:matrix.org": { "ts": 1509609385953 } } }, "$150961549133GYeAe:msgs.tk": { "m.read": { "@bnvk:matrix.org": { "ts": 1509615778510 } } }, "$15096158643545114SjQkJ:matrix.org": { "m.read": { "@panicbit:matrix.org": { "ts": 1509618431390 } } }, "$15096191863585654SnUvL:matrix.org": { "m.read": { "@gently_blown_kazoo:matrix.org": { "ts": 1509623770692 } } }, "$15096268423688981CYYXW:matrix.org": { "m.read": { "@caught_in_the_matrix:matrix.org": { "ts": 1509637232368 }, "@sven:a6n.de": { "ts": 1509637010960 } } }, "$15096483834093694nPUiS:matrix.org": { "m.read": { "@sramkrishna:matrix.org": { "ts": 1509648537183 } } }, "$15096584864285085fvhKF:matrix.org": { "m.read": { "@hristo:venev.name": { "ts": 1509658489582 } } }, "$15096612810XaSpa:softing.com": { "m.read": { "@eternaleye:matrix.org": { "ts": 1509687127224 } } }, "$15096663044405783cvQTs:matrix.org": { "m.read": { "@alex:matrix.tha.kz": { "ts": 1509686222668 }, "@sniffy:unixpimps.net": { "ts": 1509667148452 } } }, "$15096951714712236IScfH:matrix.org": { "m.read": { "@lx:matrix.org": { "ts": 1509695847179 } } }, "$15097049354818932rWAxA:matrix.org": { "m.read": { "@m:acme.bo.it": { "ts": 1509711365027 } } }, "$15097161851678bSgWT:sw1v.org": { "m.read": { "@slipeer:matrix.org": { "ts": 1509716200026 } } }, "$1509726237293zmTwt:safaradeg.net": { "m.read": { "@MateusRodCosta:matrix.org": { "ts": 1509728086230 } } }, "$1509737939482476BwdEI:matrix.org": { "m.read": { "@davidar:matrix.org": { "ts": 1509737946643 }, "@travis:aws-t1.t2l.io": { "ts": 1509738605672 } } }, "$1509744195591170aiZTF:matrix.org": { "m.read": { "@richard_w:matrix.org": { "ts": 1509744433491 } } }, "$1509757876790638rewMW:matrix.org": { "m.read": { "@fireglow:matrix.org": { "ts": 1509758056668 } } }, "$1509758166794414dxscU:matrix.org": { "m.read": { "@ZeroMe:matrix.org": { "ts": 1509758941209 } } }, "$15097687331377SHPtj:berigora.net": { "m.read": { "@rusty-shackleford:matrix.org": { "ts": 1509768857585 } } }, "$1509769734920410pGNma:matrix.org": { "m.read": { "@travis:t2bot.io": { "ts": 1509771117909 } } }, "$1509809982691UmSZT:magnap.dk": { "m.read": { "@hanga18:matrix.org": { "ts": 1509810516479 } } }, "$1509810612694uQAcO:magnap.dk": { "m.read": { "@viccuad:matrix.org": { "ts": 1509813359068 } } }, "$15098220771439772sSUYw:matrix.org": { "m.read": { "@criztovyl:matrix.org": { "ts": 1509822091872 } } }, "$1509822713494LqPLj:krtdex.com": { "m.read": { "@alice:alicerobotics.cf": { "ts": 1509822725467 } } }, "$15098234311458222psvji:matrix.org": { "m.read": { "@ahouts:matrix.ahouts.com": { "ts": 1509824612380 } } }, "$1509829922389luNkP:kamax.io": { "m.read": { "@al:bandsal.at": { "ts": 1509829956427 } } }, "$1509833642552vlZCe:riot.ovh": { "m.read": { "@musoke:matrix.org": { "ts": 1509833646831 } } }, "$15098338131602509wkKBl:matrix.org": { "m.read": { "@itsfemme:matrix.org": { "ts": 1509833919096 } } }, "$1509841131531SgURY:kamax.io": { "m.read": { "@dylanger:matrix.org": { "ts": 1509861335574 }, "@r3pek:r3pek.org": { "ts": 1509851165650 } } }, "$1509866407636ulhUM:kamax.io": { "m.read": { "@friedger:matrix.org": { "ts": 1509867928288 } } }, "$15098764402009656dVMkO:matrix.org": { "m.read": { "@arx:matrix.org": { "ts": 1509879804919 }, "@roland:planitz.at": { "ts": 1509890338228 }, "@rschulman:westwork.org": { "ts": 1509895545287 } } }, "$1509899633705AEDlm:kamax.io": { "m.read": { "@Hiro:elynx.fr": { "ts": 1509900122115 } } }, "$15099015289602FJRCD:kickass.systems": { "m.read": { "@epdtry:matrix.org": { "ts": 1509905281852 } } }, "$15099164971731sCRzj:sw1v.org": { "m.read": { "@JoshLemer:matrix.org": { "ts": 1509917162170 }, "@MeTheFlea:matrix.org": { "ts": 1509924332603 } } }, "$1509937357325ZpoYi:t2l.io": { "m.read": { "@narispo:home.matrix.one-crazy-human.net": { "ts": 1509937378511 } } }, "$150994306913137rVjHb:ralith.com": { "m.read": { "@elmago:gatomago.com": { "ts": 1509948142703 } } }, "$15099587601779zWpwV:berigora.net": { "m.read": { "@daopu:matrix.org": { "ts": 1509959617446 } } }, "$15099646843535881FnJYn:matrix.org": { "m.read": { "@florian.seidner:matrix.org": { "ts": 1509966270185 }, "@sandhose:sandhose.fr": { "ts": 1509967732243 } } }, "$15099684873656118OTvDO:matrix.org": { "m.read": { "@flipchrist:matrix.org": { "ts": 1509968874425 } } }, "$15099707423715588hhmvx:matrix.org": { "m.read": { "@clintm:matrix.org": { "ts": 1509970818033 } } }, "$15099738493779630LQhrV:matrix.org": { "m.read": { "@Delic:matrix.veritasgenetics.com": { "ts": 1509974097176 }, "@stary:matrix.9net.org": { "ts": 1509974831722 } } }, "$15099834871244HaHPF:matrix.veritasgenetics.com": { "m.read": { "@tuxitagnu:matrix.org": { "ts": 1509986076277 } } }, "$150999322756ZpWtm:msgs.tk": { "m.read": { "@fl1pfl0p:matrix.org": { "ts": 1509994213441 } } }, "$15099982774302786ehioS:matrix.org": { "m.read": { "@gerco:dries.info": { "ts": 1510000127602 }, "@keithzg:riot.keithzg.ca": { "ts": 1510002438140 }, "@shell:57north.org.uk": { "ts": 1510000976661 } } }, "$151005867876DYgeL:msgs.tk": { "m.read": { "@mizmo:matrix.org": { "ts": 1510059603459 } } }, "$15100694151024310PLeEb:matrix.org": { "m.read": { "@mflow:matrix.org": { "ts": 1510070223544 } } }, "$15100712071060329JTqnf:matrix.org": { "m.read": { "@jcgruenhage:matrix.org": { "ts": 1510072895330 } } }, "$15100753050SiEUF:gottsnack.net": { "m.read": { "@mujx:matrix.org": { "ts": 1510075322464 } } }, "$151009087331ZFdvU:gottsnack.net": { "m.read": { "@aegir:kamax.cloud": { "ts": 1510091732331 }, "@feld:riot.brocolo.us": { "ts": 1510092660361 }, "@ultrasparc1:matrix.org": { "ts": 1510095984703 } } }, "$15101220201842516WXvYc:matrix.org": { "m.read": { "@PC-Admin:perthchat.org": { "ts": 1510123013656 }, "@jomari:matrix.org": { "ts": 1510123129829 } } }, "$1510129585103UEPPP:sw1v.org": { "m.read": { "@erdnaxeli:cervoi.se": { "ts": 1510129723909 } } }, "$1510131300106KLsQz:sw1v.org": { "m.read": { "@chris:tarq.io": { "ts": 1510131303179 } } }, "$1510131904111Suwfi:sw1v.org": { "m.read": { "@Rinnhofer:matrix.org": { "ts": 1510143491915 }, "@schortl:matrix.org": { "ts": 1510144266375 }, "@vimacs:matrixim.cc": { "ts": 1510145775323 } } }, "$15101360252019297OFGKL:matrix.org": { "m.read": { "@brain:matrix.org": { "ts": 1510139559868 }, "@nba:matrix.org": { "ts": 1510137890667 }, "@pamo:matrix.org": { "ts": 1510136235668 } } }, "$151017132179285cALAK:matrix.org": { "m.read": { "@s.pantaleev:matrix.org": { "ts": 1510172239610 }, "@sp:softing.com": { "ts": 1510177677343 } } }, "$1510188838383438tIyKP:matrix.org": { "m.read": { "@boson:matrix.org": { "ts": 1510188838731 }, "@eggster:matrix.org": { "ts": 1510191586064 } } }, "$1510191952424161jbFtW:matrix.org": { "m.read": { "@illyohs:matrix.org": { "ts": 1510195403220 }, "@lephihungch:matrix.org": { "ts": 1510195215104 }, "@the-orb:matrix.org": { "ts": 1510193083727 } } }, "$1510198528500133EnUZS:matrix.org": { "m.read": { "@eggy:eggy.cc": { "ts": 1510198568103 } } }, "$151020730199546ggpZC:matrix.org": { "m.read": { "@joenas:gottsnack.net": { "ts": 1510211976215 } } }, "$15102152641003OhAGr:riot.ovh": { "m.read": { "@sebastian:petunientopf.ch": { "ts": 1510216485913 }, "@sh1omi:matrix.org": { "ts": 1510215672376 } } }, "$1510222215576rAccs:vurpo.fi": { "m.read": { "@cjd:matrix.org": { "ts": 1510222465997 } } }, "$15102336491022EMBFx:riot.ovh": { "m.read": { "@brdy:matrix.org": { "ts": 1510233787870 } } }, "$1510234646673907SeNAe:matrix.org": { "m.read": { "@thehurley3:matrix.org": { "ts": 1510234653804 } } }, "$151023827389pDjbE:msgs.tk": { "m.read": { "@wmai:matrix.org": { "ts": 1510238441316 } } }, "$1510238458736337QlRem:matrix.org": { "m.read": { "@zottel:matrix.zottel.net": { "ts": 1510240640593 } } }, "$1510244830249ztKDl:t2l.io": { "m.read": { "@vanlan:matrix.org": { "ts": 1510246577449 } } }, "$1510250874329QBkwY:sw1v.org": { "m.read": { "@croxis:croxis.net": { "ts": 1510250891377 } } }, "$1510252674353Nikkz:sw1v.org": { "m.read": { "@148833:matrix.org": { "ts": 1510252695881 } } }, "$15102529501417jmBfx:kamax.io": { "m.read": { "@Benrob0329:matrix.org": { "ts": 1510252959087 } } }, "$15102533131422UEvAT:kamax.io": { "m.read": { "@Chronody:matrix.org": { "ts": 1510255249460 }, "@hrjet:matrix.org": { "ts": 1510254465886 } } }, "$15102674524425lJzml:agr.social": { "m.read": { "@abeckmeyer:matrix.org": { "ts": 1510280799018 }, "@m1nd:m1nd.io": { "ts": 1510271465488 } } }, "$15102937642234IknES:berigora.net": { "m.read": { "@karieton:matrix.org": { "ts": 1510423783227 } } }, "$15102938252236NOOIl:berigora.net": { "m.read": { "@xMajedz:matrix.org": { "ts": 1510293827432 } } }, "$151029595531qrYDh:sw1v.org": { "m.read": { "@mitchk:matrix.org": { "ts": 1510296010087 } } }, "$15102961472276UuzVv:berigora.net": { "m.read": { "@samuel:walladge.net": { "ts": 1510297093247 } } }, "$1510311837671080eejRY:matrix.org": { "m.read": { "@santhoshperiyasamy:matrix.org": { "ts": 1510311842140 } } }, "$15103123851116xqwgK:riot.ovh": { "m.read": { "@luna:kreatasien.de": { "ts": 1510325381746 }, "@phrag:nsa.lol": { "ts": 1510325111193 } } }, "$1510322279800098cKpTP:matrix.org": { "m.read": { "@merk:matrix.org": { "ts": 1510322308128 } } }, "$151033365316690UcyXb:tang.ents.ca": { "m.read": { "@sven:matrix.eclabs.de": { "ts": 1510334079630 }, "@trousermonkey:matrix.org": { "ts": 1510334953328 } } }, "$151033530513MWvQj:home.rdash.in": { "m.read": { "@travis:tang.ents.ca": { "ts": 1510335333324 } } }, "$15103410901126994NrxoX:matrix.org": { "m.read": { "@jas99:matrix.org": { "ts": 1510343010979 } } }, "$15103533861339052DBqvT:matrix.org": { "m.read": { "@alain:zenfolie.org": { "ts": 1510355224212 }, "@savage:savics.ddns.net": { "ts": 1510356090084 } } }, "$15103561459hySlp:savics.ddns.net": { "m.read": { "@electricemu:matrix.org": { "ts": 1510357337501 } } }, "$15103715352221nvOtj:kamax.io": { "m.read": { "@DatseMultimedia:matrix.org": { "ts": 1510375352945 }, "@pjansen:matrix.org": { "ts": 1510372653270 } } }, "$1510385996551HWeyw:gruenhage.xyz": { "m.read": { "@iefnuy:matrix.org": { "ts": 1510390101373 } } }, "$15103901141722939upugx:matrix.org": { "m.read": { "@select:matrix.org": { "ts": 1510391920300 } } }, "$15103944771756222YkVWj:matrix.org": { "m.read": { "@li:matrix.org": { "ts": 1510394536356 } } }, "$15103948201758719AqmCu:matrix.org": { "m.read": { "@nooitaf:matrix.org": { "ts": 1510401098505 }, "@robswain:matrix.org": { "ts": 1510403223030 }, "@wldhx:matrix.org": { "ts": 1510398955126 } } }, "$15104057541166zaFka:riot.ovh": { "m.read": { "@agiri:agr.social": { "ts": 1510406033790 } } }, "$15104099992264KPbtB:kamax.io": { "m.read": { "@MTRNord:matrix.org": { "ts": 1510411537953 }, "@coffee:disroot.org": { "ts": 1510410125241 }, "@simeng:matrix.org": { "ts": 1510446776097 } } }, "$1510412966219ihhRF:yuri.im": { "m.read": { "@ERIIX:matrix.org": { "ts": 1510418741938 } } }, "$15104501002422230OYVQK:matrix.org": { "m.read": { "@carlos22b:matrix.org": { "ts": 1510494626425 }, "@djmaze:matrix.swarm.strahlungsfrei.de": { "ts": 1510501026997 }, "@jonmungia:bidetxe.org": { "ts": 1510492413750 } } }, "$15104555262480661QQrxz:matrix.org": { "m.read": { "@HER0:matrix.org": { "ts": 1510457894358 }, "@JpRouault01:matrix.org": { "ts": 1510486843810 }, "@flux:matrix.org": { "ts": 1510487377504 }, "@mikaela:disroot.org": { "ts": 1510478492514 } } }, "$15104879792772307lINjQ:matrix.org": { "m.read": { "@kaiyou:tedomum.net": { "ts": 1510487984106 } } }, "$15104999152901042hzLna:matrix.org": { "m.read": { "@teej:matrix.org": { "ts": 1510505571965 } } }, "$15105118683056971ixZuk:matrix.org": { "m.read": { "@eyallior:matrix.org": { "ts": 1510511877035 } } }, "$15105118923057306yxdZN:matrix.org": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1510518329137 }, "@sargon:toppoint.de": { "ts": 1510514407440 }, "@schnuffle:matrix.org": { "ts": 1510516133455 } } }, "$15105236443227887EJQMR:matrix.org": { "m.read": { "@WGH:torlan.ru": { "ts": 1510525338243 } } }, "$15105256583255861EbJZz:matrix.org": { "m.read": { "@alpha:home.rdash.in": { "ts": 1510532867855 }, "@tsuggs:matrix.org": { "ts": 1510545018510 } } }, "$15105343123366684nFGKS:matrix.org": { "m.read": { "@Jacob:matrix.org": { "ts": 1510540526974 }, "@jchen:matrix.org": { "ts": 1510536525232 }, "@lehmanju:devpi.de": { "ts": 1510553332007 } } }, "$15105573303hExev:t2l.io": { "m.read": { "@lamdoan:matrix.org": { "ts": 1510557333275 } } }, "$15105576483601151NOueL:matrix.org": { "m.read": { "@dineshdb:matrix.org": { "ts": 1510566454192 }, "@hungle:matrix.org": { "ts": 1510558429343 }, "@krs:im.howling.io": { "ts": 1510568534365 }, "@xyz:matrix.org": { "ts": 1510558625712 } } }, "$15105589603613181nsaaL:matrix.org": { "m.read": { "@PunkinPie:matrix.org": { "ts": 1510560964202 } } }, "$15105590563614136iFsSm:matrix.org": { "m.read": { "@Paul90:matrix.org": { "ts": 1510569154859 }, "@TimePath:timepath.xyz": { "ts": 1510564572289 }, "@lb:ldbco.de": { "ts": 1510565836449 }, "@turt2live:matrix.org": { "ts": 1510567416326 } } }, "$15105717990kcHgw:polonkai.eu": { "m.read": { "@erikj:jki.re": { "ts": 1510572245611 } } }, "$15105769121277KFxuV:riot.ovh": { "m.read": { "@Olivier.Nyssen:matrix.org": { "ts": 1510579143161 }, "@florentv:matrix.org": { "ts": 1510580742047 } } }, "$1510580907145653MDwxA:matrix.org": { "m.read": { "@plesch:matrix.f5.htw-berlin.de": { "ts": 1510581087499 }, "@senc01a:matrix.org": { "ts": 1510583676219 } } }, "$151058707437bVJEo:msgs.tk": { "m.read": { "@ace:kittenface.studio": { "ts": 1510593411917 }, "@michael:productionservers.net": { "ts": 1510594369302 }, "@preston:inferiorlattice.com": { "ts": 1510594246418 }, "@rajeevrmenon97:matrix.org": { "ts": 1510593807616 } } }, "$151059467649opYKa:talk.puri.sm": { "m.read": { "@Scootaloose:matrix.org": { "ts": 1510594787248 } } }, "$15105967386VvMSS:scorpionland.net": { "m.read": { "@sven:matrix.nordlab-ev.de": { "ts": 1510596824607 } } }, "$1510597919447857MZvkG:matrix.org": { "m.read": { "@david.seaward:talk.puri.sm": { "ts": 1510597942021 } } }, "$1510598412457492EQCUo:matrix.org": { "m.read": { "@ticao:matrix.org": { "ts": 1510598421683 } } }, "$1510598503459295osNJZ:matrix.org": { "m.read": { "@brooksm:scorpionland.net": { "ts": 1510598628163 } } }, "$1510603317550549WkqUh:matrix.org": { "m.read": { "@nightpool:cybre.space": { "ts": 1510605024259 } } }, "$15106056652420cZOLg:exul.org": { "m.read": { "@stonewareslord:matrix.org": { "ts": 1510605676981 } } }, "$15106061582422CTFjc:exul.org": { "m.read": { "@Tokodomo:matrix.org": { "ts": 1510607938538 }, "@lub:imninja.net": { "ts": 1510607252009 }, "@matthew2:matrix.org": { "ts": 1510615559743 }, "@max:kamax.io": { "ts": 1510606352980 }, "@st4t3:horsein.space": { "ts": 1510609830381 } } }, "$1510609867675053QJOUv:matrix.org": { "m.read": { "@kurt:roeckx.be": { "ts": 1510610006481 } } }, "$1510610283683167HaCuO:matrix.org": { "m.read": { "@lapinot:matrix.org": { "ts": 1510613275909 } } }, "$1510614540846964UBHwa:matrix.org": { "m.read": { "@EionRobb:matrix.org": { "ts": 1510617807772 } } }, "$15106226881119143aUaAW:matrix.org": { "m.read": { "@magnap:magnap.dk": { "ts": 1510623489367 } } }, "$15106316021306961qmdnd:matrix.org": { "m.read": { "@peddie:matrix.org": { "ts": 1510631611425 } } }, "$15106324491321547mTUpN:matrix.org": { "m.read": { "@adam:thebeckmeyers.xyz": { "ts": 1510632511951 }, "@indefini:matrix.org": { "ts": 1510632823045 } } }, "$15106330211335229vPItq:matrix.org": { "m.read": { "@kaniini:dereferenced.org": { "ts": 1510633111357 }, "@netpro2k:matrix.org": { "ts": 1510633572136 } } }, "$15106349451374627vRHqz:matrix.org": { "m.read": { "@admin:charity.az": { "ts": 1510638471047 }, "@uhoreg:matrix.org": { "ts": 1510635502241 } } }, "$15106406471438099vchtm:matrix.org": { "m.read": { "@JigmeDatse:openpsychology.net": { "ts": 1510640663673 }, "@aaron:raim.ist": { "ts": 1510640695602 } } }, "$15106410551442167tQAYa:matrix.org": { "m.read": { "@john:matrix.freelock.com": { "ts": 1510641215536 } } }, "$15106416801448014fSPJj:matrix.org": { "m.read": { "@thrrgilag:monkeystew.net": { "ts": 1510641726442 } } }, "$15106418011449030WKdfd:matrix.org": { "m.read": { "@Ekho:matrix.org": { "ts": 1510642261413 } } }, "$151064235029171zJrzR:ralith.com": { "m.read": { "@Asiannoodles42:matrix.org": { "ts": 1510642443742 }, "@MrCustomizer:matrix.org": { "ts": 1510642642990 }, "@RAOF:matrix.org": { "ts": 1510643086413 }, "@pztrn:matrix.feder8.ru": { "ts": 1510642759530 } } }, "$1510644413481vNMpW:conference.open-xchange.com": { "m.read": { "@jan.christian:gruenhage.xyz": { "ts": 1510644334674 } } }, "$15106449371478963lgkAC:matrix.org": { "m.read": { "@bjoern.vonderlinde:conference.open-xchange.com": { "ts": 1510645118036 } } }, "$15106456581486208ehlFN:matrix.org": { "m.read": { "@Murz:matrix.org": { "ts": 1510645664138 } } }, "$15106458401314uNkWf:riot.ovh": { "m.read": { "@Manu:matrix.org": { "ts": 1510648234024 } } }, "$15106459671489112BXEyQ:matrix.org": { "m.read": { "@voyager:t2bot.io": { "ts": 1510645981285 } } }, "$15106462121318rdzih:riot.ovh": { "m.read": { "@exul:exul.org": { "ts": 1510646214646 } } }, "$15106468121497389fFTFH:matrix.org": { "m.read": { "@jental:jental.name": { "ts": 1510647477481 }, "@mubot:matrix.org": { "ts": 1510646813249 } } }, "$15106476301330RTWJR:riot.ovh": { "m.read": { "@SyrupThinker:matrix.org": { "ts": 1510650058891 }, "@equinox:matrix.org": { "ts": 1510648194940 }, "@friedkiwi:hackerspace.be": { "ts": 1510651301072 }, "@jental:matrix.org": { "ts": 1510648226586 }, "@ralith:ralith.com": { "ts": 1510649435246 }, "@rnhmjoj:maxwell.ydns.eu": { "ts": 1510648294392 }, "@trung:matrix.org": { "ts": 1510647659303 } } }, "$15106518761555240Tslkv:matrix.org": { "m.read": { "@DasNordlicht:matrix.ffslfl.net": { "ts": 1510653916334 }, "@bookworm:matrix.org": { "ts": 1510655898918 }, "@ilyaigpetrov:matrix.org": { "ts": 1510653849710 }, "@kythyria:berigora.net": { "ts": 1510656670133 }, "@matthew:matrix.org": { "ts": 1510660914023 }, "@peter.scholtens:matrix4me.nl": { "ts": 1510654535512 }, "@realitygaps:chat.weho.st": { "ts": 1510655985121 } } }, "$15106519791556509TfDyn:matrix.org": { "m.read": { "@xsteadfastx:matrix.xsteadfastx.org": { "ts": 1510652688962 } } }, "$15106520761557713HDrnT:matrix.org": { "m.read": { "@oly:matrix.org": { "ts": 1510652533633 } } }, "$15106536101577193PcUsy:matrix.org": { "m.read": { "@ImpYoo:matrix.org": { "ts": 1510654383581 } } }, "$15106609421664299sRcWX:matrix.org": { "m.read": { "@richvdh:sw1v.org": { "ts": 1510660953843 } } }, "$1510660979417VKkhh:sw1v.org": { "m.read": { "@Coffee:matrix.org": { "ts": 1510661038160 }, "@dupa11111dupa:matrix.org": { "ts": 1510661570710 } } }, "$151066110053AEPOa:scorpionland.net": { "m.read": { "@kitsune:matrix.org": { "ts": 1510667752611 } } }, "$15106611661667705QDrMD:matrix.org": { "m.read": { "@Cadair:matrix.org": { "ts": 1510662362042 }, "@Giom:matrix.org": { "ts": 1510662721475 }, "@bobderbaumeister:matrix.org": { "ts": 1510665994122 }, "@dave:matrix.org": { "ts": 1510663394952 }, "@gergely:polonkai.eu": { "ts": 1510661383996 }, "@irx:matrix.org": { "ts": 1510667880970 }, "@jzk:matrix.org": { "ts": 1510661793894 }, "@krombel:msgs.tk": { "ts": 1510661253786 }, "@levans:safaradeg.net": { "ts": 1510663806688 }, "@mcfly2:matrix.org": { "ts": 1510662898109 }, "@notetest:diasp.in": { "ts": 1510664142424 }, "@ptman:matrix.org": { "ts": 1510663279273 }, "@seequ:krtdex.com": { "ts": 1510664707610 }, "@sraja1:matrix.org": { "ts": 1510666890711 }, "@travis:t2l.io": { "ts": 1510666470413 }, "@vurpo:vurpo.fi": { "ts": 1510667453658 }, "@x:riot.ovh": { "ts": 1510662657387 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "avatar_url": null, "displayname": "fleg", "membership": "join" }, "event_id": "$148493986214obDnZ:fiksel.info", "origin_server_ts": 1484939862231, "sender": "@oleg:fiksel.info", "state_key": "@oleg:fiksel.info", "type": "m.room.member", "unsigned": { "age": 22, "replaces_state": "$14846015261FCtXU:fiksel.info" } }, { "content": { "avatar_url": null, "displayname": "MrC (IRC)", "membership": "join" }, "event_id": "$15020469893874247qwuyp:matrix.org", "membership": "join", "origin_server_ts": 1502046989134, "sender": "@freenode_MrC:matrix.org", "state_key": "@freenode_MrC:matrix.org", "type": "m.room.member", "unsigned": { "age": 8620963544, "replaces_state": "$15016147506125704wPcZV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$146137159184031tCDLS:matrix.org", "membership": "leave", "origin_server_ts": 1461371591565, "sender": "@acamda:matrix.org", "state_key": "@acamda:matrix.org", "type": "m.room.member", "unsigned": { "age": 49296361113, "replaces_state": "$146137157884000BwhDB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FGzJmkCLiuGZQjtuvDxwZLsZ", "displayname": "santhosh1807", "membership": "join" }, "event_id": "$15077104511263383kTTyk:matrix.org", "membership": "join", "origin_server_ts": 1507710451520, "sender": "@santhoshperiyasamy:matrix.org", "state_key": "@santhoshperiyasamy:matrix.org", "type": "m.room.member", "unsigned": { "age": 2957501158, "replaces_state": "$15071287504445287FNvPu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14753103111384958fFtqf:matrix.org", "membership": "leave", "origin_server_ts": 1475310311960, "sender": "@mbtamuli:matrix.org", "state_key": "@mbtamuli:matrix.org", "type": "m.room.member", "unsigned": { "age": 35357640718, "replaces_state": "$1473134615141295NDSSy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1474495024370465NLhwn:matrix.org", "membership": "leave", "origin_server_ts": 1474495024738, "sender": "@bdib:matrix.org", "state_key": "@bdib:matrix.org", "type": "m.room.member", "unsigned": { "age": 36172927940, "replaces_state": "$147316998128945VxUuJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150492370823706ivjED:matrix.org", "membership": "leave", "origin_server_ts": 1504923708730, "sender": "@matrixisreal:matrix.org", "state_key": "@matrixisreal:matrix.org", "type": "m.room.member", "unsigned": { "age": 5744243948, "replaces_state": "$15039181942637990EnIlA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xabIqznjTHipCOsgLQEdijIa#auto", "displayname": "vbezhenar", "membership": "join" }, "event_id": "$1479213711289757RxiGc:matrix.org", "membership": "join", "origin_server_ts": 1479213711169, "sender": "@vbezhenar:matrix.org", "state_key": "@vbezhenar:matrix.org", "type": "m.room.member", "unsigned": { "age": 31454241509, "replaces_state": "$14452599448528vWhgW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TtsIqHDswQBgdmiRLBWojrLb", "displayname": "Shackra Sislock", "membership": "join" }, "event_id": "$1442585056109970Fqzne:matrix.org", "origin_server_ts": 1442585056661, "sender": "@jorgean:matrix.org", "state_key": "@jorgean:matrix.org", "type": "m.room.member", "unsigned": { "age": 68082896017 } }, { "content": { "avatar_url": "mxc://matrix.org/mqtmfrydXdpDEXOnJFXJPaIW#auto", "displayname": "Lesly Murillo", "membership": "join" }, "event_id": "$144735512414936YLqsd:matrix.org", "membership": "join", "origin_server_ts": 1447355124566, "sender": "@lmurillo:matrix.org", "state_key": "@lmurillo:matrix.org", "type": "m.room.member", "unsigned": { "age": 63312828112 } }, { "content": { "membership": "leave" }, "event_id": "$14947464970hdHLM:h3ndr1k.de", "membership": "leave", "origin_server_ts": 1494746497186, "sender": "@hendrik:h3ndr1k.de", "state_key": "@hendrik:h3ndr1k.de", "type": "m.room.member", "unsigned": { "age": 15921455492, "prev_content": { "avatar_url": "mxc://h3ndr1k.de/TjsiStPGaJeTVFTsxGSZECHA", "displayname": "H3ndr1k", "membership": "join" }, "prev_sender": "@hendrik:h3ndr1k.de", "replaces_state": "$14829593918YsMEU:h3ndr1k.de" } }, { "content": { "avatar_url": null, "displayname": "CcxWrk (IRC)", "membership": "join" }, "event_id": "$15014997434109797kAVRJ:matrix.org", "membership": "join", "origin_server_ts": 1501499743264, "sender": "@freenode_CcxWrk:matrix.org", "state_key": "@freenode_CcxWrk:matrix.org", "type": "m.room.member", "unsigned": { "age": 9168209414, "replaces_state": "$15014748443798022Vxims:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nJToTvolVqHGvkSmSlJtRira", "displayname": "cwd", "membership": "join" }, "event_id": "$14781220271462968rQPcH:matrix.org", "membership": "join", "origin_server_ts": 1478122027946, "sender": "@cwd:matrix.org", "state_key": "@cwd:matrix.org", "type": "m.room.member", "unsigned": { "age": 32545924732 } }, { "content": { "membership": "leave" }, "event_id": "$15014748463798062LpDhJ:matrix.org", "membership": "leave", "origin_server_ts": 1501474846481, "sender": "@freenode_HeN_:matrix.org", "state_key": "@freenode_HeN_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193106197, "replaces_state": "$1499318169368024zIlJC:matrix.org" } }, { "content": { "avatar_url": "mxc://canarymod.net/akHJjhNnICOsiLXyfsZEDafc", "displayname": "Willem", "membership": "join" }, "event_id": "$149200093129aAbLZ:canarymod.net", "membership": "join", "origin_server_ts": 1492000931814, "sender": "@willem:canarymod.net", "state_key": "@willem:canarymod.net", "type": "m.room.member", "unsigned": { "age": 18667020864, "prev_content": { "avatar_url": "mxc://canarymod.net/LdhpzjtuFJyCgbaVMMgCTTWd", "displayname": "Willem", "membership": "join" }, "prev_sender": "@willem:canarymod.net", "replaces_state": "$148926196014BQLOA:canarymod.net" } }, { "content": { "avatar_url": "mxc://matrix.org/NtBCZNmHaxFyJEscnncbefmr", "displayname": "RaMer", "membership": "join" }, "event_id": "$1483232224511877QuMbJ:matrix.org", "membership": "join", "origin_server_ts": 1483232224102, "sender": "@RaMer:matrix.org", "state_key": "@RaMer:matrix.org", "type": "m.room.member", "unsigned": { "age": 27435728576 } }, { "content": { "avatar_url": "mxc://matrix.org/QbzEIwpktXhrgduACNGVWqXF", "displayname": "Skihuhn", "membership": "join" }, "event_id": "$14579622975525BxOan:matrix.org", "membership": "join", "origin_server_ts": 1457962297133, "sender": "@huhnix:matrix.org", "state_key": "@huhnix:matrix.org", "type": "m.room.member", "unsigned": { "age": 52705655545 } }, { "content": { "membership": "leave" }, "event_id": "$143905102954uMAYD:enconn.fr", "origin_server_ts": 1439051029208, "sender": "@AmarOk:enconn.fr", "state_key": "@AmarOk:enconn.fr", "type": "m.room.member", "unsigned": { "age": 71616923470, "replaces_state": "$1438965068161Yznuf:enconn.fr" } }, { "content": { "avatar_url": null, "displayname": "scde", "membership": "join" }, "event_id": "$1479763334691630KtlWi:matrix.org", "membership": "join", "origin_server_ts": 1479763334695, "sender": "@scde:matrix.org", "state_key": "@scde:matrix.org", "type": "m.room.member", "unsigned": { "age": 30904617983 } }, { "content": { "membership": "leave" }, "event_id": "$1451479401496948WsnEH:matrix.org", "origin_server_ts": 1451479401327, "sender": "@sfrrhzrdvnhtdcjzrf:matrix.org", "state_key": "@sfrrhzrdvnhtdcjzrf:matrix.org", "type": "m.room.member", "unsigned": { "age": 59188551351, "replaces_state": "$1451479342496929YhVlo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14824480370EDXnK:kweli.info", "membership": "leave", "origin_server_ts": 1482448037796, "sender": "@x2a:kweli.info", "state_key": "@x2a:kweli.info", "type": "m.room.member", "unsigned": { "age": 28219914882, "prev_content": { "avatar_url": null, "displayname": "x2a", "membership": "join" }, "prev_sender": "@x2a:kweli.info", "replaces_state": "$14824446671EsAhY:kweli.info" } }, { "content": { "avatar_url": null, "displayname": "JudenMagie4", "membership": "join" }, "event_id": "$1466276618453282oENtC:matrix.org", "membership": "join", "origin_server_ts": 1466276618270, "sender": "@JudenMagie4:matrix.org", "state_key": "@JudenMagie4:matrix.org", "type": "m.room.member", "unsigned": { "age": 44391334408 } }, { "content": { "avatar_url": null, "displayname": "koschei", "membership": "join" }, "event_id": "$15085357512063707tIrtv:matrix.org", "membership": "join", "origin_server_ts": 1508535751746, "sender": "@koschei:matrix.org", "state_key": "@koschei:matrix.org", "type": "m.room.member", "unsigned": { "age": 2132200932 } }, { "content": { "avatar_url": null, "displayname": "Not_White_Rabbit (IRC)", "membership": "join" }, "event_id": "$15104999152901042hzLna:matrix.org", "membership": "join", "origin_server_ts": 1510499915483, "sender": "@freenode_Not_White_Rabbit:matrix.org", "state_key": "@freenode_Not_White_Rabbit:matrix.org", "type": "m.room.member", "unsigned": { "age": 168037195, "replaces_state": "$1508469879939570cktGk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631612024386wkiud:matrix.org", "membership": "leave", "origin_server_ts": 1495663161853, "sender": "@freenode_Neo33:matrix.org", "state_key": "@freenode_Neo33:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004790825, "replaces_state": "$14317232016083EUxhQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QLeKRYmRElvfqUgYHjvzRyPd#auto", "displayname": "OverWolf", "membership": "join" }, "event_id": "$145330976484803AkmHn:matrix.org", "origin_server_ts": 1453309764667, "sender": "@bobqwerty:matrix.org", "state_key": "@bobqwerty:matrix.org", "type": "m.room.member", "unsigned": { "age": 57358188011, "replaces_state": "$145096039368949SzPyu:matrix.org" } }, { "content": { "display": [ "SYWEB", "SYN", "SPEC", "SYD", "ORG" ] }, "event_id": "$1416420913229qPazk:matrix.org", "origin_server_ts": 1410963069078, "sender": "@neb:matrix.org", "state_key": "", "stream_ordering": 5823, "type": "neb.plugin.jira.issues.display", "unsigned": { "age": 94247039449 } }, { "content": { "membership": "leave" }, "event_id": "$14991437583416954wXIla:matrix.org", "membership": "leave", "origin_server_ts": 1499143758466, "sender": "@freenode_notem:matrix.org", "state_key": "@freenode_notem:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524194212, "replaces_state": "$14979174511082625PiTiw:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/sklLJJcgLtPcxjFyArRsCBBO#auto", "displayname": "bl", "membership": "join" }, "event_id": "$1452881118111403geGwL:matrix.org", "origin_server_ts": 1452881118027, "sender": "@blropb:matrix.org", "state_key": "@blropb:matrix.org", "type": "m.room.member", "unsigned": { "age": 57786834651, "replaces_state": "$1452880951111107jcXFU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14798402401014526XkOtQ:matrix.org", "membership": "leave", "origin_server_ts": 1479840240094, "sender": "@gitter_TimePath:matrix.org", "state_key": "@gitter_TimePath:matrix.org", "type": "m.room.member", "unsigned": { "age": 30827712584, "replaces_state": "$1464691269455695scClA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1452556583319058DLAEF:matrix.org", "origin_server_ts": 1452556583578, "sender": "@steevak:matrix.org", "state_key": "@steevak:matrix.org", "type": "m.room.member", "unsigned": { "age": 58111369100, "replaces_state": "$1452556566319049dJHGn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "usernamer", "membership": "join" }, "event_id": "$14996184211659934kLDGG:matrix.org", "membership": "join", "origin_server_ts": 1499618421056, "sender": "@usernamer:matrix.org", "state_key": "@usernamer:matrix.org", "type": "m.room.member", "unsigned": { "age": 11049531622 } }, { "content": { "membership": "leave" }, "event_id": "$149487423325XHkJr:wgnr.io", "membership": "leave", "origin_server_ts": 1494874233157, "sender": "@mittwinter:wgnr.io", "state_key": "@mittwinter:wgnr.io", "type": "m.room.member", "unsigned": { "age": 15793719521, "prev_content": { "avatar_url": "mxc://wgnr.io/QVzJSmJmTXoXSMrgQyCyYauk", "displayname": "mittwinter", "membership": "join" }, "prev_sender": "@mittwinter:wgnr.io", "replaces_state": "$14948720051iYkic:wgnr.io" } }, { "content": { "avatar_url": "mxc://terracrypt.net/dgrTvNjRusPYHJNDqgvscjwZ", "displayname": "Jon ☎️", "membership": "join" }, "event_id": "$14945052643747uwVvf:terracrypt.net", "membership": "join", "origin_server_ts": 1494505264899, "sender": "@jon:terracrypt.net", "state_key": "@jon:terracrypt.net", "type": "m.room.member", "unsigned": { "age": 16162687779, "prev_content": { "avatar_url": "mxc://terracrypt.net/zOJfsibJKQKbxQBEMKZRlyJA", "displayname": "Jon ☎️", "membership": "join" }, "prev_sender": "@jon:terracrypt.net", "replaces_state": "$1492734444867SPVbc:terracrypt.net" } }, { "content": { "membership": "leave" }, "event_id": "$1446202165103UgZaQ:severnatazvezda.com", "origin_server_ts": 1446202165320, "sender": "@gonz:severnatazvezda.com", "state_key": "@gonz:severnatazvezda.com", "type": "m.room.member", "unsigned": { "age": 64465787358, "replaces_state": "$144620140888llJTI:severnatazvezda.com" } }, { "content": { "avatar_url": null, "displayname": "Emil", "membership": "join" }, "event_id": "$1458406555100811TAkNd:matrix.org", "membership": "join", "origin_server_ts": 1458406555022, "sender": "@emil:matrix.org", "state_key": "@emil:matrix.org", "type": "m.room.member", "unsigned": { "age": 52261397656, "replaces_state": "$1458405571100394VicgW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14829372133268451kQyZC:matrix.org", "membership": "leave", "origin_server_ts": 1482937213050, "sender": "@Ryals165:matrix.org", "state_key": "@Ryals165:matrix.org", "type": "m.room.member", "unsigned": { "age": 27730739628, "replaces_state": "$14829350823256800GwlHC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14994623031rrBQO:synapse.arbitrarion.com", "origin_server_ts": 1499462303761, "sender": "@hef:synapse.arbitrarion.com", "state_key": "@hef:synapse.arbitrarion.com", "type": "m.room.member", "unsigned": { "age": 14 } }, { "content": { "membership": "leave" }, "event_id": "$15044021751066790Dfozi:matrix.org", "membership": "leave", "origin_server_ts": 1504402175625, "sender": "@dahaus:matrix.org", "state_key": "@dahaus:matrix.org", "type": "m.room.member", "unsigned": { "age": 6265777053, "replaces_state": "$14855597611381830UnjQE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15062693433216061prwoT:matrix.org", "membership": "leave", "origin_server_ts": 1506269343257, "sender": "@minhnhdo:matrix.org", "state_key": "@minhnhdo:matrix.org", "type": "m.room.member", "unsigned": { "age": 4398609421, "replaces_state": "$15062379352923624WcIDf:matrix.org" } }, { "age_ts": 1426880335197, "content": { "avatar_url": null, "displayname": "Nolan", "membership": "join" }, "event_id": "$14268803337HdiGt:thewordnerd.info", "origin_server_ts": 1426880333833, "sender": "@nolan:thewordnerd.info", "state_key": "@nolan:thewordnerd.info", "type": "m.room.member", "unsigned": { "age": 39, "replaces_state": "$14268802293VPgsc:thewordnerd.info" } }, { "content": { "avatar_url": null, "displayname": "Matt", "membership": "join" }, "event_id": "$15086284650lkHQD:zerebubuth.social", "membership": "join", "origin_server_ts": 1508628465856, "sender": "@matt:zerebubuth.social", "state_key": "@matt:zerebubuth.social", "type": "m.room.member", "unsigned": { "age": 2039486822, "replaces_state": "$15086269231xRJuw:zerebubuth.social" } }, { "content": { "avatar_url": "mxc://matrix.org/hPhQPGdEdelJrubMFgVFzQAk", "displayname": "Wiktor", "membership": "join" }, "event_id": "$1469927150768727vKSaQ:matrix.org", "membership": "join", "origin_server_ts": 1469927150056, "sender": "@wiktorek140:matrix.org", "state_key": "@wiktorek140:matrix.org", "type": "m.room.member", "unsigned": { "age": 40740802622, "replaces_state": "$1469927104768662Rhklb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148528434355835tKsbx:matrix.org", "membership": "leave", "origin_server_ts": 1485284343441, "sender": "@Stevens139:matrix.org", "state_key": "@Stevens139:matrix.org", "type": "m.room.member", "unsigned": { "age": 25383609237, "replaces_state": "$148528432555602Tpwbj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mnVImoTHoZBXYWPivmTkYMGj#auto", "displayname": "joeh", "membership": "join" }, "event_id": "$1445128089646114GcBIZ:matrix.org", "origin_server_ts": 1445128089026, "sender": "@joeh:matrix.org", "state_key": "@joeh:matrix.org", "type": "m.room.member", "unsigned": { "age": 65539863652 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14834998441220327tseaU:matrix.org", "membership": "join", "origin_server_ts": 1483499844315, "sender": "@unilovelight:matrix.org", "state_key": "@unilovelight:matrix.org", "type": "m.room.member", "unsigned": { "age": 27168108363 } }, { "content": { "membership": "leave" }, "event_id": "$14824645833tTOCf:matrix.backwardsgiraffe.net", "membership": "leave", "origin_server_ts": 1482464583813, "sender": "@case:matrix.backwardsgiraffe.net", "state_key": "@case:matrix.backwardsgiraffe.net", "type": "m.room.member", "unsigned": { "age": 28203368865, "replaces_state": "$148246076278ApieC:matrix.backwardsgiraffe.net" } }, { "content": { "membership": "leave" }, "event_id": "$14760584651035088laJKk:matrix.org", "membership": "leave", "origin_server_ts": 1476058465718, "sender": "@mkmgcom:matrix.org", "state_key": "@mkmgcom:matrix.org", "type": "m.room.member", "unsigned": { "age": 34609486960, "replaces_state": "$14760580681034233FRGSn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Yoho", "kind": "guest", "membership": "join" }, "event_id": "$1464463547225756nLepI:matrix.org", "membership": "join", "origin_server_ts": 1464463547018, "sender": "@10340:matrix.org", "state_key": "@10340:matrix.org", "type": "m.room.member", "unsigned": { "age": 46204405660 } }, { "content": { "membership": "leave" }, "event_id": "$15106301321274771lCsiy:matrix.org", "membership": "leave", "origin_server_ts": 1510630132853, "sender": "@freenode_The0mega:matrix.org", "state_key": "@freenode_The0mega:matrix.org", "type": "m.room.member", "unsigned": { "age": 37819825, "replaces_state": "$1510208796152545QfFoC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YraHXBUqmeRLmOsMCvShqCKh#auto", "displayname": null, "membership": "join" }, "event_id": "$1447298497908770mpVay:matrix.org", "origin_server_ts": 1447298497850, "sender": "@flushot:matrix.org", "state_key": "@flushot:matrix.org", "type": "m.room.member", "unsigned": { "age": 63369454828 } }, { "content": { "avatar_url": "mxc://matrix.queertoo.org/btiOZZErPXINMMxQVCiBxnBx", "displayname": "𝓤𝓷𝓲𝓪𝓲𝓴𝓪", "membership": "join" }, "event_id": "$145687359328JPGrb:matrix.queertoo.org", "membership": "join", "origin_server_ts": 1456873593872, "sender": "@Uniaika:matrix.queertoo.org", "state_key": "@Uniaika:matrix.queertoo.org", "type": "m.room.member", "unsigned": { "age": 53794358806, "replaces_state": "$14568720659HQHIC:matrix.queertoo.org" } }, { "content": { "membership": "leave" }, "event_id": "$14784309262424345qmTMN:matrix.org", "membership": "leave", "origin_server_ts": 1478430926066, "sender": "@Marzanna:matrix.org", "state_key": "@Marzanna:matrix.org", "type": "m.room.member", "unsigned": { "age": 32237026612, "replaces_state": "$147437862910530odMve:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1481474466334831DCZdL:matrix.org", "membership": "leave", "origin_server_ts": 1481474466057, "sender": "@Lucifer:matrix.org", "state_key": "@Lucifer:matrix.org", "type": "m.room.member", "unsigned": { "age": 29193486621, "replaces_state": "$1471915647141315PoBTV:matrix.org" } }, { "content": { "avatar_url": "mxc://kamax.io/yDkdJRyXzQtEKfaUbOyjHREE", "displayname": "Maximus", "membership": "join" }, "event_id": "$15076512014044iaKAO:kamax.io", "membership": "join", "origin_server_ts": 1507651201537, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 3016751141, "prev_content": { "avatar_url": "mxc://kamax.io/wYRWRxBIculnprUZBpMrgQsD", "displayname": "Maximus", "membership": "join" }, "prev_sender": "@max:kamax.io", "replaces_state": "$15041233152082zqTGt:kamax.io" } }, { "content": { "membership": "leave" }, "event_id": "$14501029072832UoVyR:matrix.org", "origin_server_ts": 1450102907077, "sender": "@rusrmm:matrix.org", "state_key": "@rusrmm:matrix.org", "type": "m.room.member", "unsigned": { "age": 60565045601, "replaces_state": "$145009272193424HisEZ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "magnap", "membership": "join" }, "event_id": "$14655133133YKxpu:magnap.cu.cc", "origin_server_ts": 1465513313104, "sender": "@magnap:magnap.cu.cc", "state_key": "@magnap:magnap.cu.cc", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "avatar_url": "mxc://schnuffle.de/roQnuksAJCBPzWrGDkTKcoqy", "displayname": "@test:schnuffle.de", "membership": "join" }, "event_id": "$14895240290FAKVw:schnuffle.de", "membership": "join", "origin_server_ts": 1489524029583, "sender": "@test:schnuffle.de", "state_key": "@test:schnuffle.de", "type": "m.room.member", "unsigned": { "age": 9478334, "prev_content": { "membership": "leave" }, "prev_sender": "@test:schnuffle.de", "replaces_state": "$14884134401ZoiEz:schnuffle.de" } }, { "content": { "avatar_url": "mxc://faraone.cc/nTQhZJhFoFoBxsqckCMstYtu", "displayname": "lfaraone", "membership": "join" }, "event_id": "$145548206764FwsYP:faraone.cc", "origin_server_ts": 1455482067591, "sender": "@luke:faraone.cc", "state_key": "@luke:faraone.cc", "type": "m.room.member", "unsigned": { "age": 55185885087, "replaces_state": "$145548206560UsliM:faraone.cc" } }, { "content": { "avatar_url": null, "displayname": "andi", "membership": "join" }, "event_id": "$1494263154419IFsLV:matrix.notice.at", "membership": "join", "origin_server_ts": 1494263154798, "sender": "@andreas:matrix.notice.at", "state_key": "@andreas:matrix.notice.at", "type": "m.room.member", "unsigned": { "age": 16404797880, "prev_content": { "avatar_url": null, "displayname": "redplanet", "membership": "join" }, "prev_sender": "@andreas:matrix.notice.at", "replaces_state": "$1493214694122OZPZn:matrix.notice.at" } }, { "content": { "avatar_url": "mxc://matrix.org/tfRqVxZbdVOCJWTutDWvObSt#auto", "displayname": "Edouard", "membership": "join" }, "event_id": "$14301275305443bjGML:matrix.org", "membership": "join", "origin_server_ts": 1430127530649, "sender": "@edouard:matrix.org", "state_key": "@edouard:matrix.org", "type": "m.room.member", "unsigned": { "age": 80540422029 } }, { "content": { "avatar_url": null, "displayname": "Ohtohf", "membership": "join" }, "event_id": "$15059838465390478NCCfJ:matrix.org", "membership": "join", "origin_server_ts": 1505983846690, "sender": "@Ohtohf:matrix.org", "state_key": "@Ohtohf:matrix.org", "type": "m.room.member", "unsigned": { "age": 4684105988 } }, { "content": { "avatar_url": null, "displayname": "K0HAX (IRC)", "membership": "join" }, "event_id": "$1483141619116980bvAjG:matrix.org", "membership": "join", "origin_server_ts": 1483141619704, "sender": "@freenode_K0HAX:matrix.org", "state_key": "@freenode_K0HAX:matrix.org", "type": "m.room.member", "unsigned": { "age": 27526332974 } }, { "content": { "membership": "leave" }, "event_id": "$14956632282025880OGjES:matrix.org", "membership": "leave", "origin_server_ts": 1495663228293, "sender": "@freenode_ya_:matrix.org", "state_key": "@freenode_ya_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004724385, "replaces_state": "$1469635218214048KZpso:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15035185232SIuvi:cong.eu", "membership": "leave", "origin_server_ts": 1503518523014, "sender": "@kc1212:cong.eu", "state_key": "@kc1212:cong.eu", "type": "m.room.member", "unsigned": { "age": 7149429664, "prev_content": { "avatar_url": null, "displayname": "kc1212", "membership": "join" }, "prev_sender": "@kc1212:cong.eu", "replaces_state": "$15035183831XSLLa:cong.eu" } }, { "content": { "membership": "leave" }, "event_id": "$1506793184246324hSKuo:matrix.org", "membership": "leave", "origin_server_ts": 1506793184461, "sender": "@adnissen:matrix.org", "state_key": "@adnissen:matrix.org", "type": "m.room.member", "unsigned": { "age": 3874768217, "replaces_state": "$1506305917413590bSZLs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15092752435714494fCzsm:matrix.org", "membership": "leave", "origin_server_ts": 1509275243851, "sender": "@freenode_Airin:matrix.org", "state_key": "@freenode_Airin:matrix.org", "type": "m.room.member", "unsigned": { "age": 1392708827, "replaces_state": "$15092723685688051IHXMt:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$1491422546309281bLRXL:matrix.org", "membership": "join", "origin_server_ts": 1491422546725, "sender": "@dmitru:matrix.org", "state_key": "@dmitru:matrix.org", "type": "m.room.member", "unsigned": { "age": 19245405953, "redacted_because": { "content": {}, "event_id": "$1491422571309570udelj:matrix.org", "origin_server_ts": 1491422571126, "redacts": "$1491422546309281bLRXL:matrix.org", "sender": "@dmitru:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 19245381552 } }, "redacted_by": "$1491422571309570udelj:matrix.org", "replaces_state": "$1491422366306659COSMB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JoVoyMiHDasaJDrUDfTjchtf", "displayname": "Ahsan Shaokat", "membership": "join" }, "event_id": "$15096091883472958DTkvn:matrix.org", "membership": "join", "origin_server_ts": 1509609188807, "sender": "@ahsan.shaokat:matrix.org", "state_key": "@ahsan.shaokat:matrix.org", "type": "m.room.member", "unsigned": { "age": 1058763871 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1465986668765829xpKCr:matrix.org", "membership": "join", "origin_server_ts": 1465986668269, "sender": "@muhriddin:matrix.org", "state_key": "@muhriddin:matrix.org", "type": "m.room.member", "unsigned": { "age": 44681284409 } }, { "content": { "avatar_url": "mxc://tyler.cat/LPaWtHDwcLyglmqQlsDKBySP", "displayname": "Kodo", "membership": "join" }, "event_id": "$14266179586010aKfAT:tyler.cat", "origin_server_ts": 1426617958170, "sender": "@kodomulo:tyler.cat", "state_key": "@kodomulo:tyler.cat", "type": "m.room.member", "unsigned": { "age": 84049994508, "replaces_state": "$14265672846004iVwvj:tyler.cat" } }, { "content": { "avatar_url": "mxc://matrix.org/lniRpHiPcsxiXOjUgKXSBZBJ", "displayname": "Other Matthew", "membership": "join" }, "event_id": "$1461242427111770unBrD:matrix.org", "membership": "join", "origin_server_ts": 1461242427285, "sender": "@matthewtest:matrix.org", "state_key": "@matthewtest:matrix.org", "type": "m.room.member", "unsigned": { "age": 49425525393 } }, { "content": { "avatar_url": "mxc://matrix.org/gvFonVWmlmdQwPrbNanBVGAy", "displayname": "disabled account", "membership": "join" }, "event_id": "$1494663086758228dqLmb:matrix.org", "membership": "join", "origin_server_ts": 1494663086141, "sender": "@yaeh:matrix.org", "state_key": "@yaeh:matrix.org", "type": "m.room.member", "unsigned": { "age": 16004866537, "replaces_state": "$1492845754793344sYgzK:matrix.org" } }, { "content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "join" }, "event_id": "$15078323253655hNmKX:half-shot.uk", "membership": "join", "origin_server_ts": 1507832325693, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 2835626985, "prev_content": { "avatar_url": "mxc://half-shot.uk/oSnvUaEqIQcsVfAuulWeeBVB", "displayname": "Half-Shot", "membership": "join" }, "prev_sender": "@Half-Shot:half-shot.uk", "replaces_state": "$15029507263496jAehT:half-shot.uk" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14869816239876mInRB:matrix.org", "membership": "join", "origin_server_ts": 1486981623596, "sender": "@janush:matrix.org", "state_key": "@janush:matrix.org", "type": "m.room.member", "unsigned": { "age": 23686329082 } }, { "content": { "membership": "leave" }, "event_id": "$1465730062363645NHvNA:matrix.org", "membership": "leave", "origin_server_ts": 1465730062749, "sender": "@TimePath:matrix.org", "state_key": "@TimePath:matrix.org", "type": "m.room.member", "unsigned": { "age": 44937889929, "replaces_state": "$1465729372362972dpTjx:matrix.org" } }, { "age_ts": 1510644304550, "content": { "avatar_url": "mxc://conference.open-xchange.com/hDUepgHljvvXLkNALeVwbYyI", "displayname": null, "membership": "join" }, "event_id": "$1510644413481vNMpW:conference.open-xchange.com", "origin_server_ts": 1510644303885, "sender": "@bjoern.vonderlinde:conference.open-xchange.com", "state_key": "@bjoern.vonderlinde:conference.open-xchange.com", "type": "m.room.member", "unsigned": { "age": 39, "replaces_state": "$1510644398479JZzEM:conference.open-xchange.com" } }, { "content": { "avatar_url": "mxc://matrix.tha.kz/cbUssrDFpbgPUnDkJgVfiXXA", "displayname": "Алекс", "membership": "join" }, "event_id": "$1508259002160RIakZ:matrix.tha.kz", "origin_server_ts": 1508259002678, "sender": "@alex:matrix.tha.kz", "state_key": "@alex:matrix.tha.kz", "type": "m.room.member", "unsigned": { "age": 65, "replaces_state": "$1508170306178qtljs:matrix.tha.kz" } }, { "content": { "membership": "leave" }, "event_id": "$15087181774347182qjKKn:matrix.org", "membership": "leave", "origin_server_ts": 1508718177556, "sender": "@Jean:matrix.org", "state_key": "@Jean:matrix.org", "type": "m.room.member", "unsigned": { "age": 1949775122, "replaces_state": "$15018501971933140IMRkk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "chatchy", "membership": "join" }, "event_id": "$15087143784259152NYNEQ:matrix.org", "membership": "join", "origin_server_ts": 1508714378365, "sender": "@chatchy:matrix.org", "state_key": "@chatchy:matrix.org", "type": "m.room.member", "unsigned": { "age": 1953574313 } }, { "content": { "avatar_url": "mxc://matrix.org/egHsgbiMTbVJdEOOOnzXjDEY", "displayname": "eoiki", "membership": "join" }, "event_id": "$14830237913715791cBKlR:matrix.org", "membership": "join", "origin_server_ts": 1483023791483, "sender": "@eoiki:matrix.org", "state_key": "@eoiki:matrix.org", "type": "m.room.member", "unsigned": { "age": 27644161195 } }, { "content": { "membership": "leave" }, "event_id": "$14544235901655ZpOqN:matrix.org", "origin_server_ts": 1454423590299, "sender": "@JPL:matrix.org", "state_key": "@JPL:matrix.org", "type": "m.room.member", "unsigned": { "age": 56244362379, "replaces_state": "$145437518732777vzMcO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/kaUEIkwSPmYHJLEFFNumPbYh", "displayname": "abit2", "membership": "join" }, "event_id": "$1484335007915106hRpsz:matrix.org", "membership": "join", "origin_server_ts": 1484335007043, "sender": "@abit2:matrix.org", "state_key": "@abit2:matrix.org", "type": "m.room.member", "unsigned": { "age": 26332945635, "replaces_state": "$14829893413571542heHCw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Grauwolf (IRC)", "membership": "join" }, "event_id": "$15082119471765449URZLD:matrix.org", "membership": "join", "origin_server_ts": 1508211947350, "sender": "@freenode_Grauwolf:matrix.org", "state_key": "@freenode_Grauwolf:matrix.org", "type": "m.room.member", "unsigned": { "age": 2456005328, "replaces_state": "$15061862812399227MEJNJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014748433797989zNJxv:matrix.org", "membership": "leave", "origin_server_ts": 1501474843362, "sender": "@freenode_Deceipher:matrix.org", "state_key": "@freenode_Deceipher:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193109316, "replaces_state": "$14991994214303771hQXnn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 16991", "kind": "guest", "membership": "join" }, "event_id": "$1465588225205263fLiwo:matrix.org", "membership": "join", "origin_server_ts": 1465588225306, "sender": "@16991:matrix.org", "state_key": "@16991:matrix.org", "type": "m.room.member", "unsigned": { "age": 45079727372 } }, { "content": { "membership": "leave" }, "event_id": "$148336095693RfnyY:matrix.thewagner.net", "membership": "leave", "origin_server_ts": 1483360956836, "sender": "@joseph:matrix.thewagner.net", "state_key": "@joseph:matrix.thewagner.net", "type": "m.room.member", "unsigned": { "age": 27306995842, "replaces_state": "$148336078992GTSmt:matrix.thewagner.net" } }, { "age_ts": 1503626600138, "content": { "avatar_url": null, "displayname": "dash", "membership": "join" }, "event_id": "$1503626599384mzMJg:greyface.org", "origin_server_ts": 1503626599427, "sender": "@washort:greyface.org", "state_key": "@washort:greyface.org", "type": "m.room.member", "unsigned": { "age": 10, "prev_content": { "membership": "leave" }, "prev_sender": "@washort:greyface.org", "replaces_state": "$1501870488477FyVat:greyface.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TQquRkIPTbaeBjcYLoedzSDx", "displayname": "Patrik", "membership": "join" }, "event_id": "$14688289001074147jGqGn:matrix.org", "membership": "join", "origin_server_ts": 1468828900885, "sender": "@depate:matrix.org", "state_key": "@depate:matrix.org", "type": "m.room.member", "unsigned": { "age": 41839051793, "replaces_state": "$14688280961073183nhykR:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nyFpNvmLQCcUKTpuVJDvgzSp#auto", "displayname": "calmglow", "membership": "join" }, "event_id": "$1430912223228TornK:matrix.org", "membership": "join", "origin_server_ts": 1430912223964, "sender": "@calmglow:matrix.org", "state_key": "@calmglow:matrix.org", "type": "m.room.member", "unsigned": { "age": 79755728714 } }, { "content": { "avatar_url": "mxc://matrix.org/EqPESdqEDBQQTwKTcIWfnADO", "displayname": "Stephen", "membership": "join" }, "event_id": "$1471714937158495DsCHi:matrix.org", "membership": "join", "origin_server_ts": 1471714937347, "sender": "@hostbbb:matrix.org", "state_key": "@hostbbb:matrix.org", "type": "m.room.member", "unsigned": { "age": 38953015331, "replaces_state": "$1439052187280762wkyhe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15101412882232908Yovho:matrix.org", "membership": "leave", "origin_server_ts": 1510141288844, "sender": "@freenode_l4mRh4X0r:matrix.org", "state_key": "@freenode_l4mRh4X0r:matrix.org", "type": "m.room.member", "unsigned": { "age": 526663834, "replaces_state": "$14888921102455880yqVUw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Alex", "membership": "join" }, "event_id": "$1477061511599627QfZKe:matrix.org", "membership": "join", "origin_server_ts": 1477061511280, "sender": "@AlexSchock:matrix.org", "state_key": "@AlexSchock:matrix.org", "type": "m.room.member", "unsigned": { "age": 33606441398 } }, { "content": { "avatar_url": "mxc://matrix.org/GYsiBhJgnGQQaAgCjLVnweQx#auto", "displayname": "fxrh", "membership": "join" }, "event_id": "$1443802000161439vcrXK:matrix.org", "membership": "join", "origin_server_ts": 1443802000102, "sender": "@fxrh:matrix.org", "state_key": "@fxrh:matrix.org", "type": "m.room.member", "unsigned": { "age": 66865952576 } }, { "content": { "avatar_url": "mxc://matrix.org/buJHQBSSQGTKKtwWxGtndjjz#auto", "displayname": "John Locke", "membership": "join" }, "event_id": "$1441467737168870QRwmg:matrix.org", "origin_server_ts": 1441467737913, "sender": "@freelocke:matrix.org", "state_key": "@freelocke:matrix.org", "type": "m.room.member", "unsigned": { "age": 69200214765, "replaces_state": "$144129333249542WSWSy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/WcyxkqIsMuorwSymsUzkuZqi", "displayname": "ShadowKyogre", "membership": "join" }, "event_id": "$147490914498188IPnTa:matrix.org", "membership": "join", "origin_server_ts": 1474909144300, "sender": "@shadowkyogre:matrix.org", "state_key": "@shadowkyogre:matrix.org", "type": "m.room.member", "unsigned": { "age": 35758808378 } }, { "content": { "membership": "leave" }, "event_id": "$15096607244320616zGajh:matrix.org", "membership": "leave", "origin_server_ts": 1509660724565, "sender": "@freenode_Kythyria[w]:matrix.org", "state_key": "@freenode_Kythyria[w]:matrix.org", "type": "m.room.member", "unsigned": { "age": 1007228113, "replaces_state": "$15096606294319224rhVUU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oFizYDrQiDCVjuZjsFaDOItZ", "displayname": "Gargron", "membership": "join" }, "event_id": "$1508085493117aqDQo:matrix.org", "membership": "join", "origin_server_ts": 1508085493711, "sender": "@Gargron:matrix.org", "state_key": "@Gargron:matrix.org", "type": "m.room.member", "unsigned": { "age": 2582458967 } }, { "content": { "avatar_url": "mxc://matrix.org/rcpAkPuepOYWwVcIQglWqydx", "displayname": "christOphe", "membership": "join" }, "event_id": "$14825961681848155OoFKR:matrix.org", "membership": "join", "origin_server_ts": 1482596168601, "sender": "@christ0phe:matrix.org", "state_key": "@christ0phe:matrix.org", "type": "m.room.member", "unsigned": { "age": 28071784077 } }, { "content": { "avatar_url": null, "displayname": "apero", "membership": "join" }, "event_id": "$14865925462988575hreXI:matrix.org", "membership": "join", "origin_server_ts": 1486592546311, "sender": "@apero:matrix.org", "state_key": "@apero:matrix.org", "type": "m.room.member", "unsigned": { "age": 24075406367 } }, { "content": { "membership": "leave" }, "event_id": "$15099448183198799vnJco:matrix.org", "membership": "leave", "origin_server_ts": 1509944818859, "sender": "@freenode_todder_:matrix.org", "state_key": "@freenode_todder_:matrix.org", "type": "m.room.member", "unsigned": { "age": 723133819, "replaces_state": "$15083157863186657dedtw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "roomi", "kind": "guest", "membership": "join" }, "event_id": "$1487049129479106MFyvJ:matrix.org", "membership": "join", "origin_server_ts": 1487049129636, "sender": "@152256:matrix.org", "state_key": "@152256:matrix.org", "type": "m.room.member", "unsigned": { "age": 23618823042 } }, { "content": { "avatar_url": "mxc://matrix.org/bstoHBvUBBmvOcAuAPilFoMM", "displayname": "Antti Vermas", "membership": "join" }, "event_id": "$1459935752264635phPUv:matrix.org", "membership": "join", "origin_server_ts": 1459935752220, "sender": "@venttiarmas:matrix.org", "state_key": "@venttiarmas:matrix.org", "type": "m.room.member", "unsigned": { "age": 50732200458, "replaces_state": "$1459931451260391HfCss:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "KokorinIlya", "membership": "join" }, "event_id": "$15061795852324241tEgIg:matrix.org", "membership": "join", "origin_server_ts": 1506179585368, "sender": "@KokorinIlya:matrix.org", "state_key": "@KokorinIlya:matrix.org", "type": "m.room.member", "unsigned": { "age": 4488367310 } }, { "content": { "membership": "leave" }, "event_id": "$14956631882024952lEGvy:matrix.org", "membership": "leave", "origin_server_ts": 1495663188674, "sender": "@freenode_Joost:matrix.org", "state_key": "@freenode_Joost:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004764004, "replaces_state": "$14864550682092576dIXKB:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1448900560184269IiYsv:matrix.org", "origin_server_ts": 1448900560637, "sender": "@kazay:matrix.org", "state_key": "@kazay:matrix.org", "type": "m.room.member", "unsigned": { "age": 61767392041, "replaces_state": "$1448899261182406hSQAC:matrix.org" } }, { "content": { "avatar_url": "mxc://kamax.cloud/OEfadawATwquNdJQgjTvNMLW", "displayname": "aegir", "membership": "join" }, "event_id": "$1508857660284tRCVf:kamax.cloud", "origin_server_ts": 1508857660340, "sender": "@aegir:kamax.cloud", "state_key": "@aegir:kamax.cloud", "type": "m.room.member", "unsigned": { "age": 78 } }, { "content": { "avatar_url": null, "displayname": "Pooran", "membership": "join" }, "event_id": "$1416780576255Rxpwo:matrix.org", "membership": "join", "origin_server_ts": 1416780576658, "sender": "@pooran:matrix.org", "state_key": "@pooran:matrix.org", "type": "m.room.member", "unsigned": { "age": 93887376020 } }, { "content": { "avatar_url": null, "displayname": "DLange (IRC)", "membership": "join" }, "event_id": "$15029808481469071rMzJV:matrix.org", "membership": "join", "origin_server_ts": 1502980848181, "sender": "@freenode_DLange:matrix.org", "state_key": "@freenode_DLange:matrix.org", "type": "m.room.member", "unsigned": { "age": 7687104497, "replaces_state": "$15029623691169018qtZTW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1489204947682212RYoyL:matrix.org", "membership": "leave", "origin_server_ts": 1489204947699, "sender": "@mahmoud:matrix.org", "state_key": "@mahmoud:matrix.org", "type": "m.room.member", "unsigned": { "age": 21463004979, "replaces_state": "$1489179888509150NksOv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dbqjDgQDFfFLWHUbDhIxGRXR#auto", "displayname": null, "membership": "join" }, "event_id": "$144786145968883QqDXG:matrix.org", "origin_server_ts": 1447861459789, "sender": "@benr:matrix.org", "state_key": "@benr:matrix.org", "type": "m.room.member", "unsigned": { "age": 62806492889 } }, { "content": { "avatar_url": "mxc://matrix.org/IPUjAdJPIRPKkSEXpNUBRZMe", "displayname": "dluciv", "membership": "join" }, "event_id": "$1506669148308972CwZCo:matrix.org", "membership": "join", "origin_server_ts": 1506669148128, "sender": "@dluciv:matrix.org", "state_key": "@dluciv:matrix.org", "type": "m.room.member", "unsigned": { "age": 3998804550, "replaces_state": "$145733083587589DDzjG:matrix.org" } }, { "content": { "avatar_url": "mxc://snf-758099.vm.okeanos.grnet.gr/UKGxBsyZPDAbYZRAfiXdqwKl", "displayname": null, "membership": "join" }, "event_id": "$1506436623120yswEV:snf-758099.vm.okeanos.grnet.gr", "membership": "join", "origin_server_ts": 1506436623427, "sender": "@dim:snf-758099.vm.okeanos.grnet.gr", "state_key": "@dim:snf-758099.vm.okeanos.grnet.gr", "type": "m.room.member", "unsigned": { "age": 4231329251, "replaces_state": "$1506436065111KNErr:snf-758099.vm.okeanos.grnet.gr" } }, { "content": { "avatar_url": "mxc://thebeckmeyers.xyz/MpWpOzvvdeSOsDPmkEVMmviz", "displayname": "&Adam", "membership": "join" }, "event_id": "$150627225714946aGIWg:thebeckmeyers.xyz", "membership": "join", "origin_server_ts": 1506272257789, "sender": "@adam:thebeckmeyers.xyz", "state_key": "@adam:thebeckmeyers.xyz", "type": "m.room.member", "unsigned": { "age": 4395694889, "prev_content": { "avatar_url": "mxc://thebeckmeyers.xyz/PIeZsqgwqbhqiBchafnEgeSk", "displayname": "&Adam", "membership": "join" }, "prev_sender": "@adam:thebeckmeyers.xyz", "replaces_state": "$1499895357293WgzgS:thebeckmeyers.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/OsgIkTgBsHeGRkNqXAqFbKFI#auto", "displayname": null, "membership": "join" }, "event_id": "$1443404373241251XRkgl:matrix.org", "origin_server_ts": 1443404373428, "sender": "@snarf23:matrix.org", "state_key": "@snarf23:matrix.org", "type": "m.room.member", "unsigned": { "age": 67263579250 } }, { "content": { "avatar_url": "mxc://matrix.org/hJGZaXnMCztFrBYfEjtbHqhr", "displayname": "Kitekat", "membership": "join" }, "event_id": "$144018866015835jnlqz:matrix.org", "origin_server_ts": 1440188660198, "sender": "@altai:matrix.org", "state_key": "@altai:matrix.org", "type": "m.room.member", "unsigned": { "age": 70479292480 } }, { "content": { "membership": "leave" }, "event_id": "$143783786549dgbvh:main.f-t.so", "origin_server_ts": 1437837865215, "sender": "@harry:main.f-t.so", "state_key": "@harry:main.f-t.so", "type": "m.room.member", "unsigned": { "age": 72830087463, "replaces_state": "$143783747048btmYk:main.f-t.so" } }, { "content": { "avatar_url": null, "displayname": "waqee", "membership": "join" }, "event_id": "$1468230764541491geSlP:matrix.org", "membership": "join", "origin_server_ts": 1468230764356, "sender": "@waqee:matrix.org", "state_key": "@waqee:matrix.org", "type": "m.room.member", "unsigned": { "age": 42437188322, "replaces_state": "$1464360498107147Nyxre:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15051595752567509YOeAx:matrix.org", "membership": "leave", "origin_server_ts": 1505159575313, "sender": "@freenode_yolox:matrix.org", "state_key": "@freenode_yolox:matrix.org", "type": "m.room.member", "unsigned": { "age": 5508377365, "replaces_state": "$15051564172514617ALWKF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YriklXhIkAAyylZGLOHxoYqD", "displayname": "notworking", "membership": "join" }, "event_id": "$14808999113617331zHTTg:matrix.org", "membership": "join", "origin_server_ts": 1480899911853, "sender": "@notworking:matrix.org", "state_key": "@notworking:matrix.org", "type": "m.room.member", "unsigned": { "age": 29768040825 } }, { "content": { "membership": "leave" }, "event_id": "$14956631492024136SzrME:matrix.org", "membership": "leave", "origin_server_ts": 1495663149677, "sender": "@freenode_Sephoraa:matrix.org", "state_key": "@freenode_Sephoraa:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004803001, "replaces_state": "$1478813780140681CWKxo:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150883256312925paYsN:matrix.org", "membership": "join", "origin_server_ts": 1508832563591, "sender": "@spellauge:matrix.org", "state_key": "@spellauge:matrix.org", "type": "m.room.member", "unsigned": { "age": 1835389087, "replaces_state": "$15077062001214765LCAQy:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Dummy user that works", "kind": "guest", "membership": "join" }, "event_id": "$14674929682529502qTPzD:matrix.org", "membership": "join", "origin_server_ts": 1467492968572, "sender": "@20901:matrix.org", "state_key": "@20901:matrix.org", "type": "m.room.member", "unsigned": { "age": 43174984106 } }, { "content": { "membership": "leave" }, "event_id": "$14956631932025053LbGXU:matrix.org", "membership": "leave", "origin_server_ts": 1495663193317, "sender": "@freenode_pztrn:matrix.org", "state_key": "@freenode_pztrn:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004759361, "replaces_state": "$14886452221053731Fhcxz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 30480", "kind": "guest", "membership": "join" }, "event_id": "$1473284957140238QGZxu:matrix.org", "membership": "join", "origin_server_ts": 1473284957560, "sender": "@30480:matrix.org", "state_key": "@30480:matrix.org", "type": "m.room.member", "unsigned": { "age": 37382995118 } }, { "content": { "membership": "leave" }, "event_id": "$15065125796723XVxOG:matrix.heldscal.la", "membership": "leave", "origin_server_ts": 1506512579813, "sender": "@gooz:matrix.heldscal.la", "state_key": "@gooz:matrix.heldscal.la", "type": "m.room.member", "unsigned": { "age": 4155372865, "prev_content": { "avatar_url": "mxc://matrix.heldscal.la/ilbAVqrHupYcqhaZBEiJAISp", "displayname": "Barudaret", "membership": "join" }, "prev_sender": "@gooz:matrix.heldscal.la", "replaces_state": "$150499647262142MzPUw:matrix.heldscal.la" } }, { "content": { "membership": "leave" }, "event_id": "$15023126494wUzis:joranhonig.nl", "membership": "leave", "origin_server_ts": 1502312649728, "sender": "@walker:joranhonig.nl", "state_key": "@walker:joranhonig.nl", "type": "m.room.member", "unsigned": { "age": 8355302950, "replaces_state": "$148529343569DwDXI:joranhonig.nl" } }, { "content": { "avatar_url": "mxc://matrix.org/YAUTfiCrgfvfDpFBXZokyZHL", "displayname": "Demyan", "membership": "join" }, "event_id": "$148403470599379NxgDx:matrix.org", "membership": "join", "origin_server_ts": 1484034705889, "sender": "@demyan:matrix.org", "state_key": "@demyan:matrix.org", "type": "m.room.member", "unsigned": { "age": 26633246789 } }, { "content": { "membership": "leave" }, "event_id": "$1495241995429947aBZvG:matrix.org", "membership": "leave", "origin_server_ts": 1495241995660, "sender": "@chenxiaozhi:matrix.org", "state_key": "@chenxiaozhi:matrix.org", "type": "m.room.member", "unsigned": { "age": 15425957018, "replaces_state": "$1494639601637438QDzid:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oJJxzFCoIXsHqqmojSVHjuXy", "displayname": "popey", "membership": "join" }, "event_id": "$1468767446975548keAYE:matrix.org", "membership": "join", "origin_server_ts": 1468767446088, "sender": "@popey:matrix.org", "state_key": "@popey:matrix.org", "type": "m.room.member", "unsigned": { "age": 41900506590 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1485363922148574FLejq:matrix.org", "membership": "join", "origin_server_ts": 1485363922269, "sender": "@hamidbilal:matrix.org", "state_key": "@hamidbilal:matrix.org", "type": "m.room.member", "unsigned": { "age": 25304030409 } }, { "content": { "avatar_url": null, "displayname": "jental", "membership": "join" }, "event_id": "$14987298441709770LuRHu:matrix.org", "membership": "join", "origin_server_ts": 1498729844359, "sender": "@jental:matrix.org", "state_key": "@jental:matrix.org", "type": "m.room.member", "unsigned": { "age": 11938108319 } }, { "content": { "avatar_url": "mxc://veeedo.com/CTAwRYeIoBuDciuVxNXnzmoz", "displayname": "yannick", "membership": "join" }, "event_id": "$1484682562430HTHOf:veeedo.com", "membership": "join", "origin_server_ts": 1484682562035, "sender": "@yannick:veeedo.com", "state_key": "@yannick:veeedo.com", "type": "m.room.member", "unsigned": { "age": 25985390643, "replaces_state": "$14839078796amdEl:veeedo.com" } }, { "content": { "membership": "leave" }, "event_id": "$1485368900480byuJh:kolosowscy.pl", "membership": "leave", "origin_server_ts": 1485368900877, "sender": "@tomek:kolosowscy.pl", "state_key": "@tomek:kolosowscy.pl", "type": "m.room.member", "unsigned": { "age": 25299051801, "replaces_state": "$1485356592448Ogyco:kolosowscy.pl" } }, { "content": { "membership": "leave" }, "event_id": "$14854968785LLIbP:sbin.me", "membership": "leave", "origin_server_ts": 1485496878161, "sender": "@vt0r:sbin.me", "state_key": "@vt0r:sbin.me", "type": "m.room.member", "unsigned": { "age": 25171074517, "replaces_state": "$148397237070LQtpX:sbin.me" } }, { "content": { "membership": "leave" }, "event_id": "$15014748443798016eOMjg:matrix.org", "membership": "leave", "origin_server_ts": 1501474844376, "sender": "@freenode_Caterpillar2:matrix.org", "state_key": "@freenode_Caterpillar2:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193108302, "replaces_state": "$14999378141074779fRkAC:matrix.org" } }, { "content": { "avatar_url": "mxc://rbs.io/RUiQgGqTcDOeyTZpYSrzMPlG", "displayname": "Ross Schulman", "membership": "join" }, "event_id": "$145485418924wMBmy:rbs.io", "origin_server_ts": 1454854189902, "sender": "@rschulman:rbs.io", "state_key": "@rschulman:rbs.io", "type": "m.room.member", "unsigned": { "age": 55813762776, "replaces_state": "$14495040676uWhgm:rbs.io" } }, { "content": { "avatar_url": "mxc://kittenface.studio/TxzvHoNlppjtNgfUoaxXxfxa", "displayname": "Ananace", "membership": "join" }, "event_id": "$150516218037PpfbK:kittenface.studio", "membership": "join", "origin_server_ts": 1505162180424, "sender": "@ace:kittenface.studio", "state_key": "@ace:kittenface.studio", "type": "m.room.member", "unsigned": { "age": 5505772254, "prev_content": { "avatar_url": "mxc://kittenface.studio/dZRBTUAOkXFqDRWTsAdJebvC", "displayname": "Ananace", "membership": "join" }, "prev_sender": "@ace:kittenface.studio", "replaces_state": "$15051590912lARWx:kittenface.studio" } }, { "content": { "membership": "leave" }, "event_id": "$1507670716263yuTiH:imaginair.es", "membership": "leave", "origin_server_ts": 1507670716153, "sender": "@wxcafe:imaginair.es", "state_key": "@wxcafe:imaginair.es", "type": "m.room.member", "unsigned": { "age": 2997236525, "prev_content": { "avatar_url": "mxc://imaginair.es/YUtAKPXOrWbAvleXTHppCEPF", "displayname": "Wxcafé", "membership": "join" }, "prev_sender": "@wxcafe:imaginair.es", "replaces_state": "$150431072617rYXcI:imaginair.es" } }, { "content": { "avatar_url": "mxc://matrix.org/YdixiNvDULqNZUzgpYPURpuz", "displayname": "neosam", "membership": "join" }, "event_id": "$1495550835281347SVBLh:matrix.org", "membership": "join", "origin_server_ts": 1495550835101, "sender": "@neosam:matrix.org", "state_key": "@neosam:matrix.org", "type": "m.room.member", "unsigned": { "age": 15117117577, "replaces_state": "$14845037371686498iGiDZ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "poutine (IRC)", "membership": "join" }, "event_id": "$15096077323459884lxnlD:matrix.org", "membership": "join", "origin_server_ts": 1509607732159, "sender": "@freenode_poutine:matrix.org", "state_key": "@freenode_poutine:matrix.org", "type": "m.room.member", "unsigned": { "age": 1060220519 } }, { "content": { "membership": "leave" }, "event_id": "$15004890022964004rGdIj:matrix.org", "membership": "leave", "origin_server_ts": 1500489002922, "sender": "@freenode_u_nuSLASHkm8:matrix.org", "state_key": "@freenode_u_nuSLASHkm8:matrix.org", "type": "m.room.member", "unsigned": { "age": 10178949756, "replaces_state": "$15004888352961349YKGdG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$146939478233196nKBVA:matrix.org", "membership": "join", "origin_server_ts": 1469394782002, "sender": "@xdxdxd:matrix.org", "state_key": "@xdxdxd:matrix.org", "type": "m.room.member", "unsigned": { "age": 41273170676 } }, { "content": { "membership": "leave" }, "event_id": "$14748799361189614FbMSZ:matrix.org", "membership": "leave", "origin_server_ts": 1474879936538, "sender": "@jkozak:matrix.org", "state_key": "@jkozak:matrix.org", "type": "m.room.member", "unsigned": { "age": 35788016140, "replaces_state": "$1474713377601194yNTbi:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612875049kwWiK:matrix.org", "origin_server_ts": 1429261287489, "sender": "@kegan:matrix.org", "state_key": "@irc_hrjet:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406665189, "replaces_state": "$14245017053598RmRZr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148407873517676oooIX:matrix.org", "membership": "leave", "origin_server_ts": 1484078735566, "sender": "@120201:matrix.org", "state_key": "@120201:matrix.org", "type": "m.room.member", "unsigned": { "age": 26589217112, "replaces_state": "$148407868617132AzXJf:matrix.org" } }, { "age_ts": 1501685369028, "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15016853688dGSvl:dasbiersec.com", "origin_server_ts": 1501685368053, "sender": "@nullwarp:dasbiersec.com", "state_key": "@nullwarp:dasbiersec.com", "type": "m.room.member", "unsigned": { "age": 13, "prev_content": { "membership": "leave" }, "prev_sender": "@nullwarp:dasbiersec.com", "replaces_state": "$15016853226JLtjX:dasbiersec.com" } }, { "content": { "avatar_url": null, "displayname": "testeruser1", "membership": "join" }, "event_id": "$15092751975714053qLwjn:matrix.org", "membership": "join", "origin_server_ts": 1509275197388, "sender": "@testeruser1:matrix.org", "state_key": "@testeruser1:matrix.org", "type": "m.room.member", "unsigned": { "age": 1392755290 } }, { "content": { "display_name": "mas...@me....", "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA", "public_keys": [ { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA" }, { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/ephemeral/isvalid", "public_key": "FC7KWiRsVByFLNx09QsDTZecgRUAXunU2tXdYDCVWcg" } ] }, "event_id": "$14765638651231499vvkUU:matrix.org", "origin_server_ts": 1476563865674, "sender": "@massdonati:matrix.org", "state_key": "CkMsITLIYMrpFkAqgbYKunYutZnGmxOlJoFtCBbgYhxTtmvhExWtNrcwaeNZQrwmHPmKuRkevOiGqmClTLCQqphbCfnmSOirgdrRvRpevLnhYUNepevDBoaJHpPhWWCf", "type": "m.room.third_party_invite", "unsigned": { "age": 34104087004 } }, { "content": { "membership": "leave" }, "event_id": "$14915573080CNsOi:sosnowkadub.de", "membership": "leave", "origin_server_ts": 1491557308698, "sender": "@kim:sosnowkadub.de", "state_key": "@kim:sosnowkadub.de", "type": "m.room.member", "unsigned": { "age": 3650941, "prev_content": { "avatar_url": "mxc://sosnowkadub.de/rPGQyjSgtGtLcguAjKBRFEaD", "displayname": "✡️", "membership": "join" }, "prev_sender": "@kim:sosnowkadub.de", "replaces_state": "$149155706745MIGoP:sosnowkadub.de" } }, { "content": { "membership": "leave" }, "event_id": "$149864524015VGsFn:phanerox.com", "membership": "leave", "origin_server_ts": 1498645240422, "sender": "@zboerner:phanerox.com", "state_key": "@zboerner:phanerox.com", "type": "m.room.member", "unsigned": { "age": 12022712256, "replaces_state": "$149864511813uxuLQ:phanerox.com" } }, { "content": { "avatar_url": "mxc://dhp.com/WQxelruqmiOoTMxCsamchojL", "displayname": "DJ Wipeout", "membership": "join" }, "event_id": "$148238403237dwxdo:dhp.com", "membership": "join", "origin_server_ts": 1482384032984, "sender": "@wipeout:dhp.com", "state_key": "@wipeout:dhp.com", "type": "m.room.member", "unsigned": { "age": 28283919694, "prev_content": { "avatar_url": null, "displayname": "DJ Wipeout", "membership": "join" }, "prev_sender": "@wipeout:dhp.com", "replaces_state": "$14823821361aMUND:dhp.com" } }, { "content": { "membership": "leave" }, "event_id": "$145448639374621xQfJm:matrix.org", "origin_server_ts": 1454486393879, "sender": "@johnb:matrix.org", "state_key": "@johnb:matrix.org", "type": "m.room.member", "unsigned": { "age": 56181558799, "replaces_state": "$145448635874608nHCDH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "arnoldpaye", "membership": "join" }, "event_id": "$147437879111272WIBMF:matrix.org", "membership": "join", "origin_server_ts": 1474378791531, "sender": "@arnoldpaye:matrix.org", "state_key": "@arnoldpaye:matrix.org", "type": "m.room.member", "unsigned": { "age": 36289161147 } }, { "content": { "avatar_url": null, "displayname": "kolawole Olulana", "membership": "join" }, "event_id": "$145875270651324Qcixg:matrix.org", "membership": "join", "origin_server_ts": 1458752706493, "sender": "@kolawole:matrix.org", "state_key": "@kolawole:matrix.org", "type": "m.room.member", "unsigned": { "age": 51915246185 } }, { "content": { "membership": "leave" }, "event_id": "$15058269473274645wZCnl:matrix.org", "membership": "leave", "origin_server_ts": 1505826947520, "sender": "@freenode_Michaela:matrix.org", "state_key": "@freenode_Michaela:matrix.org", "type": "m.room.member", "unsigned": { "age": 4841005158, "replaces_state": "$15055357137791553mCurS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 90521", "kind": "guest", "membership": "join" }, "event_id": "$14805106071973040VOGEV:matrix.org", "membership": "join", "origin_server_ts": 1480510607902, "sender": "@90521:matrix.org", "state_key": "@90521:matrix.org", "type": "m.room.member", "unsigned": { "age": 30157344776 } }, { "content": { "membership": "leave" }, "event_id": "$14864071251810569appmU:matrix.org", "membership": "leave", "origin_server_ts": 1486407125847, "sender": "@OverlordAlyx:matrix.org", "state_key": "@OverlordAlyx:matrix.org", "type": "m.room.member", "unsigned": { "age": 24260826831, "replaces_state": "$14863049681246395htPMz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "WGH", "membership": "join" }, "event_id": "$1472826773740nzaMd:torlan.ru", "membership": "join", "origin_server_ts": 1472826773702, "sender": "@WGH:torlan.ru", "state_key": "@WGH:torlan.ru", "type": "m.room.member", "unsigned": { "age": 37841178976, "replaces_state": "$1472826768739oCRzx:torlan.ru" } }, { "content": { "avatar_url": null, "displayname": "Guest 55297", "kind": "guest", "membership": "join" }, "event_id": "$14755335621991066kZdsG:matrix.org", "membership": "join", "origin_server_ts": 1475533562920, "sender": "@55297:matrix.org", "state_key": "@55297:matrix.org", "type": "m.room.member", "unsigned": { "age": 35134389758 } }, { "content": { "avatar_url": "mxc://matrix.org/VvbFaGedyesBjgiIEHAEbqKY", "displayname": "MiloIgnis", "membership": "join" }, "event_id": "$1475178326979783irZhC:matrix.org", "membership": "join", "origin_server_ts": 1475178326670, "sender": "@miloignis:matrix.org", "state_key": "@miloignis:matrix.org", "type": "m.room.member", "unsigned": { "age": 35489626008 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14544104485244QlLgD:matrix.org", "origin_server_ts": 1454410448966, "sender": "@joseluis:matrix.org", "state_key": "@joseluis:matrix.org", "type": "m.room.member", "unsigned": { "age": 56257503712 } }, { "content": { "avatar_url": null, "displayname": "Guest 102588", "kind": "guest", "membership": "join" }, "event_id": "$1482046470658665vBTJZ:matrix.org", "membership": "join", "origin_server_ts": 1482046470466, "sender": "@102588:matrix.org", "state_key": "@102588:matrix.org", "type": "m.room.member", "unsigned": { "age": 28621482212 } }, { "content": { "avatar_url": "mxc://matrix.org/gBychTbUQroOQyPspqnfKDkv#auto", "displayname": null, "membership": "join" }, "event_id": "$143543390355067SWTeH:matrix.org", "membership": "join", "origin_server_ts": 1435433903090, "sender": "@urban:matrix.org", "state_key": "@urban:matrix.org", "type": "m.room.member", "unsigned": { "age": 75234049588 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15043951281duquY:zoronunderground.club", "origin_server_ts": 1504395128160, "sender": "@TheX:zoronunderground.club", "state_key": "@TheX:zoronunderground.club", "type": "m.room.member", "unsigned": { "age": 18, "replaces_state": "$15043678281OlcOp:zoronunderground.club" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150012563221yASgS:alscs.net", "origin_server_ts": 1500125632917, "sender": "@al:alscs.net", "state_key": "@al:alscs.net", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": null, "displayname": "caffey", "membership": "join" }, "event_id": "$1486009979354766mMDdc:matrix.org", "membership": "join", "origin_server_ts": 1486009979290, "sender": "@caffey:matrix.org", "state_key": "@caffey:matrix.org", "type": "m.room.member", "unsigned": { "age": 24657973388, "replaces_state": "$14846843752701369QfUqc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1486029755946tvFwY:qux.fi", "membership": "leave", "origin_server_ts": 1486029755415, "sender": "@quvide:qux.fi", "state_key": "@quvide:qux.fi", "type": "m.room.member", "unsigned": { "age": 24638197263, "prev_content": { "avatar_url": null, "displayname": "quvide", "membership": "join" }, "prev_sender": "@quvide:qux.fi", "replaces_state": "$14859976981jLytw:qux.fi" } }, { "content": { "membership": "leave" }, "event_id": "$14956632452026303nflbq:matrix.org", "membership": "leave", "origin_server_ts": 1495663245563, "sender": "@freenode_taylskid:matrix.org", "state_key": "@freenode_taylskid:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004707115, "replaces_state": "$1485320086278688vtrwc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Rabah Brahimi", "membership": "join" }, "event_id": "$15030465452261146dKFzm:matrix.org", "membership": "join", "origin_server_ts": 1503046545313, "sender": "@rbdz:matrix.org", "state_key": "@rbdz:matrix.org", "type": "m.room.member", "unsigned": { "age": 7621407365, "replaces_state": "$1490721598820722RqELd:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HLRCzLBVhugtrmFeKCWxzKtE", "displayname": null, "membership": "join" }, "event_id": "$1474331050745945AHkhz:matrix.org", "membership": "join", "origin_server_ts": 1474331050679, "sender": "@filharvey:matrix.org", "state_key": "@filharvey:matrix.org", "type": "m.room.member", "unsigned": { "age": 36336901999, "replaces_state": "$1474330818745411AveDR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150773288467PqFFu:matrix.idolg.ru", "membership": "leave", "origin_server_ts": 1507732884380, "sender": "@admin:matrix.idolg.ru", "state_key": "@admin:matrix.idolg.ru", "type": "m.room.member", "unsigned": { "age": 2935068298, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@admin:matrix.idolg.ru", "replaces_state": "$150773266663ojFSw:matrix.idolg.ru" } }, { "content": { "membership": "leave" }, "event_id": "$14212591293135cuqVU:matrix.org", "origin_server_ts": 1421259129324, "sender": "@irc_M-bobderbaumeist:matrix.org", "state_key": "@irc_M-bobderbaumeist:matrix.org", "type": "m.room.member", "unsigned": { "age": 89408823354, "replaces_state": "$14212537682914RscpP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1443368909226260WiNCU:matrix.org", "origin_server_ts": 1443368909615, "sender": "@julius:matrix.org", "state_key": "@julius:matrix.org", "type": "m.room.member", "unsigned": { "age": 67299043063, "replaces_state": "$1443368133225954ZLFuk:matrix.org" } }, { "content": { "url": "mxc://jki.re/aIcNgIBIBRimXoYOXFOSBpgC" }, "event_id": "$1446635289155lTgca:jki.re", "origin_server_ts": 1446635289312, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 64032663366 } }, { "content": { "membership": "leave" }, "event_id": "$148796401513XNaFH:utzutzutz.net", "membership": "leave", "origin_server_ts": 1487964015314, "sender": "@fadenb:utzutzutz.net", "state_key": "@fadenb:utzutzutz.net", "type": "m.room.member", "unsigned": { "age": 22703937364, "prev_content": { "avatar_url": "mxc://utzutzutz.net/jQrxfrTywXmslqLVhdBjTTLN", "displayname": "fadenb", "membership": "join" }, "prev_sender": "@fadenb:utzutzutz.net", "replaces_state": "$1487957290181inZfv:utzutzutz.net" } }, { "content": { "avatar_url": "mxc://matrix.org/AtzwirvniYllJrOFQhHAcJOI", "displayname": "bob", "membership": "join" }, "event_id": "$14722164914347OLBya:matrix.org", "membership": "join", "origin_server_ts": 1472216491801, "sender": "@bobderbaumeister:matrix.org", "state_key": "@bobderbaumeister:matrix.org", "type": "m.room.member", "unsigned": { "age": 38451460877, "replaces_state": "$143782072075098XPkkN:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GUdYXaAVLFpNWNCIGQkjVSua", "displayname": "maxlinux2000", "membership": "join" }, "event_id": "$1480077073317867TzDiX:matrix.org", "membership": "join", "origin_server_ts": 1480077073495, "sender": "@maxlinux2000:matrix.org", "state_key": "@maxlinux2000:matrix.org", "type": "m.room.member", "unsigned": { "age": 30590879183 } }, { "content": { "avatar_url": null, "displayname": "Will Holland", "membership": "join" }, "event_id": "$1423146324584EMPaF:matrix.org", "membership": "join", "origin_server_ts": 1423146324711, "sender": "@wdutch:matrix.org", "state_key": "@wdutch:matrix.org", "type": "m.room.member", "unsigned": { "age": 87521627967 } }, { "content": { "membership": "leave" }, "event_id": "$1485370431200823SruNP:matrix.org", "membership": "leave", "origin_server_ts": 1485370431329, "sender": "@ack43:matrix.org", "state_key": "@ack43:matrix.org", "type": "m.room.member", "unsigned": { "age": 25297521349, "replaces_state": "$1485367100174495rXrEE:matrix.org" } }, { "content": { "creator": "@LeoNerd:matrix.org" }, "event_id": "$1416420910522mQfXQ:matrix.org", "origin_server_ts": 1409924389016, "sender": "@LeoNerd:matrix.org", "state_key": "", "stream_ordering": 3454, "type": "m.room.create", "unsigned": { "age": 94247042155 } }, { "content": { "membership": "leave" }, "event_id": "$150624264817UhVXQ:hirschstein.it", "membership": "leave", "origin_server_ts": 1506242648301, "sender": "@matteo:hirschstein.it", "state_key": "@matteo:hirschstein.it", "type": "m.room.member", "unsigned": { "age": 4425304377, "prev_content": { "avatar_url": "mxc://hirschstein.it/OKiGKSzHFfViqnproIEGWQpw", "displayname": "`mat", "membership": "join" }, "prev_sender": "@matteo:hirschstein.it", "replaces_state": "$1505996194132YzRIO:hirschstein.it" } }, { "content": { "avatar_url": null, "displayname": "MarcoM", "membership": "join" }, "event_id": "$15041801002295064pxeiM:matrix.org", "membership": "join", "origin_server_ts": 1504180100305, "sender": "@MarcoM:matrix.org", "state_key": "@MarcoM:matrix.org", "type": "m.room.member", "unsigned": { "age": 6487852373 } }, { "content": { "avatar_url": null, "displayname": "mozboz", "membership": "join" }, "event_id": "$145685480753gnZbk:matrix.mozboz.com", "origin_server_ts": 1456854808896, "sender": "@mozboz:matrix.mozboz.com", "state_key": "@mozboz:matrix.mozboz.com", "type": "m.room.member", "unsigned": { "age": 18 } }, { "content": { "avatar_url": null, "displayname": "Guest 119324", "kind": "guest", "membership": "join" }, "event_id": "$1483897418572741RWjoz:matrix.org", "membership": "join", "origin_server_ts": 1483897418382, "sender": "@119324:matrix.org", "state_key": "@119324:matrix.org", "type": "m.room.member", "unsigned": { "age": 26770534296 } }, { "content": { "membership": "leave" }, "event_id": "$14822967213QqxCS:matrix.rjryan.me", "membership": "leave", "origin_server_ts": 1482296721752, "sender": "@rryan:matrix.rjryan.me", "state_key": "@rryan:matrix.rjryan.me", "type": "m.room.member", "unsigned": { "age": 28371230926, "prev_content": { "avatar_url": "mxc://matrix.rjryan.me/lMZmEEBlFByGdvQozalFvnCJ", "displayname": "RJ Ryan", "membership": "join" }, "prev_sender": "@rryan:matrix.rjryan.me", "replaces_state": "$145446314553CVQyL:matrix.rjryan.me" } }, { "content": { "membership": "leave" }, "event_id": "$1471758961244299QtKuY:matrix.org", "membership": "leave", "origin_server_ts": 1471758961429, "sender": "@deadrat:matrix.org", "state_key": "@deadrat:matrix.org", "type": "m.room.member", "unsigned": { "age": 38908991249, "replaces_state": "$1471757091241462BqXRC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150881023817PsBij:pi2.nsupdate.info:8448", "origin_server_ts": 1508810238474, "sender": "@admin:pi2.nsupdate.info:8448", "state_key": "@admin:pi2.nsupdate.info:8448", "type": "m.room.member", "unsigned": { "age": 30 } }, { "content": { "avatar_url": null, "displayname": "Woutifier", "membership": "join" }, "event_id": "$150005200769hpMEL:wbdv.nl", "membership": "join", "origin_server_ts": 1500052007474, "sender": "@wouter:wbdv.nl", "state_key": "@wouter:wbdv.nl", "type": "m.room.member", "unsigned": { "age": 10615945204, "replaces_state": "$15000444931TdvTm:wbdv.nl" } }, { "content": { "avatar_url": "mxc://matrix.org/ImAKWhhLCYOGZJsZXtgwZSxn", "displayname": "vlaho", "membership": "join" }, "event_id": "$1485945230523221jttGA:matrix.org", "membership": "join", "origin_server_ts": 1485945230020, "sender": "@vlaho:matrix.org", "state_key": "@vlaho:matrix.org", "type": "m.room.member", "unsigned": { "age": 24722722658, "replaces_state": "$1484000828143424oEggi:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jwheare (IRC)", "membership": "join" }, "event_id": "$1495529270541352wyxqC:matrix.org", "membership": "join", "origin_server_ts": 1495529270528, "sender": "@freenode_jwheare:matrix.org", "state_key": "@freenode_jwheare:matrix.org", "type": "m.room.member", "unsigned": { "age": 15138682150 } }, { "content": { "avatar_url": null, "displayname": "Guest LaAfrique", "kind": "guest", "membership": "join" }, "event_id": "$1470216417157591vQsyp:matrix.org", "membership": "join", "origin_server_ts": 1470216417545, "sender": "@29154:matrix.org", "state_key": "@29154:matrix.org", "type": "m.room.member", "unsigned": { "age": 40451535133 } }, { "content": { "avatar_url": "mxc://home.matrix.one-crazy-human.net/cbizvvypftDEOvQkjGiTCEJO", "displayname": "narispo", "membership": "join" }, "event_id": "$150870793245tCAUN:home.matrix.one-crazy-human.net", "membership": "join", "origin_server_ts": 1508707932331, "sender": "@narispo:home.matrix.one-crazy-human.net", "state_key": "@narispo:home.matrix.one-crazy-human.net", "type": "m.room.member", "unsigned": { "age": 1960020347, "prev_content": { "avatar_url": "mxc://home.matrix.one-crazy-human.net/WgWRhuwgFqJDhucyWEzMMqSx", "displayname": "narispo", "membership": "join" }, "prev_sender": "@narispo:home.matrix.one-crazy-human.net", "replaces_state": "$150870778919HGCyO:home.matrix.one-crazy-human.net" } }, { "content": { "membership": "leave" }, "event_id": "$151015967258mpLuW:host83.bizen.it", "membership": "leave", "origin_server_ts": 1510159672858, "sender": "@massimiliano.bizen:host83.bizen.it", "state_key": "@massimiliano.bizen:host83.bizen.it", "type": "m.room.member", "unsigned": { "age": 508279820, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@massimiliano.bizen:host83.bizen.it", "replaces_state": "$151015956857hnCah:host83.bizen.it" } }, { "content": { "membership": "leave" }, "event_id": "$1486176204695303nKZFI:matrix.org", "membership": "leave", "origin_server_ts": 1486176204903, "sender": "@six:matrix.org", "state_key": "@six:matrix.org", "type": "m.room.member", "unsigned": { "age": 24491747775, "replaces_state": "$148576470616345GZCTA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "LeoNerd (IRC)", "membership": "join" }, "event_id": "$15018347621785120DARta:matrix.org", "membership": "join", "origin_server_ts": 1501834762361, "sender": "@freenode_LeoNerd:matrix.org", "state_key": "@freenode_LeoNerd:matrix.org", "type": "m.room.member", "unsigned": { "age": 8833190317, "replaces_state": "$15018258541705856QpMZh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XiKOExLHojdpZhNKxeaXmsIj#auto", "displayname": null, "membership": "join" }, "event_id": "$14297170831318oIKar:matrix.org", "membership": "join", "origin_server_ts": 1429717083322, "sender": "@Bill:matrix.org", "state_key": "@Bill:matrix.org", "type": "m.room.member", "unsigned": { "age": 80950869356 } }, { "content": { "avatar_url": null, "displayname": "Guest 203741", "kind": "guest", "membership": "join" }, "event_id": "$149190394729757LFKQa:matrix.org", "membership": "join", "origin_server_ts": 1491903947175, "sender": "@203741:matrix.org", "state_key": "@203741:matrix.org", "type": "m.room.member", "unsigned": { "age": 18764005503 } }, { "content": { "membership": "leave" }, "event_id": "$1487868267780930yUZYp:matrix.org", "membership": "leave", "origin_server_ts": 1487868267110, "sender": "@iav:matrix.org", "state_key": "@iav:matrix.org", "type": "m.room.member", "unsigned": { "age": 22799685568, "replaces_state": "$1473473294129414OdGvy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/BnZMRWryQaYxhfLqQXumBLak", "displayname": "ReqX (Mike)", "membership": "join" }, "event_id": "$14893181281293252EyCMz:matrix.org", "membership": "join", "origin_server_ts": 1489318128806, "sender": "@ReqX:matrix.org", "state_key": "@ReqX:matrix.org", "type": "m.room.member", "unsigned": { "age": 21349823872, "replaces_state": "$14887387891523313lcldo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pgRZcCgDNgkSpNCnbIwCBJes", "displayname": "bolton", "membership": "join" }, "event_id": "$1486765960636673XEnAW:matrix.org", "membership": "join", "origin_server_ts": 1486765960796, "sender": "@bolton:matrix.org", "state_key": "@bolton:matrix.org", "type": "m.room.member", "unsigned": { "age": 23901991882 } }, { "content": { "membership": "leave" }, "event_id": "$1416421050073wSUwI:matrix.org", "membership": "leave", "origin_server_ts": 1415803457334, "sender": "@irc_Alec:matrix.org", "state_key": "@irc_Alec:matrix.org", "stream_ordering": 27297, "type": "m.room.member", "unsigned": { "age": 94246902605 } }, { "content": { "avatar_url": "mxc://matrix.org/eAQAhpVLVlKkpMIlfvNKQsAC", "displayname": "beatpanic", "membership": "join" }, "event_id": "$14887469001576686HUlks:matrix.org", "membership": "join", "origin_server_ts": 1488746900839, "sender": "@beatpanic:matrix.org", "state_key": "@beatpanic:matrix.org", "type": "m.room.member", "unsigned": { "age": 21921051839, "replaces_state": "$1488032032900166lRUUd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1449257012549176bOCRM:matrix.org", "origin_server_ts": 1449257012610, "sender": "@Karenin:matrix.org", "state_key": "@Karenin:matrix.org", "type": "m.room.member", "unsigned": { "age": 61410940068, "replaces_state": "$1449165436457693olUfT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FXpmsjGrynSBoeHkWqZsuqef", "displayname": "Pascal Bach", "membership": "join" }, "event_id": "$15052475793672606SInMO:matrix.org", "membership": "join", "origin_server_ts": 1505247579508, "sender": "@bachp:matrix.org", "state_key": "@bachp:matrix.org", "type": "m.room.member", "unsigned": { "age": 5420373170, "replaces_state": "$1474302625629500YitxA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/fQUpGnVNufMSJgNkCCKbdLoI", "displayname": "pocketmoon", "membership": "join" }, "event_id": "$1446412088358830WBwwJ:matrix.org", "origin_server_ts": 1446412088821, "sender": "@pocketmoon:matrix.org", "state_key": "@pocketmoon:matrix.org", "type": "m.room.member", "unsigned": { "age": 64255863857, "replaces_state": "$1446411973358731TGgqB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tester668", "membership": "join" }, "event_id": "$15052050023074119EznbX:matrix.org", "membership": "join", "origin_server_ts": 1505205002874, "sender": "@tester668:matrix.org", "state_key": "@tester668:matrix.org", "type": "m.room.member", "unsigned": { "age": 5462949804 } }, { "content": { "avatar_url": null, "displayname": "Guest 36496", "kind": "guest", "membership": "join" }, "event_id": "$1472813614178126aNZoc:matrix.org", "membership": "join", "origin_server_ts": 1472813614104, "sender": "@36496:matrix.org", "state_key": "@36496:matrix.org", "type": "m.room.member", "unsigned": { "age": 37854338574 } }, { "content": { "membership": "leave" }, "event_id": "$148283138028BWAZM:www.priva.club", "membership": "leave", "origin_server_ts": 1482831380388, "sender": "@saladus:www.priva.club", "state_key": "@saladus:www.priva.club", "type": "m.room.member", "unsigned": { "age": 27836572290, "prev_content": { "avatar_url": null, "displayname": "saladus", "membership": "join" }, "prev_sender": "@saladus:www.priva.club", "replaces_state": "$14828306971tWjyC:www.priva.club" } }, { "content": { "membership": "leave" }, "event_id": "$15090479793103367RyzKX:matrix.org", "membership": "leave", "origin_server_ts": 1509047979227, "sender": "@freenode_KindOne:matrix.org", "state_key": "@freenode_KindOne:matrix.org", "type": "m.room.member", "unsigned": { "age": 1619973451, "replaces_state": "$15089023581030151AgaOr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nMIEatDAyNJPXyGIWWhxpfLf", "displayname": "wm.wragg", "membership": "join" }, "event_id": "$1468515858558923cnHzi:matrix.org", "membership": "join", "origin_server_ts": 1468515858458, "sender": "@wm.wragg:matrix.org", "state_key": "@wm.wragg:matrix.org", "type": "m.room.member", "unsigned": { "age": 42152094220, "replaces_state": "$1468515851558894AziwG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1479063851909380zNGMQ:matrix.org", "membership": "leave", "origin_server_ts": 1479063851969, "sender": "@bastoon:matrix.org", "state_key": "@bastoon:matrix.org", "type": "m.room.member", "unsigned": { "age": 31604100709, "replaces_state": "$147879918570691zryOe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Cybo", "membership": "join" }, "event_id": "$1475522226471xYBTO:matrix.slimroms.org", "origin_server_ts": 1475522272973, "sender": "@cybo:matrix.slimroms.org", "state_key": "@cybo:matrix.slimroms.org", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "membership": "leave" }, "event_id": "$14201989903460nRODE:matrix.org", "origin_server_ts": 1420198990580, "sender": "@irc_SkaveRat:matrix.org", "state_key": "@irc_SkaveRat:matrix.org", "type": "m.room.member", "unsigned": { "age": 90468962098, "replaces_state": "$14192190793qHYoR:matrix.org" } }, { "content": { "avatar_url": "mxc://johni0702.de/GiAnFipFejCoOwIIdFLFIzdf", "displayname": "johni0702", "membership": "join" }, "event_id": "$149149510114xpzdf:johni0702.de", "origin_server_ts": 1491495101749, "sender": "@jonas:johni0702.de", "state_key": "@jonas:johni0702.de", "type": "m.room.member", "unsigned": { "age": 61 } }, { "content": { "avatar_url": null, "displayname": "trn (IRC)", "membership": "join" }, "event_id": "$15038567272041636iOhue:matrix.org", "membership": "join", "origin_server_ts": 1503856727731, "sender": "@freenode_trn:matrix.org", "state_key": "@freenode_trn:matrix.org", "type": "m.room.member", "unsigned": { "age": 6811224947, "replaces_state": "$15029623701169026LrqUc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pjYgmnjzEIBbrvYMXGLSNovO#auto", "displayname": "Steve Campbell", "membership": "join" }, "event_id": "$142573805214291FarUI:matrix.org", "membership": "join", "origin_server_ts": 1425738052686, "sender": "@DukeyToo:matrix.org", "state_key": "@DukeyToo:matrix.org", "type": "m.room.member", "unsigned": { "age": 84929899992 } }, { "content": { "avatar_url": "mxc://chat.rios.org.br/wwOURbNTgIZPkMMTsSusXNZw", "displayname": "daniel", "membership": "join" }, "event_id": "$15070609178628qIRNp:chat.rios.org.br", "membership": "join", "origin_server_ts": 1507060917696, "sender": "@dtygel:chat.rios.org.br", "state_key": "@dtygel:chat.rios.org.br", "type": "m.room.member", "unsigned": { "age": 3607034982, "replaces_state": "$15070609048588pIBey:chat.rios.org.br" } }, { "content": { "membership": "leave" }, "event_id": "$1497653334476329KgdNe:matrix.org", "membership": "leave", "origin_server_ts": 1497653334201, "sender": "@freenode_albert__:matrix.org", "state_key": "@freenode_albert__:matrix.org", "type": "m.room.member", "unsigned": { "age": 13014618477, "replaces_state": "$149689557093383PPzvz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15042707603467374rDecy:matrix.org", "membership": "leave", "origin_server_ts": 1504270760177, "sender": "@damao:matrix.org", "state_key": "@damao:matrix.org", "type": "m.room.member", "unsigned": { "age": 6397192501, "replaces_state": "$1494084564842452bUCoO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HFPyZyjlQkqlRDxPAqpAipDb#auto", "displayname": "JoseLuis", "membership": "join" }, "event_id": "$142374360364ifYVM:matrix.org", "membership": "join", "origin_server_ts": 1423743603090, "sender": "@jluis:matrix.org", "state_key": "@jluis:matrix.org", "type": "m.room.member", "unsigned": { "age": 86924349588 } }, { "content": { "avatar_url": null, "displayname": "Guest 175688", "kind": "guest", "membership": "join" }, "event_id": "$14892917261183458HQfLN:matrix.org", "membership": "join", "origin_server_ts": 1489291726017, "sender": "@175688:matrix.org", "state_key": "@175688:matrix.org", "type": "m.room.member", "unsigned": { "age": 21376226661 } }, { "content": { "membership": "leave" }, "event_id": "$14956632412026203xtmZM:matrix.org", "membership": "leave", "origin_server_ts": 1495663241535, "sender": "@freenode_youjelly:matrix.org", "state_key": "@freenode_youjelly:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004711143, "replaces_state": "$14804869081891711xzewf:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eqFOIsxPsbjYWESUtsZDxZpY", "displayname": "William King", "membership": "join" }, "event_id": "$1444065504286190bEDdj:matrix.org", "origin_server_ts": 1444065504027, "sender": "@quentusrex:matrix.org", "state_key": "@quentusrex:matrix.org", "type": "m.room.member", "unsigned": { "age": 66602448651, "replaces_state": "$1444065367286099UKxAq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437573416945VJbZs:matrix.org", "membership": "leave", "origin_server_ts": 1499143757983, "sender": "@freenode_kerozene:matrix.org", "state_key": "@freenode_kerozene:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524194695, "replaces_state": "$1496794700338999hBoor:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14359372257182kxMJf:matrix.org", "origin_server_ts": 1435937225212, "sender": "@davek:matrix.org", "state_key": "@davek:matrix.org", "type": "m.room.member", "unsigned": { "age": 74730727466, "replaces_state": "$14359356456575KFENf:matrix.org" } }, { "content": { "avatar_url": "mxc://v42.dk/TawgMarKJTUUWqKOtPjvkyHM", "displayname": "MadsRC", "membership": "join" }, "event_id": "$145551953416YfqvL:v42.dk", "origin_server_ts": 1455519534357, "sender": "@MadsRC:v42.dk", "state_key": "@MadsRC:v42.dk", "type": "m.room.member", "unsigned": { "age": 55148418321, "replaces_state": "$14527248228QltTp:v42.dk" } }, { "content": { "avatar_url": null, "displayname": "Guest 6255", "kind": "guest", "membership": "join" }, "event_id": "$146067143546706ZszGT:matrix.org", "membership": "join", "origin_server_ts": 1460671435493, "sender": "@6255:matrix.org", "state_key": "@6255:matrix.org", "type": "m.room.member", "unsigned": { "age": 49996517185 } }, { "age_ts": 1426006031810, "content": { "avatar_url": "mxc://homeserver.reclaim.technology/APsmndrHTJZyHJeSzOThrpDf", "displayname": "DJSundog", "membership": "join" }, "event_id": "$142600602448TiuLX:homeserver.reclaim.technology", "origin_server_ts": 1426006024716, "sender": "@DJSundog:homeserver.reclaim.technology", "state_key": "@DJSundog:homeserver.reclaim.technology", "type": "m.room.member", "unsigned": { "age": 37, "replaces_state": "$142600003535ZmWjU:homeserver.reclaim.technology" } }, { "content": { "avatar_url": "mxc://matrix.org/zXBMqPrBJjhnzDbGuBaYOCqp", "displayname": "fractal", "membership": "join" }, "event_id": "$14984373201882596SiiVh:matrix.org", "membership": "join", "origin_server_ts": 1498437320998, "sender": "@fractal:matrix.org", "state_key": "@fractal:matrix.org", "type": "m.room.member", "unsigned": { "age": 12230631680, "replaces_state": "$14863437551477807JzmZE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$146892111916ZQLOp:matrix.heldscal.la", "membership": "leave", "origin_server_ts": 1468921119487, "sender": "@roger:matrix.heldscal.la", "state_key": "@roger:matrix.heldscal.la", "type": "m.room.member", "unsigned": { "age": 41746833191, "replaces_state": "$14689207385MFLZV:matrix.heldscal.la" } }, { "content": { "membership": "leave" }, "event_id": "$14544219931037duXvn:matrix.org", "origin_server_ts": 1454421993204, "sender": "@kazetora:matrix.org", "state_key": "@kazetora:matrix.org", "type": "m.room.member", "unsigned": { "age": 56245959474, "replaces_state": "$145442109817022ceyUC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15065714262826677DKdkD:matrix.org", "membership": "join", "origin_server_ts": 1506571426240, "sender": "@cnhridol:matrix.org", "state_key": "@cnhridol:matrix.org", "type": "m.room.member", "unsigned": { "age": 4096526438 } }, { "content": { "avatar_url": null, "displayname": "friedger", "membership": "join" }, "event_id": "$1486383372151569AjQCE:hackerspace.be", "origin_server_ts": 1486383373292, "sender": "@friedger:hackerspace.be", "state_key": "@friedger:hackerspace.be", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "avatar_url": "mxc://openpsychology.net/aFGnbIWgCIpkoLkPdkwEcGQf", "displayname": "JigmeDatse (OPP)", "membership": "join" }, "event_id": "$1509430657117KZKLV:openpsychology.net", "origin_server_ts": 1509430657900, "sender": "@JigmeDatse:openpsychology.net", "state_key": "@JigmeDatse:openpsychology.net", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "membership": "leave" }, "event_id": "$15039445372irNGr:alltalk.tk", "membership": "leave", "origin_server_ts": 1503944537913, "sender": "@anmol:alltalk.tk", "state_key": "@anmol:alltalk.tk", "type": "m.room.member", "unsigned": { "age": 6723414765, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@anmol:alltalk.tk", "replaces_state": "$15039443981jOaYN:alltalk.tk" } }, { "content": { "membership": "leave" }, "event_id": "$1443704592402FLZll:openmarket.com", "origin_server_ts": 1443704592096, "sender": "@tristan:openmarket.com", "state_key": "@tristan:openmarket.com", "type": "m.room.member", "unsigned": { "age": 66963360582, "replaces_state": "$1443697683132mjfKE:openmarket.com" } }, { "content": { "membership": "leave" }, "event_id": "$14990879872403950nVafc:matrix.org", "membership": "leave", "origin_server_ts": 1499087987735, "sender": "@phalarope:matrix.org", "state_key": "@phalarope:matrix.org", "type": "m.room.member", "unsigned": { "age": 11579964943, "replaces_state": "$14990879572403589CpnQf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$141744562144Oqfhy:matrix.soho-piper.de", "membership": "leave", "origin_server_ts": 1417445621988, "sender": "@rainer:matrix.soho-piper.de", "state_key": "@rainer:matrix.soho-piper.de", "type": "m.room.member", "unsigned": { "age": 93222692856 } }, { "content": { "membership": "leave" }, "event_id": "$14956631452024058Gavju:matrix.org", "membership": "leave", "origin_server_ts": 1495663145741, "sender": "@freenode_7YUAAJ82L:matrix.org", "state_key": "@freenode_7YUAAJ82L:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004806937, "replaces_state": "$14313504014eAfOZ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14828342282749620yYPPe:matrix.org", "membership": "join", "origin_server_ts": 1482834228962, "sender": "@xsteadfastx:matrix.org", "state_key": "@xsteadfastx:matrix.org", "type": "m.room.member", "unsigned": { "age": 27833723716 } }, { "content": { "membership": "leave" }, "event_id": "$141769826384viscB:matrix.org", "membership": "leave", "origin_server_ts": 1417698263718, "sender": "@becbunzen:matrix.org", "state_key": "@becbunzen:matrix.org", "type": "m.room.member", "unsigned": { "age": 92969688960 } }, { "content": { "membership": "leave" }, "event_id": "$1417690189318djNSd:matrix.org", "membership": "leave", "origin_server_ts": 1417690189471, "sender": "@irc_KoFish:matrix.org", "state_key": "@irc_KoFish:matrix.org", "type": "m.room.member", "unsigned": { "age": 92977763207 } }, { "content": { "avatar_url": null, "displayname": "Bitti", "membership": "join" }, "event_id": "$14896053073ZCcZR:miui-germany.de", "origin_server_ts": 1489605307800, "sender": "@Bitti:miui-germany.de", "state_key": "@Bitti:miui-germany.de", "type": "m.room.member", "unsigned": { "age": 53 } }, { "content": { "avatar_url": null, "displayname": "MrAdamJohn", "membership": "join" }, "event_id": "$148303219315092WiEsP:matrix.org", "membership": "join", "origin_server_ts": 1483032193906, "sender": "@MrAdamJohn:matrix.org", "state_key": "@MrAdamJohn:matrix.org", "type": "m.room.member", "unsigned": { "age": 27635758772 } }, { "content": { "avatar_url": "mxc://matrix.org/CHRCDJlqCnlrwOBfTCAYmaYw", "displayname": "Andrew", "membership": "join" }, "event_id": "$1423808628225cUOIQ:matrix.org", "membership": "join", "origin_server_ts": 1423808628326, "sender": "@andmalc:matrix.org", "state_key": "@andmalc:matrix.org", "type": "m.room.member", "unsigned": { "age": 86859324352 } }, { "content": { "membership": "leave" }, "event_id": "$14556663974855flCmm:matrix.org", "origin_server_ts": 1455666397121, "sender": "@mitch9654:matrix.org", "state_key": "@mitch9654:matrix.org", "type": "m.room.member", "unsigned": { "age": 55001555557, "replaces_state": "$14556662304826smBHd:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Remi", "membership": "join" }, "event_id": "$1508003727137lyxWU:remireuvekamp.nl", "membership": "join", "origin_server_ts": 1508003727990, "sender": "@remi:remireuvekamp.nl", "state_key": "@remi:remireuvekamp.nl", "type": "m.room.member", "unsigned": { "age": 2664224688, "replaces_state": "$150799227626FEvvg:remireuvekamp.nl" } }, { "content": { "avatar_url": null, "displayname": "jnoah (IRC)", "membership": "join" }, "event_id": "$15081711721135889KHMkK:matrix.org", "membership": "join", "origin_server_ts": 1508171172446, "sender": "@freenode_jnoah:matrix.org", "state_key": "@freenode_jnoah:matrix.org", "type": "m.room.member", "unsigned": { "age": 2496780232, "replaces_state": "$15081695431107325SwPQd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148191858933MArwo:bendiksverden.net", "membership": "leave", "origin_server_ts": 1481918589606, "sender": "@lb1bi:bendiksverden.net", "state_key": "@lb1bi:bendiksverden.net", "type": "m.room.member", "unsigned": { "age": 28749363072, "replaces_state": "$148191722118NxBcu:bendiksverden.net" } }, { "content": { "membership": "leave" }, "event_id": "$15099448203198837niSyd:matrix.org", "membership": "leave", "origin_server_ts": 1509944820784, "sender": "@freenode_Spydar007:matrix.org", "state_key": "@freenode_Spydar007:matrix.org", "type": "m.room.member", "unsigned": { "age": 723131894, "replaces_state": "$15083097503118954GEHPs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632292025899nPYdQ:matrix.org", "membership": "leave", "origin_server_ts": 1495663229387, "sender": "@freenode_dsaddd:matrix.org", "state_key": "@freenode_dsaddd:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004723291, "replaces_state": "$1483388087544655FhEJO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14833498953sBjzi:bgroberts.id.au", "membership": "leave", "origin_server_ts": 1483349895156, "sender": "@tsujamin:bgroberts.id.au", "state_key": "@tsujamin:bgroberts.id.au", "type": "m.room.member", "unsigned": { "age": 27318057522, "prev_content": { "avatar_url": null, "displayname": "Benjamin Roberts", "membership": "join" }, "prev_sender": "@tsujamin:bgroberts.id.au", "replaces_state": "$14833487002RZPdw:bgroberts.id.au" } }, { "content": { "avatar_url": null, "displayname": "annie007", "membership": "join" }, "event_id": "$15041989232606109FNdSM:matrix.org", "membership": "join", "origin_server_ts": 1504198923347, "sender": "@annie007:matrix.org", "state_key": "@annie007:matrix.org", "type": "m.room.member", "unsigned": { "age": 6469029331 } }, { "content": { "membership": "leave" }, "event_id": "$14956631962025135FeiDx:matrix.org", "membership": "leave", "origin_server_ts": 1495663196331, "sender": "@freenode_Guest79297:matrix.org", "state_key": "@freenode_Guest79297:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004756347, "replaces_state": "$1464501597261018AGktl:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JTDHIbvyKSeCaEdONpmtFBph#auto", "displayname": "Shepherd", "membership": "join" }, "event_id": "$144573614580741fMvwb:matrix.org", "origin_server_ts": 1445736145136, "sender": "@Shepherd:matrix.org", "state_key": "@Shepherd:matrix.org", "type": "m.room.member", "unsigned": { "age": 64931807542 } }, { "content": { "avatar_url": "mxc://matrix.org/FglltVEgpRABGVNxQmDBkmDx", "displayname": "Lucid00", "membership": "join" }, "event_id": "$145329445061985fUlKf:matrix.org", "origin_server_ts": 1453294450648, "sender": "@lucid00:matrix.org", "state_key": "@lucid00:matrix.org", "type": "m.room.member", "unsigned": { "age": 57373502030 } }, { "content": { "aliases": [] }, "event_id": "$148335099928YXYwY:kyriasis.com", "origin_server_ts": 1483350999473, "sender": "@kyrias:kyriasis.com", "state_key": "kyriasis.com", "type": "m.room.aliases", "unsigned": { "age": 27316953205, "prev_content": { "aliases": [ "#matrix-dev:kyriasis.com" ] }, "prev_sender": "@kyrias:kyriasis.com", "replaces_state": "$148335055521lcZFB:kyriasis.com" } }, { "content": { "membership": "leave" }, "event_id": "$14956631602024360cnTaM:matrix.org", "membership": "leave", "origin_server_ts": 1495663160573, "sender": "@freenode_EionRobb:matrix.org", "state_key": "@freenode_EionRobb:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004792105, "replaces_state": "$144815102378819QezzJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/jeffoLrYsyNsgggJayJIRjcK", "displayname": "sh1omi☺", "membership": "join" }, "event_id": "$1483266139630228Zoejr:matrix.org", "membership": "join", "origin_server_ts": 1483266139283, "sender": "@sh1omi:matrix.org", "state_key": "@sh1omi:matrix.org", "type": "m.room.member", "unsigned": { "age": 27401813395, "replaces_state": "$14804999811931661BzJBS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wjDAkXSwdwhtnEEAumNlecwh", "displayname": "LeoNerd", "membership": "join" }, "event_id": "$145411536137803CuGOb:matrix.org", "origin_server_ts": 1454115361462, "sender": "@LeoNerd:matrix.org", "state_key": "@LeoNerd:matrix.org", "type": "m.room.member", "unsigned": { "age": 56552591216, "replaces_state": "$1416420910529mzqgm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437513416814QXzbJ:matrix.org", "membership": "leave", "origin_server_ts": 1499143751222, "sender": "@freenode_user2468__:matrix.org", "state_key": "@freenode_user2468__:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524201456, "replaces_state": "$14989612811369668spAGo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/AeFbnVCGaERXjEBQqntOcDah", "displayname": "ar_ch", "membership": "join" }, "event_id": "$147626600914311kaeGU:matrix.org", "membership": "join", "origin_server_ts": 1476266009225, "sender": "@ar_ch:matrix.org", "state_key": "@ar_ch:matrix.org", "type": "m.room.member", "unsigned": { "age": 34401943453 } }, { "content": { "membership": "leave" }, "event_id": "$1502440423163lXewv:matrixaz2.lanetelecom.com", "membership": "leave", "origin_server_ts": 1502440423486, "sender": "@DaveBullock:matrixaz2.lanetelecom.com", "state_key": "@DaveBullock:matrixaz2.lanetelecom.com", "type": "m.room.member", "unsigned": { "age": 8227529192, "prev_content": { "avatar_url": null, "displayname": "DaveBullock(2nd Act)", "membership": "join" }, "prev_sender": "@DaveBullock:matrixaz2.lanetelecom.com", "replaces_state": "$1502197289162lIGHI:matrixaz2.lanetelecom.com" } }, { "content": { "avatar_url": "mxc://matrix.org/TzFYGbKvSappjAvwVtyKzJMe", "displayname": "Thijs Triemstra", "membership": "join" }, "event_id": "$14296350373642RqPQK:matrix.org", "origin_server_ts": 1429635037679, "sender": "@thijs:matrix.org", "state_key": "@thijs:matrix.org", "type": "m.room.member", "unsigned": { "age": 81032914999, "replaces_state": "$14295487892300tpRMF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "snek", "membership": "join" }, "event_id": "$15089026041032951nlWha:matrix.org", "membership": "join", "origin_server_ts": 1508902604219, "sender": "@snek:matrix.org", "state_key": "@snek:matrix.org", "type": "m.room.member", "unsigned": { "age": 1765348459 } }, { "content": { "avatar_url": "mxc://matrix.org/NyqHwdKDoJbxeEqbnhkgzigt#auto", "displayname": "bobolson", "membership": "join" }, "event_id": "$14279235045406WucIH:matrix.org", "membership": "join", "origin_server_ts": 1427923504904, "sender": "@gfbob:matrix.org", "state_key": "@gfbob:matrix.org", "type": "m.room.member", "unsigned": { "age": 82744447774 } }, { "content": { "membership": "leave" }, "event_id": "$15059085174411828JWaTG:matrix.org", "membership": "leave", "origin_server_ts": 1505908517383, "sender": "@freenode_fasdfd:matrix.org", "state_key": "@freenode_fasdfd:matrix.org", "type": "m.room.member", "unsigned": { "age": 4759435295, "replaces_state": "$15059065624389352dQnYL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14866232403146137sQdCI:matrix.org", "membership": "join", "origin_server_ts": 1486623240360, "sender": "@proukornew:matrix.org", "state_key": "@proukornew:matrix.org", "type": "m.room.member", "unsigned": { "age": 24044712318 } }, { "content": { "avatar_url": null, "displayname": "epi", "membership": "join" }, "event_id": "$1502130530208585KWCNp:matrix.org", "membership": "join", "origin_server_ts": 1502130530621, "sender": "@epi:matrix.org", "state_key": "@epi:matrix.org", "type": "m.room.member", "unsigned": { "age": 8537422057 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15025607611635391dIFka:matrix.org", "membership": "join", "origin_server_ts": 1502560761563, "sender": "@skyler14:matrix.org", "state_key": "@skyler14:matrix.org", "type": "m.room.member", "unsigned": { "age": 8107191115 } }, { "content": { "membership": "leave" }, "event_id": "$1479758796662111PblGl:matrix.org", "membership": "leave", "origin_server_ts": 1479758796911, "sender": "@daniele:matrix.org", "state_key": "@daniele:matrix.org", "type": "m.room.member", "unsigned": { "age": 30909155767, "replaces_state": "$1468341538186047QBdzA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CNdEHjmGwTiqVMEiAiYYLhvF#auto", "displayname": "Asdf Asdf", "membership": "join" }, "event_id": "$1432923934487rYmKd:matrix.org", "membership": "join", "origin_server_ts": 1432923934528, "sender": "@asdfasdf:matrix.org", "state_key": "@asdfasdf:matrix.org", "type": "m.room.member", "unsigned": { "age": 77744018150 } }, { "content": { "membership": "leave" }, "event_id": "$14956632162025599kCSbm:matrix.org", "membership": "leave", "origin_server_ts": 1495663216045, "sender": "@freenode_sanderr:matrix.org", "state_key": "@freenode_sanderr:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004736633, "replaces_state": "$143872441230553ZdcTu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "shadowGergoe", "membership": "join" }, "event_id": "$1506336435682550FTdeS:matrix.org", "membership": "join", "origin_server_ts": 1506336435706, "sender": "@shadowGergoe:matrix.org", "state_key": "@shadowGergoe:matrix.org", "type": "m.room.member", "unsigned": { "age": 4331516972 } }, { "content": { "avatar_url": null, "displayname": "creamyhorror", "membership": "join" }, "event_id": "$15085306121978837JKoed:matrix.org", "membership": "join", "origin_server_ts": 1508530612792, "sender": "@creamyhorror:matrix.org", "state_key": "@creamyhorror:matrix.org", "type": "m.room.member", "unsigned": { "age": 2137339886 } }, { "content": { "avatar_url": "mxc://matrix.org/OiGBBssfTzeuiRgEEvjCHGtl", "displayname": "NeonXP", "membership": "join" }, "event_id": "$143760168811962YWPck:matrix.org", "origin_server_ts": 1437601688185, "sender": "@neonxp:matrix.org", "state_key": "@neonxp:matrix.org", "type": "m.room.member", "unsigned": { "age": 73066264493 } }, { "content": { "membership": "leave" }, "event_id": "$145934115698429dAtmP:matrix.org", "membership": "leave", "origin_server_ts": 1459341156461, "sender": "@mr_tron:matrix.org", "state_key": "@mr_tron:matrix.org", "type": "m.room.member", "unsigned": { "age": 51326796217, "replaces_state": "$145934025497237hkToP:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612655039jVAGx:matrix.org", "origin_server_ts": 1429261265851, "sender": "@kegan:matrix.org", "state_key": "@irc_Toast3r:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406686827, "replaces_state": "$14269738551021FlqOe:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612685040bodGg:matrix.org", "origin_server_ts": 1429261268803, "sender": "@kegan:matrix.org", "state_key": "@irc_Mjark:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406683875, "replaces_state": "$14247918227430IvtYI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/cBWMkDwwpkVyBrsghsgPFBKO#auto", "displayname": "omegax00", "membership": "join" }, "event_id": "$14863903051679200tgUDu:matrix.org", "membership": "join", "origin_server_ts": 1486390305173, "sender": "@omegax00:matrix.org", "state_key": "@omegax00:matrix.org", "type": "m.room.member", "unsigned": { "age": 24277647505, "replaces_state": "$14419849365669QZevx:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1491146477146BJcyZ:antiniveau.su", "membership": "leave", "origin_server_ts": 1491146477887, "sender": "@z3r03nna:antiniveau.su", "state_key": "@z3r03nna:antiniveau.su", "type": "m.room.member", "unsigned": { "age": 5814533, "prev_content": { "avatar_url": null, "displayname": "z3r03nna", "membership": "join" }, "prev_sender": "@z3r03nna:antiniveau.su", "replaces_state": "$1491145886140XfAiu:antiniveau.su" } }, { "content": { "membership": "leave" }, "event_id": "$14652920114435rPmlX:matrix.org", "membership": "leave", "origin_server_ts": 1465292011460, "sender": "@fil:matrix.org", "state_key": "@fil:matrix.org", "type": "m.room.member", "unsigned": { "age": 45375941218, "replaces_state": "$146062142656086OAUks:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "scj643", "membership": "join" }, "event_id": "$1484151706105574HogjG:matrix.org", "membership": "join", "origin_server_ts": 1484151706542, "sender": "@scj643:matrix.org", "state_key": "@scj643:matrix.org", "type": "m.room.member", "unsigned": { "age": 26516246136 } }, { "content": { "membership": "leave" }, "event_id": "$141875933227aSJdv:matrix.org", "membership": "leave", "origin_server_ts": 1418759332477, "sender": "@jmrenner:matrix.org", "state_key": "@jmrenner:matrix.org", "type": "m.room.member", "unsigned": { "age": 91908620201 } }, { "content": { "membership": "join" }, "event_id": "$1460063101462261uReFH:matrix.org", "membership": "join", "origin_server_ts": 1460063101800, "sender": "@:matrix.org", "state_key": "@:matrix.org", "type": "m.room.member", "unsigned": { "age": 50604850878 } }, { "content": { "avatar_url": "mxc://matrix.org/GVsXfXaLdjLXFIjNvGFmqeot", "displayname": "lx", "membership": "join" }, "event_id": "$14247915207415GHwUX:matrix.org", "origin_server_ts": 1424791520487, "sender": "@lx:matrix.org", "state_key": "@lx:matrix.org", "type": "m.room.member", "unsigned": { "age": 85876432191, "replaces_state": "$14245497654129TeBRK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15019704563218548xpsfE:matrix.org", "membership": "leave", "origin_server_ts": 1501970456699, "sender": "@freenode_d33pb00k-GK1wmSU:matrix.org", "state_key": "@freenode_d33pb00k-GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 8697495979, "replaces_state": "$15019702173215992FHlgS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "iambismark", "membership": "join" }, "event_id": "$1479662129401085OfXYP:matrix.org", "membership": "join", "origin_server_ts": 1479662129426, "sender": "@iambismark:matrix.org", "state_key": "@iambismark:matrix.org", "type": "m.room.member", "unsigned": { "age": 31005823252 } }, { "content": { "membership": "leave" }, "event_id": "$14956632252025811TMcSv:matrix.org", "membership": "leave", "origin_server_ts": 1495663225502, "sender": "@freenode_DoubleMalt:matrix.org", "state_key": "@freenode_DoubleMalt:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004727176, "replaces_state": "$1459858051149818HdEJE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15002644235AMdsy:brap.party", "membership": "leave", "origin_server_ts": 1500264423452, "sender": "@adam:brap.party", "state_key": "@adam:brap.party", "type": "m.room.member", "unsigned": { "age": 10403529226, "prev_content": { "avatar_url": "mxc://brap.party/yulboVOPGXsppcQPuiIQJtGq", "displayname": "AdamP", "membership": "join" }, "prev_sender": "@adam:brap.party", "replaces_state": "$15002644034ecOEq:brap.party" } }, { "content": { "membership": "leave" }, "event_id": "$149672776681QPJrw:jupiter.solar-empire.de", "membership": "leave", "origin_server_ts": 1496727766182, "sender": "@tolot:jupiter.solar-empire.de", "state_key": "@tolot:jupiter.solar-empire.de", "type": "m.room.member", "unsigned": { "age": 13940186496, "prev_content": { "avatar_url": null, "displayname": "tolot", "membership": "join" }, "prev_sender": "@tolot:jupiter.solar-empire.de", "replaces_state": "$149572207028QkEkO:jupiter.solar-empire.de" } }, { "content": { "membership": "leave" }, "event_id": "$149103401219bqUnf:matrix.pherr.net", "membership": "leave", "origin_server_ts": 1491034012226, "sender": "@pherr:matrix.pherr.net", "state_key": "@pherr:matrix.pherr.net", "type": "m.room.member", "unsigned": { "age": 19633940452, "prev_content": { "membership": "join" }, "prev_sender": "@pherr:matrix.pherr.net", "replaces_state": "$149103369713bcpzM:matrix.pherr.net" } }, { "content": { "membership": "leave" }, "event_id": "$15066451614hhyeB:nine-hells.net", "membership": "leave", "origin_server_ts": 1506645161644, "sender": "@falcon15500:nine-hells.net", "state_key": "@falcon15500:nine-hells.net", "type": "m.room.member", "unsigned": { "age": 4022791034, "replaces_state": "$15066445961PFwYm:nine-hells.net" } }, { "content": { "avatar_url": "mxc://matrix.org/XduqejZvXkwmSPxrcnOOLdNP", "displayname": "Slipeer", "membership": "join" }, "event_id": "$1494409176803960ZVfQl:matrix.org", "membership": "join", "origin_server_ts": 1494409176749, "sender": "@slipeer:matrix.org", "state_key": "@slipeer:matrix.org", "type": "m.room.member", "unsigned": { "age": 16258775929 } }, { "content": { "membership": "leave" }, "event_id": "$148408711295695CytEa:matrix.org", "membership": "leave", "origin_server_ts": 1484087112064, "sender": "@cmdsft:matrix.org", "state_key": "@cmdsft:matrix.org", "type": "m.room.member", "unsigned": { "age": 26580840614, "replaces_state": "$148408652491035zahYj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1498843834327809liXyH:matrix.org", "membership": "leave", "origin_server_ts": 1498843834189, "sender": "@donpdonp:matrix.org", "state_key": "@donpdonp:matrix.org", "type": "m.room.member", "unsigned": { "age": 11824118489, "replaces_state": "$144069622014799srgks:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1499072881117824EICcC:igalia.com", "membership": "leave", "origin_server_ts": 1499072881135, "sender": "@cturner:igalia.com", "state_key": "@cturner:igalia.com", "type": "m.room.member", "unsigned": { "age": 11595071543, "prev_content": { "avatar_url": "mxc://igalia.com/cKDEzfueRaguklyoQndbAjgj", "displayname": "cturner", "membership": "join" }, "prev_sender": "@cturner:igalia.com", "replaces_state": "$1499072517117803bCfye:igalia.com" } }, { "content": { "membership": "leave" }, "event_id": "$14991437563416911MTgGP:matrix.org", "membership": "leave", "origin_server_ts": 1499143756422, "sender": "@freenode_arza-:matrix.org", "state_key": "@freenode_arza-:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524196256, "replaces_state": "$1497725385117675PDdNc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145043520222OzQeV:lovely.beer", "origin_server_ts": 1450435202730, "sender": "@slack_illicitonion:lovely.beer", "state_key": "@slack_illicitonion:lovely.beer", "type": "m.room.member", "unsigned": { "age": 60232749948, "replaces_state": "$14503465772UXrVs:lovely.beer" } }, { "content": { "avatar_url": "https://matrix.sammachin.com:8448/_matrix/content/QHNhbTptYXRyaXguc2FtbWFjaGluLmNvbQoKxFpQpgOeJQlRXmIkDPTSnk.aW1hZ2UvanBlZw==.jpeg", "displayname": "Sam Machin", "membership": "join" }, "event_id": "$14182046433hOSfL:matrix.sammachin.com", "membership": "join", "origin_server_ts": 1418204643173, "sender": "@sam:matrix.sammachin.com", "state_key": "@sam:matrix.sammachin.com", "type": "m.room.member", "unsigned": { "age": 92463308142 } }, { "content": { "avatar_url": "mxc://matrix.org/NYGugkEfIKckHIIhEvemXVrh", "displayname": "Zenexer", "membership": "join" }, "event_id": "$14856479221804104rgsgn:matrix.org", "membership": "join", "origin_server_ts": 1485647922543, "sender": "@Zenexer:matrix.org", "state_key": "@Zenexer:matrix.org", "type": "m.room.member", "unsigned": { "age": 25020030135 } }, { "content": { "avatar_url": "mxc://rvalles.net/MokkCctFUCTuPMIUnWNhEXYg", "displayname": "Roc", "membership": "join" }, "event_id": "$15019544314oEltK:rvalles.net", "membership": "join", "origin_server_ts": 1501954431791, "sender": "@roc:rvalles.net", "state_key": "@roc:rvalles.net", "type": "m.room.member", "unsigned": { "age": 8713520887, "prev_content": { "avatar_url": "mxc://rvalles.net/nVdwxVGqJasdKDRKgjykjSbP", "displayname": "Roc", "membership": "join" }, "prev_sender": "@roc:rvalles.net", "replaces_state": "$15019543091AejGX:rvalles.net" } }, { "content": { "avatar_url": "mxc://matrix.org/psgmHBoxQgSQFDSuegaPpRWd#auto", "displayname": "naggie", "membership": "join" }, "event_id": "$1466081187134473Ujlsu:matrix.org", "membership": "join", "origin_server_ts": 1466081187481, "sender": "@naggie:matrix.org", "state_key": "@naggie:matrix.org", "type": "m.room.member", "unsigned": { "age": 44586765197 } }, { "content": { "avatar_url": "mxc://matrix.org/qsfCxhfAjgZOCpmIKHAWfDVj", "displayname": "Mikaela (matrix.org)", "membership": "join" }, "event_id": "$14960520693177822eYNDG:matrix.org", "membership": "join", "origin_server_ts": 1496052069344, "sender": "@Ciblia:matrix.org", "state_key": "@Ciblia:matrix.org", "type": "m.room.member", "unsigned": { "age": 14615883334, "replaces_state": "$14875843481338646GVNBr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vEBdKlquSaSiWrvcmsxzoJse#auto", "displayname": "bongfrog", "membership": "join" }, "event_id": "$1471580435185981NLcev:matrix.org", "membership": "join", "origin_server_ts": 1471580435607, "sender": "@bongfrog:matrix.org", "state_key": "@bongfrog:matrix.org", "type": "m.room.member", "unsigned": { "age": 39087517071, "replaces_state": "$143995244118502piIgv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632402026174Zgvsj:matrix.org", "membership": "leave", "origin_server_ts": 1495663240083, "sender": "@freenode_erikj_:matrix.org", "state_key": "@freenode_erikj_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004712595, "replaces_state": "$1443787395151687sjNvp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Jakob", "membership": "join" }, "event_id": "$148820601912SSkHu:michahelles.club", "origin_server_ts": 1488206019732, "sender": "@jakob:michahelles.club", "state_key": "@jakob:michahelles.club", "type": "m.room.member", "unsigned": { "age": 22461932872, "prev_content": { "membership": "leave" }, "prev_sender": "@jakob:michahelles.club", "replaces_state": "$148820584210AsOys:michahelles.club" } }, { "content": { "membership": "leave" }, "event_id": "$14849104204001454wYQHg:matrix.org", "membership": "leave", "origin_server_ts": 1484910420104, "sender": "@vinnitu:matrix.org", "state_key": "@vinnitu:matrix.org", "type": "m.room.member", "unsigned": { "age": 25757532574, "replaces_state": "$14849055433976495JFRzL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145604536860457QakCb:matrix.org", "origin_server_ts": 1456045368047, "sender": "@cinyeo.evolutions:matrix.org", "state_key": "@cinyeo.evolutions:matrix.org", "type": "m.room.member", "unsigned": { "age": 54622584631 } }, { "content": { "membership": "leave" }, "event_id": "$144570222860839POhQU:matrix.org", "origin_server_ts": 1445702228776, "sender": "@mythmon:matrix.org", "state_key": "@mythmon:matrix.org", "type": "m.room.member", "unsigned": { "age": 64965723902, "replaces_state": "$144569934159443yGBSQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/okiOfzJydytcCprNmvEmKSdz", "displayname": "Leon Handreke", "membership": "join" }, "event_id": "$14240112311573LMbPy:matrix.org", "origin_server_ts": 1424011231682, "sender": "@leonh:matrix.org", "state_key": "@leonh:matrix.org", "type": "m.room.member", "unsigned": { "age": 86656720996, "replaces_state": "$14237732251022jQJIc:matrix.org" } }, { "content": { "avatar_url": "mxc://aimmac23.com/uoOcqoFNniNFKjFbdyrCIRWl", "displayname": "Alasdair Macmillan", "membership": "join" }, "event_id": "$14490107326oKuYl:aimmac23.com", "origin_server_ts": 1449010732847, "sender": "@aimmac23:aimmac23.com", "state_key": "@aimmac23:aimmac23.com", "type": "m.room.member", "unsigned": { "age": 61657219831, "replaces_state": "$14490107035RvsTG:aimmac23.com" } }, { "age_ts": 1505164133388, "content": { "avatar_url": "mxc://riot.keithzg.ca/OeuwpemBfMzpwWAiSovBdonn", "displayname": "keithzg", "membership": "join" }, "event_id": "$150516413121ufelk:riot.keithzg.ca", "origin_server_ts": 1505164131460, "sender": "@keithzg:riot.keithzg.ca", "state_key": "@keithzg:riot.keithzg.ca", "type": "m.room.member", "unsigned": { "age": 18, "prev_content": { "membership": "leave" }, "prev_sender": "@keithzg:riot.keithzg.ca", "replaces_state": "$15049403110gwByf:riot.keithzg.ca" } }, { "content": { "avatar_url": "mxc://matrix.org/xGDyBdZZeCWnkQcSaWAtkITd", "displayname": "floogulinc", "membership": "join" }, "event_id": "$14544353348147LkGeq:matrix.org", "origin_server_ts": 1454435334238, "sender": "@floogulinc:matrix.org", "state_key": "@floogulinc:matrix.org", "type": "m.room.member", "unsigned": { "age": 56232618440, "replaces_state": "$14544350527623ebUmg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014748443798008owUCl:matrix.org", "membership": "leave", "origin_server_ts": 1501474844153, "sender": "@freenode_deceipher:matrix.org", "state_key": "@freenode_deceipher:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193108525, "replaces_state": "$149977428883661GfGnJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148967875469507LuFDA:matrix.org", "membership": "leave", "origin_server_ts": 1489678754430, "sender": "@elBextown:matrix.org", "state_key": "@elBextown:matrix.org", "type": "m.room.member", "unsigned": { "age": 20989198248, "replaces_state": "$148967868568567cIGFu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1500479785588SrvLj:i9technologies.com", "membership": "leave", "origin_server_ts": 1500479785753, "sender": "@michelk:i9technologies.com", "state_key": "@michelk:i9technologies.com", "type": "m.room.member", "unsigned": { "age": 10188166925, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@michelk:i9technologies.com", "replaces_state": "$1500411227379aUFbU:i9technologies.com" } }, { "content": { "membership": "leave" }, "event_id": "$15014748473798096Siesu:matrix.org", "membership": "leave", "origin_server_ts": 1501474847810, "sender": "@freenode_zpmorgan:matrix.org", "state_key": "@freenode_zpmorgan:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193104868, "replaces_state": "$150004592051200gCyWc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "equalunique", "membership": "join" }, "event_id": "$15065741172852288kIlZk:matrix.org", "membership": "join", "origin_server_ts": 1506574117771, "sender": "@equalunique:matrix.org", "state_key": "@equalunique:matrix.org", "type": "m.room.member", "unsigned": { "age": 4093834907 } }, { "content": { "avatar_url": null, "displayname": "Guest 195321", "kind": "guest", "membership": "join" }, "event_id": "$1491058170861558uXYEn:matrix.org", "membership": "join", "origin_server_ts": 1491058170993, "sender": "@195321:matrix.org", "state_key": "@195321:matrix.org", "type": "m.room.member", "unsigned": { "age": 19609781685 } }, { "content": { "membership": "leave" }, "event_id": "$149384494415wGUQn:idlechat.org", "membership": "leave", "origin_server_ts": 1493844944175, "sender": "@dag:idlechat.org", "state_key": "@dag:idlechat.org", "type": "m.room.member", "unsigned": { "age": 16823008503, "replaces_state": "$149384489814NnGox:idlechat.org" } }, { "content": { "avatar_url": "mxc://matrix.org/UVqqcXVQkeywHCzsvZnADeGR", "displayname": "Ekho", "membership": "join" }, "event_id": "$1493074885471143tLoko:matrix.org", "membership": "join", "origin_server_ts": 1493074885264, "sender": "@Ekho:matrix.org", "state_key": "@Ekho:matrix.org", "type": "m.room.member", "unsigned": { "age": 17593067414, "replaces_state": "$14923734681449897dEHUm:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1509403315743349vUyuk:matrix.org", "membership": "join", "origin_server_ts": 1509403315541, "sender": "@istand:matrix.org", "state_key": "@istand:matrix.org", "type": "m.room.member", "unsigned": { "age": 1264637137 } }, { "content": { "membership": "leave" }, "event_id": "$148363730133iamif:ubbink.org", "membership": "leave", "origin_server_ts": 1483637301913, "sender": "@stefan:ubbink.org", "state_key": "@stefan:ubbink.org", "type": "m.room.member", "unsigned": { "age": 27030650765, "replaces_state": "$148355929217anjJS:ubbink.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631482024103QopIr:matrix.org", "membership": "leave", "origin_server_ts": 1495663148120, "sender": "@freenode_abinader:matrix.org", "state_key": "@freenode_abinader:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004804558, "replaces_state": "$14752349921176174WbmhO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14291808224090oDNnP:matrix.org", "origin_server_ts": 1429180822877, "sender": "@viator:matrix.org", "state_key": "@viator:matrix.org", "type": "m.room.member", "unsigned": { "age": 81487129801, "replaces_state": "$14291807974089hxMme:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "TheOmega (IRC)", "membership": "join" }, "event_id": "$1498850873422770ZCcEV:matrix.org", "membership": "join", "origin_server_ts": 1498850873124, "sender": "@freenode_TheOmega:matrix.org", "state_key": "@freenode_TheOmega:matrix.org", "type": "m.room.member", "unsigned": { "age": 11817079554, "replaces_state": "$14985598283152730BOZZI:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15036051253212580bKWzU:matrix.org", "membership": "leave", "origin_server_ts": 1503605125615, "sender": "@Justgivemeaname:matrix.org", "state_key": "@Justgivemeaname:matrix.org", "type": "m.room.member", "unsigned": { "age": 7062827063, "replaces_state": "$15036028353175281hIhSE:matrix.org" } }, { "content": { "avatar_url": "mxc://magnap.dk/IECIiaFLQGVHVkYgDkEoexad", "displayname": "Magnap​", "membership": "join" }, "event_id": "$15039947494250lzZPh:magnap.dk", "membership": "join", "origin_server_ts": 1503994749666, "sender": "@magnap:magnap.dk", "state_key": "@magnap:magnap.dk", "type": "m.room.member", "unsigned": { "age": 6673203012, "replaces_state": "$15039936384170VmbYN:magnap.dk" } }, { "content": { "membership": "leave" }, "event_id": "$14651546134nfmDh:im.nostrodomo.tk", "membership": "leave", "origin_server_ts": 1465154613695, "sender": "@test:im.nostrodomo.tk", "state_key": "@test:im.nostrodomo.tk", "type": "m.room.member", "unsigned": { "age": 45513338983, "replaces_state": "$14651536531kNhjf:im.nostrodomo.tk" } }, { "content": { "avatar_url": "mxc://matrix.org/motBzjrcDXyumwWKCtSdhdrs#auto", "displayname": "prosody faith blink", "membership": "join" }, "event_id": "$14547645602049HMiwI:matrix.org", "origin_server_ts": 1454764560434, "sender": "@faith:matrix.org", "state_key": "@faith:matrix.org", "type": "m.room.member", "unsigned": { "age": 55903392244, "replaces_state": "$1454403911145PUxcL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "protprot123", "membership": "join" }, "event_id": "$1481824011802931WTnGK:matrix.org", "membership": "join", "origin_server_ts": 1481824011465, "sender": "@protprot123:matrix.org", "state_key": "@protprot123:matrix.org", "type": "m.room.member", "unsigned": { "age": 28843941213 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14965896643591884JamMd:matrix.org", "membership": "join", "origin_server_ts": 1496589664823, "sender": "@Ansarrahman:matrix.org", "state_key": "@Ansarrahman:matrix.org", "type": "m.room.member", "unsigned": { "age": 14078287855, "replaces_state": "$14965896353591588xXaNB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mAooXhkrYjlENmSZbgYpwPkx", "displayname": "stonewareslord", "membership": "join" }, "event_id": "$1508881306750372GXaTu:matrix.org", "membership": "join", "origin_server_ts": 1508881306365, "sender": "@stonewareslord:matrix.org", "state_key": "@stonewareslord:matrix.org", "type": "m.room.member", "unsigned": { "age": 1786646313 } }, { "content": { "avatar_url": null, "displayname": "sorch", "membership": "join" }, "event_id": "$149450681915xiNvB:ilp.moe", "origin_server_ts": 1494506819197, "sender": "@sorch:ilp.moe", "state_key": "@sorch:ilp.moe", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "membership": "leave" }, "event_id": "$1466338961518228FvdSX:matrix.org", "membership": "leave", "origin_server_ts": 1466338961655, "sender": "@vanvik:matrix.org", "state_key": "@vanvik:matrix.org", "type": "m.room.member", "unsigned": { "age": 44328991023, "replaces_state": "$1466237990400179FjWse:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1482079079523qhWxm:unix.se", "membership": "leave", "origin_server_ts": 1482079079437, "sender": "@anders:unix.se", "state_key": "@anders:unix.se", "type": "m.room.member", "unsigned": { "age": 28588873241, "replaces_state": "$14817411971JdAIo:unix.se" } }, { "content": { "avatar_url": "mxc://unixpimps.net/NmRjQYmEQduDEVdpRTaTtwiG", "displayname": "Martin8412", "membership": "join" }, "event_id": "$14901386743358pTtDl:unixpimps.net", "membership": "join", "origin_server_ts": 1490138674945, "sender": "@martin8412:unixpimps.net", "state_key": "@martin8412:unixpimps.net", "type": "m.room.member", "unsigned": { "age": 20529277733 } }, { "content": { "avatar_url": null, "displayname": "jelmer", "membership": "join" }, "event_id": "$1490831715523325hrjMe:matrix.org", "membership": "join", "origin_server_ts": 1490831715581, "sender": "@jelmer:matrix.org", "state_key": "@jelmer:matrix.org", "type": "m.room.member", "unsigned": { "age": 19836237097 } }, { "content": { "membership": "leave" }, "event_id": "$145951962318bPQUQ:jki.re", "origin_server_ts": 1459519623321, "sender": "@erikj:jki.re", "state_key": "@Half-Shot:souppenguin.com", "type": "m.room.member", "unsigned": { "age": 51148329357, "replaces_state": "$1459091526365WvvMW:souppenguin.com" } }, { "content": { "avatar_url": "mxc://matrix.org/qzaNAnzhghheUNahmnJPpRsZ", "displayname": "SchnuffleMatrix", "membership": "join" }, "event_id": "$14887164971399811HAXlR:matrix.org", "membership": "join", "origin_server_ts": 1488716497175, "sender": "@schnuffle:matrix.org", "state_key": "@schnuffle:matrix.org", "type": "m.room.member", "unsigned": { "age": 21951455503, "replaces_state": "$14887153321394806NiCgC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1469842842657705iirmH:matrix.org", "membership": "leave", "origin_server_ts": 1469842842004, "sender": "@sallp:matrix.org", "state_key": "@sallp:matrix.org", "type": "m.room.member", "unsigned": { "age": 40825110674, "replaces_state": "$1469832024641256PbTjM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1508469878939531AlqpA:matrix.org", "membership": "leave", "origin_server_ts": 1508469878141, "sender": "@freenode_mzKas:matrix.org", "state_key": "@freenode_mzKas:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198074537, "replaces_state": "$150763309792348VaIHZ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "y.wang", "membership": "join" }, "event_id": "$14862722941125996LGTRL:matrix.org", "membership": "join", "origin_server_ts": 1486272294141, "sender": "@y.wang:matrix.org", "state_key": "@y.wang:matrix.org", "type": "m.room.member", "unsigned": { "age": 24395658537, "replaces_state": "$14862722861125964SPrmh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1465144217187785UQZgg:matrix.org", "membership": "leave", "origin_server_ts": 1465144217672, "sender": "@georgyo:matrix.org", "state_key": "@georgyo:matrix.org", "type": "m.room.member", "unsigned": { "age": 45523735006, "replaces_state": "$146480651611902RFtRb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148314038310HEymx:themunsters.org", "membership": "leave", "origin_server_ts": 1483140383546, "sender": "@dwmunster:themunsters.org", "state_key": "@dwmunster:themunsters.org", "type": "m.room.member", "unsigned": { "age": 27527569132, "prev_content": { "avatar_url": null, "displayname": "dwmunster", "membership": "join" }, "prev_sender": "@dwmunster:themunsters.org", "replaces_state": "$14831403299AtRQL:themunsters.org" } }, { "content": { "membership": "leave" }, "event_id": "$15075752151275972uXXQs:matrix.org", "membership": "leave", "origin_server_ts": 1507575215376, "sender": "@ylecollen:matrix.org", "state_key": "@ylecollen:matrix.org", "type": "m.room.member", "unsigned": { "age": 3092737302, "replaces_state": "$1449505999178070ZvDDN:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "K0HAX-old", "membership": "join" }, "event_id": "$15086127552882761gVFDf:matrix.org", "membership": "join", "origin_server_ts": 1508612755712, "sender": "@K0HAX:matrix.org", "state_key": "@K0HAX:matrix.org", "type": "m.room.member", "unsigned": { "age": 2055196966, "replaces_state": "$15086127042882062xYnNn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "bassem", "membership": "join" }, "event_id": "$15095636802886925eOwQS:matrix.org", "membership": "join", "origin_server_ts": 1509563680705, "sender": "@b707:matrix.org", "state_key": "@b707:matrix.org", "type": "m.room.member", "unsigned": { "age": 1104271973 } }, { "content": { "membership": "leave" }, "event_id": "$1499503036723284SAOrF:matrix.org", "membership": "leave", "origin_server_ts": 1499503036357, "sender": "@Raivice:matrix.org", "state_key": "@Raivice:matrix.org", "type": "m.room.member", "unsigned": { "age": 11164916321, "replaces_state": "$149943642528276uzmNj:matrix.org" } }, { "content": { "avatar_url": "mxc://strog.org/TJamgEYLAFRBGQafWQBZBBur", "displayname": "Strog", "membership": "join" }, "event_id": "$150885376862jSsgt:strog.org", "origin_server_ts": 1508853768195, "sender": "@strog:strog.org", "state_key": "@strog:strog.org", "type": "m.room.member", "unsigned": { "age": 14 } }, { "content": { "avatar_url": "mxc://matrix.org/FdyWqUfpJpPvgTzuSuoNvUSE#auto", "displayname": null, "membership": "join" }, "event_id": "$144204432835348XLYLp:matrix.org", "origin_server_ts": 1442044328434, "sender": "@Gorkinus:matrix.org", "state_key": "@Gorkinus:matrix.org", "type": "m.room.member", "unsigned": { "age": 68623624244 } }, { "content": { "avatar_url": null, "displayname": "anthm (IRC)", "membership": "join" }, "event_id": "$1510603317550549WkqUh:matrix.org", "membership": "join", "origin_server_ts": 1510603317199, "sender": "@freenode_anthm:matrix.org", "state_key": "@freenode_anthm:matrix.org", "type": "m.room.member", "unsigned": { "age": 64635479, "replaces_state": "$15024946291025080IJSiD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148830702994527HkIhx:matrix.org", "membership": "leave", "origin_server_ts": 1488307029207, "sender": "@jake9wi2:matrix.org", "state_key": "@jake9wi2:matrix.org", "type": "m.room.member", "unsigned": { "age": 22360923471, "replaces_state": "$14825681121749895daRCA:matrix.org" } }, { "content": { "alias": "#matrix-dev:matrix.org" }, "event_id": "$1456918494308441NrlnH:matrix.org", "origin_server_ts": 1456918494702, "sender": "@dave:matrix.org", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 53749457976 } }, { "content": { "membership": "leave" }, "event_id": "$14956631462024075XwqPi:matrix.org", "membership": "leave", "origin_server_ts": 1495663146633, "sender": "@freenode_M-Mjark1:matrix.org", "state_key": "@freenode_M-Mjark1:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004806045, "replaces_state": "$1430904008105VQTVC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014748433797998TKIcu:matrix.org", "membership": "leave", "origin_server_ts": 1501474843871, "sender": "@freenode_l4mRh4X0r_:matrix.org", "state_key": "@freenode_l4mRh4X0r_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193108807, "replaces_state": "$15005531303722063MicSj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zyPXjzlsoysdiVtcsYKSCjOc#auto", "displayname": "Gustav Fridell", "membership": "join" }, "event_id": "$14295960472576OzqTY:matrix.org", "membership": "join", "origin_server_ts": 1429596047650, "sender": "@Gustav:matrix.org", "state_key": "@Gustav:matrix.org", "type": "m.room.member", "unsigned": { "age": 81071905028, "replaces_state": "$14295406552144dMDwm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1502914303232phAsC:matrix.cavebeat.org", "membership": "leave", "origin_server_ts": 1502914303242, "sender": "@cave:matrix.cavebeat.org", "state_key": "@cave:matrix.cavebeat.org", "type": "m.room.member", "unsigned": { "age": 7753649436, "prev_content": { "avatar_url": "mxc://matrix.cavebeat.org/WuKzABsZQrSbIlulpOxiqhcg", "displayname": "cave", "membership": "join" }, "prev_sender": "@cave:matrix.cavebeat.org", "replaces_state": "$1502289843352zQxhH:matrix.cavebeat.org" } }, { "content": { "avatar_url": null, "displayname": "nag1", "membership": "join" }, "event_id": "$1499412445369602IBJIU:matrix.org", "membership": "join", "origin_server_ts": 1499412445770, "sender": "@nag_loggin1:matrix.org", "state_key": "@nag_loggin1:matrix.org", "type": "m.room.member", "unsigned": { "age": 11255506908, "replaces_state": "$1497876872824240PKslw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Jim Biggs", "membership": "join" }, "event_id": "$1416421055396TJLpQ:matrix.org", "membership": "join", "origin_server_ts": 1415843873681, "sender": "@onsombal:matrix.org", "state_key": "@onsombal:matrix.org", "stream_ordering": 27849, "type": "m.room.member", "unsigned": { "age": 94246897282 } }, { "content": { "membership": "leave" }, "event_id": "$14983207112236RzTBu:matrix.eita.org.br", "membership": "leave", "origin_server_ts": 1498320711457, "sender": "@dtygel:matrix.eita.org.br", "state_key": "@dtygel:matrix.eita.org.br", "type": "m.room.member", "unsigned": { "age": 12347241221, "prev_content": { "avatar_url": "mxc://matrix.eita.org.br/IWZTiVSjlzlKmLBrPwYQUWvs", "displayname": "daniel", "membership": "join" }, "prev_sender": "@dtygel:matrix.eita.org.br", "replaces_state": "$1497276345949GtElR:matrix.eita.org.br" } }, { "content": { "avatar_url": "mxc://dries.info/XbsxfpMAsRspdPPyOivoHjZl", "displayname": "Gerco", "membership": "join" }, "event_id": "$150896633197rBppE:dries.info", "membership": "join", "origin_server_ts": 1508966331024, "sender": "@gerco:dries.info", "state_key": "@gerco:dries.info", "type": "m.room.member", "unsigned": { "age": 1701621654, "prev_content": { "avatar_url": "mxc://dries.info/MwTchfktpdiQBpOamTEddpVZ", "displayname": "Gerco", "membership": "join" }, "prev_sender": "@gerco:dries.info", "replaces_state": "$1503513234356HBkcZ:dries.info" } }, { "content": { "membership": "leave" }, "event_id": "$14679038074OtJxB:test-matrix.lavadip.com", "membership": "leave", "origin_server_ts": 1467903807722, "sender": "@test2:test-matrix.lavadip.com", "state_key": "@test2:test-matrix.lavadip.com", "type": "m.room.member", "unsigned": { "age": 42764144956, "replaces_state": "$14678835383ZlOxN:test-matrix.lavadip.com" } }, { "content": { "membership": "leave" }, "event_id": "$14946629052uqANS:chsh.moe", "membership": "leave", "origin_server_ts": 1494662905083, "sender": "@szclsya:chsh.moe", "state_key": "@szclsya:chsh.moe", "type": "m.room.member", "unsigned": { "age": 16005047595, "replaces_state": "$14946628571hNzrC:chsh.moe" } }, { "content": { "avatar_url": null, "displayname": "zak", "membership": "join" }, "event_id": "$14844198851317169Wxwud:matrix.org", "membership": "join", "origin_server_ts": 1484419885104, "sender": "@zak:matrix.org", "state_key": "@zak:matrix.org", "type": "m.room.member", "unsigned": { "age": 26248067574 } }, { "content": { "membership": "leave" }, "event_id": "$14939180793iwzZF:voos.info", "membership": "leave", "origin_server_ts": 1493918079305, "sender": "@wolfgang:voos.info", "state_key": "@wolfgang:voos.info", "type": "m.room.member", "unsigned": { "age": 96815, "prev_content": { "avatar_url": null, "displayname": "SumpflingWV", "membership": "join" }, "prev_sender": "@wolfgang:voos.info", "replaces_state": "$14939174731EHiUq:voos.info" } }, { "content": { "avatar_url": "mxc://polonkai.eu/xvbMqBeMBBsIRDSgRznnwCfC", "displayname": "Gergely Polonkai", "membership": "join" }, "event_id": "$145371110424fdRrL:polonkai.eu", "origin_server_ts": 1453711104798, "sender": "@gergely:polonkai.eu", "state_key": "@gergely:polonkai.eu", "type": "m.room.member", "unsigned": { "age": 56956847880, "replaces_state": "$145310974810VsmUF:polonkai.eu" } }, { "content": { "membership": "leave" }, "event_id": "$147846783811HSguV:zackn.de", "membership": "leave", "origin_server_ts": 1478467838769, "sender": "@Matthias:zackn.de", "state_key": "@Matthias:zackn.de", "type": "m.room.member", "unsigned": { "age": 32200113909, "replaces_state": "$147846764210iiNbG:zackn.de" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612505032WkmFm:matrix.org", "origin_server_ts": 1429261250836, "sender": "@kegan:matrix.org", "state_key": "@irc_Joachim:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406701842, "replaces_state": "$14212550413024Czerf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Eldoon", "kind": "guest", "membership": "join" }, "event_id": "$149571131190869fwlCj:matrix.org", "membership": "join", "origin_server_ts": 1495711311405, "sender": "@243635:matrix.org", "state_key": "@243635:matrix.org", "type": "m.room.member", "unsigned": { "age": 14956641273 } }, { "content": { "avatar_url": "mxc://matrix.org/tzZqOsYuBFqPPzfXvtpGuwBj", "displayname": "A. Pierce", "membership": "join" }, "event_id": "$14845882822110608ISNfM:matrix.org", "membership": "join", "origin_server_ts": 1484588282001, "sender": "@a.pierce:matrix.org", "state_key": "@a.pierce:matrix.org", "type": "m.room.member", "unsigned": { "age": 26079670677, "replaces_state": "$14845853332090276pqzpU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/NWxbETbFJIIhmGmNOqpustOg#auto", "displayname": "Fredrik Wallgren", "membership": "join" }, "event_id": "$14251010664850NpUvE:matrix.org", "membership": "join", "origin_server_ts": 1425101066711, "sender": "@walle:matrix.org", "state_key": "@walle:matrix.org", "type": "m.room.member", "unsigned": { "age": 85566885967 } }, { "content": { "avatar_url": null, "displayname": "wN (IRC)", "membership": "join" }, "event_id": "$14846723752604810YrvSk:matrix.org", "membership": "join", "origin_server_ts": 1484672375346, "sender": "@freenode_wN:matrix.org", "state_key": "@freenode_wN:matrix.org", "type": "m.room.member", "unsigned": { "age": 25995577332 } }, { "content": { "avatar_url": "mxc://matrix.org/ArAsTqVQyWiWRDooaLuFhppk", "displayname": "srd00m", "membership": "join" }, "event_id": "$1448485645255678aTNwL:matrix.org", "origin_server_ts": 1448485645372, "sender": "@srd00m:matrix.org", "state_key": "@srd00m:matrix.org", "type": "m.room.member", "unsigned": { "age": 62182307306, "replaces_state": "$1448485614255636DzlLd:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OTcgkVYqcxunoXdJsjuIaQWp", "displayname": "f0x52", "membership": "join" }, "event_id": "$1490388918266743KZKPQ:matrix.org", "membership": "join", "origin_server_ts": 1490388918317, "sender": "@f0x52:matrix.org", "state_key": "@f0x52:matrix.org", "type": "m.room.member", "unsigned": { "age": 20279034361 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14964479512513709GSJCO:matrix.org", "membership": "join", "origin_server_ts": 1496447951690, "sender": "@ipnoyl:matrix.org", "state_key": "@ipnoyl:matrix.org", "type": "m.room.member", "unsigned": { "age": 14220000988 } }, { "content": { "membership": "leave" }, "event_id": "$15028617572818094BiyvR:matrix.org", "membership": "leave", "origin_server_ts": 1502861757322, "sender": "@freenode_KenOokamiHoro:matrix.org", "state_key": "@freenode_KenOokamiHoro:matrix.org", "type": "m.room.member", "unsigned": { "age": 7806195356, "replaces_state": "$15027778301772013CyKMs:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mdKAEUdyDMZYzBcUZdeHlZHy", "displayname": "cheffff", "membership": "join" }, "event_id": "$14964349652366871pzFiT:matrix.org", "membership": "join", "origin_server_ts": 1496434965682, "sender": "@fuckdiscorduptheass:matrix.org", "state_key": "@fuckdiscorduptheass:matrix.org", "type": "m.room.member", "unsigned": { "age": 14232986996, "replaces_state": "$1494052063646318UdWIZ:matrix.org" } }, { "content": { "avatar_url": "mxc://atauno.com/arTKTcpxTBsoESxJARrukaSE", "displayname": "am2on", "membership": "join" }, "event_id": "$1485390860231bDMKt:atauno.com", "membership": "join", "origin_server_ts": 1485390860642, "sender": "@am2on:atauno.com", "state_key": "@am2on:atauno.com", "type": "m.room.member", "unsigned": { "age": 60012, "prev_content": { "avatar_url": "mxc://atauno.com/arTKTcpxTBsoESxJARrukaSE", "displayname": "Halfy", "membership": "join" }, "prev_sender": "@am2on:atauno.com", "replaces_state": "$148539077297tfkPx:atauno.com" } }, { "content": { "membership": "leave" }, "event_id": "$1498585814132083qMLZD:matrix.org", "membership": "leave", "origin_server_ts": 1498585814496, "sender": "@DzzzzzzR:matrix.org", "state_key": "@DzzzzzzR:matrix.org", "type": "m.room.member", "unsigned": { "age": 12082138182, "replaces_state": "$14984195591709001hvSAG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "vikeri", "kind": "guest", "membership": "join" }, "event_id": "$1468308095111799DuxVJ:matrix.org", "membership": "join", "origin_server_ts": 1468308095893, "sender": "@23979:matrix.org", "state_key": "@23979:matrix.org", "type": "m.room.member", "unsigned": { "age": 42359856785 } }, { "content": { "membership": "leave" }, "event_id": "$15099834871244HaHPF:matrix.veritasgenetics.com", "membership": "leave", "origin_server_ts": 1509983487803, "sender": "@Delic:matrix.veritasgenetics.com", "state_key": "@Delic:matrix.veritasgenetics.com", "type": "m.room.member", "unsigned": { "age": 684464875, "prev_content": { "avatar_url": null, "displayname": "Delic Sulejman", "membership": "join" }, "prev_sender": "@Delic:matrix.veritasgenetics.com", "replaces_state": "$1509539585578ZcDPR:matrix.veritasgenetics.com" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14688988061232921kbxob:matrix.org", "membership": "join", "origin_server_ts": 1468898806016, "sender": "@hartmanroberte:matrix.org", "state_key": "@hartmanroberte:matrix.org", "type": "m.room.member", "unsigned": { "age": 41769146662 } }, { "content": { "membership": "leave" }, "event_id": "$14549509721570TyrTG:matrix.org", "origin_server_ts": 1454950972514, "sender": "@krisa:matrix.org", "state_key": "@krisa:matrix.org", "type": "m.room.member", "unsigned": { "age": 55716980164, "replaces_state": "$145494138359205NZtnb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14979920121109KxAuo:matrix.forster.cc", "membership": "leave", "origin_server_ts": 1497992012038, "sender": "@fossie:matrix.forster.cc", "state_key": "@fossie:matrix.forster.cc", "type": "m.room.member", "unsigned": { "age": 12675940640, "replaces_state": "$14979915091097bpLSP:matrix.forster.cc" } }, { "content": { "avatar_url": null, "displayname": "Magnap-as-guest", "kind": "guest", "membership": "join" }, "event_id": "$14887263301445315kERoN:matrix.org", "membership": "join", "origin_server_ts": 1488726330540, "sender": "@168095:matrix.org", "state_key": "@168095:matrix.org", "type": "m.room.member", "unsigned": { "age": 21941622138 } }, { "content": { "membership": "leave" }, "event_id": "$14966402314199608JmGmg:matrix.org", "membership": "leave", "origin_server_ts": 1496640231707, "sender": "@brainbreaker:matrix.org", "state_key": "@brainbreaker:matrix.org", "type": "m.room.member", "unsigned": { "age": 14027720971, "replaces_state": "$1481721514308702nUzgE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/izrAwSPCQqkFrcCaPAjAogqc", "displayname": "Rick", "membership": "join" }, "event_id": "$14876958422047022qLfTD:matrix.org", "membership": "join", "origin_server_ts": 1487695842888, "sender": "@rxl881:matrix.org", "state_key": "@rxl881:matrix.org", "type": "m.room.member", "unsigned": { "age": 22972109790, "replaces_state": "$14863846641647738qiTSf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "yannik", "membership": "join" }, "event_id": "$148382761011IsaDE:yannikenss.de", "origin_server_ts": 1483827608778, "sender": "@yannik:yannikenss.de", "state_key": "@yannik:yannikenss.de", "type": "m.room.member", "unsigned": { "age": 12, "replaces_state": "$14838250278ZjPdk:yannikenss.de" } }, { "content": { "avatar_url": null, "displayname": "hendrik", "membership": "join" }, "event_id": "$14833055799wzNGL:xd0.de", "membership": "join", "origin_server_ts": 1483305579746, "sender": "@hendrik:xd0.de", "state_key": "@hendrik:xd0.de", "type": "m.room.member", "unsigned": { "age": 27362372932, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@hendrik:xd0.de", "replaces_state": "$14833053227DqDVn:xd0.de" } }, { "content": { "membership": "leave" }, "event_id": "$1489626021341590nxpah:matrix.org", "membership": "leave", "origin_server_ts": 1489626021780, "sender": "@hristo:matrix.org", "state_key": "@hristo:matrix.org", "type": "m.room.member", "unsigned": { "age": 21041930898, "replaces_state": "$1489515786269166kMxmt:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mikjYEIVtlGtTZttlKLueSpE", "displayname": "ImpYoo", "membership": "join" }, "event_id": "$15106534421575085AcTQW:matrix.org", "membership": "join", "origin_server_ts": 1510653442575, "sender": "@ImpYoo:matrix.org", "state_key": "@ImpYoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 14510103, "prev_content": { "membership": "leave" }, "prev_sender": "@ImpYoo:matrix.org", "replaces_state": "$15106534301574893AUvjU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "wim (IRC)", "membership": "join" }, "event_id": "$15082610552426242lOcqS:matrix.org", "membership": "join", "origin_server_ts": 1508261055987, "sender": "@freenode_wim:matrix.org", "state_key": "@freenode_wim:matrix.org", "type": "m.room.member", "unsigned": { "age": 2406896691, "replaces_state": "$15082609322424041SkHWC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "nopf (IRC)", "membership": "join" }, "event_id": "$15037524881055500WYzqZ:matrix.org", "membership": "join", "origin_server_ts": 1503752488101, "sender": "@freenode_nopf:matrix.org", "state_key": "@freenode_nopf:matrix.org", "type": "m.room.member", "unsigned": { "age": 6915464577, "replaces_state": "$15029623641168938DpZLF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pzYZeNScZVpIaDWSUrPjjPuh", "displayname": "Radium", "membership": "join" }, "event_id": "$14755374312003717WJonH:matrix.org", "membership": "join", "origin_server_ts": 1475537431406, "sender": "@ztl8702:matrix.org", "state_key": "@ztl8702:matrix.org", "type": "m.room.member", "unsigned": { "age": 35130521272 } }, { "content": { "membership": "leave" }, "event_id": "$14956631962025147sWUaR:matrix.org", "membership": "leave", "origin_server_ts": 1495663196749, "sender": "@freenode_M-neb18:matrix.org", "state_key": "@freenode_M-neb18:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004755929, "replaces_state": "$14301244445340cgtkx:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tuxitagnu", "membership": "join" }, "event_id": "$15099729313759314GYrvZ:matrix.org", "membership": "join", "origin_server_ts": 1509972931185, "sender": "@tuxitagnu:matrix.org", "state_key": "@tuxitagnu:matrix.org", "type": "m.room.member", "unsigned": { "age": 695021493 } }, { "content": { "avatar_url": "mxc://chat.incitotrading.com/WKUFskFKuJlWUGXNcAPKUVzM", "displayname": "ephro", "membership": "join" }, "event_id": "$1505601810714fhZTv:chat.incitotrading.com", "origin_server_ts": 1505601810816, "sender": "@ephro:chat.incitotrading.com", "state_key": "@ephro:chat.incitotrading.com", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "membership": "leave" }, "event_id": "$15010054658KKFld:seite3.net", "membership": "leave", "origin_server_ts": 1501005465430, "sender": "@jan:seite3.net", "state_key": "@jan:seite3.net", "type": "m.room.member", "unsigned": { "age": 9662487248, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@jan:seite3.net", "replaces_state": "$15010035811KbaFu:seite3.net" } }, { "content": { "avatar_url": "mxc://matrix.org/qnGtjcKvJKHHeTnGzPdDuPEO", "displayname": "illy", "membership": "join" }, "event_id": "$14966166043906599Zhvjd:matrix.org", "membership": "join", "origin_server_ts": 1496616604376, "sender": "@illyohs:matrix.org", "state_key": "@illyohs:matrix.org", "type": "m.room.member", "unsigned": { "age": 14051348302, "replaces_state": "$14965315203185562UMUcb:matrix.org" } }, { "content": { "avatar_url": "mxc://onedefence.com/xpfuHodyNbCQVxQrmAngDgdd", "displayname": "Dylanger", "membership": "join" }, "event_id": "$148650798473pKIHo:onedefence.com", "membership": "join", "origin_server_ts": 1486507984317, "sender": "@dylanger:onedefence.com", "state_key": "@dylanger:onedefence.com", "type": "m.room.member", "unsigned": { "age": 24159968361, "prev_content": { "avatar_url": "mxc://onedefence.com/goXOAbLAtIGSckthdtAHAeuU", "displayname": "Dylanger", "membership": "join" }, "prev_sender": "@dylanger:onedefence.com", "replaces_state": "$1481175737131Uyxbb:onedefence.com" } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QEp1bGllbjptYXRyaXgub3JnXtOPNVaYtsVrLTzRjFBqTdpg.aW1hZ2UvanBlZw==.jpeg", "displayname": "Julien", "membership": "join" }, "event_id": "$14300822734920wTOAo:matrix.org", "membership": "join", "origin_server_ts": 1430082273754, "sender": "@Julien:matrix.org", "state_key": "@Julien:matrix.org", "type": "m.room.member", "unsigned": { "age": 80585678924, "replaces_state": "$14299956204680HRtPl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15051805722846817GLANv:matrix.org", "membership": "leave", "origin_server_ts": 1505180572918, "sender": "@freenode_TwistedParticle:matrix.org", "state_key": "@freenode_TwistedParticle:matrix.org", "type": "m.room.member", "unsigned": { "age": 5487379760, "replaces_state": "$15051586472551727DSyiL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149348267034bsock:matrix.ensign.cloud", "membership": "leave", "origin_server_ts": 1493482670140, "sender": "@duo.oratar:matrix.ensign.cloud", "state_key": "@duo.oratar:matrix.ensign.cloud", "type": "m.room.member", "unsigned": { "age": 17185282538, "prev_content": { "avatar_url": "mxc://matrix.ensign.cloud/tkdZoBrCWyZyMkljdwLwTGyP", "displayname": "Duo Oratar", "membership": "join" }, "prev_sender": "@duo.oratar:matrix.ensign.cloud", "replaces_state": "$14934808722ACNvD:matrix.ensign.cloud" } }, { "content": { "avatar_url": null, "displayname": "rykoZ", "membership": "join" }, "event_id": "$15010644994782548zfLTE:matrix.org", "membership": "join", "origin_server_ts": 1501064499111, "sender": "@rykoZ:matrix.org", "state_key": "@rykoZ:matrix.org", "type": "m.room.member", "unsigned": { "age": 9603453567 } }, { "content": { "avatar_url": "mxc://matrix.org/zpRdHXXgNWMYYUMZSocMALaJ", "displayname": null, "membership": "join" }, "event_id": "$1457557263209541xtUGR:matrix.org", "membership": "join", "origin_server_ts": 1457557263504, "sender": "@prempal:matrix.org", "state_key": "@prempal:matrix.org", "type": "m.room.member", "unsigned": { "age": 53110689174 } }, { "content": { "avatar_url": "mxc://matrix.org/ubIGzJfsfPlRsZFzUayVYnIm", "displayname": "bb010g", "membership": "join" }, "event_id": "$14672200512044188QMxdH:matrix.org", "membership": "join", "origin_server_ts": 1467220051986, "sender": "@bb010g:matrix.org", "state_key": "@bb010g:matrix.org", "type": "m.room.member", "unsigned": { "age": 43447900692, "replaces_state": "$146169388414640uWjZn:matrix.org" } }, { "content": { "membership": "ban", "reason": "spamming" }, "event_id": "$1491918566174114eFSWq:matrix.org", "membership": "ban", "origin_server_ts": 1491918566979, "sender": "@matthew:matrix.org", "state_key": "@GuyFawkes:matrix.org", "type": "m.room.member", "unsigned": { "age": 18749385699, "replaces_state": "$1491918511173517vQjYo:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "HJcole", "membership": "join" }, "event_id": "$15032325454133789FAYik:matrix.org", "membership": "join", "origin_server_ts": 1503232545424, "sender": "@HJcole:matrix.org", "state_key": "@HJcole:matrix.org", "type": "m.room.member", "unsigned": { "age": 7435407254 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150429989068406KdekW:matrix.org", "membership": "join", "origin_server_ts": 1504299890913, "sender": "@naviknair7:matrix.org", "state_key": "@naviknair7:matrix.org", "type": "m.room.member", "unsigned": { "age": 6368061765 } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$1489430860265763oOpGN:matrix.org", "membership": "leave", "origin_server_ts": 1489430860085, "sender": "@176979:matrix.org", "state_key": "@176979:matrix.org", "type": "m.room.member", "unsigned": { "age": 21237092593, "replaces_state": "$1489429537252576hrUvh:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$144786044167580dmpZW:matrix.org", "origin_server_ts": 1447860441939, "sender": "@azhwkd:shvl.io", "state_key": "@azhwkd:shvl.io", "type": "m.room.member", "unsigned": {} }, { "content": { "membership": "leave" }, "event_id": "$15099448223198868zyVqY:matrix.org", "membership": "leave", "origin_server_ts": 1509944822209, "sender": "@freenode_amir_:matrix.org", "state_key": "@freenode_amir_:matrix.org", "type": "m.room.member", "unsigned": { "age": 723130469, "replaces_state": "$15089491961653461UJSzg:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ARrteBXgCICZVkZJeRfdZNnM", "displayname": "patrick", "membership": "join" }, "event_id": "$1487187377243529HQPdZ:matrix.org", "membership": "join", "origin_server_ts": 1487187377146, "sender": "@neurochemical:matrix.org", "state_key": "@neurochemical:matrix.org", "type": "m.room.member", "unsigned": { "age": 23480575532, "replaces_state": "$1475851428108QnpOB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/SoeQckqqWFAhCFeAGWnQRyYK", "displayname": "Diamond Dogs", "membership": "join" }, "event_id": "$15074001121171155mHoWk:matrix.org", "membership": "join", "origin_server_ts": 1507400112744, "sender": "@doatta:matrix.org", "state_key": "@doatta:matrix.org", "type": "m.room.member", "unsigned": { "age": 3267839934 } }, { "content": { "avatar_url": "mxc://matrix.org/rzUyoffsRPMTUYHEoNEWzeUg#auto", "displayname": "atok", "membership": "join" }, "event_id": "$144766665373162LDWka:matrix.org", "membership": "join", "origin_server_ts": 1447666653470, "sender": "@atok:matrix.org", "state_key": "@atok:matrix.org", "type": "m.room.member", "unsigned": { "age": 63001299208 } }, { "content": { "avatar_url": "mxc://matrix.org/gttxTkunPXVWigOcFjjUhQgX#auto", "displayname": "Not DJSundog", "membership": "join" }, "event_id": "$1425998626687THBxE:matrix.org", "membership": "join", "origin_server_ts": 1425998626097, "sender": "@NotDJSundog:matrix.org", "state_key": "@NotDJSundog:matrix.org", "type": "m.room.member", "unsigned": { "age": 84669326581 } }, { "content": { "avatar_url": "mxc://matrix.org/CPpRQzeugfJfLWSGIwWFLOtk", "displayname": "Fist Of Satan", "membership": "join" }, "event_id": "$1489683966124415cCTuL:matrix.org", "membership": "join", "origin_server_ts": 1489683966873, "sender": "@satan:matrix.org", "state_key": "@satan:matrix.org", "type": "m.room.member", "unsigned": { "age": 20983985805 } }, { "content": { "membership": "leave" }, "event_id": "$1498063648160309PHVxe:matrix.org", "membership": "leave", "origin_server_ts": 1498063648471, "sender": "@Eliza:matrix.org", "state_key": "@Eliza:matrix.org", "type": "m.room.member", "unsigned": { "age": 12604304207, "replaces_state": "$1473878171290835xuzVy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437523416831rPWJf:matrix.org", "membership": "leave", "origin_server_ts": 1499143752230, "sender": "@freenode_Aeyris:matrix.org", "state_key": "@freenode_Aeyris:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524200448, "replaces_state": "$14979269611410371XNmEY:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1502951875954336VXXOH:matrix.org", "membership": "leave", "origin_server_ts": 1502951875747, "sender": "@freenode_Mole1:matrix.org", "state_key": "@freenode_Mole1:matrix.org", "type": "m.room.member", "unsigned": { "age": 7716076931, "replaces_state": "$1502951863954147IkxUN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15002061721553375tEpZs:matrix.org", "membership": "leave", "origin_server_ts": 1500206172749, "sender": "@penguin42:matrix.org", "state_key": "@penguin42:matrix.org", "type": "m.room.member", "unsigned": { "age": 10461779929, "replaces_state": "$1483106051397296sbfhT:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15011796761401iaBuW:matrix.avsystem.com", "membership": "leave", "origin_server_ts": 1501179676626, "sender": "@vovcia:matrix.avsystem.com", "state_key": "@vovcia:matrix.avsystem.com", "type": "m.room.member", "unsigned": { "age": 9488276052, "prev_content": { "avatar_url": null, "displayname": "Vlad", "membership": "join" }, "prev_sender": "@vovcia:matrix.avsystem.com", "replaces_state": "$1501077366364ENbrn:matrix.avsystem.com" } }, { "content": { "avatar_url": null, "displayname": "rociously", "kind": "guest", "membership": "join" }, "event_id": "$1497393830543508AGlzm:matrix.org", "membership": "join", "origin_server_ts": 1497393830061, "sender": "@262030:matrix.org", "state_key": "@262030:matrix.org", "type": "m.room.member", "unsigned": { "age": 13274122617 } }, { "content": { "membership": "leave" }, "event_id": "$1495114591137830euUUp:matrix.org", "membership": "leave", "origin_server_ts": 1495114591132, "sender": "@OOAK:matrix.org", "state_key": "@OOAK:matrix.org", "type": "m.room.member", "unsigned": { "age": 15553361546, "replaces_state": "$1495114547137434ByXIs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1497653340476436cEsOi:matrix.org", "membership": "leave", "origin_server_ts": 1497653340478, "sender": "@freenode_keroberos:matrix.org", "state_key": "@freenode_keroberos:matrix.org", "type": "m.room.member", "unsigned": { "age": 13014612200, "replaces_state": "$14958844621923701XWBWA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 239591", "kind": "guest", "membership": "join" }, "event_id": "$14953354071063186rIcKg:matrix.org", "membership": "join", "origin_server_ts": 1495335407921, "sender": "@239591:matrix.org", "state_key": "@239591:matrix.org", "type": "m.room.member", "unsigned": { "age": 15332544757 } }, { "content": { "membership": "invite" }, "event_id": "$1443176588138521PySMd:matrix.org", "origin_server_ts": 1443176588283, "sender": "@illicitonion:matrix.org", "state_key": "@slackbot:lovely.beer", "type": "m.room.member", "unsigned": { "age": 67491364395 } }, { "content": { "membership": "leave" }, "event_id": "$1449138884925AVUwq:jki.re", "origin_server_ts": 1449138884098, "sender": "@erikj:jki.re", "state_key": "@illicitonion:matrix.illicitonion.com", "type": "m.room.member", "unsigned": { "age": 61529068580, "replaces_state": "$143227254317zIkbF:matrix.illicitonion.com" } }, { "content": { "membership": "leave" }, "event_id": "$14842224214NILEc:reeb.io", "membership": "leave", "origin_server_ts": 1484222421438, "sender": "@pascal:reeb.io", "state_key": "@pascal:reeb.io", "type": "m.room.member", "unsigned": { "age": 26445531240, "replaces_state": "$14842185481MfCTI:reeb.io" } }, { "content": { "membership": "leave" }, "event_id": "$15021031530BdWqV:tools.f4.htw-berlin.de", "membership": "leave", "origin_server_ts": 1502103153359, "sender": "@maxbeier:tools.f4.htw-berlin.de", "state_key": "@maxbeier:tools.f4.htw-berlin.de", "type": "m.room.member", "unsigned": { "age": 87514031, "prev_content": { "avatar_url": null, "displayname": "max", "membership": "join" }, "prev_sender": "@maxbeier:tools.f4.htw-berlin.de", "replaces_state": "$1501522811728hTcDZ:tools.f4.htw-berlin.de" } }, { "content": { "membership": "leave" }, "event_id": "$14956631592024344KtTik:matrix.org", "membership": "leave", "origin_server_ts": 1495663159617, "sender": "@freenode_GPolonkai:matrix.org", "state_key": "@freenode_GPolonkai:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004793061, "replaces_state": "$14526971789401eofJv:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ElMago", "membership": "join" }, "event_id": "$15036283803hotBZ:boli.rocks", "origin_server_ts": 1503628380237, "sender": "@elmago:boli.rocks", "state_key": "@elmago:boli.rocks", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": null, "displayname": "Soni (IRC)", "membership": "join" }, "event_id": "$1510220965492218lCHmW:matrix.org", "membership": "join", "origin_server_ts": 1510220965609, "sender": "@freenode_Soni:matrix.org", "state_key": "@freenode_Soni:matrix.org", "type": "m.room.member", "unsigned": { "age": 446987069 } }, { "content": { "avatar_url": "mxc://matrix.org/SnOwxToPvnVcHeXAwXmdUtJL", "displayname": "wmai", "membership": "join" }, "event_id": "$1510230692614635EzrCl:matrix.org", "membership": "join", "origin_server_ts": 1510230692187, "sender": "@wmai:matrix.org", "state_key": "@wmai:matrix.org", "type": "m.room.member", "unsigned": { "age": 437260491, "replaces_state": "$15042705213463969lrtcf:matrix.org" } }, { "age_ts": 1501861710723, "content": { "avatar_url": "mxc://inferiorlattice.com/zGzKhaajplrGNmKDwjoxkYxb", "displayname": "preston", "membership": "join" }, "event_id": "$15018618271PAnKU:inferiorlattice.com", "origin_server_ts": 1501861709710, "sender": "@preston:inferiorlattice.com", "state_key": "@preston:inferiorlattice.com", "type": "m.room.member", "unsigned": { "age": 14, "prev_content": { "membership": "leave" }, "prev_sender": "@preston:inferiorlattice.com", "replaces_state": "$14980743210NDoNz:inferiorlattice.com" } }, { "content": { "avatar_url": "mxc://matrix.org/LXKDARnNyJyJryURwTNslrVL", "displayname": "giom", "membership": "join" }, "event_id": "$144740308136349onNLC:matrix.org", "origin_server_ts": 1447403081076, "sender": "@giom:matrix.org", "state_key": "@giom:matrix.org", "type": "m.room.member", "unsigned": { "age": 63264871602, "replaces_state": "$14331673556cJNMi:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1451526576552077ZDobI:matrix.org", "origin_server_ts": 1451526576152, "sender": "@rocket:matrix.org", "state_key": "@rocket:matrix.org", "type": "m.room.member", "unsigned": { "age": 59141376526 } }, { "content": { "membership": "leave" }, "event_id": "$14895806002jBpGj:matrix.vivai.de", "membership": "leave", "origin_server_ts": 1489580600374, "sender": "@jspies:matrix.vivai.de", "state_key": "@jspies:matrix.vivai.de", "type": "m.room.member", "unsigned": { "age": 21087352304, "prev_content": { "avatar_url": "mxc://matrix.vivai.de/sAoYTHsqQVltWleheBbvONsA", "displayname": "Jürgen S", "membership": "join" }, "prev_sender": "@jspies:matrix.vivai.de", "replaces_state": "$14894128642CJYRg:matrix.vivai.de" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612705041NdGkR:matrix.org", "origin_server_ts": 1429261270874, "sender": "@kegan:matrix.org", "state_key": "@irc_silviof:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406681804, "replaces_state": "$14280557067790DIstg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "hetiu", "membership": "join" }, "event_id": "$15051302302129766xBiBP:matrix.org", "membership": "join", "origin_server_ts": 1505130230881, "sender": "@hetiu:matrix.org", "state_key": "@hetiu:matrix.org", "type": "m.room.member", "unsigned": { "age": 5537721797 } }, { "content": { "membership": "leave" }, "event_id": "$14956631732024637OlXIk:matrix.org", "membership": "leave", "origin_server_ts": 1495663173117, "sender": "@freenode_APNG:matrix.org", "state_key": "@freenode_APNG:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004779561, "replaces_state": "$1481555677655807GHBvt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "gwillen", "membership": "join" }, "event_id": "$14674038572402901Zsqzq:matrix.org", "membership": "join", "origin_server_ts": 1467403857387, "sender": "@gwillen:matrix.org", "state_key": "@gwillen:matrix.org", "type": "m.room.member", "unsigned": { "age": 43264095291 } }, { "content": { "avatar_url": "mxc://matrix.org/lWnnNebLVzCqvqmfeNaCEvgt", "displayname": "owilliams", "membership": "join" }, "event_id": "$146532113918908BvNxZ:matrix.org", "membership": "join", "origin_server_ts": 1465321139587, "sender": "@ywwg:matrix.org", "state_key": "@ywwg:matrix.org", "type": "m.room.member", "unsigned": { "age": 45346813091 } }, { "content": { "avatar_url": null, "displayname": "The keys", "membership": "join" }, "event_id": "$1460016179386122obQqa:matrix.org", "membership": "join", "origin_server_ts": 1460016179305, "sender": "@notworkingcode:matrix.org", "state_key": "@notworkingcode:matrix.org", "type": "m.room.member", "unsigned": { "age": 50651773373 } }, { "content": { "avatar_url": null, "displayname": "stanko", "membership": "join" }, "event_id": "$14847521823063528ndfGm:matrix.org", "membership": "join", "origin_server_ts": 1484752182168, "sender": "@stanko:matrix.org", "state_key": "@stanko:matrix.org", "type": "m.room.member", "unsigned": { "age": 25915770510 } }, { "content": { "avatar_url": "mxc://matrix.org/aZeJbYDZuLOYlEnEjlWTgseb", "displayname": "fgaz", "membership": "join" }, "event_id": "$14956437431683834gmNhn:matrix.org", "membership": "join", "origin_server_ts": 1495643743746, "sender": "@fgaz:matrix.org", "state_key": "@fgaz:matrix.org", "type": "m.room.member", "unsigned": { "age": 15024208932, "replaces_state": "$14956435801681447Nirwe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150053539154phSVS:sciuro.org", "membership": "leave", "origin_server_ts": 1500535391769, "sender": "@rogier:sciuro.org", "state_key": "@rogier:sciuro.org", "type": "m.room.member", "unsigned": { "age": 10132560909, "prev_content": { "avatar_url": "mxc://sciuro.org/zrvfzBmiGvvxRKiJcckKModc", "displayname": "Sciuro", "membership": "join" }, "prev_sender": "@rogier:sciuro.org", "replaces_state": "$148664414924KjafL:sciuro.org" } }, { "content": { "avatar_url": null, "displayname": "69585", "membership": "join" }, "event_id": "$14781616651579680Cnpiv:matrix.org", "membership": "join", "origin_server_ts": 1478161665037, "sender": "@69585:matrix.org", "state_key": "@69585:matrix.org", "type": "m.room.member", "unsigned": { "age": 32506287641 } }, { "content": { "membership": "leave" }, "event_id": "$14967628348futzZ:lexserv.xyz", "membership": "leave", "origin_server_ts": 1496762834964, "sender": "@alex:lexserv.xyz", "state_key": "@alex:lexserv.xyz", "type": "m.room.member", "unsigned": { "age": 13905117714, "prev_content": { "avatar_url": "mxc://lexserv.xyz/AymGiPRDEvobnGOztpYGQXtt", "displayname": "alex", "membership": "join" }, "prev_sender": "@alex:lexserv.xyz", "replaces_state": "$14967627377mmPyC:lexserv.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$1475903089640750lPKNQ:matrix.org", "membership": "leave", "origin_server_ts": 1475903089828, "sender": "@roder:matrix.org", "state_key": "@roder:matrix.org", "type": "m.room.member", "unsigned": { "age": 34764862850, "replaces_state": "$1475901273637215affxo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HNjUoqWlUTCOXAnghuNhPjyz#auto", "displayname": "Kurt Bonne", "membership": "join" }, "event_id": "$142548869312295ROKoL:matrix.org", "membership": "join", "origin_server_ts": 1425488693468, "sender": "@bonneke:matrix.org", "state_key": "@bonneke:matrix.org", "type": "m.room.member", "unsigned": { "age": 85179259210 } }, { "content": { "membership": "leave" }, "event_id": "$14956631942025086xVzUU:matrix.org", "membership": "leave", "origin_server_ts": 1495663194561, "sender": "@freenode_matrixdemo:matrix.org", "state_key": "@freenode_matrixdemo:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004758117, "replaces_state": "$145035157077586lSsbf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 119924", "kind": "guest", "membership": "join" }, "event_id": "$1483823643260851WfPkx:matrix.org", "membership": "join", "origin_server_ts": 1483823643539, "sender": "@119924:matrix.org", "state_key": "@119924:matrix.org", "type": "m.room.member", "unsigned": { "age": 26844309139 } }, { "content": { "avatar_url": "mxc://matrix.org/hERcVTHITOdSAZANtmZHTCeV#auto", "displayname": null, "membership": "join" }, "event_id": "$1441627762529575NsqVG:matrix.org", "origin_server_ts": 1441627762202, "sender": "@bhavya:matrix.org", "state_key": "@bhavya:matrix.org", "type": "m.room.member", "unsigned": { "age": 69040190476 } }, { "content": { "membership": "leave" }, "event_id": "$149950852730VbBzb:kvlt.ee", "membership": "leave", "origin_server_ts": 1499508527048, "sender": "@ander:kvlt.ee", "state_key": "@ander:kvlt.ee", "type": "m.room.member", "unsigned": { "age": 11159425630, "replaces_state": "$149865557237wXXmJ:kvlt.ee" } }, { "content": { "membership": "leave" }, "event_id": "$1469218039389751EKUWv:matrix.org", "membership": "leave", "origin_server_ts": 1469218039636, "sender": "@j:matrix.org", "state_key": "@j:matrix.org", "type": "m.room.member", "unsigned": { "age": 41449913042, "replaces_state": "$1465586917202609FZcmP:matrix.org" } }, { "content": { "avatar_url": "mxc://hackerbots.net/JUfeAPgZcSOpgraCVKPMpzwa", "displayname": "Victoria Fierce", "membership": "join" }, "event_id": "$148298512230IiUvy:hackerbots.net", "origin_server_ts": 1482985122806, "sender": "@tdfischer:hackerbots.net", "state_key": "@tdfischer:hackerbots.net", "type": "m.room.member", "unsigned": { "age": 66 } }, { "content": { "membership": "leave" }, "event_id": "$14971045021651274GyJWO:matrix.org", "membership": "leave", "origin_server_ts": 1497104502046, "sender": "@BeS:matrix.org", "state_key": "@BeS:matrix.org", "type": "m.room.member", "unsigned": { "age": 13563450632, "replaces_state": "$14970462891236382HeZZy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$14958373061605663TVvgA:matrix.org", "membership": "join", "origin_server_ts": 1495837306978, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 14830645700, "replaces_state": "$14845137001744955eibXv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ITinEUoFasCGaAMVddwmFPku#auto", "displayname": null, "membership": "join" }, "event_id": "$1436514068120646bcLHy:matrix.org", "origin_server_ts": 1436514068554, "sender": "@vinkas:matrix.org", "state_key": "@vinkas:matrix.org", "type": "m.room.member", "unsigned": { "age": 74153884124 } }, { "content": { "avatar_url": null, "displayname": "rociously", "membership": "join" }, "event_id": "$1497395899566771MUGhO:matrix.org", "membership": "join", "origin_server_ts": 1497395899998, "sender": "@rociously:matrix.org", "state_key": "@rociously:matrix.org", "type": "m.room.member", "unsigned": { "age": 13272052680 } }, { "content": { "membership": "leave" }, "event_id": "$14301304975607zLbBQ:matrix.org", "origin_server_ts": 1430130497830, "sender": "@winson:matrix.org", "state_key": "@winson:matrix.org", "type": "m.room.member", "unsigned": { "age": 80537454848, "replaces_state": "$14301303755606YYPjb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "zhangxu", "membership": "join" }, "event_id": "$14825123903055ZgRCd:matrix.molinkx.com", "membership": "join", "origin_server_ts": 1482512390322, "sender": "@zhangxu:matrix.molinkx.com", "state_key": "@zhangxu:matrix.molinkx.com", "type": "m.room.member", "unsigned": { "age": 28155562356, "replaces_state": "$14825123803054zkMPN:matrix.molinkx.com" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$1474469509265811EPfFL:matrix.org", "membership": "leave", "origin_server_ts": 1474469509422, "sender": "@47753:matrix.org", "state_key": "@47753:matrix.org", "type": "m.room.member", "unsigned": { "age": 36198443256, "replaces_state": "$1474469337265124CYXmR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14296282383387wfjKd:matrix.org", "origin_server_ts": 1429628238834, "sender": "@thmzlt:matrix.org", "state_key": "@thmzlt:matrix.org", "type": "m.room.member", "unsigned": { "age": 81039713844, "replaces_state": "$14292447074817IKTqr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/PPCkWwquAhNBtJCxGZFAKgNO", "displayname": "Sirius", "membership": "join" }, "event_id": "$1481803926695187UVTKz:matrix.org", "membership": "join", "origin_server_ts": 1481803926612, "sender": "@adrianhoe:matrix.org", "state_key": "@adrianhoe:matrix.org", "type": "m.room.member", "unsigned": { "age": 28864026066 } }, { "content": { "membership": "leave" }, "event_id": "$1446490216412581BFKhC:matrix.org", "origin_server_ts": 1446490216256, "sender": "@serenity:matrix.org", "state_key": "@serenity:matrix.org", "type": "m.room.member", "unsigned": { "age": 64177736422, "replaces_state": "$1446489109411371IYPQF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "harlos", "membership": "join" }, "event_id": "$14958436291663664dMTEo:matrix.org", "membership": "join", "origin_server_ts": 1495843629960, "sender": "@harlos:matrix.org", "state_key": "@harlos:matrix.org", "type": "m.room.member", "unsigned": { "age": 14824322718 } }, { "content": { "avatar_url": null, "displayname": "Guest 130659", "kind": "guest", "membership": "join" }, "event_id": "$14964262802250070yDyej:matrix.org", "membership": "join", "origin_server_ts": 1496426280842, "sender": "@130659:matrix.org", "state_key": "@130659:matrix.org", "type": "m.room.member", "unsigned": { "age": 14241671836 } }, { "content": { "membership": "leave" }, "event_id": "$148236393161lWDhu:tldev.eu", "membership": "leave", "origin_server_ts": 1482363931432, "sender": "@R1CH:tldev.eu", "state_key": "@R1CH:tldev.eu", "type": "m.room.member", "unsigned": { "age": 28304021246, "prev_content": { "avatar_url": null, "displayname": "R1CH", "membership": "join" }, "prev_sender": "@R1CH:tldev.eu", "replaces_state": "$148236229641Emwyu:tldev.eu" } }, { "content": { "avatar_url": null, "displayname": "heluca", "membership": "join" }, "event_id": "$1456699524177374gXcub:matrix.org", "membership": "join", "origin_server_ts": 1456699524710, "sender": "@heluca:matrix.org", "state_key": "@heluca:matrix.org", "type": "m.room.member", "unsigned": { "age": 53968427968 } }, { "content": { "avatar_url": "mxc://matrix.org/huCXfUKAiGwtqKCUoXjLKEDb", "displayname": "Mayel", "membership": "join" }, "event_id": "$1498236922184612jyMfE:matrix.org", "membership": "join", "origin_server_ts": 1498236922722, "sender": "@mayel:matrix.org", "state_key": "@mayel:matrix.org", "type": "m.room.member", "unsigned": { "age": 12431029956, "replaces_state": "$14960726253378631exdvt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1504374479767574ndRcN:matrix.org", "membership": "join", "origin_server_ts": 1504374479858, "sender": "@slartibartfast:matrix.org", "state_key": "@slartibartfast:matrix.org", "type": "m.room.member", "unsigned": { "age": 6293472820 } }, { "content": { "avatar_url": "mxc://matrix.org/CKvKqvaLZkrqKZcXeUabhnUw", "displayname": "@thekyriarchy", "membership": "join" }, "event_id": "$15005725364015554JyrIw:matrix.org", "membership": "join", "origin_server_ts": 1500572536326, "sender": "@thekyriarchy:matrix.org", "state_key": "@thekyriarchy:matrix.org", "type": "m.room.member", "unsigned": { "age": 10095416352 } }, { "content": { "membership": "leave" }, "event_id": "$145829666053477bVcJr:matrix.org", "membership": "leave", "origin_server_ts": 1458296660826, "sender": "@yoesak:matrix.org", "state_key": "@yoesak:matrix.org", "type": "m.room.member", "unsigned": { "age": 52371291852, "replaces_state": "$1440776481135125ENxKQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/lFgQPrFHCBsvKIozjygeGYwB", "displayname": "Auxim", "membership": "join" }, "event_id": "$150028853172093UCtOB:matrix.org", "membership": "join", "origin_server_ts": 1500288531696, "sender": "@Auxim:matrix.org", "state_key": "@Auxim:matrix.org", "type": "m.room.member", "unsigned": { "age": 10379420982 } }, { "content": { "avatar_url": "mxc://slxh.eu/firYUbGCedTKEeYmayUSnKUz", "displayname": "Silke", "membership": "join" }, "event_id": "$15022936114454cBFAw:slxh.eu", "membership": "join", "origin_server_ts": 1502293611192, "sender": "@silex:slxh.eu", "state_key": "@silex:slxh.eu", "type": "m.room.member", "unsigned": { "age": 8374341486, "replaces_state": "$15022924624432WEQIh:slxh.eu" } }, { "content": { "avatar_url": "mxc://matrix.org/veOVGgFVjzcBcXLuOEfbedHu#auto", "displayname": "xt", "membership": "join" }, "event_id": "$142533862010176aDslg:matrix.org", "origin_server_ts": 1425338620487, "sender": "@xt:matrix.org", "state_key": "@xt:matrix.org", "type": "m.room.member", "unsigned": { "age": 85329332191, "replaces_state": "$1424876948562vlemJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1466513533809191qOiKM:matrix.org", "membership": "leave", "origin_server_ts": 1466513533918, "sender": "@Binan:matrix.org", "state_key": "@Binan:matrix.org", "type": "m.room.member", "unsigned": { "age": 44154418760, "replaces_state": "$146605584394280UaGSa:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JayyGZjdxMkzdVjmUpnpzwNQ", "displayname": "Andreas Ekeroth", "membership": "join" }, "event_id": "$14292659105315rtBKr:matrix.org", "origin_server_ts": 1429265910305, "sender": "@aekeroth:matrix.org", "state_key": "@aekeroth:matrix.org", "type": "m.room.member", "unsigned": { "age": 81402042373, "replaces_state": "$14292659105314hxUoG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1469838147651035OtKSm:matrix.org", "membership": "leave", "origin_server_ts": 1469838147301, "sender": "@fighterff:matrix.org", "state_key": "@fighterff:matrix.org", "type": "m.room.member", "unsigned": { "age": 40829805377, "replaces_state": "$1469838055650891jakjI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mALdYEqRGjsSaKCnfQPHDQpT#auto", "displayname": "Mike Hearn", "membership": "join" }, "event_id": "$1426541992158ZDdUK:matrix.org", "membership": "join", "origin_server_ts": 1426541992933, "sender": "@mike_hearn:matrix.org", "state_key": "@mike_hearn:matrix.org", "type": "m.room.member", "unsigned": { "age": 84125959745 } }, { "content": { "avatar_url": "mxc://deltawhy.me/COPqXZhTYimBrUyohDVXPxrd", "displayname": "DeltaWhy", "membership": "join" }, "event_id": "$144938141317wcdfs:deltawhy.me", "origin_server_ts": 1449381991454, "sender": "@DeltaWhy:deltawhy.me", "state_key": "@DeltaWhy:deltawhy.me", "type": "m.room.member", "unsigned": { "age": 5 } }, { "content": { "avatar_url": "mxc://matrix.org/knqTBQNebShKxBVZRlpaROkq", "displayname": "commendatore", "membership": "join" }, "event_id": "$1469236684423471vdfvn:matrix.org", "membership": "join", "origin_server_ts": 1469236684421, "sender": "@commendatore:matrix.org", "state_key": "@commendatore:matrix.org", "type": "m.room.member", "unsigned": { "age": 41431268257 } }, { "content": { "membership": "leave" }, "event_id": "$1484070077194CFJeL:darkride.net", "membership": "leave", "origin_server_ts": 1484070077560, "sender": "@zany:darkride.net", "state_key": "@zany:darkride.net", "type": "m.room.member", "unsigned": { "age": 26597875118, "replaces_state": "$1484057757129zzoll:darkride.net" } }, { "content": { "membership": "leave" }, "event_id": "$14799207631354266WYaVU:matrix.org", "membership": "leave", "origin_server_ts": 1479920763279, "sender": "@Mex:matrix.org", "state_key": "@Mex:matrix.org", "type": "m.room.member", "unsigned": { "age": 30747189399, "replaces_state": "$1472630833138429scxTH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148755555625YUjlS:matrix.chicagolug.org", "membership": "leave", "origin_server_ts": 1487555556212, "sender": "@jim:matrix.chicagolug.org", "state_key": "@jim:matrix.chicagolug.org", "type": "m.room.member", "unsigned": { "age": 23112396466, "prev_content": { "avatar_url": "mxc://matrix.chicagolug.org/sSyVipHRzUDINkkDyOnvenML", "displayname": "j1mc", "membership": "join" }, "prev_sender": "@jim:matrix.chicagolug.org", "replaces_state": "$148755471119UURne:matrix.chicagolug.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1455516087150817tVKVA:matrix.org", "origin_server_ts": 1455516087060, "sender": "@jimbocohen123:matrix.org", "state_key": "@jimbocohen123:matrix.org", "type": "m.room.member", "unsigned": { "age": 55151865618 } }, { "content": { "membership": "leave" }, "event_id": "$14956631482024113YDKyx:matrix.org", "membership": "leave", "origin_server_ts": 1495663148748, "sender": "@freenode_MORBiDiTY:matrix.org", "state_key": "@freenode_MORBiDiTY:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004803930, "replaces_state": "$146828565974381oofDa:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Jas", "membership": "join" }, "event_id": "$1509389554504279vtwRe:matrix.org", "membership": "join", "origin_server_ts": 1509389554519, "sender": "@jas99:matrix.org", "state_key": "@jas99:matrix.org", "type": "m.room.member", "unsigned": { "age": 1278398159 } }, { "content": { "avatar_url": "mxc://nsa.wtf/IZUsTMGuUZEgHhygEUVRxJkz", "displayname": "phrag", "membership": "join" }, "event_id": "$14901938991rZkxY:nsa.wtf", "origin_server_ts": 1490193948882, "sender": "@phrag:nsa.wtf", "state_key": "@phrag:nsa.wtf", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "membership": "leave" }, "event_id": "$148754163065HiArQ:toppoint.de", "membership": "leave", "origin_server_ts": 1487541630436, "sender": "@baldo:toppoint.de", "state_key": "@baldo:toppoint.de", "type": "m.room.member", "unsigned": { "age": 23126322242, "prev_content": { "avatar_url": "mxc://toppoint.de/thFWCeBGLqoNRbLuSyRKTbQI", "displayname": "✨ baldo ✨", "membership": "join" }, "prev_sender": "@baldo:toppoint.de", "replaces_state": "$1487323140162CQPsQ:toppoint.de" } }, { "content": { "avatar_url": "mxc://matrix.org/QmQTPRftKpkqndfCdOwItLtt", "displayname": "Stratus3D", "membership": "join" }, "event_id": "$1426878635413aQaeZ:matrix.org", "origin_server_ts": 1426878635433, "sender": "@stratus3d:matrix.org", "state_key": "@stratus3d:matrix.org", "type": "m.room.member", "unsigned": { "age": 83789317245, "replaces_state": "$1426878616411DpfuK:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14893480921477178cdLiT:matrix.org", "membership": "join", "origin_server_ts": 1489348092192, "sender": "@aylesm:matrix.org", "state_key": "@aylesm:matrix.org", "type": "m.room.member", "unsigned": { "age": 21319860486 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145609655472816VPcCv:matrix.org", "origin_server_ts": 1456096554302, "sender": "@peregrine:matrix.org", "state_key": "@peregrine:matrix.org", "type": "m.room.member", "unsigned": { "age": 54571398376 } }, { "content": { "membership": "leave" }, "event_id": "$1448926180220238YmHrj:matrix.org", "origin_server_ts": 1448926180718, "sender": "@fckngsrnm:matrix.org", "state_key": "@fckngsrnm:matrix.org", "type": "m.room.member", "unsigned": { "age": 61741771960, "replaces_state": "$1448926131220158mlEgM:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FjqrLbqOohdLbecVrBxVSHeo", "displayname": "Nik05", "membership": "join" }, "event_id": "$15008949382707950QxNSG:matrix.org", "membership": "join", "origin_server_ts": 1500894938555, "sender": "@Nik05:matrix.org", "state_key": "@Nik05:matrix.org", "type": "m.room.member", "unsigned": { "age": 9773014123, "replaces_state": "$15008948262706819oQzWs:matrix.org" } }, { "content": { "avatar_url": "http://matrix.tp.mu:8008/_matrix/content/QGphbWVzYm9keTp0cC5tdQpKkGwZVKIxXVtGkuuSEvdfYt.aW1hZ2UvanBlZw==.jpeg", "displayname": "James Body", "membership": "join" }, "event_id": "$1417525700418zilur:tp.mu", "membership": "join", "origin_server_ts": 1417525700136, "sender": "@jamesbody:tp.mu", "state_key": "@jamesbody:tp.mu", "type": "m.room.member", "unsigned": { "age": 93142244042 } }, { "content": { "avatar_url": null, "displayname": "VoxelDan", "membership": "join" }, "event_id": "$1497768470475276IfHNV:matrix.org", "membership": "join", "origin_server_ts": 1497768470770, "sender": "@VoxelDan:matrix.org", "state_key": "@VoxelDan:matrix.org", "type": "m.room.member", "unsigned": { "age": 12899481908 } }, { "content": { "membership": "leave" }, "event_id": "$149381233527535juTIb:matrix.org", "membership": "leave", "origin_server_ts": 1493812335697, "sender": "@zwily:matrix.org", "state_key": "@zwily:matrix.org", "type": "m.room.member", "unsigned": { "age": 16855616981, "replaces_state": "$1476198822143987LwzPX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/NHcDLQIlZZNCiNqANmxAITWU", "displayname": "Torxed", "membership": "join" }, "event_id": "$14888277732066938qDZIE:matrix.org", "membership": "join", "origin_server_ts": 1488827773752, "sender": "@Torxed:matrix.org", "state_key": "@Torxed:matrix.org", "type": "m.room.member", "unsigned": { "age": 21840178926 } }, { "content": { "avatar_url": "mxc://matrix.org/jMgDxQrvsVDWwwVPfJcDizeP", "displayname": "bupkes", "membership": "join" }, "event_id": "$145443646510099ErTjo:matrix.org", "origin_server_ts": 1454436465239, "sender": "@po:matrix.org", "state_key": "@po:matrix.org", "type": "m.room.member", "unsigned": { "age": 56231487439 } }, { "content": { "membership": "leave" }, "event_id": "$15049077204938580ThnQd:matrix.org", "membership": "leave", "origin_server_ts": 1504907720127, "sender": "@Zil0:matrix.org", "state_key": "@Zil0:matrix.org", "type": "m.room.member", "unsigned": { "age": 5760232551, "replaces_state": "$150399752412991vNxcN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14794194021129716VimOE:matrix.org", "membership": "leave", "origin_server_ts": 1479419402624, "sender": "@gitter_SShrike:matrix.org", "state_key": "@gitter_SShrike:matrix.org", "type": "m.room.member", "unsigned": { "age": 31248550054, "replaces_state": "$1464691442455845rERir:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14550137960UfVWO:matrix.org", "origin_server_ts": 1455013796732, "sender": "@cocci:matrix.org", "state_key": "@cocci:matrix.org", "type": "m.room.member", "unsigned": { "age": 55654155946, "replaces_state": "$14550137551350UFvJH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147950239845LSQdj:ghostcorp.net", "membership": "leave", "origin_server_ts": 1479502398712, "sender": "@zach:ghostcorp.net", "state_key": "@zach:ghostcorp.net", "type": "m.room.member", "unsigned": { "age": 31165553966, "replaces_state": "$14786413836iQMEh:ghostcorp.net" } }, { "content": { "membership": "leave" }, "event_id": "$1484563114242YtXHp:peregrination.life", "membership": "leave", "origin_server_ts": 1484563114674, "sender": "@congratulations:peregrination.life", "state_key": "@congratulations:peregrination.life", "type": "m.room.member", "unsigned": { "age": 26104838004, "prev_content": { "avatar_url": null, "displayname": "congratulations", "membership": "join" }, "prev_sender": "@congratulations:peregrination.life", "replaces_state": "$148444488035AEeMf:peregrination.life" } }, { "content": { "avatar_url": "mxc://firematrix.ml/RQFsEtuslShPauDOAdVdDdbx", "displayname": null, "membership": "join" }, "event_id": "$149933333322Ngwad:firematrix.ml", "membership": "join", "origin_server_ts": 1499333333809, "sender": "@icy:firematrix.ml", "state_key": "@icy:firematrix.ml", "type": "m.room.member", "unsigned": { "age": 11334618869, "replaces_state": "$14993318576Tqsfn:firematrix.ml" } }, { "content": { "avatar_url": "mxc://matrix.org/ujBWTeJoLtLwIfoOlDYZLknb", "displayname": "panicbit", "membership": "join" }, "event_id": "$147404380246985crnTj:matrix.org", "membership": "join", "origin_server_ts": 1474043802278, "sender": "@panicbit:matrix.org", "state_key": "@panicbit:matrix.org", "type": "m.room.member", "unsigned": { "age": 36624150400 } }, { "content": { "avatar_url": "mxc://matrix.org/ZKoIRKBRfUuPcngkiMkzuIXm", "displayname": "jwheare", "membership": "join" }, "event_id": "$1484223469225819PDpJR:matrix.org", "membership": "join", "origin_server_ts": 1484223469059, "sender": "@jwheare:matrix.org", "state_key": "@jwheare:matrix.org", "type": "m.room.member", "unsigned": { "age": 26444483619, "replaces_state": "$1484223379225383xGgdk:matrix.org" } }, { "content": { "avatar_url": "mxc://tang.ents.ca/XUmiEZfGpVRUoXXIkoANleUS", "displayname": "[e] TravisR", "membership": "join" }, "event_id": "$151033365316690UcyXb:tang.ents.ca", "origin_server_ts": 1510333663897, "sender": "@travis:tang.ents.ca", "state_key": "@travis:tang.ents.ca", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "membership": "leave" }, "event_id": "$15014748453798045yCNGo:matrix.org", "membership": "leave", "origin_server_ts": 1501474845548, "sender": "@freenode_user2468_:matrix.org", "state_key": "@freenode_user2468_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193107130, "replaces_state": "$15002495101997831PUBRx:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/LIdAaJUumHujpDTNpVmvmKvE", "displayname": "lexik", "membership": "join" }, "event_id": "$1479805795846278BGsia:matrix.org", "membership": "join", "origin_server_ts": 1479805795850, "sender": "@lexik:matrix.org", "state_key": "@lexik:matrix.org", "type": "m.room.member", "unsigned": { "age": 30862156828, "replaces_state": "$1469103792148907deQOd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$144541148140490peJal:matrix.org", "origin_server_ts": 1445411481911, "sender": "@anton:matrix.org", "state_key": "@anton:matrix.org", "type": "m.room.member", "unsigned": { "age": 65256470767, "replaces_state": "$144537202076372hZkph:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "dineshdb", "membership": "join" }, "event_id": "$15099315122931001HMKSh:matrix.org", "membership": "join", "origin_server_ts": 1509931512281, "sender": "@dineshdb:matrix.org", "state_key": "@dineshdb:matrix.org", "type": "m.room.member", "unsigned": { "age": 736440397 } }, { "content": { "avatar_url": null, "displayname": "Askaban", "kind": "guest", "membership": "join" }, "event_id": "$14667487341291714kdkVc:matrix.org", "membership": "join", "origin_server_ts": 1466748734903, "sender": "@19621:matrix.org", "state_key": "@19621:matrix.org", "type": "m.room.member", "unsigned": { "age": 43919217775 } }, { "content": { "membership": "leave" }, "event_id": "$150183456147fqqdH:matrix.netspective.com", "membership": "leave", "origin_server_ts": 1501834561395, "sender": "@sreedevi_mp:matrix.netspective.com", "state_key": "@sreedevi_mp:matrix.netspective.com", "type": "m.room.member", "unsigned": { "age": 8833391283, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@sreedevi_mp:matrix.netspective.com", "replaces_state": "$150183416144XuCFK:matrix.netspective.com" } }, { "content": { "membership": "leave" }, "event_id": "$14966926214813019gKwEg:matrix.org", "membership": "leave", "origin_server_ts": 1496692621658, "sender": "@pizza:matrix.org", "state_key": "@pizza:matrix.org", "type": "m.room.member", "unsigned": { "age": 13975331020, "replaces_state": "$14966923824809280FVIWp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14758516812657xZJBQ:matrix.org", "membership": "leave", "origin_server_ts": 1475851681686, "sender": "@Sasy:matrix.org", "state_key": "@Sasy:matrix.org", "type": "m.room.member", "unsigned": { "age": 34816270992, "replaces_state": "$14757786223036490ZIgTA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.alliante.com/srgIPrHIKTbVzlHmwVlBdggS", "displayname": "Jeffrey Gordon", "membership": "join" }, "event_id": "$15087778079coDew:matrix.alliante.com", "origin_server_ts": 1508777807311, "sender": "@Jeff:matrix.alliante.com", "state_key": "@Jeff:matrix.alliante.com", "type": "m.room.member", "unsigned": { "age": 138 } }, { "content": { "avatar_url": null, "displayname": "elouan", "membership": "join" }, "event_id": "$1416420910588dZiXc:matrix.org", "membership": "join", "origin_server_ts": 1409925402978, "sender": "@elouan:matrix.org", "state_key": "@elouan:matrix.org", "stream_ordering": 3495, "type": "m.room.member", "unsigned": { "age": 94247042090 } }, { "content": { "avatar_url": "mxc://matrix.org/ZafPzsxMJtLaSaJXloBEKiws", "displayname": "othervdh", "membership": "join" }, "event_id": "$148533794313556xaFRH:matrix.org", "membership": "join", "origin_server_ts": 1485337943719, "sender": "@richvdh:matrix.org", "state_key": "@richvdh:matrix.org", "type": "m.room.member", "unsigned": { "age": 25330008959, "replaces_state": "$14818851551087747WUmGZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15028809953004326qlWYi:matrix.org", "membership": "leave", "origin_server_ts": 1502880995889, "sender": "@freenode_edin00n:matrix.org", "state_key": "@freenode_edin00n:matrix.org", "type": "m.room.member", "unsigned": { "age": 7786956789, "replaces_state": "$15028809103003353rpxfr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "vanlan", "membership": "join" }, "event_id": "$15101328261951004sQVCy:matrix.org", "membership": "join", "origin_server_ts": 1510132826035, "sender": "@vanlan:matrix.org", "state_key": "@vanlan:matrix.org", "type": "m.room.member", "unsigned": { "age": 535126643 } }, { "content": { "avatar_url": null, "displayname": "Q", "membership": "join" }, "event_id": "$148984494818Zpozc:roeckx.be", "membership": "join", "origin_server_ts": 1489844948669, "sender": "@kurt:roeckx.be", "state_key": "@kurt:roeckx.be", "type": "m.room.member", "unsigned": { "age": 20823004009, "replaces_state": "$148641838915sMqya:roeckx.be" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$146081086288002berMu:matrix.org", "membership": "join", "origin_server_ts": 1460810862531, "sender": "@huf:matrix.org", "state_key": "@huf:matrix.org", "type": "m.room.member", "unsigned": { "age": 49857090147 } }, { "content": { "avatar_url": "mxc://dawninglight.net/XwiEVDJzfXnNwzXgLIbEOzvG", "displayname": "david.blewett", "membership": "join" }, "event_id": "$148382638210EKUwq:dawninglight.net", "membership": "join", "origin_server_ts": 1483826382185, "sender": "@david.blewett:dawninglight.net", "state_key": "@david.blewett:dawninglight.net", "type": "m.room.member", "unsigned": { "age": 26841570493, "replaces_state": "$148287007220ibGaV:dawninglight.net" } }, { "content": { "avatar_url": null, "displayname": "haniel.87", "membership": "join" }, "event_id": "$15041951662518864OfUBo:matrix.org", "membership": "join", "origin_server_ts": 1504195166063, "sender": "@haniel.87:matrix.org", "state_key": "@haniel.87:matrix.org", "type": "m.room.member", "unsigned": { "age": 6472786615 } }, { "content": { "avatar_url": null, "displayname": "swastik", "membership": "join" }, "event_id": "$148820823853157kODCd:matrix.org", "membership": "join", "origin_server_ts": 1488208238170, "sender": "@swastik:matrix.org", "state_key": "@swastik:matrix.org", "type": "m.room.member", "unsigned": { "age": 22459714508 } }, { "content": { "avatar_url": null, "displayname": "NordlichtIRDE", "membership": "join" }, "event_id": "$148293880422dGiXV:matrix.irde.info", "origin_server_ts": 1482938804378, "sender": "@NordlichtIRDE:matrix.irde.info", "state_key": "@NordlichtIRDE:matrix.irde.info", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "membership": "leave" }, "event_id": "$1458947799145455DwqPG:matrix.org", "membership": "leave", "origin_server_ts": 1458947799782, "sender": "@owierelo:matrix.org", "state_key": "@owierelo:matrix.org", "type": "m.room.member", "unsigned": { "age": 51720152896, "replaces_state": "$1458939989133720ecsDa:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1486133579401960gOkfI:matrix.org", "membership": "join", "origin_server_ts": 1486133579345, "sender": "@Keven:matrix.org", "state_key": "@Keven:matrix.org", "type": "m.room.member", "unsigned": { "age": 24534373333, "replaces_state": "$1486133294399528aSvyp:matrix.org" } }, { "content": { "aliases": [ "#freenode_#matrix-dev:matrix.org", "#matrix-dev:matrix.org" ] }, "event_id": "$1444665107257047byzRm:matrix.org", "origin_server_ts": 1444665107595, "sender": "@appservice-irc:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 66002845083, "replaces_state": "$144069689315297RMOip:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest7945 (IRC)", "membership": "join" }, "event_id": "$15099246232687611juOpr:matrix.org", "membership": "join", "origin_server_ts": 1509924623964, "sender": "@freenode_Guest7945:matrix.org", "state_key": "@freenode_Guest7945:matrix.org", "type": "m.room.member", "unsigned": { "age": 743328714 } }, { "content": { "membership": "leave" }, "event_id": "$1500232819908jbWuV:matrix.allmende.io", "membership": "leave", "origin_server_ts": 1500232819017, "sender": "@gandhiano:matrix.allmende.io", "state_key": "@gandhiano:matrix.allmende.io", "type": "m.room.member", "unsigned": { "age": 10435133661, "replaces_state": "$1498037055243CTRBY:matrix.allmende.io" } }, { "content": { "membership": "leave" }, "event_id": "$14956631862024916rgLkZ:matrix.org", "membership": "leave", "origin_server_ts": 1495663186960, "sender": "@freenode_spacekit1eh:matrix.org", "state_key": "@freenode_spacekit1eh:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004765718, "replaces_state": "$14809937214171360HUYat:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1483970101921328dEkBl:matrix.org", "membership": "join", "origin_server_ts": 1483970101013, "sender": "@acharles:matrix.org", "state_key": "@acharles:matrix.org", "type": "m.room.member", "unsigned": { "age": 26697851665 } }, { "content": { "avatar_url": "mxc://matrix.org/mjJxMDiOgfWngasfDzgNbnJd", "displayname": "kykc", "membership": "join" }, "event_id": "$1474496114373449kphBu:matrix.org", "membership": "join", "origin_server_ts": 1474496114257, "sender": "@kykc:matrix.org", "state_key": "@kykc:matrix.org", "type": "m.room.member", "unsigned": { "age": 36171838421, "replaces_state": "$1474495881372867PlMXO:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "reth (IRC)", "membership": "join" }, "event_id": "$1510318896753597UJboH:matrix.org", "membership": "join", "origin_server_ts": 1510318896187, "sender": "@freenode_reth:matrix.org", "state_key": "@freenode_reth:matrix.org", "type": "m.room.member", "unsigned": { "age": 349056491 } }, { "content": { "membership": "leave" }, "event_id": "$1452351046108939WIgqY:matrix.org", "origin_server_ts": 1452351046266, "sender": "@kiwi:matrix.org", "state_key": "@kiwi:matrix.org", "type": "m.room.member", "unsigned": { "age": 58316906412, "replaces_state": "$1452345179104952zkciQ:matrix.org" } }, { "content": { "avatar_url": "mxc://hawkheart.xyz/DmtELksUQmyWWnSBQcfRVOYl", "displayname": "Hawkheart", "membership": "join" }, "event_id": "$147050728636oVXVB:hawkheart.xyz", "membership": "join", "origin_server_ts": 1470507286693, "sender": "@Hawkheart:hawkheart.xyz", "state_key": "@Hawkheart:hawkheart.xyz", "type": "m.room.member", "unsigned": { "age": 40160665985, "prev_content": { "avatar_url": null, "displayname": "Hawkheart", "membership": "join" }, "prev_sender": "@Hawkheart:hawkheart.xyz", "replaces_state": "$147044613418MIqVX:hawkheart.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/xEvHyQANyjibgqoTuMtvTszk", "displayname": "John", "membership": "join" }, "event_id": "$1460017242387160GqXMg:matrix.org", "membership": "join", "origin_server_ts": 1460017242728, "sender": "@hluanvu:matrix.org", "state_key": "@hluanvu:matrix.org", "type": "m.room.member", "unsigned": { "age": 50650709950, "replaces_state": "$1460017175387109oKaQZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vxovdGUUqUlYRQItCydbpNzH", "displayname": "Raja", "membership": "join" }, "event_id": "$14689485771333323GmVAK:matrix.org", "membership": "join", "origin_server_ts": 1468948577851, "sender": "@sraja:matrix.org", "state_key": "@sraja:matrix.org", "type": "m.room.member", "unsigned": { "age": 41719374827, "replaces_state": "$14689485611333261pUqtH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14887356961502862sQZEF:matrix.org", "membership": "leave", "origin_server_ts": 1488735696887, "sender": "@shanavas:matrix.org", "state_key": "@shanavas:matrix.org", "type": "m.room.member", "unsigned": { "age": 21932255791, "replaces_state": "$1488349083389103SZpKN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148198210729vAChq:k0rx.com", "membership": "leave", "origin_server_ts": 1481982107476, "sender": "@k0rx:k0rx.com", "state_key": "@k0rx:k0rx.com", "type": "m.room.member", "unsigned": { "age": 28685845202, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@k0rx:k0rx.com", "replaces_state": "$148198176023GANpF:k0rx.com" } }, { "content": { "avatar_url": null, "displayname": "Andrew Manning", "membership": "join" }, "event_id": "$1492791891222351BoXbZ:matrix.org", "membership": "join", "origin_server_ts": 1492791891679, "sender": "@anaqreon:matrix.org", "state_key": "@anaqreon:matrix.org", "type": "m.room.member", "unsigned": { "age": 17876060999, "replaces_state": "$145403511672479qQWfH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1492301765878736IdUAX:matrix.org", "membership": "leave", "origin_server_ts": 1492301765303, "sender": "@htc:matrix.org", "state_key": "@htc:matrix.org", "type": "m.room.member", "unsigned": { "age": 18366187375, "replaces_state": "$1492299670860189RekvB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "qwertyuioppo", "membership": "join" }, "event_id": "$146792354350959gTxUu:matrix.org", "membership": "join", "origin_server_ts": 1467923543253, "sender": "@qwertyuioppo:matrix.org", "state_key": "@qwertyuioppo:matrix.org", "type": "m.room.member", "unsigned": { "age": 42744409425 } }, { "content": { "avatar_url": "mxc://skaverat.net/cfoQMuEhZrOtHNVQCpHALiDK", "displayname": "S̟̣̞͆̈ͪ͐̊̈͑k͚̬̹̥͍͎̘ạ̼̮͓̜̱ͯ̄̊̏v̉ͧ̇e͚̭͙̣̦̩R̘̒ã̝̙͆̇̆̿t̹͓̲̗̱̫̪͗̑̔̅̾", "membership": "join" }, "event_id": "$148623821815oDQPz:skaverat.net", "origin_server_ts": 1486238218061, "sender": "@skaverat:skaverat.net", "state_key": "@skaverat:skaverat.net", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "membership": "leave" }, "event_id": "$15048888412hKiyW:mocker.org", "membership": "leave", "origin_server_ts": 1504888841817, "sender": "@ks:mocker.org", "state_key": "@ks:mocker.org", "type": "m.room.member", "unsigned": { "age": 5779110861, "prev_content": { "avatar_url": null, "displayname": "kyle", "membership": "join" }, "prev_sender": "@ks:mocker.org", "replaces_state": "$15048887071QubHY:mocker.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RcFJJdvRIaVHpzRuMHOMmxJM", "displayname": "PC-Admin", "membership": "join" }, "event_id": "$15024282393675657GZFzg:matrix.org", "membership": "join", "origin_server_ts": 1502428239278, "sender": "@PC-Admin:matrix.org", "state_key": "@PC-Admin:matrix.org", "type": "m.room.member", "unsigned": { "age": 8239713400 } }, { "content": { "avatar_url": null, "displayname": "K4", "membership": "join" }, "event_id": "$14848638763762901yEXrO:matrix.org", "membership": "join", "origin_server_ts": 1484863876526, "sender": "@kesterite:matrix.org", "state_key": "@kesterite:matrix.org", "type": "m.room.member", "unsigned": { "age": 25804076152 } }, { "content": { "avatar_url": "mxc://matrix.org/faCYaQuGfoEoMIXyQbiPHnvJ", "displayname": "illicitonion", "membership": "join" }, "event_id": "$1437578408305ussTo:matrix.org", "origin_server_ts": 1437578408748, "sender": "@illicitonion:matrix.org", "state_key": "@illicitonion:matrix.org", "type": "m.room.member", "unsigned": { "age": 73089543930, "replaces_state": "$1437578293244IMXPz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1457503803181859GvODu:matrix.org", "membership": "leave", "origin_server_ts": 1457503803980, "sender": "@zed:matrix.org", "state_key": "@zed:matrix.org", "type": "m.room.member", "unsigned": { "age": 53164148698, "replaces_state": "$1457383911118415zTjYv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CQcstbRinFaXJBwvcqVMEZLD", "displayname": "Crashkopf", "membership": "join" }, "event_id": "$1459872626175965PzTwR:matrix.org", "membership": "join", "origin_server_ts": 1459872626648, "sender": "@crashkopf:matrix.org", "state_key": "@crashkopf:matrix.org", "type": "m.room.member", "unsigned": { "age": 50795326030 } }, { "content": { "avatar_url": "https://matrix.org:8448/_matrix/content/QGNvd3M6bWF0cml4Lm9yZwMofBwnMDRWjZouiJYRoMSvdS.aW1hZ2UvcG5n.png", "displayname": "cows", "membership": "join" }, "event_id": "$14231103145114IdmoH:matrix.org", "origin_server_ts": 1423110314094, "sender": "@cows:matrix.org", "state_key": "@cows:matrix.org", "type": "m.room.member", "unsigned": { "age": 87557638584, "replaces_state": "$14231102875108GDfUa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1457381420116315fqyQP:matrix.org", "membership": "leave", "origin_server_ts": 1457381420904, "sender": "@tnapolitano:matrix.org", "state_key": "@tnapolitano:matrix.org", "type": "m.room.member", "unsigned": { "age": 53286531774, "replaces_state": "$1457381391116286EdCff:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xdUlZzwjtGxLiCLlvqTQuyGV", "displayname": "slang", "membership": "join" }, "event_id": "$146292028952925sBcaE:matrix.org", "membership": "join", "origin_server_ts": 1462920289338, "sender": "@slang:matrix.org", "state_key": "@slang:matrix.org", "type": "m.room.member", "unsigned": { "age": 47747663340 } }, { "content": { "membership": "leave" }, "event_id": "$149037331211ljTSI:lumby.me", "membership": "leave", "origin_server_ts": 1490373312759, "sender": "@oliver:lumby.me", "state_key": "@oliver:lumby.me", "type": "m.room.member", "unsigned": { "age": 20294639919, "prev_content": { "avatar_url": null, "displayname": "oliver", "membership": "join" }, "prev_sender": "@oliver:lumby.me", "replaces_state": "$14896986031fVvEB:lumby.me" } }, { "content": { "avatar_url": "mxc://matrix.org/kNAxVuNecYVzBvFPjgBAXXQZ", "displayname": "Gregory.K", "membership": "join" }, "event_id": "$1472434134399543YAWjF:matrix.org", "membership": "join", "origin_server_ts": 1472434134294, "sender": "@Gregory.K:matrix.org", "state_key": "@Gregory.K:matrix.org", "type": "m.room.member", "unsigned": { "age": 38233818384 } }, { "content": { "membership": "leave" }, "event_id": "$1416420911240NlpYz:matrix.org", "membership": "leave", "origin_server_ts": 1410123333333, "sender": "@sbysm:matrix.org", "state_key": "@sbysm:matrix.org", "stream_ordering": 4466, "type": "m.room.member", "unsigned": { "age": 94247041438 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1455546116229osDIB:matrix.org", "origin_server_ts": 1455546116871, "sender": "@slack_illicitonion:matrix.org", "state_key": "@slack_illicitonion:matrix.org", "type": "m.room.member", "unsigned": { "age": 55121835807 } }, { "content": { "avatar_url": "mxc://matrix.org/TPrbzYOoRDrGQdrckLCoiWXe", "displayname": "Connor", "membership": "join" }, "event_id": "$1510284714399597xUWzh:matrix.org", "membership": "join", "origin_server_ts": 1510284714812, "sender": "@cpt:matrix.org", "state_key": "@cpt:matrix.org", "type": "m.room.member", "unsigned": { "age": 383237866, "replaces_state": "$1510284690399328bJauG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1493759409579135ZBzQM:matrix.org", "membership": "leave", "origin_server_ts": 1493759409521, "sender": "@ivegotasthma:matrix.org", "state_key": "@ivegotasthma:matrix.org", "type": "m.room.member", "unsigned": { "age": 16908543157, "replaces_state": "$1472909799386864HjlPY:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1457569337216961aApzm:matrix.org", "membership": "leave", "origin_server_ts": 1457569337754, "sender": "@sid:matrix.org", "state_key": "@sid:matrix.org", "type": "m.room.member", "unsigned": { "age": 53098614924, "replaces_state": "$1457569335216960HMLRR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631952025101dFGFk:matrix.org", "membership": "leave", "origin_server_ts": 1495663195188, "sender": "@freenode_trickin:matrix.org", "state_key": "@freenode_trickin:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004757490, "replaces_state": "$1457606012316BPtsR:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Spferical", "membership": "join" }, "event_id": "$14952304358jTCZT:pfe.io", "origin_server_ts": 1495230435647, "sender": "@matthew:pfe.io", "state_key": "@matthew:pfe.io", "type": "m.room.member", "unsigned": { "age": 46 } }, { "content": { "membership": "leave" }, "event_id": "$15024946291025076rMfnx:matrix.org", "membership": "leave", "origin_server_ts": 1502494629200, "sender": "@freenode_Hito_:matrix.org", "state_key": "@freenode_Hito_:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173323478, "replaces_state": "$1502477580462262LfbAP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956885262467873hBibO:matrix.org", "membership": "leave", "origin_server_ts": 1495688526283, "sender": "@freenode_Zorroness:matrix.org", "state_key": "@freenode_Zorroness:matrix.org", "type": "m.room.member", "unsigned": { "age": 14979426395, "replaces_state": "$14956854672429225Bozan:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15106301341274800lTHJU:matrix.org", "membership": "leave", "origin_server_ts": 1510630134276, "sender": "@freenode_freepoutine:matrix.org", "state_key": "@freenode_freepoutine:matrix.org", "type": "m.room.member", "unsigned": { "age": 37818402, "replaces_state": "$1510219951473152hZhIe:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/iqRDijizPANymMuwhcQNooOq#auto", "displayname": null, "membership": "join" }, "event_id": "$1443901265204537zuOzR:matrix.org", "origin_server_ts": 1443901265808, "sender": "@wizzard:matrix.org", "state_key": "@wizzard:matrix.org", "type": "m.room.member", "unsigned": { "age": 66766686870 } }, { "content": { "avatar_url": "mxc://matrix.org/QcDaSuDrUHEOVuOuWFKKeBzr", "displayname": "ganlub", "membership": "join" }, "event_id": "$148837894817184Qoeey:matrix.org", "membership": "join", "origin_server_ts": 1488378948250, "sender": "@ganlub:matrix.org", "state_key": "@ganlub:matrix.org", "type": "m.room.member", "unsigned": { "age": 22289004428, "replaces_state": "$148837889816785ZUjgx:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/gdEIDrgQFXtskSSocbYoDOKU", "displayname": "cjd", "membership": "join" }, "event_id": "$14863962771723418omNBq:matrix.org", "membership": "join", "origin_server_ts": 1486396277576, "sender": "@cjd:matrix.org", "state_key": "@cjd:matrix.org", "type": "m.room.member", "unsigned": { "age": 24271675102 } }, { "content": { "projects": [] }, "event_id": "$1446571692472955qjycK:matrix.org", "origin_server_ts": 1446571692472, "sender": "@neb:matrix.org", "state_key": "", "type": "org.matrix.neb.plugin.jenkins.projects.tracking", "unsigned": { "age": 64096260206, "replaces_state": "$14400015155426jDvgZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14320460241434VFopM:matrix.org", "origin_server_ts": 1432046024367, "sender": "@ylecollen100:matrix.org", "state_key": "@ylecollen100:matrix.org", "type": "m.room.member", "unsigned": { "age": 78621928311, "replaces_state": "$1426838849588MDZgT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14966681934470756nCoEb:matrix.org", "membership": "join", "origin_server_ts": 1496668193954, "sender": "@abgan68:matrix.org", "state_key": "@abgan68:matrix.org", "type": "m.room.member", "unsigned": { "age": 13999758724 } }, { "content": { "membership": "leave" }, "event_id": "$148762484917HpIGy:bentware.nl", "membership": "leave", "origin_server_ts": 1487624849205, "sender": "@erik:bentware.nl", "state_key": "@erik:bentware.nl", "type": "m.room.member", "unsigned": { "age": 4202967, "prev_content": { "membership": "join" }, "prev_sender": "@erik:bentware.nl", "replaces_state": "$148762472215whFVu:bentware.nl" } }, { "content": { "avatar_url": null, "displayname": "bjkklnkl", "membership": "join" }, "event_id": "$15083513973742590qxJKu:matrix.org", "membership": "join", "origin_server_ts": 1508351397811, "sender": "@bjkklnkl:matrix.org", "state_key": "@bjkklnkl:matrix.org", "type": "m.room.member", "unsigned": { "age": 2316554867 } }, { "content": { "avatar_url": null, "displayname": "apply55gx", "membership": "join" }, "event_id": "$14898410421313412VqDxG:matrix.org", "membership": "join", "origin_server_ts": 1489841042533, "sender": "@apply55gx:matrix.org", "state_key": "@apply55gx:matrix.org", "type": "m.room.member", "unsigned": { "age": 20826910145 } }, { "content": { "membership": "leave" }, "event_id": "$14968293644dSQXA:chat.giga.is", "membership": "leave", "origin_server_ts": 1496829364603, "sender": "@Gigaa:chat.giga.is", "state_key": "@Gigaa:chat.giga.is", "type": "m.room.member", "unsigned": { "age": 13838588075, "prev_content": { "avatar_url": "mxc://chat.giga.is/SSsxcRCGkHyCHITYlerbABUZ", "displayname": "Gigaa", "membership": "join" }, "prev_sender": "@Gigaa:chat.giga.is", "replaces_state": "$14968292363cfjJj:chat.giga.is" } }, { "content": { "membership": "leave" }, "event_id": "$14829158783175239pXzRp:matrix.org", "membership": "leave", "origin_server_ts": 1482915878267, "sender": "@L0L022:matrix.org", "state_key": "@L0L022:matrix.org", "type": "m.room.member", "unsigned": { "age": 27752074411, "replaces_state": "$14829157783174853xOeTM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1465891172601689HWhuq:matrix.org", "membership": "leave", "origin_server_ts": 1465891172682, "sender": "@ccheckk:matrix.org", "state_key": "@ccheckk:matrix.org", "type": "m.room.member", "unsigned": { "age": 44776779996, "replaces_state": "$14628968758224YWwWu:matrix.org" } }, { "content": { "avatar_url": "mxc://msgs.tk/xxkoXPvoQvvStEYaBXWTXjqh", "displayname": "krombel", "membership": "join" }, "event_id": "$1494436439220tSzkm:msgs.tk", "origin_server_ts": 1494436439901, "sender": "@krombel:msgs.tk", "state_key": "@krombel:msgs.tk", "type": "m.room.member", "unsigned": { "age": 48 } }, { "content": { "avatar_url": null, "displayname": "spossiba (IRC)", "membership": "join" }, "event_id": "$1506031691665474rQwoQ:matrix.org", "membership": "join", "origin_server_ts": 1506031691798, "sender": "@freenode_spossiba:matrix.org", "state_key": "@freenode_spossiba:matrix.org", "type": "m.room.member", "unsigned": { "age": 4636260880, "replaces_state": "$1506031389660831ICKCP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Nolan", "membership": "join" }, "event_id": "$14244992933576gDdxp:matrix.org", "origin_server_ts": 1424499293446, "sender": "@nolan:matrix.org", "state_key": "@nolan:matrix.org", "type": "m.room.member", "unsigned": { "age": 86168659232, "replaces_state": "$1417726738477hoFNr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14902632291378948LYnnL:matrix.org", "membership": "leave", "origin_server_ts": 1490263229772, "sender": "@mantisds:matrix.org", "state_key": "@mantisds:matrix.org", "type": "m.room.member", "unsigned": { "age": 20404722906, "replaces_state": "$1490210003962607VATya:matrix.org" } }, { "age_ts": 1447956442287, "content": { "avatar_url": "mxc://new.grdev.io/hDzxykpvbdjBHarHSuIFXljd", "displayname": "Gianluca", "membership": "join" }, "event_id": "$144795644158IZmFJ:new.grdev.io", "origin_server_ts": 1447956441800, "sender": "@gianluca311:new.grdev.io", "state_key": "@gianluca311:new.grdev.io", "type": "m.room.member", "unsigned": { "age": 14, "replaces_state": "$144795641522cvBTj:shvl.io" } }, { "content": { "avatar_url": "mxc://matrix.org/WMHfLTgYOtkgIytjQuQdDoLN", "displayname": "science-bot", "membership": "join" }, "event_id": "$15060943291370968uFMEp:matrix.org", "membership": "join", "origin_server_ts": 1506094329172, "sender": "@science-bot:matrix.org", "state_key": "@science-bot:matrix.org", "type": "m.room.member", "unsigned": { "age": 4573623506 } }, { "content": { "membership": "leave" }, "event_id": "$141875666110yGiSq:jki.re", "origin_server_ts": 1418756661130, "sender": "@erikj:jki.re", "state_key": "@erik:arasphere.net", "type": "m.room.member", "unsigned": { "age": 91911291548 } }, { "content": { "avatar_url": "mxc://matrix.org/bJGaIYESJORpyaNvDPwGyOMs", "displayname": "Chronody", "membership": "join" }, "event_id": "$1507541004755350JBxRd:matrix.org", "membership": "join", "origin_server_ts": 1507541004077, "sender": "@Chronody:matrix.org", "state_key": "@Chronody:matrix.org", "type": "m.room.member", "unsigned": { "age": 3126948601 } }, { "content": { "membership": "leave" }, "event_id": "$1424077241213NqJzz:matrix.org", "origin_server_ts": 1424077241936, "sender": "@maderik:matrix.org", "state_key": "@maderik:matrix.org", "type": "m.room.member", "unsigned": { "age": 86590710742, "replaces_state": "$1424077226212qJMYW:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ReBuGi", "kind": "guest", "membership": "join" }, "event_id": "$1493515505451997dipvG:matrix.org", "membership": "join", "origin_server_ts": 1493515505960, "sender": "@220847:matrix.org", "state_key": "@220847:matrix.org", "type": "m.room.member", "unsigned": { "age": 17152446718 } }, { "content": { "avatar_url": "mxc://chat.weho.st/qgGFaSnvtkdXGBotgrUuaQGR", "displayname": "realitygaps", "membership": "join" }, "event_id": "$14831300672297yGPii:chat.weho.st", "origin_server_ts": 1483130067525, "sender": "@realitygaps:chat.weho.st", "state_key": "@realitygaps:chat.weho.st", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "membership": "leave" }, "event_id": "$1460063573463138OQMSt:matrix.org", "membership": "leave", "origin_server_ts": 1460063573552, "sender": "@Fullbrook:matrix.org", "state_key": "@Fullbrook:matrix.org", "type": "m.room.member", "unsigned": { "age": 50604379126, "replaces_state": "$1460063506462990dkJAm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14854996433jNYgN:chittychat.me", "membership": "leave", "origin_server_ts": 1485499643403, "sender": "@moltonlava:chittychat.me", "state_key": "@moltonlava:chittychat.me", "type": "m.room.member", "unsigned": { "age": 25168309275, "prev_content": { "avatar_url": null, "displayname": "moltonlava", "membership": "join" }, "prev_sender": "@moltonlava:chittychat.me", "replaces_state": "$14854994842nnJER:chittychat.me" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1463169509402541roybd:matrix.org", "membership": "join", "origin_server_ts": 1463169509127, "sender": "@darknumbers:matrix.org", "state_key": "@darknumbers:matrix.org", "type": "m.room.member", "unsigned": { "age": 47498443551 } }, { "content": { "avatar_url": "mxc://matrix.org/dgvFrUcPgkyoTAQehWhJfQMz", "displayname": "Trustable", "membership": "join" }, "event_id": "$1460927419196471UcOIO:matrix.org", "membership": "join", "origin_server_ts": 1460927419171, "sender": "@Trustable:matrix.org", "state_key": "@Trustable:matrix.org", "type": "m.room.member", "unsigned": { "age": 49740533507 } }, { "content": { "avatar_url": "mxc://matrix.org/NxUqhAybACvvkvsjyhLoFXhO", "displayname": "Skiant", "membership": "join" }, "event_id": "$145374177926120pENTi:matrix.org", "origin_server_ts": 1453741779082, "sender": "@skiant:matrix.org", "state_key": "@skiant:matrix.org", "type": "m.room.member", "unsigned": { "age": 56926173596 } }, { "content": { "avatar_url": null, "displayname": "janosberghorn", "membership": "join" }, "event_id": "$15069442271908807VhTAo:matrix.org", "membership": "join", "origin_server_ts": 1506944227058, "sender": "@janosberghorn:matrix.org", "state_key": "@janosberghorn:matrix.org", "type": "m.room.member", "unsigned": { "age": 3723725620 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14675495202596576tkOWj:matrix.org", "membership": "join", "origin_server_ts": 1467549520859, "sender": "@mudasir:matrix.org", "state_key": "@mudasir:matrix.org", "type": "m.room.member", "unsigned": { "age": 43118431819 } }, { "content": { "avatar_url": "mxc://findeichscha.de/gOaMAkVPMovbVxswyGlKLKFb", "displayname": "mascha", "membership": "join" }, "event_id": "$14910017821cnPrc:findeichscha.de", "origin_server_ts": 1491001782902, "sender": "@mascha:findeichscha.de", "state_key": "@mascha:findeichscha.de", "type": "m.room.member", "unsigned": { "age": 22 } }, { "content": { "avatar_url": "mxc://matrix.org/fuOFngjCSnQETTlBChQDOfyS", "displayname": "エリエン", "membership": "join" }, "event_id": "$1493052779163479lkFns:matrix.org", "membership": "join", "origin_server_ts": 1493052779995, "sender": "@alien:matrix.org", "state_key": "@alien:matrix.org", "type": "m.room.member", "unsigned": { "age": 17615172683, "replaces_state": "$1493052386158456FZgGX:matrix.org" } }, { "content": { "aliases": [ "#matrix-dev:kek.community" ] }, "event_id": "$1493600692930vUwBe:kek.community", "origin_server_ts": 1493600692443, "sender": "@walle303:kek.community", "state_key": "kek.community", "type": "m.room.aliases", "unsigned": { "age": 17067260235 } }, { "content": { "avatar_url": "mxc://matrix.org/hZRlRYOfmpPXEWrvRIvcZZyb", "displayname": "k3vmcd", "membership": "join" }, "event_id": "$14848089173420396Mubhh:matrix.org", "membership": "join", "origin_server_ts": 1484808917561, "sender": "@k3vmcd:matrix.org", "state_key": "@k3vmcd:matrix.org", "type": "m.room.member", "unsigned": { "age": 25859035117 } }, { "age_ts": 1504796966086, "content": { "avatar_url": "mxc://kolosowscy.pl/grGjSXBWCsntsGChhZgjhyTb", "displayname": "Jurek", "membership": "join" }, "event_id": "$1504796965115iSpEJ:kolosowscy.pl", "origin_server_ts": 1504796965147, "sender": "@jurek:kolosowscy.pl", "state_key": "@jurek:kolosowscy.pl", "type": "m.room.member", "unsigned": { "age": 20, "prev_content": { "membership": "leave" }, "prev_sender": "@jurek:kolosowscy.pl", "replaces_state": "$1504296199678dTzzb:kolosowscy.pl" } }, { "content": { "membership": "leave" }, "event_id": "$15099448183198793YiJaB:matrix.org", "membership": "leave", "origin_server_ts": 1509944818508, "sender": "@freenode_kythyria:matrix.org", "state_key": "@freenode_kythyria:matrix.org", "type": "m.room.member", "unsigned": { "age": 723134170, "replaces_state": "$15096605634318121BDTuy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ByxfWpxMKslvGNYqpqvSfVEI#auto", "displayname": null, "membership": "join" }, "event_id": "$142537638410278ybhXe:matrix.org", "membership": "join", "origin_server_ts": 1425376384396, "sender": "@marv:matrix.org", "state_key": "@marv:matrix.org", "type": "m.room.member", "unsigned": { "age": 85291568282, "replaces_state": "$142537635510276yVYLQ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "hexa- (IRC)", "membership": "join" }, "event_id": "$14713597067912vROvd:matrix.org", "membership": "join", "origin_server_ts": 1471359706910, "sender": "@freenode_hexa-:matrix.org", "state_key": "@freenode_hexa-:matrix.org", "type": "m.room.member", "unsigned": { "age": 39308245768, "replaces_state": "$1471181925553095wTUSf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1476333463540069VlwnZ:matrix.org", "membership": "leave", "origin_server_ts": 1476333463222, "sender": "@gst:matrix.org", "state_key": "@gst:matrix.org", "type": "m.room.member", "unsigned": { "age": 34334489456, "replaces_state": "$144281725764043gsPvc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1451299123328217roMVc:matrix.org", "origin_server_ts": 1451299123757, "sender": "@schaelle:matrix.org", "state_key": "@schaelle:matrix.org", "type": "m.room.member", "unsigned": { "age": 59368828921, "replaces_state": "$1451298460327776Hgrwb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15004635822588259aJOxS:matrix.org", "membership": "leave", "origin_server_ts": 1500463582701, "sender": "@Jetable:matrix.org", "state_key": "@Jetable:matrix.org", "type": "m.room.member", "unsigned": { "age": 10204369977, "replaces_state": "$15003880641689665PBORS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GllMJOAgGMrbMGowaNcOzqyO", "displayname": "Gitter Integration", "membership": "join" }, "event_id": "$14755104471892232aCNww:matrix.org", "membership": "join", "origin_server_ts": 1475510447576, "sender": "@gitterbot:matrix.org", "state_key": "@gitterbot:matrix.org", "type": "m.room.member", "unsigned": { "age": 35157505102, "replaces_state": "$1474652003318078taRgB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Nighamo Siztue", "membership": "join" }, "event_id": "$1452233718133732UxZIy:matrix.org", "membership": "join", "origin_server_ts": 1452233718481, "sender": "@Nighamo:matrix.org", "state_key": "@Nighamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 58434234197 } }, { "content": { "membership": "leave" }, "event_id": "$15105118923057306yxdZN:matrix.org", "membership": "leave", "origin_server_ts": 1510511892082, "sender": "@eyallior:matrix.org", "state_key": "@eyallior:matrix.org", "type": "m.room.member", "unsigned": { "age": 156060596, "replaces_state": "$15105118683056971ixZuk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145397222092602ACIXv:matrix.org", "origin_server_ts": 1453972220000, "sender": "@baselab:matrix.org", "state_key": "@baselab:matrix.org", "type": "m.room.member", "unsigned": { "age": 56695732678, "replaces_state": "$145396651088240ILNwD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437523416841DXltg:matrix.org", "membership": "leave", "origin_server_ts": 1499143752843, "sender": "@freenode_samis:matrix.org", "state_key": "@freenode_samis:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524199835, "replaces_state": "$14979967963886656sjVjz:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OsXqaowJMTCsxeREKsYoiRgx", "displayname": "YourTech John", "membership": "join" }, "event_id": "$14251383975442hSHIZ:matrix.org", "membership": "join", "origin_server_ts": 1425138397067, "sender": "@ytjohn:matrix.org", "state_key": "@ytjohn:matrix.org", "type": "m.room.member", "unsigned": { "age": 85529555611, "replaces_state": "$14251383745441jnBjn:matrix.org" } }, { "content": { "avatar_url": "mxc://k7try.co/TVkZQrLSbgoGcdWMvRDGYSht", "displayname": "K7TRY", "membership": "join" }, "event_id": "$148716720910Wxedo:k7try.co", "membership": "join", "origin_server_ts": 1487167209302, "sender": "@eds:k7try.co", "state_key": "@eds:k7try.co", "type": "m.room.member", "unsigned": { "age": 23500743376, "replaces_state": "$14871414941lFlbB:k7try.co" } }, { "content": { "membership": "leave" }, "event_id": "$14766418821410102xFnUS:matrix.org", "membership": "leave", "origin_server_ts": 1476641882661, "sender": "@juju:matrix.org", "state_key": "@juju:matrix.org", "type": "m.room.member", "unsigned": { "age": 34026070017, "replaces_state": "$1471785621280557xBxNu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JcjkwWLGXDXDCLcMpDGtANfJ#auto", "displayname": "Rich", "membership": "join" }, "event_id": "$1427314783185wTMZw:matrix.org", "membership": "join", "origin_server_ts": 1427314783250, "sender": "@Rich:matrix.org", "state_key": "@Rich:matrix.org", "type": "m.room.member", "unsigned": { "age": 83353169428 } }, { "content": { "avatar_url": "mxc://matrix.org/WbZLvaeUVJnuQksTwHGeNcGU", "displayname": "Simon", "membership": "join" }, "event_id": "$14810302971838GLCHd:matrix.org", "membership": "join", "origin_server_ts": 1481030297081, "sender": "@longsleep:matrix.org", "state_key": "@longsleep:matrix.org", "type": "m.room.member", "unsigned": { "age": 29637655597 } }, { "content": { "avatar_url": "mxc://matrix.org/LLQdEniEyPDbFJbqtmkdiwku", "displayname": "Ross Schulman", "membership": "join" }, "event_id": "$1449088051381545GxLNF:matrix.org", "origin_server_ts": 1449088051838, "sender": "@rschulman:matrix.org", "state_key": "@rschulman:matrix.org", "type": "m.room.member", "unsigned": { "age": 61579900840, "replaces_state": "$144415990512769HhlOb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632252025817PHcCG:matrix.org", "membership": "leave", "origin_server_ts": 1495663225786, "sender": "@freenode_Ralith__:matrix.org", "state_key": "@freenode_Ralith__:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004726892, "replaces_state": "$1483730589631066RDtzM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631772024726zmJYR:matrix.org", "membership": "leave", "origin_server_ts": 1495663177716, "sender": "@freenode_Yotson:matrix.org", "state_key": "@freenode_Yotson:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004774962, "replaces_state": "$148398675031069TOfsr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1488242502240250AExtJ:matrix.org", "membership": "leave", "origin_server_ts": 1488242502496, "sender": "@DEPRIVGROUP:matrix.org", "state_key": "@DEPRIVGROUP:matrix.org", "type": "m.room.member", "unsigned": { "age": 22425450182, "replaces_state": "$14875324731072148CDwGV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632002025231PcZAF:matrix.org", "membership": "leave", "origin_server_ts": 1495663200878, "sender": "@freenode_mitfree:matrix.org", "state_key": "@freenode_mitfree:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004751800, "replaces_state": "$1485899058281358jEiMW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14885438355bDYBZ:archlinux.org", "membership": "leave", "origin_server_ts": 1488543835615, "sender": "@heftig:archlinux.org", "state_key": "@heftig:archlinux.org", "type": "m.room.member", "unsigned": { "age": 22124117063, "prev_content": { "avatar_url": null, "displayname": "heftig", "membership": "join" }, "prev_sender": "@heftig:archlinux.org", "replaces_state": "$14885146651qpeCS:archlinux.org" } }, { "content": { "avatar_url": null, "displayname": "Friendly Fox", "membership": "join" }, "event_id": "$1490385855233214neEcr:matrix.org", "membership": "join", "origin_server_ts": 1490385855181, "sender": "@fox_test:matrix.org", "state_key": "@fox_test:matrix.org", "type": "m.room.member", "unsigned": { "age": 20282097497 } }, { "content": { "membership": "leave" }, "event_id": "$14956632482026383oHAkb:matrix.org", "membership": "leave", "origin_server_ts": 1495663248859, "sender": "@freenode_muthusuba:matrix.org", "state_key": "@freenode_muthusuba:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004703819, "replaces_state": "$1432883898757GqJfc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "meeh", "membership": "join" }, "event_id": "$149840724343Zbhsf:greyhat.im", "origin_server_ts": 1498407222172, "sender": "@meeh:greyhat.im", "state_key": "@meeh:greyhat.im", "type": "m.room.member", "unsigned": { "age": 118 } }, { "content": { "avatar_url": null, "displayname": "Cradamy", "membership": "join" }, "event_id": "$14459585008520uQbSh:matrix.org", "origin_server_ts": 1445958500898, "sender": "@Cradam:matrix.org", "state_key": "@Cradam:matrix.org", "type": "m.room.member", "unsigned": { "age": 64709451780, "replaces_state": "$14459584668474oxPBg:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.molinkx.com/twqkUfmTDFNXNBlWstGqpvac", "displayname": "Lefei", "membership": "join" }, "event_id": "$1481174551137OEJNn:matrix.molinkx.com", "membership": "join", "origin_server_ts": 1481174551811, "sender": "@lefei:matrix.molinkx.com", "state_key": "@lefei:matrix.molinkx.com", "type": "m.room.member", "unsigned": { "age": 29493400867, "replaces_state": "$1481174532134XZTnP:matrix.molinkx.com" } }, { "content": { "avatar_url": null, "displayname": "Sam Machin", "membership": "join" }, "event_id": "$1418118132516XVGdc:tp.mu", "membership": "join", "origin_server_ts": 1418118132625, "sender": "@SamMachin:tp.mu", "state_key": "@SamMachin:tp.mu", "type": "m.room.member", "unsigned": { "age": 92549801972 } }, { "content": { "membership": "leave" }, "event_id": "$14992464784761507HHNct:matrix.org", "membership": "leave", "origin_server_ts": 1499246478725, "sender": "@disperso:matrix.org", "state_key": "@disperso:matrix.org", "type": "m.room.member", "unsigned": { "age": 11421473953, "replaces_state": "$1459174155361995RuLlK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/PFHcWytnnkbdztmYvHvWgqEy#auto", "displayname": null, "membership": "join" }, "event_id": "$1450405346153864Hcbuu:matrix.org", "origin_server_ts": 1450405346569, "sender": "@gratimax:matrix.org", "state_key": "@gratimax:matrix.org", "type": "m.room.member", "unsigned": { "age": 60262606109 } }, { "content": { "membership": "leave" }, "event_id": "$1473470829124803PCzTc:matrix.org", "membership": "leave", "origin_server_ts": 1473470829641, "sender": "@sabolduc:matrix.org", "state_key": "@sabolduc:matrix.org", "type": "m.room.member", "unsigned": { "age": 37197123037, "replaces_state": "$1473470749124655EuCov:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "itsyogesh", "membership": "join" }, "event_id": "$14845653511986534pKRWW:matrix.org", "membership": "join", "origin_server_ts": 1484565351452, "sender": "@itsyogesh:matrix.org", "state_key": "@itsyogesh:matrix.org", "type": "m.room.member", "unsigned": { "age": 26102601226 } }, { "content": { "avatar_url": "mxc://matrix.org/bbCusboeHqNFAEZcQLQwmeND", "displayname": "fireglow (@fireglow:matrix.org)", "membership": "join" }, "event_id": "$1491053412825061yzLzw:matrix.org", "membership": "join", "origin_server_ts": 1491053412807, "sender": "@fireglow:matrix.org", "state_key": "@fireglow:matrix.org", "type": "m.room.member", "unsigned": { "age": 19614539871, "replaces_state": "$1490707261644813AuhnE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "trisimix", "membership": "join" }, "event_id": "$14895948254791CpPVS:matrix.org", "membership": "join", "origin_server_ts": 1489594825877, "sender": "@trisimix:matrix.org", "state_key": "@trisimix:matrix.org", "type": "m.room.member", "unsigned": { "age": 21073126801 } }, { "content": { "avatar_url": null, "displayname": "Guest 119360", "kind": "guest", "membership": "join" }, "event_id": "$148376135411282ChSKo:matrix.org", "membership": "join", "origin_server_ts": 1483761354892, "sender": "@119360:matrix.org", "state_key": "@119360:matrix.org", "type": "m.room.member", "unsigned": { "age": 26906597786 } }, { "content": { "avatar_url": null, "displayname": "MoneyPenny", "membership": "join" }, "event_id": "$1495528663537274BkQHD:matrix.org", "membership": "join", "origin_server_ts": 1495528663799, "sender": "@MoneyPenny:matrix.org", "state_key": "@MoneyPenny:matrix.org", "type": "m.room.member", "unsigned": { "age": 15139288879 } }, { "content": { "avatar_url": null, "displayname": "tekacs (Amar Sood)", "membership": "join" }, "event_id": "$1416420994680SdKVt:matrix.org", "membership": "join", "origin_server_ts": 1413850161651, "sender": "@tekacs:matrix.org", "state_key": "@tekacs:matrix.org", "stream_ordering": 16214, "type": "m.room.member", "unsigned": { "age": 94246957998 } }, { "content": { "membership": "leave" }, "event_id": "$1497653330476273kJwLY:matrix.org", "membership": "leave", "origin_server_ts": 1497653330880, "sender": "@freenode_Sipster_-:matrix.org", "state_key": "@freenode_Sipster_-:matrix.org", "type": "m.room.member", "unsigned": { "age": 13014621798, "replaces_state": "$14966090933792876NseVD:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Ludovic", "membership": "join" }, "event_id": "$1469720132393952biFwr:matrix.org", "membership": "join", "origin_server_ts": 1469720132676, "sender": "@Ludovic:matrix.org", "state_key": "@Ludovic:matrix.org", "type": "m.room.member", "unsigned": { "age": 40947820002 } }, { "content": { "avatar_url": "mxc://matrix.org/NmvJEwddhKBUmrAAQycRjdfX", "displayname": "nooitaf", "membership": "join" }, "event_id": "$1468396111304205gQpIE:matrix.org", "membership": "join", "origin_server_ts": 1468396111515, "sender": "@nooitaf:matrix.org", "state_key": "@nooitaf:matrix.org", "type": "m.room.member", "unsigned": { "age": 42271841163 } }, { "content": { "avatar_url": null, "displayname": "pik", "membership": "join" }, "event_id": "$149356062914mkwtl:matrix.amaznev.net", "origin_server_ts": 1493560629095, "sender": "@pik:matrix.amaznev.net", "state_key": "@pik:matrix.amaznev.net", "type": "m.room.member", "unsigned": { "age": 469 } }, { "content": { "membership": "leave" }, "event_id": "$15033300721lpNmz:inferiorlattice.com", "membership": "leave", "origin_server_ts": 1503330072735, "sender": "@tom:inferiorlattice.com", "state_key": "@tom:inferiorlattice.com", "type": "m.room.member", "unsigned": { "age": 7337879943, "prev_content": { "avatar_url": "mxc://inferiorlattice.com/hbZwdxsXZMSDgIekqaGhHgaW", "displayname": "tom", "membership": "join" }, "prev_sender": "@tom:inferiorlattice.com", "replaces_state": "$15033292520yxQHe:inferiorlattice.com" } }, { "content": { "avatar_url": "mxc://shitposters.club/imUldTLGQynCjrZZDNUvnNaW", "displayname": "king", "membership": "join" }, "event_id": "$1482988478101VTeOn:shitposters.club", "origin_server_ts": 1482988478913, "sender": "@king:shitposters.club", "state_key": "@king:shitposters.club", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "avatar_url": "mxc://matrix.org/JxyQFUWMPwucoznasLuvqOtu", "displayname": null, "membership": "join" }, "event_id": "$1501139962638863VJXvh:matrix.org", "membership": "join", "origin_server_ts": 1501139962849, "sender": "@schortl:matrix.org", "state_key": "@schortl:matrix.org", "type": "m.room.member", "unsigned": { "age": 9527989829 } }, { "content": { "avatar_url": null, "displayname": "An Android client", "membership": "join" }, "event_id": "$1416420910943cDMHw:localhost", "membership": "join", "origin_server_ts": 1410042967191, "sender": "@android:localhost", "state_key": "@android:localhost", "stream_ordering": 3878, "type": "m.room.member", "unsigned": { "age": 94247041735 } }, { "content": { "avatar_url": "mxc://matrix.org/emFCUlzZfKJTiVeSaykgZUai", "displayname": "neurocis", "membership": "join" }, "event_id": "$1484001157146085kAcrI:matrix.org", "membership": "join", "origin_server_ts": 1484001157763, "sender": "@neurocis:matrix.org", "state_key": "@neurocis:matrix.org", "type": "m.room.member", "unsigned": { "age": 26666794915, "replaces_state": "$148000905686885pXMlD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GkaWySwUZwddCZTPYmThpnsE#auto", "displayname": "spikeekips", "membership": "join" }, "event_id": "$14239159561007wgtIO:matrix.org", "membership": "join", "origin_server_ts": 1423915956436, "sender": "@spikeekips:matrix.org", "state_key": "@spikeekips:matrix.org", "type": "m.room.member", "unsigned": { "age": 86751996242 } }, { "content": { "avatar_url": "mxc://petunientopf.ch/VzsvzjWchYuUNhRVeOhxXCvZ", "displayname": "shu", "membership": "join" }, "event_id": "$149440455031ZpZNu:petunientopf.ch", "origin_server_ts": 1494404550850, "sender": "@sebastian:petunientopf.ch", "state_key": "@sebastian:petunientopf.ch", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "avatar_url": "mxc://matrix.org/EGsIsUSHlRIryNzUOuSQMpPi#auto", "displayname": null, "membership": "join" }, "event_id": "$1446388206340288wyoXh:matrix.org", "origin_server_ts": 1446388206508, "sender": "@diksha:matrix.org", "state_key": "@diksha:matrix.org", "type": "m.room.member", "unsigned": { "age": 64279746170 } }, { "content": { "avatar_url": null, "displayname": "someuname", "membership": "join" }, "event_id": "$15079398372006534SEgvu:matrix.org", "membership": "join", "origin_server_ts": 1507939837497, "sender": "@someuname:matrix.org", "state_key": "@someuname:matrix.org", "type": "m.room.member", "unsigned": { "age": 2728115181 } }, { "content": { "avatar_url": "mxc://matrix.org/mcemXoqAblsfdWgWPZmPGKnB", "displayname": "matthew", "membership": "join" }, "event_id": "$1499867395203781yXaXW:matrix.org", "membership": "join", "origin_server_ts": 1499867395005, "sender": "@_slack_matrixdotorg_U02TRSGCU:matrix.org", "state_key": "@_slack_matrixdotorg_U02TRSGCU:matrix.org", "type": "m.room.member", "unsigned": { "age": 10800557673, "replaces_state": "$1495116146154892qZtZV:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145713816819829pGGra:matrix.org", "membership": "join", "origin_server_ts": 1457138168512, "sender": "@orjan:matrix.org", "state_key": "@orjan:matrix.org", "type": "m.room.member", "unsigned": { "age": 53529784166 } }, { "content": { "membership": "leave" }, "event_id": "$1477086261723767SRmsx:matrix.org", "membership": "leave", "origin_server_ts": 1477086261176, "sender": "@aperezdc:matrix.org", "state_key": "@aperezdc:matrix.org", "type": "m.room.member", "unsigned": { "age": 33581691502, "replaces_state": "$14666822901142242BGakO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145439125149733wgzIT:matrix.org", "origin_server_ts": 1454391251748, "sender": "@da:matrix.org", "state_key": "@da:matrix.org", "type": "m.room.member", "unsigned": { "age": 56276700930, "replaces_state": "$145439073649208RbwFp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tekkeitserktok", "membership": "join" }, "event_id": "$15054759766948979smTVb:matrix.org", "membership": "join", "origin_server_ts": 1505475976200, "sender": "@tekkeitserktok:matrix.org", "state_key": "@tekkeitserktok:matrix.org", "type": "m.room.member", "unsigned": { "age": 5191976478 } }, { "content": { "membership": "leave" }, "event_id": "$1423733961974jNdMI:matrix.org", "origin_server_ts": 1423733961707, "sender": "@esmil:matrix.org", "state_key": "@esmil:matrix.org", "type": "m.room.member", "unsigned": { "age": 86933990971, "replaces_state": "$1423732972933TDArl:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/yslZpcZPLvwBzkurzNpkUcvQ", "displayname": "Albert Sverdlov", "membership": "join" }, "event_id": "$14330804301338LnPvD:matrix.org", "origin_server_ts": 1433080430969, "sender": "@ASverdlov:matrix.org", "state_key": "@ASverdlov:matrix.org", "type": "m.room.member", "unsigned": { "age": 77587521709, "replaces_state": "$14330800471316iZBDj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956439151686479QgmwG:matrix.org", "membership": "leave", "origin_server_ts": 1495643915976, "sender": "@bin7me:matrix.org", "state_key": "@bin7me:matrix.org", "type": "m.room.member", "unsigned": { "age": 15024036702, "replaces_state": "$1464773795199YBgWA:matrix.org" } }, { "content": { "avatar_url": "mxc://wberg.mine.nu/RofjHWxetHINWFhSagqbuQjM", "displayname": "Will Berg", "membership": "join" }, "event_id": "$143083354213VqLLz:wberg.mine.nu", "origin_server_ts": 1430833542517, "sender": "@wberg:wberg.mine.nu", "state_key": "@wberg:wberg.mine.nu", "type": "m.room.member", "unsigned": { "age": 79834410161, "replaces_state": "$14308315466ACXQI:wberg.mine.nu" } }, { "content": { "membership": "leave" }, "event_id": "$1498234079143863yDlxD:matrix.org", "membership": "leave", "origin_server_ts": 1498234079634, "sender": "@Xenar:matrix.org", "state_key": "@Xenar:matrix.org", "type": "m.room.member", "unsigned": { "age": 12433873044, "replaces_state": "$149685552815043qoIhd:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "MV", "membership": "join" }, "event_id": "$15087597574837983JEyjw:matrix.org", "membership": "join", "origin_server_ts": 1508759757501, "sender": "@mcfly2:matrix.org", "state_key": "@mcfly2:matrix.org", "type": "m.room.member", "unsigned": { "age": 1908195177 } }, { "content": { "avatar_url": "mxc://vodeoo.com/zvtgBLImVPalPIvnunURxJjs", "displayname": "hostile", "membership": "join" }, "event_id": "$148138498051Vtcqt:vodeoo.com", "membership": "join", "origin_server_ts": 1481384980966, "sender": "@mataleo:vodeoo.com", "state_key": "@mataleo:vodeoo.com", "type": "m.room.member", "unsigned": { "age": 29282971712, "replaces_state": "$148138484543gZXBp:vodeoo.com" } }, { "content": { "membership": "leave" }, "event_id": "$14956632232025769vLXfN:matrix.org", "membership": "leave", "origin_server_ts": 1495663223612, "sender": "@freenode_Einzig:matrix.org", "state_key": "@freenode_Einzig:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004729066, "replaces_state": "$14864705072164569DzXqv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15079794992414516hNJDv:matrix.org", "membership": "leave", "origin_server_ts": 1507979499620, "sender": "@cAkwNLHysr:matrix.org", "state_key": "@cAkwNLHysr:matrix.org", "type": "m.room.member", "unsigned": { "age": 2688453058, "replaces_state": "$1505628619746360nvQyE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "caveat (IRC)", "membership": "join" }, "event_id": "$15032603914444663dMKDH:matrix.org", "membership": "join", "origin_server_ts": 1503260391968, "sender": "@freenode_caveat:matrix.org", "state_key": "@freenode_caveat:matrix.org", "type": "m.room.member", "unsigned": { "age": 7407560710, "replaces_state": "$15029623621168898tZXCz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1456667790166218ASzbL:matrix.org", "membership": "join", "origin_server_ts": 1456667790601, "sender": "@duck:matrix.org", "state_key": "@duck:matrix.org", "type": "m.room.member", "unsigned": { "age": 54000162077 } }, { "content": { "avatar_url": null, "displayname": "Nicolas", "membership": "join" }, "event_id": "$15048583234256811ysbjw:matrix.org", "membership": "join", "origin_server_ts": 1504858323929, "sender": "@nba:matrix.org", "state_key": "@nba:matrix.org", "type": "m.room.member", "unsigned": { "age": 5809628749, "replaces_state": "$1488396586170748dCMuA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CUmrkvSOqTPuAAIWsVghtBvY", "displayname": "Benrob0329", "membership": "join" }, "event_id": "$15055223527660953ofZeg:matrix.org", "membership": "join", "origin_server_ts": 1505522352012, "sender": "@Benrob0329:matrix.org", "state_key": "@Benrob0329:matrix.org", "type": "m.room.member", "unsigned": { "age": 5145600666 } }, { "content": { "membership": "leave" }, "event_id": "$14846397072aGytN:nebtown.info", "membership": "leave", "origin_server_ts": 1484639707722, "sender": "@Nebual:nebtown.info", "state_key": "@Nebual:nebtown.info", "type": "m.room.member", "unsigned": { "age": 26028244956, "prev_content": { "avatar_url": null, "displayname": "Nebual", "membership": "join" }, "prev_sender": "@Nebual:nebtown.info", "replaces_state": "$14846394951cgOsq:nebtown.info" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1456829384254823Shqdg:matrix.org", "membership": "join", "origin_server_ts": 1456829384727, "sender": "@PurpureGecko:matrix.org", "state_key": "@PurpureGecko:matrix.org", "type": "m.room.member", "unsigned": { "age": 53838567951 } }, { "content": { "avatar_url": "mxc://matrix.org/SFqgpmxZVICFEYSXOoVEtMCL", "displayname": "yusf", "membership": "join" }, "event_id": "$15053033164283223wzOzA:matrix.org", "membership": "join", "origin_server_ts": 1505303316086, "sender": "@yusf:matrix.org", "state_key": "@yusf:matrix.org", "type": "m.room.member", "unsigned": { "age": 5364636592 } }, { "content": { "membership": "leave" }, "event_id": "$147042955883458QwOIr:matrix.org", "membership": "leave", "origin_server_ts": 1470429558598, "sender": "@Ralith:matrix.org", "state_key": "@Ralith:matrix.org", "type": "m.room.member", "unsigned": { "age": 40238394080, "replaces_state": "$1470178575100235OdpBQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15036492013690061sGhLG:matrix.org", "membership": "leave", "origin_server_ts": 1503649201587, "sender": "@IncubusRK:matrix.org", "state_key": "@IncubusRK:matrix.org", "type": "m.room.member", "unsigned": { "age": 7018751091, "replaces_state": "$15035198952133319uUiPs:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1498312879828454ePDVA:matrix.org", "membership": "join", "origin_server_ts": 1498312879079, "sender": "@madguy02:matrix.org", "state_key": "@madguy02:matrix.org", "type": "m.room.member", "unsigned": { "age": 12355073599 } }, { "content": { "membership": "leave" }, "event_id": "$148444530040gOQad:42is.life", "membership": "leave", "origin_server_ts": 1484445300653, "sender": "@yep:42is.life", "state_key": "@yep:42is.life", "type": "m.room.member", "unsigned": { "age": 26222652025, "prev_content": { "avatar_url": null, "displayname": "yep", "membership": "join" }, "prev_sender": "@yep:42is.life", "replaces_state": "$148444513639QFuqN:42is.life" } }, { "content": { "avatar_url": null, "displayname": "jmingus", "membership": "join" }, "event_id": "$1504576166749111WDyDF:matrix.org", "membership": "join", "origin_server_ts": 1504576166926, "sender": "@jmingus:matrix.org", "state_key": "@jmingus:matrix.org", "type": "m.room.member", "unsigned": { "age": 6091785752 } }, { "content": { "avatar_url": "mxc://esko.bar/CyqoiSlexbtcDKtRPuuErBfp", "displayname": "Esko", "membership": "join" }, "event_id": "$150635432743DwCkH:esko.bar", "origin_server_ts": 1506354327134, "sender": "@jooize:esko.bar", "state_key": "@jooize:esko.bar", "type": "m.room.member", "unsigned": { "age": 26 } }, { "content": { "membership": "leave" }, "event_id": "$14959298962298466tQfXG:matrix.org", "membership": "leave", "origin_server_ts": 1495929896039, "sender": "@atc:matrix.org", "state_key": "@atc:matrix.org", "type": "m.room.member", "unsigned": { "age": 14738056639, "replaces_state": "$1493850451627388oLvQB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "femme", "membership": "join" }, "event_id": "$14950277471613286lpUHZ:matrix.org", "membership": "join", "origin_server_ts": 1495027747896, "sender": "@itsfemme:matrix.org", "state_key": "@itsfemme:matrix.org", "type": "m.room.member", "unsigned": { "age": 15640204782, "replaces_state": "$149303670958222ClVbO:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "manish", "membership": "join" }, "event_id": "$14826966312188533faKji:matrix.org", "membership": "join", "origin_server_ts": 1482696631270, "sender": "@manish:matrix.org", "state_key": "@manish:matrix.org", "type": "m.room.member", "unsigned": { "age": 27971321408 } }, { "content": { "membership": "leave" }, "event_id": "$1487956733179DuIhx:epiphyte.network", "membership": "leave", "origin_server_ts": 1487956733743, "sender": "@enckse:epiphyte.network", "state_key": "@enckse:epiphyte.network", "type": "m.room.member", "unsigned": { "age": 22711218935, "prev_content": { "avatar_url": "mxc://epiphyte.network/HWAiPFmKvtDGBGpwJyyTuTHQ", "displayname": "enckse", "membership": "join" }, "prev_sender": "@enckse:epiphyte.network", "replaces_state": "$148785918313RqQmZ:epiphyte.network" } }, { "content": { "membership": "leave" }, "event_id": "$148920781764BpoRS:cetacean.club", "membership": "leave", "origin_server_ts": 1489207817313, "sender": "@cadey:cetacean.club", "state_key": "@cadey:cetacean.club", "type": "m.room.member", "unsigned": { "age": 21460135365, "prev_content": { "avatar_url": "mxc://cetacean.club/tItVCXYdpjESGINpDcrVvYMg", "displayname": "Cadey", "membership": "join" }, "prev_sender": "@cadey:cetacean.club", "replaces_state": "$14892061883SZIzA:cetacean.club" } }, { "content": { "membership": "leave" }, "event_id": "$14956632162025621CzTxs:matrix.org", "membership": "leave", "origin_server_ts": 1495663216818, "sender": "@freenode_sanyam:matrix.org", "state_key": "@freenode_sanyam:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004735860, "replaces_state": "$14581938494265MPvIl:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CitlmarGUfmXRcifkxIjSDSA", "displayname": "codingoat", "membership": "join" }, "event_id": "$148414598062501iPSmF:matrix.org", "membership": "join", "origin_server_ts": 1484145980894, "sender": "@gootigoot:matrix.org", "state_key": "@gootigoot:matrix.org", "type": "m.room.member", "unsigned": { "age": 26521971784, "replaces_state": "$1468528726594490Qehwk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1457418850136391CyuQY:matrix.org", "membership": "join", "origin_server_ts": 1457418850350, "sender": "@qwerty:matrix.org", "state_key": "@qwerty:matrix.org", "type": "m.room.member", "unsigned": { "age": 53249102328 } }, { "content": { "membership": "leave" }, "event_id": "$1476386877719938iKDdR:matrix.org", "membership": "leave", "origin_server_ts": 1476386877667, "sender": "@wwwi7891:matrix.org", "state_key": "@wwwi7891:matrix.org", "type": "m.room.member", "unsigned": { "age": 34281075011, "replaces_state": "$1469206642363070vSUQe:matrix.org" } }, { "content": { "avatar_url": "mxc://fws.fr/BMojvPDSfJowUxCVyUXwJfCt", "displayname": "dani", "membership": "join" }, "event_id": "$15058274202564vdIbj:fws.fr", "membership": "join", "origin_server_ts": 1505827420147, "sender": "@dani:fws.fr", "state_key": "@dani:fws.fr", "type": "m.room.member", "unsigned": { "age": 4840532531, "prev_content": { "avatar_url": "mxc://fws.fr/UJezODNkBhxNtMStNsOCVAfU", "displayname": "dani", "membership": "join" }, "prev_sender": "@dani:fws.fr", "replaces_state": "$15057245271689IzCmF:fws.fr" } }, { "content": { "membership": "leave" }, "event_id": "$1498320648900168vEDRb:matrix.org", "membership": "leave", "origin_server_ts": 1498320648627, "sender": "@dtygel:matrix.org", "state_key": "@dtygel:matrix.org", "type": "m.room.member", "unsigned": { "age": 12347304051, "replaces_state": "$149727631873358icbom:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/IWlhYzAtKHjixlUJSsIJsfny", "displayname": "Sir666", "membership": "join" }, "event_id": "$1487321519324581SQLJN:matrix.org", "membership": "join", "origin_server_ts": 1487321519425, "sender": "@Sir666:matrix.org", "state_key": "@Sir666:matrix.org", "type": "m.room.member", "unsigned": { "age": 23346433253 } }, { "content": { "membership": "leave" }, "event_id": "$1466123579228607BQpcC:matrix.org", "membership": "leave", "origin_server_ts": 1466123579135, "sender": "@JesseW:matrix.org", "state_key": "@JesseW:matrix.org", "type": "m.room.member", "unsigned": { "age": 44544373543, "replaces_state": "$1466123562228594qDsxd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14901808222555Sygwz:orbstheorem.ch", "membership": "leave", "origin_server_ts": 1490180822519, "sender": "@roosemberth:orbstheorem.ch", "state_key": "@roosemberth:orbstheorem.ch", "type": "m.room.member", "unsigned": { "age": 20487130159, "replaces_state": "$14900524971472wbEAA:orbstheorem.ch" } }, { "content": { "avatar_url": "mxc://matrix.org/IJZkilnWEdSibNHYFWauBEdg", "displayname": "IcyFire", "membership": "join" }, "event_id": "$14941523081330800DnVQE:matrix.org", "membership": "join", "origin_server_ts": 1494152308559, "sender": "@rajeevrmenon97:matrix.org", "state_key": "@rajeevrmenon97:matrix.org", "type": "m.room.member", "unsigned": { "age": 16515644119 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QERhbGFyOm1hdHJpeC5vcmcalOkSBkVHMhqegOPRedDUmUd.aW1hZ2UvcG5n.png", "displayname": "Dalar", "membership": "join" }, "event_id": "$14272714381185xvNGL:matrix.org", "membership": "join", "origin_server_ts": 1427271438166, "sender": "@Dalar:matrix.org", "state_key": "@Dalar:matrix.org", "type": "m.room.member", "unsigned": { "age": 83396514512 } }, { "content": { "avatar_url": null, "displayname": "jazzbug03189", "membership": "join" }, "event_id": "$15062025432605626SvnSF:matrix.org", "membership": "join", "origin_server_ts": 1506202543314, "sender": "@jazzbug03189:matrix.org", "state_key": "@jazzbug03189:matrix.org", "type": "m.room.member", "unsigned": { "age": 4465409364 } }, { "content": { "avatar_url": null, "displayname": "Fuzzy76-", "kind": "guest", "membership": "join" }, "event_id": "$14932100751101177KVhlh:matrix.org", "membership": "join", "origin_server_ts": 1493210075555, "sender": "@217688:matrix.org", "state_key": "@217688:matrix.org", "type": "m.room.member", "unsigned": { "age": 17457877123 } }, { "content": { "membership": "leave" }, "event_id": "$144733691738458QEqvV:openmarket.com", "origin_server_ts": 1447336917110, "sender": "@thomasc:openmarket.com", "state_key": "@thomasc:openmarket.com", "type": "m.room.member", "unsigned": { "age": 63331035568, "replaces_state": "$144663652112742XvYij:openmarket.com" } }, { "content": { "avatar_url": "mxc://karp.id.au/UoHWVoUMYTkXHRKKixYoEteH", "displayname": "arcsinx", "membership": "join" }, "event_id": "$149034818696DxKlW:karp.id.au", "membership": "join", "origin_server_ts": 1490348186239, "sender": "@tom:karp.id.au", "state_key": "@tom:karp.id.au", "type": "m.room.member", "unsigned": { "age": 20319766439, "prev_content": { "avatar_url": "mxc://karp.id.au/RymdecRAMWjwaxynYURSTKyL", "displayname": "arcsinx", "membership": "join" }, "prev_sender": "@tom:karp.id.au", "replaces_state": "$148634911151qhHVf:karp.id.au" } }, { "content": { "avatar_url": "mxc://matrix.ytnoc.net/FHHCovTDqdTOnzfmFIujwhlf#auto", "displayname": "ytjohn", "membership": "join" }, "event_id": "$142514301852fyJHA:matrix.ytnoc.net", "origin_server_ts": 1425143018129, "sender": "@ytjohn:matrix.ytnoc.net", "state_key": "@ytjohn:matrix.ytnoc.net", "type": "m.room.member", "unsigned": { "age": 85524934549, "replaces_state": "$142514009030QkdDC:matrix.ytnoc.net" } }, { "content": { "membership": "leave" }, "event_id": "$1498751904133845FDfWC:matrix.org", "membership": "leave", "origin_server_ts": 1498751904909, "sender": "@freenode_dax:matrix.org", "state_key": "@freenode_dax:matrix.org", "type": "m.room.member", "unsigned": { "age": 11916047769, "replaces_state": "$14984277311799770pdGKI:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$15034521811124592NSjuw:matrix.org", "membership": "join", "origin_server_ts": 1503452181337, "sender": "@lephihungch:matrix.org", "state_key": "@lephihungch:matrix.org", "type": "m.room.member", "unsigned": { "age": 7215771341, "redacted_because": { "content": {}, "event_id": "$15034522271124962SQgKL:matrix.org", "origin_server_ts": 1503452227145, "redacts": "$15034521811124592NSjuw:matrix.org", "sender": "@lephihungch:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 7215725533 } }, "redacted_by": "$15034522271124962SQgKL:matrix.org", "replaces_state": "$15034521791124572CuYQM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1500319792674807CqnYP:matrix.org", "membership": "leave", "origin_server_ts": 1500319792128, "sender": "@Yanet:matrix.org", "state_key": "@Yanet:matrix.org", "type": "m.room.member", "unsigned": { "age": 10348160550, "replaces_state": "$1500319717672406fypcj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KfkLMomWWjVZMbgVCKisfFPy", "displayname": "Github", "membership": "join" }, "event_id": "$1487850820613393BOrAk:matrix.org", "membership": "join", "origin_server_ts": 1487850820101, "sender": "@_neb_github:matrix.org", "state_key": "@_neb_github:matrix.org", "type": "m.room.member", "unsigned": { "age": 22817132577, "replaces_state": "$1487786365182003WfYUf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "el (IRC)", "membership": "join" }, "event_id": "$15106437491467541lHLkp:matrix.org", "membership": "join", "origin_server_ts": 1510643749473, "sender": "@freenode_el:matrix.org", "state_key": "@freenode_el:matrix.org", "type": "m.room.member", "unsigned": { "age": 24203205 } }, { "content": { "membership": "leave" }, "event_id": "$14912294312169342FztdV:matrix.org", "membership": "leave", "origin_server_ts": 1491229431442, "sender": "@autmnmute:matrix.org", "state_key": "@autmnmute:matrix.org", "type": "m.room.member", "unsigned": { "age": 19438521236, "replaces_state": "$14912207592082908gRGGv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/yGQQvirvXKTRebqNeWTbANZm", "displayname": "aviraldg", "membership": "join" }, "event_id": "$14835485091479754giZGW:matrix.org", "membership": "join", "origin_server_ts": 1483548509714, "sender": "@aviraldg:matrix.org", "state_key": "@aviraldg:matrix.org", "type": "m.room.member", "unsigned": { "age": 27119442964, "replaces_state": "$147586469059891ecdHS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/WOnhlbohVdfZLrwTIcVAQaEJ#auto", "displayname": "Tensor (Test)", "membership": "join" }, "event_id": "$1448587796339796llxgv:matrix.org", "origin_server_ts": 1448587796996, "sender": "@davidar-test:matrix.org", "state_key": "@davidar-test:matrix.org", "type": "m.room.member", "unsigned": { "age": 62080155682, "replaces_state": "$144740433236715eKlxg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1487837692159vFEoo:www.kfeq.net", "membership": "leave", "origin_server_ts": 1487837692264, "sender": "@erik.qvam:www.kfeq.net", "state_key": "@erik.qvam:www.kfeq.net", "type": "m.room.member", "unsigned": { "age": 22830260414, "replaces_state": "$148691653646Olyrj:www.kfeq.net" } }, { "content": { "membership": "leave" }, "event_id": "$15082019001646049VjGuN:matrix.org", "membership": "leave", "origin_server_ts": 1508201900898, "sender": "@freenode_kiswe:matrix.org", "state_key": "@freenode_kiswe:matrix.org", "type": "m.room.member", "unsigned": { "age": 2466051780, "replaces_state": "$15082018991646034upqFk:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/EqIyXZHpogqNXVdEIBWTkKdl", "displayname": "Malte", "membership": "join" }, "event_id": "$1426716225812KtkVZ:matrix.org", "origin_server_ts": 1426716225580, "sender": "@malte:matrix.org", "state_key": "@malte:matrix.org", "type": "m.room.member", "unsigned": { "age": 83951727098, "replaces_state": "$1426713456768wbpYu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OAIoSkwXyTRBhyUzrsxDdMAd", "displayname": "Florent VIOLLEAU", "membership": "join" }, "event_id": "$145018411694807CyMcD:matrix.org", "origin_server_ts": 1450184116825, "sender": "@florentv:matrix.org", "state_key": "@florentv:matrix.org", "type": "m.room.member", "unsigned": { "age": 60483835853, "replaces_state": "$145018406794757kTOxs:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "qolop", "membership": "join" }, "event_id": "$14824317611056197rpdGV:matrix.org", "membership": "join", "origin_server_ts": 1482431761834, "sender": "@qolop:matrix.org", "state_key": "@qolop:matrix.org", "type": "m.room.member", "unsigned": { "age": 28236190844, "replaces_state": "$14824314061053976wHxeC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14827697310zLQiS:matrix.lopezjuan.com", "membership": "leave", "origin_server_ts": 1482769731755, "sender": "@victor:matrix.lopezjuan.com", "state_key": "@victor:matrix.lopezjuan.com", "type": "m.room.member", "unsigned": { "age": 27898220923, "prev_content": { "avatar_url": "mxc://matrix.lopezjuan.com/BkBtRCwHwIaxsmoMiRJxtuZJ", "displayname": "vlopez", "membership": "join" }, "prev_sender": "@victor:matrix.lopezjuan.com", "replaces_state": "$146468610935tbuiq:matrix.lopezjuan.com" } }, { "content": { "membership": "leave" }, "event_id": "$15030756762635999krIeq:matrix.org", "membership": "leave", "origin_server_ts": 1503075676968, "sender": "@carbans:matrix.org", "state_key": "@carbans:matrix.org", "type": "m.room.member", "unsigned": { "age": 7592275710, "replaces_state": "$1502914848360287wdxEN:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "sn1ckels", "membership": "join" }, "event_id": "$1472339484248192alBrd:matrix.org", "membership": "join", "origin_server_ts": 1472339484793, "sender": "@sn1ckels:matrix.org", "state_key": "@sn1ckels:matrix.org", "type": "m.room.member", "unsigned": { "age": 38328467885 } }, { "content": { "projects": [] }, "event_id": "$1446571175472318TfdYO:matrix.org", "origin_server_ts": 1446571175182, "sender": "@neb:matrix.org", "state_key": "", "type": "org.matrix.neb.plugin.jira.issues.tracking", "unsigned": { "age": 64096777496, "replaces_state": "$143504706719385BMzju:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 3465", "kind": "guest", "membership": "join" }, "event_id": "$1463148554359155NueSR:matrix.org", "membership": "join", "origin_server_ts": 1463148554962, "sender": "@3465:matrix.org", "state_key": "@3465:matrix.org", "type": "m.room.member", "unsigned": { "age": 47519397716 } }, { "content": { "membership": "leave" }, "event_id": "$15099448203198825CVijB:matrix.org", "membership": "leave", "origin_server_ts": 1509944820107, "sender": "@freenode_r3pek_:matrix.org", "state_key": "@freenode_r3pek_:matrix.org", "type": "m.room.member", "unsigned": { "age": 723132571, "replaces_state": "$15099131062439399dMTWQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15042718711cevmq:internet-portal.cz", "membership": "leave", "origin_server_ts": 1504271871438, "sender": "@vaclav.fiser:internet-portal.cz", "state_key": "@vaclav.fiser:internet-portal.cz", "type": "m.room.member", "unsigned": { "age": 6396081240, "prev_content": { "avatar_url": "mxc://internet-portal.cz/dkNgYDTpHfbJzDqGahyYmWGt", "displayname": "Václav Fišer", "membership": "join" }, "prev_sender": "@vaclav.fiser:internet-portal.cz", "replaces_state": "$150420593586mOFlI:internet-portal.cz" } }, { "content": { "avatar_url": "mxc://matrix.org/HYNxPEgfbjSXpliLWfxkTJZD#auto", "displayname": "TheRodent", "membership": "join" }, "event_id": "$14242191533999JfdHI:matrix.org", "membership": "join", "origin_server_ts": 1424219153121, "sender": "@rodent:matrix.org", "state_key": "@rodent:matrix.org", "type": "m.room.member", "unsigned": { "age": 86448799557 } }, { "content": { "avatar_url": null, "displayname": "Bob", "membership": "join" }, "event_id": "$15085697002415966XRolb:matrix.org", "membership": "join", "origin_server_ts": 1508569700735, "sender": "@bob555:matrix.org", "state_key": "@bob555:matrix.org", "type": "m.room.member", "unsigned": { "age": 2098251943 } }, { "content": { "membership": "leave" }, "event_id": "$1508469879939575twXCh:matrix.org", "membership": "leave", "origin_server_ts": 1508469879926, "sender": "@freenode_viq:matrix.org", "state_key": "@freenode_viq:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198072752, "replaces_state": "$15081893261475599eclGC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HzMOuARRUqMZzIEZbhldVVmf", "displayname": "unlmtd", "membership": "join" }, "event_id": "$1476869149616726aiMJR:matrix.org", "membership": "join", "origin_server_ts": 1476869149782, "sender": "@unlmtd:matrix.org", "state_key": "@unlmtd:matrix.org", "type": "m.room.member", "unsigned": { "age": 33798802896, "replaces_state": "$147681133398570PFMGD:matrix.org" } }, { "content": { "avatar_url": "mxc://companioncube.me/JmmpDBnayuoKSLBPkaYKGVmz", "displayname": "CompanionCube", "membership": "join" }, "event_id": "$1480717132102teicN:companioncube.me", "membership": "join", "origin_server_ts": 1480717132585, "sender": "@companioncube:companioncube.me", "state_key": "@companioncube:companioncube.me", "type": "m.room.member", "unsigned": { "age": 29950820093, "prev_content": { "avatar_url": null, "displayname": "CompanionCube", "membership": "join" }, "prev_sender": "@companioncube:companioncube.me", "replaces_state": "$145471245530WuEXP:companioncube.me" } }, { "content": { "avatar_url": null, "displayname": "quickquesiton1231231214", "membership": "join" }, "event_id": "$15029975281732790jnzqu:matrix.org", "membership": "join", "origin_server_ts": 1502997528519, "sender": "@quickquesiton1231231214:matrix.org", "state_key": "@quickquesiton1231231214:matrix.org", "type": "m.room.member", "unsigned": { "age": 7670424159 } }, { "content": { "avatar_url": "mxc://berigora.net/DVcwKWVnwgPqERZtxJwZEfIX", "displayname": "kythyria", "membership": "join" }, "event_id": "$1499896370463hckFW:berigora.net", "membership": "join", "origin_server_ts": 1499896370205, "sender": "@kythyria:berigora.net", "state_key": "@kythyria:berigora.net", "type": "m.room.member", "unsigned": { "age": 10771582473, "prev_content": { "avatar_url": "mxc://berigora.net/HaWmMiTGeKNWcxEBGQEcyITd", "displayname": "kythyria", "membership": "join" }, "prev_sender": "@kythyria:berigora.net", "replaces_state": "$14738975622538dSAVU:berigora.net" } }, { "content": { "avatar_url": null, "displayname": "trantion", "membership": "join" }, "event_id": "$1486183323725173HrwSF:matrix.org", "membership": "join", "origin_server_ts": 1486183323748, "sender": "@trantion:matrix.org", "state_key": "@trantion:matrix.org", "type": "m.room.member", "unsigned": { "age": 24484628930, "replaces_state": "$1486183298725054vWebv:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1459208066421017taJGu:matrix.org", "membership": "join", "origin_server_ts": 1459208066317, "sender": "@zuper:matrix.org", "state_key": "@zuper:matrix.org", "type": "m.room.member", "unsigned": { "age": 51459886361 } }, { "content": { "avatar_url": "mxc://matrix.org/nUfjBLTtXGIXKzPQlhtKKkyr", "displayname": "Greg", "membership": "join" }, "event_id": "$14262037581057lrVxI:matrix.org", "origin_server_ts": 1426203758814, "sender": "@taoeffect:matrix.org", "state_key": "@taoeffect:matrix.org", "type": "m.room.member", "unsigned": { "age": 84464193864, "replaces_state": "$14262035861050dKpFU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QxgkXCYRPDIqzOGwkHbPPyky", "displayname": "mubot", "membership": "join" }, "event_id": "$14973491198460ihlmS:matrix.org", "membership": "join", "origin_server_ts": 1497349119980, "sender": "@mubot:matrix.org", "state_key": "@mubot:matrix.org", "type": "m.room.member", "unsigned": { "age": 13318832698, "replaces_state": "$1449237118525246WpPQk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "rmookhram", "membership": "join" }, "event_id": "$15002272341763076lgkup:matrix.org", "membership": "join", "origin_server_ts": 1500227234020, "sender": "@rmookhram:matrix.org", "state_key": "@rmookhram:matrix.org", "type": "m.room.member", "unsigned": { "age": 10440718658 } }, { "content": { "avatar_url": "mxc://matrix.org/ogVNGegTBPWrWLLrolGLuneK", "displayname": "eyecreate", "membership": "join" }, "event_id": "$15036050433211215qtMju:matrix.org", "membership": "join", "origin_server_ts": 1503605043956, "sender": "@eyecreate:matrix.org", "state_key": "@eyecreate:matrix.org", "type": "m.room.member", "unsigned": { "age": 7062908722 } }, { "content": { "membership": "leave" }, "event_id": "$14956631542024228RXnoJ:matrix.org", "membership": "leave", "origin_server_ts": 1495663154129, "sender": "@freenode_one|2:matrix.org", "state_key": "@freenode_one|2:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004798549, "replaces_state": "$14755687042071560NPnDS:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14798402421014541Nobtc:matrix.org", "membership": "leave", "origin_server_ts": 1479840242193, "sender": "@gitter_roblabla:matrix.org", "state_key": "@gitter_roblabla:matrix.org", "type": "m.room.member", "unsigned": { "age": 30827710485, "replaces_state": "$1464691620456071PLRLY:matrix.org" } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QGtlZ2FuOm1hdHJpeC5vcmcgZMiBXLrEZiQnSvyXcrdautg.aW1hZ2UvanBlZw==.jpeg", "displayname": "Kegan", "membership": "join" }, "event_id": "$1416420918249zVeZL:matrix.org", "membership": "join", "origin_server_ts": 1411137391516, "sender": "@kegan:matrix.org", "state_key": "@kegan:matrix.org", "stream_ordering": 6875, "type": "m.room.member", "unsigned": { "age": 94247034429 } }, { "content": { "membership": "leave" }, "event_id": "$14393078879334uSmku:matrix.org", "origin_server_ts": 1439307887258, "sender": "@aaron:matrix.org", "state_key": "@aaron:matrix.org", "type": "m.room.member", "unsigned": { "age": 71360065420, "replaces_state": "$14392962774171hsohJ:matrix.org" } }, { "content": { "avatar_url": "mxc://awful.systems/OllplRFoxdUPUyeKzHQLuYDi", "displayname": "atrociously", "membership": "join" }, "event_id": "$149553336940KqCPO:awful.systems", "membership": "join", "origin_server_ts": 1495533369780, "sender": "@rociously:awful.systems", "state_key": "@rociously:awful.systems", "type": "m.room.member", "unsigned": { "age": 15134582898, "prev_content": { "avatar_url": null, "displayname": "atrociously", "membership": "join" }, "prev_sender": "@rociously:awful.systems", "replaces_state": "$14949965312LwVkl:awful.systems" } }, { "content": { "ban": 5, "events": {}, "events_default": 0, "invite": 0, "kick": 5, "redact": 20, "state_default": 10, "users": { "@:jki.re": 50, "@Amandine:matrix.org": 50, "@LeoNerd:matrix.org": 50, "@Mjark:matrix.org": 50, "@dave:matrix.org": 50, "@erikj:jki.re": 50, "@erikj:matrix.org": 50, "@kegan:matrix.org": 50, "@matthew:matrix.org": 50, "@neb:matrix.org": 50 }, "users_default": 0 }, "event_id": "$145191668846IYNfJ:jki.re", "origin_server_ts": 1451916688385, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 58751264293, "replaces_state": "$14482710929PBzzW:jki.re" } }, { "content": { "membership": "leave" }, "event_id": "$15004024781916180GlSkw:matrix.org", "membership": "leave", "origin_server_ts": 1500402478672, "sender": "@rodarima:matrix.org", "state_key": "@rodarima:matrix.org", "type": "m.room.member", "unsigned": { "age": 10265474006, "replaces_state": "$14676261772722488JBbNZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632262025849ixzXX:matrix.org", "membership": "leave", "origin_server_ts": 1495663226939, "sender": "@freenode_kegsay:matrix.org", "state_key": "@freenode_kegsay:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004725739, "replaces_state": "$1466512091805516VPlTV:matrix.org" } }, { "content": { "avatar_url": "mxc://disroot.org/bUzDRoJVMvQmzkXHnSUjcjsm", "displayname": "Dark Coffee", "membership": "join" }, "event_id": "$1487430360756nhpzs:disroot.org", "membership": "join", "origin_server_ts": 1487430360719, "sender": "@coffee:disroot.org", "state_key": "@coffee:disroot.org", "type": "m.room.member", "unsigned": { "age": 23237591959, "prev_content": { "avatar_url": "mxc://disroot.org/bUzDRoJVMvQmzkXHnSUjcjsm", "displayname": "Evil Coffee", "membership": "join" }, "prev_sender": "@coffee:disroot.org", "replaces_state": "$1487326786141veDGw:disroot.org" } }, { "content": { "avatar_url": null, "displayname": "lfaraone (IRC)", "membership": "join" }, "event_id": "$15019622083123845ipScP:matrix.org", "membership": "join", "origin_server_ts": 1501962208932, "sender": "@freenode_lfaraone:matrix.org", "state_key": "@freenode_lfaraone:matrix.org", "type": "m.room.member", "unsigned": { "age": 8705743746 } }, { "content": { "avatar_url": "mxc://matrix.org/NGtSCUTVynmVdCiwHuPrVxeB#auto", "displayname": "hiuhsdfin", "membership": "join" }, "event_id": "$14302526751366CsPnc:matrix.org", "membership": "join", "origin_server_ts": 1430252675845, "sender": "@hiuhsdfin:matrix.org", "state_key": "@hiuhsdfin:matrix.org", "type": "m.room.member", "unsigned": { "age": 80415276833 } }, { "content": { "avatar_url": null, "displayname": "Guest 156235", "kind": "guest", "membership": "join" }, "event_id": "$14888431742205939QOgax:matrix.org", "membership": "join", "origin_server_ts": 1488843174475, "sender": "@156235:matrix.org", "state_key": "@156235:matrix.org", "type": "m.room.member", "unsigned": { "age": 21824778203 } }, { "content": { "avatar_url": "mxc://matrix.org/QKIbcemBAPSVBDfqNVlWuWKy", "displayname": "Scott Barstow", "membership": "join" }, "event_id": "$14284383793963AmxXe:matrix.org", "origin_server_ts": 1428438379085, "sender": "@scottbarstow:matrix.org", "state_key": "@scottbarstow:matrix.org", "type": "m.room.member", "unsigned": { "age": 82229573593, "replaces_state": "$14280748397894DBUYP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448223198881rFgHb:matrix.org", "membership": "leave", "origin_server_ts": 1509944822833, "sender": "@freenode_pensil:matrix.org", "state_key": "@freenode_pensil:matrix.org", "type": "m.room.member", "unsigned": { "age": 723129845, "replaces_state": "$15090541333216409Mievx:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632512026476BACdf:matrix.org", "membership": "leave", "origin_server_ts": 1495663251944, "sender": "@freenode_webrtcdemo:matrix.org", "state_key": "@freenode_webrtcdemo:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004700734, "replaces_state": "$144984934288943KGTvX:matrix.org" } }, { "content": { "avatar_url": "mxc://cybre.space/pvteaQkvZtNqZEFCQoZSurbk", "displayname": "nightpool", "membership": "join" }, "event_id": "$1493669084923Takaa:cybre.space", "membership": "join", "origin_server_ts": 1493669084402, "sender": "@nightpool:cybre.space", "state_key": "@nightpool:cybre.space", "type": "m.room.member", "unsigned": { "age": 16998868276 } }, { "content": { "membership": "leave" }, "event_id": "$15051468432359775dqvmK:matrix.org", "membership": "leave", "origin_server_ts": 1505146843631, "sender": "@zhangjie:matrix.org", "state_key": "@zhangjie:matrix.org", "type": "m.room.member", "unsigned": { "age": 5521109047, "replaces_state": "$15050895491758388YrbSD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14743766173708tZzii:matrix.org", "membership": "leave", "origin_server_ts": 1474376617405, "sender": "@slack_leonerd:matrix.org", "state_key": "@slack_leonerd:matrix.org", "type": "m.room.member", "unsigned": { "age": 36291335273, "replaces_state": "$147334798536758mNQXZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wQipUeDNkbKKPCRHhIzgRyhD", "displayname": "Hexafox", "membership": "join" }, "event_id": "$15046904302096930zLnVy:matrix.org", "membership": "join", "origin_server_ts": 1504690430012, "sender": "@winterfox:matrix.org", "state_key": "@winterfox:matrix.org", "type": "m.room.member", "unsigned": { "age": 5977522666, "replaces_state": "$1504345333482422InHEZ:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612735042OxzZD:matrix.org", "origin_server_ts": 1429261273378, "sender": "@kegan:matrix.org", "state_key": "@irc_joachimre:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406679300, "replaces_state": "$1416820079447AYudA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1488004018801883JAFni:matrix.org", "membership": "leave", "origin_server_ts": 1488004018130, "sender": "@sean_:matrix.org", "state_key": "@sean_:matrix.org", "type": "m.room.member", "unsigned": { "age": 22663934548, "replaces_state": "$1488003060798700mCfmn:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632322025980ifnsA:matrix.org", "membership": "leave", "origin_server_ts": 1495663232426, "sender": "@freenode_superdump:matrix.org", "state_key": "@freenode_superdump:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004720252, "replaces_state": "$1459242754454635yQEWF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/MDFhxQTfbfwCXzDEtKEuYStg", "displayname": "Evil eta", "membership": "join" }, "event_id": "$1491916477147879jVABN:matrix.org", "membership": "join", "origin_server_ts": 1491916477609, "sender": "@eeeeeta9:matrix.org", "state_key": "@eeeeeta9:matrix.org", "type": "m.room.member", "unsigned": { "age": 18751475069, "replaces_state": "$1491330682169569OCenh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/kiaTHsHYpDLlkzhghrmclfwi", "displayname": "phbucher", "membership": "join" }, "event_id": "$147611726825986UgODz:matrix.org", "membership": "join", "origin_server_ts": 1476117268613, "sender": "@phbucher:matrix.org", "state_key": "@phbucher:matrix.org", "type": "m.room.member", "unsigned": { "age": 34550684065, "replaces_state": "$14761014481133559QitTt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1472606679100305LAkUk:matrix.org", "membership": "join", "origin_server_ts": 1472606679703, "sender": "@appservice-irc:matrix.org", "state_key": "@appservice-irc:matrix.org", "type": "m.room.member", "unsigned": { "age": 38061272975, "replaces_state": "$147260462697797wCuwD:matrix.org" } }, { "content": { "avatar_url": "mxc://damnesdelinter.net/nonRERzFPmUHoxApgEgjPQCi", "displayname": "ratvachefolle", "membership": "join" }, "event_id": "$149861020723ufeno:damnesdelinter.net", "membership": "join", "origin_server_ts": 1498610207442, "sender": "@ratvachefolle:damnesdelinter.net", "state_key": "@ratvachefolle:damnesdelinter.net", "type": "m.room.member", "unsigned": { "age": 12057745236, "replaces_state": "$14979931261TERqT:damnesdelinter.net" } }, { "content": { "membership": "leave" }, "event_id": "$15033112334920249tRymq:matrix.org", "membership": "leave", "origin_server_ts": 1503311233380, "sender": "@freenode_kostas31:matrix.org", "state_key": "@freenode_kostas31:matrix.org", "type": "m.room.member", "unsigned": { "age": 7356719298, "replaces_state": "$15033110094918007kRUfI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "HaBaLeS", "membership": "join" }, "event_id": "$148934987725AtNTm:matrix.habales.de", "origin_server_ts": 1489349877084, "sender": "@falko:matrix.habales.de", "state_key": "@falko:matrix.habales.de", "type": "m.room.member", "unsigned": { "age": 14 } }, { "content": { "membership": "leave" }, "event_id": "$14918750164HbHuo:dependable.space", "membership": "leave", "origin_server_ts": 1491875016252, "sender": "@christian:dependable.space", "state_key": "@christian:dependable.space", "type": "m.room.member", "unsigned": { "age": 18792936426, "replaces_state": "$149184121665YRvWX:dependable.space" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145397382794158SdULU:matrix.org", "membership": "join", "origin_server_ts": 1453973827748, "sender": "@luca:matrix.org", "state_key": "@luca:matrix.org", "type": "m.room.member", "unsigned": { "age": 56694124930 } }, { "content": { "avatar_url": "mxc://matrix.org/RadzPwovtnTwzoFmavzktrNm", "displayname": "clintm", "membership": "join" }, "event_id": "$15098468451757336yqMPX:matrix.org", "membership": "join", "origin_server_ts": 1509846845434, "sender": "@clintm:matrix.org", "state_key": "@clintm:matrix.org", "type": "m.room.member", "unsigned": { "age": 821107244, "replaces_state": "$14232031852048itxzh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZTcHynJrkhSpgAinFkziKvUu", "displayname": "Shrike (Matrix Account)", "membership": "join" }, "event_id": "$14949595941061047OijYq:matrix.org", "membership": "join", "origin_server_ts": 1494959594020, "sender": "@Shrike:matrix.org", "state_key": "@Shrike:matrix.org", "type": "m.room.member", "unsigned": { "age": 15708358658, "replaces_state": "$1494888709464562ZYASe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Hannah", "membership": "join" }, "event_id": "$14960856871diYBz:rittich.net", "origin_server_ts": 1496085689069, "sender": "@hannah:rittich.net", "state_key": "@hannah:rittich.net", "type": "m.room.member", "unsigned": { "age": 35 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145509370653892QMCjM:matrix.org", "origin_server_ts": 1455093706158, "sender": "@george1511:matrix.org", "state_key": "@george1511:matrix.org", "type": "m.room.member", "unsigned": { "age": 55574246520 } }, { "content": { "membership": "leave" }, "event_id": "$14956631702024570CPeea:matrix.org", "membership": "leave", "origin_server_ts": 1495663170198, "sender": "@freenode_L-----D:matrix.org", "state_key": "@freenode_L-----D:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004782480, "replaces_state": "$1481252327165640mKdZl:matrix.org" } }, { "content": { "projects": [ "matrix-org/synapse", "matrix-org/syutil", "matrix-org/sydent" ] }, "event_id": "$1416420916528LUXWH:matrix.org", "origin_server_ts": 1411133818335, "sender": "@neb:matrix.org", "state_key": "", "stream_ordering": 6770, "type": "neb.plugin.github.projects.tracking", "unsigned": { "age": 94247036150 } }, { "content": { "membership": "leave" }, "event_id": "$1475059458479633DKJIB:matrix.org", "membership": "leave", "origin_server_ts": 1475059458964, "sender": "@jonixas:matrix.org", "state_key": "@jonixas:matrix.org", "type": "m.room.member", "unsigned": { "age": 35608493714, "replaces_state": "$1474670018386330dMPZv:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Bhai", "membership": "join" }, "event_id": "$14671826671975457SoRIR:matrix.org", "membership": "join", "origin_server_ts": 1467182667646, "sender": "@megubhai:matrix.org", "state_key": "@megubhai:matrix.org", "type": "m.room.member", "unsigned": { "age": 43485285032, "replaces_state": "$14671825071975257zBEFk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632502026432MuEKg:matrix.org", "membership": "leave", "origin_server_ts": 1495663250541, "sender": "@freenode_VShell:matrix.org", "state_key": "@freenode_VShell:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004702137, "replaces_state": "$147345403783736ZWjMU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14205344124946GfymH:matrix.org", "origin_server_ts": 1420534412940, "sender": "@marcel:matrix.org", "state_key": "@marcel:matrix.org", "type": "m.room.member", "unsigned": { "age": 90133539738, "replaces_state": "$14205342164942MYPnJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14965680833416qgxqN:matrix.eclabs.de", "membership": "leave", "origin_server_ts": 1496568083763, "sender": "@MTRNord:matrix.eclabs.de", "state_key": "@MTRNord:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 14099868915, "prev_content": { "avatar_url": "mxc://matrix.eclabs.de/jmpGtDurboZtbLKMSnsQAupn", "displayname": "MTRNord", "membership": "join" }, "prev_sender": "@MTRNord:matrix.eclabs.de", "replaces_state": "$149580323726208XydFy:matrix.eclabs.de" } }, { "content": { "avatar_url": null, "displayname": "orkun", "membership": "join" }, "event_id": "$1495715242135336hykQi:matrix.org", "membership": "join", "origin_server_ts": 1495715242242, "sender": "@orkun:matrix.org", "state_key": "@orkun:matrix.org", "type": "m.room.member", "unsigned": { "age": 14952710436 } }, { "content": { "avatar_url": "mxc://matrix.org/rcTpvIkIMSRhohvdqKzPrpai", "displayname": "equinox", "membership": "join" }, "event_id": "$14979273021442405lImmZ:matrix.org", "membership": "join", "origin_server_ts": 1497927302410, "sender": "@equinox:matrix.org", "state_key": "@equinox:matrix.org", "type": "m.room.member", "unsigned": { "age": 12740650268, "replaces_state": "$14979267271389301cIPFa:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Corion", "membership": "join" }, "event_id": "$1416420910606lQtFd:matrix.org", "membership": "join", "origin_server_ts": 1409926547451, "sender": "@Corion:matrix.org", "state_key": "@Corion:matrix.org", "stream_ordering": 3499, "type": "m.room.member", "unsigned": { "age": 94247042072 } }, { "content": { "avatar_url": null, "displayname": "tvslut", "membership": "join" }, "event_id": "$1507755245172072nFxnC:matrix.org", "membership": "join", "origin_server_ts": 1507755245803, "sender": "@tvslut:matrix.org", "state_key": "@tvslut:matrix.org", "type": "m.room.member", "unsigned": { "age": 2912706875 } }, { "content": { "membership": "leave" }, "event_id": "$146350799449673HKFbI:matrix.org", "membership": "leave", "origin_server_ts": 1463507994835, "sender": "@delitrem:matrix.org", "state_key": "@delitrem:matrix.org", "type": "m.room.member", "unsigned": { "age": 47159957843, "replaces_state": "$143940527710428VmXDs:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nKqxQzIQrkkVxeWkZTrqfxQg", "displayname": "dcg_mx", "membership": "join" }, "event_id": "$1471761986248259MbfkG:matrix.org", "membership": "join", "origin_server_ts": 1471761986383, "sender": "@sbts:matrix.org", "state_key": "@sbts:matrix.org", "type": "m.room.member", "unsigned": { "age": 38905966295, "replaces_state": "$145530139446103fqfqw:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612995052KnDkd:matrix.org", "origin_server_ts": 1429261299599, "sender": "@kegan:matrix.org", "state_key": "@irc_M-erikj:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406653079, "replaces_state": "$1419260502375cNtIK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1497740116269176thTLR:matrix.org", "membership": "leave", "origin_server_ts": 1497740116784, "sender": "@schroeffu:matrix.org", "state_key": "@schroeffu:matrix.org", "type": "m.room.member", "unsigned": { "age": 12927835894, "replaces_state": "$1477481790269347FxbJU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "DP FG", "membership": "join" }, "event_id": "$145435399620609ShsnR:matrix.org", "membership": "join", "origin_server_ts": 1454353996404, "sender": "@dpfg:matrix.org", "state_key": "@dpfg:matrix.org", "type": "m.room.member", "unsigned": { "age": 56313956274 } }, { "content": { "avatar_url": null, "displayname": "moeller", "membership": "join" }, "event_id": "$148941887930THakG:matrix.vivai.de", "membership": "join", "origin_server_ts": 1489418879264, "sender": "@moeller:matrix.vivai.de", "state_key": "@moeller:matrix.vivai.de", "type": "m.room.member", "unsigned": { "age": 12369126 } }, { "content": { "membership": "leave" }, "event_id": "$1497751992365957jnPgt:matrix.org", "membership": "leave", "origin_server_ts": 1497751992425, "sender": "@joenio:matrix.org", "state_key": "@joenio:matrix.org", "type": "m.room.member", "unsigned": { "age": 12915960253, "replaces_state": "$1496815701509314udGiw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1504058908383TQDuk:matrix.tgprofessionals.com", "membership": "leave", "origin_server_ts": 1504058908781, "sender": "@Leetpwner:matrix.tgprofessionals.com", "state_key": "@Leetpwner:matrix.tgprofessionals.com", "type": "m.room.member", "unsigned": { "age": 6609043897, "prev_content": { "avatar_url": "mxc://matrix.tgprofessionals.com/hZLlovNUvcykyjzJbYCpOJhi", "displayname": "Ray", "membership": "join" }, "prev_sender": "@Leetpwner:matrix.tgprofessionals.com", "replaces_state": "$1504058860382gwyJY:matrix.tgprofessionals.com" } }, { "content": { "avatar_url": "mxc://matrix.org/LgsApHDgrilopIZbDfjWGlEX#auto", "displayname": null, "membership": "join" }, "event_id": "$144984911988434ljjza:matrix.org", "origin_server_ts": 1449849119732, "sender": "@perfectlylegalonion:matrix.org", "state_key": "@perfectlylegalonion:matrix.org", "type": "m.room.member", "unsigned": { "age": 60818832946, "replaces_state": "$1443748761133435jSmTh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jnaeff", "membership": "join" }, "event_id": "$14803256871158965LPjuj:matrix.org", "membership": "join", "origin_server_ts": 1480325687836, "sender": "@jnaeff:matrix.org", "state_key": "@jnaeff:matrix.org", "type": "m.room.member", "unsigned": { "age": 30342264842, "replaces_state": "$1451763561722793NtpOu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/WySOOcvLSjhXVBbfDqOFuelT", "displayname": "Andrew", "membership": "join" }, "event_id": "$1475132190822708giRrq:matrix.org", "membership": "join", "origin_server_ts": 1475132190008, "sender": "@AndrewGaspar:matrix.org", "state_key": "@AndrewGaspar:matrix.org", "type": "m.room.member", "unsigned": { "age": 35535762670, "replaces_state": "$1475129110816579BfbFq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145562475865528iLLnH:matrix.org", "origin_server_ts": 1455624758683, "sender": "@K8te:matrix.org", "state_key": "@K8te:matrix.org", "type": "m.room.member", "unsigned": { "age": 55043193995, "replaces_state": "$145491982751986ruwyH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.shamilk.me/fFKqULUGPLHFUhwKTGyoYHeO", "displayname": "Shamil", "membership": "join" }, "event_id": "$149590901373ATtpY:matrix.shamilk.me", "membership": "join", "origin_server_ts": 1495909013418, "sender": "@shamil:matrix.shamilk.me", "state_key": "@shamil:matrix.shamilk.me", "type": "m.room.member", "unsigned": { "age": 14758939260, "prev_content": { "avatar_url": "mxc://matrix.shamilk.me/fFKqULUGPLHFUhwKTGyoYHeO", "displayname": "Shamil  ", "membership": "join" }, "prev_sender": "@shamil:matrix.shamilk.me", "replaces_state": "$149590899144rLwbd:matrix.shamilk.me" } }, { "content": { "avatar_url": "mxc://matrix.org/VHOnwiExxEytXDkWWIUgnOaY", "displayname": "Thomas", "membership": "join" }, "event_id": "$15028821923018150ZrBTL:matrix.org", "membership": "join", "origin_server_ts": 1502882192060, "sender": "@Odilbert:matrix.org", "state_key": "@Odilbert:matrix.org", "type": "m.room.member", "unsigned": { "age": 7785760618 } }, { "content": { "avatar_url": null, "displayname": "jcgruenhage [m]", "membership": "join" }, "event_id": "$14950317991661091hoKAA:matrix.org", "membership": "join", "origin_server_ts": 1495031799965, "sender": "@jcgruenhage:matrix.org", "state_key": "@jcgruenhage:matrix.org", "type": "m.room.member", "unsigned": { "age": 15636152713, "replaces_state": "$1493105876757357ytpqD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1506352754115458zDoZg:matrix.org", "membership": "leave", "origin_server_ts": 1506352754073, "sender": "@Krombel:matrix.org", "state_key": "@Krombel:matrix.org", "type": "m.room.member", "unsigned": { "age": 4315198605, "replaces_state": "$150635099185058GQGhY:matrix.org" } }, { "content": { "avatar_url": "mxc://horsein.space/jfxgxGIThDWadiuORQjVjoiY", "displayname": "st4t3", "membership": "join" }, "event_id": "$1506981763215PObHV:horsein.space", "origin_server_ts": 1506981763164, "sender": "@st4t3:horsein.space", "state_key": "@st4t3:horsein.space", "type": "m.room.member", "unsigned": { "age": 14 } }, { "content": { "membership": "leave" }, "event_id": "$147147428465316HakLh:matrix.org", "membership": "leave", "origin_server_ts": 1471474284995, "sender": "@ymartinez:matrix.org", "state_key": "@ymartinez:matrix.org", "type": "m.room.member", "unsigned": { "age": 39193667683, "replaces_state": "$147147427665298GwSXO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149314699211402ORfWe:freigeist.io", "membership": "leave", "origin_server_ts": 1493146992569, "sender": "@hugo:freigeist.io", "state_key": "@hugo:freigeist.io", "type": "m.room.member", "unsigned": { "age": 17520960109, "replaces_state": "$14810254652fFNHP:freigeist.io" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$14627996123970OYXEe:matrix.org", "membership": "leave", "origin_server_ts": 1462799612652, "sender": "@8266:matrix.org", "state_key": "@8266:matrix.org", "type": "m.room.member", "unsigned": { "age": 47868340026, "replaces_state": "$14627995533882HONhR:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YScaCJIiPLwCgTLAWgSiVjWp", "displayname": "crw", "membership": "join" }, "event_id": "$14995522581162404nvfJl:matrix.org", "membership": "join", "origin_server_ts": 1499552258634, "sender": "@crw:matrix.org", "state_key": "@crw:matrix.org", "type": "m.room.member", "unsigned": { "age": 11115694044 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14866447503247658yTuLU:matrix.org", "membership": "join", "origin_server_ts": 1486644750114, "sender": "@diamaths:matrix.org", "state_key": "@diamaths:matrix.org", "type": "m.room.member", "unsigned": { "age": 24023202564 } }, { "content": { "avatar_url": null, "displayname": "nwf", "membership": "join" }, "event_id": "$14676068392691644tnIrc:matrix.org", "membership": "join", "origin_server_ts": 1467606839798, "sender": "@nwf:matrix.org", "state_key": "@nwf:matrix.org", "type": "m.room.member", "unsigned": { "age": 43061112880 } }, { "content": { "membership": "leave" }, "event_id": "$1499882597473243UmNNh:matrix.org", "membership": "leave", "origin_server_ts": 1499882597773, "sender": "@vorpal:matrix.org", "state_key": "@vorpal:matrix.org", "type": "m.room.member", "unsigned": { "age": 10785354905, "replaces_state": "$14992656694973593hRbcP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "neiljp", "membership": "join" }, "event_id": "$14887577601648198FmCCr:matrix.org", "membership": "join", "origin_server_ts": 1488757760581, "sender": "@neiljp:matrix.org", "state_key": "@neiljp:matrix.org", "type": "m.room.member", "unsigned": { "age": 21910192097 } }, { "content": { "avatar_url": "mxc://matrix.org/ozdAuGMnDbBeLHGphwtYAqQj", "displayname": "davidcrzxp", "membership": "join" }, "event_id": "$15020778204166674pgXIN:matrix.org", "membership": "join", "origin_server_ts": 1502077820175, "sender": "@molida:matrix.org", "state_key": "@molida:matrix.org", "type": "m.room.member", "unsigned": { "age": 8590132503 } }, { "content": { "avatar_url": null, "displayname": "PrasannaEppa", "membership": "join" }, "event_id": "$14919966581002436MLgJF:matrix.org", "membership": "join", "origin_server_ts": 1491996658380, "sender": "@PrasannaEppa:matrix.org", "state_key": "@PrasannaEppa:matrix.org", "type": "m.room.member", "unsigned": { "age": 18671294298 } }, { "content": { "membership": "leave" }, "event_id": "$1489081414194538ztXfU:matrix.org", "membership": "leave", "origin_server_ts": 1489081414650, "sender": "@Eli:matrix.org", "state_key": "@Eli:matrix.org", "type": "m.room.member", "unsigned": { "age": 21586538028, "replaces_state": "$14869046501255947LgvrV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149074646849sSWDY:roikier.media", "membership": "leave", "origin_server_ts": 1490746468366, "sender": "@roikiermedia:roikier.media", "state_key": "@roikiermedia:roikier.media", "type": "m.room.member", "unsigned": { "age": 3665459, "prev_content": { "avatar_url": "mxc://roikier.media/ZKvHjOUYMOxvEEBburlGPYSJ", "displayname": "roikiermedia", "membership": "join" }, "prev_sender": "@roikiermedia:roikier.media", "replaces_state": "$149064771921pLGel:roikier.media" } }, { "content": { "avatar_url": "mxc://matrix.org/GokFBClfNCeccBktBeVbvNmg", "displayname": "whoops", "membership": "join" }, "event_id": "$144199675413190jxWQN:matrix.org", "origin_server_ts": 1441996754485, "sender": "@whoops:matrix.org", "state_key": "@whoops:matrix.org", "type": "m.room.member", "unsigned": { "age": 68671198193 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$149735985347303xhwhs:matrix.org", "membership": "join", "origin_server_ts": 1497359853800, "sender": "@jithinsri:matrix.org", "state_key": "@jithinsri:matrix.org", "type": "m.room.member", "unsigned": { "age": 13308098878 } }, { "content": { "membership": "leave" }, "event_id": "$1504468569163266FGfGL:matrix.org", "membership": "leave", "origin_server_ts": 1504468569306, "sender": "@freenode_foo1:matrix.org", "state_key": "@freenode_foo1:matrix.org", "type": "m.room.member", "unsigned": { "age": 6199383372, "replaces_state": "$1504468414161255nfpzI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "pokvo", "membership": "join" }, "event_id": "$1488349054388951CFCGK:matrix.org", "membership": "join", "origin_server_ts": 1488349054664, "sender": "@pokvo:matrix.org", "state_key": "@pokvo:matrix.org", "type": "m.room.member", "unsigned": { "age": 22318898014 } }, { "content": { "avatar_url": null, "displayname": "dovf", "membership": "join" }, "event_id": "$1469131100224341IyAyz:matrix.org", "membership": "join", "origin_server_ts": 1469131100044, "sender": "@dovf:matrix.org", "state_key": "@dovf:matrix.org", "type": "m.room.member", "unsigned": { "age": 41536852634 } }, { "content": { "avatar_url": null, "displayname": "asthma", "membership": "join" }, "event_id": "$150806485216wgwgR:hris.to", "origin_server_ts": 1508064972920, "sender": "@mihaylov:hris.to", "state_key": "@mihaylov:hris.to", "type": "m.room.member", "unsigned": { "age": 27 } }, { "content": { "membership": "leave" }, "event_id": "$1499450940231846RhIGw:matrix.org", "membership": "leave", "origin_server_ts": 1499450940679, "sender": "@freenode_bit_lySLH2uSZHed:matrix.org", "state_key": "@freenode_bit_lySLH2uSZHed:matrix.org", "type": "m.room.member", "unsigned": { "age": 11217011999, "replaces_state": "$1499450923231594taCfr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 154599", "kind": "guest", "membership": "join" }, "event_id": "$1487285222146525feJty:matrix.org", "membership": "join", "origin_server_ts": 1487285222881, "sender": "@154599:matrix.org", "state_key": "@154599:matrix.org", "type": "m.room.member", "unsigned": { "age": 23382729797 } }, { "content": { "avatar_url": "mxc://matrix.org/FCVPWYJUNLBDdUHOVIyLLzsA", "displayname": "Rami", "membership": "join" }, "event_id": "$1499805796563718xYWJr:matrix.org", "membership": "join", "origin_server_ts": 1499805796982, "sender": "@rami:matrix.org", "state_key": "@rami:matrix.org", "type": "m.room.member", "unsigned": { "age": 10862155696 } }, { "content": { "avatar_url": "mxc://matrix.org/HzoyHwfYqBmvHpiYOgMsBrbE", "displayname": "Humanist1996", "membership": "join" }, "event_id": "$14928827231109643mSAnd:matrix.org", "membership": "join", "origin_server_ts": 1492882723260, "sender": "@Anusmith:matrix.org", "state_key": "@Anusmith:matrix.org", "type": "m.room.member", "unsigned": { "age": 17785229418 } }, { "content": { "membership": "leave" }, "event_id": "$14784328332428145qDMVy:matrix.org", "membership": "leave", "origin_server_ts": 1478432833184, "sender": "@adde9708:matrix.org", "state_key": "@adde9708:matrix.org", "type": "m.room.member", "unsigned": { "age": 32235119494, "replaces_state": "$14784326892427874XaHxW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1416420914478UxsOL:matrix.org", "membership": "leave", "origin_server_ts": 1410999403054, "sender": "@tushar:matrix.org", "state_key": "@tushar:matrix.org", "stream_ordering": 5926, "type": "m.room.member", "unsigned": { "age": 94247038200 } }, { "content": { "avatar_url": "mxc://matrix.org/LLrgDzNBwIoERsLnhGKrfxIF", "displayname": "bob2", "membership": "join" }, "event_id": "$14247048625639Aqlqz:matrix.org", "origin_server_ts": 1424704862420, "sender": "@ylecollen3:matrix.org", "state_key": "@ylecollen3:matrix.org", "type": "m.room.member", "unsigned": { "age": 85963090258 } }, { "content": { "avatar_url": "mxc://matrix.org/BiUdhwIuLivtBJQybyblCZZK", "displayname": "FBosman", "membership": "join" }, "event_id": "$149010794364839QQuDy:matrix.org", "membership": "join", "origin_server_ts": 1490107943796, "sender": "@FBosman:matrix.org", "state_key": "@FBosman:matrix.org", "type": "m.room.member", "unsigned": { "age": 20560008882 } }, { "content": { "avatar_url": "mxc://matrix.org/XcoBYiEebcHikyXHjagpCRJv", "displayname": "@davidar:matrix.org", "membership": "join" }, "event_id": "$14912944702788235bAkhQ:matrix.org", "membership": "join", "origin_server_ts": 1491294470535, "sender": "@davidar:matrix.org", "state_key": "@davidar:matrix.org", "type": "m.room.member", "unsigned": { "age": 19373482143, "replaces_state": "$145622048733533UxpDb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15058229263203573VpVRi:matrix.org", "membership": "join", "origin_server_ts": 1505822926216, "sender": "@vgrdju375:matrix.org", "state_key": "@vgrdju375:matrix.org", "type": "m.room.member", "unsigned": { "age": 4845026462 } }, { "content": { "membership": "leave" }, "event_id": "$14956631662024501scbte:matrix.org", "membership": "leave", "origin_server_ts": 1495663166943, "sender": "@freenode_jotik_work:matrix.org", "state_key": "@freenode_jotik_work:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004785735, "replaces_state": "$14835364991375947GLQnF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/chyWWbWbjSoYImTyKcEZpYDB", "displayname": "fredcy", "membership": "join" }, "event_id": "$148122642638681uiAHc:matrix.org", "membership": "join", "origin_server_ts": 1481226426335, "sender": "@fredcy:matrix.org", "state_key": "@fredcy:matrix.org", "type": "m.room.member", "unsigned": { "age": 29441526343 } }, { "content": { "membership": "leave" }, "event_id": "$145533544971451WdnxP:matrix.org", "origin_server_ts": 1455335449065, "sender": "@pebble:matrix.org", "state_key": "@pebble:matrix.org", "type": "m.room.member", "unsigned": { "age": 55332503613, "replaces_state": "$145533505671251EWGgQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14674479402461516ZnqAs:matrix.org", "membership": "leave", "origin_server_ts": 1467447940963, "sender": "@jeffman54:matrix.org", "state_key": "@jeffman54:matrix.org", "type": "m.room.member", "unsigned": { "age": 43220011715, "replaces_state": "$14674431362457392cTnms:matrix.org" } }, { "content": { "avatar_url": "mxc://catalk.xyz/OCDVHTcLswPtxXotVPmFojJN", "displayname": "LifeNT", "membership": "join" }, "event_id": "$148316057398gNBqk:catalk.xyz", "origin_server_ts": 1483160576753, "sender": "@lifent:catalk.xyz", "state_key": "@lifent:catalk.xyz", "type": "m.room.member", "unsigned": { "age": 24 } }, { "content": { "avatar_url": null, "displayname": "halle", "membership": "join" }, "event_id": "$15041351031843161gFhuM:matrix.org", "membership": "join", "origin_server_ts": 1504135103869, "sender": "@halle:matrix.org", "state_key": "@halle:matrix.org", "type": "m.room.member", "unsigned": { "age": 6532848809 } }, { "content": { "avatar_url": null, "displayname": "Neo Anderson", "membership": "join" }, "event_id": "$1510304857590945DQRGL:matrix.org", "membership": "join", "origin_server_ts": 1510304857176, "sender": "@sraja1:matrix.org", "state_key": "@sraja1:matrix.org", "type": "m.room.member", "unsigned": { "age": 363095502, "replaces_state": "$1472637831151976QFLCy:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Manu", "membership": "join" }, "event_id": "$14165853801187pFrcw:matrix.org", "membership": "join", "origin_server_ts": 1416585380740, "sender": "@Manu:matrix.org", "state_key": "@Manu:matrix.org", "type": "m.room.member", "unsigned": { "age": 94082571938 } }, { "age_ts": 1474473896234, "content": { "avatar_url": null, "displayname": "irx", "membership": "join" }, "event_id": "$14744738932OhZYe:0pt.pw", "origin_server_ts": 1474473893257, "sender": "@irx:0pt.pw", "state_key": "@irx:0pt.pw", "type": "m.room.member", "unsigned": { "age": 265, "prev_content": { "membership": "leave" }, "prev_sender": "@irx:0pt.pw", "replaces_state": "$14744736210RWrfX:0pt.pw" } }, { "content": { "avatar_url": "mxc://matrix.org/YSOwGSusJPCyXlEsHMyxrjjR", "displayname": "redsteakraw", "membership": "join" }, "event_id": "$15003757501530471pKODZ:matrix.org", "membership": "join", "origin_server_ts": 1500375750068, "sender": "@redsteakraw:matrix.org", "state_key": "@redsteakraw:matrix.org", "type": "m.room.member", "unsigned": { "age": 10292202610 } }, { "content": { "avatar_url": null, "displayname": "compile", "membership": "join" }, "event_id": "$14756462652325119nhrLi:matrix.org", "membership": "join", "origin_server_ts": 1475646265855, "sender": "@compile:matrix.org", "state_key": "@compile:matrix.org", "type": "m.room.member", "unsigned": { "age": 35021686823 } }, { "content": { "avatar_url": "mxc://matrix.org/QAlQlRcUtlmvBaKdBrbgZfkO", "displayname": "Shrimadhav U K", "membership": "join" }, "event_id": "$1488272326372412vPRKL:matrix.org", "membership": "join", "origin_server_ts": 1488272326761, "sender": "@SpEcHiDe_riot:matrix.org", "state_key": "@SpEcHiDe_riot:matrix.org", "type": "m.room.member", "unsigned": { "age": 22395625917, "replaces_state": "$1481248937153286ssoZH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/cFGFMbRiPFgnSOXvTHnxJRbk#auto", "displayname": null, "membership": "join" }, "event_id": "$1445159164657704VtVky:matrix.org", "origin_server_ts": 1445159164651, "sender": "@yes:matrix.org", "state_key": "@yes:matrix.org", "type": "m.room.member", "unsigned": { "age": 65508788027 } }, { "content": { "avatar_url": null, "displayname": "uptime (IRC)", "membership": "join" }, "event_id": "$15105343123366684nFGKS:matrix.org", "membership": "join", "origin_server_ts": 1510534312153, "sender": "@freenode_uptime:matrix.org", "state_key": "@freenode_uptime:matrix.org", "type": "m.room.member", "unsigned": { "age": 133640525, "replaces_state": "$15101161661787798BIEDR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15024946271025025yHKsk:matrix.org", "membership": "leave", "origin_server_ts": 1502494627174, "sender": "@freenode_aaa|:matrix.org", "state_key": "@freenode_aaa|:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173325504, "replaces_state": "$1498273379576879lcyLE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/VnCrgEKsSyurtQWQCdPLXfyL#auto", "displayname": "macblizzard", "membership": "join" }, "event_id": "$1441621540525055fxSDs:matrix.org", "origin_server_ts": 1441621540825, "sender": "@macblizzard:matrix.org", "state_key": "@macblizzard:matrix.org", "type": "m.room.member", "unsigned": { "age": 69046411853 } }, { "content": { "avatar_url": null, "displayname": "eggy (IRC)", "membership": "join" }, "event_id": "$15022446821548151yhwED:matrix.org", "membership": "join", "origin_server_ts": 1502244682709, "sender": "@freenode_eggy:matrix.org", "state_key": "@freenode_eggy:matrix.org", "type": "m.room.member", "unsigned": { "age": 8423269969 } }, { "content": { "avatar_url": null, "displayname": "riottoir", "membership": "join" }, "event_id": "$1508260950420FHVfm:matrix.neo.codes", "membership": "join", "origin_server_ts": 1508260950296, "sender": "@riottoir:matrix.neo.codes", "state_key": "@riottoir:matrix.neo.codes", "type": "m.room.member", "unsigned": { "age": 2407002382, "prev_content": { "avatar_url": null, "displayname": "Tom Bombadil", "membership": "join" }, "prev_sender": "@riottoir:matrix.neo.codes", "replaces_state": "$1508054675404CtFrR:matrix.neo.codes" } }, { "content": { "avatar_url": "mxc://matrix.org/qHqDlkEHKvRoUJEVGxnkVXFv", "displayname": "Matthew Hodgson (Gitter)", "membership": "join" }, "event_id": "$1462375210664353vracs:matrix.org", "membership": "join", "origin_server_ts": 1462375210104, "sender": "@gitter_ara4n:matrix.org", "state_key": "@gitter_ara4n:matrix.org", "type": "m.room.member", "unsigned": { "age": 48292742574 } }, { "content": { "avatar_url": "mxc://gsn.im/imDGurEjRBaBBumJdblEnQfm", "displayname": "ikuradon", "membership": "join" }, "event_id": "$147455593710fQtBU:gsn.im", "origin_server_ts": 1474555937297, "sender": "@ikuradon:gsn.im", "state_key": "@ikuradon:gsn.im", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "avatar_url": "mxc://matrix.org/kVgMbUFxDowuLnyPIvvRgbbI", "displayname": "Negzi", "membership": "join" }, "event_id": "$1453385313130qCZgV:matrix.org", "origin_server_ts": 1453385313418, "sender": "@Negzi:matrix.org", "state_key": "@Negzi:matrix.org", "type": "m.room.member", "unsigned": { "age": 57282639260, "replaces_state": "$1453384986167087ztsgu:matrix.org" } }, { "content": { "avatar_url": "mxc://softing.com/iETzbYCQLrWaTMzOEEnHPWBq", "displayname": "Gustav", "membership": "join" }, "event_id": "$150966133484fTpGN:softing.com", "membership": "join", "origin_server_ts": 1509661334694, "sender": "@sp:softing.com", "state_key": "@sp:softing.com", "type": "m.room.member", "unsigned": { "age": 1006617984, "replaces_state": "$15082490849dhRVF:softing.com" } }, { "content": { "membership": "leave" }, "event_id": "$1508469877939526DsdVW:matrix.org", "membership": "leave", "origin_server_ts": 1508469877954, "sender": "@freenode_icMikaela:matrix.org", "state_key": "@freenode_icMikaela:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198074724, "replaces_state": "$1507825471298516cXMcq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "o-t-h-e-r", "membership": "join" }, "event_id": "$1416421067577rCLlY:oddvar.org", "membership": "join", "origin_server_ts": 1415981374705, "sender": "@other:oddvar.org", "state_key": "@other:oddvar.org", "stream_ordering": 29558, "type": "m.room.member", "unsigned": { "age": 94246885101 } }, { "content": { "membership": "leave" }, "event_id": "$1449008903305037TmiEP:matrix.org", "origin_server_ts": 1449008903189, "sender": "@aimmac23:matrix.org", "state_key": "@aimmac23:matrix.org", "type": "m.room.member", "unsigned": { "age": 61659049489, "replaces_state": "$1449004584298304Ijgde:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/qunCZKJFyjWVHgjMHmEtRrSf", "displayname": "SyrupThinker", "membership": "join" }, "event_id": "$15064571211334408zBrxS:matrix.org", "membership": "join", "origin_server_ts": 1506457121208, "sender": "@SyrupThinker:matrix.org", "state_key": "@SyrupThinker:matrix.org", "type": "m.room.member", "unsigned": { "age": 4210831470 } }, { "content": { "avatar_url": null, "displayname": "Thom", "membership": "join" }, "event_id": "$1416420915300YPOeT:matrix.org", "membership": "join", "origin_server_ts": 1411053117262, "sender": "@tdd:matrix.org", "state_key": "@tdd:matrix.org", "stream_ordering": 6168, "type": "m.room.member", "unsigned": { "age": 94247037378 } }, { "content": { "membership": "leave" }, "event_id": "$14991213413047453geZKd:matrix.org", "membership": "leave", "origin_server_ts": 1499121341416, "sender": "@DonViktorio:matrix.org", "state_key": "@DonViktorio:matrix.org", "type": "m.room.member", "unsigned": { "age": 11546611262, "replaces_state": "$14990987972545585HBDhT:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15074963841480UWJmZ:matrix.cccgoe.de", "membership": "leave", "origin_server_ts": 1507496384207, "sender": "@corvus:matrix.cccgoe.de", "state_key": "@corvus:matrix.cccgoe.de", "type": "m.room.member", "unsigned": { "age": 3171568471, "replaces_state": "$15074725541479YMwYu:matrix.cccgoe.de" } }, { "content": { "avatar_url": null, "displayname": "reactormonk", "membership": "join" }, "event_id": "$14910534781LvGtH:reactormonk.org", "origin_server_ts": 1491053478510, "sender": "@reactormonk:reactormonk.org", "state_key": "@reactormonk:reactormonk.org", "type": "m.room.member", "unsigned": { "age": 41, "replaces_state": "$14907803541AsoIN:reactormonk.org" } }, { "content": { "avatar_url": "http://readypos.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/x/b/xbob-front.png", "displayname": null, "membership": "join" }, "event_id": "$1416421046425hcSIy:matrix.org", "membership": "join", "origin_server_ts": 1415712650438, "sender": "@exbob:matrix.org", "state_key": "@exbob:matrix.org", "stream_ordering": 26382, "type": "m.room.member", "unsigned": { "age": 94246906253 } }, { "content": { "avatar_url": "mxc://matrix.org/VkXaqVkLHVzdSeAaBUklCzQy", "displayname": "Coffee", "membership": "join" }, "event_id": "$14887843371773204bpMal:matrix.org", "membership": "join", "origin_server_ts": 1488784337302, "sender": "@Coffee:matrix.org", "state_key": "@Coffee:matrix.org", "type": "m.room.member", "unsigned": { "age": 21883615376, "replaces_state": "$1488554492548461tMHRc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632502026419Xahfk:matrix.org", "membership": "leave", "origin_server_ts": 1495663250090, "sender": "@freenode_noteirak:matrix.org", "state_key": "@freenode_noteirak:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004702588, "replaces_state": "$1487836411542189wgdmt:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631472024090QUNVY:matrix.org", "membership": "leave", "origin_server_ts": 1495663147436, "sender": "@freenode_runciter_:matrix.org", "state_key": "@freenode_runciter_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004805242, "replaces_state": "$1484255935458337gvGDE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 223735", "kind": "guest", "membership": "join" }, "event_id": "$14938031211093479vnZkZ:matrix.org", "membership": "join", "origin_server_ts": 1493803121058, "sender": "@223735:matrix.org", "state_key": "@223735:matrix.org", "type": "m.room.member", "unsigned": { "age": 16864831620 } }, { "content": { "avatar_url": null, "displayname": "bookworm (IRC)", "membership": "join" }, "event_id": "$1507789838597767lODMR:matrix.org", "membership": "join", "origin_server_ts": 1507789838453, "sender": "@freenode_bookworm:matrix.org", "state_key": "@freenode_bookworm:matrix.org", "type": "m.room.member", "unsigned": { "age": 2878114225, "replaces_state": "$1507789656595975UOJkj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1449849064106xGiZg:lovely.beer", "origin_server_ts": 1449849064896, "sender": "@slack_perfectlylegalonion:lovely.beer", "state_key": "@slack_perfectlylegalonion:lovely.beer", "type": "m.room.member", "unsigned": { "age": 60818887782 } }, { "content": { "membership": "leave" }, "event_id": "$15093485436611199LxqnU:matrix.org", "membership": "leave", "origin_server_ts": 1509348543062, "sender": "@freenode_kkvumlcpiy:matrix.org", "state_key": "@freenode_kkvumlcpiy:matrix.org", "type": "m.room.member", "unsigned": { "age": 1319409616, "replaces_state": "$15093485426611193pBWWd:matrix.org" } }, { "content": { "avatar_url": "mxc://elynx.fr/ZlQORcosjLabOKPTPHwTjRsH", "displayname": "Hiro Lynx", "membership": "join" }, "event_id": "$1503480000926HvFZU:elynx.fr", "membership": "join", "origin_server_ts": 1503480000998, "sender": "@Hiro:elynx.fr", "state_key": "@Hiro:elynx.fr", "type": "m.room.member", "unsigned": { "age": 7187951680, "prev_content": { "avatar_url": "mxc://elynx.fr/ZlQORcosjLabOKPTPHwTjRsH", "displayname": "Hiro Lynxx", "membership": "join" }, "prev_sender": "@Hiro:elynx.fr", "replaces_state": "$1503479970900FoJgc:elynx.fr" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1452348063106647vWPbm:matrix.org", "origin_server_ts": 1452348063497, "sender": "@hamza:matrix.org", "state_key": "@hamza:matrix.org", "type": "m.room.member", "unsigned": { "age": 58319889181 } }, { "content": { "avatar_url": "mxc://matrix.org/ShKEvghZwsznbVKbrIKAJURb#auto", "displayname": null, "membership": "join" }, "event_id": "$144785686163608HtFxG:matrix.org", "origin_server_ts": 1447856861029, "sender": "@xenolf:matrix.org", "state_key": "@xenolf:matrix.org", "type": "m.room.member", "unsigned": { "age": 62811091649 } }, { "content": { "avatar_url": "mxc://matrix.org/gMtWtrXQCVzUoiCJbXatQuRa", "displayname": "jon r", "membership": "join" }, "event_id": "$1463072168257888MaMpC:matrix.org", "membership": "join", "origin_server_ts": 1463072168910, "sender": "@almereyda:matrix.org", "state_key": "@almereyda:matrix.org", "type": "m.room.member", "unsigned": { "age": 47595783768, "replaces_state": "$1456853535271545QPYcr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149428045984BzlbL:fourchin.net", "membership": "leave", "origin_server_ts": 1494280459375, "sender": "@okashi:fourchin.net", "state_key": "@okashi:fourchin.net", "type": "m.room.member", "unsigned": { "age": 16387493303, "prev_content": { "avatar_url": null, "displayname": "Okashi", "membership": "join" }, "prev_sender": "@okashi:fourchin.net", "replaces_state": "$149427915737fMDAf:fourchin.net" } }, { "content": { "membership": "leave" }, "event_id": "$1483194381335095ZcrWV:matrix.org", "membership": "leave", "origin_server_ts": 1483194381549, "sender": "@lief:matrix.org", "state_key": "@lief:matrix.org", "type": "m.room.member", "unsigned": { "age": 27473571129, "replaces_state": "$14826831832134687SyCUC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14826545092050192BeRhV:matrix.org", "membership": "leave", "origin_server_ts": 1482654509368, "sender": "@duerer:matrix.org", "state_key": "@duerer:matrix.org", "type": "m.room.member", "unsigned": { "age": 28013443310, "replaces_state": "$14826350381994516NJuMH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1437063384169065CBOQJ:matrix.org", "origin_server_ts": 1437063384288, "sender": "@yllw:matrix.org", "state_key": "@yllw:matrix.org", "type": "m.room.member", "unsigned": { "age": 73604568390, "replaces_state": "$1437063008168960yVuaA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14865531705deIPv:i87b.de", "membership": "leave", "origin_server_ts": 1486553170823, "sender": "@cjj:i87b.de", "state_key": "@cjj:i87b.de", "type": "m.room.member", "unsigned": { "age": 10951489, "prev_content": { "avatar_url": null, "displayname": "cjj", "membership": "join" }, "prev_sender": "@cjj:i87b.de", "replaces_state": "$14865477191hPCfC:i87b.de" } }, { "content": { "avatar_url": "mxc://matrix.org/jXHJYDqkYkQTgfaxkrMquSiD", "displayname": "jrick", "membership": "join" }, "event_id": "$1486233966931505kkAbH:matrix.org", "membership": "join", "origin_server_ts": 1486233966348, "sender": "@joshrickmar:matrix.org", "state_key": "@joshrickmar:matrix.org", "type": "m.room.member", "unsigned": { "age": 24433986330 } }, { "content": { "avatar_url": "mxc://matrix.matthughes.info/ITJopiddYYyVpubmDEuUdoCh", "displayname": "Matt", "membership": "join" }, "event_id": "$145420707617GlzgH:matrix.matthughes.info", "origin_server_ts": 1454207243817, "sender": "@matt:matrix.matthughes.info", "state_key": "@matt:matrix.matthughes.info", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "membership": "leave" }, "event_id": "$14851717861319149xIPiI:matrix.org", "membership": "leave", "origin_server_ts": 1485171786449, "sender": "@vurpo:matrix.org", "state_key": "@vurpo:matrix.org", "type": "m.room.member", "unsigned": { "age": 25496166229, "replaces_state": "$14849005793954168UXAFI:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15076156481827807HwMtj:matrix.org", "membership": "leave", "origin_server_ts": 1507615648414, "sender": "@hssong:matrix.org", "state_key": "@hssong:matrix.org", "type": "m.room.member", "unsigned": { "age": 3052304264, "replaces_state": "$15069495951979577xPzhk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632202025688yJGJW:matrix.org", "membership": "leave", "origin_server_ts": 1495663220223, "sender": "@freenode_damo22:matrix.org", "state_key": "@freenode_damo22:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004732455, "replaces_state": "$1483172511251849qzlHn:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/kgTbeBvsOGikYaAQblgYnMFX", "displayname": "Wolf Nightly", "membership": "join" }, "event_id": "$146548254116267dueJX:matrix.org", "membership": "join", "origin_server_ts": 1465482541658, "sender": "@wolf544:matrix.org", "state_key": "@wolf544:matrix.org", "type": "m.room.member", "unsigned": { "age": 45185411020 } }, { "content": { "membership": "leave" }, "event_id": "$14653965401484IDORk:matrix.org", "membership": "leave", "origin_server_ts": 1465396540084, "sender": "@eriol:matrix.org", "state_key": "@eriol:matrix.org", "type": "m.room.member", "unsigned": { "age": 45271412594, "replaces_state": "$14653963131074aBWEW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/aHyYORlARWwHrUWfxuApemwp#auto", "displayname": "minizatic", "membership": "join" }, "event_id": "$14283169841537FtxWK:matrix.org", "membership": "join", "origin_server_ts": 1428316984570, "sender": "@minizatic:matrix.org", "state_key": "@minizatic:matrix.org", "type": "m.room.member", "unsigned": { "age": 82350968108 } }, { "content": { "avatar_url": "mxc://matrix.org/RbBlvUEpJuRixEDCXBkMTJJM#auto", "displayname": "Marion", "membership": "join" }, "event_id": "$1443906987208262hSmfc:matrix.org", "membership": "join", "origin_server_ts": 1443906987854, "sender": "@marion:matrix.org", "state_key": "@marion:matrix.org", "type": "m.room.member", "unsigned": { "age": 66760964824 } }, { "content": { "avatar_url": null, "displayname": "Alexander", "membership": "join" }, "event_id": "$1453829858124924TXrEo:matrix.org", "origin_server_ts": 1453829858552, "sender": "@abo:matrix.org", "state_key": "@abo:matrix.org", "type": "m.room.member", "unsigned": { "age": 56838094126 } }, { "content": { "avatar_url": null, "displayname": "guesting", "membership": "join" }, "event_id": "$14877557292419293qydvW:matrix.org", "membership": "join", "origin_server_ts": 1487755729199, "sender": "@guesting:matrix.org", "state_key": "@guesting:matrix.org", "type": "m.room.member", "unsigned": { "age": 22912223479, "replaces_state": "$14877557192419240LhKZU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "lukin o'round", "membership": "join" }, "event_id": "$14845656491987882RNCQl:matrix.org", "membership": "join", "origin_server_ts": 1484565649606, "sender": "@throwaway:matrix.org", "state_key": "@throwaway:matrix.org", "type": "m.room.member", "unsigned": { "age": 26102303072 } }, { "content": { "membership": "leave" }, "event_id": "$14597535788585KyZpp:matrix.org", "membership": "leave", "origin_server_ts": 1459753578516, "sender": "@xcaliber:matrix.org", "state_key": "@xcaliber:matrix.org", "type": "m.room.member", "unsigned": { "age": 50914374162, "replaces_state": "$1459680293177703NcEzv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014748433798001VeXyC:matrix.org", "membership": "leave", "origin_server_ts": 1501474843973, "sender": "@freenode_wadadli__:matrix.org", "state_key": "@freenode_wadadli__:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193108705, "replaces_state": "$15014389333093884MAgis:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15020427721xFcBA:obormot.net", "origin_server_ts": 1502042424944, "sender": "@Obormot:obormot.net", "state_key": "@Obormot:obormot.net", "type": "m.room.member", "unsigned": { "age": 87 } }, { "content": { "membership": "leave" }, "event_id": "$14983428271118559UBIEu:matrix.org", "membership": "leave", "origin_server_ts": 1498342827679, "sender": "@freenode_noisykeyboard:matrix.org", "state_key": "@freenode_noisykeyboard:matrix.org", "type": "m.room.member", "unsigned": { "age": 12325124999, "replaces_state": "$14983423701114529lprBX:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1483240849548518deIVm:matrix.org", "membership": "join", "origin_server_ts": 1483240849008, "sender": "@ingodwetrust:matrix.org", "state_key": "@ingodwetrust:matrix.org", "type": "m.room.member", "unsigned": { "age": 27427103670 } }, { "content": { "avatar_url": "mxc://productionservers.net/ENTAhbPwdcLTOwVqkMVGLntj", "displayname": "K0HAX", "membership": "join" }, "event_id": "$149739268722DIvpS:productionservers.net", "membership": "join", "origin_server_ts": 1497392687130, "sender": "@michael:productionservers.net", "state_key": "@michael:productionservers.net", "type": "m.room.member", "unsigned": { "age": 13275265548, "prev_content": { "avatar_url": "mxc://productionservers.net/ENTAhbPwdcLTOwVqkMVGLntj", "displayname": "Michael Englehorn", "membership": "join" }, "prev_sender": "@michael:productionservers.net", "replaces_state": "$1483141598101MzNkD:productionservers.net" } }, { "content": { "avatar_url": null, "displayname": "Tue Nguyen", "membership": "join" }, "event_id": "$14232188962342VdtIG:matrix.org", "membership": "join", "origin_server_ts": 1423218896157, "sender": "@tuenv:matrix.org", "state_key": "@tuenv:matrix.org", "type": "m.room.member", "unsigned": { "age": 87449056521 } }, { "content": { "membership": "leave" }, "event_id": "$15024946261025010QUHjC:matrix.org", "membership": "leave", "origin_server_ts": 1502494626733, "sender": "@freenode_Guest24722:matrix.org", "state_key": "@freenode_Guest24722:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173325945, "replaces_state": "$15015984725654034RtYEd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1509757063780692VpZZl:matrix.org", "membership": "leave", "origin_server_ts": 1509757063735, "sender": "@freenode_timofonic:matrix.org", "state_key": "@freenode_timofonic:matrix.org", "type": "m.room.member", "unsigned": { "age": 910888943, "replaces_state": "$1509718980141278ZcpZN:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Andrey Utkin", "membership": "join" }, "event_id": "$145375195943072EQoFC:matrix.org", "membership": "join", "origin_server_ts": 1453751959141, "sender": "@andrey.utkin:matrix.org", "state_key": "@andrey.utkin:matrix.org", "type": "m.room.member", "unsigned": { "age": 56915993537 } }, { "content": { "membership": "leave" }, "event_id": "$14956631492024129jLPED:matrix.org", "membership": "leave", "origin_server_ts": 1495663149450, "sender": "@freenode_croxis:matrix.org", "state_key": "@freenode_croxis:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004803228, "replaces_state": "$1472157609288766MKTwu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1488022762860532POcdk:matrix.org", "membership": "leave", "origin_server_ts": 1488022762797, "sender": "@esm:matrix.org", "state_key": "@esm:matrix.org", "type": "m.room.member", "unsigned": { "age": 22645189881, "replaces_state": "$1482046579658920SbvFX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GhPhIobRKhmschyJVqjSbTKO", "displayname": "Tifinchi", "membership": "join" }, "event_id": "$1479664604405081CrgVt:matrix.org", "membership": "join", "origin_server_ts": 1479664604539, "sender": "@Tifinchi:matrix.org", "state_key": "@Tifinchi:matrix.org", "type": "m.room.member", "unsigned": { "age": 31003348139 } }, { "age_ts": 1438974713021, "content": { "avatar_url": "mxc://matrix.sipgate.net/JrVVWNfZFWpMHKQrjQtEQyih", "displayname": "steinex", "membership": "join" }, "event_id": "$14389747001472XbFje:matrix.sipgate.net", "origin_server_ts": 1438974699490, "sender": "@steinex:matrix.sipgate.net", "state_key": "@steinex:matrix.sipgate.net", "type": "m.room.member", "unsigned": { "age": 496, "replaces_state": "$14389746501469KHxFZ:matrix.sipgate.net" } }, { "content": { "avatar_url": "mxc://matrix.org/TquLNEnEUkXwGMnkLlndGJfu#auto", "displayname": "Gastón Brito", "membership": "join" }, "event_id": "$1444001433254283JDBPg:matrix.org", "origin_server_ts": 1444001433438, "sender": "@gastonpina:matrix.org", "state_key": "@gastonpina:matrix.org", "type": "m.room.member", "unsigned": { "age": 66666519240 } }, { "content": { "membership": "leave" }, "event_id": "$15058279343293389rvJYs:matrix.org", "membership": "leave", "origin_server_ts": 1505827934561, "sender": "@jooert:matrix.org", "state_key": "@jooert:matrix.org", "type": "m.room.member", "unsigned": { "age": 4840018117, "replaces_state": "$1497381911372195xlvSr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "pafnat", "membership": "join" }, "event_id": "$1471962833231700fDFEg:matrix.org", "membership": "join", "origin_server_ts": 1471962833189, "sender": "@pafnat:matrix.org", "state_key": "@pafnat:matrix.org", "type": "m.room.member", "unsigned": { "age": 38705119489 } }, { "content": { "membership": "leave" }, "event_id": "$15024946271025038qbNrY:matrix.org", "membership": "leave", "origin_server_ts": 1502494627616, "sender": "@freenode_KotH_:matrix.org", "state_key": "@freenode_KotH_:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173325062, "replaces_state": "$15020460933860029HDWEo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/bkvlnkvSFMfuJCvzdEaWtLVy", "displayname": "realsammyt", "membership": "join" }, "event_id": "$1470637460411666lKdOo:matrix.org", "membership": "join", "origin_server_ts": 1470637460180, "sender": "@realsammyt:matrix.org", "state_key": "@realsammyt:matrix.org", "type": "m.room.member", "unsigned": { "age": 40030492498 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14553358111CNosJ:lovely.beer", "origin_server_ts": 1455335811774, "sender": "@slack_kegan:lovely.beer", "state_key": "@slack_kegan:lovely.beer", "type": "m.room.member", "unsigned": { "age": 55332140904, "replaces_state": "$14437874399mkAbW:lovely.beer" } }, { "content": { "avatar_url": null, "displayname": "Pascal", "membership": "join" }, "event_id": "$148958748982666JEnPv:matrix.org", "membership": "join", "origin_server_ts": 1489587489439, "sender": "@phirsch:matrix.org", "state_key": "@phirsch:matrix.org", "type": "m.room.member", "unsigned": { "age": 21080463239 } }, { "content": { "membership": "leave" }, "event_id": "$144126331832477vRase:matrix.org", "origin_server_ts": 1441263318810, "sender": "@alexeycv:matrix.org", "state_key": "@alexeycv:matrix.org", "type": "m.room.member", "unsigned": { "age": 69404633868, "replaces_state": "$143983625614685edzmR:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "JudenMagie3", "membership": "join" }, "event_id": "$1466276522453180TOJrK:matrix.org", "membership": "join", "origin_server_ts": 1466276522971, "sender": "@JudenMagie3:matrix.org", "state_key": "@JudenMagie3:matrix.org", "type": "m.room.member", "unsigned": { "age": 44391429707 } }, { "content": { "avatar_url": "mxc://57north.org.uk/nGXtwcEYslycjSODYzpjnXxi", "displayname": "Shell", "membership": "join" }, "event_id": "$147930305452JBuMX:57north.org.uk", "membership": "join", "origin_server_ts": 1479303054898, "sender": "@shell:57north.org.uk", "state_key": "@shell:57north.org.uk", "type": "m.room.member", "unsigned": { "age": 31364897780, "prev_content": { "avatar_url": "mxc://57north.org.uk/GnQsTbZZCKrLRrkLZDcfsccf", "displayname": "Shell", "membership": "join" }, "prev_sender": "@shell:57north.org.uk", "replaces_state": "$14792509881397GOANv:57north.org.uk" } }, { "content": { "avatar_url": null, "displayname": "audiotest", "membership": "join" }, "event_id": "$1456767981216164WKCAx:matrix.org", "membership": "join", "origin_server_ts": 1456767981089, "sender": "@audiotest:matrix.org", "state_key": "@audiotest:matrix.org", "type": "m.room.member", "unsigned": { "age": 53899971589 } }, { "content": { "membership": "leave" }, "event_id": "$14956632432026251fmyUk:matrix.org", "membership": "leave", "origin_server_ts": 1495663243623, "sender": "@freenode_Gatewayy:matrix.org", "state_key": "@freenode_Gatewayy:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004709055, "replaces_state": "$143594176914019zWaqL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1498159800473gFgVl:matrix.niklasfi.de", "membership": "leave", "origin_server_ts": 1498159800156, "sender": "@niklas:matrix.niklasfi.de", "state_key": "@niklas:matrix.niklasfi.de", "type": "m.room.member", "unsigned": { "age": 12508152522, "replaces_state": "$148367480822zmuyO:matrix.niklasfi.de" } }, { "content": { "avatar_url": null, "displayname": "wilko", "membership": "join" }, "event_id": "$149044847616zKOCz:rens.onl", "origin_server_ts": 1490448476691, "sender": "@wilko:rens.onl", "state_key": "@wilko:rens.onl", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": "mxc://matrix.org/jWJoZhLPkWByXJnmlVdSlJgm", "displayname": "sudesh", "membership": "join" }, "event_id": "$14298655482960LUsqu:matrix.org", "origin_server_ts": 1429865548237, "sender": "@sudesh333:matrix.org", "state_key": "@sudesh333:matrix.org", "type": "m.room.member", "unsigned": { "age": 80802404441, "replaces_state": "$14298655152940HQPZj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632142025562pnMPi:matrix.org", "membership": "leave", "origin_server_ts": 1495663214527, "sender": "@freenode_XxNeoxX:matrix.org", "state_key": "@freenode_XxNeoxX:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004738151, "replaces_state": "$1452640511422387SjVxl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15057491532049678wRJEr:matrix.org", "membership": "leave", "origin_server_ts": 1505749153600, "sender": "@freenode_argusbr:matrix.org", "state_key": "@freenode_argusbr:matrix.org", "type": "m.room.member", "unsigned": { "age": 4918799078, "replaces_state": "$15057491502049624rfnQg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145572934223790iRTCi:matrix.org", "origin_server_ts": 1455729342664, "sender": "@DarthShader:matrix.org", "state_key": "@DarthShader:matrix.org", "type": "m.room.member", "unsigned": { "age": 54938610014, "replaces_state": "$145572488021449Dgfri:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eJdNzrEtOApLxEmLhOHQxhIv#auto", "displayname": "Steven Bambling", "membership": "join" }, "event_id": "$1437647868438roHpO:matrix.org", "membership": "join", "origin_server_ts": 1437647868816, "sender": "@smbambling:matrix.org", "state_key": "@smbambling:matrix.org", "type": "m.room.member", "unsigned": { "age": 73020083862 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1460024188393994xqnXU:matrix.org", "membership": "join", "origin_server_ts": 1460024188915, "sender": "@primus:matrix.org", "state_key": "@primus:matrix.org", "type": "m.room.member", "unsigned": { "age": 50643763763 } }, { "content": { "membership": "leave" }, "event_id": "$149148158411XuWsK:lodere.es", "membership": "leave", "origin_server_ts": 1491481584697, "sender": "@fpletz:lodere.es", "state_key": "@fpletz:lodere.es", "type": "m.room.member", "unsigned": { "age": 19186367981, "prev_content": { "avatar_url": "mxc://lodere.es/PKrFcplyuMmzcpamFawvkeaT", "displayname": "fpletz", "membership": "join" }, "prev_sender": "@fpletz:lodere.es", "replaces_state": "$148932870929przXM:lodere.es" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14958111171282490DgFvs:matrix.org", "membership": "join", "origin_server_ts": 1495811117786, "sender": "@cdhagmann:matrix.org", "state_key": "@cdhagmann:matrix.org", "type": "m.room.member", "unsigned": { "age": 14856834892 } }, { "content": { "avatar_url": "mxc://matrix.org/bFTQUdumZtyiTTmvJWeoGnIi", "displayname": "sri", "membership": "join" }, "event_id": "$15014953544065458INHSi:matrix.org", "membership": "join", "origin_server_ts": 1501495354197, "sender": "@sramkrishna:matrix.org", "state_key": "@sramkrishna:matrix.org", "type": "m.room.member", "unsigned": { "age": 9172598481 } }, { "content": { "membership": "leave" }, "event_id": "$14956632222025747MAuPN:matrix.org", "membership": "leave", "origin_server_ts": 1495663222791, "sender": "@freenode_OsakaFoo:matrix.org", "state_key": "@freenode_OsakaFoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004729887, "replaces_state": "$1481576727781758OaeBT:matrix.org" } }, { "age_ts": 1459013698111, "content": { "avatar_url": "mxc://binets.fr/bSHlGhXHmfdLGXxgSujliFED", "displayname": "ekleog", "membership": "join" }, "event_id": "$14590136971987gURiN:binets.fr", "origin_server_ts": 1459013697468, "sender": "@ekleog:binets.fr", "state_key": "@ekleog:binets.fr", "type": "m.room.member", "unsigned": { "age": 54, "replaces_state": "$14590136801984mimGm:binets.fr" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1465789593438568qjHSG:matrix.org", "membership": "join", "origin_server_ts": 1465789593798, "sender": "@drizze:matrix.org", "state_key": "@drizze:matrix.org", "type": "m.room.member", "unsigned": { "age": 44878358880 } }, { "content": { "avatar_url": null, "displayname": "Sciuro (IRC)", "membership": "join" }, "event_id": "$15048712194393489OvazW:matrix.org", "membership": "join", "origin_server_ts": 1504871219388, "sender": "@freenode_Sciuro:matrix.org", "state_key": "@freenode_Sciuro:matrix.org", "type": "m.room.member", "unsigned": { "age": 5796733290, "replaces_state": "$15048710504391788JJNhJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/myZyQjKUyncJwJdAUYgatDKj#auto", "displayname": "Tom Stead", "membership": "join" }, "event_id": "$1445936419229388JYcOK:matrix.org", "origin_server_ts": 1445936419115, "sender": "@toms:matrix.org", "state_key": "@toms:matrix.org", "type": "m.room.member", "unsigned": { "age": 64731533563 } }, { "content": { "membership": "leave" }, "event_id": "$1499333548501387HKTgT:matrix.org", "membership": "leave", "origin_server_ts": 1499333548475, "sender": "@dan.i.l:matrix.org", "state_key": "@dan.i.l:matrix.org", "type": "m.room.member", "unsigned": { "age": 11334404203, "replaces_state": "$1499327294445438Vrbkl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14241200381878XgYCy:matrix.org", "origin_server_ts": 1424120038057, "sender": "@gforrest:matrix.org", "state_key": "@gforrest:matrix.org", "type": "m.room.member", "unsigned": { "age": 86547914621, "replaces_state": "$14241200161876Kwyps:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QOAKpstCmMXewwYiChckurDP", "displayname": "$Adam", "membership": "join" }, "event_id": "$1507316002248933rbobw:matrix.org", "membership": "join", "origin_server_ts": 1507316002856, "sender": "@abeckmeyer:matrix.org", "state_key": "@abeckmeyer:matrix.org", "type": "m.room.member", "unsigned": { "age": 3351949822, "replaces_state": "$1507212794672488udYSv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14766137711334014Vabjt:matrix.org", "membership": "leave", "origin_server_ts": 1476613771029, "sender": "@Dandy:matrix.org", "state_key": "@Dandy:matrix.org", "type": "m.room.member", "unsigned": { "age": 34054181649, "replaces_state": "$1476369447636722HybON:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "fxrh_ (IRC)", "membership": "join" }, "event_id": "$15099117102417393tdDey:matrix.org", "membership": "join", "origin_server_ts": 1509911710125, "sender": "@freenode_fxrh_:matrix.org", "state_key": "@freenode_fxrh_:matrix.org", "type": "m.room.member", "unsigned": { "age": 756242553, "replaces_state": "$1497653331476288ESoPR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631852024888bnaFx:matrix.org", "membership": "leave", "origin_server_ts": 1495663185590, "sender": "@freenode_i76650975:matrix.org", "state_key": "@freenode_i76650975:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004767088, "replaces_state": "$145868146917567BYjbT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eKNOYJrsucsyVfkpuPWicxrK", "displayname": "oly", "membership": "join" }, "event_id": "$15041246051694376omcZL:matrix.org", "membership": "join", "origin_server_ts": 1504124605046, "sender": "@oly:matrix.org", "state_key": "@oly:matrix.org", "type": "m.room.member", "unsigned": { "age": 6543347632 } }, { "content": { "avatar_url": "mxc://ajrs.uk/FTXsUmVtKLinilmeJfjBlwXm", "displayname": "s4b", "membership": "join" }, "event_id": "$14253963024iXGtE:ajrs.uk", "origin_server_ts": 1425396302085, "sender": "@s4b:ajrs.uk", "state_key": "@s4b:ajrs.uk", "type": "m.room.member", "unsigned": { "age": 85271650593, "replaces_state": "$14253962730EJlft:ajrs.uk" } }, { "content": { "membership": "leave" }, "event_id": "$14964965501UNdCb:alxu.ca", "membership": "leave", "origin_server_ts": 1496496550840, "sender": "@alxu:alxu.ca", "state_key": "@alxu:alxu.ca", "type": "m.room.member", "unsigned": { "age": 14171401838, "replaces_state": "$149645786018vwOAV:alxu.ca" } }, { "content": { "membership": "leave" }, "event_id": "$145347204889909JhWar:matrix.org", "origin_server_ts": 1453472048431, "sender": "@gcbjdsrhgdxvkodf:matrix.org", "state_key": "@gcbjdsrhgdxvkodf:matrix.org", "type": "m.room.member", "unsigned": { "age": 57195904247, "replaces_state": "$145347201189848wGhjV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14754503811733313OecwW:matrix.org", "membership": "leave", "origin_server_ts": 1475450381913, "sender": "@mlt:matrix.org", "state_key": "@mlt:matrix.org", "type": "m.room.member", "unsigned": { "age": 35217570765, "replaces_state": "$14754502491732967KQArp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014630393535066pInbF:matrix.org", "membership": "leave", "origin_server_ts": 1501463039301, "sender": "@freenode_deep-book-gk:matrix.org", "state_key": "@freenode_deep-book-gk:matrix.org", "type": "m.room.member", "unsigned": { "age": 9204913377, "replaces_state": "$15014629833533073CvonP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "meeh", "membership": "join" }, "event_id": "$14921069641080380Dnnju:matrix.org", "membership": "join", "origin_server_ts": 1492106964798, "sender": "@meeh:matrix.org", "state_key": "@meeh:matrix.org", "type": "m.room.member", "unsigned": { "age": 18560987880 } }, { "content": { "membership": "leave" }, "event_id": "$14970163853LrmtF:allthingssquared.com", "membership": "leave", "origin_server_ts": 1497016385281, "sender": "@chazdiezal:allthingssquared.com", "state_key": "@chazdiezal:allthingssquared.com", "type": "m.room.member", "unsigned": { "age": 13651567397, "replaces_state": "$14969660161vaMWi:allthingssquared.com" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1492077558741816hwJWd:matrix.org", "membership": "join", "origin_server_ts": 1492077558004, "sender": "@woutifier:matrix.org", "state_key": "@woutifier:matrix.org", "type": "m.room.member", "unsigned": { "age": 18590394674 } }, { "content": { "avatar_url": "mxc://matrix.org/loarOIKfBBxwHURKFDwkYDlY#auto", "displayname": "xavier", "membership": "join" }, "event_id": "$14303097552061IbErW:matrix.org", "origin_server_ts": 1430309755894, "sender": "@Xavierl:matrix.org", "state_key": "@Xavierl:matrix.org", "type": "m.room.member", "unsigned": { "age": 80358196784, "replaces_state": "$14303097302052npzjI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hEWoUoLNilNPpIFjyEwbizhe", "displayname": "lapinot", "membership": "join" }, "event_id": "$1487798500327261eScsP:matrix.org", "membership": "join", "origin_server_ts": 1487798500339, "sender": "@lapinot:matrix.org", "state_key": "@lapinot:matrix.org", "type": "m.room.member", "unsigned": { "age": 22869452339 } }, { "content": { "avatar_url": null, "displayname": "shell", "membership": "join" }, "event_id": "$14808760843438723YjzCy:matrix.org", "membership": "join", "origin_server_ts": 1480876084170, "sender": "@shell:matrix.org", "state_key": "@shell:matrix.org", "type": "m.room.member", "unsigned": { "age": 29791868508 } }, { "content": { "avatar_url": null, "displayname": "atig", "membership": "join" }, "event_id": "$1457542405198332knYNO:matrix.org", "membership": "join", "origin_server_ts": 1457542405570, "sender": "@atig:matrix.org", "state_key": "@atig:matrix.org", "type": "m.room.member", "unsigned": { "age": 53125547108 } }, { "content": { "avatar_url": null, "displayname": "Alef_Burzmali (IRC)", "membership": "join" }, "event_id": "$15061626512165868gBqed:matrix.org", "membership": "join", "origin_server_ts": 1506162651523, "sender": "@freenode_Alef_Burzmali:matrix.org", "state_key": "@freenode_Alef_Burzmali:matrix.org", "type": "m.room.member", "unsigned": { "age": 4505301155, "replaces_state": "$15061625422165070QAbIh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145436350314073fJHrJ:matrix.org", "origin_server_ts": 1454363503443, "sender": "@teopeurt:matrix.org", "state_key": "@teopeurt:matrix.org", "type": "m.room.member", "unsigned": { "age": 56304449235 } }, { "content": { "membership": "leave" }, "event_id": "$14966248624026826EqeTb:matrix.org", "membership": "leave", "origin_server_ts": 1496624862945, "sender": "@freenode_draynium:matrix.org", "state_key": "@freenode_draynium:matrix.org", "type": "m.room.member", "unsigned": { "age": 14043089733, "replaces_state": "$1495530393572563KYdWG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "machrider", "membership": "join" }, "event_id": "$14824451641151559bNuSC:matrix.org", "membership": "join", "origin_server_ts": 1482445164631, "sender": "@machrider:matrix.org", "state_key": "@machrider:matrix.org", "type": "m.room.member", "unsigned": { "age": 28222788047 } }, { "content": { "avatar_url": null, "displayname": "Dandy", "kind": "guest", "membership": "join" }, "event_id": "$1476369275635922CFwDm:matrix.org", "membership": "join", "origin_server_ts": 1476369275208, "sender": "@60890:matrix.org", "state_key": "@60890:matrix.org", "type": "m.room.member", "unsigned": { "age": 34298677470 } }, { "content": { "avatar_url": null, "displayname": "ster", "membership": "join" }, "event_id": "$15015743102730leBuI:disroot.org", "membership": "join", "origin_server_ts": 1501574310719, "sender": "@ster:disroot.org", "state_key": "@ster:disroot.org", "type": "m.room.member", "unsigned": { "age": 9093641959 } }, { "content": { "topic": "Dev chat for everyone building on top of Matrix | http://github.com/matrix-org | Current synapse version: v0.24.1 | Please use #matrix-architecture:matrix.org for debating Matrix's spec & design." }, "event_id": "$1508853852358XrBrZ:jki.re", "origin_server_ts": 1508853852483, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 1814100195, "prev_content": { "topic": "Dev chat for everyone building on top of Matrix | http://github.com/matrix-org | Current synapse version: v0.24.0 | Please use #matrix-architecture:matrix.org for debating Matrix's spec & design." }, "prev_sender": "@matthew:matrix.org", "replaces_state": "$1508851829210107shoXG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14902601501358606mFNgp:matrix.org", "membership": "leave", "origin_server_ts": 1490260150346, "sender": "@wjt:matrix.org", "state_key": "@wjt:matrix.org", "type": "m.room.member", "unsigned": { "age": 20407802332, "replaces_state": "$14803191241139922oyRcw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14232205880jUUiN:erikjohnston.com", "origin_server_ts": 1423220588462, "sender": "@erikj:erikjohnston.com", "state_key": "@erikj:erikjohnston.com", "type": "m.room.member", "unsigned": { "age": 87447364216, "replaces_state": "$14230695081sutcl:erikjohnston.com" } }, { "content": { "membership": "leave" }, "event_id": "$150280721612tDJet:ninetailed.ninja", "membership": "leave", "origin_server_ts": 1502807216858, "sender": "@alexander:ninetailed.ninja", "state_key": "@alexander:ninetailed.ninja", "type": "m.room.member", "unsigned": { "age": 7860735820, "replaces_state": "$15028009990evsCi:ninetailed.ninja" } }, { "content": { "membership": "leave" }, "event_id": "$148481547941rWjJd:matrix.zammit.org", "membership": "leave", "origin_server_ts": 1484815479883, "sender": "@damo22:matrix.zammit.org", "state_key": "@damo22:matrix.zammit.org", "type": "m.room.member", "unsigned": { "age": 25852472795, "replaces_state": "$1483334504290rBIeH:matrix.zammit.org" } }, { "content": { "membership": "leave" }, "event_id": "$1496250471378593Wubfw:matrix.org", "membership": "leave", "origin_server_ts": 1496250471896, "sender": "@Nowee:matrix.org", "state_key": "@Nowee:matrix.org", "type": "m.room.member", "unsigned": { "age": 14417480782, "replaces_state": "$1496238255201267tpure:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1462649190326197FMNZY:matrix.org", "membership": "leave", "origin_server_ts": 1462649190539, "sender": "@YaBoyBiggs:matrix.org", "state_key": "@YaBoyBiggs:matrix.org", "type": "m.room.member", "unsigned": { "age": 48018762139, "replaces_state": "$1462649155326141kDZaF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "loraafsd", "membership": "join" }, "event_id": "$15005896794283547iswQD:matrix.org", "membership": "join", "origin_server_ts": 1500589679039, "sender": "@loraafsd:matrix.org", "state_key": "@loraafsd:matrix.org", "type": "m.room.member", "unsigned": { "age": 10078273639 } }, { "content": { "avatar_url": "mxc://matrix.org/tfOStCyJltEXDXqiogsAQaIZ", "displayname": "Daniel", "membership": "join" }, "event_id": "$14743762822573FWcyk:matrix.org", "membership": "join", "origin_server_ts": 1474376282332, "sender": "@d_abelski:matrix.org", "state_key": "@d_abelski:matrix.org", "type": "m.room.member", "unsigned": { "age": 36291670346, "replaces_state": "$147306890111121EEnAe:matrix.org" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$1497672797767880XDAgE:matrix.org", "membership": "leave", "origin_server_ts": 1497672797146, "sender": "@265442:matrix.org", "state_key": "@265442:matrix.org", "type": "m.room.member", "unsigned": { "age": 12995155532, "replaces_state": "$1497669971733851nIJkX:matrix.org" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$1476463188961209EBikk:matrix.org", "membership": "leave", "origin_server_ts": 1476463188132, "sender": "@50656:matrix.org", "state_key": "@50656:matrix.org", "type": "m.room.member", "unsigned": { "age": 34204764546, "replaces_state": "$1474734360646347GXjRo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1473709174166DDiJt:exul.org", "membership": "leave", "origin_server_ts": 1473709174695, "sender": "@gitter:exul.org", "state_key": "@gitter:exul.org", "type": "m.room.member", "unsigned": { "age": 36958777983, "replaces_state": "$1473709173165qNoJS:exul.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DroXzYrMOzupIXfIWbknkrvd", "displayname": "nicorikken", "membership": "join" }, "event_id": "$14970896881541557Fjuxw:matrix.org", "membership": "join", "origin_server_ts": 1497089688103, "sender": "@nicorikken:matrix.org", "state_key": "@nicorikken:matrix.org", "type": "m.room.member", "unsigned": { "age": 13578264575, "replaces_state": "$1487932497345761BvDbF:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15081117189Abdhb:maniacsvault.net", "membership": "leave", "origin_server_ts": 1508111718994, "sender": "@blzut3:maniacsvault.net", "state_key": "@blzut3:maniacsvault.net", "type": "m.room.member", "unsigned": { "age": 2556233684, "prev_content": { "avatar_url": null, "displayname": "Blzut3", "membership": "join" }, "prev_sender": "@blzut3:maniacsvault.net", "replaces_state": "$15081109518pHRYf:maniacsvault.net" } }, { "content": { "membership": "leave" }, "event_id": "$14963639531654171rsjUj:matrix.org", "membership": "leave", "origin_server_ts": 1496363953029, "sender": "@146376:matrix.org", "state_key": "@146376:matrix.org", "type": "m.room.member", "unsigned": { "age": 14303999649, "replaces_state": "$14963613851630238ZcStU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "esph (IRC)", "membership": "join" }, "event_id": "$1509419397950206SvOWD:matrix.org", "membership": "join", "origin_server_ts": 1509419397206, "sender": "@freenode_esph:matrix.org", "state_key": "@freenode_esph:matrix.org", "type": "m.room.member", "unsigned": { "age": 1248555472, "replaces_state": "$1509419356949743QOPxC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sascha", "membership": "join" }, "event_id": "$1469898599719736AebpA:matrix.org", "membership": "join", "origin_server_ts": 1469898599909, "sender": "@Sascha:matrix.org", "state_key": "@Sascha:matrix.org", "type": "m.room.member", "unsigned": { "age": 40769352769, "replaces_state": "$1469889255707228MILqU:matrix.org" } }, { "content": { "avatar_url": "mxc://tools.f4.htw-berlin.de/LfxwqZYXdmOdrkxsGLxdTrMw", "displayname": "Christoph", "membership": "join" }, "event_id": "$1485423925669yfWAg:tools.f4.htw-berlin.de", "membership": "join", "origin_server_ts": 1485423925931, "sender": "@christoph:tools.f4.htw-berlin.de", "state_key": "@christoph:tools.f4.htw-berlin.de", "type": "m.room.member", "unsigned": { "age": 25244026747, "prev_content": { "membership": "leave" }, "prev_sender": "@christoph:tools.f4.htw-berlin.de", "replaces_state": "$1485423893668ypGkd:tools.f4.htw-berlin.de" } }, { "content": { "avatar_url": "mxc://cmc.im/mYBwnIpLrildjOloQSFfMEGe", "displayname": "roblabla", "membership": "join" }, "event_id": "$146202454429eJOvr:cmc.im", "origin_server_ts": 1462024544277, "sender": "@roblabla:cmc.im", "state_key": "@roblabla:cmc.im", "type": "m.room.member", "unsigned": { "age": 174 } }, { "content": { "membership": "leave" }, "event_id": "$1506835818741399hOcEO:matrix.org", "membership": "leave", "origin_server_ts": 1506835818862, "sender": "@sn0:matrix.org", "state_key": "@sn0:matrix.org", "type": "m.room.member", "unsigned": { "age": 3832133816, "replaces_state": "$1506806854437108dFnip:matrix.org" } }, { "content": { "avatar_url": "mxc://maxwellkepler.uk/CGImvdoLVGbwESnsCUUzTOFl", "displayname": "MaxwellK", "membership": "join" }, "event_id": "$150403659681tXTkn:maxwellkepler.uk", "membership": "join", "origin_server_ts": 1504036596192, "sender": "@MaxwellK:maxwellkepler.uk", "state_key": "@MaxwellK:maxwellkepler.uk", "type": "m.room.member", "unsigned": { "age": 6631356486, "replaces_state": "$1487669091478qjZoT:maxwellkepler.uk" } }, { "content": { "membership": "leave" }, "event_id": "$1508469879939560YBIUU:matrix.org", "membership": "leave", "origin_server_ts": 1508469879234, "sender": "@freenode_scrdcow_:matrix.org", "state_key": "@freenode_scrdcow_:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198073444, "replaces_state": "$15072572541367620uVIpf:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/uBRvLLyLOksrsCKZRafjvPdk#auto", "displayname": "Erikj", "membership": "join" }, "event_id": "$142367712494mQFAy:matrix.org", "origin_server_ts": 1423677124439, "sender": "@erikj:matrix.org", "state_key": "@erikj:matrix.org", "type": "m.room.member", "unsigned": { "age": 86990828239, "replaces_state": "$1423611283470twFGP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wRBgRyXypVtstiPlXYBYiqPT", "displayname": "caught_in_the_matrix", "membership": "join" }, "event_id": "$1483657613240835ZQKMm:matrix.org", "membership": "join", "origin_server_ts": 1483657613972, "sender": "@caught_in_the_matrix:matrix.org", "state_key": "@caught_in_the_matrix:matrix.org", "type": "m.room.member", "unsigned": { "age": 27010338706 } }, { "content": { "membership": "leave" }, "event_id": "$15057377455MVtwX:sw1v.org", "membership": "leave", "origin_server_ts": 1505737745363, "sender": "@vdhtest10:sw1v.org", "state_key": "@vdhtest10:sw1v.org", "type": "m.room.member", "unsigned": { "age": 4930207315, "replaces_state": "$1503052829278DJpJa:sw1v.org" } }, { "content": { "membership": "leave" }, "event_id": "$150498699639XQqwn:ryan-vps-1.bradyrtech.com", "membership": "leave", "origin_server_ts": 1504986996762, "sender": "@ryanadm:ryan-vps-1.bradyrtech.com", "state_key": "@ryanadm:ryan-vps-1.bradyrtech.com", "type": "m.room.member", "unsigned": { "age": 5680955916, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@ryanadm:ryan-vps-1.bradyrtech.com", "replaces_state": "$150498693838ZbzyS:ryan-vps-1.bradyrtech.com" } }, { "content": { "membership": "leave" }, "event_id": "$1465105231155327sVtQy:matrix.org", "membership": "leave", "origin_server_ts": 1465105231941, "sender": "@minjh:matrix.org", "state_key": "@minjh:matrix.org", "type": "m.room.member", "unsigned": { "age": 45562720737, "replaces_state": "$1464617726373773izvUo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143983304513024ZggXF:matrix.org", "origin_server_ts": 1439833045733, "sender": "@yuma:matrix.org", "state_key": "@yuma:matrix.org", "type": "m.room.member", "unsigned": { "age": 70834906945, "replaces_state": "$143947208740394OxCNC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZJvhwvitBvExWbUmtAFoDsMs", "displayname": "Александр Попсуенко", "membership": "join" }, "event_id": "$1481280672285631uIZql:matrix.org", "membership": "join", "origin_server_ts": 1481280672592, "sender": "@AlexPops:matrix.org", "state_key": "@AlexPops:matrix.org", "type": "m.room.member", "unsigned": { "age": 29387280086, "replaces_state": "$1481280541284453ajXlE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 127839", "kind": "guest", "membership": "join" }, "event_id": "$14845658311988668hexEh:matrix.org", "membership": "join", "origin_server_ts": 1484565831172, "sender": "@127839:matrix.org", "state_key": "@127839:matrix.org", "type": "m.room.member", "unsigned": { "age": 26102121506 } }, { "content": { "avatar_url": "mxc://matrix.org/DjfvhrEEjWoiOlmBknbxJAii#auto", "displayname": "Jen Jenson", "membership": "join" }, "event_id": "$14404258978420chkbd:matrix.org", "membership": "join", "origin_server_ts": 1440425897042, "sender": "@matripard:matrix.org", "state_key": "@matripard:matrix.org", "type": "m.room.member", "unsigned": { "age": 70242055636 } }, { "content": { "membership": "leave" }, "event_id": "$14996193550wLTVN:kuopzi.nl", "membership": "leave", "origin_server_ts": 1499619355556, "sender": "@nemno:kuopzi.nl", "state_key": "@nemno:kuopzi.nl", "type": "m.room.member", "unsigned": { "age": 11048597122, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@nemno:kuopzi.nl", "replaces_state": "$14996114464dpsPM:kuopzi.nl" } }, { "content": { "avatar_url": "mxc://matrix.org/hJpxSZjulqtDOaeefTRkSNke", "displayname": "UltraPeepi", "membership": "join" }, "event_id": "$14348316465796HVhWX:matrix.org", "origin_server_ts": 1434831646244, "sender": "@srakonza:matrix.org", "state_key": "@srakonza:matrix.org", "type": "m.room.member", "unsigned": { "age": 75836306434, "replaces_state": "$14348312225758qmssx:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 176771", "kind": "guest", "membership": "join" }, "event_id": "$148940921558773fQWBI:matrix.org", "membership": "join", "origin_server_ts": 1489409215881, "sender": "@176771:matrix.org", "state_key": "@176771:matrix.org", "type": "m.room.member", "unsigned": { "age": 21258736797 } }, { "content": { "avatar_url": null, "displayname": "fruitloop", "membership": "join" }, "event_id": "$1506717307111TuHJC:planitz.at", "membership": "join", "origin_server_ts": 1506717307707, "sender": "@roland:planitz.at", "state_key": "@roland:planitz.at", "type": "m.room.member", "unsigned": { "age": 3950644971, "replaces_state": "$15066821171HVgPU:planitz.at" } }, { "content": { "avatar_url": "mxc://wagwar.com/wEsmVzmnhJPGumUJgavhNosg", "displayname": "Trevor", "membership": "join" }, "event_id": "$148195785632igwrx:wagwar.com", "membership": "join", "origin_server_ts": 1481957856766, "sender": "@trevor:wagwar.com", "state_key": "@trevor:wagwar.com", "type": "m.room.member", "unsigned": { "age": 28710095912, "prev_content": { "avatar_url": "mxc://wagwar.com/RdsFcXYgFXEDTuSnxwClfmDq", "displayname": "Trevor", "membership": "join" }, "prev_sender": "@trevor:wagwar.com", "replaces_state": "$146332961410NBQrZ:wagwar.com" } }, { "content": { "membership": "leave" }, "event_id": "$14552049024bdIpa:xmine128.tk", "origin_server_ts": 1455204902221, "sender": "@alexander255:xmine128.tk", "state_key": "@alexander255:xmine128.tk", "type": "m.room.member", "unsigned": { "age": 55463050457, "replaces_state": "$14552046553pYaTi:xmine128.tk" } }, { "content": { "avatar_url": null, "displayname": "kent", "membership": "join" }, "event_id": "$14898260603vkRJv:kentshikama.com", "origin_server_ts": 1489826060604, "sender": "@kent:kentshikama.com", "state_key": "@kent:kentshikama.com", "type": "m.room.member", "unsigned": { "age": 12, "replaces_state": "$14898258261fGSEq:kentshikama.com" } }, { "content": { "avatar_url": "mxc://jki.re/eTGFYOWsQkZuLWDXOtyVKFBn", "displayname": null, "membership": "join" }, "event_id": "$146006316633jVlNH:jki.re", "membership": "join", "origin_server_ts": 1460063166720, "sender": "@:jki.re", "state_key": "@:jki.re", "type": "m.room.member", "unsigned": { "age": 50604785958, "replaces_state": "$14228874223SrgOM:jki.re" } }, { "content": { "membership": "leave" }, "event_id": "$1509448664155IPAEj:matrix.veritasgenetics.com", "membership": "leave", "origin_server_ts": 1509448664558, "sender": "@SuljoDelic:matrix.veritasgenetics.com", "state_key": "@SuljoDelic:matrix.veritasgenetics.com", "type": "m.room.member", "unsigned": { "age": 1219288120, "prev_content": { "avatar_url": null, "displayname": "Sulejman Delic", "membership": "join" }, "prev_sender": "@SuljoDelic:matrix.veritasgenetics.com", "replaces_state": "$15093723852043rZgNY:matrix.veritasgenetics.com" } }, { "content": { "membership": "leave" }, "event_id": "$14847298212948656KzAWj:matrix.org", "membership": "leave", "origin_server_ts": 1484729821985, "sender": "@dave:matrix.org", "state_key": "@bubbles229693:matrix.org", "type": "m.room.member", "unsigned": { "age": 25938130693, "replaces_state": "$14847118852874439PkXgZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/tfXprPYmFcleuaBwxRskvxZW", "displayname": "ChrisG", "membership": "join" }, "event_id": "$14857197592131257xPwsV:matrix.org", "membership": "join", "origin_server_ts": 1485719759949, "sender": "@chrisdg:matrix.org", "state_key": "@chrisdg:matrix.org", "type": "m.room.member", "unsigned": { "age": 24948192729, "replaces_state": "$1470762384691081wSrge:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14545995645450YjWng:matrix.org", "origin_server_ts": 1454599564685, "sender": "@arviceblot:matrix.org", "state_key": "@arviceblot:matrix.org", "type": "m.room.member", "unsigned": { "age": 56068387993, "replaces_state": "$14545986914339FFTvJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/rMZNgoKDuNfrbVcjlsRyqMFD#auto", "displayname": "valere", "membership": "join" }, "event_id": "$14282281351193JZBKX:matrix.org", "origin_server_ts": 1428228135446, "sender": "@neodu35:matrix.org", "state_key": "@neodu35:matrix.org", "type": "m.room.member", "unsigned": { "age": 82439817232, "replaces_state": "$14282281051183yEHnc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.disobedientmedia.com/oyxebCRuWkbHNdUoAQerwiYX", "displayname": "Ethan ", "membership": "join" }, "event_id": "$15020085962024pztgZ:matrix.disobedientmedia.com", "origin_server_ts": 1502008596746, "sender": "@ethan:matrix.disobedientmedia.com", "state_key": "@ethan:matrix.disobedientmedia.com", "type": "m.room.member", "unsigned": { "age": 28 } }, { "content": { "membership": "leave" }, "event_id": "$14956632512026453vRZxu:matrix.org", "membership": "leave", "origin_server_ts": 1495663251086, "sender": "@freenode_kaniini:matrix.org", "state_key": "@freenode_kaniini:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004701592, "replaces_state": "$1464238464209147NYyIX:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612445028oKVJp:matrix.org", "origin_server_ts": 1429261244860, "sender": "@kegan:matrix.org", "state_key": "@irc_Ara4n:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406707818, "replaces_state": "$1426970576990jUkFU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.penguin42.com/PeXoOUAKEkIccgtztypdKwRo", "displayname": "penguin42", "membership": "join" }, "event_id": "$14829686876lxscY:matrix.penguin42.com", "origin_server_ts": 1482968687049, "sender": "@penguin42:matrix.penguin42.com", "state_key": "@penguin42:matrix.penguin42.com", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": "mxc://matrix.org/KLftEKXxNrSsYYQiOTulXioQ", "displayname": "Tom", "membership": "join" }, "event_id": "$1509769115914441YkzFY:matrix.org", "membership": "join", "origin_server_ts": 1509769115505, "sender": "@rusty-shackleford:matrix.org", "state_key": "@rusty-shackleford:matrix.org", "type": "m.room.member", "unsigned": { "age": 898837173, "replaces_state": "$1509767124895159PBgpf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 135983", "kind": "guest", "membership": "join" }, "event_id": "$148528792685674LhTJZ:matrix.org", "membership": "join", "origin_server_ts": 1485287926618, "sender": "@135983:matrix.org", "state_key": "@135983:matrix.org", "type": "m.room.member", "unsigned": { "age": 25380026060 } }, { "content": { "membership": "leave" }, "event_id": "$14956632522026480FkbJh:matrix.org", "membership": "leave", "origin_server_ts": 1495663252148, "sender": "@freenode_meeb:matrix.org", "state_key": "@freenode_meeb:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004700530, "replaces_state": "$1494675639827031fTUyO:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ibrokemypie", "membership": "join" }, "event_id": "$14991805753884389CAuyY:matrix.org", "membership": "join", "origin_server_ts": 1499180575871, "sender": "@ibrokemypie:matrix.org", "state_key": "@ibrokemypie:matrix.org", "type": "m.room.member", "unsigned": { "age": 11487376807, "replaces_state": "$14987353591760871ncedX:matrix.org" } }, { "content": { "avatar_url": "mxc://kardash.su/ZnrzDpYOzrucQMymhyJfTJvi", "displayname": "Slipeer", "membership": "join" }, "event_id": "$14944802541uDeko:kardash.su", "origin_server_ts": 1494480254262, "sender": "@pavel:kardash.su", "state_key": "@pavel:kardash.su", "type": "m.room.member", "unsigned": { "age": 32 } }, { "content": { "membership": "leave" }, "event_id": "$14527876956406EYwdg:matrix.org", "origin_server_ts": 1452787695420, "sender": "@Demon:matrix.org", "state_key": "@Demon:matrix.org", "type": "m.room.member", "unsigned": { "age": 57880257258, "replaces_state": "$14527876316280PEceG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Shohel ", "membership": "join" }, "event_id": "$145349633218398MuRSG:matrix.org", "origin_server_ts": 1453496332217, "sender": "@shohel:matrix.org", "state_key": "@shohel:matrix.org", "type": "m.room.member", "unsigned": { "age": 57171620461, "replaces_state": "$145349588217717Ixiur:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Albert Gasset", "membership": "join" }, "event_id": "$146504123688795wtZxI:matrix.org", "membership": "join", "origin_server_ts": 1465041236444, "sender": "@albertgasset:matrix.org", "state_key": "@albertgasset:matrix.org", "type": "m.room.member", "unsigned": { "age": 45626716234 } }, { "content": { "membership": "leave" }, "event_id": "$15085138381673573QjgfP:matrix.org", "membership": "leave", "origin_server_ts": 1508513838923, "sender": "@freenode_Zarthus:matrix.org", "state_key": "@freenode_Zarthus:matrix.org", "type": "m.room.member", "unsigned": { "age": 2154113755, "replaces_state": "$15085110891622187weIKt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15052319641DlGMd:mongkhonvanit.tk", "origin_server_ts": 1505231963966, "sender": "@kritphong:mongkhonvanit.tk", "state_key": "@kritphong:mongkhonvanit.tk", "type": "m.room.member", "unsigned": { "age": 33 } }, { "content": { "avatar_url": "mxc://matrix.org/AIjkxsjkbEpYsghvrprXIKVo#auto", "displayname": null, "membership": "join" }, "event_id": "$1423870402841bpMhx:matrix.org", "membership": "join", "origin_server_ts": 1423870402261, "sender": "@TheCreeper:matrix.org", "state_key": "@TheCreeper:matrix.org", "type": "m.room.member", "unsigned": { "age": 86797550417 } }, { "content": { "avatar_url": "mxc://matrix.org/ghNJcdqEuKJgvsePKGlAAmQw", "displayname": "adn", "membership": "join" }, "event_id": "$144205562739092Aozyx:matrix.org", "origin_server_ts": 1442055627422, "sender": "@adn:matrix.org", "state_key": "@adn:matrix.org", "type": "m.room.member", "unsigned": { "age": 68612325256, "replaces_state": "$144205561239089aWPgy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/prdansrcUAnBJEtGnRutJHhs", "displayname": "alex", "membership": "join" }, "event_id": "$143522920618949RSEwf:matrix.org", "origin_server_ts": 1435229206685, "sender": "@Alex:matrix.org", "state_key": "@Alex:matrix.org", "type": "m.room.member", "unsigned": { "age": 75438745993 } }, { "content": { "avatar_url": "mxc://matrix.org/ivlkfbPmbJjqSlqEfYTlwwIG", "displayname": "FreestyleCrafter", "membership": "join" }, "event_id": "$147333292513349zLAOx:matrix.org", "membership": "join", "origin_server_ts": 1473332925970, "sender": "@FreestyleCrafter:matrix.org", "state_key": "@FreestyleCrafter:matrix.org", "type": "m.room.member", "unsigned": { "age": 37335026708, "replaces_state": "$147333288913257wuUZH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1454405657682jINCp:matrix.org", "origin_server_ts": 1454405657669, "sender": "@hungle:matrix.org", "state_key": "@hungle:matrix.org", "type": "m.room.member", "unsigned": { "age": 56262295009, "replaces_state": "$1454405641664dSTKA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 12924", "kind": "guest", "membership": "join" }, "event_id": "$1464639686405387SbebM:matrix.org", "membership": "join", "origin_server_ts": 1464639686493, "sender": "@12924:matrix.org", "state_key": "@12924:matrix.org", "type": "m.room.member", "unsigned": { "age": 46028266185 } }, { "content": { "avatar_url": "mxc://matrix.org/nIJPpvWzuovMBHiiPSEMNYcp", "displayname": "lamdoan ", "membership": "join" }, "event_id": "$146486188083099RqmQM:matrix.org", "membership": "join", "origin_server_ts": 1464861880132, "sender": "@lamdoan:matrix.org", "state_key": "@lamdoan:matrix.org", "type": "m.room.member", "unsigned": { "age": 45806072546, "replaces_state": "$146486095681864bAjns:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QjAtdpayBdybxEfAHhFyAPKE", "displayname": "meznak 💻🔫", "membership": "join" }, "event_id": "$1456641555161016FxpbX:matrix.org", "membership": "join", "origin_server_ts": 1456641555400, "sender": "@meznak:matrix.org", "state_key": "@meznak:matrix.org", "type": "m.room.member", "unsigned": { "age": 54026397278, "replaces_state": "$1449596053289120xjgGr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/SdIruHAMCuOQSOXVhbeyaaQc", "displayname": "Per Boussard", "membership": "join" }, "event_id": "$14248543118703vpyel:matrix.org", "membership": "join", "origin_server_ts": 1424854311967, "sender": "@PerBoussard:matrix.org", "state_key": "@PerBoussard:matrix.org", "type": "m.room.member", "unsigned": { "age": 85813640711 } }, { "content": { "membership": "leave" }, "event_id": "$14999122592zMrIu:pcxserver.com", "membership": "leave", "origin_server_ts": 1499912259041, "sender": "@PhasecoreX:pcxserver.com", "state_key": "@PhasecoreX:pcxserver.com", "type": "m.room.member", "unsigned": { "age": 10755693637, "prev_content": { "avatar_url": "mxc://pcxserver.com/KuLPfkEXYBYmgwLavyBtqXbQ", "displayname": "PhasecoreX", "membership": "join" }, "prev_sender": "@PhasecoreX:pcxserver.com", "replaces_state": "$14955784011GSrjl:pcxserver.com" } }, { "content": { "membership": "leave" }, "event_id": "$1506875973219kkWAd:telekollektiv.org", "membership": "leave", "origin_server_ts": 1506875973964, "sender": "@cryptix:telekollektiv.org", "state_key": "@cryptix:telekollektiv.org", "type": "m.room.member", "unsigned": { "age": 3791978714, "prev_content": { "avatar_url": "mxc://telekollektiv.org/fjZKbPDuitkfbbqiktoroHjV", "displayname": "cryptix", "membership": "join" }, "prev_sender": "@cryptix:telekollektiv.org", "replaces_state": "$1506601623175RRGNm:telekollektiv.org" } }, { "content": { "avatar_url": "mxc://epiphyte.network/RkfUsBprEDkJdTnBYBCzoFQL", "displayname": "storrgie", "membership": "join" }, "event_id": "$1509981646160iJVtf:epiphyte.network", "membership": "join", "origin_server_ts": 1509981646106, "sender": "@agd:epiphyte.network", "state_key": "@agd:epiphyte.network", "type": "m.room.member", "unsigned": { "age": 686306572, "prev_content": { "avatar_url": "mxc://epiphyte.network/EDjdLPFSBxuyHxYsJsNjRkkA", "displayname": "storrgie", "membership": "join" }, "prev_sender": "@agd:epiphyte.network", "replaces_state": "$14862231203szbKX:epiphyte.network" } }, { "content": { "avatar_url": null, "displayname": "todder (IRC)", "membership": "join" }, "event_id": "$15095490572615538ueDaP:matrix.org", "membership": "join", "origin_server_ts": 1509549057026, "sender": "@freenode_todder:matrix.org", "state_key": "@freenode_todder:matrix.org", "type": "m.room.member", "unsigned": { "age": 1118895652, "replaces_state": "$1508469877939509zyVww:matrix.org" } }, { "content": { "avatar_url": null, "displayname": " LDu", "membership": "join" }, "event_id": "$148000657575293uiFHE:matrix.org", "membership": "join", "origin_server_ts": 1480006575449, "sender": "@LaurentDu:matrix.org", "state_key": "@LaurentDu:matrix.org", "type": "m.room.member", "unsigned": { "age": 30661377229 } }, { "content": { "membership": "leave" }, "event_id": "$15106301341274794axvGa:matrix.org", "membership": "leave", "origin_server_ts": 1510630134078, "sender": "@freenode_eggie:matrix.org", "state_key": "@freenode_eggie:matrix.org", "type": "m.room.member", "unsigned": { "age": 37818600, "replaces_state": "$1510208333142657bqPUZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14550182752730loYIW:matrix.org", "origin_server_ts": 1455018275868, "sender": "@kkzz123:matrix.org", "state_key": "@kkzz123:matrix.org", "type": "m.room.member", "unsigned": { "age": 55649676810, "replaces_state": "$14550181532688eQlYB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "deepakm", "membership": "join" }, "event_id": "$15006195194571207bEkNo:matrix.org", "membership": "join", "origin_server_ts": 1500619519439, "sender": "@deepakm:matrix.org", "state_key": "@deepakm:matrix.org", "type": "m.room.member", "unsigned": { "age": 10048433239 } }, { "content": { "avatar_url": "mxc://matrix.org/ChCvydqCAkVsoToAnkRDUDgp", "displayname": "Evil Matthew", "membership": "join" }, "event_id": "$149200508133916oCbNO:matrix.org", "membership": "join", "origin_server_ts": 1492005081618, "sender": "@matthew2:matrix.org", "state_key": "@matthew2:matrix.org", "type": "m.room.member", "unsigned": { "age": 18662871060, "replaces_state": "$14913877322469bMnRm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1460034686413592nveJB:matrix.org", "membership": "leave", "origin_server_ts": 1460034686006, "sender": "@drp:matrix.org", "state_key": "@drp:matrix.org", "type": "m.room.member", "unsigned": { "age": 50633266672, "replaces_state": "$1460034650413537qvZse:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 118297", "kind": "guest", "membership": "join" }, "event_id": "$1483654506215409DzUbO:matrix.org", "membership": "join", "origin_server_ts": 1483654506467, "sender": "@118297:matrix.org", "state_key": "@118297:matrix.org", "type": "m.room.member", "unsigned": { "age": 27013446211 } }, { "content": { "avatar_url": "mxc://matrix.org/CoISrgyArIsnzDWxxkLBFVBx", "displayname": "passant", "membership": "join" }, "event_id": "$1499361663834802qpAVD:matrix.org", "membership": "join", "origin_server_ts": 1499361663018, "sender": "@passant:matrix.org", "state_key": "@passant:matrix.org", "type": "m.room.member", "unsigned": { "age": 11306289660 } }, { "content": { "avatar_url": "mxc://kickass.systems/qmMdoSzRszvqOIsAaLikiwdE", "displayname": "rrix 🍕 🌎", "membership": "join" }, "event_id": "$15099015289602FJRCD:kickass.systems", "membership": "join", "origin_server_ts": 1509901528802, "sender": "@rrix:kickass.systems", "state_key": "@rrix:kickass.systems", "type": "m.room.member", "unsigned": { "age": 766423876, "replaces_state": "$15095518593261CSEDy:kickass.systems" } }, { "content": { "membership": "leave" }, "event_id": "$15041624892111006JPXjh:matrix.org", "membership": "leave", "origin_server_ts": 1504162489300, "sender": "@freenode_TehZorroness:matrix.org", "state_key": "@freenode_TehZorroness:matrix.org", "type": "m.room.member", "unsigned": { "age": 6505463378, "replaces_state": "$15041570292064712yVayZ:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612485031RIOpg:matrix.org", "origin_server_ts": 1429261248801, "sender": "@kegan:matrix.org", "state_key": "@irc_LeoNerd:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406703877, "replaces_state": "$14278110663751nIUzO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xyjWfxSYPClKuxGPhFODfMZF", "displayname": "William Berg", "membership": "join" }, "event_id": "$14307372822473FXIFf:matrix.org", "membership": "join", "origin_server_ts": 1430737282928, "sender": "@william.berg:matrix.org", "state_key": "@william.berg:matrix.org", "type": "m.room.member", "unsigned": { "age": 79930669750 } }, { "content": { "avatar_url": "mxc://matrix.org/clGHBKhiRyaSpbMHXwYJbIGP", "displayname": "Cadair", "membership": "join" }, "event_id": "$14941468391298976pGtYI:matrix.org", "membership": "join", "origin_server_ts": 1494146839363, "sender": "@Cadair:matrix.org", "state_key": "@Cadair:matrix.org", "type": "m.room.member", "unsigned": { "age": 16521113315, "replaces_state": "$14941467491298397XbiMT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HiiUosWkHAnaRhBsBarctYrm", "displayname": "Kay2", "membership": "join" }, "event_id": "$1466512069805470sdTIi:matrix.org", "membership": "join", "origin_server_ts": 1466512069291, "sender": "@kegan2:matrix.org", "state_key": "@kegan2:matrix.org", "type": "m.room.member", "unsigned": { "age": 44155883387, "replaces_state": "$1466512059805457YfuRy:matrix.org" } }, { "content": { "avatar_url": "mxc://levianetwork.dynu.net/ebNqrruikkTJAJpThKegJEUT", "displayname": "MegaMan", "membership": "join" }, "event_id": "$1505414701202zVyxw:levianetwork.dynu.net", "membership": "join", "origin_server_ts": 1505414701682, "sender": "@brian:levianetwork.dynu.net", "state_key": "@brian:levianetwork.dynu.net", "type": "m.room.member", "unsigned": { "age": 5253250996, "prev_content": { "avatar_url": "mxc://levianetwork.dynu.net/ebNqrruikkTJAJpThKegJEUT", "displayname": "BryguyMcGee", "membership": "join" }, "prev_sender": "@brian:levianetwork.dynu.net", "replaces_state": "$1505414645197MQOhm:levianetwork.dynu.net" } }, { "content": { "avatar_url": "mxc://matrix.org/ZWbFlYWYPIOVAujCsEwqSjrB#auto", "displayname": "Chathura Wijesinghe", "membership": "join" }, "event_id": "$1431325946337AIypq:matrix.org", "membership": "join", "origin_server_ts": 1431325946065, "sender": "@chathura:matrix.org", "state_key": "@chathura:matrix.org", "type": "m.room.member", "unsigned": { "age": 79342006613 } }, { "content": { "avatar_url": null, "displayname": "ash", "membership": "join" }, "event_id": "$15069138991601162JGYxP:matrix.org", "membership": "join", "origin_server_ts": 1506913899715, "sender": "@alphoneash:matrix.org", "state_key": "@alphoneash:matrix.org", "type": "m.room.member", "unsigned": { "age": 3754052963 } }, { "content": { "avatar_url": null, "displayname": "stefano", "membership": "join" }, "event_id": "$14973561486006Rlabe:matrix.org", "membership": "join", "origin_server_ts": 1497356148567, "sender": "@stefano:matrix.org", "state_key": "@stefano:matrix.org", "type": "m.room.member", "unsigned": { "age": 13311804111 } }, { "content": { "membership": "leave" }, "event_id": "$1471967517248042rysPb:matrix.org", "membership": "leave", "origin_server_ts": 1471967517970, "sender": "@IgorFuzdapp:matrix.org", "state_key": "@IgorFuzdapp:matrix.org", "type": "m.room.member", "unsigned": { "age": 38700434708, "replaces_state": "$1471906084120440moBWO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437583416950sKNHz:matrix.org", "membership": "leave", "origin_server_ts": 1499143758268, "sender": "@freenode_REDevil:matrix.org", "state_key": "@freenode_REDevil:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524194410, "replaces_state": "$14966111173816904YfkXd:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/rolswZgbbyejKEeRhQcRxtUE#auto", "displayname": "Bob2", "membership": "join" }, "event_id": "$1449550115236553osymb:matrix.org", "membership": "join", "origin_server_ts": 1449550115018, "sender": "@BOB12222:matrix.org", "state_key": "@BOB12222:matrix.org", "type": "m.room.member", "unsigned": { "age": 61117837660 } }, { "content": { "avatar_url": null, "displayname": "stupid_question", "kind": "guest", "membership": "join" }, "event_id": "$14828151472679434lRWqC:matrix.org", "membership": "join", "origin_server_ts": 1482815147312, "sender": "@111234:matrix.org", "state_key": "@111234:matrix.org", "type": "m.room.member", "unsigned": { "age": 27852805366 } }, { "content": { "avatar_url": null, "displayname": "andrew", "membership": "join" }, "event_id": "$14905663604nbZVr:thecowgoes.mooo.com", "origin_server_ts": 1490566360196, "sender": "@andrew:thecowgoes.mooo.com", "state_key": "@andrew:thecowgoes.mooo.com", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "membership": "leave" }, "event_id": "$1500128879880702tywqB:matrix.org", "membership": "leave", "origin_server_ts": 1500128879753, "sender": "@freenode_edoput:matrix.org", "state_key": "@freenode_edoput:matrix.org", "type": "m.room.member", "unsigned": { "age": 10539072925, "replaces_state": "$1500115342764095tFkvI:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632122025504JFsyi:matrix.org", "membership": "leave", "origin_server_ts": 1495663212295, "sender": "@freenode_oiaohm:matrix.org", "state_key": "@freenode_oiaohm:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004740383, "replaces_state": "$14864322491998942JuwwP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/SIjckPTakedyFuDavbzDeEel", "displayname": "Ringil", "membership": "join" }, "event_id": "$1499494705669990AMyBx:matrix.org", "membership": "join", "origin_server_ts": 1499494705732, "sender": "@Ringil:matrix.org", "state_key": "@Ringil:matrix.org", "type": "m.room.member", "unsigned": { "age": 11173246946 } }, { "content": { "avatar_url": "mxc://matrix.org/yuuaIeODsDIspMHovXAKmCKM#auto", "displayname": "Test Test", "membership": "join" }, "event_id": "$14304161204kbpQn:matrix.org", "membership": "join", "origin_server_ts": 1430416120653, "sender": "@Test326497:matrix.org", "state_key": "@Test326497:matrix.org", "type": "m.room.member", "unsigned": { "age": 80251832025 } }, { "content": { "avatar_url": null, "displayname": "darwin", "membership": "join" }, "event_id": "$145273112169608ooQdP:matrix.org", "origin_server_ts": 1452731121099, "sender": "@darwin:matrix.org", "state_key": "@darwin:matrix.org", "type": "m.room.member", "unsigned": { "age": 57936831579 } }, { "content": { "membership": "leave" }, "event_id": "$14174472283449BOZrK:matrix.org", "membership": "leave", "origin_server_ts": 1417447228838, "sender": "@rainer.piper:matrix.org", "state_key": "@rainer.piper:matrix.org", "type": "m.room.member", "unsigned": { "age": 93220723840 } }, { "content": { "membership": "leave" }, "event_id": "$15096151033536328vzEEk:matrix.org", "membership": "leave", "origin_server_ts": 1509615103277, "sender": "@freenode_PaulusNL:matrix.org", "state_key": "@freenode_PaulusNL:matrix.org", "type": "m.room.member", "unsigned": { "age": 1052849401, "replaces_state": "$15094530951285625DnkCY:matrix.org" } }, { "content": { "avatar_url": "mxc://maxwell.ydns.eu/bmOYRvELKftUOQmXrGFKzMCn", "displayname": "rnhmjoj", "membership": "join" }, "event_id": "$1502058535101uFnpQ:maxwell.ydns.eu", "origin_server_ts": 1502058534992, "sender": "@rnhmjoj:maxwell.ydns.eu", "state_key": "@rnhmjoj:maxwell.ydns.eu", "type": "m.room.member", "unsigned": { "age": 51 } }, { "content": { "membership": "leave" }, "event_id": "$144784692556439YevKd:matrix.org", "origin_server_ts": 1447846925300, "sender": "@hkp:matrix.org", "state_key": "@hkp:matrix.org", "type": "m.room.member", "unsigned": { "age": 62821027378, "replaces_state": "$144784272253294eoARp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148544615819Czqvx:home.rdash.in", "membership": "leave", "origin_server_ts": 1485446158626, "sender": "@Rain:home.rdash.in", "state_key": "@Rain:home.rdash.in", "type": "m.room.member", "unsigned": { "age": 25221794052, "prev_content": { "avatar_url": "mxc://home.rdash.in/ccxRkPHCjSsLtTGpKKqoeGxQ", "displayname": "Caerdwyn", "membership": "join" }, "prev_sender": "@Rain:home.rdash.in", "replaces_state": "$14842341901xbwWR:home.rdash.in" } }, { "content": { "membership": "leave" }, "event_id": "$1510023217431177FWKOG:matrix.org", "membership": "leave", "origin_server_ts": 1510023217327, "sender": "@freenode_wowaname:matrix.org", "state_key": "@freenode_wowaname:matrix.org", "type": "m.room.member", "unsigned": { "age": 644735351, "replaces_state": "$15099236542647733eTNVn:matrix.org" } }, { "content": { "avatar_url": "mxc://kyriasis.com/qrwijqmjDpeEHLnNeQQFUpTh", "displayname": "​remmy​", "membership": "join" }, "event_id": "$1485184844257leVAC:kyriasis.com", "membership": "join", "origin_server_ts": 1485184844732, "sender": "@kyrias:kyriasis.com", "state_key": "@kyrias:kyriasis.com", "type": "m.room.member", "unsigned": { "age": 25483107946, "prev_content": { "avatar_url": "mxc://kyriasis.com/qrwijqmjDpeEHLnNeQQFUpTh", "displayname": "​", "membership": "join" }, "prev_sender": "@kyrias:kyriasis.com", "replaces_state": "$1485183957162OWsIc:kyriasis.com" } }, { "content": { "avatar_url": "mxc://matrix.org/uGNTvAirOLNPUkUVdSlZUpnU", "displayname": "toad_polo", "membership": "join" }, "event_id": "$14966887124752991RyAwr:matrix.org", "membership": "join", "origin_server_ts": 1496688712649, "sender": "@bilge_emulsion:matrix.org", "state_key": "@bilge_emulsion:matrix.org", "type": "m.room.member", "unsigned": { "age": 13979240029, "replaces_state": "$1488585937810058svhrV:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RxsoJwJCtxTVcfowrrslucht#auto", "displayname": null, "membership": "join" }, "event_id": "$1446125678152686vqmmC:matrix.org", "origin_server_ts": 1446125678198, "sender": "@mody:matrix.org", "state_key": "@mody:matrix.org", "type": "m.room.member", "unsigned": { "age": 64542274480 } }, { "content": { "membership": "leave" }, "event_id": "$15055112117523162IclCZ:matrix.org", "membership": "leave", "origin_server_ts": 1505511211244, "sender": "@jaimeriot:matrix.org", "state_key": "@jaimeriot:matrix.org", "type": "m.room.member", "unsigned": { "age": 5156741434, "replaces_state": "$15055111917522858jAzRj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1436952273129356pVTZa:matrix.org", "origin_server_ts": 1436952273879, "sender": "@fabrixxm:matrix.org", "state_key": "@fabrixxm:matrix.org", "type": "m.room.member", "unsigned": { "age": 73715678799, "replaces_state": "$14267797422096PtNcC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YnbmPVBfIuiEsgRUvHAKlqmx", "displayname": "Erkki Seppälä", "membership": "join" }, "event_id": "$1441652461544560BeaFl:matrix.org", "origin_server_ts": 1441652461486, "sender": "@flux:matrix.org", "state_key": "@flux:matrix.org", "type": "m.room.member", "unsigned": { "age": 69015491192 } }, { "content": { "avatar_url": null, "displayname": "Niels", "membership": "join" }, "event_id": "$148382782213cOfDD:aerens.be", "origin_server_ts": 1483827822012, "sender": "@Niels:aerens.be", "state_key": "@Niels:aerens.be", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "avatar_url": "mxc://matrix.org/ZbUbYCtVHRrFXpUbMNJerpCX", "displayname": "jomari", "membership": "join" }, "event_id": "$15089477831628365lqquU:matrix.org", "membership": "join", "origin_server_ts": 1508947783853, "sender": "@jomari:matrix.org", "state_key": "@jomari:matrix.org", "type": "m.room.member", "unsigned": { "age": 1720168825 } }, { "content": { "membership": "leave" }, "event_id": "$15012800221687636Gxcwf:matrix.org", "membership": "leave", "origin_server_ts": 1501280022964, "sender": "@Trillon:matrix.org", "state_key": "@Trillon:matrix.org", "type": "m.room.member", "unsigned": { "age": 9387929714, "replaces_state": "$15012794091680159Lpynd:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145720086339164vBrlU:matrix.org", "membership": "join", "origin_server_ts": 1457200863935, "sender": "@cane:matrix.org", "state_key": "@cane:matrix.org", "type": "m.room.member", "unsigned": { "age": 53467088743 } }, { "content": { "avatar_url": "mxc://icymatrix.ml/KcSXKqonvFrIHoXNxoMnUBYM", "displayname": null, "membership": "join" }, "event_id": "$149932342710sXEak:icymatrix.ml", "origin_server_ts": 1499323426954, "sender": "@icyfire:icymatrix.ml", "state_key": "@icyfire:icymatrix.ml", "type": "m.room.member", "unsigned": { "age": 6, "replaces_state": "$1499323357414018EibXl:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1453114567101697Ythvz:matrix.org", "origin_server_ts": 1453114567653, "sender": "@WillNM:matrix.org", "state_key": "@WillNM:matrix.org", "type": "m.room.member", "unsigned": { "age": 57553385025 } }, { "content": { "avatar_url": "mxc://matrix.org/onsBJYWJzHFmQSIoBANItIAk", "displayname": "art|code", "membership": "join" }, "event_id": "$1502650370800055zeuRc:matrix.org", "membership": "join", "origin_server_ts": 1502650370727, "sender": "@rosecheval:matrix.org", "state_key": "@rosecheval:matrix.org", "type": "m.room.member", "unsigned": { "age": 8017581951, "replaces_state": "$15019332762834835hdmwt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "JB Fouet", "membership": "join" }, "event_id": "$1494588875142293OshOG:matrix.org", "membership": "join", "origin_server_ts": 1494588875451, "sender": "@testjbf:matrix.org", "state_key": "@testjbf:matrix.org", "type": "m.room.member", "unsigned": { "age": 16079077227, "replaces_state": "$14876052131469893rCuBu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OanFsKDlbjtyqmfdjJSMdGAz", "displayname": "f0x", "membership": "join" }, "event_id": "$149874412020834MSbUW:matrix.org", "membership": "join", "origin_server_ts": 1498744120670, "sender": "@f0x:matrix.org", "state_key": "@f0x:matrix.org", "type": "m.room.member", "unsigned": { "age": 11923832008, "replaces_state": "$14979684093485513uDQvi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14828950673091237gWNgF:matrix.org", "membership": "leave", "origin_server_ts": 1482895067580, "sender": "@xroses:matrix.org", "state_key": "@xroses:matrix.org", "type": "m.room.member", "unsigned": { "age": 27772885098, "replaces_state": "$14828314202738728Rohqf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "SoniEx2 (IRC)", "membership": "join" }, "event_id": "$1510225590551992loKFP:matrix.org", "membership": "join", "origin_server_ts": 1510225590926, "sender": "@freenode_SoniEx2:matrix.org", "state_key": "@freenode_SoniEx2:matrix.org", "type": "m.room.member", "unsigned": { "age": 442361752 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145431853661700MTgeD:matrix.org", "origin_server_ts": 1454318536428, "sender": "@svs:matrix.org", "state_key": "@svs:matrix.org", "type": "m.room.member", "unsigned": { "age": 56349416250 } }, { "content": { "membership": "leave" }, "event_id": "$149581155628nTtog:p2px.me", "membership": "leave", "origin_server_ts": 1495811556083, "sender": "@mp1:p2px.me", "state_key": "@mp1:p2px.me", "type": "m.room.member", "unsigned": { "age": 14856396595, "prev_content": { "avatar_url": "mxc://p2px.me/dWuSsEIJBtMiMdyKnWCDYZcH", "displayname": "mp1", "membership": "join" }, "prev_sender": "@mp1:p2px.me", "replaces_state": "$14957364173eEauy:p2px.me" } }, { "content": { "avatar_url": null, "displayname": "morteza", "membership": "join" }, "event_id": "$148398612126167iyyhp:matrix.org", "membership": "join", "origin_server_ts": 1483986121407, "sender": "@morteza:matrix.org", "state_key": "@morteza:matrix.org", "type": "m.room.member", "unsigned": { "age": 26681831271 } }, { "content": { "avatar_url": null, "displayname": "okashi", "membership": "join" }, "event_id": "$1495659643420NuDCQ:loliarmy.me", "origin_server_ts": 1495659643345, "sender": "@okashi:loliarmy.me", "state_key": "@okashi:loliarmy.me", "type": "m.room.member", "unsigned": { "age": 211 } }, { "content": { "avatar_url": "mxc://matrix.org/EWhmaQHInpmimCJhBTCaBYjJ", "displayname": "Magnolia", "membership": "join" }, "event_id": "$1502645163740865CNFHa:matrix.org", "membership": "join", "origin_server_ts": 1502645163199, "sender": "@airin:matrix.org", "state_key": "@airin:matrix.org", "type": "m.room.member", "unsigned": { "age": 8022789479, "replaces_state": "$1502466691294848rzthF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QyhjZoSqhvjEWegqWOFKUAhw", "displayname": "joshb", "membership": "join" }, "event_id": "$15041234231675660yXdXr:matrix.org", "membership": "join", "origin_server_ts": 1504123423511, "sender": "@joshb:matrix.org", "state_key": "@joshb:matrix.org", "type": "m.room.member", "unsigned": { "age": 6544529167, "replaces_state": "$14912322332200907EvTNt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1459091623283011lMvPX:matrix.org", "membership": "join", "origin_server_ts": 1459091623750, "sender": "@dunguyen:matrix.org", "state_key": "@dunguyen:matrix.org", "type": "m.room.member", "unsigned": { "age": 51576328928 } }, { "content": { "membership": "leave" }, "event_id": "$147999821232056gMeKV:matrix.org", "membership": "leave", "origin_server_ts": 1479998212140, "sender": "@DatseMultimedia:matrix.org", "state_key": "@DatseMultimedia:matrix.org", "type": "m.room.member", "unsigned": { "age": 30669740538, "replaces_state": "$1470179947103018VkfRO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/kPYifaDhUuOwQnXcmKzHfNBt#auto", "displayname": "Vince", "membership": "join" }, "event_id": "$144768057378500CzdCr:matrix.org", "origin_server_ts": 1447680573853, "sender": "@vinjdw:matrix.org", "state_key": "@vinjdw:matrix.org", "type": "m.room.member", "unsigned": { "age": 62987378825 } }, { "content": { "avatar_url": null, "displayname": "xyzz", "membership": "join" }, "event_id": "$1483202851378674gKLoW:matrix.org", "membership": "join", "origin_server_ts": 1483202851459, "sender": "@xyz:matrix.org", "state_key": "@xyz:matrix.org", "type": "m.room.member", "unsigned": { "age": 27465101219 } }, { "content": { "membership": "leave" }, "event_id": "$15005520613708893yOLax:matrix.org", "membership": "leave", "origin_server_ts": 1500552061594, "sender": "@freenode_CHCl3:matrix.org", "state_key": "@freenode_CHCl3:matrix.org", "type": "m.room.member", "unsigned": { "age": 10115891084, "replaces_state": "$15005503723688604ZQKHS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 175244", "kind": "guest", "membership": "join" }, "event_id": "$1489241929840978hjJcI:matrix.org", "membership": "join", "origin_server_ts": 1489241929928, "sender": "@175244:matrix.org", "state_key": "@175244:matrix.org", "type": "m.room.member", "unsigned": { "age": 21426022750 } }, { "content": { "membership": "leave" }, "event_id": "$14956632042025301Scbmx:matrix.org", "membership": "leave", "origin_server_ts": 1495663204099, "sender": "@freenode_ggggg:matrix.org", "state_key": "@freenode_ggggg:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004748579, "replaces_state": "$1466603451982558fXAMP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15105691625121Ganyn:matrix.org", "membership": "leave", "origin_server_ts": 1510569162258, "sender": "@Paul90:matrix.org", "state_key": "@Paul90:matrix.org", "type": "m.room.member", "unsigned": { "age": 98790420, "replaces_state": "$15007907501749018RPFuJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xvYCibVLHQDvIoycbeOYjHPt", "displayname": "BuZZ-dEE", "membership": "join" }, "event_id": "$14962195824841935aFIdH:matrix.org", "membership": "join", "origin_server_ts": 1496219582073, "sender": "@buzz-dee:matrix.org", "state_key": "@buzz-dee:matrix.org", "type": "m.room.member", "unsigned": { "age": 14448370605, "replaces_state": "$14844374741424794JtnNu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/uiUpjiRzXVTjAmKcCcQTVXWv", "displayname": "Gustavo Daniel", "membership": "join" }, "event_id": "$148313396367888Ofpit:matrix.org", "membership": "join", "origin_server_ts": 1483133963091, "sender": "@dvillarreal:matrix.org", "state_key": "@dvillarreal:matrix.org", "type": "m.room.member", "unsigned": { "age": 27533989587 } }, { "content": { "membership": "leave" }, "event_id": "$14835675041643333xxgZW:matrix.org", "membership": "leave", "origin_server_ts": 1483567504432, "sender": "@chr1s:matrix.org", "state_key": "@chr1s:matrix.org", "type": "m.room.member", "unsigned": { "age": 27100448246, "replaces_state": "$14835253281322839KAkob:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vMvpDGheQJacxyWjsGZzBJVa", "displayname": "testtest", "membership": "join" }, "event_id": "$1430374212424sWrYh:matrix.org", "origin_server_ts": 1430374212653, "sender": "@testtest:matrix.org", "state_key": "@testtest:matrix.org", "type": "m.room.member", "unsigned": { "age": 80293740025, "replaces_state": "$142541119111237NoYzB:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448183198786Omjzv:matrix.org", "membership": "leave", "origin_server_ts": 1509944818243, "sender": "@freenode_remi:matrix.org", "state_key": "@freenode_remi:matrix.org", "type": "m.room.member", "unsigned": { "age": 723134435, "replaces_state": "$15079923792545631qUIss:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1491483382729gtBhk:thinkingsauce.com", "membership": "leave", "origin_server_ts": 1491483382124, "sender": "@rosston:thinkingsauce.com", "state_key": "@rosston:thinkingsauce.com", "type": "m.room.member", "unsigned": { "age": 19184570554, "prev_content": { "avatar_url": "mxc://thinkingsauce.com/QBwhJcmkCyoKQLfebadlEYvo", "displayname": "rosston", "membership": "join" }, "prev_sender": "@rosston:thinkingsauce.com", "replaces_state": "$1490921616195tslpc:thinkingsauce.com" } }, { "content": { "avatar_url": null, "displayname": "awdd", "membership": "join" }, "event_id": "$1503743099981683qajoR:matrix.org", "membership": "join", "origin_server_ts": 1503743099334, "sender": "@awdd:matrix.org", "state_key": "@awdd:matrix.org", "type": "m.room.member", "unsigned": { "age": 6924853344 } }, { "content": { "avatar_url": "mxc://matrix.org/KqzxmQBGuAKVXDUplefVEfJr", "displayname": "FruitieX", "membership": "join" }, "event_id": "$14825912091827739vuZMK:matrix.org", "membership": "join", "origin_server_ts": 1482591209818, "sender": "@FruitieX:matrix.org", "state_key": "@FruitieX:matrix.org", "type": "m.room.member", "unsigned": { "age": 28076742860 } }, { "content": { "avatar_url": null, "displayname": "insu1109", "membership": "join" }, "event_id": "$15079979142612896xjHbs:matrix.org", "membership": "join", "origin_server_ts": 1507997914128, "sender": "@insu1109:matrix.org", "state_key": "@insu1109:matrix.org", "type": "m.room.member", "unsigned": { "age": 2670038550 } }, { "content": { "avatar_url": "mxc://matrix.org/sRtEVEBnIlNLWiIDhGmOeXGn", "displayname": "chugaistero", "membership": "join" }, "event_id": "$14804987731927564EqXlP:matrix.org", "membership": "join", "origin_server_ts": 1480498773338, "sender": "@chugaistero:matrix.org", "state_key": "@chugaistero:matrix.org", "type": "m.room.member", "unsigned": { "age": 30169179340 } }, { "content": { "membership": "leave" }, "event_id": "$14963091753172GidLV:matrix.bingo-boom.ru", "membership": "leave", "origin_server_ts": 1496309175347, "sender": "@ov_maslov:matrix.bingo-boom.ru", "state_key": "@ov_maslov:matrix.bingo-boom.ru", "type": "m.room.member", "unsigned": { "age": 14358777331, "prev_content": { "avatar_url": "mxc://matrix.bingo-boom.ru/ROxQDSBERxCKKfwSIUNmHfUD", "displayname": "Маслов Олег", "membership": "join" }, "prev_sender": "@ov_maslov:matrix.bingo-boom.ru", "replaces_state": "$14963091383170UxBHq:matrix.bingo-boom.ru" } }, { "content": { "membership": "leave" }, "event_id": "$1490876272866554VxKWm:matrix.org", "membership": "leave", "origin_server_ts": 1490876272733, "sender": "@aka:matrix.org", "state_key": "@aka:matrix.org", "type": "m.room.member", "unsigned": { "age": 19791679945, "replaces_state": "$1490868236798949lUgHD:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Luca", "membership": "join" }, "event_id": "$14884476192KWFXk:lplab.net", "origin_server_ts": 1488447619733, "sender": "@luca:lplab.net", "state_key": "@luca:lplab.net", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "avatar_url": null, "displayname": "thaumiel", "membership": "join" }, "event_id": "$1494872658288570IXUOZ:matrix.org", "membership": "join", "origin_server_ts": 1494872658190, "sender": "@thaumiel:matrix.org", "state_key": "@thaumiel:matrix.org", "type": "m.room.member", "unsigned": { "age": 15795294488 } }, { "content": { "membership": "leave" }, "event_id": "$15015333684873843ngWSr:matrix.org", "membership": "leave", "origin_server_ts": 1501533368736, "sender": "@panos.asproulis:matrix.org", "state_key": "@panos.asproulis:matrix.org", "type": "m.room.member", "unsigned": { "age": 9134583942, "replaces_state": "$14802865971031381nsaXe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1498648387762099ZKSqL:matrix.org", "membership": "leave", "origin_server_ts": 1498648387901, "sender": "@w1r0x:matrix.org", "state_key": "@w1r0x:matrix.org", "type": "m.room.member", "unsigned": { "age": 12019564777, "replaces_state": "$1498647028749148kMpJA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zGtTwuDZPqyHcKDgjAUmCAUO", "displayname": "Qqq)", "membership": "join" }, "event_id": "$1448906467193148YtOmz:matrix.org", "origin_server_ts": 1448906467451, "sender": "@karloid:matrix.org", "state_key": "@karloid:matrix.org", "type": "m.room.member", "unsigned": { "age": 61761485227, "replaces_state": "$1448906225192657ZoLnG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14845680701hmuGX:lvps.eu", "origin_server_ts": 1484568070330, "sender": "@mirek:lvps.eu", "state_key": "@mirek:lvps.eu", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "avatar_url": null, "displayname": "hemmy", "membership": "join" }, "event_id": "$1483118262465748GcqtX:matrix.org", "membership": "join", "origin_server_ts": 1483118262216, "sender": "@kyrizide:matrix.org", "state_key": "@kyrizide:matrix.org", "type": "m.room.member", "unsigned": { "age": 27549690462, "replaces_state": "$1483054062156861KxNev:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "m0Ray", "kind": "guest", "membership": "join" }, "event_id": "$14827748932485665WPLQq:matrix.org", "membership": "join", "origin_server_ts": 1482774893549, "sender": "@110894:matrix.org", "state_key": "@110894:matrix.org", "type": "m.room.member", "unsigned": { "age": 27893059129 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14205550180tFQzN:negativecurvature.net", "membership": "join", "origin_server_ts": 1420555018330, "sender": "@mjark:negativecurvature.net", "state_key": "@mjark:negativecurvature.net", "type": "m.room.member", "unsigned": { "age": 90112934348 } }, { "content": { "membership": "leave" }, "event_id": "$142513784791VKpCF:port1024.net", "origin_server_ts": 1425137847148, "sender": "@silvio:port1024.net", "state_key": "@silvio:port1024.net", "type": "m.room.member", "unsigned": { "age": 85530105530, "replaces_state": "$142513682490hojBq:port1024.net" } }, { "content": { "membership": "leave" }, "event_id": "$149915899813biqAT:edgeryders.eu", "membership": "leave", "origin_server_ts": 1499158998831, "sender": "@matthias:edgeryders.eu", "state_key": "@matthias:edgeryders.eu", "type": "m.room.member", "unsigned": { "age": 11508953847, "prev_content": { "avatar_url": "mxc://edgeryders.eu/tJjVcNwMZoYcIHxxAidcjkNC", "displayname": "matthias", "membership": "join" }, "prev_sender": "@matthias:edgeryders.eu", "replaces_state": "$149915861412ZpxYQ:edgeryders.eu" } }, { "content": { "membership": "leave" }, "event_id": "$14956632262025829iyRSl:matrix.org", "membership": "leave", "origin_server_ts": 1495663226215, "sender": "@freenode_ayushshah:matrix.org", "state_key": "@freenode_ayushshah:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004726463, "replaces_state": "$1456798577243083ASFEN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1501718902466405yLdij:matrix.org", "membership": "leave", "origin_server_ts": 1501718902659, "sender": "@freenode_http_GK1wmSU:matrix.org", "state_key": "@freenode_http_GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 8949050019, "replaces_state": "$1501718869466082AkXye:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15085296101961489XozUK:matrix.org", "membership": "leave", "origin_server_ts": 1508529610743, "sender": "@sim6:matrix.org", "state_key": "@sim6:matrix.org", "type": "m.room.member", "unsigned": { "age": 2138341935, "replaces_state": "$15085008171449057LzzgN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149666719045zxHTM:matrix.wdg.ovh", "membership": "leave", "origin_server_ts": 1496667190647, "sender": "@t3chguy:matrix.wdg.ovh", "state_key": "@t3chguy:matrix.wdg.ovh", "type": "m.room.member", "unsigned": { "age": 14000762031, "prev_content": { "avatar_url": null, "displayname": "t3chguy_old", "membership": "join" }, "prev_sender": "@t3chguy:matrix.wdg.ovh", "replaces_state": "$149666671031lVDVF:matrix.wdg.ovh" } }, { "content": { "membership": "leave" }, "event_id": "$1504948799215212eDRxa:matrix.org", "membership": "leave", "origin_server_ts": 1504948799379, "sender": "@lehmanju:matrix.org", "state_key": "@lehmanju:matrix.org", "type": "m.room.member", "unsigned": { "age": 5719153299, "replaces_state": "$15004708602674843CMALz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1475613316414266ePbTr:openmarket.com", "membership": "leave", "origin_server_ts": 1475613316974, "sender": "@steven:openmarket.com", "state_key": "@steven:openmarket.com", "type": "m.room.member", "unsigned": { "age": 35054635704, "replaces_state": "$144667598616018KIpLK:openmarket.com" } }, { "content": { "membership": "leave" }, "event_id": "$15029623621168908ddaBu:matrix.org", "membership": "leave", "origin_server_ts": 1502962362866, "sender": "@freenode_siyb:matrix.org", "state_key": "@freenode_siyb:matrix.org", "type": "m.room.member", "unsigned": { "age": 7705589812, "replaces_state": "$14725652346827htsmq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632442026283fsppd:matrix.org", "membership": "leave", "origin_server_ts": 1495663244916, "sender": "@freenode_genbattle:matrix.org", "state_key": "@freenode_genbattle:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004707762, "replaces_state": "$1447886368101204JTJLf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15100712071060329JTqnf:matrix.org", "membership": "leave", "origin_server_ts": 1510071207109, "sender": "@mflow:matrix.org", "state_key": "@mflow:matrix.org", "type": "m.room.member", "unsigned": { "age": 596745569, "replaces_state": "$15100700321037034tHLPi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14899566842bVNwk:buei.de", "membership": "leave", "origin_server_ts": 1489956684632, "sender": "@eric:buei.de", "state_key": "@eric:buei.de", "type": "m.room.member", "unsigned": { "age": 991579, "prev_content": { "avatar_url": "mxc://buei.de/EFrmLxkkeWcxWgCMVVKUsXAA", "displayname": "Eric", "membership": "join" }, "prev_sender": "@eric:buei.de", "replaces_state": "$14899565951KpVcG:buei.de" } }, { "content": { "membership": "leave" }, "event_id": "$1508721443393zvJJD:owls.io", "membership": "leave", "origin_server_ts": 1508721443696, "sender": "@alec:owls.io", "state_key": "@alec:owls.io", "type": "m.room.member", "unsigned": { "age": 1946508982, "prev_content": { "avatar_url": "mxc://owls.io/ZMfpqnDqxLLeJnbMKTTICorc", "displayname": "Alec", "membership": "join" }, "prev_sender": "@alec:owls.io", "replaces_state": "$1508237474149naOFC:owls.io" } }, { "content": { "avatar_url": null, "displayname": "Yu-Ri", "membership": "join" }, "event_id": "$1508417934121479iYzZt:matrix.org", "membership": "join", "origin_server_ts": 1508417934653, "sender": "@Yu-Ri:matrix.org", "state_key": "@Yu-Ri:matrix.org", "type": "m.room.member", "unsigned": { "age": 2250018025 } }, { "content": { "avatar_url": "mxc://tc.nz/aHlrSENukjTUdQlTExNhGaot", "displayname": "TC Fox", "membership": "join" }, "event_id": "$1487807690591uhJsL:tc.nz", "origin_server_ts": 1487807690571, "sender": "@tcfox:tc.nz", "state_key": "@tcfox:tc.nz", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "avatar_url": "mxc://matrix.org/LDrrFqrJaFKKiwnITOzTRSJt", "displayname": "farialima", "membership": "join" }, "event_id": "$15070425793263740hzStL:matrix.org", "membership": "join", "origin_server_ts": 1507042579113, "sender": "@farialima:matrix.org", "state_key": "@farialima:matrix.org", "type": "m.room.member", "unsigned": { "age": 3625373565, "replaces_state": "$15046471571641553HDIIH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DKCfxpoHBKTALTKMsZLZgZFn#auto", "displayname": "Steven", "membership": "join" }, "event_id": "$144563276831175GlMXk:matrix.org", "origin_server_ts": 1445632768007, "sender": "@stevenh7n:matrix.org", "state_key": "@stevenh7n:matrix.org", "type": "m.room.member", "unsigned": { "age": 65035184671, "replaces_state": "$144563274431143oRWCc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/VUQRUZBGqBsepbHuAPlJRcea", "displayname": "Remram", "membership": "join" }, "event_id": "$1479079995975050dBgED:matrix.org", "membership": "join", "origin_server_ts": 1479079995532, "sender": "@Remram:matrix.org", "state_key": "@Remram:matrix.org", "type": "m.room.member", "unsigned": { "age": 31587957146 } }, { "content": { "avatar_url": null, "displayname": "aki003", "membership": "join" }, "event_id": "$1477686907156053dKRYc:matrix.org", "membership": "join", "origin_server_ts": 1477686907802, "sender": "@aki003:matrix.org", "state_key": "@aki003:matrix.org", "type": "m.room.member", "unsigned": { "age": 32981044876 } }, { "content": { "avatar_url": "mxc://matrix.org/HXpoLHuICudpvEHKRfytbxPu", "displayname": "dp", "membership": "join" }, "event_id": "$14798402271014442Afywq:matrix.org", "membership": "join", "origin_server_ts": 1479840227776, "sender": "@daph:matrix.org", "state_key": "@daph:matrix.org", "type": "m.room.member", "unsigned": { "age": 30827724902 } }, { "content": { "avatar_url": "mxc://matrix.org/wrrTLTLiXdzNCSCoYVsRzTVZ#auto", "displayname": "Ken", "membership": "join" }, "event_id": "$1432715105554GDmEV:matrix.org", "membership": "join", "origin_server_ts": 1432715105060, "sender": "@ken:matrix.org", "state_key": "@ken:matrix.org", "type": "m.room.member", "unsigned": { "age": 77952847618 } }, { "content": { "membership": "leave" }, "event_id": "$145769578022RzHKa:opendatascience.mtrx.space", "origin_server_ts": 1457695780421, "sender": "@wldhx:opendatascience.mtrx.space", "state_key": "@wldhx:opendatascience.mtrx.space", "type": "m.room.member", "unsigned": { "age": 52972172257, "replaces_state": "$145740278619hoRvf:opendatascience.mtrx.space" } }, { "content": { "membership": "leave" }, "event_id": "$15068556720KRzgC:schneefux.xyz", "membership": "leave", "origin_server_ts": 1506855672570, "sender": "@schneefux:schneefux.xyz", "state_key": "@schneefux:schneefux.xyz", "type": "m.room.member", "unsigned": { "age": 3812280108, "prev_content": { "avatar_url": null, "displayname": "schneefux", "membership": "join" }, "prev_sender": "@schneefux:schneefux.xyz", "replaces_state": "$15068522141xdbJT:schneefux.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$1444618788235794mSJsX:matrix.org", "origin_server_ts": 1444618788516, "sender": "@firecat53:matrix.org", "state_key": "@firecat53:matrix.org", "type": "m.room.member", "unsigned": { "age": 66049164162, "replaces_state": "$1444618690235755jFPAT:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15087310074511306YvyqA:matrix.org", "membership": "leave", "origin_server_ts": 1508731007606, "sender": "@freenode_InstantGratifica:matrix.org", "state_key": "@freenode_InstantGratifica:matrix.org", "type": "m.room.member", "unsigned": { "age": 1936945072, "replaces_state": "$15084903261266331zKwSb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "bisongde", "membership": "join" }, "event_id": "$1506823419625549gfOqC:matrix.org", "membership": "join", "origin_server_ts": 1506823419380, "sender": "@bisongde:matrix.org", "state_key": "@bisongde:matrix.org", "type": "m.room.member", "unsigned": { "age": 3844533298 } }, { "content": { "membership": "leave" }, "event_id": "$14814017533sNOnp:sigwinch.uk", "origin_server_ts": 1481401753982, "sender": "@joe:sigwinch.uk", "state_key": "@joe:sigwinch.uk", "type": "m.room.member", "unsigned": { "age": 29266198696, "replaces_state": "$14814015922IJuNt:sigwinch.uk" } }, { "content": { "avatar_url": "mxc://matrix.org/bWQqjOAwgvWtggFTUAmwUaKH", "displayname": "katarpilar", "membership": "join" }, "event_id": "$15077109571269407ADkMo:matrix.org", "membership": "join", "origin_server_ts": 1507710957532, "sender": "@katarpilar:matrix.org", "state_key": "@katarpilar:matrix.org", "type": "m.room.member", "unsigned": { "age": 2956995146 } }, { "content": { "membership": "leave" }, "event_id": "$1468146896417152EiFoa:matrix.org", "membership": "leave", "origin_server_ts": 1468146896085, "sender": "@fuloating:matrix.org", "state_key": "@fuloating:matrix.org", "type": "m.room.member", "unsigned": { "age": 42521056593, "replaces_state": "$1456646825162058lCFEg:matrix.org" } }, { "content": { "avatar_url": "mxc://moulticast.net/kMORobqplBUjcBmBixmBiOpa", "displayname": "zed", "membership": "join" }, "event_id": "$14837730551VmZVQ:moulticast.net", "origin_server_ts": 1483773055687, "sender": "@zed:moulticast.net", "state_key": "@zed:moulticast.net", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "membership": "leave" }, "event_id": "$1510610283683167HaCuO:matrix.org", "membership": "leave", "origin_server_ts": 1510610283567, "sender": "@bergasche:matrix.org", "state_key": "@bergasche:matrix.org", "type": "m.room.member", "unsigned": { "age": 57669111, "replaces_state": "$1510609867675053QJOUv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1505613662495fESpr:nhewitt-redmine.port0.org", "membership": "leave", "origin_server_ts": 1505613662423, "sender": "@nhewitt:nhewitt-redmine.port0.org", "state_key": "@nhewitt:nhewitt-redmine.port0.org", "type": "m.room.member", "unsigned": { "age": 5054290255, "prev_content": { "avatar_url": "mxc://nhewitt-redmine.port0.org/ULMHzvnPhWDVqgpfKAMcEXzY", "displayname": "nhewitt", "membership": "join" }, "prev_sender": "@nhewitt:nhewitt-redmine.port0.org", "replaces_state": "$1504555537246ZbRSx:nhewitt-redmine.port0.org" } }, { "content": { "avatar_url": null, "displayname": "pwnz", "membership": "join" }, "event_id": "$145342188045806FFvwz:matrix.org", "membership": "join", "origin_server_ts": 1453421880317, "sender": "@pwnz:matrix.org", "state_key": "@pwnz:matrix.org", "type": "m.room.member", "unsigned": { "age": 57246072361 } }, { "content": { "avatar_url": "mxc://matrix.org/jEcSFQSYzubpZKwQGevAPRZC", "displayname": "Dylanger", "membership": "join" }, "event_id": "$1473376069131639PVogq:matrix.org", "membership": "join", "origin_server_ts": 1473376069874, "sender": "@dylanger:matrix.org", "state_key": "@dylanger:matrix.org", "type": "m.room.member", "unsigned": { "age": 37291882804 } }, { "content": { "membership": "leave" }, "event_id": "$14813185742jwToz:synapse.bb.informatik-bs.de", "membership": "leave", "origin_server_ts": 1481318574819, "sender": "@conor:synapse.bb.informatik-bs.de", "state_key": "@conor:synapse.bb.informatik-bs.de", "type": "m.room.member", "unsigned": { "age": 29349377859, "replaces_state": "$14813181801aAlza:synapse.bb.informatik-bs.de" } }, { "content": { "avatar_url": "mxc://matrix.org/UrMgsBxNxyxNInaJPdXWgFOi", "displayname": "MateusRodCosta", "membership": "join" }, "event_id": "$1499907956811009eVKXB:matrix.org", "membership": "join", "origin_server_ts": 1499907956433, "sender": "@MateusRodCosta:matrix.org", "state_key": "@MateusRodCosta:matrix.org", "type": "m.room.member", "unsigned": { "age": 10759996245, "replaces_state": "$14995637051262547ZhljH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ydYtBNdAQtUnqpCvYkWYdPAV", "displayname": "habnabit", "membership": "join" }, "event_id": "$15038650872143108CXYYz:matrix.org", "membership": "join", "origin_server_ts": 1503865087019, "sender": "@habnabit:matrix.org", "state_key": "@habnabit:matrix.org", "type": "m.room.member", "unsigned": { "age": 6802865659, "replaces_state": "$15007463181326299Keltm:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "THS", "membership": "join" }, "event_id": "$14893034541233264AzDPN:matrix.org", "membership": "join", "origin_server_ts": 1489303454234, "sender": "@THS:matrix.org", "state_key": "@THS:matrix.org", "type": "m.room.member", "unsigned": { "age": 21364498444, "replaces_state": "$14892680831032999FtZYA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "CompanionCube (IRC)", "membership": "join" }, "event_id": "$146939852139343Fcwfg:matrix.org", "membership": "join", "origin_server_ts": 1469398521905, "sender": "@freenode_CompanionCube:matrix.org", "state_key": "@freenode_CompanionCube:matrix.org", "type": "m.room.member", "unsigned": { "age": 41269430773, "replaces_state": "$145446610457340IPVfL:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mtbwbJRPZUcwrhWsGezPQzqF", "displayname": "CyZooNiC", "membership": "join" }, "event_id": "$1464515496270045kqSJF:matrix.org", "membership": "join", "origin_server_ts": 1464515496643, "sender": "@cyzoonic:matrix.org", "state_key": "@cyzoonic:matrix.org", "type": "m.room.member", "unsigned": { "age": 46152456035 } }, { "content": { "membership": "leave" }, "event_id": "$15099448193198802urRNN:matrix.org", "membership": "leave", "origin_server_ts": 1509944819008, "sender": "@freenode_Spydar:matrix.org", "state_key": "@freenode_Spydar:matrix.org", "type": "m.room.member", "unsigned": { "age": 723133670, "replaces_state": "$15099131122439497UjhTN:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vrTsEZaTnaMMrZRVjENkFRxW", "displayname": "Philip \"digitalfox\" Kovac", "membership": "join" }, "event_id": "$1476201118153814ywczq:matrix.org", "membership": "join", "origin_server_ts": 1476201118430, "sender": "@pkovac:matrix.org", "state_key": "@pkovac:matrix.org", "type": "m.room.member", "unsigned": { "age": 34466834248, "replaces_state": "$1426727782983ubAtj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14789481001193JvDgT:safaradeg.net", "membership": "leave", "origin_server_ts": 1478948100356, "sender": "@sobek:safaradeg.net", "state_key": "@sobek:safaradeg.net", "type": "m.room.member", "unsigned": { "age": 31719852322, "replaces_state": "$14592611481059IFAxZ:safaradeg.net" } }, { "content": { "avatar_url": null, "displayname": "Guest 175572", "kind": "guest", "membership": "join" }, "event_id": "$14892820821124718IsjcV:matrix.org", "membership": "join", "origin_server_ts": 1489282082803, "sender": "@175572:matrix.org", "state_key": "@175572:matrix.org", "type": "m.room.member", "unsigned": { "age": 21385869875 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15058523343747370ggmUj:matrix.org", "membership": "join", "origin_server_ts": 1505852334173, "sender": "@colibrin:matrix.org", "state_key": "@colibrin:matrix.org", "type": "m.room.member", "unsigned": { "age": 4815618505 } }, { "content": { "membership": "leave" }, "event_id": "$1416421009533vfDhR:matrix.org", "membership": "leave", "origin_server_ts": 1414428047399, "sender": "@irc_johnwoolf_:matrix.org", "state_key": "@irc_johnwoolf_:matrix.org", "stream_ordering": 18640, "type": "m.room.member", "unsigned": { "age": 94246943145 } }, { "content": { "avatar_url": null, "displayname": "Esteth", "membership": "join" }, "event_id": "$14848912533915076EDFaF:matrix.org", "membership": "join", "origin_server_ts": 1484891253291, "sender": "@Esteth:matrix.org", "state_key": "@Esteth:matrix.org", "type": "m.room.member", "unsigned": { "age": 25776699387, "replaces_state": "$1464512427267762RlKqX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FWyuoLNosIpnRIvRVMGGsIzA#auto", "displayname": null, "membership": "join" }, "event_id": "$1443811196167106bFdum:matrix.org", "origin_server_ts": 1443811196200, "sender": "@asiqueiro:matrix.org", "state_key": "@asiqueiro:matrix.org", "type": "m.room.member", "unsigned": { "age": 66856756478 } }, { "content": { "avatar_url": null, "displayname": "Guest 146271", "kind": "guest", "membership": "join" }, "event_id": "$14864215221931556NwhRi:matrix.org", "membership": "join", "origin_server_ts": 1486421522262, "sender": "@146271:matrix.org", "state_key": "@146271:matrix.org", "type": "m.room.member", "unsigned": { "age": 24246430416 } }, { "content": { "avatar_url": "mxc://sibnsk.net/eyEfJnVRkhtnFxZzmmyPeyUy", "displayname": "Fеnикs", "membership": "join" }, "event_id": "$14836945030nBGjc:sibnsk.net", "membership": "join", "origin_server_ts": 1483694503700, "sender": "@fenuks:sibnsk.net", "state_key": "@fenuks:sibnsk.net", "type": "m.room.member", "unsigned": { "age": 26973448978, "prev_content": { "avatar_url": null, "displayname": "Fеnикs", "membership": "join" }, "prev_sender": "@fenuks:sibnsk.net", "replaces_state": "$14836389884BeJpB:sibnsk.net" } }, { "content": { "avatar_url": null, "displayname": "Rym", "membership": "join" }, "event_id": "$14781543931564964gYDaL:matrix.org", "membership": "join", "origin_server_ts": 1478154393186, "sender": "@Rym:matrix.org", "state_key": "@Rym:matrix.org", "type": "m.room.member", "unsigned": { "age": 32513559492 } }, { "content": { "avatar_url": "mxc://matrix.org/GLIBVHEmaaHSTmJuIvUJsewa", "displayname": null, "membership": "join" }, "event_id": "$15046231011248985Vbibn:matrix.org", "membership": "join", "origin_server_ts": 1504623101670, "sender": "@aaronluoxiao:matrix.org", "state_key": "@aaronluoxiao:matrix.org", "type": "m.room.member", "unsigned": { "age": 6044851008 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1510290872461292JUHiL:matrix.org", "membership": "join", "origin_server_ts": 1510290872037, "sender": "@PunkinPie:matrix.org", "state_key": "@PunkinPie:matrix.org", "type": "m.room.member", "unsigned": { "age": 377080641 } }, { "content": { "membership": "leave" }, "event_id": "$15059463715014048CzFPj:matrix.org", "membership": "leave", "origin_server_ts": 1505946371698, "sender": "@freenode_JuanDaugherty:matrix.org", "state_key": "@freenode_JuanDaugherty:matrix.org", "type": "m.room.member", "unsigned": { "age": 4721580980, "replaces_state": "$15059438314981454sZUUq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15058297063325774GTBXE:matrix.org", "membership": "leave", "origin_server_ts": 1505829706844, "sender": "@jjalvado:matrix.org", "state_key": "@jjalvado:matrix.org", "type": "m.room.member", "unsigned": { "age": 4838245834, "replaces_state": "$15058048402745690eBYHt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "shakib", "membership": "join" }, "event_id": "$14783912392325454vblfX:matrix.org", "membership": "join", "origin_server_ts": 1478391239988, "sender": "@shakib:matrix.org", "state_key": "@shakib:matrix.org", "type": "m.room.member", "unsigned": { "age": 32276712690 } }, { "content": { "avatar_url": null, "displayname": "Guest 250549", "kind": "guest", "membership": "join" }, "event_id": "$14963492881490020AcAGy:matrix.org", "membership": "join", "origin_server_ts": 1496349288994, "sender": "@250549:matrix.org", "state_key": "@250549:matrix.org", "type": "m.room.member", "unsigned": { "age": 14318663684 } }, { "content": { "avatar_url": null, "displayname": "test", "membership": "join" }, "event_id": "$1459438163245392SUOTh:matrix.org", "membership": "join", "origin_server_ts": 1459438163938, "sender": "@test:matrix.org", "state_key": "@test:matrix.org", "type": "m.room.member", "unsigned": { "age": 51229788740 } }, { "content": { "membership": "leave" }, "event_id": "$1498138274964756VLCmE:matrix.org", "membership": "leave", "origin_server_ts": 1498138274886, "sender": "@e:matrix.org", "state_key": "@e:matrix.org", "type": "m.room.member", "unsigned": { "age": 12529677792, "replaces_state": "$1416420930516ucDKo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143679141368832kEivO:matrix.org", "origin_server_ts": 1436791413280, "sender": "@bridgebot:matrix.org", "state_key": "@bridgebot:matrix.org", "type": "m.room.member", "unsigned": { "age": 73876539398, "replaces_state": "$143679141068830nmOIg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "sxu", "membership": "join" }, "event_id": "$146110141635041JziGU:matrix.org", "membership": "join", "origin_server_ts": 1461101416933, "sender": "@sxu:matrix.org", "state_key": "@sxu:matrix.org", "type": "m.room.member", "unsigned": { "age": 49566535745 } }, { "content": { "membership": "leave" }, "event_id": "$150036864161RvAeB:shadura.me", "membership": "leave", "origin_server_ts": 1500368641127, "sender": "@andrew:shadura.me", "state_key": "@andrew:shadura.me", "type": "m.room.member", "unsigned": { "age": 10299311551, "replaces_state": "$148698244858zDrTs:shadura.me" } }, { "content": { "avatar_url": "mxc://matrix.org/TYraVlzaCyQEKvwOzSwNmAAE#auto", "displayname": "Bob Seven", "membership": "join" }, "event_id": "$144289696240753NcmfA:matrix.org", "membership": "join", "origin_server_ts": 1442896962367, "sender": "@bob77:matrix.org", "state_key": "@bob77:matrix.org", "type": "m.room.member", "unsigned": { "age": 67770990311 } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612875048tMktH:matrix.org", "origin_server_ts": 1429261287157, "sender": "@kegan:matrix.org", "state_key": "@irc_erikj-:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406665521, "replaces_state": "$1416421072446crTMm:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/qlwQszZTmSrSvroDEFqiDNBs", "displayname": "hrjet", "membership": "join" }, "event_id": "$1498833759186457ZqjmH:matrix.org", "membership": "join", "origin_server_ts": 1498833759662, "sender": "@hrjet:matrix.org", "state_key": "@hrjet:matrix.org", "type": "m.room.member", "unsigned": { "age": 11834193016, "replaces_state": "$1498833728185977rkhax:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15105590563614136iFsSm:matrix.org", "membership": "leave", "origin_server_ts": 1510559056659, "sender": "@freenode_Guest7156:matrix.org", "state_key": "@freenode_Guest7156:matrix.org", "type": "m.room.member", "unsigned": { "age": 108896019, "replaces_state": "$15105589603613181nsaaL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$144756604845516XxkGP:matrix.org", "origin_server_ts": 1447566048823, "sender": "@wrgcpp:matrix.org", "state_key": "@wrgcpp:matrix.org", "type": "m.room.member", "unsigned": { "age": 63101903855, "replaces_state": "$144432130014122dmKUd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143455260440AesAZ:hveem.no", "origin_server_ts": 1434552604569, "sender": "@Tor:hveem.no", "state_key": "@Tor:hveem.no", "type": "m.room.member", "unsigned": { "age": 76115348109, "replaces_state": "$14310875342eENLP:hveem.no" } }, { "content": { "avatar_url": null, "displayname": "James", "membership": "join" }, "event_id": "$145455524256683JIrQF:matrix.org", "origin_server_ts": 1454555242575, "sender": "@djames:matrix.org", "state_key": "@djames:matrix.org", "type": "m.room.member", "unsigned": { "age": 56112710103 } }, { "content": { "membership": "leave" }, "event_id": "$14924763413OnEzx:home.rdash.in", "membership": "leave", "origin_server_ts": 1492476341997, "sender": "@Caerdwyn:home.rdash.in", "state_key": "@Caerdwyn:home.rdash.in", "type": "m.room.member", "unsigned": { "age": 18191610681, "prev_content": { "avatar_url": "mxc://home.rdash.in/gDKGEZwABEPgHELKvwiPNIRa", "displayname": "Alpha", "membership": "join" }, "prev_sender": "@Caerdwyn:home.rdash.in", "replaces_state": "$149133830829arALC:home.rdash.in" } }, { "content": { "membership": "leave" }, "event_id": "$1466523499832478ZFOQx:matrix.org", "membership": "leave", "origin_server_ts": 1466523499805, "sender": "@Siilwyn:matrix.org", "state_key": "@Siilwyn:matrix.org", "type": "m.room.member", "unsigned": { "age": 44144452873, "replaces_state": "$1466505626791889ubrqA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14995567981206268VJvFn:matrix.org", "membership": "leave", "origin_server_ts": 1499556798360, "sender": "@ryzokuken:matrix.org", "state_key": "@ryzokuken:matrix.org", "type": "m.room.member", "unsigned": { "age": 11111154318, "replaces_state": "$14965624383392382YjuaO:matrix.org" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$1471041852345225WtLGn:matrix.org", "membership": "leave", "origin_server_ts": 1471041852948, "sender": "@31052:matrix.org", "state_key": "@31052:matrix.org", "type": "m.room.member", "unsigned": { "age": 39626099730, "replaces_state": "$1471038164336156frUFK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vpHWEkbQlGHjilEeYfVSBDVO", "displayname": "dollarone", "membership": "join" }, "event_id": "$1466072772121219tLlpx:matrix.org", "membership": "join", "origin_server_ts": 1466072772244, "sender": "@dollarone:matrix.org", "state_key": "@dollarone:matrix.org", "type": "m.room.member", "unsigned": { "age": 44595180434, "replaces_state": "$146543312668621WhmAI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/SuwvbAoDVtRtSEDxONtPekFV", "displayname": "levsha", "membership": "join" }, "event_id": "$1451924980847083robCP:matrix.org", "origin_server_ts": 1451924980457, "sender": "@levsha:matrix.org", "state_key": "@levsha:matrix.org", "type": "m.room.member", "unsigned": { "age": 58742972221, "replaces_state": "$144118832840843wLObI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/iOONEUQvgvuXbBUaixITkYkM", "displayname": "sanjivrai", "membership": "join" }, "event_id": "$1506280849143216XwYUm:matrix.org", "membership": "join", "origin_server_ts": 1506280849299, "sender": "@sanjivrai:matrix.org", "state_key": "@sanjivrai:matrix.org", "type": "m.room.member", "unsigned": { "age": 4387103379 } }, { "content": { "avatar_url": "mxc://matrix.org/yKgLUvHCOqjQgoPGnfDwpKav#auto", "displayname": "Boris", "membership": "join" }, "event_id": "$142579577614555tnMzQ:matrix.org", "membership": "join", "origin_server_ts": 1425795776115, "sender": "@Boris:matrix.org", "state_key": "@Boris:matrix.org", "type": "m.room.member", "unsigned": { "age": 84872176563 } }, { "content": { "membership": "leave" }, "event_id": "$1491062852898466eyYqw:matrix.org", "membership": "leave", "origin_server_ts": 1491062852464, "sender": "@daltonfury42:matrix.org", "state_key": "@daltonfury42:matrix.org", "type": "m.room.member", "unsigned": { "age": 19605100214, "replaces_state": "$148957432013080VFfwe:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/blBBvSJDoipOAZOljrukJZrk#auto", "displayname": "Ryan Rix", "membership": "join" }, "event_id": "$14864026831775004vTQFP:matrix.org", "membership": "join", "origin_server_ts": 1486402683270, "sender": "@rjrix:matrix.org", "state_key": "@rjrix:matrix.org", "type": "m.room.member", "unsigned": { "age": 24265269408, "replaces_state": "$14773688951534199iixQr:matrix.org" } }, { "age_ts": 1506915189159, "content": { "avatar_url": "mxc://raim.ist/FXOzjAdHBpcxFBqpKIbQWInl", "displayname": "Aaron Raimist", "membership": "join" }, "event_id": "$15069151882OflIz:raim.ist", "origin_server_ts": 1506915187344, "sender": "@aaron:raim.ist", "state_key": "@aaron:raim.ist", "type": "m.room.member", "unsigned": { "age": 16, "replaces_state": "$15069136610UTDli:raim.ist" } }, { "content": { "avatar_url": "mxc://queertoo.org/xdQtvOpxgxFXTIZhJojuwwPG", "displayname": "𝓤𝓷𝓲𝓪𝓲𝓴𝓪", "membership": "join" }, "event_id": "$1456756355129jyYpj:queertoo.org", "origin_server_ts": 1456756355732, "sender": "@Uniaika:queertoo.org", "state_key": "@Uniaika:queertoo.org", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14997235208scvnR:os.openstar.pw", "origin_server_ts": 1499723466347, "sender": "@ronsor:os.openstar.pw", "state_key": "@ronsor:os.openstar.pw", "type": "m.room.member", "unsigned": { "age": 138 } }, { "content": { "avatar_url": null, "displayname": "noteness_ (IRC)", "membership": "join" }, "event_id": "$1510195931475566JkuBK:matrix.org", "membership": "join", "origin_server_ts": 1510195931930, "sender": "@freenode_noteness_:matrix.org", "state_key": "@freenode_noteness_:matrix.org", "type": "m.room.member", "unsigned": { "age": 472020748, "replaces_state": "$15087310084511331vwQHX:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14912512320KMejB:jcline.org", "membership": "leave", "origin_server_ts": 1491251232847, "sender": "@jeremy:jcline.org", "state_key": "@jeremy:jcline.org", "type": "m.room.member", "unsigned": { "age": 19416719831, "prev_content": { "avatar_url": null, "displayname": "Jeremy Cline", "membership": "join" }, "prev_sender": "@jeremy:jcline.org", "replaces_state": "$14912458429htrGx:jcline.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CozQZiHegpFYreOXweSkaeef", "displayname": "Yves", "membership": "join" }, "event_id": "$1472846549273399uiPzc:matrix.org", "membership": "join", "origin_server_ts": 1472846549710, "sender": "@ylavoie:matrix.org", "state_key": "@ylavoie:matrix.org", "type": "m.room.member", "unsigned": { "age": 37821402968, "replaces_state": "$1464017684535928HXLEG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15103901141722939upugx:matrix.org", "membership": "leave", "origin_server_ts": 1510390114941, "sender": "@iefnuy:matrix.org", "state_key": "@iefnuy:matrix.org", "type": "m.room.member", "unsigned": { "age": 277837737, "replaces_state": "$14825851361803731IWzse:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14911563821587694NshGJ:matrix.org", "membership": "leave", "origin_server_ts": 1491156382531, "sender": "@zbychuk:matrix.org", "state_key": "@zbychuk:matrix.org", "type": "m.room.member", "unsigned": { "age": 19511570147, "replaces_state": "$14889656073006078tayci:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632402026187nrfZT:matrix.org", "membership": "leave", "origin_server_ts": 1495663240887, "sender": "@freenode_reactormonk:matrix.org", "state_key": "@freenode_reactormonk:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004711791, "replaces_state": "$14905403261215364jkEkq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631762024700NMgZQ:matrix.org", "membership": "leave", "origin_server_ts": 1495663176334, "sender": "@freenode_ekroon:matrix.org", "state_key": "@freenode_ekroon:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004776344, "replaces_state": "$143872427630467KoVVp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1508469878939551mdizF:matrix.org", "membership": "leave", "origin_server_ts": 1508469878938, "sender": "@freenode_ro0t:matrix.org", "state_key": "@freenode_ro0t:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198073740, "replaces_state": "$15077190381368894aAKqh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15081812441324119Gdmsd:matrix.org", "membership": "leave", "origin_server_ts": 1508181244749, "sender": "@dianatrn147:matrix.org", "state_key": "@dianatrn147:matrix.org", "type": "m.room.member", "unsigned": { "age": 2486707929, "replaces_state": "$15081810801320943bzmXQ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Mikeulkeul", "kind": "guest", "membership": "join" }, "event_id": "$149457996075776DSOzu:matrix.org", "membership": "join", "origin_server_ts": 1494579960875, "sender": "@232263:matrix.org", "state_key": "@232263:matrix.org", "type": "m.room.member", "unsigned": { "age": 16087991803 } }, { "content": { "avatar_url": "mxc://matrix.org/VpbYiczfLJwnFUbFGfLMSBjb", "displayname": "rickcogley", "membership": "join" }, "event_id": "$14671071771822038CKfCX:matrix.org", "membership": "join", "origin_server_ts": 1467107177445, "sender": "@rickcogley:matrix.org", "state_key": "@rickcogley:matrix.org", "type": "m.room.member", "unsigned": { "age": 43560775233 } }, { "content": { "membership": "leave" }, "event_id": "$15030108821921965FPMZv:matrix.org", "membership": "leave", "origin_server_ts": 1503010882422, "sender": "@gregoriomezquita:matrix.org", "state_key": "@gregoriomezquita:matrix.org", "type": "m.room.member", "unsigned": { "age": 7657070256, "replaces_state": "$15030051151850092oednL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "amir (IRC)", "membership": "join" }, "event_id": "$15096299003736808wSDVo:matrix.org", "membership": "join", "origin_server_ts": 1509629900895, "sender": "@freenode_amir:matrix.org", "state_key": "@freenode_amir:matrix.org", "type": "m.room.member", "unsigned": { "age": 1038051783, "replaces_state": "$15096297703734658HMjkQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wDowXSdhEQppPYtYcvTXObDQ", "displayname": "ipsecguy", "membership": "join" }, "event_id": "$1474310241659228qpflL:matrix.org", "membership": "join", "origin_server_ts": 1474310241379, "sender": "@ipsecguy:matrix.org", "state_key": "@ipsecguy:matrix.org", "type": "m.room.member", "unsigned": { "age": 36357711299 } }, { "content": { "avatar_url": "mxc://cloudfleet.io/gjzEDLUFWdyguVIxEVpORBGt", "displayname": "doublemalt", "membership": "join" }, "event_id": "$146359227712nKVaZ:cloudfleet.io", "origin_server_ts": 1463592277083, "sender": "@doublemalt:cloudfleet.io", "state_key": "@doublemalt:cloudfleet.io", "type": "m.room.member", "unsigned": { "age": 135 } }, { "content": { "avatar_url": "mxc://matrix.org/qFCbQbISMJKkumHFtvGUADZp", "displayname": "Jimmy", "membership": "join" }, "event_id": "$1465567212158934vcKat:matrix.org", "membership": "join", "origin_server_ts": 1465567212107, "sender": "@jimmycuadra:matrix.org", "state_key": "@jimmycuadra:matrix.org", "type": "m.room.member", "unsigned": { "age": 45100740571, "replaces_state": "$146546228599271PIUAk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "asj", "membership": "join" }, "event_id": "$1507190699372823YwAGL:matrix.org", "membership": "join", "origin_server_ts": 1507190699243, "sender": "@asj:matrix.org", "state_key": "@asj:matrix.org", "type": "m.room.member", "unsigned": { "age": 3477253435 } }, { "content": { "membership": "leave" }, "event_id": "$14328306584UrPsp:testmatrix1.jki.re", "origin_server_ts": 1432830658842, "sender": "@test:testmatrix1.jki.re", "state_key": "@test:testmatrix1.jki.re", "type": "m.room.member", "unsigned": { "age": 77837293836, "replaces_state": "$14320437948vHCSh:testmatrix1.jki.re" } }, { "content": { "avatar_url": "mxc://wobscale.chat/PtcUvntbSgFfiWzxOOWaQari", "displayname": "ek 🐼", "membership": "join" }, "event_id": "$14905936401411MZZrc:wobscale.chat", "membership": "join", "origin_server_ts": 1490593640626, "sender": "@ek:wobscale.chat", "state_key": "@ek:wobscale.chat", "type": "m.room.member", "unsigned": { "age": 20074312052, "prev_content": { "avatar_url": "mxc://wobscale.chat/PtcUvntbSgFfiWzxOOWaQari", "displayname": "ek🐼", "membership": "join" }, "prev_sender": "@ek:wobscale.chat", "replaces_state": "$14905935741377CRDDc:wobscale.chat" } }, { "content": { "avatar_url": null, "displayname": "nphg", "kind": "guest", "membership": "join" }, "event_id": "$14956627752016047dyMGk:matrix.org", "membership": "join", "origin_server_ts": 1495662775623, "sender": "@243236:matrix.org", "state_key": "@243236:matrix.org", "type": "m.room.member", "unsigned": { "age": 15005177055 } }, { "content": { "avatar_url": "mxc://matrix.org/EGpLMcgCVKfwxefxnIhgBPHH", "displayname": "crosswick", "membership": "join" }, "event_id": "$146534304763228govDY:matrix.org", "membership": "join", "origin_server_ts": 1465343047305, "sender": "@crosswick:matrix.org", "state_key": "@crosswick:matrix.org", "type": "m.room.member", "unsigned": { "age": 45324905373, "replaces_state": "$1452629140402809hLJuI:matrix.org" } }, { "content": { "avatar_url": "mxc://oddvar.org/qHeUgwsRqUwsqxdPisoUELmP", "displayname": "oddvar.org", "membership": "join" }, "event_id": "$147220621116kkMps:oddvar.org", "membership": "join", "origin_server_ts": 1472206211313, "sender": "@oddvar:oddvar.org", "state_key": "@oddvar:oddvar.org", "type": "m.room.member", "unsigned": { "age": 38461741365, "replaces_state": "$14722060319ckKsy:oddvar.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RRpxZVfNyeulysQDSPgUbzRl#auto", "displayname": null, "membership": "join" }, "event_id": "$1442288430146752OOfUJ:matrix.org", "origin_server_ts": 1442288430704, "sender": "@elfilo5:matrix.org", "state_key": "@elfilo5:matrix.org", "type": "m.room.member", "unsigned": { "age": 68379521974 } }, { "content": { "avatar_url": null, "displayname": "klin", "membership": "join" }, "event_id": "$14951163384ucNwy:matrix.guimouth.ovh", "membership": "join", "origin_server_ts": 1495116338953, "sender": "@klin:matrix.guimouth.ovh", "state_key": "@klin:matrix.guimouth.ovh", "type": "m.room.member", "unsigned": { "age": 15551613725, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@klin:matrix.guimouth.ovh", "replaces_state": "$14951157711NsktT:matrix.guimouth.ovh" } }, { "content": { "membership": "leave" }, "event_id": "$150203541743rcsHJ:pwn.party", "membership": "leave", "origin_server_ts": 1502035417456, "sender": "@r3dey3:pwn.party", "state_key": "@r3dey3:pwn.party", "type": "m.room.member", "unsigned": { "age": 8632535222, "prev_content": { "avatar_url": "mxc://pwn.party/YFfBjrPjYLnawzAdunPDnnhm", "displayname": "Kenny", "membership": "join" }, "prev_sender": "@r3dey3:pwn.party", "replaces_state": "$150117218061TISmA:pwn.party" } }, { "content": { "avatar_url": null, "displayname": "richvdh (IRC)", "membership": "join" }, "event_id": "$15050468511285923BpDoD:matrix.org", "membership": "join", "origin_server_ts": 1505046851464, "sender": "@freenode_richvdh:matrix.org", "state_key": "@freenode_richvdh:matrix.org", "type": "m.room.member", "unsigned": { "age": 5621101214, "replaces_state": "$15050465871283619PQjmE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1505008259116RzIKz:matrix.rehack.me", "membership": "leave", "origin_server_ts": 1505008259447, "sender": "@micah:matrix.rehack.me", "state_key": "@micah:matrix.rehack.me", "type": "m.room.member", "unsigned": { "age": 5659693231, "prev_content": { "avatar_url": "mxc://matrix.rehack.me/mTrlXhvBtXrucCwxGLpdPCiz", "displayname": "the stuffed pizza", "membership": "join" }, "prev_sender": "@micah:matrix.rehack.me", "replaces_state": "$15049809291311ZgHvc:matrix.rehack.me" } }, { "content": { "avatar_url": null, "displayname": "Jackneill", "membership": "join" }, "event_id": "$148406270167811iECDQ:matrix.org", "membership": "join", "origin_server_ts": 1484062701261, "sender": "@Jackneill:matrix.org", "state_key": "@Jackneill:matrix.org", "type": "m.room.member", "unsigned": { "age": 26605251417 } }, { "content": { "avatar_url": "mxc://matrix.org/rmqsyAERGBdtpRlhpmjiKakO", "displayname": "georg.rinnhofer", "membership": "join" }, "event_id": "$1506435782948025UCvbq:matrix.org", "membership": "join", "origin_server_ts": 1506435782060, "sender": "@Rinnhofer:matrix.org", "state_key": "@Rinnhofer:matrix.org", "type": "m.room.member", "unsigned": { "age": 4232170618, "replaces_state": "$15014871663984450cNDjJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "dan- (IRC)", "membership": "join" }, "event_id": "$15085033881490622illcz:matrix.org", "membership": "join", "origin_server_ts": 1508503388269, "sender": "@freenode_dan-:matrix.org", "state_key": "@freenode_dan-:matrix.org", "type": "m.room.member", "unsigned": { "age": 2164564409, "replaces_state": "$1508469879939571wYBnH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15062458992987126HKLUW:matrix.org", "membership": "leave", "origin_server_ts": 1506245899084, "sender": "@freenode_spacebug^:matrix.org", "state_key": "@freenode_spacebug^:matrix.org", "type": "m.room.member", "unsigned": { "age": 4422053594, "replaces_state": "$15062458912986957ONQsZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/PtFpkqpIjWVEVvQaiLjGmwgE", "displayname": "solace (old account)", "membership": "join" }, "event_id": "$15075703331185533HrhZj:matrix.org", "membership": "join", "origin_server_ts": 1507570333463, "sender": "@solace:matrix.org", "state_key": "@solace:matrix.org", "type": "m.room.member", "unsigned": { "age": 3097619215, "replaces_state": "$15075703301185465kiAFx:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tavoda", "membership": "join" }, "event_id": "$150063214739286CoUPq:matrix.org", "membership": "join", "origin_server_ts": 1500632147755, "sender": "@tavoda:matrix.org", "state_key": "@tavoda:matrix.org", "type": "m.room.member", "unsigned": { "age": 10035804923 } }, { "content": { "membership": "leave" }, "event_id": "$14991437533416858IZKKF:matrix.org", "membership": "leave", "origin_server_ts": 1499143753609, "sender": "@freenode_caveat-_:matrix.org", "state_key": "@freenode_caveat-_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524199069, "replaces_state": "$14979207521208929qehbQ:matrix.org" } }, { "content": { "avatar_url": "mxc://spydar007.com/svfwamnWoXsdBiyceKLinQTa", "displayname": "Spydar007", "membership": "join" }, "event_id": "$1499018425817xEQFG:spydar007.com", "membership": "join", "origin_server_ts": 1499018425035, "sender": "@Spydar007:spydar007.com", "state_key": "@Spydar007:spydar007.com", "type": "m.room.member", "unsigned": { "age": 11649527643, "prev_content": { "avatar_url": "mxc://spydar007.com/svfwamnWoXsdBiyceKLinQTa", "displayname": "S007", "membership": "join" }, "prev_sender": "@Spydar007:spydar007.com", "replaces_state": "$1499018198503eBtFg:spydar007.com" } }, { "content": { "avatar_url": "mxc://protect.moe/YQxqHJETFEvKjuukTgfgmQKg", "displayname": "Czen", "membership": "join" }, "event_id": "$14977896953BrWPB:protect.moe", "origin_server_ts": 1497789695195, "sender": "@czen:protect.moe", "state_key": "@czen:protect.moe", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "avatar_url": "mxc://matrix.org/vuGsaipLIKaXCknaHlmoysli", "displayname": "lieuwex", "membership": "join" }, "event_id": "$14893143321276454OugUP:matrix.org", "membership": "join", "origin_server_ts": 1489314332688, "sender": "@lieuwex:matrix.org", "state_key": "@lieuwex:matrix.org", "type": "m.room.member", "unsigned": { "age": 21353619990 } }, { "content": { "avatar_url": null, "displayname": "Cobalt", "membership": "join" }, "event_id": "$145286998295561JJcoR:matrix.org", "origin_server_ts": 1452869982375, "sender": "@cobaltdr:matrix.org", "state_key": "@cobaltdr:matrix.org", "type": "m.room.member", "unsigned": { "age": 57797970303 } }, { "content": { "avatar_url": null, "displayname": "poxifide (IRC)", "membership": "join" }, "event_id": "$15101360252019297OFGKL:matrix.org", "membership": "join", "origin_server_ts": 1510136025572, "sender": "@freenode_poxifide:matrix.org", "state_key": "@freenode_poxifide:matrix.org", "type": "m.room.member", "unsigned": { "age": 531927106, "replaces_state": "$15099448173198783idbls:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15079830202448090zspgb:matrix.org", "membership": "leave", "origin_server_ts": 1507983020995, "sender": "@henryjuan:matrix.org", "state_key": "@henryjuan:matrix.org", "type": "m.room.member", "unsigned": { "age": 2684931683, "replaces_state": "$1507336725554558OEuBk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1476454860924977gcMig:matrix.org", "membership": "join", "origin_server_ts": 1476454860250, "sender": "@jerry:matrix.org", "state_key": "@jerry:matrix.org", "type": "m.room.member", "unsigned": { "age": 34213092428 } }, { "content": { "membership": "leave" }, "event_id": "$147101265437IhYLG:sphericalelephant.com", "membership": "leave", "origin_server_ts": 1471012654896, "sender": "@f.shahbazi:sphericalelephant.com", "state_key": "@f.shahbazi:sphericalelephant.com", "type": "m.room.member", "unsigned": { "age": 39655297782, "replaces_state": "$147100910523OWOYW:sphericalelephant.com" } }, { "content": { "avatar_url": "mxc://devpi.de/FCDiyzWfQJATekqCBqwVsVLn", "displayname": "Julius", "membership": "join" }, "event_id": "$150756975679wLiiR:devpi.de", "membership": "join", "origin_server_ts": 1507569756429, "sender": "@lehmanju:devpi.de", "state_key": "@lehmanju:devpi.de", "type": "m.room.member", "unsigned": { "age": 3098196249, "replaces_state": "$15005594306OkoCG:devpi.de" } }, { "content": { "membership": "leave" }, "event_id": "$14758182333152186UwvvI:matrix.org", "membership": "leave", "origin_server_ts": 1475818233936, "sender": "@Jsilence:matrix.org", "state_key": "@Jsilence:matrix.org", "type": "m.room.member", "unsigned": { "age": 34849718742, "replaces_state": "$1446500395422091RVJDi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14966248594026780IRTLR:matrix.org", "membership": "leave", "origin_server_ts": 1496624859297, "sender": "@freenode_Bitti:matrix.org", "state_key": "@freenode_Bitti:matrix.org", "type": "m.room.member", "unsigned": { "age": 14043093381, "replaces_state": "$14965747483472735zKMBf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1501684026208831yMvsT:matrix.org", "membership": "join", "origin_server_ts": 1501684026613, "sender": "@hitaim:matrix.org", "state_key": "@hitaim:matrix.org", "type": "m.room.member", "unsigned": { "age": 8983926065 } }, { "age_ts": 1506173233754, "content": { "avatar_url": "mxc://maclemon.at/AkIZkAytVuBGgUuQUSejyKTO", "displayname": "MacLemon", "membership": "join" }, "event_id": "$15061732334AyQmg:maclemon.at", "origin_server_ts": 1506173233147, "sender": "@MacLemon:maclemon.at", "state_key": "@MacLemon:maclemon.at", "type": "m.room.member", "unsigned": { "age": 18, "replaces_state": "$15041927034ytJgQ:maclemon.at" } }, { "content": { "avatar_url": null, "displayname": "kartikeys", "membership": "join" }, "event_id": "$14906119651762162yaeDa:matrix.org", "membership": "join", "origin_server_ts": 1490611965250, "sender": "@kartikeys:matrix.org", "state_key": "@kartikeys:matrix.org", "type": "m.room.member", "unsigned": { "age": 20055987428 } }, { "content": { "avatar_url": "mxc://lant.uk/PPxwmHXKIMJcQabqUUUOYdOB", "displayname": "toml", "membership": "join" }, "event_id": "$15035662603263sJwyD:lant.uk", "membership": "join", "origin_server_ts": 1503566260512, "sender": "@tom:lant.uk", "state_key": "@tom:lant.uk", "type": "m.room.member", "unsigned": { "age": 7101692166, "replaces_state": "$15035063653034YUiTp:lant.uk" } }, { "content": { "avatar_url": "mxc://takios.de/zzkewXNlYtTFYAZTruwzglYO", "displayname": "Takios", "membership": "join" }, "event_id": "$148201542171Ybeya:takios.de", "membership": "join", "origin_server_ts": 1482015421569, "sender": "@Takios:takios.de", "state_key": "@Takios:takios.de", "type": "m.room.member", "unsigned": { "age": 28652531109, "replaces_state": "$1472735818327rcpGf:takios.de" } }, { "content": { "membership": "leave" }, "event_id": "$144784771056950yixYc:matrix.org", "origin_server_ts": 1447847710271, "sender": "@dn:matrix.org", "state_key": "@dn:matrix.org", "type": "m.room.member", "unsigned": { "age": 62820242407, "replaces_state": "$144784296253410JGlmu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15087148964272498ogeos:matrix.org", "membership": "leave", "origin_server_ts": 1508714896215, "sender": "@v1ashe11:matrix.org", "state_key": "@v1ashe11:matrix.org", "type": "m.room.member", "unsigned": { "age": 1953056463, "replaces_state": "$15087138504245523FCgzU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1485327235303167EEtyF:matrix.org", "membership": "join", "origin_server_ts": 1485327235815, "sender": "@cookielover550:matrix.org", "state_key": "@cookielover550:matrix.org", "type": "m.room.member", "unsigned": { "age": 25340716863 } }, { "content": { "avatar_url": "mxc://matrix.org/EoMdhEEIgnYdjLeNQlZAMFys#auto", "displayname": null, "membership": "join" }, "event_id": "$1450425565170628gqNMk:matrix.org", "origin_server_ts": 1450425565820, "sender": "@mham1156:matrix.org", "state_key": "@mham1156:matrix.org", "type": "m.room.member", "unsigned": { "age": 60242386858 } }, { "content": { "membership": "leave" }, "event_id": "$15053550155414690MMUMb:matrix.org", "membership": "leave", "origin_server_ts": 1505355015399, "sender": "@freenode_deltab_:matrix.org", "state_key": "@freenode_deltab_:matrix.org", "type": "m.room.member", "unsigned": { "age": 5312937279, "replaces_state": "$15051618092602925bzOhP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/NeNDgdgVFtZCTdxwJiblKtDE", "displayname": "Li", "membership": "join" }, "event_id": "$1506659024217750htIMI:matrix.org", "membership": "join", "origin_server_ts": 1506659024899, "sender": "@li:matrix.org", "state_key": "@li:matrix.org", "type": "m.room.member", "unsigned": { "age": 4008927779, "replaces_state": "$1506658940216996ziUfC:matrix.org" } }, { "content": { "avatar_url": "mxc://riot.ovh/printErCATzZijQsSDWorRaK", "displayname": "Michael (t3chguy)", "membership": "join" }, "event_id": "$15008109192360uIhwa:riot.ovh", "membership": "join", "origin_server_ts": 1500810919114, "sender": "@x:riot.ovh", "state_key": "@x:riot.ovh", "type": "m.room.member", "unsigned": { "age": 9857033564, "replaces_state": "$14967739355105LWWol:riot.ovh" } }, { "content": { "avatar_url": "mxc://matrix.org/ffmtoRfoxJhnBIHykVuTNwks", "displayname": "thehurley3", "membership": "join" }, "event_id": "$15096515844155204ctBhw:matrix.org", "membership": "join", "origin_server_ts": 1509651584780, "sender": "@thehurley3:matrix.org", "state_key": "@thehurley3:matrix.org", "type": "m.room.member", "unsigned": { "age": 1016367898, "replaces_state": "$15085278711933501wYRsS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KchtxACJEADUMOadCwBmyJhN", "displayname": "eberle", "membership": "join" }, "event_id": "$14676639842795060OdDGV:matrix.org", "membership": "join", "origin_server_ts": 1467663984165, "sender": "@eberle:matrix.org", "state_key": "@eberle:matrix.org", "type": "m.room.member", "unsigned": { "age": 43003968513, "replaces_state": "$146494341671645LylVY:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15050239901106304Iofhk:matrix.org", "membership": "leave", "origin_server_ts": 1505023990679, "sender": "@freenode_Samuel_:matrix.org", "state_key": "@freenode_Samuel_:matrix.org", "type": "m.room.member", "unsigned": { "age": 5643961999, "replaces_state": "$15050225811093131VCJmh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/quiXUuRFDrLkaWSsGEonUSTc#auto", "displayname": null, "membership": "join" }, "event_id": "$144359235442166ydBIc:matrix.org", "origin_server_ts": 1443592354580, "sender": "@yinglee9:matrix.org", "state_key": "@yinglee9:matrix.org", "type": "m.room.member", "unsigned": { "age": 67075598098 } }, { "content": { "membership": "leave" }, "event_id": "$15025434371494543dBAcI:matrix.org", "membership": "leave", "origin_server_ts": 1502543437712, "sender": "@freenode_HTTP_____GK1wmSU:matrix.org", "state_key": "@freenode_HTTP_____GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 8124514966, "replaces_state": "$15025433801494024dFZOP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sipster_BNC (IRC)", "membership": "join" }, "event_id": "$15098034631201039qsOPL:matrix.org", "membership": "join", "origin_server_ts": 1509803463631, "sender": "@freenode_Sipster_BNC:matrix.org", "state_key": "@freenode_Sipster_BNC:matrix.org", "type": "m.room.member", "unsigned": { "age": 864489047, "replaces_state": "$15097868341051964auckt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ckocagil", "membership": "join" }, "event_id": "$147014932312772SBSoF:matrix.org", "membership": "join", "origin_server_ts": 1470149323541, "sender": "@ckocagil:matrix.org", "state_key": "@ckocagil:matrix.org", "type": "m.room.member", "unsigned": { "age": 40518629137, "replaces_state": "$1470071426121038uVJqf:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/AVQzOklRxRcHmMkqzNGtYRLf", "displayname": "Paul Evans (Gitter)", "membership": "join" }, "event_id": "$1471562782154564ARGMa:matrix.org", "membership": "join", "origin_server_ts": 1471562782614, "sender": "@gitter_leonerd:matrix.org", "state_key": "@gitter_leonerd:matrix.org", "type": "m.room.member", "unsigned": { "age": 39105170064, "replaces_state": "$1468341297185264vYocb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 3458", "kind": "guest", "membership": "join" }, "event_id": "$1469523643272949lIcfT:matrix.org", "membership": "join", "origin_server_ts": 1469523643543, "sender": "@3458:matrix.org", "state_key": "@3458:matrix.org", "type": "m.room.member", "unsigned": { "age": 41144309135 } }, { "content": { "membership": "leave" }, "event_id": "$14317121215990KhFmd:matrix.org", "origin_server_ts": 1431712121061, "sender": "@joaocalv:matrix.org", "state_key": "@joaocalv:matrix.org", "type": "m.room.member", "unsigned": { "age": 78955831617, "replaces_state": "$1416421015341kLOpD:matrix.org" } }, { "age_ts": 1503416915626, "content": { "avatar_url": "mxc://tardis.network/gDHHqVYVOhGEtyBrdedCXhvm", "displayname": "Thomas", "membership": "join" }, "event_id": "$15034169151278lrWhh:tardis.network", "origin_server_ts": 1503416914960, "sender": "@thomas:tardis.network", "state_key": "@thomas:tardis.network", "type": "m.room.member", "unsigned": { "age": 29, "prev_content": { "membership": "leave" }, "prev_sender": "@thomas:tardis.network", "replaces_state": "$149946448440guyIr:tardis.network" } }, { "content": { "membership": "leave" }, "event_id": "$1469803278566371ZGsjO:matrix.org", "membership": "leave", "origin_server_ts": 1469803278932, "sender": "@tbn:matrix.org", "state_key": "@tbn:matrix.org", "type": "m.room.member", "unsigned": { "age": 40864673746, "replaces_state": "$1469803261566325ZhqOw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "superboum", "membership": "join" }, "event_id": "$1483351958340616BPJCP:matrix.org", "membership": "join", "origin_server_ts": 1483351958866, "sender": "@115330:matrix.org", "state_key": "@115330:matrix.org", "type": "m.room.member", "unsigned": { "age": 27315993812, "replaces_state": "$1483348754327052xNDwn:matrix.org" } }, { "content": { "avatar_url": "mxc://tomesh.net/QlNXzUhSqjBFRzlBcUQhqHRd", "displayname": "Famicoman", "membership": "join" }, "event_id": "$14866536262204ywRYE:tomesh.net", "origin_server_ts": 1486653626189, "sender": "@Famicoman:tomesh.net", "state_key": "@Famicoman:tomesh.net", "type": "m.room.member", "unsigned": { "age": 36 } }, { "content": { "avatar_url": "mxc://matrix.org/VUXeFZVITVroMdQsKJCSbMff", "displayname": "Acuity", "membership": "join" }, "event_id": "$14824827151335092EHORd:matrix.org", "membership": "join", "origin_server_ts": 1482482715678, "sender": "@acuity:matrix.org", "state_key": "@acuity:matrix.org", "type": "m.room.member", "unsigned": { "age": 28185237000 } }, { "content": { "membership": "leave" }, "event_id": "$15014748413797954loYzI:matrix.org", "membership": "leave", "origin_server_ts": 1501474841628, "sender": "@freenode_arekinath:matrix.org", "state_key": "@freenode_arekinath:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193111050, "replaces_state": "$1495530673579802jjNdz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631532024216GqSFk:matrix.org", "membership": "leave", "origin_server_ts": 1495663153435, "sender": "@freenode_mytbk:matrix.org", "state_key": "@freenode_mytbk:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004799243, "replaces_state": "$14830282153742863RAtmO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149071005857iZWmr:cloud.tgcm.eu", "membership": "leave", "origin_server_ts": 1490710058649, "sender": "@julien:cloud.tgcm.eu", "state_key": "@julien:cloud.tgcm.eu", "type": "m.room.member", "unsigned": { "age": 10242734, "prev_content": { "avatar_url": null, "displayname": "julien", "membership": "join" }, "prev_sender": "@julien:cloud.tgcm.eu", "replaces_state": "$149070959255mdSCk:cloud.tgcm.eu" } }, { "content": { "membership": "leave" }, "event_id": "$144605564599336XwHVA:matrix.org", "origin_server_ts": 1446055645028, "sender": "@shubh:matrix.org", "state_key": "@shubh:matrix.org", "type": "m.room.member", "unsigned": { "age": 64612307650, "replaces_state": "$144605313096776uYoYF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Tristan", "membership": "join" }, "event_id": "$1416420910616oFTTZ:matrix.org", "membership": "join", "origin_server_ts": 1409927668435, "sender": "@tristan:matrix.org", "state_key": "@tristan:matrix.org", "stream_ordering": 3502, "type": "m.room.member", "unsigned": { "age": 94247042062 } }, { "content": { "membership": "leave" }, "event_id": "$148632682269gYNDK:mnium.de", "membership": "leave", "origin_server_ts": 1486326822211, "sender": "@a:mnium.de", "state_key": "@a:mnium.de", "type": "m.room.member", "unsigned": { "age": 407073, "prev_content": { "avatar_url": null, "displayname": "a", "membership": "join" }, "prev_sender": "@a:mnium.de", "replaces_state": "$148632665768XmZbH:mnium.de" } }, { "content": { "avatar_url": null, "displayname": "228943", "membership": "join" }, "event_id": "$14942781862383941cctSX:matrix.org", "membership": "join", "origin_server_ts": 1494278186867, "sender": "@228943:matrix.org", "state_key": "@228943:matrix.org", "type": "m.room.member", "unsigned": { "age": 16389765811 } }, { "content": { "membership": "leave" }, "event_id": "$1499259386166LkueH:chat.happycom.org", "membership": "leave", "origin_server_ts": 1499259386194, "sender": "@olive:chat.happycom.org", "state_key": "@olive:chat.happycom.org", "type": "m.room.member", "unsigned": { "age": 11408566484, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@olive:chat.happycom.org", "replaces_state": "$1499259309165KTHFp:chat.happycom.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145533496271227IhiNT:matrix.org", "membership": "join", "origin_server_ts": 1455334962132, "sender": "@kegan11:matrix.org", "state_key": "@kegan11:matrix.org", "type": "m.room.member", "unsigned": { "age": 55332990546 } }, { "content": { "avatar_url": "mxc://matrix.org/QnWhTsqizTjjYjWwDZfDXfxi#auto", "displayname": null, "membership": "join" }, "event_id": "$145710218647760qfxwx:matrix.org", "membership": "join", "origin_server_ts": 1457102186039, "sender": "@arthurp3:matrix.org", "state_key": "@arthurp3:matrix.org", "type": "m.room.member", "unsigned": { "age": 53565766639 } }, { "content": { "avatar_url": null, "displayname": "Guest 153823", "kind": "guest", "membership": "join" }, "event_id": "$1487202685374409IWKve:matrix.org", "membership": "join", "origin_server_ts": 1487202685430, "sender": "@153823:matrix.org", "state_key": "@153823:matrix.org", "type": "m.room.member", "unsigned": { "age": 23465267248 } }, { "content": { "avatar_url": "mxc://matrix.org/QEAQFAUhennXpHixxrcuCdtz#auto", "displayname": "ayumi", "membership": "join" }, "event_id": "$1437034666155493kfPRh:matrix.org", "membership": "join", "origin_server_ts": 1437034666920, "sender": "@ayumi:matrix.org", "state_key": "@ayumi:matrix.org", "type": "m.room.member", "unsigned": { "age": 73633285758 } }, { "content": { "membership": "leave" }, "event_id": "$147094092656HNJxh:waffle.tech", "membership": "leave", "origin_server_ts": 1470940926179, "sender": "@nocylah:waffle.tech", "state_key": "@nocylah:waffle.tech", "type": "m.room.member", "unsigned": { "age": 39727026499, "replaces_state": "$147094087555Ejwhd:waffle.tech" } }, { "content": { "projects": [] }, "event_id": "$1446571302472477jhxnF:matrix.org", "origin_server_ts": 1446571302923, "sender": "@neb:matrix.org", "state_key": "", "type": "org.matrix.neb.plugin.github.projects.tracking", "unsigned": { "age": 64096649755, "replaces_state": "$1443433215250677lMmPZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CISeSjanZNPzDdMMsCdCachm#auto", "displayname": "indefini", "membership": "join" }, "event_id": "$1480033291189921KrYpM:matrix.org", "membership": "join", "origin_server_ts": 1480033291544, "sender": "@indefini:matrix.org", "state_key": "@indefini:matrix.org", "type": "m.room.member", "unsigned": { "age": 30634661134 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14941910051634188ukVli:matrix.org", "membership": "join", "origin_server_ts": 1494191005201, "sender": "@wtfwtfdef:matrix.org", "state_key": "@wtfwtfdef:matrix.org", "type": "m.room.member", "unsigned": { "age": 16476947477 } }, { "content": { "avatar_url": "mxc://matrix.org/PeeVUpPdmVyyEgVhiSYOqaSW", "displayname": "Zorroness", "membership": "join" }, "event_id": "$1481739199401346tmVOs:matrix.org", "membership": "join", "origin_server_ts": 1481739199569, "sender": "@Zorroness:matrix.org", "state_key": "@Zorroness:matrix.org", "type": "m.room.member", "unsigned": { "age": 28928753109 } }, { "content": { "avatar_url": "mxc://dusky.horse/fYCezplxahCAThVQeYcqzAHe", "displayname": "Dusk", "membership": "join" }, "event_id": "$146608918813bQsYP:dusky.horse", "membership": "join", "origin_server_ts": 1466089188746, "sender": "@Dusk:dusky.horse", "state_key": "@Dusk:dusky.horse", "type": "m.room.member", "unsigned": { "age": 44578763932, "prev_content": { "avatar_url": "mxc://dusky.horse/hkuDvmuKzUAvLPUdjFJLIAjd", "displayname": "Dusk", "membership": "join" }, "prev_sender": "@Dusk:dusky.horse", "replaces_state": "$145841217119QuWrT:dusky.horse" } }, { "content": { "avatar_url": "mxc://tarq.io/dAAkSKLVvBDBpfAtomVgmLlq", "displayname": "tarq", "membership": "join" }, "event_id": "$150230621720IoJnd:tarq.io", "origin_server_ts": 1502306217339, "sender": "@chris:tarq.io", "state_key": "@chris:tarq.io", "type": "m.room.member", "unsigned": { "age": 77 } }, { "content": { "avatar_url": "mxc://matrix.org/hGflZQNxFcDTropATvVZChBI", "displayname": "Florian", "membership": "join" }, "event_id": "$145635305316816cZHjV:matrix.org", "membership": "join", "origin_server_ts": 1456353053866, "sender": "@florianjacob:matrix.org", "state_key": "@florianjacob:matrix.org", "type": "m.room.member", "unsigned": { "age": 54314898812 } }, { "content": { "membership": "leave" }, "event_id": "$15019814283317345XnCcv:matrix.org", "membership": "leave", "origin_server_ts": 1501981428906, "sender": "@klaas:matrix.org", "state_key": "@klaas:matrix.org", "type": "m.room.member", "unsigned": { "age": 8686523772, "replaces_state": "$15018185041644059hgQgp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15015652185221294VQYZx:matrix.org", "membership": "leave", "origin_server_ts": 1501565218208, "sender": "@freenode_https___GK1wmSU:matrix.org", "state_key": "@freenode_https___GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 9102734470, "replaces_state": "$15015651575220772WwEiw:matrix.org" } }, { "content": { "avatar_url": "mxc://danieldent.qa2.com/KCRqVlPyXTWgZwxaUYmdtDFh", "displayname": "Daniel Dent", "membership": "join" }, "event_id": "$148270851412cEzpe:danieldent.qa2.com", "membership": "join", "origin_server_ts": 1482708514825, "sender": "@daniel:danieldent.qa2.com", "state_key": "@daniel:danieldent.qa2.com", "type": "m.room.member", "unsigned": { "age": 27959437853, "replaces_state": "$148270807610dLetr:danieldent.qa2.com" } }, { "content": { "avatar_url": null, "displayname": "m0lok", "membership": "join" }, "event_id": "$1492232134307018FPiIo:matrix.org", "membership": "join", "origin_server_ts": 1492232134354, "sender": "@m0lok:matrix.org", "state_key": "@m0lok:matrix.org", "type": "m.room.member", "unsigned": { "age": 18435818324 } }, { "content": { "avatar_url": "mxc://m.skaverat.net/eNLhnKPaTngKcgattfdMAeKK", "displayname": "S͚͍̭̪̤͙̱͙̖̥͙̥̤̻̙͕͓͂̌ͬ͐̂k̜̝͎̰̥̻̼̂̌͛͗͊̅̒͂̊̍̍͌̈̈́͌̋̊ͬa͉̯͚̺̗̳̩ͪ̋̑͌̓̆̍̂̉̏̅̆ͧ̌̑v̲̲̪̝ͥ̌ͨͮͭ̊͆̾ͮ̍ͮ͑̚e̮̙͈̱̘͕̼̮͒ͩͨͫ̃͗̇ͩ͒ͣͦ͒̄̍͐ͣ̿ͥṘ̗̺͇̺̺͔̄́̊̓͊̍̃ͨ̚ā̼͎̘̟̼͎̜̪̪͚̋ͨͨͧ̓ͦͯͤ̄͆̋͂ͩ͌ͧͅt̙̙̹̗̦͖̞ͫͪ͑̑̅ͪ̃̚ͅ", "membership": "join" }, "event_id": "$1437731917206TpQrW:m.skaverat.net", "origin_server_ts": 1437731917145, "sender": "@skaverat:m.skaverat.net", "state_key": "@skaverat:m.skaverat.net", "type": "m.room.member", "unsigned": { "age": 72936035533, "replaces_state": "$1437593120815jFfKV:m.skaverat.net" } }, { "content": { "membership": "leave" }, "event_id": "$1497871266763972TwOLC:matrix.org", "membership": "leave", "origin_server_ts": 1497871266647, "sender": "@ahdev:matrix.org", "state_key": "@ahdev:matrix.org", "type": "m.room.member", "unsigned": { "age": 12796686031, "replaces_state": "$1497869681748742sGzdo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wWSWiuHAuECewINDxkKWtUCz", "displayname": "notafile", "membership": "join" }, "event_id": "$1489615520232257VhBLp:matrix.org", "membership": "join", "origin_server_ts": 1489615520095, "sender": "@notafile:matrix.org", "state_key": "@notafile:matrix.org", "type": "m.room.member", "unsigned": { "age": 21052432583, "replaces_state": "$1489485064654924EToDC:matrix.org" } }, { "content": { "avatar_url": "mxc://t2bot.io/ZAUMQLQLpGDNwwFjZyGizokh", "displayname": "TravisR (t2bot.io)", "membership": "join" }, "event_id": "$15084734843214kgabe:t2bot.io", "membership": "join", "origin_server_ts": 1508473484636, "sender": "@travis:t2bot.io", "state_key": "@travis:t2bot.io", "type": "m.room.member", "unsigned": { "age": 2194468042, "replaces_state": "$1496174597263tAQFH:t2bot.io" } }, { "content": { "membership": "leave" }, "event_id": "$14593578322552bpcJU:matrix.loboto.net", "origin_server_ts": 1459357832214, "sender": "@nadrieril:matrix.loboto.net", "state_key": "@nadrieril:matrix.loboto.net", "type": "m.room.member", "unsigned": { "age": 51310120464, "replaces_state": "$14589047461047QxXeH:matrix.loboto.net" } }, { "content": { "avatar_url": null, "displayname": "KindOne", "membership": "join" }, "event_id": "$15089045351052984hmXpg:matrix.org", "membership": "join", "origin_server_ts": 1508904535205, "sender": "@KindOne:matrix.org", "state_key": "@KindOne:matrix.org", "type": "m.room.member", "unsigned": { "age": 1763417473 } }, { "content": { "avatar_url": null, "displayname": "traumschule", "membership": "join" }, "event_id": "$15077212711395447vmswJ:matrix.org", "membership": "join", "origin_server_ts": 1507721271140, "sender": "@traumschule:matrix.org", "state_key": "@traumschule:matrix.org", "type": "m.room.member", "unsigned": { "age": 2946681538 } }, { "content": { "membership": "leave" }, "event_id": "$15024946271025031WKOcT:matrix.org", "membership": "leave", "origin_server_ts": 1502494627432, "sender": "@freenode_ChanServ:matrix.org", "state_key": "@freenode_ChanServ:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173325246, "replaces_state": "$1501676724108288cohLK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hdyClfrRyRXixXJdcYzqrGzI#auto", "displayname": "Ineentho", "membership": "join" }, "event_id": "$146902005719948bLcWU:matrix.org", "membership": "join", "origin_server_ts": 1469020057687, "sender": "@Ineentho:matrix.org", "state_key": "@Ineentho:matrix.org", "type": "m.room.member", "unsigned": { "age": 41647894991 } }, { "content": { "membership": "leave" }, "event_id": "$15099448193198806REBeh:matrix.org", "membership": "leave", "origin_server_ts": 1509944819288, "sender": "@freenode_KindTwo:matrix.org", "state_key": "@freenode_KindTwo:matrix.org", "type": "m.room.member", "unsigned": { "age": 723133390, "replaces_state": "$15090478543101199PLwNt:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DmWXroeMBpEUnaWTOBzLzOGh", "displayname": "Akash", "membership": "join" }, "event_id": "$14200022912959uaIsn:matrix.org", "origin_server_ts": 1420002291648, "sender": "@akash:matrix.org", "state_key": "@akash:matrix.org", "type": "m.room.member", "unsigned": { "age": 90665661030, "replaces_state": "$14199348652727vkreH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631682024530xxcWm:matrix.org", "membership": "leave", "origin_server_ts": 1495663168236, "sender": "@freenode_ronny:matrix.org", "state_key": "@freenode_ronny:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004784442, "replaces_state": "$1473760571596CvgZd:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "superboum", "kind": "guest", "membership": "join" }, "event_id": "$1483352385342356TPFPk:matrix.org", "membership": "join", "origin_server_ts": 1483352385838, "sender": "@115352:matrix.org", "state_key": "@115352:matrix.org", "type": "m.room.member", "unsigned": { "age": 27315566840 } }, { "content": { "membership": "leave" }, "event_id": "$15025715792019035WHXMf:matrix.org", "membership": "leave", "origin_server_ts": 1502571579115, "sender": "@Scott1083:matrix.org", "state_key": "@Scott1083:matrix.org", "type": "m.room.member", "unsigned": { "age": 8096373563, "replaces_state": "$15025061171215426LMvuA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OWhMaGMskEncSTmIECZplmzK", "displayname": "jplatte", "membership": "join" }, "event_id": "$15092871365841821jxMLk:matrix.org", "membership": "join", "origin_server_ts": 1509287136188, "sender": "@jplatte:matrix.org", "state_key": "@jplatte:matrix.org", "type": "m.room.member", "unsigned": { "age": 1380816490, "replaces_state": "$15092871075841378JBNeB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "thomas88", "membership": "join" }, "event_id": "$1502140316354733zdchw:matrix.org", "membership": "join", "origin_server_ts": 1502140316839, "sender": "@thomas88:matrix.org", "state_key": "@thomas88:matrix.org", "type": "m.room.member", "unsigned": { "age": 8527635839 } }, { "content": { "avatar_url": null, "displayname": "astronavt", "membership": "join" }, "event_id": "$1502591216193755XFmvx:matrix.org", "membership": "join", "origin_server_ts": 1502591216374, "sender": "@astronavt:matrix.org", "state_key": "@astronavt:matrix.org", "type": "m.room.member", "unsigned": { "age": 8076736304 } }, { "content": { "avatar_url": "mxc://matrix.org/xtSEUSVHGSMgtGNMjLHfyIZe", "displayname": "oddvar2", "membership": "join" }, "event_id": "$1462707451377041msggf:matrix.org", "membership": "join", "origin_server_ts": 1462707451942, "sender": "@oddvar2:matrix.org", "state_key": "@oddvar2:matrix.org", "type": "m.room.member", "unsigned": { "age": 47960500736, "replaces_state": "$1462706805376351BHKDH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147153045247482MEuOc:matrix.org", "membership": "leave", "origin_server_ts": 1471530452894, "sender": "@sebastien.haberer:matrix.org", "state_key": "@sebastien.haberer:matrix.org", "type": "m.room.member", "unsigned": { "age": 39137499784, "replaces_state": "$147153032947122rbMkr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14822796392CzWVi:settgast.org", "membership": "leave", "origin_server_ts": 1482279639784, "sender": "@chris:settgast.org", "state_key": "@chris:settgast.org", "type": "m.room.member", "unsigned": { "age": 28388312894, "replaces_state": "$14822791971JWluM:settgast.org" } }, { "content": { "avatar_url": "mxc://matrix.org/GcrhKnCBhgLDxXuqCDtCOVCr", "displayname": "RAOF", "membership": "join" }, "event_id": "$14923202371023395hhZWV:matrix.org", "membership": "join", "origin_server_ts": 1492320237879, "sender": "@RAOF:matrix.org", "state_key": "@RAOF:matrix.org", "type": "m.room.member", "unsigned": { "age": 18347714799, "replaces_state": "$14907659411227755NrNOl:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1465536063111037bbGJt:matrix.org", "membership": "join", "origin_server_ts": 1465536063379, "sender": "@Riku:matrix.org", "state_key": "@Riku:matrix.org", "type": "m.room.member", "unsigned": { "age": 45131889299 } }, { "content": { "membership": "leave" }, "event_id": "$14864199692QBiwF:joostrijneveld.nl", "membership": "leave", "origin_server_ts": 1486419969054, "sender": "@joost:joostrijneveld.nl", "state_key": "@joost:joostrijneveld.nl", "type": "m.room.member", "unsigned": { "age": 2680282, "prev_content": { "avatar_url": null, "displayname": "Joost", "membership": "join" }, "prev_sender": "@joost:joostrijneveld.nl", "replaces_state": "$14864198261aqtqV:joostrijneveld.nl" } }, { "content": { "avatar_url": null, "displayname": "MrCustomizer", "membership": "join" }, "event_id": "$1505656114986494Jojnn:matrix.org", "membership": "join", "origin_server_ts": 1505656114433, "sender": "@MrCustomizer:matrix.org", "state_key": "@MrCustomizer:matrix.org", "type": "m.room.member", "unsigned": { "age": 5011838245 } }, { "content": { "avatar_url": null, "displayname": "Daniel Dent (matrix.org)", "membership": "join" }, "event_id": "$14827410662357907NFyTm:matrix.org", "membership": "join", "origin_server_ts": 1482741066034, "sender": "@DanielDent:matrix.org", "state_key": "@DanielDent:matrix.org", "type": "m.room.member", "unsigned": { "age": 27926886644 } }, { "content": { "membership": "leave" }, "event_id": "$15099448233198887iiSLd:matrix.org", "membership": "leave", "origin_server_ts": 1509944823196, "sender": "@freenode_mountainhigh:matrix.org", "state_key": "@freenode_mountainhigh:matrix.org", "type": "m.room.member", "unsigned": { "age": 723129482, "replaces_state": "$15089377021442246IbEXi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15092865940iYDkq:io4.us", "membership": "leave", "origin_server_ts": 1509286594327, "sender": "@matt:io4.us", "state_key": "@matt:io4.us", "type": "m.room.member", "unsigned": { "age": 1381358351, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@matt:io4.us", "replaces_state": "$15092822571jmHEw:io4.us" } }, { "content": { "membership": "leave" }, "event_id": "$15082674542552214RUGmj:matrix.org", "membership": "leave", "origin_server_ts": 1508267454211, "sender": "@freenode_CyBeRKeL:matrix.org", "state_key": "@freenode_CyBeRKeL:matrix.org", "type": "m.room.member", "unsigned": { "age": 2400498467, "replaces_state": "$15082577942367981MaITh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14677490422958616mHRgh:matrix.org", "membership": "leave", "origin_server_ts": 1467749042967, "sender": "@judge_dredd:matrix.org", "state_key": "@judge_dredd:matrix.org", "type": "m.room.member", "unsigned": { "age": 42918909711, "replaces_state": "$14677365712924346juNNB:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631852024871uAXBY:matrix.org", "membership": "leave", "origin_server_ts": 1495663185080, "sender": "@freenode_kegan__:matrix.org", "state_key": "@freenode_kegan__:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004767598, "replaces_state": "$143135048312TnFxp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "KenDai", "membership": "join" }, "event_id": "$148829998738049cKGTI:matrix.org", "membership": "join", "origin_server_ts": 1488299987987, "sender": "@KenDai:matrix.org", "state_key": "@KenDai:matrix.org", "type": "m.room.member", "unsigned": { "age": 22367964691 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14822646531piLhZ:imazes.org", "origin_server_ts": 1482264653773, "sender": "@asdqwe876:imazes.org", "state_key": "@asdqwe876:imazes.org", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": null, "displayname": "pjansen", "membership": "join" }, "event_id": "$15103533861339052DBqvT:matrix.org", "membership": "join", "origin_server_ts": 1510353386601, "sender": "@pjansen:matrix.org", "state_key": "@pjansen:matrix.org", "type": "m.room.member", "unsigned": { "age": 314566077 } }, { "content": { "avatar_url": null, "displayname": "Jacob", "membership": "join" }, "event_id": "$1489730434517157hPcwP:matrix.org", "membership": "join", "origin_server_ts": 1489730434227, "sender": "@Jacob:matrix.org", "state_key": "@Jacob:matrix.org", "type": "m.room.member", "unsigned": { "age": 20937518451 } }, { "content": { "avatar_url": "mxc://boli.rocks/mtlauqHShISryMEmHyGxONfi", "displayname": "boli", "membership": "join" }, "event_id": "$149336445514eoVmy:boli.rocks", "origin_server_ts": 1493364455686, "sender": "@boli:boli.rocks", "state_key": "@boli:boli.rocks", "type": "m.room.member", "unsigned": { "age": 94, "replaces_state": "$14876989441IEjMt:boli.rocks" } }, { "content": { "membership": "leave" }, "event_id": "$15023221515eevoQ:candybarchat.ddns.net", "membership": "leave", "origin_server_ts": 1502322151767, "sender": "@bubby2:candybarchat.ddns.net", "state_key": "@bubby2:candybarchat.ddns.net", "type": "m.room.member", "unsigned": { "age": 8345800911, "prev_content": { "avatar_url": null, "displayname": "bubby", "membership": "join" }, "prev_sender": "@bubby2:candybarchat.ddns.net", "replaces_state": "$15023219371ZQGBs:candybarchat.ddns.net" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1461577101284983JaYoH:matrix.org", "membership": "join", "origin_server_ts": 1461577101612, "sender": "@themk:matrix.org", "state_key": "@themk:matrix.org", "type": "m.room.member", "unsigned": { "age": 49090851066 } }, { "content": { "membership": "leave" }, "event_id": "$150366581790014FoTSE:matrix.org", "membership": "leave", "origin_server_ts": 1503665817705, "sender": "@deisel16:matrix.org", "state_key": "@deisel16:matrix.org", "type": "m.room.member", "unsigned": { "age": 7002134973, "replaces_state": "$15035935213024568maYLQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631972025174npdLR:matrix.org", "membership": "leave", "origin_server_ts": 1495663197863, "sender": "@freenode_femme:matrix.org", "state_key": "@freenode_femme:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004754815, "replaces_state": "$14803461501241626yACxq:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wZFUgfVBkIPAQoXXeFVyhCKi", "displayname": null, "membership": "join" }, "event_id": "$1453363235150353LgaSe:matrix.org", "origin_server_ts": 1453363235542, "sender": "@TsiyonMente:matrix.org", "state_key": "@TsiyonMente:matrix.org", "type": "m.room.member", "unsigned": { "age": 57304717136, "replaces_state": "$1450871223437457dzHPZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OCZaTJwzgtZUbDVLCzLiHLtx#auto", "displayname": "Daniel Espling", "membership": "join" }, "event_id": "$14261475903091bKZKQ:matrix.org", "membership": "join", "origin_server_ts": 1426147590978, "sender": "@Setomidor:matrix.org", "state_key": "@Setomidor:matrix.org", "type": "m.room.member", "unsigned": { "age": 84520361700 } }, { "content": { "avatar_url": "http://matrix.tp.mu:8008/_matrix/content/QGphc25lamFjOnRwLm11YiUFxmHmYHGSDHSHholelikh.aW1hZ2UvanBlZw==.jpeg", "displayname": "Andy", "membership": "join" }, "event_id": "$1417535998449dFYgM:tp.mu", "membership": "join", "origin_server_ts": 1417535998155, "sender": "@jasnejac:tp.mu", "state_key": "@jasnejac:tp.mu", "type": "m.room.member", "unsigned": { "age": 93131945002 } }, { "content": { "membership": "leave" }, "event_id": "$14991497943503425ipMbN:matrix.org", "membership": "leave", "origin_server_ts": 1499149794541, "sender": "@dv:matrix.org", "state_key": "@dv:matrix.org", "type": "m.room.member", "unsigned": { "age": 11518158137, "replaces_state": "$14990839532357941FUtzY:matrix.org" } }, { "content": { "avatar_url": "mxc://kek.community/TJtugdaBqBJuINxDfCYvrXaf", "displayname": "walle303", "membership": "join" }, "event_id": "$150303905311339rLUdp:kek.community", "membership": "join", "origin_server_ts": 1503039053455, "sender": "@walle303:kek.community", "state_key": "@walle303:kek.community", "type": "m.room.member", "unsigned": { "age": 7628899223, "replaces_state": "$1493408767281KRHyv:kek.community" } }, { "content": { "membership": "leave" }, "event_id": "$1417535024164QvDEN:matrix.org", "membership": "leave", "origin_server_ts": 1417535024443, "sender": "@irc_MikeJ:matrix.org", "state_key": "@irc_MikeJ:matrix.org", "type": "m.room.member", "unsigned": { "age": 93132928235 } }, { "content": { "avatar_url": "mxc://matrix.org/iKbtVyPKQyhLQFFMPeMVmwnM", "displayname": "Soupbowl", "membership": "join" }, "event_id": "$1441591470472060eEyRl:matrix.org", "origin_server_ts": 1441591470354, "sender": "@soupbowl:matrix.org", "state_key": "@soupbowl:matrix.org", "type": "m.room.member", "unsigned": { "age": 69076482324, "replaces_state": "$1441591432472031QIbJe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148949867382071bmXGn:matrix.org", "membership": "leave", "origin_server_ts": 1489498673881, "sender": "@Snarfburglar:matrix.org", "state_key": "@Snarfburglar:matrix.org", "type": "m.room.member", "unsigned": { "age": 21169278797, "replaces_state": "$1488271708369671zxfMs:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "paveltavoda", "membership": "join" }, "event_id": "$150063203138119FfUhk:matrix.org", "membership": "join", "origin_server_ts": 1500632031550, "sender": "@paveltavoda:matrix.org", "state_key": "@paveltavoda:matrix.org", "type": "m.room.member", "unsigned": { "age": 10035921128 } }, { "content": { "membership": "leave" }, "event_id": "$14956631902024998VaLVs:matrix.org", "membership": "leave", "origin_server_ts": 1495663190686, "sender": "@freenode_kaustavdm:matrix.org", "state_key": "@freenode_kaustavdm:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004761992, "replaces_state": "$143872435730524xYqsK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147318578980641BSBzs:matrix.org", "membership": "leave", "origin_server_ts": 1473185789462, "sender": "@crispy:matrix.org", "state_key": "@crispy:matrix.org", "type": "m.room.member", "unsigned": { "age": 37482163216, "replaces_state": "$147318577780580zyuVA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Antoine Proulx", "membership": "join" }, "event_id": "$14765583001214635IKCGl:matrix.org", "membership": "join", "origin_server_ts": 1476558300483, "sender": "@magicienap:matrix.org", "state_key": "@magicienap:matrix.org", "type": "m.room.member", "unsigned": { "age": 34109652195 } }, { "content": { "avatar_url": "mxc://codewalr.us/qNFURBjFkgnTmgaISjAYiges", "displayname": "Juju", "membership": "join" }, "event_id": "$148499278311FFkgX:codewalr.us", "origin_server_ts": 1484992782845, "sender": "@Juju:codewalr.us", "state_key": "@Juju:codewalr.us", "type": "m.room.member", "unsigned": { "age": 49 } }, { "content": { "membership": "leave" }, "event_id": "$15018574192030662bUuJZ:matrix.org", "membership": "leave", "origin_server_ts": 1501857419970, "sender": "@fiatjaf:matrix.org", "state_key": "@fiatjaf:matrix.org", "type": "m.room.member", "unsigned": { "age": 8810532708, "replaces_state": "$1489194768629552jeEOq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "reactormonk", "membership": "join" }, "event_id": "$14910460271YFDEV:matrix.reactormonk.org", "origin_server_ts": 1491046027307, "sender": "@reactormonk:matrix.reactormonk.org", "state_key": "@reactormonk:matrix.reactormonk.org", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": "mxc://matrix.org/RkBSZaFLnsnHmaRIvhUIYyRQ", "displayname": "G-Ray", "membership": "join" }, "event_id": "$149183557445091YRfnK:matrix.org", "membership": "join", "origin_server_ts": 1491835574105, "sender": "@G-Ray:matrix.org", "state_key": "@G-Ray:matrix.org", "type": "m.room.member", "unsigned": { "age": 18832378573, "replaces_state": "$1483174877259025JCVgZ:matrix.org" } }, { "content": { "avatar_url": "mxc://home.shrike.me/iNujBfwoycHLsXIJwZwuOYJF", "displayname": "Shrike", "membership": "join" }, "event_id": "$14861069542OltWs:home.shrike.me", "membership": "join", "origin_server_ts": 1486106954523, "sender": "@Shrike:home.shrike.me", "state_key": "@Shrike:home.shrike.me", "type": "m.room.member", "unsigned": { "age": 24560998155, "prev_content": { "avatar_url": null, "displayname": "Shrike", "membership": "join" }, "prev_sender": "@Shrike:home.shrike.me", "replaces_state": "$14847420841YdqIz:home.shrike.me" } }, { "content": { "membership": "leave" }, "event_id": "$150249288168UZpXQ:candybarchat.ddns.net", "membership": "leave", "origin_server_ts": 1502492881348, "sender": "@FritzTheCat:candybarchat.ddns.net", "state_key": "@FritzTheCat:candybarchat.ddns.net", "type": "m.room.member", "unsigned": { "age": 8175071330, "prev_content": { "avatar_url": "mxc://candybarchat.ddns.net/VBaNELXTBHDdVCNophxznDXS", "displayname": "FritzTheCat", "membership": "join" }, "prev_sender": "@FritzTheCat:candybarchat.ddns.net", "replaces_state": "$150241104322ApxpH:candybarchat.ddns.net" } }, { "content": { "membership": "leave" }, "event_id": "$15106301321274761LUqhq:matrix.org", "membership": "leave", "origin_server_ts": 1510630132163, "sender": "@freenode_satdav:matrix.org", "state_key": "@freenode_satdav:matrix.org", "type": "m.room.member", "unsigned": { "age": 37820515, "replaces_state": "$15093436376565166AuVBf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Mike Hearn", "membership": "join" }, "event_id": "$14542538523362WlxBF:matrix.org", "origin_server_ts": 1454253852132, "sender": "@mikehearn:matrix.org", "state_key": "@mikehearn:matrix.org", "type": "m.room.member", "unsigned": { "age": 56414100546 } }, { "content": { "avatar_url": null, "displayname": "Xh1pher", "membership": "join" }, "event_id": "$1453361879149531MStAa:matrix.org", "origin_server_ts": 1453361879731, "sender": "@Xh1pher:matrix.org", "state_key": "@Xh1pher:matrix.org", "type": "m.room.member", "unsigned": { "age": 57306072947 } }, { "content": { "membership": "leave" }, "event_id": "$15063811484oUWyS:matrix.deprecated.org", "membership": "leave", "origin_server_ts": 1506381148544, "sender": "@matias:matrix.deprecated.org", "state_key": "@matias:matrix.deprecated.org", "type": "m.room.member", "unsigned": { "age": 4286804134, "prev_content": { "avatar_url": "mxc://matrix.deprecated.org/psMdoOcNxyvvsNvwLnjGHGRW", "displayname": "Matias", "membership": "join" }, "prev_sender": "@matias:matrix.deprecated.org", "replaces_state": "$1491506065124XffSc:matrix.deprecated.org" } }, { "content": { "avatar_url": null, "displayname": "drp (IRC)", "membership": "join" }, "event_id": "$15103776741622655yqkMR:matrix.org", "membership": "join", "origin_server_ts": 1510377674283, "sender": "@freenode_drp:matrix.org", "state_key": "@freenode_drp:matrix.org", "type": "m.room.member", "unsigned": { "age": 290278395 } }, { "content": { "membership": "leave" }, "event_id": "$1484828084933IeOfy:anemone.me", "membership": "leave", "origin_server_ts": 1484828084848, "sender": "@dave:anemone.me", "state_key": "@dave:anemone.me", "type": "m.room.member", "unsigned": { "age": 25839867830, "replaces_state": "$1482548094496WYPcX:anemone.me" } }, { "content": { "avatar_url": "mxc://matrix.org/oDNMhihwlGJvQnKqEwCLQrgC#auto", "displayname": "Thomas Howe", "membership": "join" }, "event_id": "$14323168001559yvphj:matrix.org", "membership": "join", "origin_server_ts": 1432316800083, "sender": "@howethomas:matrix.org", "state_key": "@howethomas:matrix.org", "type": "m.room.member", "unsigned": { "age": 78351152595 } }, { "content": { "avatar_url": "mxc://poneybl.eu/PxSzJYdjKWAfoNeSnopAKqZQ", "displayname": "zaz", "membership": "join" }, "event_id": "$14883740958pfcjP:poneybl.eu", "origin_server_ts": 1488374095201, "sender": "@zaz:poneybl.eu", "state_key": "@zaz:poneybl.eu", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "membership": "leave" }, "event_id": "$14932440091203Onhhh:igalia.com", "membership": "leave", "origin_server_ts": 1493244009655, "sender": "@psaavedra:igalia.com", "state_key": "@psaavedra:igalia.com", "type": "m.room.member", "unsigned": { "age": 17423943023, "prev_content": { "avatar_url": "mxc://igalia.com/wmOpwmXlaBAlfFjoNEsnwOiR", "displayname": "psaavedra", "membership": "join" }, "prev_sender": "@psaavedra:igalia.com", "replaces_state": "$1493243016815jLqgy:igalia.com" } }, { "content": { "avatar_url": "mxc://matrix.org/KeYYxwoUKRMLcDNhzxUWDNMw#auto", "displayname": "Bella ", "membership": "join" }, "event_id": "$1435773315158091BARkS:matrix.org", "origin_server_ts": 1435773315784, "sender": "@Bella0420:matrix.org", "state_key": "@Bella0420:matrix.org", "type": "m.room.member", "unsigned": { "age": 74894636894 } }, { "content": { "membership": "leave" }, "event_id": "$15106301331274784VpwYN:matrix.org", "membership": "leave", "origin_server_ts": 1510630133661, "sender": "@freenode_silviof1:matrix.org", "state_key": "@freenode_silviof1:matrix.org", "type": "m.room.member", "unsigned": { "age": 37819017, "replaces_state": "$1510191952424161jbFtW:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "r3pek (IRC)", "membership": "join" }, "event_id": "$1508859571347887uIPLz:matrix.org", "membership": "join", "origin_server_ts": 1508859571225, "sender": "@freenode_r3pek:matrix.org", "state_key": "@freenode_r3pek:matrix.org", "type": "m.room.member", "unsigned": { "age": 1808381453 } }, { "content": { "membership": "leave" }, "event_id": "$15002906096zuNBn:alanpearce.eu", "membership": "leave", "origin_server_ts": 1500290609699, "sender": "@alan:alanpearce.eu", "state_key": "@alan:alanpearce.eu", "type": "m.room.member", "unsigned": { "age": 10377342979, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@alan:alanpearce.eu", "replaces_state": "$15002902571ykvwg:alanpearce.eu" } }, { "content": { "avatar_url": "mxc://matrix.nordlab-ev.de/ClWiyduWyhoZSTwfiBUdZfos", "displayname": "svenfl", "membership": "join" }, "event_id": "$1506273489540FpEws:matrix.nordlab-ev.de", "membership": "join", "origin_server_ts": 1506273489597, "sender": "@sven:matrix.nordlab-ev.de", "state_key": "@sven:matrix.nordlab-ev.de", "type": "m.room.member", "unsigned": { "age": 4394463081, "replaces_state": "$1506273223408ydIdi:matrix.nordlab-ev.de" } }, { "content": { "avatar_url": null, "displayname": "nullwarp", "membership": "join" }, "event_id": "$15030958204shUbm:stackweave.co", "membership": "join", "origin_server_ts": 1503095820947, "sender": "@keslerm:stackweave.co", "state_key": "@keslerm:stackweave.co", "type": "m.room.member", "unsigned": { "age": 7572131731, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@keslerm:stackweave.co", "replaces_state": "$150289393454CdTQa:stackweave.co" } }, { "content": { "avatar_url": null, "displayname": "laotze", "membership": "join" }, "event_id": "$1494597491220726NIkUO:matrix.org", "membership": "join", "origin_server_ts": 1494597491476, "sender": "@laotze:matrix.org", "state_key": "@laotze:matrix.org", "type": "m.room.member", "unsigned": { "age": 16070461202 } }, { "content": { "avatar_url": "mxc://matrix.org/KBxWxuuVnLjNwWumWbtkZzir", "displayname": "halohaL", "membership": "join" }, "event_id": "$14987274121685803SAYak:matrix.org", "membership": "join", "origin_server_ts": 1498727412941, "sender": "@haloha:matrix.org", "state_key": "@haloha:matrix.org", "type": "m.room.member", "unsigned": { "age": 11940539737, "replaces_state": "$14987273291684842qepIa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147787604413FwZar:h3ndr1k.de", "membership": "leave", "origin_server_ts": 1477876044689, "sender": "@gamemaster:h3ndr1k.de", "state_key": "@gamemaster:h3ndr1k.de", "type": "m.room.member", "unsigned": { "age": 32791907989, "replaces_state": "$147787580312paCCg:h3ndr1k.de" } }, { "content": { "membership": "leave" }, "event_id": "$15044656342UPFMn:matrix.giraffensaal.de", "membership": "leave", "origin_server_ts": 1504465634045, "sender": "@christian:matrix.giraffensaal.de", "state_key": "@christian:matrix.giraffensaal.de", "type": "m.room.member", "unsigned": { "age": 6202318633, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@christian:matrix.giraffensaal.de", "replaces_state": "$15044655021LqcNf:matrix.giraffensaal.de" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1485984898212543aUmpi:matrix.org", "membership": "join", "origin_server_ts": 1485984898923, "sender": "@johnpatrickdelcastillo:matrix.org", "state_key": "@johnpatrickdelcastillo:matrix.org", "type": "m.room.member", "unsigned": { "age": 24683053755 } }, { "content": { "avatar_url": null, "displayname": "Pezzle", "membership": "join" }, "event_id": "$1494877913350835mEHnj:matrix.org", "membership": "join", "origin_server_ts": 1494877913093, "sender": "@Pezzle:matrix.org", "state_key": "@Pezzle:matrix.org", "type": "m.room.member", "unsigned": { "age": 15790039585 } }, { "content": { "avatar_url": null, "displayname": "r3pek", "membership": "join" }, "event_id": "$150894428135CwZJY:r3pek.org", "membership": "join", "origin_server_ts": 1508944281476, "sender": "@r3pek:r3pek.org", "state_key": "@r3pek:r3pek.org", "type": "m.room.member", "unsigned": { "age": 1723671202, "replaces_state": "$150891695214deqjS:r3pek.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OonjUOmcuVpUnmOWKtzPmAFe", "displayname": "uhoreg", "membership": "join" }, "event_id": "$1479648972385856LsPdM:matrix.org", "membership": "join", "origin_server_ts": 1479648972661, "sender": "@uhoreg:matrix.org", "state_key": "@uhoreg:matrix.org", "type": "m.room.member", "unsigned": { "age": 31018980017 } }, { "content": { "avatar_url": "mxc://matrix.eclabs.de/MxCGAcuKFGuPBhzTtcuiqHAk", "displayname": "rubo77", "membership": "join" }, "event_id": "$1488527353379LGfiM:matrix.eclabs.de", "origin_server_ts": 1488527353877, "sender": "@rubo77:matrix.eclabs.de", "state_key": "@rubo77:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 8, "replaces_state": "$148717201810478Amoee:matrix.eclabs.de" } }, { "content": { "membership": "leave" }, "event_id": "$14970512831285105vRoDc:matrix.org", "membership": "leave", "origin_server_ts": 1497051283416, "sender": "@dax:matrix.org", "state_key": "@dax:matrix.org", "type": "m.room.member", "unsigned": { "age": 13616669262, "replaces_state": "$14966929774818189BHQZL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14320809521677DMKVg:matrix.org", "origin_server_ts": 1432080952318, "sender": "@szia:matrix.org", "state_key": "@szia:matrix.org", "type": "m.room.member", "unsigned": { "age": 78587000360, "replaces_state": "$14313676441005fqFLa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1469484567207843yidoT:matrix.org", "membership": "leave", "origin_server_ts": 1469484567616, "sender": "@Smash_Boy:matrix.org", "state_key": "@Smash_Boy:matrix.org", "type": "m.room.member", "unsigned": { "age": 41183385062, "replaces_state": "$1469484538207767UEbgk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "John77", "membership": "join" }, "event_id": "$1493792120973477oMHXt:matrix.org", "membership": "join", "origin_server_ts": 1493792120584, "sender": "@John77:matrix.org", "state_key": "@John77:matrix.org", "type": "m.room.member", "unsigned": { "age": 16875832094 } }, { "content": { "avatar_url": "mxc://matrix.org/NQhtLGJvYrnkbAdEAlQSxJne#auto", "displayname": null, "membership": "join" }, "event_id": "$1447148109866518tWObe:matrix.org", "origin_server_ts": 1447148109383, "sender": "@ltluc253:matrix.org", "state_key": "@ltluc253:matrix.org", "type": "m.room.member", "unsigned": { "age": 63519843295 } }, { "content": { "avatar_url": null, "displayname": "Guest 63531", "kind": "guest", "membership": "join" }, "event_id": "$147680907388356SpbBH:matrix.org", "membership": "join", "origin_server_ts": 1476809073912, "sender": "@63531:matrix.org", "state_key": "@63531:matrix.org", "type": "m.room.member", "unsigned": { "age": 33858878766 } }, { "content": { "membership": "leave" }, "event_id": "$14938104895630FUmmn:matrix.org", "membership": "leave", "origin_server_ts": 1493810489455, "sender": "@shadowtux:matrix.org", "state_key": "@shadowtux:matrix.org", "type": "m.room.member", "unsigned": { "age": 16857463223, "replaces_state": "$14804227481573618OMsvB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150017173513nbaup:alscs.net", "origin_server_ts": 1500171735232, "sender": "@al76:alscs.net", "state_key": "@al76:alscs.net", "type": "m.room.member", "unsigned": { "age": 33, "replaces_state": "$150016353419BnevA:alscs.net" } }, { "content": { "avatar_url": "mxc://matrix.org/PvPDxDQgJGJjFIfYdAOxIGOe", "displayname": "Telc", "membership": "join" }, "event_id": "$1453191860182917kwpyh:matrix.org", "origin_server_ts": 1453191860721, "sender": "@Telc:matrix.org", "state_key": "@Telc:matrix.org", "type": "m.room.member", "unsigned": { "age": 57476091957 } }, { "content": { "avatar_url": "mxc://matrix.org/emBsGXCxajpZrccCEZBcPuPC#auto", "displayname": "wldhx (Dmitriy Volkov)", "membership": "join" }, "event_id": "$1457384001118474ApNco:matrix.org", "membership": "join", "origin_server_ts": 1457384001050, "sender": "@wldhx:matrix.org", "state_key": "@wldhx:matrix.org", "type": "m.room.member", "unsigned": { "age": 53283951628 } }, { "content": { "avatar_url": null, "displayname": "wilt", "membership": "join" }, "event_id": "$1488327928276728pBcTm:matrix.org", "membership": "join", "origin_server_ts": 1488327928688, "sender": "@wilt:matrix.org", "state_key": "@wilt:matrix.org", "type": "m.room.member", "unsigned": { "age": 22340023990 } }, { "content": { "membership": "leave" }, "event_id": "$14991437513416812eFvXS:matrix.org", "membership": "leave", "origin_server_ts": 1499143751083, "sender": "@freenode_tilpner_:matrix.org", "state_key": "@freenode_tilpner_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524201595, "replaces_state": "$1498850499417115PJQrw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "KFCT20SASL", "kind": "guest", "membership": "join" }, "event_id": "$14848995533950560nnzTo:matrix.org", "membership": "join", "origin_server_ts": 1484899553532, "sender": "@132050:matrix.org", "state_key": "@132050:matrix.org", "type": "m.room.member", "unsigned": { "age": 25768399146 } }, { "content": { "avatar_url": "mxc://one-zero.one/xfHYaQqefCwtMXPWeCCBwZpT", "displayname": "Phuzzy", "membership": "join" }, "event_id": "$15081427881acyfP:one-zero.one", "origin_server_ts": 1508142788596, "sender": "@william:one-zero.one", "state_key": "@william:one-zero.one", "type": "m.room.member", "unsigned": { "age": 22 } }, { "content": { "avatar_url": "mxc://matrix.org/ipYRXEoGiuWCrNUykAHJEmJS", "displayname": "A. Penguin", "membership": "join" }, "event_id": "$144436846876541WXprs:matrix.org", "origin_server_ts": 1444368468816, "sender": "@apenguin:matrix.org", "state_key": "@apenguin:matrix.org", "type": "m.room.member", "unsigned": { "age": 66299483862, "replaces_state": "$144295763622502jbUAF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/uLEIShRpUtdczzIyvDiBOckF", "displayname": "dhole", "membership": "join" }, "event_id": "$15069913452667557NZXqp:matrix.org", "membership": "join", "origin_server_ts": 1506991345875, "sender": "@dhole:matrix.org", "state_key": "@dhole:matrix.org", "type": "m.room.member", "unsigned": { "age": 3676606803, "replaces_state": "$15069913322667376uPqgD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/InEVOHDpdEKGVnUzyjNsKMog", "displayname": "Tokodomo", "membership": "join" }, "event_id": "$15080757313498647VFPZJ:matrix.org", "membership": "join", "origin_server_ts": 1508075731933, "sender": "@Tokodomo:matrix.org", "state_key": "@Tokodomo:matrix.org", "type": "m.room.member", "unsigned": { "age": 2592220745, "replaces_state": "$15080757123498440MPtcX:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145417285070328zwcjh:matrix.org", "origin_server_ts": 1454172850037, "sender": "@dextor:matrix.org", "state_key": "@dextor:matrix.org", "type": "m.room.member", "unsigned": { "age": 56495102641 } }, { "content": { "membership": "leave" }, "event_id": "$15043411376kBcrH:a6n.de", "membership": "leave", "origin_server_ts": 1504341137705, "sender": "@sven:a6n.de", "state_key": "@sven:a6n.de", "type": "m.room.member", "unsigned": { "age": 6326814973, "prev_content": { "avatar_url": "mxc://a6n.de/NZlMbqqHmWwPnNPaYVwoQkJR", "displayname": "sven", "membership": "join" }, "prev_sender": "@sven:a6n.de", "replaces_state": "$150046358959kcZOK:a6n.de" } }, { "content": { "avatar_url": null, "displayname": "sayan (IRC)", "membership": "join" }, "event_id": "$15090546243224489zJjjv:matrix.org", "membership": "join", "origin_server_ts": 1509054624304, "sender": "@freenode_sayan:matrix.org", "state_key": "@freenode_sayan:matrix.org", "type": "m.room.member", "unsigned": { "age": 1613328374, "replaces_state": "$15090545193222714UOQnc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15071029754112962gpNKK:matrix.org", "membership": "leave", "origin_server_ts": 1507102975269, "sender": "@freenode_Iphonetrouble:matrix.org", "state_key": "@freenode_Iphonetrouble:matrix.org", "type": "m.room.member", "unsigned": { "age": 3564977409, "replaces_state": "$15070974624059617VNlAf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632112025481Nxjrt:matrix.org", "membership": "leave", "origin_server_ts": 1495663211483, "sender": "@freenode_oddvar:matrix.org", "state_key": "@freenode_oddvar:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004741195, "replaces_state": "$147152442429407PZGen:matrix.org" } }, { "content": { "avatar_url": "mxc://hispagatos.org/bcMPybxilJEkEGomkcbzqbdR", "displayname": "rek2", "membership": "join" }, "event_id": "$1498598164388pIKVK:hispagatos.org", "origin_server_ts": 1498598164718, "sender": "@rek2:hispagatos.org", "state_key": "@rek2:hispagatos.org", "type": "m.room.member", "unsigned": { "age": 27, "replaces_state": "$1498598127314517OvyuB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vTDJowrNkpknOYUmnlwHzNKm", "displayname": "12sergio", "membership": "join" }, "event_id": "$15047776193241261gFFDc:matrix.org", "membership": "join", "origin_server_ts": 1504777619561, "sender": "@12steven:matrix.org", "state_key": "@12steven:matrix.org", "type": "m.room.member", "unsigned": { "age": 5890333117, "replaces_state": "$14905566111350422tbFgo:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "damo22_guest", "kind": "guest", "membership": "join" }, "event_id": "$14836121521881009IdInN:matrix.org", "membership": "join", "origin_server_ts": 1483612152090, "sender": "@117863:matrix.org", "state_key": "@117863:matrix.org", "type": "m.room.member", "unsigned": { "age": 27055800588 } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15084732592840mwAwJ:t2bot.io", "membership": "join", "origin_server_ts": 1508473259574, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 2194693104, "replaces_state": "$15072231537270OYZPm:t2bot.io" } }, { "content": { "membership": "leave" }, "event_id": "$1495260480534195cPieX:matrix.org", "membership": "leave", "origin_server_ts": 1495260480864, "sender": "@Spferical:matrix.org", "state_key": "@Spferical:matrix.org", "type": "m.room.member", "unsigned": { "age": 15407471814, "replaces_state": "$1472913953394459SBExD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148716881082274XVwbp:matrix.org", "membership": "leave", "origin_server_ts": 1487168810119, "sender": "@thebastinik:matrix.org", "state_key": "@thebastinik:matrix.org", "type": "m.room.member", "unsigned": { "age": 23499142559, "replaces_state": "$1486841556979527VilOH:matrix.org" } }, { "content": { "avatar_url": "mxc://ldbco.de/vANKPVQpdQMsLJnUFWSLcKQf", "displayname": "luke", "membership": "join" }, "event_id": "$1509641352119mBeeX:ldbco.de", "membership": "join", "origin_server_ts": 1509641352147, "sender": "@lb:ldbco.de", "state_key": "@lb:ldbco.de", "type": "m.room.member", "unsigned": { "age": 1026600531, "replaces_state": "$1505638923169hpnCB:ldbco.de" } }, { "content": { "membership": "leave" }, "event_id": "$149307584614xQmMb:envelope.xyz", "membership": "leave", "origin_server_ts": 1493075846223, "sender": "@joseph:envelope.xyz", "state_key": "@joseph:envelope.xyz", "type": "m.room.member", "unsigned": { "age": 17592106455, "prev_content": { "avatar_url": null, "displayname": "joseph", "membership": "join" }, "prev_sender": "@joseph:envelope.xyz", "replaces_state": "$14930734541nWLtU:envelope.xyz" } }, { "content": { "avatar_url": "mxc://maeli.net/BnxAnYiFArbmsOtvFcvkhWOk", "displayname": "ravel", "membership": "join" }, "event_id": "$149157595110LGZCJ:maeli.net", "origin_server_ts": 1491575951437, "sender": "@ravel:maeli.net", "state_key": "@ravel:maeli.net", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "avatar_url": null, "displayname": "kolorafa", "membership": "join" }, "event_id": "$14675599492609572tejVg:matrix.org", "membership": "join", "origin_server_ts": 1467559949179, "sender": "@kolorafa:matrix.org", "state_key": "@kolorafa:matrix.org", "type": "m.room.member", "unsigned": { "age": 43108003499 } }, { "content": { "avatar_url": null, "displayname": "bch", "membership": "join" }, "event_id": "$14239454901312NrXla:matrix.org", "origin_server_ts": 1423945490804, "sender": "@bch:matrix.org", "state_key": "@bch:matrix.org", "type": "m.room.member", "unsigned": { "age": 86722461874, "replaces_state": "$14239451351307HVCBI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/gjVVkvhObqUvSIRRAjyhJqxb", "displayname": "Mike", "membership": "join" }, "event_id": "$1489476347609206pvfRV:matrix.org", "membership": "join", "origin_server_ts": 1489476347368, "sender": "@mpicher:matrix.org", "state_key": "@mpicher:matrix.org", "type": "m.room.member", "unsigned": { "age": 21191605310, "replaces_state": "$14283562402452ZuHpe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "PavelT", "kind": "guest", "membership": "join" }, "event_id": "$1497860776654542YKnEU:matrix.org", "membership": "join", "origin_server_ts": 1497860776260, "sender": "@267191:matrix.org", "state_key": "@267191:matrix.org", "type": "m.room.member", "unsigned": { "age": 12807176418 } }, { "content": { "avatar_url": "mxc://matrix.org/vVqgqtGHpTNogohrXHFVihbu", "displayname": "eneas", "membership": "join" }, "event_id": "$14844994891664284OXFPX:matrix.org", "membership": "join", "origin_server_ts": 1484499489758, "sender": "@eneas:matrix.org", "state_key": "@eneas:matrix.org", "type": "m.room.member", "unsigned": { "age": 26168462920, "replaces_state": "$1484267366539783ZWHsI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "bartmann", "membership": "join" }, "event_id": "$15052078933103335dajNc:matrix.org", "membership": "join", "origin_server_ts": 1505207893694, "sender": "@bartmann:matrix.org", "state_key": "@bartmann:matrix.org", "type": "m.room.member", "unsigned": { "age": 5460058984 } }, { "content": { "avatar_url": "mxc://matrix.org/WALwCygLHGKjOUrcReDIULav#auto", "displayname": null, "membership": "join" }, "event_id": "$144752927934789VkRTt:matrix.org", "origin_server_ts": 1447529279639, "sender": "@covalent:matrix.org", "state_key": "@covalent:matrix.org", "type": "m.room.member", "unsigned": { "age": 63138673039 } }, { "content": { "avatar_url": null, "displayname": "ryandelgrosso", "membership": "join" }, "event_id": "$15041245181692966sijps:matrix.org", "membership": "join", "origin_server_ts": 1504124518907, "sender": "@ryandelgrosso:matrix.org", "state_key": "@ryandelgrosso:matrix.org", "type": "m.room.member", "unsigned": { "age": 6543433771 } }, { "content": { "avatar_url": "mxc://hackerspace.be/zPxEIFWMUBFWqFiggKvGCWdf", "displayname": "analprolapse", "membership": "join" }, "event_id": "$15075875204094QXcje:hackerspace.be", "membership": "join", "origin_server_ts": 1507587520056, "sender": "@friedkiwi:hackerspace.be", "state_key": "@friedkiwi:hackerspace.be", "type": "m.room.member", "unsigned": { "age": 3080432622 } }, { "content": { "membership": "leave" }, "event_id": "$14956631932025063Dvkew:matrix.org", "membership": "leave", "origin_server_ts": 1495663193692, "sender": "@freenode_kang00:matrix.org", "state_key": "@freenode_kang00:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004758986, "replaces_state": "$1472156847285843xrXbv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1460561999142280wyVyq:matrix.org", "membership": "leave", "origin_server_ts": 1460561999828, "sender": "@ogarcia:matrix.org", "state_key": "@ogarcia:matrix.org", "type": "m.room.member", "unsigned": { "age": 50105952850, "replaces_state": "$1460561811141938qHKbg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Heimo", "membership": "join" }, "event_id": "$15016710162GgBww:x18.id4net.de", "membership": "join", "origin_server_ts": 1501671016980, "sender": "@h.muenchhoff:x18.id4net.de", "state_key": "@h.muenchhoff:x18.id4net.de", "type": "m.room.member", "unsigned": { "age": 8996935698 } }, { "content": { "avatar_url": null, "displayname": "trisimix", "membership": "join" }, "event_id": "$148969807826KgVER:trisimix.tk", "origin_server_ts": 1489698077703, "sender": "@trisimix:trisimix.tk", "state_key": "@trisimix:trisimix.tk", "type": "m.room.member", "unsigned": { "age": 547 } }, { "content": { "avatar_url": "mxc://matrix.org/VnyXvCOKVJuaqvQInZviMpnT", "displayname": "Cadey (m.o)", "membership": "join" }, "event_id": "$1489205478684778XoPRB:matrix.org", "membership": "join", "origin_server_ts": 1489205478472, "sender": "@Xena:matrix.org", "state_key": "@Xena:matrix.org", "type": "m.room.member", "unsigned": { "age": 21462474206, "replaces_state": "$1489161859345770yXxjS:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14961472894045275dFJEM:matrix.org", "membership": "leave", "origin_server_ts": 1496147289370, "sender": "@offlinenik1:matrix.org", "state_key": "@offlinenik1:matrix.org", "type": "m.room.member", "unsigned": { "age": 14520663308, "replaces_state": "$1492018631159979RYNJa:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "pooja.goyal", "membership": "join" }, "event_id": "$15003783121559028LrUTx:matrix.org", "membership": "join", "origin_server_ts": 1500378312794, "sender": "@pooja.goyal:matrix.org", "state_key": "@pooja.goyal:matrix.org", "type": "m.room.member", "unsigned": { "age": 10289639884 } }, { "content": { "avatar_url": "mxc://matrix.org/YTZMYtZCJzWxGhVlhQqTpSMz", "displayname": "sigmawarrior", "membership": "join" }, "event_id": "$1485372464217065JpFrz:matrix.org", "membership": "join", "origin_server_ts": 1485372464669, "sender": "@sigmawarrior:matrix.org", "state_key": "@sigmawarrior:matrix.org", "type": "m.room.member", "unsigned": { "age": 25295488009 } }, { "content": { "avatar_url": "mxc://oob.systems/TQlSEOabSAtWxFPMfIUlVhlS", "displayname": "Torrie Fischer", "membership": "join" }, "event_id": "$1454526229114cWVbv:oob.systems", "origin_server_ts": 1454526229285, "sender": "@tdfischer:oob.systems", "state_key": "@tdfischer:oob.systems", "type": "m.room.member", "unsigned": { "age": 56141723393, "replaces_state": "$144977262330wGJiz:oob.systems" } }, { "content": { "membership": "leave" }, "event_id": "$150314761948vSvEp:matrix.molinkx.com", "membership": "leave", "origin_server_ts": 1503147619046, "sender": "@douglas:matrix.molinkx.com", "state_key": "@douglas:matrix.molinkx.com", "type": "m.room.member", "unsigned": { "age": 7520333632, "prev_content": { "avatar_url": "mxc://matrix.molinkx.com/VsVmRPEQyPTzCasWYUuTaCCF", "displayname": "Douglas", "membership": "join" }, "prev_sender": "@douglas:matrix.molinkx.com", "replaces_state": "$14947828363008TdTHT:matrix.molinkx.com" } }, { "content": { "avatar_url": "mxc://matrix.org/SuZRAZXstFKhroOEkwJRLJgI", "displayname": "axx (old account)", "membership": "join" }, "event_id": "$15096191863585654SnUvL:matrix.org", "membership": "join", "origin_server_ts": 1509619186939, "sender": "@axx:matrix.org", "state_key": "@axx:matrix.org", "type": "m.room.member", "unsigned": { "age": 1048765739, "replaces_state": "$15030744712616981MsUxm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1481572164752964VvtDk:matrix.org", "membership": "leave", "origin_server_ts": 1481572164137, "sender": "@Christian:matrix.org", "state_key": "@Christian:matrix.org", "type": "m.room.member", "unsigned": { "age": 29095788541, "replaces_state": "$14673839492357974hQKaw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Talle-matrix", "membership": "join" }, "event_id": "$150659285650785jKIdi:matrix.org", "membership": "join", "origin_server_ts": 1506592856123, "sender": "@talle:matrix.org", "state_key": "@talle:matrix.org", "type": "m.room.member", "unsigned": { "age": 4075096555, "replaces_state": "$14670194991661730gaybJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15048873714630173usAFv:matrix.org", "membership": "leave", "origin_server_ts": 1504887371152, "sender": "@ajb:matrix.org", "state_key": "@ajb:matrix.org", "type": "m.room.member", "unsigned": { "age": 5780581526, "replaces_state": "$1465567932160453WFmXJ:matrix.org" } }, { "content": { "avatar_url": "mxc://agr.social/saVBePHoulgszrnRGNIBdeQx", "displayname": "Agiri", "membership": "join" }, "event_id": "$15102674524425lJzml:agr.social", "membership": "join", "origin_server_ts": 1510267452644, "sender": "@agiri:agr.social", "state_key": "@agiri:agr.social", "type": "m.room.member", "unsigned": { "age": 400500034, "replaces_state": "$15093417847aKalT:agr.social" } }, { "content": { "avatar_url": "mxc://matrix.org/bwBzMGwmEVRcOOTezLLsbbAU#auto", "displayname": "Aaron", "membership": "join" }, "event_id": "$1450380159118483dxNKu:matrix.org", "membership": "join", "origin_server_ts": 1450380159384, "sender": "@aarodav1:matrix.org", "state_key": "@aarodav1:matrix.org", "type": "m.room.member", "unsigned": { "age": 60287793294 } }, { "content": { "avatar_url": "mxc://matrix.org/jIKXkWBflQTBflFtEEkJOUkB", "displayname": "martinklepsch", "membership": "join" }, "event_id": "$150556576355805Mulqg:matrix.org", "membership": "join", "origin_server_ts": 1505565763856, "sender": "@martinklepsch:matrix.org", "state_key": "@martinklepsch:matrix.org", "type": "m.room.member", "unsigned": { "age": 5102188822, "replaces_state": "$1480103429431388yfaUN:matrix.org" } }, { "age_ts": 1473471050774, "content": { "avatar_url": null, "displayname": "luke", "membership": "join" }, "event_id": "$147347106318npmAn:ldbco.de", "origin_server_ts": 1473471049574, "sender": "@luke:ldbco.de", "state_key": "@luke:ldbco.de", "type": "m.room.member", "unsigned": { "age": 51 } }, { "content": { "avatar_url": "mxc://matrix.org/mGdQBbushAwhKsZJFEDCcOye", "displayname": "Ralesk", "membership": "join" }, "event_id": "$14561580564431nRash:matrix.org", "membership": "join", "origin_server_ts": 1456158056593, "sender": "@ralesk:matrix.org", "state_key": "@ralesk:matrix.org", "type": "m.room.member", "unsigned": { "age": 54509896085 } }, { "content": { "avatar_url": "mxc://matrix.org/QtjAzMVLkrDlrDbjuzIldqTF#auto", "displayname": "saltlet", "membership": "join" }, "event_id": "$1448321863104323bOqLN:matrix.org", "membership": "join", "origin_server_ts": 1448321863249, "sender": "@saltlet:matrix.org", "state_key": "@saltlet:matrix.org", "type": "m.room.member", "unsigned": { "age": 62346089429 } }, { "content": { "membership": "leave" }, "event_id": "$15007783311650290IkfDy:matrix.org", "membership": "leave", "origin_server_ts": 1500778331082, "sender": "@kfatehi:matrix.org", "state_key": "@kfatehi:matrix.org", "type": "m.room.member", "unsigned": { "age": 9889621596, "replaces_state": "$1481416224166126QsCRX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TlqFbeDsgZGUGUQmKVglsZzr", "displayname": "John Woolf", "membership": "join" }, "event_id": "$1446579494482607ucTRH:matrix.org", "origin_server_ts": 1446579494309, "sender": "@john.woolf:matrix.org", "state_key": "@john.woolf:matrix.org", "type": "m.room.member", "unsigned": { "age": 64088458369, "replaces_state": "$1418062887205eoVtc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631862024908yEIYY:matrix.org", "membership": "leave", "origin_server_ts": 1495663186505, "sender": "@freenode_jfred:matrix.org", "state_key": "@freenode_jfred:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004766173, "replaces_state": "$1443322023210524sSJaR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631942025071tRYBb:matrix.org", "membership": "leave", "origin_server_ts": 1495663194056, "sender": "@freenode_AlienCQ:matrix.org", "state_key": "@freenode_AlienCQ:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004758622, "replaces_state": "$14375770606WHmcN:matrix.org" } }, { "content": { "avatar_url": "mxc://stoo.org/KxGfInJyQtvrTmqGIoOxtUDf", "displayname": "timclassic", "membership": "join" }, "event_id": "$1474683594803yfncs:stoo.org", "origin_server_ts": 1474683318670, "sender": "@tim:stoo.org", "state_key": "@tim:stoo.org", "type": "m.room.member", "unsigned": { "age": 10 } }, { "age_ts": 1507162812908, "content": { "avatar_url": "mxc://stratum0.org/dtRrHQSTDVtUfPnMeKJDVhQa", "displayname": "Valodim", "membership": "join" }, "event_id": "$1507162812414zAwsF:stratum0.org", "origin_server_ts": 1507162812078, "sender": "@Valodim:stratum0.org", "state_key": "@Valodim:stratum0.org", "type": "m.room.member", "unsigned": { "age": 22, "replaces_state": "$1484060912966nxtlb:stratum0.org" } }, { "content": { "membership": "leave" }, "event_id": "$150982471037zTPNZ:matrix.ahouts.com", "membership": "leave", "origin_server_ts": 1509824710550, "sender": "@ahouts:matrix.ahouts.com", "state_key": "@ahouts:matrix.ahouts.com", "type": "m.room.member", "unsigned": { "age": 843242128, "prev_content": { "avatar_url": null, "displayname": "Andrew Houts", "membership": "join" }, "prev_sender": "@ahouts:matrix.ahouts.com", "replaces_state": "$150982446436bAcXX:matrix.ahouts.com" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14672036252005780ErtBc:matrix.org", "membership": "join", "origin_server_ts": 1467203625367, "sender": "@robin:matrix.org", "state_key": "@robin:matrix.org", "type": "m.room.member", "unsigned": { "age": 43464327311 } }, { "content": { "avatar_url": null, "displayname": "Guest 71463", "kind": "guest", "membership": "join" }, "event_id": "$1478872227311075PwnhI:matrix.org", "membership": "join", "origin_server_ts": 1478872227054, "sender": "@71463:matrix.org", "state_key": "@71463:matrix.org", "type": "m.room.member", "unsigned": { "age": 31795725624 } }, { "content": { "avatar_url": "mxc://matrix.org/VOCXveydAbdDcubQwTEvaLgh", "displayname": "bookworm", "membership": "join" }, "event_id": "$14996681202114305ZoaTu:matrix.org", "membership": "join", "origin_server_ts": 1499668120287, "sender": "@bookworm:matrix.org", "state_key": "@bookworm:matrix.org", "type": "m.room.member", "unsigned": { "age": 10999832391 } }, { "content": { "avatar_url": null, "displayname": "andrewmovidiam", "membership": "join" }, "event_id": "$1416420992944OPvTv:matrix.org", "membership": "join", "origin_server_ts": 1413672797556, "sender": "@andrew:matrix.org", "state_key": "@andrew:matrix.org", "stream_ordering": 15789, "type": "m.room.member", "unsigned": { "age": 94246959734 } }, { "content": { "membership": "leave" }, "event_id": "$14956632152025584kMEtz:matrix.org", "membership": "leave", "origin_server_ts": 1495663215542, "sender": "@freenode_marcom_:matrix.org", "state_key": "@freenode_marcom_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004737136, "replaces_state": "$14767098761584540VRqhU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1469730438426876jbpFv:matrix.org", "membership": "leave", "origin_server_ts": 1469730438043, "sender": "@dlevin:matrix.org", "state_key": "@dlevin:matrix.org", "type": "m.room.member", "unsigned": { "age": 40937514635, "replaces_state": "$1469730356426690IISMb:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/cmPTldrCcvkXzZYnRuweNTwj", "displayname": "Rob", "membership": "join" }, "event_id": "$1506680386428355aqvXB:matrix.org", "membership": "join", "origin_server_ts": 1506680386455, "sender": "@robswain:matrix.org", "state_key": "@robswain:matrix.org", "type": "m.room.member", "unsigned": { "age": 3987566223, "replaces_state": "$1506680211426252RKbGw:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QgWOcjusHvwQpJfAHzAiTVOx", "displayname": "Vez", "membership": "join" }, "event_id": "$1450744414313184QCABc:matrix.org", "origin_server_ts": 1450744414723, "sender": "@vezquex:matrix.org", "state_key": "@vezquex:matrix.org", "type": "m.room.member", "unsigned": { "age": 59923537955, "replaces_state": "$1450744390313152GZSql:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.rkm.id.au/fQJvwAisQDIEKGfkwWNrrAcF", "displayname": "eqyiel", "membership": "join" }, "event_id": "$1477191026167uggUe:matrix.rkm.id.au", "membership": "join", "origin_server_ts": 1477191026904, "sender": "@eqyiel:matrix.rkm.id.au", "state_key": "@eqyiel:matrix.rkm.id.au", "type": "m.room.member", "unsigned": { "age": 33476925774, "replaces_state": "$147705226095NLNjM:matrix.rkm.id.au" } }, { "age_ts": 1470722324399, "content": { "avatar_url": "mxc://intelfx.name/dwfeuyvPSsHFkrpmsvCrwesf", "displayname": "Ivan Shapovalov", "membership": "join" }, "event_id": "$14707223233oJKSY:intelfx.name", "origin_server_ts": 1470722323582, "sender": "@intelfx:intelfx.name", "state_key": "@intelfx:intelfx.name", "type": "m.room.member", "unsigned": { "age": 29, "prev_content": { "membership": "leave" }, "prev_sender": "@intelfx:intelfx.name", "replaces_state": "$147033518219nUBZw:intelfx.name" } }, { "content": { "avatar_url": "mxc://hispagatos.org/LfxQrDgxowHqlyCXmjHONBPA", "displayname": "petruknisme", "membership": "join" }, "event_id": "$14991250212879zcvMJ:hispagatos.org", "membership": "join", "origin_server_ts": 1499125021622, "sender": "@petruknisme:hispagatos.org", "state_key": "@petruknisme:hispagatos.org", "type": "m.room.member", "unsigned": { "age": 11542931056, "prev_content": { "avatar_url": "mxc://hispagatos.org/LfxQrDgxowHqlyCXmjHONBPA", "displayname": "petruknisme", "membership": "invite" }, "prev_sender": "@rek2:hispagatos.org", "replaces_state": "$14991250102878JZSbV:hispagatos.org" } }, { "content": { "membership": "leave" }, "event_id": "$14966248504026687oEVfL:matrix.org", "membership": "leave", "origin_server_ts": 1496624850978, "sender": "@freenode_Sipster_away:matrix.org", "state_key": "@freenode_Sipster_away:matrix.org", "type": "m.room.member", "unsigned": { "age": 14043101700, "replaces_state": "$1495529241541169KEIdt:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14962155494807638RXDuv:matrix.org", "membership": "leave", "origin_server_ts": 1496215549289, "sender": "@Ocker:matrix.org", "state_key": "@Ocker:matrix.org", "type": "m.room.member", "unsigned": { "age": 14452403389, "replaces_state": "$14962154934807204NILJS:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15071083714173421pFtMi:matrix.org", "membership": "leave", "origin_server_ts": 1507108371551, "sender": "@freenode_CreateChange2:matrix.org", "state_key": "@freenode_CreateChange2:matrix.org", "type": "m.room.member", "unsigned": { "age": 3559581127, "replaces_state": "$15070979674064308rDJtb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15005546863742774yCpla:matrix.org", "membership": "leave", "origin_server_ts": 1500554686991, "sender": "@freenode_frederfred:matrix.org", "state_key": "@freenode_frederfred:matrix.org", "type": "m.room.member", "unsigned": { "age": 10113265687, "replaces_state": "$15004979043108368eyjry:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1464207370166935rpeJy:matrix.org", "membership": "join", "origin_server_ts": 1464207370447, "sender": "@chrisballinger:matrix.org", "state_key": "@chrisballinger:matrix.org", "type": "m.room.member", "unsigned": { "age": 46460582231 } }, { "content": { "avatar_url": null, "displayname": "SWAT (IRC)", "membership": "join" }, "event_id": "$15036439013640135HEiJn:matrix.org", "membership": "join", "origin_server_ts": 1503643901567, "sender": "@freenode_SWAT:matrix.org", "state_key": "@freenode_SWAT:matrix.org", "type": "m.room.member", "unsigned": { "age": 7024051111 } }, { "content": { "avatar_url": "mxc://charity.az/vQqCexIaJMDpMWtEWDLMriZM", "displayname": "Mistake", "membership": "join" }, "event_id": "$150756985237TvteD:charity.az", "origin_server_ts": 1507569851916, "sender": "@admin:charity.az", "state_key": "@admin:charity.az", "type": "m.room.member", "unsigned": { "age": 118 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1469445575109711lKcrU:matrix.org", "membership": "join", "origin_server_ts": 1469445575811, "sender": "@hemantdangi11:matrix.org", "state_key": "@hemantdangi11:matrix.org", "type": "m.room.member", "unsigned": { "age": 41222376867 } }, { "content": { "avatar_url": "mxc://matrix.org/FEExZbxVknnzqjUsXPotaMRO#auto", "displayname": "lol", "membership": "join" }, "event_id": "$14279253385414YNxlx:matrix.org", "membership": "join", "origin_server_ts": 1427925338445, "sender": "@lol:matrix.org", "state_key": "@lol:matrix.org", "type": "m.room.member", "unsigned": { "age": 82742614233 } }, { "content": { "avatar_url": "mxc://matrix.org/sSmXnnCYjYgHZVzvaYKPTGgt#auto", "displayname": null, "membership": "join" }, "event_id": "$1446498577420492OmVVe:matrix.org", "origin_server_ts": 1446498577483, "sender": "@samsam72:matrix.org", "state_key": "@samsam72:matrix.org", "type": "m.room.member", "unsigned": { "age": 64169375195 } }, { "content": { "membership": "leave" }, "event_id": "$15096585007pgXZj:venev.name", "membership": "leave", "origin_server_ts": 1509658500082, "sender": "@hristo:venev.name", "state_key": "@hristo:venev.name", "type": "m.room.member", "unsigned": { "age": 1009452596, "prev_content": { "avatar_url": "mxc://venev.name/IJpdoTTzvfXHGxVtzdjFlOVF", "displayname": "Hristo Venev", "membership": "join" }, "prev_sender": "@hristo:venev.name", "replaces_state": "$15096583804VxbGx:venev.name" } }, { "content": { "membership": "leave" }, "event_id": "$14652935966686nGwDA:matrix.org", "membership": "leave", "origin_server_ts": 1465293596471, "sender": "@oyajiru:matrix.org", "state_key": "@oyajiru:matrix.org", "type": "m.room.member", "unsigned": { "age": 45374356207, "replaces_state": "$14652935646630Lzhyj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/gzNdMixEBdqsXWXEkrRiTXIl", "displayname": "Eric", "membership": "join" }, "event_id": "$147335647164889bBVeP:matrix.org", "membership": "join", "origin_server_ts": 1473356471905, "sender": "@hash:matrix.org", "state_key": "@hash:matrix.org", "type": "m.room.member", "unsigned": { "age": 37311480773, "replaces_state": "$147335644264717lMvqa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148944755721ygpuO:eridian.systems", "membership": "leave", "origin_server_ts": 1489447557567, "sender": "@viktor:eridian.systems", "state_key": "@viktor:eridian.systems", "type": "m.room.member", "unsigned": { "age": 11482869, "replaces_state": "$148944738720CBaym:eridian.systems" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15084929961315757uXraq:matrix.org", "membership": "join", "origin_server_ts": 1508492996467, "sender": "@Jeferson.souza:matrix.org", "state_key": "@Jeferson.souza:matrix.org", "type": "m.room.member", "unsigned": { "age": 2174956211 } }, { "content": { "avatar_url": "mxc://matrix.org/UOeVqdgdjTPSqymYkJFkyolX", "displayname": "Alex Gleason", "membership": "join" }, "event_id": "$14966034233728260bbuhs:matrix.org", "membership": "join", "origin_server_ts": 1496603423578, "sender": "@alexgleason:matrix.org", "state_key": "@alexgleason:matrix.org", "type": "m.room.member", "unsigned": { "age": 14064529100, "replaces_state": "$14876052291470004KpyeA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.pztrn.name/BrBtJGqXQrYMvIjfVCQssWMy", "displayname": "pztrn", "membership": "join" }, "event_id": "$14440779097HCAup:matrix.pztrn.name", "origin_server_ts": 1444077909930, "sender": "@pztrn:matrix.pztrn.name", "state_key": "@pztrn:matrix.pztrn.name", "type": "m.room.member", "unsigned": { "age": 66590042748, "replaces_state": "$1444076921100AkQTc:matrix.pztrn.name" } }, { "content": { "membership": "leave" }, "event_id": "$1474472741278140NWpyK:matrix.org", "membership": "leave", "origin_server_ts": 1474472741181, "sender": "@wrl:matrix.org", "state_key": "@wrl:matrix.org", "type": "m.room.member", "unsigned": { "age": 36195211497, "replaces_state": "$1465553841134983EluEf:matrix.org" } }, { "content": { "membership": "ban" }, "event_id": "$148822309176238eYpip:matrix.org", "membership": "ban", "origin_server_ts": 1488223091179, "sender": "@matthew:matrix.org", "state_key": "@freenode_chatter29:matrix.org", "type": "m.room.member", "unsigned": { "age": 22444861499, "replaces_state": "$148822287774413mfgWG:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ErSGBHylEJsqaUmYdhyNfiFc", "displayname": "sudoreboot", "membership": "join" }, "event_id": "$15047948253458899JWCdh:matrix.org", "membership": "join", "origin_server_ts": 1504794825739, "sender": "@sudoreboot:matrix.org", "state_key": "@sudoreboot:matrix.org", "type": "m.room.member", "unsigned": { "age": 5873126939, "replaces_state": "$1492808052436984KdQUy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HEqyrbbsqueOctLBpMVGZNgB", "displayname": "jballanc", "membership": "join" }, "event_id": "$1474199953388951zDUQp:matrix.org", "membership": "join", "origin_server_ts": 1474199953295, "sender": "@jballanc:matrix.org", "state_key": "@jballanc:matrix.org", "type": "m.room.member", "unsigned": { "age": 36467999383, "replaces_state": "$1474199081387492StOvq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143757317816570CynMA:matrix.org", "origin_server_ts": 1437573178765, "sender": "@NeonXP:matrix.org", "state_key": "@NeonXP:matrix.org", "type": "m.room.member", "unsigned": { "age": 73094773913, "replaces_state": "$143756384113352eBEbk:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JqyOLKioUaDTdelQUDsaOuyE", "displayname": "org-rubo78", "membership": "join" }, "event_id": "$14689566891355718cgZKs:matrix.org", "membership": "join", "origin_server_ts": 1468956689528, "sender": "@rubo78:matrix.org", "state_key": "@rubo78:matrix.org", "type": "m.room.member", "unsigned": { "age": 41711263150 } }, { "content": { "membership": "leave" }, "event_id": "$1497826770162PAeyb:banter.city", "membership": "leave", "origin_server_ts": 1497826770988, "sender": "@gitgud:banter.city", "state_key": "@gitgud:banter.city", "type": "m.room.member", "unsigned": { "age": 12841181690, "replaces_state": "$1497825153134gkIsn:banter.city" } }, { "content": { "avatar_url": "mxc://matrix.org/mXRTivUDZawrFlPqckrqulCS", "displayname": "mboo2005", "membership": "join" }, "event_id": "$1458529522146583qapEy:matrix.org", "membership": "join", "origin_server_ts": 1458529522039, "sender": "@mboo2005:matrix.org", "state_key": "@mboo2005:matrix.org", "type": "m.room.member", "unsigned": { "age": 52138430639, "replaces_state": "$1458528821146362mckKw:matrix.org" } }, { "content": { "avatar_url": "mxc://monkeystew.net/ROUZXmLGlbIYqrpqmXlUIYAy", "displayname": "Morgan McMillian (thrrgilag)", "membership": "join" }, "event_id": "$15069534224122FjRvV:monkeystew.net", "membership": "join", "origin_server_ts": 1506953422235, "sender": "@thrrgilag:monkeystew.net", "state_key": "@thrrgilag:monkeystew.net", "type": "m.room.member", "unsigned": { "age": 3714530443, "prev_content": { "avatar_url": "mxc://monkeystew.net/RmxwBumTvtBlFRPKLQovOwMq", "displayname": "Morgan McMillian (thrrgilag)", "membership": "join" }, "prev_sender": "@thrrgilag:monkeystew.net", "replaces_state": "$15060086905896yZZbE:monkeystew.net" } }, { "content": { "membership": "leave" }, "event_id": "$14780374741166195GGOWm:matrix.org", "membership": "leave", "origin_server_ts": 1478037474107, "sender": "@hendrik:matrix.org", "state_key": "@hendrik:matrix.org", "type": "m.room.member", "unsigned": { "age": 32630478571, "replaces_state": "$1468421183355521LUiwu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Slack Integration", "membership": "join" }, "event_id": "$14752438381202194mqvYS:matrix.org", "membership": "join", "origin_server_ts": 1475243838813, "sender": "@slackbot:matrix.org", "state_key": "@slackbot:matrix.org", "type": "m.room.member", "unsigned": { "age": 35424113865, "replaces_state": "$14743766093677aXtLG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631612024370RkENI:matrix.org", "membership": "leave", "origin_server_ts": 1495663161162, "sender": "@freenode_astronavt:matrix.org", "state_key": "@freenode_astronavt:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004791516, "replaces_state": "$1489542030517450mgHpr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Mitchk", "membership": "join" }, "event_id": "$14990628612171919RBfXf:matrix.org", "membership": "join", "origin_server_ts": 1499062861174, "sender": "@mitchk:matrix.org", "state_key": "@mitchk:matrix.org", "type": "m.room.member", "unsigned": { "age": 11605091504 } }, { "content": { "avatar_url": "mxc://matrix.org/dytWpFRZVNGeYuXEzoyBJKwk#auto", "displayname": null, "membership": "join" }, "event_id": "$1445937816230187Vevpn:matrix.org", "origin_server_ts": 1445937816790, "sender": "@snehpahilwani:matrix.org", "state_key": "@snehpahilwani:matrix.org", "type": "m.room.member", "unsigned": { "age": 64730135888 } }, { "content": { "membership": "leave" }, "event_id": "$14906161435dWIIS:matrix.vgorcum.com", "membership": "leave", "origin_server_ts": 1490616143253, "sender": "@mathijs:matrix.vgorcum.com", "state_key": "@mathijs:matrix.vgorcum.com", "type": "m.room.member", "unsigned": { "age": 20051809425, "replaces_state": "$14906157394KwSpK:matrix.vgorcum.com" } }, { "content": { "avatar_url": null, "displayname": "mightyhood", "membership": "join" }, "event_id": "$14739471667121rPZNq:matrix.org", "membership": "join", "origin_server_ts": 1473947166270, "sender": "@mightyhood:matrix.org", "state_key": "@mightyhood:matrix.org", "type": "m.room.member", "unsigned": { "age": 36720786408 } }, { "content": { "avatar_url": null, "displayname": "divya.goel", "membership": "join" }, "event_id": "$15003799201578679Fbvcb:matrix.org", "membership": "join", "origin_server_ts": 1500379920822, "sender": "@divya.goel:matrix.org", "state_key": "@divya.goel:matrix.org", "type": "m.room.member", "unsigned": { "age": 10288031856 } }, { "content": { "membership": "leave" }, "event_id": "$14956631812024809Qvxth:matrix.org", "membership": "leave", "origin_server_ts": 1495663181540, "sender": "@freenode_Shell:matrix.org", "state_key": "@freenode_Shell:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004771138, "replaces_state": "$147345188476233GsIoH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Gently Blown Kazoo", "membership": "join" }, "event_id": "$1496766772251014Tcqvx:matrix.org", "membership": "join", "origin_server_ts": 1496766772789, "sender": "@gently_blown_kazoo:matrix.org", "state_key": "@gently_blown_kazoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 13901179889 } }, { "content": { "membership": "leave" }, "event_id": "$14956632122025524lRApR:matrix.org", "membership": "leave", "origin_server_ts": 1495663212868, "sender": "@freenode_Mjark:matrix.org", "state_key": "@freenode_Mjark:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004739810, "replaces_state": "$143872392230249zTfcl:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "pick", "membership": "join" }, "event_id": "$15038468591932157JuLBB:matrix.org", "membership": "join", "origin_server_ts": 1503846859907, "sender": "@Mr.Tomato:matrix.org", "state_key": "@Mr.Tomato:matrix.org", "type": "m.room.member", "unsigned": { "age": 6821092771, "replaces_state": "$15038468401931917HtORH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/esWMnygJDTzMxpNUZxyTWSjG", "displayname": "carlos22", "membership": "join" }, "event_id": "$14847340572967762RFVaR:matrix.org", "membership": "join", "origin_server_ts": 1484734057776, "sender": "@carlos22b:matrix.org", "state_key": "@carlos22b:matrix.org", "type": "m.room.member", "unsigned": { "age": 25933894902 } }, { "content": { "avatar_url": "mxc://matrix.org/EIbiWTTrRdngSWNbkCjirmmd", "displayname": "jtree", "membership": "join" }, "event_id": "$15054070956115920knAwg:matrix.org", "membership": "join", "origin_server_ts": 1505407095788, "sender": "@jtree:matrix.org", "state_key": "@jtree:matrix.org", "type": "m.room.member", "unsigned": { "age": 5260856890 } }, { "age_ts": 1483038767935, "content": { "avatar_url": "mxc://disroot.org/XXliOiPxgcOCwvHYDTxMefYx", "displayname": "muppeth", "membership": "join" }, "event_id": "$14830387671haJEg:disroot.org", "origin_server_ts": 1483038767583, "sender": "@muppeth:disroot.org", "state_key": "@muppeth:disroot.org", "type": "m.room.member", "unsigned": { "age": 16, "replaces_state": "$148303852518fLOze:disroot.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 254638", "kind": "guest", "membership": "join" }, "event_id": "$14979607893385135vwlqD:matrix.org", "membership": "join", "origin_server_ts": 1497960789488, "sender": "@254638:matrix.org", "state_key": "@254638:matrix.org", "type": "m.room.member", "unsigned": { "age": 12707163190 } }, { "content": { "membership": "leave" }, "event_id": "$144421085939601MTHmw:matrix.org", "origin_server_ts": 1444210859850, "sender": "@rgh:matrix.org", "state_key": "@rgh:matrix.org", "type": "m.room.member", "unsigned": { "age": 66457092828, "replaces_state": "$143960794628731bVxmU:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YgHvXShjMQFrQruzhVClltGP", "displayname": "dustin", "membership": "join" }, "event_id": "$1510305808601782bXwuT:matrix.org", "membership": "join", "origin_server_ts": 1510305808643, "sender": "@electricemu:matrix.org", "state_key": "@electricemu:matrix.org", "type": "m.room.member", "unsigned": { "age": 362144035 } }, { "content": { "membership": "leave" }, "event_id": "$15080708324zDLdS:im.nostrodomo.tk", "membership": "leave", "origin_server_ts": 1508070832653, "sender": "@tokodomo:im.nostrodomo.tk", "state_key": "@tokodomo:im.nostrodomo.tk", "type": "m.room.member", "unsigned": { "age": 2597120025, "prev_content": { "avatar_url": "mxc://im.nostrodomo.tk/GSAViXGWDIWsaJcEgJNRWQdd", "displayname": "Tokodomo", "membership": "join" }, "prev_sender": "@tokodomo:im.nostrodomo.tk", "replaces_state": "$149203034026EZoFc:im.nostrodomo.tk" } }, { "content": { "membership": "leave" }, "event_id": "$150056170311221EKyQD:agetic.gob.bo", "membership": "leave", "origin_server_ts": 1500561703913, "sender": "@cremuzzi:agetic.gob.bo", "state_key": "@cremuzzi:agetic.gob.bo", "type": "m.room.member", "unsigned": { "age": 10106248765, "prev_content": { "avatar_url": "mxc://agetic.gob.bo/vELQUirxqvUbzavGgxDnriMm", "displayname": "Remuzzi", "membership": "join" }, "prev_sender": "@cremuzzi:agetic.gob.bo", "replaces_state": "$150055893511031xRVrt:agetic.gob.bo" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612545034BrxAc:matrix.org", "origin_server_ts": 1429261254754, "sender": "@kegan:matrix.org", "state_key": "@irc_AlienCQ:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406697924, "replaces_state": "$14276366661098exEmm:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "codefoo", "membership": "join" }, "event_id": "$142351529594GzMQP:matrix.org", "membership": "join", "origin_server_ts": 1423515295876, "sender": "@codefoo:matrix.org", "state_key": "@codefoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 87152656802 } }, { "content": { "avatar_url": "mxc://apexo.de/ciuRwpWGIswukhMUakNgHHNj#auto", "displayname": "lx", "membership": "join" }, "event_id": "$14248783112mUiWL:apexo.de", "origin_server_ts": 1424878311517, "sender": "@lx:apexo.de", "state_key": "@lx:apexo.de", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14675650902616845hojNn:matrix.org", "membership": "join", "origin_server_ts": 1467565090397, "sender": "@nothisrat:matrix.org", "state_key": "@nothisrat:matrix.org", "type": "m.room.member", "unsigned": { "age": 43102862281 } }, { "content": { "avatar_url": "mxc://matrix.9net.org/grkZOpVtJhwSFvrepdIbHEbU", "displayname": "Stary", "membership": "join" }, "event_id": "$148071101560896OZLOQ:matrix.9net.org", "origin_server_ts": 1480711015012, "sender": "@stary:matrix.9net.org", "state_key": "@stary:matrix.9net.org", "type": "m.room.member", "unsigned": { "age": 39 } }, { "content": { "avatar_url": null, "displayname": "Daniel", "membership": "join" }, "event_id": "$15098302017aQhyc:bandsal.at", "membership": "join", "origin_server_ts": 1509830201890, "sender": "@al:bandsal.at", "state_key": "@al:bandsal.at", "type": "m.room.member", "unsigned": { "age": 837750788, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@al:bandsal.at", "replaces_state": "$15098296481SPVyu:bandsal.at" } }, { "content": { "avatar_url": "mxc://vurpo.fi/rAVYYdwTozdZslBFduliksPR", "displayname": "vurpo", "membership": "join" }, "event_id": "$1509487233657GgoIV:vurpo.fi", "membership": "join", "origin_server_ts": 1509487233936, "sender": "@vurpo:vurpo.fi", "state_key": "@vurpo:vurpo.fi", "type": "m.room.member", "unsigned": { "age": 1180718742, "replaces_state": "$1508011788144UmotS:vurpo.fi" } }, { "content": { "avatar_url": "mxc://matrix.org/BwKRxVfqGZymhNOLfTybdcrO", "displayname": "lmorchard", "membership": "join" }, "event_id": "$14855690021436018xJwut:matrix.org", "membership": "join", "origin_server_ts": 1485569002267, "sender": "@lmorchard:matrix.org", "state_key": "@lmorchard:matrix.org", "type": "m.room.member", "unsigned": { "age": 25098950411, "replaces_state": "$14855688811435424ENRPR:matrix.org" } }, { "content": { "avatar_url": "mxc://sw1v.org/rARZrbDMGnNQOKKWZtCVxusq", "displayname": "richvdh", "membership": "join" }, "event_id": "$14786008191260OnuiB:sw1v.org", "membership": "join", "origin_server_ts": 1478600819020, "sender": "@richvdh:sw1v.org", "state_key": "@richvdh:sw1v.org", "type": "m.room.member", "unsigned": { "age": 32067133658, "replaces_state": "$14785992601139DrFUc:sw1v.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FDRDnYZeeolSRKSwwkBdifIG", "displayname": "bnvk", "membership": "join" }, "event_id": "$15083341983440636ePJPd:matrix.org", "membership": "join", "origin_server_ts": 1508334198592, "sender": "@bnvk:matrix.org", "state_key": "@bnvk:matrix.org", "type": "m.room.member", "unsigned": { "age": 2333754086, "replaces_state": "$15042864053698561AHUwT:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145772320262770mvlwE:matrix.org", "membership": "leave", "origin_server_ts": 1457723202082, "sender": "@flootr3:matrix.org", "state_key": "@flootr3:matrix.org", "type": "m.room.member", "unsigned": { "age": 52944750596, "replaces_state": "$1457524292188030gjEcj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1497383451393696OVCeK:matrix.org", "membership": "leave", "origin_server_ts": 1497383451223, "sender": "@freenode_tribut:matrix.org", "state_key": "@freenode_tribut:matrix.org", "type": "m.room.member", "unsigned": { "age": 13284501455, "replaces_state": "$14963238521132687qqzCZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XQhNdnlamxxPzBlZWVKCITPJ", "displayname": "spacekitteh", "membership": "join" }, "event_id": "$1492500950361842hCnvs:matrix.org", "membership": "join", "origin_server_ts": 1492500950737, "sender": "@spacekitteh:matrix.org", "state_key": "@spacekitteh:matrix.org", "type": "m.room.member", "unsigned": { "age": 18167001941, "replaces_state": "$1492500715359578eDEoo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14957922791097218yDwyW:matrix.org", "membership": "leave", "origin_server_ts": 1495792279531, "sender": "@jaijszler:matrix.org", "state_key": "@jaijszler:matrix.org", "type": "m.room.member", "unsigned": { "age": 14875673147, "replaces_state": "$14948328531906645KgslE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15025656961849098akDGW:matrix.org", "membership": "leave", "origin_server_ts": 1502565696048, "sender": "@freenode_D33P-B00K:matrix.org", "state_key": "@freenode_D33P-B00K:matrix.org", "type": "m.room.member", "unsigned": { "age": 8102256630, "replaces_state": "$15025655261842159ffzpi:matrix.org" } }, { "content": { "guest_access": "can_join" }, "event_id": "$14592738759263DbCMb:matrix.org", "origin_server_ts": 1459273875107, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 51394077571, "replaces_state": "$145371612227WITrG:jki.re" } }, { "content": { "avatar_url": null, "displayname": "Alef Burzmali", "membership": "join" }, "event_id": "$1483466102986389GvOqR:matrix.org", "membership": "join", "origin_server_ts": 1483466102830, "sender": "@alefburzmali:matrix.org", "state_key": "@alefburzmali:matrix.org", "type": "m.room.member", "unsigned": { "age": 27201849848 } }, { "content": { "avatar_url": "mxc://matrix.org/oyXDGisqvIDOtZDXzuSuJtFd#auto", "displayname": null, "membership": "join" }, "event_id": "$14336266261720yOrGa:matrix.org", "origin_server_ts": 1433626626546, "sender": "@hifly:matrix.org", "state_key": "@hifly:matrix.org", "type": "m.room.member", "unsigned": { "age": 77041326132 } }, { "content": { "membership": "leave" }, "event_id": "$14273592111012MybxD:matrix.org", "origin_server_ts": 1427359211892, "sender": "@necronian:matrix.org", "state_key": "@necronian:matrix.org", "type": "m.room.member", "unsigned": { "age": 83308740786, "replaces_state": "$14273591061010PsYjy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.orly.cf/mzGgZrhVCgLezskWlLnWaPui", "displayname": "JakobM", "membership": "join" }, "event_id": "$1451255179217RJsNe:matrix.orly.cf", "origin_server_ts": 1451255179854, "sender": "@jakobm:matrix.orly.cf", "state_key": "@jakobm:matrix.orly.cf", "type": "m.room.member", "unsigned": { "age": 59412772824, "replaces_state": "$1451254931192XGxHQ:matrix.orly.cf" } }, { "content": { "avatar_url": "mxc://matrix.org/RAMgGaiizcOBAHQlWnsuqHPO", "displayname": "Bruno", "membership": "join" }, "event_id": "$1475073783532035PFbZj:matrix.org", "membership": "join", "origin_server_ts": 1475073783671, "sender": "@bbigras:matrix.org", "state_key": "@bbigras:matrix.org", "type": "m.room.member", "unsigned": { "age": 35594169007, "replaces_state": "$1475073752470ahLot:sw1v.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZnBnDzDPzGtpeiTNzMkIXjzK", "displayname": "Paul", "membership": "join" }, "event_id": "$15035178052098855SkzJI:matrix.org", "membership": "join", "origin_server_ts": 1503517805427, "sender": "@ptman:matrix.org", "state_key": "@ptman:matrix.org", "type": "m.room.member", "unsigned": { "age": 7150147251, "replaces_state": "$1475053151466299gRiCe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15062595453106547jFtXd:matrix.org", "membership": "join", "origin_server_ts": 1506259545226, "sender": "@sysysy:matrix.org", "state_key": "@sysysy:matrix.org", "type": "m.room.member", "unsigned": { "age": 4408407452 } }, { "content": { "avatar_url": "mxc://matrix.org/uyrNHZNYjvDMVrNxFfBXVwPL", "displayname": "jake", "membership": "join" }, "event_id": "$1452451821197547DxVLW:matrix.org", "origin_server_ts": 1452451821851, "sender": "@jake:matrix.org", "state_key": "@jake:matrix.org", "type": "m.room.member", "unsigned": { "age": 58216130827 } }, { "content": { "avatar_url": null, "displayname": "hiq", "membership": "join" }, "event_id": "$14846087762270880fUhzM:matrix.org", "membership": "join", "origin_server_ts": 1484608776741, "sender": "@hiq:matrix.org", "state_key": "@hiq:matrix.org", "type": "m.room.member", "unsigned": { "age": 26059175937 } }, { "content": { "avatar_url": "mxc://klen.site/jBZLNDvftVcDiQSSHSYiTYAI", "displayname": "alex", "membership": "join" }, "event_id": "$148341398186nvzuC:klen.site", "membership": "join", "origin_server_ts": 1483413981159, "sender": "@alex:klen.site", "state_key": "@alex:klen.site", "type": "m.room.member", "unsigned": { "age": 27253971519, "prev_content": { "avatar_url": "mxc://klen.site/xSaMMKOgSciGKXSdHQKMpnWy", "displayname": "alex", "membership": "join" }, "prev_sender": "@alex:klen.site", "replaces_state": "$148332933939iQmHd:klen.site" } }, { "content": { "avatar_url": "mxc://matrix.org/iZDEjaKBQEjgXoYVdWizfdvJ", "displayname": "souvikbhattacharyas", "membership": "join" }, "event_id": "$1462194050391150wyBxL:matrix.org", "membership": "join", "origin_server_ts": 1462194050828, "sender": "@souvikbhattacharyas:matrix.org", "state_key": "@souvikbhattacharyas:matrix.org", "type": "m.room.member", "unsigned": { "age": 48473901850, "replaces_state": "$145821841013657LkzHm:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1472264445118522cKcCT:matrix.org", "membership": "join", "origin_server_ts": 1472264445147, "sender": "@rade:matrix.org", "state_key": "@rade:matrix.org", "type": "m.room.member", "unsigned": { "age": 38403507531 } }, { "age_ts": 1427055708004, "content": { "avatar_url": "mxc://h7n.co.uk/qQDexgArCmbWBFJEIZbkEeJT#auto", "displayname": "steven", "membership": "join" }, "event_id": "$142705570621qNOkh:h7n.co.uk", "origin_server_ts": 1427055706811, "sender": "@steven:h7n.co.uk", "state_key": "@steven:h7n.co.uk", "type": "m.room.member", "unsigned": { "age": 6, "replaces_state": "$14259211462eKtBZ:h7n.co.uk" } }, { "content": { "avatar_url": null, "displayname": "trousermonkey", "membership": "join" }, "event_id": "$1507862845907575sauwE:matrix.org", "membership": "join", "origin_server_ts": 1507862845125, "sender": "@trousermonkey:matrix.org", "state_key": "@trousermonkey:matrix.org", "type": "m.room.member", "unsigned": { "age": 2805107553 } }, { "content": { "avatar_url": null, "displayname": "deltab (IRC)", "membership": "join" }, "event_id": "$15029678071277174rHfOs:matrix.org", "membership": "join", "origin_server_ts": 1502967807197, "sender": "@freenode_deltab:matrix.org", "state_key": "@freenode_deltab:matrix.org", "type": "m.room.member", "unsigned": { "age": 7700145481, "replaces_state": "$15029623691169007VUCXm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145705098928540bDCMP:matrix.org", "membership": "leave", "origin_server_ts": 1457050989733, "sender": "@blackdog:matrix.org", "state_key": "@blackdog:matrix.org", "type": "m.room.member", "unsigned": { "age": 53616962945, "replaces_state": "$145587244121549bYkCF:matrix.org" } }, { "content": { "avatar_url": "mxc://vanderkraan.net/dRnllFiQSZyjSBaeIjwOJEfM", "displayname": "Tjardick van der Kraan", "membership": "join" }, "event_id": "$142185593042byCiS:vanderkraan.net", "origin_server_ts": 1421855930887, "sender": "@tjardick:vanderkraan.net", "state_key": "@tjardick:vanderkraan.net", "type": "m.room.member", "unsigned": { "age": 88812021791, "replaces_state": "$141772038931tdosI:vanderkraan.net" } }, { "content": { "avatar_url": null, "displayname": "tx", "membership": "join" }, "event_id": "$148818813935wfeXo:styxmatrix.1337.cx", "origin_server_ts": 1488188145023, "sender": "@tx:styxmatrix.1337.cx", "state_key": "@tx:styxmatrix.1337.cx", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": "mxc://matrix.org/meWRDndGcasxNunKpOJcqKuU", "displayname": "org-rubo77", "membership": "join" }, "event_id": "$1483053239151947qFuGm:matrix.org", "membership": "join", "origin_server_ts": 1483053239773, "sender": "@rubo77:matrix.org", "state_key": "@rubo77:matrix.org", "type": "m.room.member", "unsigned": { "age": 27614712905 } }, { "content": { "avatar_url": null, "displayname": "stefanpearson", "membership": "join" }, "event_id": "$1468323811139403qUJdX:matrix.org", "membership": "join", "origin_server_ts": 1468323811991, "sender": "@stefanpearson:matrix.org", "state_key": "@stefanpearson:matrix.org", "type": "m.room.member", "unsigned": { "age": 42344140687 } }, { "content": { "membership": "leave" }, "event_id": "$14926142941605195jfkwO:matrix.org", "membership": "leave", "origin_server_ts": 1492614294488, "sender": "@dahlke:matrix.org", "state_key": "@dahlke:matrix.org", "type": "m.room.member", "unsigned": { "age": 18053658190, "replaces_state": "$1492548370945831UCltt:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14307852203566hGkyF:matrix.org", "origin_server_ts": 1430785220611, "sender": "@DavidChiles:matrix.org", "state_key": "@DavidChiles:matrix.org", "type": "m.room.member", "unsigned": { "age": 79882732067, "replaces_state": "$14307829793565cxWOU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Douglas", "membership": "join" }, "event_id": "$148082162011IBGpe:matrix.molinkx.com", "origin_server_ts": 1480821620008, "sender": "@douglas-lee:matrix.molinkx.com", "state_key": "@douglas-lee:matrix.molinkx.com", "type": "m.room.member", "unsigned": { "age": 40 } }, { "content": { "membership": "leave" }, "event_id": "$15104879792772307lINjQ:matrix.org", "membership": "leave", "origin_server_ts": 1510487979820, "sender": "@freenode_anthm][:matrix.org", "state_key": "@freenode_anthm][:matrix.org", "type": "m.room.member", "unsigned": { "age": 179972858, "replaces_state": "$15099905034139549HqGBC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Giovanni", "membership": "join" }, "event_id": "$14950020791415963ImEQa:matrix.org", "membership": "join", "origin_server_ts": 1495002079430, "sender": "@mele:matrix.org", "state_key": "@mele:matrix.org", "type": "m.room.member", "unsigned": { "age": 15665873248 } }, { "content": { "membership": "leave" }, "event_id": "$1474760610835787nwlYG:matrix.org", "membership": "leave", "origin_server_ts": 1474760610131, "sender": "@hankybanky:matrix.org", "state_key": "@hankybanky:matrix.org", "type": "m.room.member", "unsigned": { "age": 35907342547, "replaces_state": "$1474474039283218hvMNK:matrix.org" } }, { "content": { "membership": "invite" }, "event_id": "$15002288331779526NikfK:matrix.org", "membership": "invite", "origin_server_ts": 1500228833116, "sender": "@Mr.Riddle:matrix.org", "state_key": "@Mr.Pickle5:matrix.org", "type": "m.room.member", "unsigned": { "age": 10439119562 } }, { "content": { "avatar_url": null, "displayname": "veryhappy", "membership": "join" }, "event_id": "$1508181109256UCHbQ:home.matrix.one-crazy-human.net", "membership": "join", "origin_server_ts": 1508181109060, "sender": "@veryhappy:home.matrix.one-crazy-human.net", "state_key": "@veryhappy:home.matrix.one-crazy-human.net", "type": "m.room.member", "unsigned": { "age": 2486843618, "prev_content": { "avatar_url": null, "displayname": "veryhappy", "membership": "invite" }, "prev_sender": "@narispo:home.matrix.one-crazy-human.net", "replaces_state": "$1508179496226TOwdP:home.matrix.one-crazy-human.net" } }, { "content": { "membership": "leave" }, "event_id": "$14956632102025455pTUaK:matrix.org", "membership": "leave", "origin_server_ts": 1495663210268, "sender": "@freenode_kegan:matrix.org", "state_key": "@freenode_kegan:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004742410, "replaces_state": "$143594166713280KvSWG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "richard_w", "membership": "join" }, "event_id": "$15057556402153439vTgcJ:matrix.org", "membership": "join", "origin_server_ts": 1505755640833, "sender": "@richard_w:matrix.org", "state_key": "@richard_w:matrix.org", "type": "m.room.member", "unsigned": { "age": 4912311845 } }, { "content": { "avatar_url": null, "displayname": "arza (IRC)", "membership": "join" }, "event_id": "$1495529249541214aJZdS:matrix.org", "membership": "join", "origin_server_ts": 1495529249030, "sender": "@freenode_arza:matrix.org", "state_key": "@freenode_arza:matrix.org", "type": "m.room.member", "unsigned": { "age": 15138703648 } }, { "content": { "avatar_url": "mxc://matrix.org/egsjvaByDRaRvDpeQWpaxNAF#auto", "displayname": "katygreen", "membership": "join" }, "event_id": "$1456748159198046xuGKh:matrix.org", "membership": "join", "origin_server_ts": 1456748159671, "sender": "@katygreen:matrix.org", "state_key": "@katygreen:matrix.org", "type": "m.room.member", "unsigned": { "age": 53919793007, "replaces_state": "$143772707834849dSlmc:matrix.org" } }, { "content": { "avatar_url": "mxc://schnuffle.de/PGFsloUbUDvSiehYhiBdqMHn", "displayname": "Schnuffle", "membership": "join" }, "event_id": "$14838066352lIETn:schnuffle.de", "origin_server_ts": 1483806638417, "sender": "@schnuffle:schnuffle.de", "state_key": "@schnuffle:schnuffle.de", "type": "m.room.member", "unsigned": { "age": 26861317045, "replaces_state": "$14838065800eQFOb:schnuffle.de" } }, { "content": { "membership": "leave" }, "event_id": "$14284847954249yUwAg:matrix.org", "origin_server_ts": 1428484795722, "sender": "@stadelmannj:matrix.org", "state_key": "@stadelmannj:matrix.org", "type": "m.room.member", "unsigned": { "age": 82183156956, "replaces_state": "$14284078663134Vszfs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14875913749pjzPF:vegasky.io", "membership": "leave", "origin_server_ts": 1487591374107, "sender": "@richard:vegasky.io", "state_key": "@richard:vegasky.io", "type": "m.room.member", "unsigned": { "age": 23076578571, "prev_content": { "avatar_url": null, "displayname": "rjcoupe", "membership": "join" }, "prev_sender": "@richard:vegasky.io", "replaces_state": "$14875906212dhUOr:vegasky.io" } }, { "content": { "avatar_url": "mxc://riot.brocolo.us/MDJpRyCdRrlKUVORgPFLkVDo", "displayname": "feld", "membership": "join" }, "event_id": "$150877580613793ODwPS:riot.brocolo.us", "membership": "join", "origin_server_ts": 1508775806116, "sender": "@feld:riot.brocolo.us", "state_key": "@feld:riot.brocolo.us", "type": "m.room.member", "unsigned": { "age": 1892146562, "prev_content": { "avatar_url": "mxc://riot.brocolo.us/jSWKDKtHxqrFTsrKrWAZGLeQ", "displayname": "feld", "membership": "join" }, "prev_sender": "@feld:riot.brocolo.us", "replaces_state": "$15004732713782HofuR:riot.brocolo.us" } }, { "content": { "membership": "leave" }, "event_id": "$1507492486216406oJLdc:matrix.org", "membership": "leave", "origin_server_ts": 1507492486894, "sender": "@chronal:matrix.org", "state_key": "@chronal:matrix.org", "type": "m.room.member", "unsigned": { "age": 3175465784, "replaces_state": "$1506648740114140TemMX:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14855394312LQJuG:gruenhage.xyz", "membership": "leave", "origin_server_ts": 1485539431750, "sender": "@admin:gruenhage.xyz", "state_key": "@admin:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 25128520928, "prev_content": { "avatar_url": null, "displayname": "Test Account", "membership": "join" }, "prev_sender": "@admin:gruenhage.xyz", "replaces_state": "$14855392241SrFtr:gruenhage.xyz" } }, { "content": { "avatar_url": null, "displayname": "apwhitehat", "membership": "join" }, "event_id": "$1489233697801124nJklL:matrix.org", "membership": "join", "origin_server_ts": 1489233697985, "sender": "@apwhitehat:matrix.org", "state_key": "@apwhitehat:matrix.org", "type": "m.room.member", "unsigned": { "age": 21434254693 } }, { "content": { "avatar_url": null, "displayname": "nagua", "membership": "join" }, "event_id": "$14880104189CJhHa:2hg.org", "origin_server_ts": 1488010418415, "sender": "@nagua:2hg.org", "state_key": "@nagua:2hg.org", "type": "m.room.member", "unsigned": { "age": 107 } }, { "content": { "avatar_url": null, "displayname": "Guest224832", "kind": "guest", "membership": "join" }, "event_id": "$14938961491140205WjHmb:matrix.org", "membership": "join", "origin_server_ts": 1493896149129, "sender": "@224832:matrix.org", "state_key": "@224832:matrix.org", "type": "m.room.member", "unsigned": { "age": 16771803549 } }, { "content": { "avatar_url": "mxc://noepito.me/ULMlxZxTFguaKNmgeXIbyGgs", "displayname": "gonight", "membership": "join" }, "event_id": "$149549467510488KpZOK:noepito.me", "membership": "join", "origin_server_ts": 1495494675983, "sender": "@gonight:noepito.me", "state_key": "@gonight:noepito.me", "type": "m.room.member", "unsigned": { "age": 15173276695, "replaces_state": "$149549410110428huZom:noepito.me" } }, { "content": { "avatar_url": "mxc://matrix.org/mpuMvTjRMLugUIEuFmgiQfey#auto", "displayname": "Jaro", "membership": "join" }, "event_id": "$14345402411447CkNGI:matrix.org", "membership": "join", "origin_server_ts": 1434540241457, "sender": "@jarocech:matrix.org", "state_key": "@jarocech:matrix.org", "type": "m.room.member", "unsigned": { "age": 76127711221 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QGlhbjptYXRyaXgub3JnNYXhCAYyqLbGJMbFkEeoGlOi.aW1hZ2UvanBlZw==.jpeg", "displayname": "Ian", "membership": "join" }, "event_id": "$1417636974168Xqtoi:matrix.org", "membership": "join", "origin_server_ts": 1417636974428, "sender": "@ian:matrix.org", "state_key": "@ian:matrix.org", "type": "m.room.member", "unsigned": { "age": 93030978250 } }, { "content": { "membership": "leave" }, "event_id": "$1446678174570322UKLRZ:matrix.org", "origin_server_ts": 1446678174956, "sender": "@kimedaka:matrix.org", "state_key": "@kimedaka:matrix.org", "type": "m.room.member", "unsigned": { "age": 63989777722, "replaces_state": "$144563184930289zgJFA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "lok", "membership": "join" }, "event_id": "$1488545869483216VvAVU:matrix.org", "membership": "join", "origin_server_ts": 1488545869879, "sender": "@lok:matrix.org", "state_key": "@lok:matrix.org", "type": "m.room.member", "unsigned": { "age": 22122082799, "replaces_state": "$1473490546150856MqsZd:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15033472325433178JpRKU:matrix.org", "membership": "leave", "origin_server_ts": 1503347232972, "sender": "@freenode_jfcl:matrix.org", "state_key": "@freenode_jfcl:matrix.org", "type": "m.room.member", "unsigned": { "age": 7320719706, "replaces_state": "$15033472245433082gCBpb:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14925255971fqgbk:potatofrom.space", "membership": "leave", "origin_server_ts": 1492525597038, "sender": "@kevin:potatofrom.space", "state_key": "@kevin:potatofrom.space", "type": "m.room.member", "unsigned": { "age": 18142355640, "prev_content": { "avatar_url": "mxc://potatofrom.space/twfEfFhinhxaKGKEgnmFQvbU", "displayname": "Pneumaticat", "membership": "join" }, "prev_sender": "@kevin:potatofrom.space", "replaces_state": "$14924321821AoqKi:potatofrom.space" } }, { "content": { "avatar_url": null, "displayname": "epdtry", "membership": "join" }, "event_id": "$15098167681368054hyjsA:matrix.org", "membership": "join", "origin_server_ts": 1509816768737, "sender": "@epdtry:matrix.org", "state_key": "@epdtry:matrix.org", "type": "m.room.member", "unsigned": { "age": 851183941 } }, { "content": { "avatar_url": "mxc://khorne.me/TXOywLWjLdcHehGeDsFIOpoC", "displayname": "Khorne", "membership": "join" }, "event_id": "$14924482612PlMAU:khorne.me", "origin_server_ts": 1492448267001, "sender": "@khorne:khorne.me", "state_key": "@khorne:khorne.me", "type": "m.room.member", "unsigned": { "age": 91, "replaces_state": "$149244761116uPJuV:khorne.me" } }, { "content": { "avatar_url": null, "displayname": "elcyborg", "membership": "join" }, "event_id": "$149793142618WPKmM:elcyb.org", "origin_server_ts": 1497931426815, "sender": "@elcyborg:elcyb.org", "state_key": "@elcyborg:elcyb.org", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "membership": "leave" }, "event_id": "$150533033746QvmGD:talathyrn.art", "membership": "leave", "origin_server_ts": 1505330337277, "sender": "@Pablo:talathyrn.art", "state_key": "@Pablo:talathyrn.art", "type": "m.room.member", "unsigned": { "age": 5337615401, "prev_content": { "avatar_url": null, "displayname": "Pablo Stebler", "membership": "join" }, "prev_sender": "@Pablo:talathyrn.art", "replaces_state": "$150533026745QqOJg:talathyrn.art" } }, { "content": { "avatar_url": "mxc://matrix.org/WmkKvdehnVILOgPYrQlfhWPz", "displayname": "Nils", "membership": "join" }, "event_id": "$14791152131063071NnIug:matrix.org", "membership": "join", "origin_server_ts": 1479115213573, "sender": "@nilsja:matrix.org", "state_key": "@nilsja:matrix.org", "type": "m.room.member", "unsigned": { "age": 31552739105, "replaces_state": "$14791151391062801GyHQb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 150348", "kind": "guest", "membership": "join" }, "event_id": "$1490702548597442EgTiV:matrix.org", "membership": "join", "origin_server_ts": 1490702548237, "sender": "@150348:matrix.org", "state_key": "@150348:matrix.org", "type": "m.room.member", "unsigned": { "age": 19965404441 } }, { "content": { "membership": "leave" }, "event_id": "$148949397164qpOZC:matrix.dust-puppy.net", "membership": "leave", "origin_server_ts": 1489493971795, "sender": "@cg:matrix.dust-puppy.net", "state_key": "@cg:matrix.dust-puppy.net", "type": "m.room.member", "unsigned": { "age": 21173980883, "prev_content": { "avatar_url": null, "displayname": "cg", "membership": "join" }, "prev_sender": "@cg:matrix.dust-puppy.net", "replaces_state": "$14890796351kPUzo:matrix.dust-puppy.net" } }, { "content": { "membership": "leave" }, "event_id": "$1426185073397jfjPT:matrix.org", "origin_server_ts": 1426185073677, "sender": "@nomius:matrix.org", "state_key": "@nomius:matrix.org", "type": "m.room.member", "unsigned": { "age": 84482879001, "replaces_state": "$14261361403059PYiva:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1459944534275299VwNbj:matrix.org", "membership": "join", "origin_server_ts": 1459944534907, "sender": "@fride:matrix.org", "state_key": "@fride:matrix.org", "type": "m.room.member", "unsigned": { "age": 50723417771 } }, { "content": { "membership": "leave" }, "event_id": "$1481418062169081iOtWn:matrix.org", "membership": "leave", "origin_server_ts": 1481418062297, "sender": "@sigwinch:matrix.org", "state_key": "@sigwinch:matrix.org", "type": "m.room.member", "unsigned": { "age": 29249890381, "replaces_state": "$1481414978164022oMwIn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$150166903629BWePj:team-senate.ddns.net", "origin_server_ts": 1501669036932, "sender": "@test:team-senate.ddns.net", "state_key": "@test:team-senate.ddns.net", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "membership": "leave" }, "event_id": "$1438967105237562UcrKU:matrix.org", "origin_server_ts": 1438967105559, "sender": "@kotik:matrix.org", "state_key": "@kotik:matrix.org", "type": "m.room.member", "unsigned": { "age": 71700847119, "replaces_state": "$143776226249569DvHoE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/bPnptSnxxGNipvtPmkCoCslq", "displayname": "select", "membership": "join" }, "event_id": "$14966974194878877tsYmH:matrix.org", "membership": "join", "origin_server_ts": 1496697419992, "sender": "@select:matrix.org", "state_key": "@select:matrix.org", "type": "m.room.member", "unsigned": { "age": 13970532686 } }, { "age_ts": 1498230372096, "content": { "avatar_url": "mxc://sandhose.fr/KapZOYYVmbVTnAQymlxssGrh", "displayname": "Sandhose", "membership": "join" }, "event_id": "$1498230369465HZNDU:sandhose.fr", "origin_server_ts": 1498230369144, "sender": "@sandhose:sandhose.fr", "state_key": "@sandhose:sandhose.fr", "type": "m.room.member", "unsigned": { "age": 17, "replaces_state": "$14661201388OamRm:sandhose.fr" } }, { "content": { "avatar_url": null, "displayname": "raybeli", "membership": "join" }, "event_id": "$146480832515439HRhfL:matrix.org", "membership": "join", "origin_server_ts": 1464808325567, "sender": "@RAYMOND144:matrix.org", "state_key": "@RAYMOND144:matrix.org", "type": "m.room.member", "unsigned": { "age": 45859627111 } }, { "content": { "membership": "leave" }, "event_id": "$15101412812232642eJpMI:matrix.org", "membership": "leave", "origin_server_ts": 1510141281941, "sender": "@freenode_deathspawn:matrix.org", "state_key": "@freenode_deathspawn:matrix.org", "type": "m.room.member", "unsigned": { "age": 526670737, "replaces_state": "$15099242322672066iffim:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zubCDmqZekLIllRqBbNtgqAI", "displayname": "pipc", "membership": "join" }, "event_id": "$1493413142506294Efbud:matrix.org", "membership": "join", "origin_server_ts": 1493413142211, "sender": "@phil-flexhk:matrix.org", "state_key": "@phil-flexhk:matrix.org", "type": "m.room.member", "unsigned": { "age": 17254810467, "replaces_state": "$1490412081464726aocUK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/qUZHkpJKugLYgayNSpTAOdhF", "displayname": "prosody C°", "membership": "join" }, "event_id": "$14647811924832THdLf:matrix.org", "membership": "join", "origin_server_ts": 1464781192581, "sender": "@prosodyContexte:matrix.org", "state_key": "@prosodyContexte:matrix.org", "type": "m.room.member", "unsigned": { "age": 45886760097, "replaces_state": "$14556737036137rQeqV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149077659514453tPdbT:tchncs.de", "membership": "leave", "origin_server_ts": 1490776595761, "sender": "@Milan:tchncs.de", "state_key": "@Milan:tchncs.de", "type": "m.room.member", "unsigned": { "age": 19891356917, "replaces_state": "$148918108838xmNsV:tchncs.de" } }, { "content": { "membership": "leave" }, "event_id": "$149762146278501erFEB:matrix.org", "membership": "leave", "origin_server_ts": 1497621462256, "sender": "@CaptainOblivious:matrix.org", "state_key": "@CaptainOblivious:matrix.org", "type": "m.room.member", "unsigned": { "age": 13046490422, "replaces_state": "$14975805972601565KFYrT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/xArfINXoiqzPwjRpDyIXgyST", "displayname": "pik", "membership": "join" }, "event_id": "$1473872137269975TCWTr:matrix.org", "membership": "join", "origin_server_ts": 1473872137059, "sender": "@pik:matrix.org", "state_key": "@pik:matrix.org", "type": "m.room.member", "unsigned": { "age": 36795815619, "replaces_state": "$1471560812149453eVswq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15106301341274803rcjro:matrix.org", "membership": "leave", "origin_server_ts": 1510630134445, "sender": "@freenode_erikj:matrix.org", "state_key": "@freenode_erikj:matrix.org", "type": "m.room.member", "unsigned": { "age": 37818233, "replaces_state": "$15087027773894687pZSWD:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ntjLcsBzZXURFQzjgqcunFQV", "displayname": "GreyHands", "membership": "join" }, "event_id": "$1470309026199965WYHDa:matrix.org", "membership": "join", "origin_server_ts": 1470309026653, "sender": "@GreyHands:matrix.org", "state_key": "@GreyHands:matrix.org", "type": "m.room.member", "unsigned": { "age": 40358926025 } }, { "content": { "membership": "leave" }, "event_id": "$14961108474019MEyed:cw.doesntexist.com", "membership": "leave", "origin_server_ts": 1496110847710, "sender": "@cw:cw.doesntexist.com", "state_key": "@cw:cw.doesntexist.com", "type": "m.room.member", "unsigned": { "age": 14557104968, "prev_content": { "avatar_url": "mxc://cw.doesntexist.com/JpALnhjKKIBPLBULaZNOoOmj", "displayname": "mistaken113", "membership": "join" }, "prev_sender": "@cw:cw.doesntexist.com", "replaces_state": "$148983756543gXJgb:cw.doesntexist.com" } }, { "content": { "avatar_url": null, "displayname": "martinkl", "membership": "join" }, "event_id": "$1494856772105360hfYrO:matrix.org", "membership": "join", "origin_server_ts": 1494856772717, "sender": "@martinkl:matrix.org", "state_key": "@martinkl:matrix.org", "type": "m.room.member", "unsigned": { "age": 15811179961 } }, { "content": { "avatar_url": "mxc://cntalk.xyz/MdvsZqmHDjlBwrmNJhwGkblq", "displayname": "LifeNT", "membership": "join" }, "event_id": "$148296867015sLvAP:cntalk.xyz", "origin_server_ts": 1482968672336, "sender": "@lifent:cntalk.xyz", "state_key": "@lifent:cntalk.xyz", "type": "m.room.member", "unsigned": { "age": 98, "replaces_state": "$148296795611sidiU:cntalk.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$144938197065572duXjE:matrix.org", "origin_server_ts": 1449381970475, "sender": "@DeltaWhy:matrix.org", "state_key": "@DeltaWhy:matrix.org", "type": "m.room.member", "unsigned": { "age": 61285982203, "replaces_state": "$144938149665327TJqRc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "rayth", "membership": "join" }, "event_id": "$1470624419392045uTHot:matrix.org", "membership": "join", "origin_server_ts": 1470624419971, "sender": "@rayth:matrix.org", "state_key": "@rayth:matrix.org", "type": "m.room.member", "unsigned": { "age": 40043532707 } }, { "content": { "membership": "leave" }, "event_id": "$15014748453798034QvJss:matrix.org", "membership": "leave", "origin_server_ts": 1501474845069, "sender": "@freenode_suy_:matrix.org", "state_key": "@freenode_suy_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193107609, "replaces_state": "$1499318348370339anhqA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1454672586105067YALyE:matrix.org", "origin_server_ts": 1454672586081, "sender": "@cactipus:matrix.org", "state_key": "@cactipus:matrix.org", "type": "m.room.member", "unsigned": { "age": 55995366597, "replaces_state": "$1454670333102742pxOFp:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vInnoFoexvcJZvBviyffLxsX", "displayname": "vanous", "membership": "join" }, "event_id": "$1465928376680184hFCrb:matrix.org", "membership": "join", "origin_server_ts": 1465928376403, "sender": "@vanous:matrix.org", "state_key": "@vanous:matrix.org", "type": "m.room.member", "unsigned": { "age": 44739576275 } }, { "content": { "avatar_url": "mxc://matrix.org/iuRpzTjMfddpeVIFbEJPoQPA", "displayname": "indygamer", "membership": "join" }, "event_id": "$14898268891239605gZqDs:matrix.org", "membership": "join", "origin_server_ts": 1489826889071, "sender": "@indgamer:matrix.org", "state_key": "@indgamer:matrix.org", "type": "m.room.member", "unsigned": { "age": 20841063607, "replaces_state": "$14898145721184915BqMSc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631572024283KFarN:matrix.org", "membership": "leave", "origin_server_ts": 1495663157116, "sender": "@freenode_lapinot:matrix.org", "state_key": "@freenode_lapinot:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004795562, "replaces_state": "$1489103132389957ZarOs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631822024824NCKrG:matrix.org", "membership": "leave", "origin_server_ts": 1495663182182, "sender": "@freenode_kegtest:matrix.org", "state_key": "@freenode_kegtest:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004770496, "replaces_state": "$145533576871532xzgTC:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "nys (IRC)", "membership": "join" }, "event_id": "$1495529296541530mLIiE:matrix.org", "membership": "join", "origin_server_ts": 1495529296611, "sender": "@freenode_nys:matrix.org", "state_key": "@freenode_nys:matrix.org", "type": "m.room.member", "unsigned": { "age": 15138656067 } }, { "content": { "avatar_url": null, "displayname": "P-A", "membership": "join" }, "event_id": "$147040971928131dAkVK:matrix.org", "membership": "join", "origin_server_ts": 1470409719953, "sender": "@p-a:matrix.org", "state_key": "@p-a:matrix.org", "type": "m.room.member", "unsigned": { "age": 40258232725, "replaces_state": "$14703959265836wQXKt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "hlogeon11", "membership": "join" }, "event_id": "$1500030376461981PVpmc:matrix.org", "membership": "join", "origin_server_ts": 1500030376278, "sender": "@hlogeon11:matrix.org", "state_key": "@hlogeon11:matrix.org", "type": "m.room.member", "unsigned": { "age": 10637576400 } }, { "content": { "avatar_url": null, "displayname": "adulteratedjedi", "membership": "join" }, "event_id": "$14991134222869878dVqPE:matrix.org", "membership": "join", "origin_server_ts": 1499113422354, "sender": "@gavinjohn.noonan:matrix.org", "state_key": "@gavinjohn.noonan:matrix.org", "type": "m.room.member", "unsigned": { "age": 11554530324 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15062796153kuNmi:gantongym.com", "origin_server_ts": 1506279615207, "sender": "@morph:gantongym.com", "state_key": "@morph:gantongym.com", "type": "m.room.member", "unsigned": { "age": 35 } }, { "content": { "membership": "leave" }, "event_id": "$14452461161428BvtAv:matrix.org", "origin_server_ts": 1445246116138, "sender": "@pattn:matrix.org", "state_key": "@pattn:matrix.org", "type": "m.room.member", "unsigned": { "age": 65421836540, "replaces_state": "$1444988232569046Xctee:matrix.org" } }, { "content": { "avatar_url": "mxc://tyler.cat/WZJdzWdqbqDhoWKortIotjDR", "displayname": "kodo 🌍", "membership": "join" }, "event_id": "$1490156550934UBneJ:tyler.cat", "membership": "join", "origin_server_ts": 1490156550563, "sender": "@kodo:tyler.cat", "state_key": "@kodo:tyler.cat", "type": "m.room.member", "unsigned": { "age": 20511402115, "replaces_state": "$1489944984526gyKYO:tyler.cat" } }, { "content": { "avatar_url": null, "displayname": "Ivan", "membership": "join" }, "event_id": "$1459114830311446nhHrF:matrix.org", "membership": "join", "origin_server_ts": 1459114830741, "sender": "@Ivan13:matrix.org", "state_key": "@Ivan13:matrix.org", "type": "m.room.member", "unsigned": { "age": 51553121937 } }, { "content": { "avatar_url": "http://matrix.tp.mu:8008/_matrix/content/QG1hdHRoZXc6dHAubXUOeJQMWFMvUdqdeLovZKsyaOT.aW1hZ2UvanBlZw==.jpeg", "displayname": "Matthew Hodgson", "membership": "join" }, "event_id": "$141712811919qeBZe:tp.mu", "membership": "join", "origin_server_ts": 1417128121361, "sender": "@matthew:tp.mu", "state_key": "@matthew:tp.mu", "type": "m.room.member", "unsigned": { "age": 93539830984 } }, { "content": { "membership": "leave" }, "event_id": "$1472883415350063emRhh:matrix.org", "membership": "leave", "origin_server_ts": 1472883415885, "sender": "@hooram:matrix.org", "state_key": "@hooram:matrix.org", "type": "m.room.member", "unsigned": { "age": 37784536793, "replaces_state": "$1470879020155914LZjih:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/HHerMstEFvbUNNVNpuXYRpoi", "displayname": "zamicol", "membership": "join" }, "event_id": "$147742135786222ViEbg:matrix.org", "membership": "join", "origin_server_ts": 1477421357731, "sender": "@zamicol:matrix.org", "state_key": "@zamicol:matrix.org", "type": "m.room.member", "unsigned": { "age": 33246594947 } }, { "content": { "membership": "leave" }, "event_id": "$14876387191726073NnodA:matrix.org", "membership": "leave", "origin_server_ts": 1487638719661, "sender": "@zig:matrix.org", "state_key": "@zig:matrix.org", "type": "m.room.member", "unsigned": { "age": 23029233017, "replaces_state": "$14845226191799238nuheA:matrix.org" } }, { "content": { "aliases": [ "#matrix-dev:matrixim.cc" ] }, "event_id": "$149840783376GmZcf:matrixim.cc", "origin_server_ts": 1498407833952, "sender": "@vimacs:matrixim.cc", "state_key": "matrixim.cc", "type": "m.room.aliases", "unsigned": { "age": 12260118726 } }, { "content": { "avatar_url": null, "displayname": "Guest 247452", "kind": "guest", "membership": "join" }, "event_id": "$14961041163710619qwzxD:matrix.org", "membership": "join", "origin_server_ts": 1496104116678, "sender": "@247452:matrix.org", "state_key": "@247452:matrix.org", "type": "m.room.member", "unsigned": { "age": 14563836000 } }, { "content": { "avatar_url": null, "displayname": "Guest 255113", "kind": "guest", "membership": "join" }, "event_id": "$14975264331917047SmBOt:matrix.org", "membership": "join", "origin_server_ts": 1497526433590, "sender": "@255113:matrix.org", "state_key": "@255113:matrix.org", "type": "m.room.member", "unsigned": { "age": 13141519088 } }, { "content": { "avatar_url": "mxc://matrix.org/iSkkEftJeZvDOqsSveFQVNrt", "displayname": "drb420", "membership": "join" }, "event_id": "$1489193363621034qUIDj:matrix.org", "membership": "join", "origin_server_ts": 1489193363747, "sender": "@drb420:matrix.org", "state_key": "@drb420:matrix.org", "type": "m.room.member", "unsigned": { "age": 21474588931 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14824397341112174uzoXR:matrix.org", "membership": "join", "origin_server_ts": 1482439734428, "sender": "@tstephen:matrix.org", "state_key": "@tstephen:matrix.org", "type": "m.room.member", "unsigned": { "age": 28228218250 } }, { "content": { "membership": "leave" }, "event_id": "$150396768819HfvtE:ganja.nl", "membership": "leave", "origin_server_ts": 1503967688680, "sender": "@ron:ganja.nl", "state_key": "@ron:ganja.nl", "type": "m.room.member", "unsigned": { "age": 6700263998, "prev_content": { "avatar_url": "mxc://ganja.nl/rQbhCPxAWEFKerMeIiezONld", "displayname": "Ron", "membership": "join" }, "prev_sender": "@ron:ganja.nl", "replaces_state": "$150385633015jYgwb:ganja.nl" } }, { "content": { "avatar_url": null, "displayname": "galactic_hitchhiker", "membership": "join" }, "event_id": "$15048262303947313wTcGM:matrix.org", "membership": "join", "origin_server_ts": 1504826230860, "sender": "@galactic_hitchhiker:matrix.org", "state_key": "@galactic_hitchhiker:matrix.org", "type": "m.room.member", "unsigned": { "age": 5841721818 } }, { "content": { "membership": "leave" }, "event_id": "$15009119722938643CseXh:matrix.org", "membership": "leave", "origin_server_ts": 1500911972397, "sender": "@freenode_Phrk_:matrix.org", "state_key": "@freenode_Phrk_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9755980281, "replaces_state": "$15008957722716387PpUhp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14359384327463iHKsy:matrix.org", "origin_server_ts": 1435938432706, "sender": "@0xErnie:matrix.org", "state_key": "@0xErnie:matrix.org", "type": "m.room.member", "unsigned": { "age": 74729519972, "replaces_state": "$14359384297461Lvjne:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14679081634983BVbFM:matrix.org", "membership": "join", "origin_server_ts": 1467908163204, "sender": "@agustin:matrix.org", "state_key": "@agustin:matrix.org", "type": "m.room.member", "unsigned": { "age": 42759789474 } }, { "content": { "avatar_url": null, "displayname": "horrified", "membership": "join" }, "event_id": "$15005298833461936BxWSI:matrix.org", "membership": "join", "origin_server_ts": 1500529883502, "sender": "@horrified:matrix.org", "state_key": "@horrified:matrix.org", "type": "m.room.member", "unsigned": { "age": 10138069176 } }, { "content": { "avatar_url": "mxc://matrix.org/dNQGqtlEIaUVDWebTsnlyPWY#auto", "displayname": null, "membership": "join" }, "event_id": "$1437996903124471dQGzm:matrix.org", "membership": "join", "origin_server_ts": 1437996903336, "sender": "@gustav:matrix.org", "state_key": "@gustav:matrix.org", "type": "m.room.member", "unsigned": { "age": 72671049342 } }, { "content": { "membership": "leave" }, "event_id": "$1465145569189299ZIGfc:matrix.org", "membership": "leave", "origin_server_ts": 1465145569128, "sender": "@matkam:matrix.org", "state_key": "@matkam:matrix.org", "type": "m.room.member", "unsigned": { "age": 45522383550, "replaces_state": "$1465121094166544OIyYH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14958967452010079mtrbv:matrix.org", "membership": "leave", "origin_server_ts": 1495896745717, "sender": "@freenode_hariprasad:matrix.org", "state_key": "@freenode_hariprasad:matrix.org", "type": "m.room.member", "unsigned": { "age": 14771206961, "replaces_state": "$14958966742009527wefJt:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14722099005dGWci:zebar.de", "membership": "leave", "origin_server_ts": 1472209900034, "sender": "@bara:zebar.de", "state_key": "@bara:zebar.de", "type": "m.room.member", "unsigned": { "age": 38458052644, "replaces_state": "$147104170663LjMrt:zebar.de" } }, { "content": { "membership": "leave" }, "event_id": "$1446403027351992JeUqD:matrix.org", "origin_server_ts": 1446403027446, "sender": "@bp5:matrix.org", "state_key": "@bp5:matrix.org", "type": "m.room.member", "unsigned": { "age": 64264925232, "replaces_state": "$1446401294350880ppEjG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ewave", "membership": "join" }, "event_id": "$15046553111743125LRKee:matrix.org", "membership": "join", "origin_server_ts": 1504655311866, "sender": "@ewave:matrix.org", "state_key": "@ewave:matrix.org", "type": "m.room.member", "unsigned": { "age": 6012640812 } }, { "content": { "membership": "leave" }, "event_id": "$1443396837238461fDqVj:matrix.org", "origin_server_ts": 1443396837865, "sender": "@Shinare:matrix.org", "state_key": "@Shinare:matrix.org", "type": "m.room.member", "unsigned": { "age": 67271114813, "replaces_state": "$144277841243321MLhAj:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14376521441238VsUwQ:matrix.org", "origin_server_ts": 1437652144627, "sender": "@stalund:matrix.org", "state_key": "@stalund:matrix.org", "type": "m.room.member", "unsigned": { "age": 73015808051, "replaces_state": "$14242457004304yTpaI:matrix.org" } }, { "content": { "avatar_url": "mxc://m1nd.io/CSlwxfezyxwZbvLYzdeGjMSB", "displayname": "m1nd", "membership": "join" }, "event_id": "$150593214215465EKnzH:m1nd.io", "origin_server_ts": 1505932141607, "sender": "@m1nd:m1nd.io", "state_key": "@m1nd:m1nd.io", "type": "m.room.member", "unsigned": { "age": 816 } }, { "content": { "avatar_url": null, "displayname": "meir", "membership": "join" }, "event_id": "$1452616664381524UsWlN:matrix.org", "origin_server_ts": 1452616664513, "sender": "@meir:matrix.org", "state_key": "@meir:matrix.org", "type": "m.room.member", "unsigned": { "age": 58051288165 } }, { "content": { "avatar_url": "mxc://matrix.org/QOsfllwdBsIWMoawEEEvNvZC#auto", "displayname": "Steven Ng", "membership": "join" }, "event_id": "$144053479262682kSMKO:matrix.org", "origin_server_ts": 1440534792226, "sender": "@nomadicoder:matrix.org", "state_key": "@nomadicoder:matrix.org", "type": "m.room.member", "unsigned": { "age": 70133160452 } }, { "content": { "membership": "leave" }, "event_id": "$1472519746589247Fdovc:matrix.org", "membership": "leave", "origin_server_ts": 1472519746789, "sender": "@mitchhentges:matrix.org", "state_key": "@mitchhentges:matrix.org", "type": "m.room.member", "unsigned": { "age": 38148205889, "replaces_state": "$14556695135451QfDJp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147258485047446CyWtZ:matrix.org", "membership": "leave", "origin_server_ts": 1472584850205, "sender": "@Takios:matrix.org", "state_key": "@Takios:matrix.org", "type": "m.room.member", "unsigned": { "age": 38083102473, "replaces_state": "$1472553728643501pGZvX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/cTUSYKBrertTOySKWYlhSjZL", "displayname": "arthurp", "membership": "join" }, "event_id": "$145512361613564KdlUy:matrix.org", "membership": "join", "origin_server_ts": 1455123616965, "sender": "@arthurp:matrix.org", "state_key": "@arthurp:matrix.org", "type": "m.room.member", "unsigned": { "age": 55544335713, "replaces_state": "$1447083032855443WGUSS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tyng", "membership": "join" }, "event_id": "$150716301950548Bngps:matrix.org", "membership": "join", "origin_server_ts": 1507163019713, "sender": "@tyngdekraften:matrix.org", "state_key": "@tyngdekraften:matrix.org", "type": "m.room.member", "unsigned": { "age": 3504932965, "replaces_state": "$15070656623678240aPdgi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14895746541dezjQ:chat.alko-sbk.de", "membership": "leave", "origin_server_ts": 1489574654308, "sender": "@hamber_dick:chat.alko-sbk.de", "state_key": "@hamber_dick:chat.alko-sbk.de", "type": "m.room.member", "unsigned": { "age": 21093298370, "prev_content": { "avatar_url": "mxc://chat.alko-sbk.de/eMGxyZTESQIItYyBMkduYewr", "displayname": "Steffen", "membership": "join" }, "prev_sender": "@hamber_dick:chat.alko-sbk.de", "replaces_state": "$1488282721147dTqSu:chat.alko-sbk.de" } }, { "content": { "membership": "leave" }, "event_id": "$145604323460058vRvZC:matrix.org", "origin_server_ts": 1456043234684, "sender": "@Gergely:matrix.org", "state_key": "@Gergely:matrix.org", "type": "m.room.member", "unsigned": { "age": 54624717994, "replaces_state": "$145603919459346qNJXr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/BoSUSeuYdAFMSYKYyskjNCiz", "displayname": "jeremycahill", "membership": "join" }, "event_id": "$14926192331673864FNPdn:matrix.org", "membership": "join", "origin_server_ts": 1492619233980, "sender": "@jeremycahill:matrix.org", "state_key": "@jeremycahill:matrix.org", "type": "m.room.member", "unsigned": { "age": 18048718698 } }, { "content": { "avatar_url": null, "displayname": "tester44174", "membership": "join" }, "event_id": "$15080576073311691szbYo:matrix.org", "membership": "join", "origin_server_ts": 1508057607340, "sender": "@tester44174:matrix.org", "state_key": "@tester44174:matrix.org", "type": "m.room.member", "unsigned": { "age": 2610345338 } }, { "content": { "avatar_url": null, "displayname": "peterahl", "membership": "join" }, "event_id": "$15047965743487347pYXrn:matrix.org", "membership": "join", "origin_server_ts": 1504796574112, "sender": "@peterahl:matrix.org", "state_key": "@peterahl:matrix.org", "type": "m.room.member", "unsigned": { "age": 5871378566 } }, { "content": { "membership": "leave" }, "event_id": "$14956632442026269KnUHl:matrix.org", "membership": "leave", "origin_server_ts": 1495663244346, "sender": "@freenode_andrewsh:matrix.org", "state_key": "@freenode_andrewsh:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004708332, "replaces_state": "$14868985331231153iOkrU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1497653332476299tcgQr:matrix.org", "membership": "leave", "origin_server_ts": 1497653332374, "sender": "@freenode_Mikaela-:matrix.org", "state_key": "@freenode_Mikaela-:matrix.org", "type": "m.room.member", "unsigned": { "age": 13014620304, "replaces_state": "$1496870749169926tpTpK:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "konus", "membership": "join" }, "event_id": "$148748954821taPCi:imgif.top", "origin_server_ts": 1487489548351, "sender": "@konus:imgif.top", "state_key": "@konus:imgif.top", "type": "m.room.member", "unsigned": { "age": 84 } }, { "content": { "avatar_url": null, "displayname": "musoke", "membership": "join" }, "event_id": "$15096062463446662mPuUC:matrix.org", "membership": "join", "origin_server_ts": 1509606246907, "sender": "@musoke:matrix.org", "state_key": "@musoke:matrix.org", "type": "m.room.member", "unsigned": { "age": 1061705771 } }, { "content": { "membership": "leave" }, "event_id": "$144596088911471WtOLH:matrix.org", "origin_server_ts": 1445960889010, "sender": "@conner:matrix.org", "state_key": "@conner:matrix.org", "type": "m.room.member", "unsigned": { "age": 64707063668, "replaces_state": "$1445909879212167xNYma:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$14188144122Ddzdn:negativecurvature.net", "membership": "join", "origin_server_ts": 1418814411913, "sender": "@Mjark:negativecurvature.net", "state_key": "@Mjark:negativecurvature.net", "type": "m.room.member", "unsigned": { "age": 91853540304 } }, { "content": { "avatar_url": null, "displayname": "konfou", "membership": "join" }, "event_id": "$149778862732421eoMxt:matrix.org", "membership": "join", "origin_server_ts": 1497788627230, "sender": "@konfou:matrix.org", "state_key": "@konfou:matrix.org", "type": "m.room.member", "unsigned": { "age": 12879325448 } }, { "content": { "avatar_url": "mxc://matrix.org/BLlZpAPrnmemAEssgcEanrwf", "displayname": "Wizard 𝖙3𝖈𝖍𝖌𝖚𝖞", "membership": "join" }, "event_id": "$15007251951107866VBfRa:matrix.org", "membership": "join", "origin_server_ts": 1500725195463, "sender": "@webdevguru:matrix.org", "state_key": "@webdevguru:matrix.org", "type": "m.room.member", "unsigned": { "age": 9942757215, "replaces_state": "$14984908212381383XkPsv:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/AbtWjyRYRxXjDXButaddxOif#auto", "displayname": "Trung Le", "membership": "join" }, "event_id": "$14334342741148aGdEG:matrix.org", "membership": "join", "origin_server_ts": 1433434274891, "sender": "@trungrta:matrix.org", "state_key": "@trungrta:matrix.org", "type": "m.room.member", "unsigned": { "age": 77233677787 } }, { "content": { "avatar_url": "mxc://jack-server.com/jWnJqaRnmsXIAGNilYhkDKqv", "displayname": "Jack Waterworth 🎉", "membership": "join" }, "event_id": "$1485026498659XCJXH:jack-server.com", "membership": "join", "origin_server_ts": 1485026498051, "sender": "@jack:jack-server.com", "state_key": "@jack:jack-server.com", "type": "m.room.member", "unsigned": { "age": 25641454627, "prev_content": { "avatar_url": "mxc://jack-server.com/SxPTziwxXVXUrLpnhMNrneSu", "displayname": "Jack Waterworth 🎉", "membership": "join" }, "prev_sender": "@jack:jack-server.com", "replaces_state": "$1485026419635cuhYd:jack-server.com" } }, { "content": { "membership": "leave" }, "event_id": "$15048201733865612rtBnh:matrix.org", "membership": "leave", "origin_server_ts": 1504820173710, "sender": "@freenode_newbie:matrix.org", "state_key": "@freenode_newbie:matrix.org", "type": "m.room.member", "unsigned": { "age": 5847778968, "replaces_state": "$15048201603865396ySHZx:matrix.org" } }, { "content": { "display": [ "SYWEB", "SYN", "SPEC", "SYD", "ORG", "BOTS", "SYIOS" ] }, "event_id": "$1418041743106JEPpS:matrix.org", "origin_server_ts": 1418041743111, "sender": "@neb:matrix.org", "state_key": "", "type": "org.matrix.neb.plugin.jira.issues.display", "unsigned": { "age": 92626209567 } }, { "content": { "membership": "leave" }, "event_id": "$1443434558251254lpVVk:matrix.org", "origin_server_ts": 1443434558476, "sender": "@male:matrix.org", "state_key": "@male:matrix.org", "type": "m.room.member", "unsigned": { "age": 67233394202, "replaces_state": "$1443434548251252bNRzF:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dxrXhKFUSAovgjjscfOunMVf", "displayname": "TheManiac™", "membership": "join" }, "event_id": "$14534865383938HZWVs:matrix.org", "origin_server_ts": 1453486538447, "sender": "@max:matrix.org", "state_key": "@max:matrix.org", "type": "m.room.member", "unsigned": { "age": 57181414231, "replaces_state": "$1426800580249HtseU:matrix.org" } }, { "content": { "history_visibility": "world_readable" }, "event_id": "$145371612228AyZjq:jki.re", "origin_server_ts": 1453716122890, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 56951829788, "replaces_state": "$1442590569210FBTpO:jki.re" } }, { "content": { "avatar_url": "mxc://matrix.org/NtQceffQhuUryZtUBDbWsFUn", "displayname": "Olov Gunther-Hanssen", "membership": "join" }, "event_id": "$14307496452893HxxUM:matrix.org", "membership": "join", "origin_server_ts": 1430749645540, "sender": "@Olov:matrix.org", "state_key": "@Olov:matrix.org", "type": "m.room.member", "unsigned": { "age": 79918307138, "replaces_state": "$1429010755322bgHBT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "194984", "membership": "join" }, "event_id": "$1494879812374097YdeyI:matrix.org", "membership": "join", "origin_server_ts": 1494879812270, "sender": "@194984:matrix.org", "state_key": "@194984:matrix.org", "type": "m.room.member", "unsigned": { "age": 15788140408 } }, { "content": { "membership": "leave" }, "event_id": "$1486939062539eqqhe:pintobyte.com", "membership": "leave", "origin_server_ts": 1486939062112, "sender": "@piroko:pintobyte.com", "state_key": "@piroko:pintobyte.com", "type": "m.room.member", "unsigned": { "age": 23728890566, "prev_content": { "avatar_url": "mxc://pintobyte.com/RYAucxWWLKgrUAUVLAaBvIhA", "displayname": "jeremy", "membership": "join" }, "prev_sender": "@piroko:pintobyte.com", "replaces_state": "$1483623936322ZffIk:pintobyte.com" } }, { "content": { "membership": "leave" }, "event_id": "$15015522535106022GzixO:matrix.org", "membership": "leave", "origin_server_ts": 1501552253617, "sender": "@freenode_https_GK1wmSU:matrix.org", "state_key": "@freenode_https_GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 9115699061, "replaces_state": "$15015522425105909RNqIJ:matrix.org" } }, { "content": { "avatar_url": "mxc://safaradeg.net/TfUUoDkOWpbbIwuIpShznpNp", "displayname": "Levans", "membership": "join" }, "event_id": "$1454511628128hLout:safaradeg.net", "origin_server_ts": 1454511627935, "sender": "@levans:safaradeg.net", "state_key": "@levans:safaradeg.net", "type": "m.room.member", "unsigned": { "age": 83 } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612245027jwxkM:matrix.org", "origin_server_ts": 1429261224909, "sender": "@kegan:matrix.org", "state_key": "@irc_rZr:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406727769, "replaces_state": "$1423651825859xqUsh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15020104153527907Nnjic:matrix.org", "membership": "leave", "origin_server_ts": 1502010415741, "sender": "@freenode_Obormot:matrix.org", "state_key": "@freenode_Obormot:matrix.org", "type": "m.room.member", "unsigned": { "age": 8657536937, "replaces_state": "$15019681253192926LiZyG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1510241805800567DsEdK:matrix.org", "membership": "leave", "origin_server_ts": 1510241805599, "sender": "@freenode_Guest29157:matrix.org", "state_key": "@freenode_Guest29157:matrix.org", "type": "m.room.member", "unsigned": { "age": 426147079, "replaces_state": "$1510241042785759ZNRef:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143550224073297HBtWr:matrix.org", "origin_server_ts": 1435502240366, "sender": "@thomersch:matrix.org", "state_key": "@thomersch:matrix.org", "type": "m.room.member", "unsigned": { "age": 75165712312, "replaces_state": "$143550163473031vyTLF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ndl", "membership": "join" }, "event_id": "$1486223206870216VTEAG:matrix.org", "membership": "join", "origin_server_ts": 1486223206933, "sender": "@ndl:matrix.org", "state_key": "@ndl:matrix.org", "type": "m.room.member", "unsigned": { "age": 24444745745 } }, { "content": { "avatar_url": "mxc://matrix.org/lwKaMalSqIEfNvYkKoiDnwFF#auto", "displayname": null, "membership": "join" }, "event_id": "$143927670540092pvYQy:matrix.org", "origin_server_ts": 1439276705300, "sender": "@regtest:matrix.org", "state_key": "@regtest:matrix.org", "type": "m.room.member", "unsigned": { "age": 71391247378 } }, { "content": { "avatar_url": "mxc://0db.nl/paiNnLfFOyqsBbaeLutiaYUR", "displayname": "Talle", "membership": "join" }, "event_id": "$146702016970uugKN:0db.nl", "origin_server_ts": 1467020160032, "sender": "@talle:0db.nl", "state_key": "@talle:0db.nl", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "avatar_url": "mxc://matrix.org/vVAcqiTgwyWvJeuTMrijgXNu", "displayname": "ReK2WiLdS", "membership": "join" }, "event_id": "$14985493493050875vKXgd:matrix.org", "membership": "join", "origin_server_ts": 1498549349930, "sender": "@rek2hispagatos:matrix.org", "state_key": "@rek2hispagatos:matrix.org", "type": "m.room.member", "unsigned": { "age": 12118602748 } }, { "content": { "avatar_url": "mxc://matrix.org/qLUdUwUEgjBrRyOxfzUQdRDI", "displayname": "mizmo", "membership": "join" }, "event_id": "$15035951293050163iuEEf:matrix.org", "membership": "join", "origin_server_ts": 1503595129042, "sender": "@mizmo:matrix.org", "state_key": "@mizmo:matrix.org", "type": "m.room.member", "unsigned": { "age": 7072823636 } }, { "content": { "membership": "leave" }, "event_id": "$15014433013145617stTXd:matrix.org", "membership": "leave", "origin_server_ts": 1501443301809, "sender": "@freenode_Onionnion:matrix.org", "state_key": "@freenode_Onionnion:matrix.org", "type": "m.room.member", "unsigned": { "age": 9224650869, "replaces_state": "$1489430698264211MPVxq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14490093775GQSVh:aimmac23.com:8448", "origin_server_ts": 1449009377982, "sender": "@aimmac23:aimmac23.com:8448", "state_key": "@aimmac23:aimmac23.com:8448", "type": "m.room.member", "unsigned": { "age": 61658574696, "replaces_state": "$14490086474oZBzD:aimmac23.com:8448" } }, { "content": { "membership": "leave" }, "event_id": "$1468082957331156kKwxO:matrix.org", "membership": "leave", "origin_server_ts": 1468082957913, "sender": "@voldemort:matrix.org", "state_key": "@voldemort:matrix.org", "type": "m.room.member", "unsigned": { "age": 42584994765, "replaces_state": "$1464548226303658FMvUR:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ukfJsuTFLRmOXgCcpyYejrXp", "displayname": "ERIIX Blaike", "membership": "join" }, "event_id": "$15064731361559754RbaMN:matrix.org", "membership": "join", "origin_server_ts": 1506473136206, "sender": "@ERIIX:matrix.org", "state_key": "@ERIIX:matrix.org", "type": "m.room.member", "unsigned": { "age": 4194816472 } }, { "content": { "membership": "leave" }, "event_id": "$146471864512676zgGdX:matrix.org", "membership": "leave", "origin_server_ts": 1464718645364, "sender": "@bitman:matrix.org", "state_key": "@bitman:matrix.org", "type": "m.room.member", "unsigned": { "age": 45949307314, "replaces_state": "$1464682251445763rkDfl:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "massimo", "membership": "join" }, "event_id": "$1476467014977530cNlPf:matrix.org", "membership": "join", "origin_server_ts": 1476467014526, "sender": "@massdonati:matrix.org", "state_key": "@massdonati:matrix.org", "type": "m.room.member", "unsigned": { "age": 34200938152 } }, { "content": { "avatar_url": "mxc://sijmenschoon.nl/pWxHuKLptkdgNZPTOhpcCPlg", "displayname": "Sijmen", "membership": "join" }, "event_id": "$147351621610GEBom:sijmenschoon.nl", "membership": "join", "origin_server_ts": 1473516216744, "sender": "@sijmen:sijmenschoon.nl", "state_key": "@sijmen:sijmenschoon.nl", "type": "m.room.member", "unsigned": { "age": 37151735934, "replaces_state": "$147324418190XSWEp:sijmenschoon.nl" } }, { "content": { "avatar_url": "mxc://matrix.org/RksoxldBTIOePCqIiwxFnfYV", "displayname": "Trevor Burbidge", "membership": "join" }, "event_id": "$1486160205607701PUToL:matrix.org", "membership": "join", "origin_server_ts": 1486160205757, "sender": "@tkburbidge:matrix.org", "state_key": "@tkburbidge:matrix.org", "type": "m.room.member", "unsigned": { "age": 24507746921 } }, { "content": { "membership": "leave" }, "event_id": "$14956631582024313xepPa:matrix.org", "membership": "leave", "origin_server_ts": 1495663158462, "sender": "@freenode_kegsay_:matrix.org", "state_key": "@freenode_kegsay_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004794216, "replaces_state": "$1429021547886bcZgo:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RFflWWnRuwdYbaGMGhGjjfZb", "displayname": "thejflo", "membership": "join" }, "event_id": "$1494622116493257ZwQEF:matrix.org", "membership": "join", "origin_server_ts": 1494622116080, "sender": "@thejflo:matrix.org", "state_key": "@thejflo:matrix.org", "type": "m.room.member", "unsigned": { "age": 16045836598, "replaces_state": "$1494621465486115PvEAA:matrix.org" } }, { "content": { "avatar_url": "mxc://gruenhage.xyz/HOkBeFWIoDOiuDxqXHPrFLUE", "displayname": "jcgruenhage", "membership": "join" }, "event_id": "$1510385996551HWeyw:gruenhage.xyz", "membership": "join", "origin_server_ts": 1510385996519, "sender": "@jan.christian:gruenhage.xyz", "state_key": "@jan.christian:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 281956159, "prev_content": { "avatar_url": "mxc://gruenhage.xyz/QsgpIokavDaHBQhAohxCpvVS", "displayname": "jcgruenhage", "membership": "join" }, "prev_sender": "@jan.christian:gruenhage.xyz", "replaces_state": "$1507996769575NpvqD:gruenhage.xyz" } }, { "content": { "avatar_url": "mxc://matrix.org/GZDbVdZJHFmVObcbzxQqVXwB", "displayname": "descartin", "membership": "join" }, "event_id": "$1464089135631890afZhV:matrix.org", "membership": "join", "origin_server_ts": 1464089135337, "sender": "@descartin:matrix.org", "state_key": "@descartin:matrix.org", "type": "m.room.member", "unsigned": { "age": 46578817341 } }, { "content": { "avatar_url": "mxc://matrix.org/YNhGASlCOrjVmNhxsepmkqBb#auto", "displayname": null, "membership": "join" }, "event_id": "$1438372682261572oeGJe:matrix.org", "origin_server_ts": 1438372682662, "sender": "@pl4sm4:matrix.org", "state_key": "@pl4sm4:matrix.org", "type": "m.room.member", "unsigned": { "age": 72295270016 } }, { "content": { "membership": "leave" }, "event_id": "$1476999793120AnJsA:medinasod.zapto.org", "membership": "leave", "origin_server_ts": 1476999793956, "sender": "@igor:medinasod.zapto.org", "state_key": "@igor:medinasod.zapto.org", "type": "m.room.member", "unsigned": { "age": 33668158722, "replaces_state": "$1476999477118FPdvN:medinasod.zapto.org" } }, { "content": { "avatar_url": null, "displayname": "wolfmitchell", "membership": "join" }, "event_id": "$14815763071541jrWhH:matrix.9net.org", "membership": "join", "origin_server_ts": 1481576307618, "sender": "@mitchell:matrix.9net.org", "state_key": "@mitchell:matrix.9net.org", "type": "m.room.member", "unsigned": { "age": 29091645060 } }, { "content": { "avatar_url": "mxc://matrix.org/wWEWgaIWpgHJtVQMksMeGxfZ", "displayname": "Eion Robb", "membership": "join" }, "event_id": "$15099410123125206dJNGs:matrix.org", "membership": "join", "origin_server_ts": 1509941012576, "sender": "@EionRobb:matrix.org", "state_key": "@EionRobb:matrix.org", "type": "m.room.member", "unsigned": { "age": 726940102 } }, { "content": { "avatar_url": "mxc://jpath.de/RMuJxbxbToCrvlPWpEBJWlfg", "displayname": "Jan Path", "membership": "join" }, "event_id": "$15093238898lphnD:jpath.de", "origin_server_ts": 1509323889341, "sender": "@jan:jpath.de", "state_key": "@jan:jpath.de", "type": "m.room.member", "unsigned": { "age": 22 } }, { "content": { "avatar_url": "mxc://matrix.org/gnsazfYDXcCAULRUaGKJShda", "displayname": "matrixbot (Gitter)", "membership": "join" }, "event_id": "$1486141678468909Rkfqn:matrix.org", "membership": "join", "origin_server_ts": 1486141678378, "sender": "@gitter_matrixbot:matrix.org", "state_key": "@gitter_matrixbot:matrix.org", "type": "m.room.member", "unsigned": { "age": 24526274300 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14676132432702398ptoaZ:matrix.org", "membership": "join", "origin_server_ts": 1467613243023, "sender": "@skand:matrix.org", "state_key": "@skand:matrix.org", "type": "m.room.member", "unsigned": { "age": 43054709655, "replaces_state": "$145434880314172oSBBT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15023066722245479tbeKc:matrix.org", "membership": "join", "origin_server_ts": 1502306672018, "sender": "@pamo:matrix.org", "state_key": "@pamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 8361280660 } }, { "content": { "membership": "leave" }, "event_id": "$1465583731195783oKzBS:matrix.org", "membership": "leave", "origin_server_ts": 1465583731284, "sender": "@Magnap:matrix.org", "state_key": "@Magnap:matrix.org", "type": "m.room.member", "unsigned": { "age": 45084221394, "replaces_state": "$1465576817180745CmiCn:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1504343950472301TofEL:matrix.org", "membership": "leave", "origin_server_ts": 1504343950971, "sender": "@fitmove:matrix.org", "state_key": "@fitmove:matrix.org", "type": "m.room.member", "unsigned": { "age": 6324001707, "replaces_state": "$1504343854471705CREFh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "heinz", "membership": "join" }, "event_id": "$14903421622111426PHfRB:matrix.org", "membership": "join", "origin_server_ts": 1490342162223, "sender": "@heinz:matrix.org", "state_key": "@heinz:matrix.org", "type": "m.room.member", "unsigned": { "age": 20325790455 } }, { "content": { "avatar_url": "mxc://matrix.org/hllFxWWJXeTWhXKrPinSWglb", "displayname": "peddie", "membership": "join" }, "event_id": "$1508131933610981WTVbW:matrix.org", "membership": "join", "origin_server_ts": 1508131933145, "sender": "@peddie:matrix.org", "state_key": "@peddie:matrix.org", "type": "m.room.member", "unsigned": { "age": 2536019533 } }, { "content": { "avatar_url": null, "displayname": "pawel", "membership": "join" }, "event_id": "$14846933163CEqVK:pawelmandera.com", "origin_server_ts": 1484693316233, "sender": "@pawel:pawelmandera.com", "state_key": "@pawel:pawelmandera.com", "type": "m.room.member", "unsigned": { "age": 21 } }, { "content": { "membership": "leave" }, "event_id": "$15024946291025084qyLay:matrix.org", "membership": "leave", "origin_server_ts": 1502494629595, "sender": "@freenode_Ben_:matrix.org", "state_key": "@freenode_Ben_:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173323083, "replaces_state": "$15015960105563441FETpE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149201153165921OtkwP:matrix.org", "membership": "leave", "origin_server_ts": 1492011531446, "sender": "@karieton:matrix.org", "state_key": "@karieton:matrix.org", "type": "m.room.member", "unsigned": { "age": 18656421232, "replaces_state": "$14877062982133002GziDr:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148774020121NlVtE:tjll.net", "membership": "leave", "origin_server_ts": 1487740201981, "sender": "@tylerjl:tjll.net", "state_key": "@tylerjl:tjll.net", "type": "m.room.member", "unsigned": { "age": 22927750697, "replaces_state": "$148773948920howvA:tjll.net" } }, { "content": { "membership": "leave" }, "event_id": "$14964077072004226rtFTq:matrix.org", "membership": "leave", "origin_server_ts": 1496407707152, "sender": "@waz1:matrix.org", "state_key": "@waz1:matrix.org", "type": "m.room.member", "unsigned": { "age": 14260245526, "replaces_state": "$14961484964058491qUFdh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14880564383uLEgh:teamly.eu", "membership": "leave", "origin_server_ts": 1488056438126, "sender": "@jan:teamly.eu", "state_key": "@jan:teamly.eu", "type": "m.room.member", "unsigned": { "age": 19955089, "prev_content": { "avatar_url": "mxc://teamly.eu/KkRzCDMPwCdfxsktBAFqmkeH", "displayname": "Jan", "membership": "join" }, "prev_sender": "@jan:teamly.eu", "replaces_state": "$148795604660VIADT:teamly.eu" } }, { "content": { "avatar_url": "mxc://overlordalyx.com/VuCuvtxsABSAAYLzqmKLbsKZ", "displayname": "OverlordAlyx", "membership": "join" }, "event_id": "$148723849935qigkm:overlordalyx.com", "membership": "join", "origin_server_ts": 1487238499574, "sender": "@Alyx:overlordalyx.com", "state_key": "@Alyx:overlordalyx.com", "type": "m.room.member", "unsigned": { "age": 23429453104, "prev_content": { "avatar_url": "mxc://overlordalyx.com/dljWoxNpdCVULzyRArrMMBdn", "displayname": "OverlordAlyx", "membership": "join" }, "prev_sender": "@Alyx:overlordalyx.com", "replaces_state": "$14872060743dscMP:overlordalyx.com" } }, { "content": { "membership": "leave" }, "event_id": "$1507824429280389nAqcu:matrix.org", "membership": "leave", "origin_server_ts": 1507824429424, "sender": "@rpcc8846:matrix.org", "state_key": "@rpcc8846:matrix.org", "type": "m.room.member", "unsigned": { "age": 2843523254, "replaces_state": "$1507819544191990ZTuom:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 86656", "kind": "guest", "membership": "join" }, "event_id": "$1497364893117850CwfMT:matrix.org", "membership": "join", "origin_server_ts": 1497364893365, "sender": "@86656:matrix.org", "state_key": "@86656:matrix.org", "type": "m.room.member", "unsigned": { "age": 13303059313 } }, { "content": { "avatar_url": null, "displayname": "gklech", "membership": "join" }, "event_id": "$1489669558619220vvUFD:matrix.org", "membership": "join", "origin_server_ts": 1489669558352, "sender": "@gklech:matrix.org", "state_key": "@gklech:matrix.org", "type": "m.room.member", "unsigned": { "age": 20998394326 } }, { "content": { "avatar_url": null, "displayname": "Donald Duck", "membership": "join" }, "event_id": "$14769743651GrsQI:159.100.250.180", "origin_server_ts": 1476974365686, "sender": "@test123:159.100.250.180", "state_key": "@test123:159.100.250.180", "type": "m.room.member", "unsigned": { "age": 17 } }, { "content": { "avatar_url": "mxc://h4x.no/TcSiFhSSAQcMzbFkXDJsSALI", "displayname": "si-m1", "membership": "join" }, "event_id": "$1425142042183hGIiw:h4x.no", "origin_server_ts": 1425142042988, "sender": "@si-m1:h4x.no", "state_key": "@si-m1:h4x.no", "type": "m.room.member", "unsigned": { "age": 85525909690, "replaces_state": "$1425137621181aXwsR:h4x.no" } }, { "content": { "membership": "ban" }, "event_id": "$1436901858113921HUQkM:matrix.org", "origin_server_ts": 1436901858334, "sender": "@dave:matrix.org", "state_key": "@mistake:matrix.org", "type": "m.room.member", "unsigned": { "age": 73766094344, "replaces_state": "$14344244969947WMykA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oZAoiLJpYxZLrYiIUTQoIHYw#auto", "displayname": "killme", "membership": "join" }, "event_id": "$1444082329297747TNQDR:matrix.org", "origin_server_ts": 1444082329641, "sender": "@killme:matrix.org", "state_key": "@killme:matrix.org", "type": "m.room.member", "unsigned": { "age": 66585623037 } }, { "content": { "membership": "leave" }, "event_id": "$14934087701138neluv:matrix.eastcoast.hosting", "membership": "leave", "origin_server_ts": 1493408770973, "sender": "@walle303:matrix.eastcoast.hosting", "state_key": "@walle303:matrix.eastcoast.hosting", "type": "m.room.member", "unsigned": { "age": 17259181705, "prev_content": { "avatar_url": "mxc://matrix.eastcoast.hosting/BnQCMnaTnvTLifnqLByobMUz", "displayname": "walle303", "membership": "join" }, "prev_sender": "@walle303:matrix.eastcoast.hosting", "replaces_state": "$1492925205149BriJW:matrix.eastcoast.hosting" } }, { "content": { "membership": "leave" }, "event_id": "$1470153268115Qncyb:darmstadt.ccc.de", "membership": "leave", "origin_server_ts": 1470153268317, "sender": "@miterion:darmstadt.ccc.de", "state_key": "@miterion:darmstadt.ccc.de", "type": "m.room.member", "unsigned": { "age": 40514684361, "replaces_state": "$1470153226113NKbiW:darmstadt.ccc.de" } }, { "content": { "avatar_url": "mxc://matrix.org/vuBSjBtKhBEAUsltnKuEkvcY", "displayname": "Alejandro Exojo", "membership": "join" }, "event_id": "$1459242395454237yeJfX:matrix.org", "membership": "join", "origin_server_ts": 1459242395424, "sender": "@suy:matrix.org", "state_key": "@suy:matrix.org", "type": "m.room.member", "unsigned": { "age": 51425557254 } }, { "content": { "membership": "leave" }, "event_id": "$145445100526928ZIyVR:whatthefuck.computer", "origin_server_ts": 1454451005952, "sender": "@rrix:whatthefuck.computer", "state_key": "@rrix:whatthefuck.computer", "type": "m.room.member", "unsigned": { "age": 56216946726, "replaces_state": "$144746431010160ONKRi:whatthefuck.computer" } }, { "content": { "membership": "leave" }, "event_id": "$145814565459470fTslm:matrix.org", "membership": "leave", "origin_server_ts": 1458145654654, "sender": "@kendrick:matrix.org", "state_key": "@kendrick:matrix.org", "type": "m.room.member", "unsigned": { "age": 52522298024, "replaces_state": "$14580510637067HciUL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1481446295250579QxsAF:matrix.org", "membership": "leave", "origin_server_ts": 1481446295953, "sender": "@Narfinger:matrix.org", "state_key": "@Narfinger:matrix.org", "type": "m.room.member", "unsigned": { "age": 29221656725, "replaces_state": "$147878739913928QdjMk:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Anonyx", "membership": "join" }, "event_id": "$1498087179508908nFFHm:matrix.org", "membership": "join", "origin_server_ts": 1498087179187, "sender": "@anonyx:matrix.org", "state_key": "@anonyx:matrix.org", "type": "m.room.member", "unsigned": { "age": 12580773491 } }, { "content": { "membership": "leave" }, "event_id": "$144829035068962LJPhp:matrix.org", "origin_server_ts": 1448290350430, "sender": "@udi:matrix.org", "state_key": "@udi:matrix.org", "type": "m.room.member", "unsigned": { "age": 62377602248, "replaces_state": "$144827576657938kepqp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632422026224SXVcP:matrix.org", "membership": "leave", "origin_server_ts": 1495663242345, "sender": "@freenode_Nebukadneza:matrix.org", "state_key": "@freenode_Nebukadneza:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004710333, "replaces_state": "$14748346241086254wFveK:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14866796511TkrmI:theredand.black", "origin_server_ts": 1486679650969, "sender": "@misley:theredand.black", "state_key": "@misley:theredand.black", "type": "m.room.member", "unsigned": { "age": 22 } }, { "content": { "avatar_url": null, "displayname": "d3vid", "membership": "join" }, "event_id": "$151059660374TfMUY:talk.puri.sm", "membership": "join", "origin_server_ts": 1510596603879, "sender": "@david.seaward:talk.puri.sm", "state_key": "@david.seaward:talk.puri.sm", "type": "m.room.member", "unsigned": { "age": 71348799, "replaces_state": "$151059467649opYKa:talk.puri.sm" } }, { "content": { "avatar_url": "mxc://matrix.org/CcDzsloOcDqBxNRQNOxgMakP#auto", "displayname": "Hirmes", "membership": "join" }, "event_id": "$14921510651519592AdRls:matrix.org", "membership": "join", "origin_server_ts": 1492151065549, "sender": "@MaXGGXaM:matrix.org", "state_key": "@MaXGGXaM:matrix.org", "type": "m.room.member", "unsigned": { "age": 18516887129, "replaces_state": "$1492100375997592PpiGG:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "uoltah", "membership": "join" }, "event_id": "$1491000473478884KwGJh:matrix.org", "membership": "join", "origin_server_ts": 1491000473767, "sender": "@uoltah:matrix.org", "state_key": "@uoltah:matrix.org", "type": "m.room.member", "unsigned": { "age": 19667478911 } }, { "content": { "membership": "leave" }, "event_id": "$14392981724932sJIlU:matrix.org", "origin_server_ts": 1439298172741, "sender": "@ErkNinja:matrix.org", "state_key": "@ErkNinja:matrix.org", "type": "m.room.member", "unsigned": { "age": 71369779937, "replaces_state": "$14392964774231sEhqA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1478874704321698zQEXo:matrix.org", "membership": "leave", "origin_server_ts": 1478874704538, "sender": "@freenode_Sephora:matrix.org", "state_key": "@freenode_Sephora:matrix.org", "type": "m.room.member", "unsigned": { "age": 31793248140, "replaces_state": "$1478874630321376JOZhP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/owdaXTzYxdQgnrHPKfFEsXTc", "displayname": "IBPX", "membership": "join" }, "event_id": "$145800643126717fTpVx:matrix.org", "membership": "join", "origin_server_ts": 1458006431646, "sender": "@ibpx:matrix.org", "state_key": "@ibpx:matrix.org", "type": "m.room.member", "unsigned": { "age": 52661521032, "replaces_state": "$1457885715131657HSpTh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "emerson (IRC)", "membership": "join" }, "event_id": "$15094651931498113nhzyX:matrix.org", "membership": "join", "origin_server_ts": 1509465193760, "sender": "@freenode_emerson:matrix.org", "state_key": "@freenode_emerson:matrix.org", "type": "m.room.member", "unsigned": { "age": 1202758918, "replaces_state": "$15053550195414762VUpnD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$143624728026466xQJkg:matrix.org", "origin_server_ts": 1436247280481, "sender": "@ape:matrix.org", "state_key": "@ape:matrix.org", "type": "m.room.member", "unsigned": { "age": 74420672197, "replaces_state": "$143621577316243nnJpT:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oMlkYRzoODVBsmtTRndkfTKl", "displayname": "sterling_archer", "membership": "join" }, "event_id": "$1467996721192637gqIiZ:matrix.org", "membership": "join", "origin_server_ts": 1467996721806, "sender": "@sterling_archer:matrix.org", "state_key": "@sterling_archer:matrix.org", "type": "m.room.member", "unsigned": { "age": 42671230872, "replaces_state": "$1467994371186312kSFyh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1484967973357414LGlBD:matrix.org", "membership": "leave", "origin_server_ts": 1484967973601, "sender": "@mattos:matrix.org", "state_key": "@mattos:matrix.org", "type": "m.room.member", "unsigned": { "age": 25699979077, "replaces_state": "$14843466181005164QKOsy:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "kabi", "membership": "join" }, "event_id": "$15028790032983539ssyCc:matrix.org", "membership": "join", "origin_server_ts": 1502879003884, "sender": "@hanga18:matrix.org", "state_key": "@hanga18:matrix.org", "type": "m.room.member", "unsigned": { "age": 7788948794 } }, { "content": { "avatar_url": "mxc://krtdex.com/vsKSsrMRnuQqvVRnePgCPjOp", "displayname": "seequ_", "membership": "join" }, "event_id": "$1505801323787CWNzv:krtdex.com", "membership": "join", "origin_server_ts": 1505801323639, "sender": "@seequ:krtdex.com", "state_key": "@seequ:krtdex.com", "type": "m.room.member", "unsigned": { "age": 4866629039, "replaces_state": "$1505765608682ZvzFq:krtdex.com" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145453123723637tPswX:matrix.org", "origin_server_ts": 1454531237265, "sender": "@Witaling:matrix.org", "state_key": "@Witaling:matrix.org", "type": "m.room.member", "unsigned": { "age": 56136715413 } }, { "content": { "membership": "leave" }, "event_id": "$1508469880939594EqaEK:matrix.org", "membership": "leave", "origin_server_ts": 1508469880724, "sender": "@freenode_Luyin:matrix.org", "state_key": "@freenode_Luyin:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198071954, "replaces_state": "$15058950614261941BGdiN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14896655658tyPGW:matrixtest.sw1v.org", "membership": "leave", "origin_server_ts": 1489665565130, "sender": "@richvdh:matrixtest.sw1v.org", "state_key": "@richvdh:matrixtest.sw1v.org", "type": "m.room.member", "unsigned": { "age": 1438549, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@richvdh:matrixtest.sw1v.org", "replaces_state": "$14884787381cPgtO:matrixtest.sw1v.org" } }, { "content": { "avatar_url": "mxc://matrix.org/lmskdNTCJkKyhljOMPqvwCyS", "displayname": "Kodo", "membership": "join" }, "event_id": "$14262264211383PBDDJ:matrix.org", "membership": "join", "origin_server_ts": 1426226421858, "sender": "@kodomulo:matrix.org", "state_key": "@kodomulo:matrix.org", "type": "m.room.member", "unsigned": { "age": 84441530820 } }, { "content": { "membership": "leave" }, "event_id": "$15015005834118021HdaAZ:matrix.org", "membership": "leave", "origin_server_ts": 1501500583470, "sender": "@westlanewanderer:matrix.org", "state_key": "@westlanewanderer:matrix.org", "type": "m.room.member", "unsigned": { "age": 9167369208, "replaces_state": "$15014488163212020BECMf:matrix.org" } }, { "content": { "projects": [ "SYN", "SYWEB", "SYIOS", "BOTS", "ORG", "SPEC", "SYAND", "PYT", "SYJS", "SYT" ] }, "event_id": "$143504602219291FqUUt:matrix.org", "origin_server_ts": 1435046022880, "sender": "@neb:matrix.org", "state_key": "", "type": "org.matrix.neb.plugin.jira.issues.expanding", "unsigned": { "age": 75621929798, "replaces_state": "$14319380417558Iqdat:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FevvyddZVQyvCIafFCrxnkxn", "displayname": "Dominic", "membership": "join" }, "event_id": "$15082359372021216TtYLK:matrix.org", "membership": "join", "origin_server_ts": 1508235937421, "sender": "@msrd0:matrix.org", "state_key": "@msrd0:matrix.org", "type": "m.room.member", "unsigned": { "age": 2432015257, "replaces_state": "$15082355312016446DulcR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448213198863xaVcU:matrix.org", "membership": "leave", "origin_server_ts": 1509944821996, "sender": "@freenode_Hito:matrix.org", "state_key": "@freenode_Hito:matrix.org", "type": "m.room.member", "unsigned": { "age": 723130682, "replaces_state": "$15086114542863165FvxdC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14966248674026872YHmGA:matrix.org", "membership": "leave", "origin_server_ts": 1496624867043, "sender": "@freenode_g0d355__:matrix.org", "state_key": "@freenode_g0d355__:matrix.org", "type": "m.room.member", "unsigned": { "age": 14043085635, "replaces_state": "$1495530449574127HmlVG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14673460462298433JioBF:matrix.org", "membership": "leave", "origin_server_ts": 1467346046590, "sender": "@UraniumFighters1:matrix.org", "state_key": "@UraniumFighters1:matrix.org", "type": "m.room.member", "unsigned": { "age": 43321906088, "replaces_state": "$14673443802296352hOZck:matrix.org" } }, { "content": { "avatar_url": "mxc://toppoint.de/lwCvzsmBcqAylvZzqAIlQHQO", "displayname": "sargon", "membership": "join" }, "event_id": "$1487315758104STkBe:toppoint.de", "origin_server_ts": 1487315760395, "sender": "@sargon:toppoint.de", "state_key": "@sargon:toppoint.de", "type": "m.room.member", "unsigned": { "age": 88 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1500329784941070ULZqo:matrix.org", "membership": "join", "origin_server_ts": 1500329784472, "sender": "@excelereight:matrix.org", "state_key": "@excelereight:matrix.org", "type": "m.room.member", "unsigned": { "age": 10338168206 } }, { "content": { "avatar_url": "mxc://matrix.org/YvGXZMmdVizRTNhECBKOBNNo", "displayname": "Yan Minari", "membership": "join" }, "event_id": "$15042545863293348QEZMo:matrix.org", "membership": "join", "origin_server_ts": 1504254586397, "sender": "@yangm97:matrix.org", "state_key": "@yangm97:matrix.org", "type": "m.room.member", "unsigned": { "age": 6413366281, "replaces_state": "$15042542833290489wphLX:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612595036LNjuJ:matrix.org", "origin_server_ts": 1429261259148, "sender": "@kegan:matrix.org", "state_key": "@irc_orby:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406693530, "replaces_state": "$141763448187yJbls:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612525033BnDNV:matrix.org", "origin_server_ts": 1429261252623, "sender": "@kegan:matrix.org", "state_key": "@irc_yukonbob:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406700055, "replaces_state": "$14241439442014kKnwn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "testUser", "membership": "join" }, "event_id": "$14862996651YpaKB:matrix.deathpickle.com:35026", "origin_server_ts": 1486299685504, "sender": "@test:matrix.deathpickle.com:35026", "state_key": "@test:matrix.deathpickle.com:35026", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "avatar_url": "mxc://matrix.org/EbLbtuWmKCfjevVfOrCetwrZ", "displayname": "David Taylor", "membership": "join" }, "event_id": "$150115152428217Undak:matrix.org", "membership": "join", "origin_server_ts": 1501151524044, "sender": "@dthq:matrix.org", "state_key": "@dthq:matrix.org", "type": "m.room.member", "unsigned": { "age": 9516428634, "replaces_state": "$150115152028183WZUZq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1493984393131WhLBS:office.wisbytankers.se", "membership": "leave", "origin_server_ts": 1493984393234, "sender": "@Mattias.Wass:office.wisbytankers.se", "state_key": "@Mattias.Wass:office.wisbytankers.se", "type": "m.room.member", "unsigned": { "age": 16683559444, "prev_content": { "avatar_url": null, "displayname": "Mattias.Wass", "membership": "join" }, "prev_sender": "@Mattias.Wass:office.wisbytankers.se", "replaces_state": "$1493984235130gIPEw:office.wisbytankers.se" } }, { "content": { "avatar_url": "mxc://matrix.org/xTAXEVkorjomeTLdxzGMBtrJ", "displayname": "Chickee", "membership": "join" }, "event_id": "$1456948040330202uLSOU:matrix.org", "membership": "join", "origin_server_ts": 1456948040818, "sender": "@Chickee:matrix.org", "state_key": "@Chickee:matrix.org", "type": "m.room.member", "unsigned": { "age": 53719911860 } }, { "content": { "membership": "leave" }, "event_id": "$1497334706154nSmav:maunium.net", "membership": "leave", "origin_server_ts": 1497334706391, "sender": "@tulir:maunium.net", "state_key": "@tulir:maunium.net", "type": "m.room.member", "unsigned": { "age": 13333246287, "replaces_state": "$1495199848153GewMS:maunium.net" } }, { "content": { "membership": "leave" }, "event_id": "$14974807801522580GVsFa:matrix.org", "membership": "leave", "origin_server_ts": 1497480780885, "sender": "@freenode_Takei:matrix.org", "state_key": "@freenode_Takei:matrix.org", "type": "m.room.member", "unsigned": { "age": 13187171793, "replaces_state": "$14974739571434283uaedW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XHGNNdaPmqavAWobZOUYyXKY", "displayname": "Alex ", "membership": "join" }, "event_id": "$15082540202298027ijDjd:matrix.org", "membership": "join", "origin_server_ts": 1508254020088, "sender": "@entrio:matrix.org", "state_key": "@entrio:matrix.org", "type": "m.room.member", "unsigned": { "age": 2413932590 } }, { "content": { "avatar_url": null, "displayname": "DomNomNom", "membership": "join" }, "event_id": "$149163741186wXHir:screeps.domnomnom.com", "origin_server_ts": 1491637411269, "sender": "@judge_dom:screeps.domnomnom.com", "state_key": "@judge_dom:screeps.domnomnom.com", "type": "m.room.member", "unsigned": { "age": 25, "replaces_state": "$149163740184xOqkt:screeps.domnomnom.com" } }, { "content": { "avatar_url": null, "displayname": "Vyacheslav Scherbina", "membership": "join" }, "event_id": "$1461589938299542oWDNm:matrix.org", "membership": "join", "origin_server_ts": 1461589938316, "sender": "@vyacheslav:matrix.org", "state_key": "@vyacheslav:matrix.org", "type": "m.room.member", "unsigned": { "age": 49078014362 } }, { "content": { "avatar_url": null, "displayname": "Mopolo", "membership": "join" }, "event_id": "$1490465408783294OCDQf:matrix.org", "membership": "join", "origin_server_ts": 1490465408744, "sender": "@Mopolo:matrix.org", "state_key": "@Mopolo:matrix.org", "type": "m.room.member", "unsigned": { "age": 20202543934 } }, { "content": { "membership": "leave" }, "event_id": "$1489589594140LjTzw:gemma18.uni-mb.si", "membership": "leave", "origin_server_ts": 1489589594821, "sender": "@dani:gemma18.uni-mb.si", "state_key": "@dani:gemma18.uni-mb.si", "type": "m.room.member", "unsigned": { "age": 21078357857, "prev_content": { "avatar_url": null, "displayname": "Danijel Žlaus", "membership": "join" }, "prev_sender": "@dani:gemma18.uni-mb.si", "replaces_state": "$148958247323GZjTa:gemma18.uni-mb.si" } }, { "content": { "avatar_url": null, "displayname": "Woukaine", "membership": "join" }, "event_id": "$1452384984146548JuqTr:matrix.org", "origin_server_ts": 1452384984252, "sender": "@Woukaine:matrix.org", "state_key": "@Woukaine:matrix.org", "type": "m.room.member", "unsigned": { "age": 58282968426 } }, { "content": { "avatar_url": null, "displayname": "yjchen", "membership": "join" }, "event_id": "$1477691099173155UPFDI:matrix.org", "membership": "join", "origin_server_ts": 1477691099622, "sender": "@yjchen:matrix.org", "state_key": "@yjchen:matrix.org", "type": "m.room.member", "unsigned": { "age": 32976853056 } }, { "content": { "membership": "leave" }, "event_id": "$15090448312466YtzVw:disroot.org", "membership": "leave", "origin_server_ts": 1509044831043, "sender": "@pavi:disroot.org", "state_key": "@pavi:disroot.org", "type": "m.room.member", "unsigned": { "age": 1623121635, "prev_content": { "avatar_url": "mxc://disroot.org/fxhGaJBivFrucBLfXEnBeaTM", "displayname": "pavi", "membership": "join" }, "prev_sender": "@pavi:disroot.org", "replaces_state": "$14915824716363TOaNV:disroot.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014797323888534zLTgl:matrix.org", "membership": "leave", "origin_server_ts": 1501479732034, "sender": "@freenode__GK1wmSU:matrix.org", "state_key": "@freenode__GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 9188220644, "replaces_state": "$15014795633885232ZOfLq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 94099", "kind": "guest", "membership": "join" }, "event_id": "$148303960062552uJRKF:matrix.org", "membership": "join", "origin_server_ts": 1483039600753, "sender": "@94099:matrix.org", "state_key": "@94099:matrix.org", "type": "m.room.member", "unsigned": { "age": 27628351925 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15046772551AjHFH:coding.chat", "membership": "join", "origin_server_ts": 1504677255497, "sender": "@Ultimate:coding.chat", "state_key": "@Ultimate:coding.chat", "type": "m.room.member", "unsigned": { "age": 5990697181, "prev_content": { "membership": "leave" }, "prev_sender": "@Ultimate:coding.chat", "replaces_state": "$150461122382eMjPs:coding.chat" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1474347103776613QMuBo:matrix.org", "membership": "join", "origin_server_ts": 1474347103295, "sender": "@itsthe1:matrix.org", "state_key": "@itsthe1:matrix.org", "type": "m.room.member", "unsigned": { "age": 36320849383 } }, { "content": { "avatar_url": "mxc://matrix.org/NKkECZCduHGIDARcGyNCreSE", "displayname": "hexis", "membership": "join" }, "event_id": "$1466114761215441NWIWo:matrix.org", "membership": "join", "origin_server_ts": 1466114761210, "sender": "@hexis:matrix.org", "state_key": "@hexis:matrix.org", "type": "m.room.member", "unsigned": { "age": 44553191468 } }, { "content": { "membership": "leave" }, "event_id": "$15030884952826869HhpZr:matrix.org", "membership": "leave", "origin_server_ts": 1503088495716, "sender": "@freenode_ugjka:matrix.org", "state_key": "@freenode_ugjka:matrix.org", "type": "m.room.member", "unsigned": { "age": 7579456962, "replaces_state": "$1495530174566194dcjxy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/WqdCQNYorzvvbpBWBzaxKtiH", "displayname": "Javier Quevedo", "membership": "join" }, "event_id": "$15028826013022651qMSeo:matrix.org", "membership": "join", "origin_server_ts": 1502882601908, "sender": "@senc01a:matrix.org", "state_key": "@senc01a:matrix.org", "type": "m.room.member", "unsigned": { "age": 7785350770, "replaces_state": "$1491382235645210YPOeV:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14845936172152960PwCJQ:matrix.org", "membership": "leave", "origin_server_ts": 1484593617278, "sender": "@taurec:matrix.org", "state_key": "@taurec:matrix.org", "type": "m.room.member", "unsigned": { "age": 26074335400, "replaces_state": "$14844805401586188vynGI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15014242152935197dVGKo:matrix.org", "membership": "join", "origin_server_ts": 1501424215858, "sender": "@xiaolai:matrix.org", "state_key": "@xiaolai:matrix.org", "type": "m.room.member", "unsigned": { "age": 9243736820 } }, { "content": { "avatar_url": null, "displayname": "hierophantos", "membership": "join" }, "event_id": "$14822185801448127ULKes:matrix.org", "membership": "join", "origin_server_ts": 1482218580929, "sender": "@hierophantos:matrix.org", "state_key": "@hierophantos:matrix.org", "type": "m.room.member", "unsigned": { "age": 28449371749, "replaces_state": "$146245262586649DyXgI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FTcnmncFFSNYwTIBtFnPhYhK", "displayname": "shanek", "membership": "join" }, "event_id": "$1481109783350187qQcRV:matrix.org", "membership": "join", "origin_server_ts": 1481109783232, "sender": "@shanek:matrix.org", "state_key": "@shanek:matrix.org", "type": "m.room.member", "unsigned": { "age": 29558169446 } }, { "content": { "membership": "leave" }, "event_id": "$14839762023bPlHH:matrix.bgsoft.hu", "membership": "leave", "origin_server_ts": 1483976202027, "sender": "@gergoe:matrix.bgsoft.hu", "state_key": "@gergoe:matrix.bgsoft.hu", "type": "m.room.member", "unsigned": { "age": 347440, "prev_content": { "avatar_url": "mxc://matrix.bgsoft.hu/OiUogUwUUlcshapIRmZcdumg", "displayname": "Gergő", "membership": "join" }, "prev_sender": "@gergoe:matrix.bgsoft.hu", "replaces_state": "$14839728011zaWJF:matrix.bgsoft.hu" } }, { "content": { "membership": "leave" }, "event_id": "$15095608732WjZFC:matrix.braham.eu", "membership": "leave", "origin_server_ts": 1509560873303, "sender": "@kbraham:matrix.braham.eu", "state_key": "@kbraham:matrix.braham.eu", "type": "m.room.member", "unsigned": { "age": 1107079375, "prev_content": { "avatar_url": "mxc://matrix.braham.eu/mDDkLfqlEVqqkrZsfetfMxcJ", "displayname": "KBraham", "membership": "join" }, "prev_sender": "@kbraham:matrix.braham.eu", "replaces_state": "$1498674498117OTaiZ:matrix.braham.eu" } }, { "content": { "avatar_url": "mxc://matrix.c4hx.com/nsUbnntexEmpvVvtMjNwLJkS", "displayname": "Spht", "membership": "join" }, "event_id": "$150749271333sTDsc:matrix.c4hx.com", "membership": "join", "origin_server_ts": 1507492713796, "sender": "@kalle:matrix.c4hx.com", "state_key": "@kalle:matrix.c4hx.com", "type": "m.room.member", "unsigned": { "age": 3175238882, "replaces_state": "$150743706519HksHW:matrix.c4hx.com" } }, { "content": { "avatar_url": "mxc://matrix.org/yKwzfzGJlyNpKPxUdtwieYhJ#auto", "displayname": null, "membership": "join" }, "event_id": "$14343988969787ZzbBf:matrix.org", "origin_server_ts": 1434398896972, "sender": "@nils:matrix.org", "state_key": "@nils:matrix.org", "type": "m.room.member", "unsigned": { "age": 76269055706 } }, { "content": { "membership": "leave" }, "event_id": "$14423215871988MTZwQ:matrix.org", "origin_server_ts": 1442321587829, "sender": "@liathit:matrix.org", "state_key": "@liathit:matrix.org", "type": "m.room.member", "unsigned": { "age": 68346364849, "replaces_state": "$14423211181728YlTxq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "criztovyl", "membership": "join" }, "event_id": "$1509720928176060lzqtP:matrix.org", "membership": "join", "origin_server_ts": 1509720928947, "sender": "@criztovyl:matrix.org", "state_key": "@criztovyl:matrix.org", "type": "m.room.member", "unsigned": { "age": 947023731 } }, { "content": { "avatar_url": "mxc://dotcom.kubikmilan.sk/saiELOAvhtNoxiypHBFdngXR", "displayname": "Apophys", "membership": "join" }, "event_id": "$15001572602wAXgX:dotcom.kubikmilan.sk", "origin_server_ts": 1500157254882, "sender": "@apophys:dotcom.kubikmilan.sk", "state_key": "@apophys:dotcom.kubikmilan.sk", "type": "m.room.member", "unsigned": { "age": 92, "replaces_state": "$150015258925ShOID:dotcom.kubikmilan.sk" } }, { "content": { "avatar_url": "mxc://matrix.org/tMhEbphsLFQvIKMOfoHgeVNz#auto", "displayname": "Sorch", "membership": "join" }, "event_id": "$1446491556414240KqnKd:matrix.org", "origin_server_ts": 1446491556006, "sender": "@sorch:matrix.org", "state_key": "@sorch:matrix.org", "type": "m.room.member", "unsigned": { "age": 64176396672 } }, { "content": { "membership": "leave" }, "event_id": "$14956632462026324HyFyW:matrix.org", "membership": "leave", "origin_server_ts": 1495663246273, "sender": "@freenode_^hi:matrix.org", "state_key": "@freenode_^hi:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004706405, "replaces_state": "$1483391490567578iVxFO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CDOgZOkdtiAYWgjaMFxgPmqt", "displayname": "satdav", "membership": "join" }, "event_id": "$1440954143200261NlTiE:matrix.org", "origin_server_ts": 1440954143998, "sender": "@satdav:matrix.org", "state_key": "@satdav:matrix.org", "type": "m.room.member", "unsigned": { "age": 69713808680, "replaces_state": "$1440953955200038WfBIK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14924293871918021tNBdU:matrix.org", "membership": "leave", "origin_server_ts": 1492429387946, "sender": "@erikqvam:matrix.org", "state_key": "@erikqvam:matrix.org", "type": "m.room.member", "unsigned": { "age": 18238564732, "replaces_state": "$14863810591630634uzEVN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631482024110HkRfx:matrix.org", "membership": "leave", "origin_server_ts": 1495663148568, "sender": "@freenode_Orbstheorem:matrix.org", "state_key": "@freenode_Orbstheorem:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004804110, "replaces_state": "$14899178111803171ZQGTY:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/MCgTtIkaIVQnMZtqirAkqcIw", "displayname": "Pedro Ângelo", "membership": "join" }, "event_id": "$1504581328799535IWxnZ:matrix.org", "membership": "join", "origin_server_ts": 1504581328430, "sender": "@pangelo:matrix.org", "state_key": "@pangelo:matrix.org", "type": "m.room.member", "unsigned": { "age": 6086624248 } }, { "content": { "membership": "leave" }, "event_id": "$150841969721MqloC:theta.eu.org", "membership": "leave", "origin_server_ts": 1508419697452, "sender": "@eta:theta.eu.org", "state_key": "@eta:theta.eu.org", "type": "m.room.member", "unsigned": { "age": 2248255226, "replaces_state": "$1491916605102FxZVJ:theta.eu.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XzEMCcfMTsOebjOOfjSTMulD", "displayname": "Greg K Nicholson", "membership": "join" }, "event_id": "$14984934412417669FUZzx:matrix.org", "membership": "join", "origin_server_ts": 1498493441184, "sender": "@gregknicholson:matrix.org", "state_key": "@gregknicholson:matrix.org", "type": "m.room.member", "unsigned": { "age": 12174511494 } }, { "content": { "avatar_url": "mxc://matrix.org/JBNhkyTxgjaJWbqXXbJjrtOQ#auto", "displayname": null, "membership": "join" }, "event_id": "$1447771313151900WsRTn:matrix.org", "origin_server_ts": 1447771313617, "sender": "@tulio:matrix.org", "state_key": "@tulio:matrix.org", "type": "m.room.member", "unsigned": { "age": 62896639061 } }, { "content": { "avatar_url": "mxc://matrix.org/yeSocUSmUpygFycKoODxijKc", "displayname": "Luke (old account, you want @lb:ldbco.de)", "membership": "join" }, "event_id": "$1483652371199244eFbNP:matrix.org", "membership": "join", "origin_server_ts": 1483652371826, "sender": "@lukeb:matrix.org", "state_key": "@lukeb:matrix.org", "type": "m.room.member", "unsigned": { "age": 27015580852, "replaces_state": "$14794887092305yKVik:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.xsteadfastx.org/kXdlilXjuUdFbgnJOGHCdNyK", "displayname": "xsteadfastx", "membership": "join" }, "event_id": "$15064973543218anAGL:matrix.xsteadfastx.org", "membership": "join", "origin_server_ts": 1506497354284, "sender": "@xsteadfastx:matrix.xsteadfastx.org", "state_key": "@xsteadfastx:matrix.xsteadfastx.org", "type": "m.room.member", "unsigned": { "age": 4170598394, "replaces_state": "$150278757421VfVCF:matrix.xsteadfastx.org" } }, { "content": { "membership": "leave" }, "event_id": "$1510218688449012yCWRk:matrix.org", "membership": "leave", "origin_server_ts": 1510218688922, "sender": "@freenode_noteness:matrix.org", "state_key": "@freenode_noteness:matrix.org", "type": "m.room.member", "unsigned": { "age": 449263756, "replaces_state": "$15087035913920262MVQFq:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437533416849kjQRR:matrix.org", "membership": "leave", "origin_server_ts": 1499143753127, "sender": "@freenode_wim_:matrix.org", "state_key": "@freenode_wim_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524199551, "replaces_state": "$1498276668599195nVwmo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1464037825574952XujFn:matrix.org", "membership": "leave", "origin_server_ts": 1464037825230, "sender": "@foofighter:matrix.org", "state_key": "@foofighter:matrix.org", "type": "m.room.member", "unsigned": { "age": 46630127448, "replaces_state": "$1464037771574815HbkDp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1473500150485Kiwxh:timepath.ddns.info", "membership": "leave", "origin_server_ts": 1473500150711, "sender": "@TimePath:timepath.ddns.info", "state_key": "@TimePath:timepath.ddns.info", "type": "m.room.member", "unsigned": { "age": 37167801967, "replaces_state": "$147325601223uQprM:timepath.ddns.info" } }, { "content": { "avatar_url": "mxc://matrix.org/fyrXlPzqTIwPJlnsNNcQuWKn", "displayname": "agates", "membership": "join" }, "event_id": "$1497732918197851jQyep:matrix.org", "membership": "join", "origin_server_ts": 1497732918353, "sender": "@agates:matrix.org", "state_key": "@agates:matrix.org", "type": "m.room.member", "unsigned": { "age": 12935034325, "replaces_state": "$147084276653119MeGQw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14865149652dbxMg:esko.bar", "membership": "leave", "origin_server_ts": 1486514965199, "sender": "@test:esko.bar", "state_key": "@test:esko.bar", "type": "m.room.member", "unsigned": { "age": 24152987479, "prev_content": { "avatar_url": null, "displayname": "test", "membership": "join" }, "prev_sender": "@test:esko.bar", "replaces_state": "$14865148521UTyzd:esko.bar" } }, { "content": { "membership": "leave" }, "event_id": "$1502595013314737qhoMK:matrix.org", "membership": "leave", "origin_server_ts": 1502595013455, "sender": "@freenode_togart:matrix.org", "state_key": "@freenode_togart:matrix.org", "type": "m.room.member", "unsigned": { "age": 8072939223, "replaces_state": "$15025659801860792qiHYI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ElMago", "membership": "join" }, "event_id": "$15036755587xsmnv:gatomago.com", "origin_server_ts": 1503675557991, "sender": "@elmago:gatomago.com", "state_key": "@elmago:gatomago.com", "type": "m.room.member", "unsigned": { "age": 78 } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292613005053KxKHU:matrix.org", "origin_server_ts": 1429261300141, "sender": "@kegan:matrix.org", "state_key": "@irc_oddvar:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406652537, "replaces_state": "$14278110963756ymFzk:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QnDUfUtyOxUpPYhrcFeBXtJH", "displayname": "Matt (eggster)", "membership": "join" }, "event_id": "$15041132161518425tzlNO:matrix.org", "membership": "join", "origin_server_ts": 1504113216236, "sender": "@eggster:matrix.org", "state_key": "@eggster:matrix.org", "type": "m.room.member", "unsigned": { "age": 6554736442, "replaces_state": "$15037856161425173kfuEx:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1504534518208950LROKf:matrix.org", "membership": "leave", "origin_server_ts": 1504534518086, "sender": "@jerico39:matrix.org", "state_key": "@jerico39:matrix.org", "type": "m.room.member", "unsigned": { "age": 6133434592, "replaces_state": "$1504534470208235ScSDS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1468139177409616DeAiO:matrix.org", "membership": "join", "origin_server_ts": 1468139177079, "sender": "@jorgen:matrix.org", "state_key": "@jorgen:matrix.org", "type": "m.room.member", "unsigned": { "age": 42528775599 } }, { "content": { "avatar_url": null, "displayname": "luisputnik", "membership": "join" }, "event_id": "$150167442782799fTlnE:matrix.org", "membership": "join", "origin_server_ts": 1501674427826, "sender": "@luisputnik:matrix.org", "state_key": "@luisputnik:matrix.org", "type": "m.room.member", "unsigned": { "age": 8993524852 } }, { "content": { "membership": "leave" }, "event_id": "$15053550195414767hDEOX:matrix.org", "membership": "leave", "origin_server_ts": 1505355019317, "sender": "@freenode_decayer:matrix.org", "state_key": "@freenode_decayer:matrix.org", "type": "m.room.member", "unsigned": { "age": 5312933361, "replaces_state": "$15035089471945087wHsgu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vQsUkfKcyGJStTiSBYvKqjqZ", "displayname": "J08nY", "membership": "join" }, "event_id": "$14911722061730637MfPnk:matrix.org", "membership": "join", "origin_server_ts": 1491172206298, "sender": "@J08nY:matrix.org", "state_key": "@J08nY:matrix.org", "type": "m.room.member", "unsigned": { "age": 19495746380 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$147307513714vtRZi:tribut.de", "origin_server_ts": 1473075137159, "sender": "@yannick:tribut.de", "state_key": "@yannick:tribut.de", "type": "m.room.member", "unsigned": { "age": 5 } }, { "content": { "membership": "leave" }, "event_id": "$1490362534377nmfLx:matrix.xwiki.com", "membership": "leave", "origin_server_ts": 1490362534588, "sender": "@cdelisle:matrix.xwiki.com", "state_key": "@cdelisle:matrix.xwiki.com", "type": "m.room.member", "unsigned": { "age": 20305418090, "replaces_state": "$148968016516GowXi:matrix.xwiki.com" } }, { "content": { "avatar_url": "mxc://matrix.org/XAlCJJMdjSUttAjnmDrWwTBu", "displayname": "djokeefe", "membership": "join" }, "event_id": "$14845875452105668ApCRJ:matrix.org", "membership": "join", "origin_server_ts": 1484587545950, "sender": "@djokeefe:matrix.org", "state_key": "@djokeefe:matrix.org", "type": "m.room.member", "unsigned": { "age": 26080406728 } }, { "content": { "membership": "leave" }, "event_id": "$14848452593616747tgZvn:matrix.org", "membership": "leave", "origin_server_ts": 1484845259846, "sender": "@lanker:matrix.org", "state_key": "@lanker:matrix.org", "type": "m.room.member", "unsigned": { "age": 25822692832, "replaces_state": "$1479805923846678GtRgx:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/MMAmKzYyDfWxRqxqcPTUUEPo", "displayname": "q", "membership": "join" }, "event_id": "$14669387371563011GMweo:matrix.org", "membership": "join", "origin_server_ts": 1466938737402, "sender": "@q:matrix.org", "state_key": "@q:matrix.org", "type": "m.room.member", "unsigned": { "age": 43729215276, "replaces_state": "$14669203401545646clzML:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/tRFlnWpCNeTymeIvjuOltrQi", "displayname": null, "membership": "join" }, "event_id": "$15099301882894406VJpTC:matrix.org", "membership": "join", "origin_server_ts": 1509930188486, "sender": "@boson:matrix.org", "state_key": "@boson:matrix.org", "type": "m.room.member", "unsigned": { "age": 737764192 } }, { "content": { "avatar_url": "mxc://matrix.org/dGiwMtqLZitJamGhVPjYqclN", "displayname": "Dave's Testing Account", "membership": "join" }, "event_id": "$1490205281906556swXIx:matrix.org", "membership": "join", "origin_server_ts": 1490205281157, "sender": "@davetest:matrix.org", "state_key": "@davetest:matrix.org", "type": "m.room.member", "unsigned": { "age": 20462671521, "replaces_state": "$1423522041190IJZZb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Joachim", "membership": "join" }, "event_id": "$1416420962355lXWmM:matrix.org", "membership": "join", "origin_server_ts": 1412776406892, "sender": "@joachim:matrix.org", "state_key": "@joachim:matrix.org", "stream_ordering": 11911, "type": "m.room.member", "unsigned": { "age": 94246990323 } }, { "content": { "membership": "leave" }, "event_id": "$145405624988526sSdFG:matrix.org", "origin_server_ts": 1454056249733, "sender": "@PereiraAurore:matrix.org", "state_key": "@PereiraAurore:matrix.org", "type": "m.room.member", "unsigned": { "age": 56611702945, "replaces_state": "$145405623888522dxILE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DoOrcNwyloaOgWwtgxaSHOak", "displayname": "hl", "membership": "join" }, "event_id": "$15089417501512578KWFhi:matrix.org", "membership": "join", "origin_server_ts": 1508941750533, "sender": "@148833:matrix.org", "state_key": "@148833:matrix.org", "type": "m.room.member", "unsigned": { "age": 1726202145 } }, { "content": { "membership": "leave" }, "event_id": "$150167406910034ssWEI:ar1as.space", "membership": "leave", "origin_server_ts": 1501674069483, "sender": "@aria:ar1as.space", "state_key": "@aria:ar1as.space", "type": "m.room.member", "unsigned": { "age": 8993883195, "replaces_state": "$15016503346965OvMru:ar1as.space" } }, { "content": { "avatar_url": "mxc://matrix.org/zZzhQGWbqMmeUcklamrYHRTO#auto", "displayname": null, "membership": "join" }, "event_id": "$1446057596101638oDOqx:matrix.org", "origin_server_ts": 1446057596562, "sender": "@steventestaccount:matrix.org", "state_key": "@steventestaccount:matrix.org", "type": "m.room.member", "unsigned": { "age": 64610356116 } }, { "content": { "avatar_url": null, "displayname": "aclark", "membership": "join" }, "event_id": "$144066842413QhPTR:matrix.org", "membership": "join", "origin_server_ts": 1440668424438, "sender": "@aclark:matrix.org", "state_key": "@aclark:matrix.org", "type": "m.room.member", "unsigned": { "age": 69999528240, "replaces_state": "$144066763228GlQHh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 145777", "kind": "guest", "membership": "join" }, "event_id": "$14863860841654554bukVO:matrix.org", "membership": "join", "origin_server_ts": 1486386084665, "sender": "@145777:matrix.org", "state_key": "@145777:matrix.org", "type": "m.room.member", "unsigned": { "age": 24281868013 } }, { "content": { "avatar_url": null, "displayname": "teej (IRC)", "membership": "join" }, "event_id": "$15087627754878942YDcys:matrix.org", "membership": "join", "origin_server_ts": 1508762775677, "sender": "@freenode_teej:matrix.org", "state_key": "@freenode_teej:matrix.org", "type": "m.room.member", "unsigned": { "age": 1905177001 } }, { "content": { "avatar_url": "mxc://matrix.org/WiWLAUyMPYxWsgTVwDxOPuCN#auto", "displayname": null, "membership": "join" }, "event_id": "$14372382282476DFpWC:matrix.org", "origin_server_ts": 1437238228707, "sender": "@TheBeefiest:matrix.org", "state_key": "@TheBeefiest:matrix.org", "type": "m.room.member", "unsigned": { "age": 73429723971 } }, { "content": { "membership": "leave" }, "event_id": "$15087310084511322UCYVi:matrix.org", "membership": "leave", "origin_server_ts": 1508731008408, "sender": "@freenode_arekinath_:matrix.org", "state_key": "@freenode_arekinath_:matrix.org", "type": "m.room.member", "unsigned": { "age": 1936944270, "replaces_state": "$1496950576199513QcUit:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "merk", "membership": "join" }, "event_id": "$1510322279800098cKpTP:matrix.org", "membership": "join", "origin_server_ts": 1510322279559, "sender": "@merk:matrix.org", "state_key": "@merk:matrix.org", "type": "m.room.member", "unsigned": { "age": 345673119 } }, { "content": { "avatar_url": null, "displayname": "Guest 198240", "kind": "guest", "membership": "join" }, "event_id": "$1491336545242866qmJrG:matrix.org", "membership": "join", "origin_server_ts": 1491336545480, "sender": "@198240:matrix.org", "state_key": "@198240:matrix.org", "type": "m.room.member", "unsigned": { "age": 19331407198 } }, { "content": { "avatar_url": null, "displayname": "jane777", "membership": "join" }, "event_id": "$15096245633654688QxkLn:matrix.org", "membership": "join", "origin_server_ts": 1509624563114, "sender": "@jane777:matrix.org", "state_key": "@jane777:matrix.org", "type": "m.room.member", "unsigned": { "age": 1043389564 } }, { "content": { "avatar_url": "mxc://matrix.org/FHOkGaCPEztYmMgEuHRZWVPF", "displayname": "Sijmen Schoon", "membership": "join" }, "event_id": "$15075947451597602Nheyc:matrix.org", "membership": "join", "origin_server_ts": 1507594745987, "sender": "@SijmenSchoon:matrix.org", "state_key": "@SijmenSchoon:matrix.org", "type": "m.room.member", "unsigned": { "age": 3073206691 } }, { "content": { "avatar_url": "mxc://matrix.org/XdDLyRLnGSXocqRwSoXFqQQx#auto", "displayname": null, "membership": "join" }, "event_id": "$1448959426247644qwohm:matrix.org", "origin_server_ts": 1448959426997, "sender": "@aluisyo:matrix.org", "state_key": "@aluisyo:matrix.org", "type": "m.room.member", "unsigned": { "age": 61708525681 } }, { "content": { "avatar_url": "mxc://matrix.org/acfVzdbUkyAHVLLXNmWkPuGU", "displayname": "sectoid", "membership": "join" }, "event_id": "$14307667673289rcmYe:matrix.org", "origin_server_ts": 1430766767713, "sender": "@sectoid:matrix.org", "state_key": "@sectoid:matrix.org", "type": "m.room.member", "unsigned": { "age": 79901184965, "replaces_state": "$14307667523287naDGm:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/osmjghPisYojEZOFCrMBdzYx#auto", "displayname": "Andrea S.", "membership": "join" }, "event_id": "$1450435662908NtFCb:matrix.org", "origin_server_ts": 1450435662822, "sender": "@a.stella:matrix.org", "state_key": "@a.stella:matrix.org", "type": "m.room.member", "unsigned": { "age": 60232289856 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1506795358276214VwzeY:matrix.org", "membership": "join", "origin_server_ts": 1506795358769, "sender": "@jchen:matrix.org", "state_key": "@jchen:matrix.org", "type": "m.room.member", "unsigned": { "age": 3872593909 } }, { "content": { "membership": "leave" }, "event_id": "$14991437543416880EUvri:matrix.org", "membership": "leave", "origin_server_ts": 1499143754552, "sender": "@freenode_Aeyris_:matrix.org", "state_key": "@freenode_Aeyris_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524198126, "replaces_state": "$14979278651496165QucYV:matrix.org" } }, { "content": { "avatar_url": "mxc://alicerobotics.cf/POqLMhVKMblmLJzSXTXtByIS", "displayname": "Alice", "membership": "join" }, "event_id": "$15096008382419LhMCG:alicerobotics.cf", "origin_server_ts": 1509600838261, "sender": "@alice:alicerobotics.cf", "state_key": "@alice:alicerobotics.cf", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "membership": "leave" }, "event_id": "$14889685162SSBVj:nebelhauch.de", "membership": "leave", "origin_server_ts": 1488968516360, "sender": "@jpietron:nebelhauch.de", "state_key": "@jpietron:nebelhauch.de", "type": "m.room.member", "unsigned": { "age": 9634672, "prev_content": { "avatar_url": null, "displayname": "crispinus", "membership": "join" }, "prev_sender": "@jpietron:nebelhauch.de", "replaces_state": "$14889684351rPyiE:nebelhauch.de" } }, { "content": { "avatar_url": null, "displayname": "teej", "membership": "join" }, "event_id": "$15087401824613144yigjx:matrix.org", "membership": "join", "origin_server_ts": 1508740182383, "sender": "@teej:matrix.org", "state_key": "@teej:matrix.org", "type": "m.room.member", "unsigned": { "age": 1927770295 } }, { "content": { "avatar_url": "mxc://chat.tei.li/vIsiLZSJZeXnNRzHVewNnZjG", "displayname": "Stefan (@sschueller:chat.tei.li)", "membership": "join" }, "event_id": "$146459766055gnbuO:chat.tei.li", "membership": "join", "origin_server_ts": 1464597660013, "sender": "@sschueller:chat.tei.li", "state_key": "@sschueller:chat.tei.li", "type": "m.room.member", "unsigned": { "age": 46070292665, "replaces_state": "$146455499546uBSTl:chat.tei.li" } }, { "content": { "avatar_url": null, "displayname": "NoOneButMe (IRC)", "membership": "join" }, "event_id": "$15083314933391712gVECa:matrix.org", "membership": "join", "origin_server_ts": 1508331493071, "sender": "@freenode_NoOneButMe:matrix.org", "state_key": "@freenode_NoOneButMe:matrix.org", "type": "m.room.member", "unsigned": { "age": 2336459607, "replaces_state": "$15083308233383437VSJdL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631542024239OXJNP:matrix.org", "membership": "leave", "origin_server_ts": 1495663154791, "sender": "@freenode_Toast3r:matrix.org", "state_key": "@freenode_Toast3r:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004797887, "replaces_state": "$14298145922478PBATg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15039835043480010uTaUA:matrix.org", "membership": "join", "origin_server_ts": 1503983504542, "sender": "@auditcranium:matrix.org", "state_key": "@auditcranium:matrix.org", "type": "m.room.member", "unsigned": { "age": 6684448136 } }, { "content": { "avatar_url": "mxc://matrix.org/wgoehTWngIunWJoKoumdVmHF", "displayname": "the_general", "membership": "join" }, "event_id": "$14966074153773081ETUhN:matrix.org", "membership": "join", "origin_server_ts": 1496607415781, "sender": "@general50:matrix.org", "state_key": "@general50:matrix.org", "type": "m.room.member", "unsigned": { "age": 14060536897, "replaces_state": "$14965983053674819edeTi:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15010660984798972uHTZn:matrix.org", "membership": "leave", "origin_server_ts": 1501066098095, "sender": "@Neco:matrix.org", "state_key": "@Neco:matrix.org", "type": "m.room.member", "unsigned": { "age": 9601854583, "replaces_state": "$15010592164723682gBZJQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/epEsstRLpSbyqhBiVHGjCECv", "displayname": "Mjark", "membership": "join" }, "event_id": "$1451216930261081fhXLu:matrix.org", "origin_server_ts": 1451216930273, "sender": "@Mjark:matrix.org", "state_key": "@Mjark:matrix.org", "type": "m.room.member", "unsigned": { "age": 59451022405, "replaces_state": "$144438156079633beFoO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632512026464cjjZk:matrix.org", "membership": "leave", "origin_server_ts": 1495663251546, "sender": "@freenode_][Sipste-:matrix.org", "state_key": "@freenode_][Sipste-:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004701132, "replaces_state": "$143594182714165EZgZO:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "d4vid2", "membership": "join" }, "event_id": "$15051646262656195VLOBs:matrix.org", "membership": "join", "origin_server_ts": 1505164626383, "sender": "@d4vid2:matrix.org", "state_key": "@d4vid2:matrix.org", "type": "m.room.member", "unsigned": { "age": 5503326295 } }, { "content": { "avatar_url": null, "displayname": "GreyCat", "kind": "guest", "membership": "join" }, "event_id": "$1486165820643914MgtZD:matrix.org", "membership": "join", "origin_server_ts": 1486165820191, "sender": "@143992:matrix.org", "state_key": "@143992:matrix.org", "type": "m.room.member", "unsigned": { "age": 24502132487 } }, { "content": { "membership": "leave" }, "event_id": "$143549917072245yHZjs:matrix.org", "origin_server_ts": 1435499170163, "sender": "@xojoc:matrix.org", "state_key": "@xojoc:matrix.org", "type": "m.room.member", "unsigned": { "age": 75168782515, "replaces_state": "$143549914772235OtagP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1508469881939604UhbdU:matrix.org", "membership": "leave", "origin_server_ts": 1508469881161, "sender": "@freenode_bin8me:matrix.org", "state_key": "@freenode_bin8me:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198071517, "replaces_state": "$1507642467228020ugpyg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "breakpointer", "membership": "join" }, "event_id": "$1469918120754836sgAXY:matrix.org", "membership": "join", "origin_server_ts": 1469918120460, "sender": "@breakpointer:matrix.org", "state_key": "@breakpointer:matrix.org", "type": "m.room.member", "unsigned": { "age": 40749832218, "replaces_state": "$14672508502110158eCZUz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14940927408nxtin:horel.org", "membership": "leave", "origin_server_ts": 1494092740212, "sender": "@Thibaut:horel.org", "state_key": "@Thibaut:horel.org", "type": "m.room.member", "unsigned": { "age": 16575212466, "prev_content": { "avatar_url": null, "displayname": "Thibaut", "membership": "join" }, "prev_sender": "@Thibaut:horel.org", "replaces_state": "$14940926367Vsekx:horel.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14437836227jUjSL:lovely.beer", "origin_server_ts": 1443783622924, "sender": "@slack_matthew:lovely.beer", "state_key": "@slack_matthew:lovely.beer", "type": "m.room.member", "unsigned": { "age": 66884329754, "replaces_state": "$144374123862IKrat:lovely.beer" } }, { "content": { "avatar_url": "mxc://christian-vogeley.de/hLqFPCtfUxyyGaVKaaxlyeNK", "displayname": "Christian", "membership": "join" }, "event_id": "$14797673856FOLiI:christian-vogeley.de", "membership": "join", "origin_server_ts": 1479767385917, "sender": "@christian:christian-vogeley.de", "state_key": "@christian:christian-vogeley.de", "type": "m.room.member", "unsigned": { "age": 30900566761, "prev_content": { "avatar_url": "mxc://christian-vogeley.de/ruHUejdtUPBUfMcqUwYXFqIg", "displayname": "Christian", "membership": "join" }, "prev_sender": "@christian:christian-vogeley.de", "replaces_state": "$14772421993XovpF:christian-vogeley.de" } }, { "content": { "avatar_url": null, "displayname": "stuffacct", "membership": "join" }, "event_id": "$15095639992892459ejanV:matrix.org", "membership": "join", "origin_server_ts": 1509563999613, "sender": "@stuffacct:matrix.org", "state_key": "@stuffacct:matrix.org", "type": "m.room.member", "unsigned": { "age": 1103953065 } }, { "content": { "membership": "leave" }, "event_id": "$1476007573888789OgKQr:matrix.org", "membership": "leave", "origin_server_ts": 1476007573093, "sender": "@57557:matrix.org", "state_key": "@57557:matrix.org", "type": "m.room.member", "unsigned": { "age": 34660379585, "replaces_state": "$1476007102887898KcRLV:matrix.org" } }, { "content": { "avatar_url": "mxc://lovely.beer/ijUcbtysrPWlYsBKNcWVMveJ#auto", "displayname": "Keg of beer", "membership": "join" }, "event_id": "$14470657900YIuNv:lovely.beer", "origin_server_ts": 1447065790717, "sender": "@kegan:lovely.beer", "state_key": "@kegan:lovely.beer", "type": "m.room.member", "unsigned": { "age": 45853663 } }, { "content": { "membership": "leave" }, "event_id": "$1465617686247255JanMp:matrix.org", "membership": "leave", "origin_server_ts": 1465617686159, "sender": "@dakrone:matrix.org", "state_key": "@dakrone:matrix.org", "type": "m.room.member", "unsigned": { "age": 45050266519, "replaces_state": "$1465572603171342VgLPp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "erenPhayte", "membership": "join" }, "event_id": "$15051409582268173ihUYG:matrix.org", "membership": "join", "origin_server_ts": 1505140958854, "sender": "@erenPhayte:matrix.org", "state_key": "@erenPhayte:matrix.org", "type": "m.room.member", "unsigned": { "age": 5526993824 } }, { "content": { "avatar_url": null, "displayname": "Alex", "membership": "join" }, "event_id": "$1464683178446628NFNQE:matrix.org", "membership": "join", "origin_server_ts": 1464683178408, "sender": "@12611:matrix.org", "state_key": "@12611:matrix.org", "type": "m.room.member", "unsigned": { "age": 45984774270 } }, { "content": { "membership": "leave" }, "event_id": "$14956631782024741JbTXQ:matrix.org", "membership": "leave", "origin_server_ts": 1495663178411, "sender": "@freenode_Perceptes:matrix.org", "state_key": "@freenode_Perceptes:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004774267, "replaces_state": "$145396016084635uzgkp:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YCWWbbActhSsoVLrPMNHKVlJ", "displayname": "homulilly", "membership": "join" }, "event_id": "$14936700882090230cMAxq:matrix.org", "membership": "join", "origin_server_ts": 1493670088200, "sender": "@homulilly:matrix.org", "state_key": "@homulilly:matrix.org", "type": "m.room.member", "unsigned": { "age": 16997864478 } }, { "content": { "membership": "leave" }, "event_id": "$14828780343003202MbVxA:matrix.org", "membership": "leave", "origin_server_ts": 1482878034810, "sender": "@david.blewett:matrix.org", "state_key": "@david.blewett:matrix.org", "type": "m.room.member", "unsigned": { "age": 27789917868, "replaces_state": "$14828626062893893TbinZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$151001329241078WkRYl:matrix.org", "membership": "leave", "origin_server_ts": 1510013292381, "sender": "@freenode_Joikervg:matrix.org", "state_key": "@freenode_Joikervg:matrix.org", "type": "m.room.member", "unsigned": { "age": 654660297, "replaces_state": "$151001328240816wcqHK:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eMpNdIsdAaZvVCDjSafEFmns", "displayname": "Vezca", "membership": "join" }, "event_id": "$15015963155575656JTEIm:matrix.org", "membership": "join", "origin_server_ts": 1501596315276, "sender": "@Vezca:matrix.org", "state_key": "@Vezca:matrix.org", "type": "m.room.member", "unsigned": { "age": 9071637402 } }, { "content": { "avatar_url": "mxc://matrix.org/zKlifpJbvKpQNZsYkuckUiIa#auto", "displayname": "s6", "membership": "join" }, "event_id": "$143662983217785PZhpn:matrix.org", "origin_server_ts": 1436629832075, "sender": "@s6:matrix.org", "state_key": "@s6:matrix.org", "type": "m.room.member", "unsigned": { "age": 74038120603, "replaces_state": "$1436535907128361hjhyU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149186499211exsRY:wlcx.cc", "membership": "leave", "origin_server_ts": 1491864992839, "sender": "@sam_w:wlcx.cc", "state_key": "@sam_w:wlcx.cc", "type": "m.room.member", "unsigned": { "age": 18802959839, "prev_content": { "avatar_url": null, "displayname": "sam_w", "membership": "join" }, "prev_sender": "@sam_w:wlcx.cc", "replaces_state": "$148382518151ZXySE:wlcx.cc" } }, { "content": { "membership": "leave" }, "event_id": "$14937216121QsPDf:agnos.is", "membership": "leave", "origin_server_ts": 1493721612530, "sender": "@projectmoon:agnos.is", "state_key": "@projectmoon:agnos.is", "type": "m.room.member", "unsigned": { "age": 16946340148, "prev_content": { "avatar_url": null, "displayname": "projectmoon", "membership": "join" }, "prev_sender": "@projectmoon:agnos.is", "replaces_state": "$14937174718CzQTp:agnos.is" } }, { "content": { "avatar_url": "mxc://matrix.org/KvwLSjeessZkxPTFUSvWoGLr", "displayname": "Tim", "membership": "join" }, "event_id": "$1476214724215056uFNfq:matrix.org", "membership": "join", "origin_server_ts": 1476214724364, "sender": "@tsuggs:matrix.org", "state_key": "@tsuggs:matrix.org", "type": "m.room.member", "unsigned": { "age": 34453228314 } }, { "content": { "avatar_url": "mxc://matrix.org/vatXdRVAWsRgKCZOxyftjOOm", "displayname": "Half-Shot (Matrix Acct)", "membership": "join" }, "event_id": "$147457003588018uotUz:matrix.org", "membership": "join", "origin_server_ts": 1474570035609, "sender": "@Half-Shot:matrix.org", "state_key": "@Half-Shot:matrix.org", "type": "m.room.member", "unsigned": { "age": 36097917069, "replaces_state": "$147456972166OGeoH:jki.re" } }, { "content": { "avatar_url": null, "displayname": "bryce234", "membership": "join" }, "event_id": "$15085187951763507PdCAS:matrix.org", "membership": "join", "origin_server_ts": 1508518795737, "sender": "@bryce234:matrix.org", "state_key": "@bryce234:matrix.org", "type": "m.room.member", "unsigned": { "age": 2149156941 } }, { "content": { "avatar_url": "mxc://matrix.org/UpYvfrmKFFXDOpLXiouRzEMy", "displayname": "Mathias Dannesbo", "membership": "join" }, "event_id": "$1437144043194553dylOi:matrix.org", "membership": "join", "origin_server_ts": 1437144043249, "sender": "@neic:matrix.org", "state_key": "@neic:matrix.org", "type": "m.room.member", "unsigned": { "age": 73523909429 } }, { "age_ts": 1503498133284, "content": { "avatar_url": "mxc://imninja.net/GyLhBiUpKDxpWiXqoDRMuJIk", "displayname": "lub", "membership": "join" }, "event_id": "$150349812855pZgsY:imninja.net", "origin_server_ts": 1503498132486, "sender": "@lub:imninja.net", "state_key": "@lub:imninja.net", "type": "m.room.member", "unsigned": { "age": 27, "replaces_state": "$14869781873TppzU:imninja.net" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$14757492092653773pwPFj:matrix.org", "membership": "leave", "origin_server_ts": 1475749209398, "sender": "@56375:matrix.org", "state_key": "@56375:matrix.org", "type": "m.room.member", "unsigned": { "age": 34918743280, "replaces_state": "$14757490432650322AgBgK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149157156211355ZyaQg:matrix.org", "membership": "leave", "origin_server_ts": 1491571562674, "sender": "@KingKong:matrix.org", "state_key": "@KingKong:matrix.org", "type": "m.room.member", "unsigned": { "age": 19096390004, "replaces_state": "$14915712747825ggmeg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "test", "membership": "join" }, "event_id": "$15030046449PHooe:matrix.derguhl.de", "origin_server_ts": 1503004644100, "sender": "@test:matrix.derguhl.de", "state_key": "@test:matrix.derguhl.de", "type": "m.room.member", "unsigned": { "age": 15 } }, { "content": { "avatar_url": "mxc://matrix.org/mWIVJVeCLZCoRtRybAPgVTyO", "displayname": "Vitrivius", "membership": "join" }, "event_id": "$1423304099658GPycU:matrix.org", "membership": "join", "origin_server_ts": 1423304099043, "sender": "@vitrivius:matrix.org", "state_key": "@vitrivius:matrix.org", "type": "m.room.member", "unsigned": { "age": 87363853635 } }, { "content": { "avatar_url": "mxc://unroot.de/mHEUAMCMNxZANnqsxtHDDpXg", "displayname": "eleete0712", "membership": "join" }, "event_id": "$15021802381UxMyB:unroot.de", "origin_server_ts": 1502180238241, "sender": "@yannic:unroot.de", "state_key": "@yannic:unroot.de", "type": "m.room.member", "unsigned": { "age": 60 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15083468453664603sfWcj:matrix.org", "membership": "join", "origin_server_ts": 1508346845978, "sender": "@mary-test:matrix.org", "state_key": "@mary-test:matrix.org", "type": "m.room.member", "unsigned": { "age": 2321106700 } }, { "content": { "avatar_url": null, "displayname": "stephanj", "membership": "join" }, "event_id": "$1503433754899527JkeSd:matrix.org", "membership": "join", "origin_server_ts": 1503433754344, "sender": "@stephanj:matrix.org", "state_key": "@stephanj:matrix.org", "type": "m.room.member", "unsigned": { "age": 7234198334 } }, { "content": { "membership": "leave" }, "event_id": "$148908293741vAyjc:cascadian.network", "membership": "leave", "origin_server_ts": 1489082937394, "sender": "@dougfir:cascadian.network", "state_key": "@dougfir:cascadian.network", "type": "m.room.member", "unsigned": { "age": 733244, "prev_content": { "avatar_url": null, "displayname": "dougfir", "membership": "join" }, "prev_sender": "@dougfir:cascadian.network", "replaces_state": "$148908286740jRMCl:cascadian.network" } }, { "content": { "avatar_url": "mxc://matrix.org/EeNtxYnfEJiNOXYzcSKkYrwh#auto", "displayname": null, "membership": "join" }, "event_id": "$14306708581606JWwOR:matrix.org", "origin_server_ts": 1430670858844, "sender": "@spranklesmookie2:matrix.org", "state_key": "@spranklesmookie2:matrix.org", "type": "m.room.member", "unsigned": { "age": 79997093834 } }, { "content": { "avatar_url": null, "displayname": "keyvan (IRC)", "membership": "join" }, "event_id": "$1481404231142243RWqHc:matrix.org", "membership": "join", "origin_server_ts": 1481404231333, "sender": "@freenode_keyvan:matrix.org", "state_key": "@freenode_keyvan:matrix.org", "type": "m.room.member", "unsigned": { "age": 29263721345 } }, { "content": { "avatar_url": null, "displayname": "elcyborg", "membership": "join" }, "event_id": "$14978466691vszKH:matrix.elcyb.org", "origin_server_ts": 1497846669031, "sender": "@elcyborg:matrix.elcyb.org", "state_key": "@elcyborg:matrix.elcyb.org", "type": "m.room.member", "unsigned": { "age": 118 } }, { "content": { "membership": "leave" }, "event_id": "$1487369783116TiiGV:pook.it", "membership": "leave", "origin_server_ts": 1487369783988, "sender": "@stuart:pook.it", "state_key": "@stuart:pook.it", "type": "m.room.member", "unsigned": { "age": 23298168690, "prev_content": { "avatar_url": null, "displayname": "Stuart π", "membership": "join" }, "prev_sender": "@stuart:pook.it", "replaces_state": "$148693942315WZkAg:pook.it" } }, { "content": { "avatar_url": null, "displayname": "Max", "kind": "guest", "membership": "join" }, "event_id": "$14866423723235626YhVPW:matrix.org", "membership": "join", "origin_server_ts": 1486642372221, "sender": "@148425:matrix.org", "state_key": "@148425:matrix.org", "type": "m.room.member", "unsigned": { "age": 24025580457, "replaces_state": "$14866423563235552dmJOt:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "adru_ (IRC)", "membership": "join" }, "event_id": "$15106292251256753ywZFJ:matrix.org", "membership": "join", "origin_server_ts": 1510629225714, "sender": "@freenode_adru_:matrix.org", "state_key": "@freenode_adru_:matrix.org", "type": "m.room.member", "unsigned": { "age": 38726964, "replaces_state": "$1497434448902297DHCIN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14848633923759036dHDYf:matrix.org", "membership": "leave", "origin_server_ts": 1484863392073, "sender": "@tomfitzhenry:matrix.org", "state_key": "@tomfitzhenry:matrix.org", "type": "m.room.member", "unsigned": { "age": 25804560605, "replaces_state": "$14229213501730PHsnA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632242025793AcVrY:matrix.org", "membership": "leave", "origin_server_ts": 1495663224841, "sender": "@freenode_Audrey:matrix.org", "state_key": "@freenode_Audrey:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004727837, "replaces_state": "$14794447351228102hwDqC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KvSxXVFvMMUsEsUQxuqTHLtz", "displayname": "traverseda", "membership": "join" }, "event_id": "$15085979352677155uytvg:matrix.org", "membership": "join", "origin_server_ts": 1508597935307, "sender": "@traverseda:matrix.org", "state_key": "@traverseda:matrix.org", "type": "m.room.member", "unsigned": { "age": 2070017371, "replaces_state": "$1490134246347041OvTas:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ssBQsNOMYwGQoAKEBTJLkQda", "displayname": "Patrik Oldsberg", "membership": "join" }, "event_id": "$143455259125WWjfc:matrix.org", "membership": "join", "origin_server_ts": 1434552591596, "sender": "@rugvip:matrix.org", "state_key": "@rugvip:matrix.org", "type": "m.room.member", "unsigned": { "age": 76115361082, "replaces_state": "$14284795304102dGwxv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15029853101539872KxqSo:matrix.org", "membership": "leave", "origin_server_ts": 1502985310441, "sender": "@vegai:matrix.org", "state_key": "@vegai:matrix.org", "type": "m.room.member", "unsigned": { "age": 7682642237, "replaces_state": "$1493017927492199OUoxM:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OdLsrTtoAzwWdKOVPGGVScvH", "displayname": "kodo", "membership": "join" }, "event_id": "$1503730983898568kzjEo:matrix.org", "membership": "join", "origin_server_ts": 1503730983751, "sender": "@kodo:matrix.org", "state_key": "@kodo:matrix.org", "type": "m.room.member", "unsigned": { "age": 6936968927, "replaces_state": "$14953884761397339kvqEe:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/rZESKqAuYldHWEcBWUwNPfli", "displayname": "Sergey Nikitin", "membership": "join" }, "event_id": "$1437085128177873wUqdT:matrix.org", "membership": "join", "origin_server_ts": 1437085128821, "sender": "@sergeynikitin:matrix.org", "state_key": "@sergeynikitin:matrix.org", "type": "m.room.member", "unsigned": { "age": 73582823857 } }, { "content": { "avatar_url": "mxc://matrix.org/aIAqqbhvdcUUxPkMwXKBPzFm", "displayname": "Sebastian Rojo", "membership": "join" }, "event_id": "$1444446892119671bOBtu:matrix.org", "origin_server_ts": 1444446892845, "sender": "@arpagon:matrix.org", "state_key": "@arpagon:matrix.org", "type": "m.room.member", "unsigned": { "age": 66221059833 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1489237839820944nLYgW:matrix.org", "membership": "join", "origin_server_ts": 1489237839685, "sender": "@agala:matrix.org", "state_key": "@agala:matrix.org", "type": "m.room.member", "unsigned": { "age": 21430112993 } }, { "content": { "avatar_url": "mxc://matrix.org/AMDmdGYYEaaNaMTfTDPjwsRb", "displayname": "Friedger Müffke", "membership": "join" }, "event_id": "$1510044475667517WlsgD:matrix.org", "membership": "join", "origin_server_ts": 1510044475293, "sender": "@friedger:matrix.org", "state_key": "@friedger:matrix.org", "type": "m.room.member", "unsigned": { "age": 623477385, "replaces_state": "$14278943054937VeiZr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Stripe", "membership": "join" }, "event_id": "$1472455203432310rAixJ:matrix.org", "membership": "join", "origin_server_ts": 1472455203365, "sender": "@Stripe:matrix.org", "state_key": "@Stripe:matrix.org", "type": "m.room.member", "unsigned": { "age": 38212749313 } }, { "content": { "membership": "leave" }, "event_id": "$14991437543416867AJlpF:matrix.org", "membership": "leave", "origin_server_ts": 1499143754019, "sender": "@freenode_nopf_:matrix.org", "state_key": "@freenode_nopf_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524198659, "replaces_state": "$14979222191245968OiZZX:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14278401694524qfxgz:matrix.org", "origin_server_ts": 1427840169196, "sender": "@yanfali:matrix.org", "state_key": "@yanfali:matrix.org", "type": "m.room.member", "unsigned": { "age": 82827783482, "replaces_state": "$14278400474523vWFYp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631802024776cKIsy:matrix.org", "membership": "leave", "origin_server_ts": 1495663180227, "sender": "@freenode_xmj:matrix.org", "state_key": "@freenode_xmj:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004772451, "replaces_state": "$14902849231595518cLlmP:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$144209736458415ajmPn:matrix.org", "origin_server_ts": 1442097364742, "sender": "@trashrabbit:matrix.org", "state_key": "@trashrabbit:matrix.org", "type": "m.room.member", "unsigned": { "age": 68570587936, "replaces_state": "$1436142616100350HupcV:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eykzZkbgwIJmFqGJnlGyvaNm", "displayname": "xMajedz", "membership": "join" }, "event_id": "$1491426034353491mDgYV:matrix.org", "membership": "join", "origin_server_ts": 1491426034400, "sender": "@xMajedz:matrix.org", "state_key": "@xMajedz:matrix.org", "type": "m.room.member", "unsigned": { "age": 19241918278 } }, { "content": { "avatar_url": "mxc://matrix.org/yRmKBRNVdYfhsMGCUkJEpExY", "displayname": "edzob", "membership": "join" }, "event_id": "$1486716126292614CaeVZ:matrix.org", "membership": "join", "origin_server_ts": 1486716126582, "sender": "@edzob:matrix.org", "state_key": "@edzob:matrix.org", "type": "m.room.member", "unsigned": { "age": 23951826096, "replaces_state": "$1486715986292049RIbwH:matrix.org" } }, { "content": { "avatar_url": "mxc://unixpimps.net/EVGKjcwfWtElEiYhXotUULxS", "displayname": "sniffy", "membership": "join" }, "event_id": "$148631190949FEqhj:unixpimps.net", "membership": "join", "origin_server_ts": 1486311909544, "sender": "@sniffy:unixpimps.net", "state_key": "@sniffy:unixpimps.net", "type": "m.room.member", "unsigned": { "age": 24356043134, "prev_content": { "avatar_url": null, "displayname": "sniffy", "membership": "join" }, "prev_sender": "@sniffy:unixpimps.net", "replaces_state": "$14863048131oqhie:unixpimps.net" } }, { "content": { "membership": "leave" }, "event_id": "$149928911390112spsoB:matrix.org", "membership": "leave", "origin_server_ts": 1499289113679, "sender": "@freenode_ipin:matrix.org", "state_key": "@freenode_ipin:matrix.org", "type": "m.room.member", "unsigned": { "age": 11378838999, "replaces_state": "$14991766523782546qXalY:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Caterpillar (IRC)", "membership": "join" }, "event_id": "$150598960418543ehzCq:matrix.org", "membership": "join", "origin_server_ts": 1505989604876, "sender": "@freenode_Caterpillar:matrix.org", "state_key": "@freenode_Caterpillar:matrix.org", "type": "m.room.member", "unsigned": { "age": 4678347802, "replaces_state": "$15059489535045221QHLsF:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "desnudopenguino", "membership": "join" }, "event_id": "$150516458917ZnVPP:buckytownsend.me", "origin_server_ts": 1505164590888, "sender": "@desnudopenguino:buckytownsend.me", "state_key": "@desnudopenguino:buckytownsend.me", "type": "m.room.member", "unsigned": { "age": 26 } }, { "content": { "avatar_url": null, "displayname": "LeoNerd", "membership": "join" }, "event_id": "$14186528966EmcWr:leonerd.org.uk", "membership": "join", "origin_server_ts": 1418652896240, "sender": "@LeoNerd:leonerd.org.uk", "state_key": "@LeoNerd:leonerd.org.uk", "type": "m.room.member", "unsigned": { "age": 92015056132 } }, { "content": { "avatar_url": "mxc://matrix.org/ryPupBSOLiddTUEXsLgtxdIH#auto", "displayname": "si-m1", "membership": "join" }, "event_id": "$142712922210NNLIc:matrix.org", "membership": "join", "origin_server_ts": 1427129222589, "sender": "@si-m1:matrix.org", "state_key": "@si-m1:matrix.org", "type": "m.room.member", "unsigned": { "age": 83538730089 } }, { "content": { "membership": "leave" }, "event_id": "$14956632242025785qjRbv:matrix.org", "membership": "leave", "origin_server_ts": 1495663224296, "sender": "@freenode_][Sipster][:matrix.org", "state_key": "@freenode_][Sipster][:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004728382, "replaces_state": "$143872464230746FGyrM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15065614302718935HxNiQ:matrix.org", "membership": "leave", "origin_server_ts": 1506561430424, "sender": "@remi:matrix.org", "state_key": "@remi:matrix.org", "type": "m.room.member", "unsigned": { "age": 4106522254, "replaces_state": "$149200559440824RlcSX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DMtitwgQjCuQxROEAYNDROfF", "displayname": "kevincox", "membership": "join" }, "event_id": "$15037854441423161BPZDu:matrix.org", "membership": "join", "origin_server_ts": 1503785444622, "sender": "@kevincox:matrix.org", "state_key": "@kevincox:matrix.org", "type": "m.room.member", "unsigned": { "age": 6882508056, "replaces_state": "$15030851202775612Kkwky:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1499927042254BNutR:matrix.ffslfl.net", "membership": "leave", "origin_server_ts": 1499927042023, "sender": "@MTRNord:matrix.ffslfl.net", "state_key": "@MTRNord:matrix.ffslfl.net", "type": "m.room.member", "unsigned": { "age": 10740910655, "prev_content": { "avatar_url": "mxc://matrix.ffslfl.net/EOkmaOykMGKOuYMykParCAQr", "displayname": "MTRNord", "membership": "join" }, "prev_sender": "@MTRNord:matrix.ffslfl.net", "replaces_state": "$1497084893304PvHLw:matrix.ffslfl.net" } }, { "content": { "membership": "leave" }, "event_id": "$14972460312836323xaQBs:matrix.org", "membership": "leave", "origin_server_ts": 1497246031670, "sender": "@freenode_gry:matrix.org", "state_key": "@freenode_gry:matrix.org", "type": "m.room.member", "unsigned": { "age": 13421921008, "replaces_state": "$14972370572770835NHGMu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1498273263576055WjniK:matrix.org", "membership": "leave", "origin_server_ts": 1498273263201, "sender": "@freenode_aaa|_:matrix.org", "state_key": "@freenode_aaa|_:matrix.org", "type": "m.room.member", "unsigned": { "age": 12394689477, "replaces_state": "$1498249901364524RDNEw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "erikj- (IRC)", "membership": "join" }, "event_id": "$1510208738151662AkhNZ:matrix.org", "membership": "join", "origin_server_ts": 1510208738882, "sender": "@freenode_erikj-:matrix.org", "state_key": "@freenode_erikj-:matrix.org", "type": "m.room.member", "unsigned": { "age": 459213796, "replaces_state": "$15087310094511345ejElv:matrix.org" } }, { "age_ts": 1500383814015, "content": { "avatar_url": "mxc://nsa.lol/WQtbjGowGSxbBRYhUZayMiuD", "displayname": "ッ", "membership": "join" }, "event_id": "$1500383753375VwvAr:nsa.lol", "origin_server_ts": 1500383808132, "sender": "@phrag:nsa.lol", "state_key": "@phrag:nsa.lol", "type": "m.room.member", "unsigned": { "age": 62, "prev_content": { "membership": "leave" }, "prev_sender": "@phrag:nsa.lol", "replaces_state": "$149062942768FqtIn:nsa.lol" } }, { "content": { "avatar_url": "mxc://matrix.org/vRfddXsvXsqLjTGQSZBRcnbD", "displayname": "George", "membership": "join" }, "event_id": "$1427582081879XsCYw:matrix.org", "origin_server_ts": 1427582081449, "sender": "@dizzy:matrix.org", "state_key": "@dizzy:matrix.org", "type": "m.room.member", "unsigned": { "age": 83085871229, "replaces_state": "$1427582039877IBiPj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dPPTCcVcjYTuvqpVesBPvDPt#auto", "displayname": "phaebz", "membership": "join" }, "event_id": "$1446985024801056dqDck:matrix.org", "membership": "join", "origin_server_ts": 1446985024251, "sender": "@phaebz:matrix.org", "state_key": "@phaebz:matrix.org", "type": "m.room.member", "unsigned": { "age": 63682928427 } }, { "content": { "membership": "leave" }, "event_id": "$15035237183tEsHj:vodik.xyz", "membership": "leave", "origin_server_ts": 1503523718076, "sender": "@simon:vodik.xyz", "state_key": "@simon:vodik.xyz", "type": "m.room.member", "unsigned": { "age": 7144234602, "replaces_state": "$14782352541VPpKp:vodik.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$150136139323hrnhk:golovko.me", "membership": "leave", "origin_server_ts": 1501361393693, "sender": "@andrey:golovko.me", "state_key": "@andrey:golovko.me", "type": "m.room.member", "unsigned": { "age": 9306558985, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@andrey:golovko.me", "replaces_state": "$150136118513qTKQq:golovko.me" } }, { "content": { "avatar_url": "mxc://matrix.org/kRDdKxQFiERudoywnAgTMRzf", "displayname": "battleturd", "membership": "join" }, "event_id": "$1493311016312135eZKje:matrix.org", "membership": "join", "origin_server_ts": 1493311016415, "sender": "@battleturd:matrix.org", "state_key": "@battleturd:matrix.org", "type": "m.room.member", "unsigned": { "age": 17356936263 } }, { "content": { "avatar_url": "mxc://matrix.org/IssHdyiXMcSnRCxCzqoaocGL", "displayname": "Dave", "membership": "join" }, "event_id": "$144735090011979CVhhh:matrix.org", "origin_server_ts": 1447350900307, "sender": "@dave:matrix.org", "state_key": "@dave:matrix.org", "type": "m.room.member", "unsigned": { "age": 63317052371, "replaces_state": "$14214144884579TNCdy:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZsRgnqZPEJMaqOfxQcZfvKgG#auto", "displayname": "Paul Ellis", "membership": "join" }, "event_id": "$142586790715156ubKXX:matrix.org", "membership": "join", "origin_server_ts": 1425867907699, "sender": "@pe:matrix.org", "state_key": "@pe:matrix.org", "type": "m.room.member", "unsigned": { "age": 84800044979 } }, { "content": { "avatar_url": "mxc://matrix.org/NeYumnvDULXzAhPNKULeJTBk", "displayname": "DYM", "membership": "join" }, "event_id": "$15072717041497879ctBYn:matrix.org", "membership": "join", "origin_server_ts": 1507271704631, "sender": "@noformnocontent:matrix.org", "state_key": "@noformnocontent:matrix.org", "type": "m.room.member", "unsigned": { "age": 3396248047 } }, { "content": { "avatar_url": null, "displayname": "Guest 14145", "kind": "guest", "membership": "join" }, "event_id": "$1473054894652404rulKC:matrix.org", "membership": "join", "origin_server_ts": 1473054894568, "sender": "@14145:matrix.org", "state_key": "@14145:matrix.org", "type": "m.room.member", "unsigned": { "age": 37613058110 } }, { "content": { "avatar_url": "mxc://matrix.org/VThhqpGoYOZpccSPDNnqevty", "displayname": "ashish", "membership": "join" }, "event_id": "$1481742247418948Wfwlh:matrix.org", "membership": "join", "origin_server_ts": 1481742247169, "sender": "@ashish3805:matrix.org", "state_key": "@ashish3805:matrix.org", "type": "m.room.member", "unsigned": { "age": 28925705509 } }, { "content": { "aliases": [ "#matrix-dev:disroot.org" ] }, "event_id": "$1501353328621BoHlI:disroot.org", "origin_server_ts": 1501353328192, "sender": "@mikaela:disroot.org", "state_key": "disroot.org", "type": "m.room.aliases", "unsigned": { "age": 9314624486 } }, { "content": { "avatar_url": "mxc://matrix.org/lIHjoCvluscvreNHUbkwNJqe", "displayname": "fastpanel", "membership": "join" }, "event_id": "$14753420121461746gWuqG:matrix.org", "membership": "join", "origin_server_ts": 1475342012469, "sender": "@cainerland:matrix.org", "state_key": "@cainerland:matrix.org", "type": "m.room.member", "unsigned": { "age": 35325940209 } }, { "content": { "membership": "leave" }, "event_id": "$1472783633130788ClOdD:matrix.org", "membership": "leave", "origin_server_ts": 1472783633584, "sender": "@Skyrixy:matrix.org", "state_key": "@Skyrixy:matrix.org", "type": "m.room.member", "unsigned": { "age": 37884319094, "replaces_state": "$1468469533471961vZZSL:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oNGbnKtTRDjWikaIAUSxSOJp#auto", "displayname": "Torrion", "membership": "join" }, "event_id": "$145350458429772hbQhR:matrix.org", "membership": "join", "origin_server_ts": 1453504584393, "sender": "@Torrion:matrix.org", "state_key": "@Torrion:matrix.org", "type": "m.room.member", "unsigned": { "age": 57163368285 } }, { "content": { "avatar_url": "mxc://matrix.org/bhsUcEdpyMuHNfiEJsatqFxq#auto", "displayname": null, "membership": "join" }, "event_id": "$1445848348132459WnqgX:matrix.org", "origin_server_ts": 1445848348984, "sender": "@dylan:matrix.org", "state_key": "@dylan:matrix.org", "type": "m.room.member", "unsigned": { "age": 64819603694 } }, { "content": { "avatar_url": null, "displayname": "carlsalyer", "membership": "join" }, "event_id": "$1474430953183156ujjwq:matrix.org", "membership": "join", "origin_server_ts": 1474430953685, "sender": "@carlsalyer:matrix.org", "state_key": "@carlsalyer:matrix.org", "type": "m.room.member", "unsigned": { "age": 36236998993 } }, { "content": { "membership": "leave" }, "event_id": "$15016088455983167biLVe:matrix.org", "membership": "leave", "origin_server_ts": 1501608845487, "sender": "@fs_IVhxQnVuSHdRSVhVaXFDYW94cTptYXRyaXgub3Jn:matrix.org", "state_key": "@fs_IVhxQnVuSHdRSVhVaXFDYW94cTptYXRyaXgub3Jn:matrix.org", "type": "m.room.member", "unsigned": { "age": 9059107191, "replaces_state": "$15016084485973650ZHZJA:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/CUCFAhpzjffETfArLQdpzVhs", "displayname": "Morpheus Being", "membership": "join" }, "event_id": "$1469771737512158mmdSv:matrix.org", "membership": "join", "origin_server_ts": 1469771737747, "sender": "@morpheusB:matrix.org", "state_key": "@morpheusB:matrix.org", "type": "m.room.member", "unsigned": { "age": 40896214931, "replaces_state": "$1469767614505753NbMdN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1491207238128aDFzh:gazizova.net", "membership": "leave", "origin_server_ts": 1491207238914, "sender": "@azata:gazizova.net", "state_key": "@azata:gazizova.net", "type": "m.room.member", "unsigned": { "age": 19460713764, "prev_content": { "avatar_url": "mxc://gazizova.net/eneQTLfIqpexgntKvuPgwwZJ", "displayname": "Азат", "membership": "join" }, "prev_sender": "@azata:gazizova.net", "replaces_state": "$149045675946GSJAn:gazizova.net" } }, { "content": { "avatar_url": "mxc://matrix.sonatagreen.com/gKLnbxlcMbuIuSOvxFpyoMCG", "displayname": "Sonata", "membership": "join" }, "event_id": "$1450663861100NZGwm:matrix.sonatagreen.com", "origin_server_ts": 1450663862588, "sender": "@sonata:matrix.sonatagreen.com", "state_key": "@sonata:matrix.sonatagreen.com", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "membership": "leave" }, "event_id": "$15064169801Xaucy:sio.pw", "membership": "leave", "origin_server_ts": 1506416980480, "sender": "@sauyon:sio.pw", "state_key": "@sauyon:sio.pw", "type": "m.room.member", "unsigned": { "age": 4250972198, "prev_content": { "avatar_url": "mxc://sio.pw/UTBoTGtWGbCJlXtDemtuvevk", "displayname": "sauyon", "membership": "join" }, "prev_sender": "@sauyon:sio.pw", "replaces_state": "$150636680484iSwbT:sio.pw" } }, { "content": { "membership": "leave" }, "event_id": "$1508469877939515uozCX:matrix.org", "membership": "leave", "origin_server_ts": 1508469877492, "sender": "@freenode_djadk:matrix.org", "state_key": "@freenode_djadk:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198075186, "replaces_state": "$15059326934800087EFBex:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1483203219380630uKjqX:matrix.org", "membership": "leave", "origin_server_ts": 1483203219133, "sender": "@neodarz:matrix.org", "state_key": "@neodarz:matrix.org", "type": "m.room.member", "unsigned": { "age": 27464733545, "replaces_state": "$1483203168380359LQlwa:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/stQSGunhOSYHnlnxMBvHYwbo", "displayname": "Dmitry", "membership": "join" }, "event_id": "$147164335645033NEvhK:matrix.org", "membership": "join", "origin_server_ts": 1471643356941, "sender": "@dmitry_da:matrix.org", "state_key": "@dmitry_da:matrix.org", "type": "m.room.member", "unsigned": { "age": 39024595737, "replaces_state": "$147164297943990NisCF:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1474316434684938hzwZA:matrix.org", "membership": "leave", "origin_server_ts": 1474316434678, "sender": "@guest1:matrix.org", "state_key": "@guest1:matrix.org", "type": "m.room.member", "unsigned": { "age": 36351518000, "replaces_state": "$1474316357684616pubvu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "KajMagnus", "membership": "join" }, "event_id": "$14783383982169168wjvvc:matrix.org", "membership": "join", "origin_server_ts": 1478338398706, "sender": "@KajMagnus:matrix.org", "state_key": "@KajMagnus:matrix.org", "type": "m.room.member", "unsigned": { "age": 32329553972 } }, { "content": { "avatar_url": "mxc://philsnow.io/iBozkYHlaxgmyjyAGDRvqvLj", "displayname": "philsnow", "membership": "join" }, "event_id": "$14881109143FcaeU:philsnow.io", "origin_server_ts": 1488110914898, "sender": "@philsnow:philsnow.io", "state_key": "@philsnow:philsnow.io", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "membership": "leave" }, "event_id": "$1474318538694016nJQda:matrix.org", "membership": "leave", "origin_server_ts": 1474318538422, "sender": "@modig:matrix.org", "state_key": "@modig:matrix.org", "type": "m.room.member", "unsigned": { "age": 36349414256, "replaces_state": "$1474303874633981wGuZm:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/vOsHNqDPCMBDMPNXyvRlZncp", "displayname": "ZombBi", "membership": "join" }, "event_id": "$15092777035739618TlIvs:matrix.org", "membership": "join", "origin_server_ts": 1509277703526, "sender": "@ZombBi:matrix.org", "state_key": "@ZombBi:matrix.org", "type": "m.room.member", "unsigned": { "age": 1390249152 } }, { "content": { "membership": "leave" }, "event_id": "$1417988617208WdwoH:matrix.org", "membership": "leave", "origin_server_ts": 1417988617228, "sender": "@shaggytwodope:matrix.org", "state_key": "@shaggytwodope:matrix.org", "type": "m.room.member", "unsigned": { "age": 92679335450 } }, { "content": { "avatar_url": null, "displayname": "alserro", "membership": "join" }, "event_id": "$15082633612470312cdOzO:matrix.org", "membership": "join", "origin_server_ts": 1508263361313, "sender": "@alserro:matrix.org", "state_key": "@alserro:matrix.org", "type": "m.room.member", "unsigned": { "age": 2404591365 } }, { "content": { "avatar_url": "mxc://matrix.org/AFLknkIakhCyFHUUPhbmkXXN", "displayname": "Giom", "membership": "join" }, "event_id": "$144740295836225MlQfH:matrix.org", "origin_server_ts": 1447402958865, "sender": "@Giom:matrix.org", "state_key": "@Giom:matrix.org", "type": "m.room.member", "unsigned": { "age": 63264993813, "replaces_state": "$14292041924536idZkj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "VladoB", "membership": "join" }, "event_id": "$1480015746116151QlguI:matrix.org", "membership": "join", "origin_server_ts": 1480015746874, "sender": "@VladoB:matrix.org", "state_key": "@VladoB:matrix.org", "type": "m.room.member", "unsigned": { "age": 30652205804 } }, { "content": { "avatar_url": null, "displayname": "ZeroMe", "membership": "join" }, "event_id": "$150971211037392KEBBf:matrix.org", "membership": "join", "origin_server_ts": 1509712110184, "sender": "@ZeroMe:matrix.org", "state_key": "@ZeroMe:matrix.org", "type": "m.room.member", "unsigned": { "age": 955842494 } }, { "content": { "avatar_url": "mxc://matrix.org/GSmfTebfqOzSSjxZPNnGtAsD#auto", "displayname": "!ꞁꞁɐuqɐu", "membership": "join" }, "event_id": "$14832817069661eqMbS:matrix.org", "membership": "join", "origin_server_ts": 1483281706281, "sender": "@illandan:matrix.org", "state_key": "@illandan:matrix.org", "type": "m.room.member", "unsigned": { "age": 27386246397, "replaces_state": "$14832814638688LJaWJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$149175192310KzofY:rico.sytes.net", "origin_server_ts": 1491751922996, "sender": "@rico:rico.sytes.net", "state_key": "@rico:rico.sytes.net", "type": "m.room.member", "unsigned": { "age": 241 } }, { "content": { "membership": "leave" }, "event_id": "$1485051823889nPjks:tapenet.org", "membership": "leave", "origin_server_ts": 1485051823437, "sender": "@qbit:tapenet.org", "state_key": "@qbit:tapenet.org", "type": "m.room.member", "unsigned": { "age": 25616129241, "replaces_state": "$1479741285673yFfnO:tapenet.org" } }, { "content": { "avatar_url": null, "displayname": "Brooks", "membership": "join" }, "event_id": "$15105958071xhjoF:scorpionland.net", "origin_server_ts": 1510595807319, "sender": "@brooksm:scorpionland.net", "state_key": "@brooksm:scorpionland.net", "type": "m.room.member", "unsigned": { "age": 9 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14954541671875505rArGw:matrix.org", "membership": "join", "origin_server_ts": 1495454167000, "sender": "@udee:matrix.org", "state_key": "@udee:matrix.org", "type": "m.room.member", "unsigned": { "age": 15213785678 } }, { "content": { "avatar_url": "mxc://matrix.org/zeUQOlXmLnfikLonUuBOxOga#auto", "displayname": "gerc", "membership": "join" }, "event_id": "$146134942046760wYGqy:matrix.org", "membership": "join", "origin_server_ts": 1461349420562, "sender": "@gerc:matrix.org", "state_key": "@gerc:matrix.org", "type": "m.room.member", "unsigned": { "age": 49318532116 } }, { "content": { "avatar_url": null, "displayname": "Max", "kind": "guest", "membership": "join" }, "event_id": "$14862887391182780ETlcg:matrix.org", "membership": "join", "origin_server_ts": 1486288739302, "sender": "@144830:matrix.org", "state_key": "@144830:matrix.org", "type": "m.room.member", "unsigned": { "age": 24379213376 } }, { "content": { "membership": "leave" }, "event_id": "$14932722272pYxYj:matrix-beta.igalia.com", "membership": "leave", "origin_server_ts": 1493272227401, "sender": "@psaavedra:matrix-beta.igalia.com", "state_key": "@psaavedra:matrix-beta.igalia.com", "type": "m.room.member", "unsigned": { "age": 17395725277, "prev_content": { "avatar_url": null, "displayname": "psaavedra", "membership": "join" }, "prev_sender": "@psaavedra:matrix-beta.igalia.com", "replaces_state": "$14926272733gXpxW:matrix-beta.igalia.com" } }, { "content": { "avatar_url": null, "displayname": "Guest 12938", "kind": "guest", "membership": "join" }, "event_id": "$1464640572406718iOtBg:matrix.org", "membership": "join", "origin_server_ts": 1464640572633, "sender": "@12938:matrix.org", "state_key": "@12938:matrix.org", "type": "m.room.member", "unsigned": { "age": 46027380045 } }, { "content": { "membership": "leave" }, "event_id": "$14894468842aeOMw:matrix.frost.ws", "membership": "leave", "origin_server_ts": 1489446884087, "sender": "@frost:matrix.frost.ws", "state_key": "@frost:matrix.frost.ws", "type": "m.room.member", "unsigned": { "age": 12156349, "prev_content": { "avatar_url": null, "displayname": "Frost", "membership": "join" }, "prev_sender": "@frost:matrix.frost.ws", "replaces_state": "$14894467841cyvbI:matrix.frost.ws" } }, { "content": { "membership": "leave" }, "event_id": "$149867540127WdmbT:matrix.homply.xyz", "membership": "leave", "origin_server_ts": 1498675401286, "sender": "@martin:matrix.homply.xyz", "state_key": "@martin:matrix.homply.xyz", "type": "m.room.member", "unsigned": { "age": 11992551392, "prev_content": { "avatar_url": "mxc://matrix.homply.xyz/iEoCLGZpGObGQEYNMygIzOnH", "displayname": null, "membership": "join" }, "prev_sender": "@martin:matrix.homply.xyz", "replaces_state": "$149867529026DrRou:matrix.homply.xyz" } }, { "content": { "avatar_url": null, "displayname": "sneurlax", "membership": "join" }, "event_id": "$1495587954860868DAbXI:matrix.org", "membership": "join", "origin_server_ts": 1495587954555, "sender": "@Sneurlax:matrix.org", "state_key": "@Sneurlax:matrix.org", "type": "m.room.member", "unsigned": { "age": 15079998123 } }, { "content": { "membership": "leave" }, "event_id": "$15080857196mCSKb:biocage.io", "membership": "leave", "origin_server_ts": 1508085719435, "sender": "@biocage:biocage.io", "state_key": "@biocage:biocage.io", "type": "m.room.member", "unsigned": { "age": 2582233243, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@biocage:biocage.io", "replaces_state": "$15080847551PAuny:biocage.io" } }, { "content": { "avatar_url": "mxc://im.howling.io/rQkRsNzToOtxnANTUuNLcIVD", "displayname": "krs", "membership": "join" }, "event_id": "$149122628319ReKaJ:im.howling.io", "origin_server_ts": 1491226283656, "sender": "@krs:im.howling.io", "state_key": "@krs:im.howling.io", "type": "m.room.member", "unsigned": { "age": 42 } }, { "content": { "avatar_url": null, "displayname": "justtesting", "membership": "join" }, "event_id": "$14864888612304132TDgDl:matrix.org", "membership": "join", "origin_server_ts": 1486488861375, "sender": "@dupa11111dupa:matrix.org", "state_key": "@dupa11111dupa:matrix.org", "type": "m.room.member", "unsigned": { "age": 24179091303 } }, { "content": { "avatar_url": "mxc://matrix.org/ByncarANJXWyckZfCZupyWqu", "displayname": "hernad", "membership": "join" }, "event_id": "$14875886701366335ROJoO:matrix.org", "membership": "join", "origin_server_ts": 1487588670189, "sender": "@hernad:matrix.org", "state_key": "@hernad:matrix.org", "type": "m.room.member", "unsigned": { "age": 23079282489, "replaces_state": "$14875252271027607LmVfg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1473827466166582rIJOk:matrix.org", "membership": "leave", "origin_server_ts": 1473827466242, "sender": "@pirboazo:matrix.org", "state_key": "@pirboazo:matrix.org", "type": "m.room.member", "unsigned": { "age": 36840486436, "replaces_state": "$147370996371220IOwdj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1494426231954973oQmvW:matrix.org", "membership": "join", "origin_server_ts": 1494426231764, "sender": "@keesfree:matrix.org", "state_key": "@keesfree:matrix.org", "type": "m.room.member", "unsigned": { "age": 16241720914 } }, { "content": { "avatar_url": "mxc://matrix.org/xJnMHRIODORaOqgvFPPxrTgN", "displayname": "ethan.c2h6", "membership": "join" }, "event_id": "$14923968801672666jEKXN:matrix.org", "membership": "join", "origin_server_ts": 1492396880217, "sender": "@ethan.c2h6:matrix.org", "state_key": "@ethan.c2h6:matrix.org", "type": "m.room.member", "unsigned": { "age": 18271072461 } }, { "content": { "membership": "leave" }, "event_id": "$15020611434022822uAlSR:matrix.org", "membership": "leave", "origin_server_ts": 1502061143288, "sender": "@freenode_KotH:matrix.org", "state_key": "@freenode_KotH:matrix.org", "type": "m.room.member", "unsigned": { "age": 8606809390, "replaces_state": "$149789564018323GFKHz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15019623891002sWcrs:ardaxi.com", "membership": "leave", "origin_server_ts": 1501962389345, "sender": "@ardaxi:ardaxi.com", "state_key": "@ardaxi:ardaxi.com", "type": "m.room.member", "unsigned": { "age": 8705563333, "prev_content": { "avatar_url": "mxc://ardaxi.com/RoLgnSbueBHbEyAPGbyFWXEU", "displayname": "ArdaXi", "membership": "join" }, "prev_sender": "@ardaxi:ardaxi.com", "replaces_state": "$1479919724589MreIi:ardaxi.com" } }, { "content": { "membership": "leave" }, "event_id": "$14956632192025671MTKCe:matrix.org", "membership": "leave", "origin_server_ts": 1495663219447, "sender": "@freenode_illicitonion:matrix.org", "state_key": "@freenode_illicitonion:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004733231, "replaces_state": "$14556423603901KOywQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631572024302bhKXX:matrix.org", "membership": "leave", "origin_server_ts": 1495663157939, "sender": "@freenode_odinho_:matrix.org", "state_key": "@freenode_odinho_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004794739, "replaces_state": "$143594182814166MfURB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/usJQBJzxRQyhgHuLvGlSKfrE", "displayname": "tetragrammatonhermit", "membership": "join" }, "event_id": "$14804202791565054xrenf:matrix.org", "membership": "join", "origin_server_ts": 1480420279589, "sender": "@saintaquinas:matrix.org", "state_key": "@saintaquinas:matrix.org", "type": "m.room.member", "unsigned": { "age": 30247673089 } }, { "content": { "avatar_url": null, "displayname": "rajeevn (IRC)", "membership": "join" }, "event_id": "$15097939191108178aXtBf:matrix.org", "membership": "join", "origin_server_ts": 1509793919229, "sender": "@freenode_rajeevn:matrix.org", "state_key": "@freenode_rajeevn:matrix.org", "type": "m.room.member", "unsigned": { "age": 874033449, "replaces_state": "$15097936781106024ALBEr:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mJUYItgQZoZCqiThsXvalRaL", "displayname": "mithrandi", "membership": "join" }, "event_id": "$14753464131476503pDLvS:matrix.org", "membership": "join", "origin_server_ts": 1475346413262, "sender": "@mithrandi:matrix.org", "state_key": "@mithrandi:matrix.org", "type": "m.room.member", "unsigned": { "age": 35321539416 } }, { "content": { "avatar_url": "mxc://jki.re/GVSWoYAaZphVlOxPuwtQCFCl", "displayname": "Erik", "membership": "join" }, "event_id": "$144850062087elIJo:jki.re", "origin_server_ts": 1448500620853, "sender": "@erikj:jki.re", "state_key": "@erikj:jki.re", "type": "m.room.member", "unsigned": { "age": 62167331825, "replaces_state": "$142316567653uFnap:jki.re" } }, { "content": { "membership": "leave" }, "event_id": "$14672298592067892eUbGR:matrix.org", "membership": "leave", "origin_server_ts": 1467229859558, "sender": "@DavidBoeie:matrix.org", "state_key": "@DavidBoeie:matrix.org", "type": "m.room.member", "unsigned": { "age": 43438093120, "replaces_state": "$14672209292046164pIqDb:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/TJOQLYiLEzBUSNwGCawohSWh", "displayname": "Evil Ander", "membership": "join" }, "event_id": "$1507740696101210QYQHK:matrix.org", "membership": "join", "origin_server_ts": 1507740696652, "sender": "@ander:matrix.org", "state_key": "@ander:matrix.org", "type": "m.room.member", "unsigned": { "age": 2927256026 } }, { "content": { "avatar_url": "mxc://matrix.org/iBKTfoJHuGiSIqGzLKRjdPWs", "displayname": "mickeyk", "membership": "join" }, "event_id": "$1459709936205541iEIiC:matrix.org", "membership": "join", "origin_server_ts": 1459709936384, "sender": "@mickeyk6000:matrix.org", "state_key": "@mickeyk6000:matrix.org", "type": "m.room.member", "unsigned": { "age": 50958016294 } }, { "content": { "membership": "leave" }, "event_id": "$144250175260455pjibf:matrix.org", "origin_server_ts": 1442501752476, "sender": "@dinkan:matrix.org", "state_key": "@dinkan:matrix.org", "type": "m.room.member", "unsigned": { "age": 68166200202, "replaces_state": "$144234758422161bydsb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1501119809463975pNyzN:matrix.org", "membership": "join", "origin_server_ts": 1501119809361, "sender": "@jmolmo:matrix.org", "state_key": "@jmolmo:matrix.org", "type": "m.room.member", "unsigned": { "age": 9548143317 } }, { "content": { "membership": "leave" }, "event_id": "$14770002646PdLxx:consaltum.de", "membership": "leave", "origin_server_ts": 1477000264402, "sender": "@sven.kiessig:consaltum.de", "state_key": "@sven.kiessig:consaltum.de", "type": "m.room.member", "unsigned": { "age": 33667688276, "replaces_state": "$14770002135yQZrO:consaltum.de" } }, { "content": { "avatar_url": "mxc://cadair.com/jrZGfwKAwBsVjNcFAFVqzBnV", "displayname": "Stuart", "membership": "join" }, "event_id": "$15084265861iQCLA:cadair.com", "origin_server_ts": 1508422984704, "sender": "@cadair:cadair.com", "state_key": "@cadair:cadair.com", "type": "m.room.member", "unsigned": { "age": 1462, "replaces_state": "$14906342081SnXIv:cadair.com" } }, { "content": { "avatar_url": "mxc://matrix.org/rNwzQrCiEhNKJSSXqfZSAgAK", "displayname": null, "membership": "join" }, "event_id": "$1486134267407361VshgR:matrix.org", "membership": "join", "origin_server_ts": 1486134267221, "sender": "@loaloys:matrix.org", "state_key": "@loaloys:matrix.org", "type": "m.room.member", "unsigned": { "age": 24533685457, "replaces_state": "$1486129868376905mPSKc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1439806064962QKqlR:matrix.org", "origin_server_ts": 1439806064658, "sender": "@evgs:matrix.org", "state_key": "@evgs:matrix.org", "type": "m.room.member", "unsigned": { "age": 70861888020, "replaces_state": "$1439805849916cbSEx:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15057624432268487XrPmk:matrix.org", "membership": "join", "origin_server_ts": 1505762443526, "sender": "@asdfghjklzxcvbnm:matrix.org", "state_key": "@asdfghjklzxcvbnm:matrix.org", "type": "m.room.member", "unsigned": { "age": 4905509152 } }, { "content": { "avatar_url": "mxc://matrix.org/RdSkMBLSSzPFOwBgjmaNfoAZ", "displayname": "Chris Holcombe (Gitter)", "membership": "join" }, "event_id": "$15087952215468957YpbKf:matrix.org", "membership": "join", "origin_server_ts": 1508795221541, "sender": "@gitter_cholcombe973:matrix.org", "state_key": "@gitter_cholcombe973:matrix.org", "type": "m.room.member", "unsigned": { "age": 1872731137 } }, { "content": { "avatar_url": null, "displayname": "Guest 180475", "kind": "guest", "membership": "join" }, "event_id": "$1489748858628107PgMXQ:matrix.org", "membership": "join", "origin_server_ts": 1489748858164, "sender": "@180475:matrix.org", "state_key": "@180475:matrix.org", "type": "m.room.member", "unsigned": { "age": 20919094514 } }, { "content": { "membership": "leave" }, "event_id": "$148650223114ZKuXw:jabber.dk", "membership": "leave", "origin_server_ts": 1486502231121, "sender": "@wille:jabber.dk", "state_key": "@wille:jabber.dk", "type": "m.room.member", "unsigned": { "age": 431467, "prev_content": { "avatar_url": null, "displayname": "Per", "membership": "join" }, "prev_sender": "@wille:jabber.dk", "replaces_state": "$14865015271iHoje:jabber.dk" } }, { "content": { "avatar_url": null, "displayname": "silviof (IRC)", "membership": "join" }, "event_id": "$15103410901126994NrxoX:matrix.org", "membership": "join", "origin_server_ts": 1510341090922, "sender": "@freenode_silviof:matrix.org", "state_key": "@freenode_silviof:matrix.org", "type": "m.room.member", "unsigned": { "age": 326861756, "replaces_state": "$1510218687449001tPCQP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ronsor2", "membership": "join" }, "event_id": "$14997235372812104XsCAM:matrix.org", "membership": "join", "origin_server_ts": 1499723537307, "sender": "@ronsor2:matrix.org", "state_key": "@ronsor2:matrix.org", "type": "m.room.member", "unsigned": { "age": 10944415371 } }, { "content": { "avatar_url": "mxc://matrix.org/MiQBIzNGolfxNHTTozbnYuAL#auto", "displayname": "Milek", "membership": "join" }, "event_id": "$14350909255268CJReI:matrix.org", "membership": "join", "origin_server_ts": 1435090925364, "sender": "@milek:matrix.org", "state_key": "@milek:matrix.org", "type": "m.room.member", "unsigned": { "age": 75577027314 } }, { "content": { "avatar_url": "mxc://matrix.org/YWgsWmmRoNmDhtBgwDcoQFFC#auto", "displayname": "Brian Hendrickson", "membership": "join" }, "event_id": "$1426624205827nRQpe:matrix.org", "membership": "join", "origin_server_ts": 1426624205824, "sender": "@brianjesse:matrix.org", "state_key": "@brianjesse:matrix.org", "type": "m.room.member", "unsigned": { "age": 84043746854 } }, { "content": { "membership": "leave" }, "event_id": "$14893448541452381Oeokr:matrix.org", "membership": "leave", "origin_server_ts": 1489344854196, "sender": "@Claudius7916:matrix.org", "state_key": "@Claudius7916:matrix.org", "type": "m.room.member", "unsigned": { "age": 21323098482, "replaces_state": "$1480247110883496pblMw:matrix.org" } }, { "content": { "avatar_url": "mxc://aws-t1.t2l.io/jBHUrVAEylVkEVSWSNSSDsAV", "displayname": "[aws] TravisR", "membership": "join" }, "event_id": "$150972974822ObPNY:aws-t1.t2l.io", "origin_server_ts": 1509729748284, "sender": "@travis:aws-t1.t2l.io", "state_key": "@travis:aws-t1.t2l.io", "type": "m.room.member", "unsigned": { "age": 112 } }, { "content": { "avatar_url": "mxc://h4x.no/UCRRlEekCxNocrlBcKaPYlSL#auto", "displayname": "si-m1", "membership": "join" }, "event_id": "$14451253839pQgvx:h4x.no", "origin_server_ts": 1445125383029, "sender": "@simeng:h4x.no", "state_key": "@simeng:h4x.no", "type": "m.room.member", "unsigned": { "age": 6, "replaces_state": "$14374042172tweue:h4x.no" } }, { "content": { "membership": "leave" }, "event_id": "$145642311650439ghtfK:matrix.org", "membership": "leave", "origin_server_ts": 1456423116944, "sender": "@hakonb:matrix.org", "state_key": "@hakonb:matrix.org", "type": "m.room.member", "unsigned": { "age": 54244835734, "replaces_state": "$145642248049927NpQPg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1504509044553762lhYdx:matrix.org", "membership": "join", "origin_server_ts": 1504509044069, "sender": "@1324t:matrix.org", "state_key": "@1324t:matrix.org", "type": "m.room.member", "unsigned": { "age": 6158908609 } }, { "content": { "membership": "leave" }, "event_id": "$1508469879939563Ztpaj:matrix.org", "membership": "leave", "origin_server_ts": 1508469879348, "sender": "@freenode_bin7me:matrix.org", "state_key": "@freenode_bin7me:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198073330, "replaces_state": "$15071174374275386tdmSa:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/byLgVlhYPKuoggtzTaGIlils", "displayname": "Guggy", "membership": "join" }, "event_id": "$14905552811315609MnbwT:matrix.org", "membership": "join", "origin_server_ts": 1490555281968, "sender": "@_neb_guggy:matrix.org", "state_key": "@_neb_guggy:matrix.org", "type": "m.room.member", "unsigned": { "age": 20112670710, "replaces_state": "$14886680331192026dWijh:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148189061316500JpVJC:matrix.org", "membership": "leave", "origin_server_ts": 1481890613247, "sender": "@nikken:matrix.org", "state_key": "@nikken:matrix.org", "type": "m.room.member", "unsigned": { "age": 28777339431, "replaces_state": "$1465548709128208Kopdk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1480126210511671hneaO:matrix.org", "membership": "leave", "origin_server_ts": 1480126210477, "sender": "@martydelaney3:matrix.org", "state_key": "@martydelaney3:matrix.org", "type": "m.room.member", "unsigned": { "age": 30541742201, "replaces_state": "$1476733511327239iGwxT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "JMH", "membership": "join" }, "event_id": "$14532179215262fdpQT:matrix.org", "membership": "join", "origin_server_ts": 1453217921240, "sender": "@JMH:matrix.org", "state_key": "@JMH:matrix.org", "type": "m.room.member", "unsigned": { "age": 57450031438 } }, { "content": { "avatar_url": "mxc://matrix.org/UlqZyfyYkcxXiwvRsRhXiijV", "displayname": null, "membership": "join" }, "event_id": "$1459152904345457wSSfG:matrix.org", "membership": "join", "origin_server_ts": 1459152904444, "sender": "@cyan:matrix.org", "state_key": "@cyan:matrix.org", "type": "m.room.member", "unsigned": { "age": 51515048234, "replaces_state": "$145872353532944PpFop:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1473721680107780GOsBM:matrix.org", "membership": "join", "origin_server_ts": 1473721680812, "sender": "@smacbrillacciao:matrix.org", "state_key": "@smacbrillacciao:matrix.org", "type": "m.room.member", "unsigned": { "age": 36946271866 } }, { "content": { "avatar_url": "mxc://matrix.org/dbUwglGzCQMwYSbajKmZmiLB#auto", "displayname": "conoramurphy", "membership": "join" }, "event_id": "$14501075891086SpRFV:matrix.org", "origin_server_ts": 1450107589334, "sender": "@conoramurphy:matrix.org", "state_key": "@conoramurphy:matrix.org", "type": "m.room.member", "unsigned": { "age": 60560363344 } }, { "content": { "avatar_url": null, "displayname": "einarr", "membership": "join" }, "event_id": "$14783898472321410yrInc:matrix.org", "membership": "join", "origin_server_ts": 1478389847659, "sender": "@einarr:matrix.org", "state_key": "@einarr:matrix.org", "type": "m.room.member", "unsigned": { "age": 32278105019 } }, { "content": { "avatar_url": null, "displayname": "mupp-matrix.org", "membership": "join" }, "event_id": "$1489421500175205fIDpJ:matrix.org", "membership": "join", "origin_server_ts": 1489421500297, "sender": "@666tester999:matrix.org", "state_key": "@666tester999:matrix.org", "type": "m.room.member", "unsigned": { "age": 21246452381, "replaces_state": "$1483100655371687bLfbV:matrix.org" } }, { "content": { "avatar_url": "mxc://openmarket.com/qEYGTlnChLyzbQfFbhGefidk#auto", "displayname": "erikj", "membership": "join" }, "event_id": "$1479307548523085zrsQi:openmarket.com", "membership": "join", "origin_server_ts": 1479307548841, "sender": "@erikj:openmarket.com", "state_key": "@erikj:openmarket.com", "type": "m.room.member", "unsigned": { "age": 31360403837, "replaces_state": "$1443692892182064yrtOQ:openmarket.com" } }, { "content": { "avatar_url": "mxc://disroot.org/KkbzOHatWrlFaWKUsGGnbZPS", "displayname": "Mikaela", "membership": "join" }, "event_id": "$15040168829316BGcuC:disroot.org", "membership": "join", "origin_server_ts": 1504016882150, "sender": "@mikaela:disroot.org", "state_key": "@mikaela:disroot.org", "type": "m.room.member", "unsigned": { "age": 6651070528, "prev_content": { "avatar_url": "mxc://disroot.org/KkbzOHatWrlFaWKUsGGnbZPS", "displayname": "Mikaela 🇫🇮", "membership": "join" }, "prev_sender": "@mikaela:disroot.org", "replaces_state": "$15040106878831hHOHO:disroot.org" } }, { "content": { "membership": "leave" }, "event_id": "$1502481426556945bEuXL:matrix.org", "membership": "leave", "origin_server_ts": 1502481426735, "sender": "@freenode_Kooda[b]:matrix.org", "state_key": "@freenode_Kooda[b]:matrix.org", "type": "m.room.member", "unsigned": { "age": 8186525943, "replaces_state": "$15020612334023998hiugb:matrix.org" } }, { "content": { "avatar_url": "mxc://elynx.fr/ZjjJFbPMGlXcxDgrSLSOFzYz", "displayname": "Kooda", "membership": "join" }, "event_id": "$15058994491930nzjaT:elynx.fr", "membership": "join", "origin_server_ts": 1505899449591, "sender": "@Kooda:elynx.fr", "state_key": "@Kooda:elynx.fr", "type": "m.room.member", "unsigned": { "age": 4768503087 } }, { "content": { "avatar_url": "mxc://matrix.org/zFprhgxJdIvJMcAHpSkgqRez#auto", "displayname": null, "membership": "join" }, "event_id": "$1450392851139588NiWCm:matrix.org", "origin_server_ts": 1450392851326, "sender": "@eliazu:matrix.org", "state_key": "@eliazu:matrix.org", "type": "m.room.member", "unsigned": { "age": 60275101352 } }, { "content": { "avatar_url": null, "displayname": "JFA.", "membership": "join" }, "event_id": "$14761012851133115AOQMC:matrix.org", "membership": "join", "origin_server_ts": 1476101285064, "sender": "@jfalarie:matrix.org", "state_key": "@jfalarie:matrix.org", "type": "m.room.member", "unsigned": { "age": 34566667614, "replaces_state": "$14760999721129512dLSnW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14596841218Wonct:zackn.de", "membership": "leave", "origin_server_ts": 1459684121376, "sender": "@matze:zackn.de", "state_key": "@matze:zackn.de", "type": "m.room.member", "unsigned": { "age": 50983831302, "replaces_state": "$145867682594ZiuND:zackn.de" } }, { "content": { "avatar_url": "mxc://matrix.org/bFatpYXCPyHkYUhUxBayYGmk", "displayname": "HER0", "membership": "join" }, "event_id": "$14949974401389444jBKpO:matrix.org", "membership": "join", "origin_server_ts": 1494997440327, "sender": "@HER0:matrix.org", "state_key": "@HER0:matrix.org", "type": "m.room.member", "unsigned": { "age": 15670512351 } }, { "content": { "membership": "leave" }, "event_id": "$1503994603121ZizaA:matrix.magnap.dk", "membership": "leave", "origin_server_ts": 1503994603719, "sender": "@magnap:matrix.magnap.dk", "state_key": "@magnap:matrix.magnap.dk", "type": "m.room.member", "unsigned": { "age": 6673348959, "prev_content": { "avatar_url": null, "displayname": "Deprecated-pangam", "membership": "join" }, "prev_sender": "@magnap:matrix.magnap.dk", "replaces_state": "$150399410193PpiKl:matrix.magnap.dk" } }, { "content": { "membership": "leave" }, "event_id": "$14673454422297705byTnQ:matrix.org", "membership": "leave", "origin_server_ts": 1467345442515, "sender": "@typhon:matrix.org", "state_key": "@typhon:matrix.org", "type": "m.room.member", "unsigned": { "age": 43322510163, "replaces_state": "$14673446502296722ylcKL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "krskrs", "membership": "join" }, "event_id": "$1498634320632551PNUqI:matrix.org", "membership": "join", "origin_server_ts": 1498634320423, "sender": "@krskrs:matrix.org", "state_key": "@krskrs:matrix.org", "type": "m.room.member", "unsigned": { "age": 12033632255 } }, { "content": { "avatar_url": null, "displayname": "tamar", "membership": "join" }, "event_id": "$1452616749381640EpzbP:matrix.org", "origin_server_ts": 1452616749747, "sender": "@aitam:matrix.org", "state_key": "@aitam:matrix.org", "type": "m.room.member", "unsigned": { "age": 58051202931 } }, { "content": { "avatar_url": "mxc://matrix.org/AmHFRiOStfHNXmRCfcIvJNrQ", "displayname": "Jesús Roncero", "membership": "join" }, "event_id": "$144983028167477YqrkA:matrix.org", "origin_server_ts": 1449830281701, "sender": "@golan:matrix.org", "state_key": "@golan:matrix.org", "type": "m.room.member", "unsigned": { "age": 60837670977, "replaces_state": "$144983024667444nQgYl:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DdwhyunVsWUwtmHDjdYPCvIr", "displayname": "hostile", "membership": "join" }, "event_id": "$1481263955207413mEeOF:matrix.org", "membership": "join", "origin_server_ts": 1481263955072, "sender": "@hostile:matrix.org", "state_key": "@hostile:matrix.org", "type": "m.room.member", "unsigned": { "age": 29403997606 } }, { "content": { "avatar_url": null, "displayname": "rojr", "membership": "join" }, "event_id": "$14825770501776004mZftm:matrix.org", "membership": "join", "origin_server_ts": 1482577050380, "sender": "@rojr:matrix.org", "state_key": "@rojr:matrix.org", "type": "m.room.member", "unsigned": { "age": 28090902298 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1458413932104834yUFEA:matrix.org", "membership": "join", "origin_server_ts": 1458413932408, "sender": "@bastinik:matrix.org", "state_key": "@bastinik:matrix.org", "type": "m.room.member", "unsigned": { "age": 52254020270 } }, { "age_ts": 1420017590305, "content": { "avatar_url": "http://matrix.tp.mu:8008/_matrix/content/QGphbWVzYWRkeW1hbjp0cC5tdQRUpsOYuDgDFjeiOCymICEzDV.aW1hZ2UvanBlZw==.jpeg", "displayname": "James Addyman", "membership": "join" }, "event_id": "$1420017569112tBaTY:tp.mu", "membership": "join", "origin_server_ts": 1420017569206, "sender": "@jamesaddyman:tp.mu", "state_key": "@jamesaddyman:tp.mu", "type": "m.room.member", "unsigned": { "age": 1532, "replaces_state": "$1420017165109Smcfg:tp.mu", "state_hash": { "sha256": "1ZEWRd07fXyEaNOINSveoVcMZ4ehoS+E/2ZDNcWejlM" } } }, { "content": { "avatar_url": "mxc://matrix.myown.one/vvAFzwNfGiKAfBfBatOMWFWu", "displayname": "Jan Dietrich", "membership": "join" }, "event_id": "$14919885281Fjrwf:matrix.myown.one", "origin_server_ts": 1491988528535, "sender": "@jan:matrix.myown.one", "state_key": "@jan:matrix.myown.one", "type": "m.room.member", "unsigned": { "age": 26 } }, { "content": { "avatar_url": "mxc://matrix.org/kTyMJxIzXZlXdGucEHdhheZk", "displayname": "Ma Shamil", "membership": "join" }, "event_id": "$14959055222084931vhlhv:matrix.org", "membership": "join", "origin_server_ts": 1495905522860, "sender": "@noteness:matrix.org", "state_key": "@noteness:matrix.org", "type": "m.room.member", "unsigned": { "age": 14762429818, "replaces_state": "$14926099231545437rxmSh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pZOAAyLmOtBavwLqDyTKtiRZ", "displayname": "Sammy1", "membership": "join" }, "event_id": "$14865215252541006YmAUY:matrix.org", "membership": "join", "origin_server_ts": 1486521525833, "sender": "@MikeMike1:matrix.org", "state_key": "@MikeMike1:matrix.org", "type": "m.room.member", "unsigned": { "age": 24146426845, "replaces_state": "$14863924071693638JMbYI:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14848449963614601cDVrx:matrix.org", "membership": "leave", "origin_server_ts": 1484844996945, "sender": "@oliverlumby:matrix.org", "state_key": "@oliverlumby:matrix.org", "type": "m.room.member", "unsigned": { "age": 25822955733, "replaces_state": "$14848336913530565NqjNa:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "mupp_riot", "membership": "join" }, "event_id": "$148715720415071HdZWV:matrix.org", "membership": "join", "origin_server_ts": 1487157204048, "sender": "@153279:matrix.org", "state_key": "@153279:matrix.org", "type": "m.room.member", "unsigned": { "age": 23510748630, "replaces_state": "$148715716814878ZqVuH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "maxupp", "kind": "guest", "membership": "join" }, "event_id": "$148723907551835wwmpT:matrix.org", "membership": "join", "origin_server_ts": 1487239075695, "sender": "@154011:matrix.org", "state_key": "@154011:matrix.org", "type": "m.room.member", "unsigned": { "age": 23428876983 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15090199802609564wMBTO:matrix.org", "membership": "join", "origin_server_ts": 1509019980340, "sender": "@kkr:matrix.org", "state_key": "@kkr:matrix.org", "type": "m.room.member", "unsigned": { "age": 1647972338 } }, { "content": { "avatar_url": "mxc://matrix.org/GPMcaQOeYjjWNTMFarGJfQBJ", "displayname": "am3on", "membership": "join" }, "event_id": "$1503415661608875wktNN:matrix.org", "membership": "join", "origin_server_ts": 1503415661784, "sender": "@am2on:matrix.org", "state_key": "@am2on:matrix.org", "type": "m.room.member", "unsigned": { "age": 7252290894, "replaces_state": "$15033546165537152uGlIc:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ilbelkyr (IRC)", "membership": "join" }, "event_id": "$15106410551442167tQAYa:matrix.org", "membership": "join", "origin_server_ts": 1510641055736, "sender": "@freenode_ilbelkyr:matrix.org", "state_key": "@freenode_ilbelkyr:matrix.org", "type": "m.room.member", "unsigned": { "age": 26896942 } }, { "content": { "membership": "leave" }, "event_id": "$150016320644MrleW:kubikmilan.sk", "membership": "leave", "origin_server_ts": 1500163206639, "sender": "@apophys:kubikmilan.sk", "state_key": "@apophys:kubikmilan.sk", "type": "m.room.member", "unsigned": { "age": 10504746039, "prev_content": { "avatar_url": "mxc://kubikmilan.sk/QudFshNAtRykMDOzlaCSmzFg", "displayname": "Apophys", "membership": "join" }, "prev_sender": "@apophys:kubikmilan.sk", "replaces_state": "$150016177021SOpEb:kubikmilan.sk" } }, { "content": { "avatar_url": "mxc://hackerspace.be/NstZmtHKHpymAXkPmlNBpwro", "displayname": "betz", "membership": "join" }, "event_id": "$15030674941180KRtLA:hackerspace.be", "membership": "join", "origin_server_ts": 1503067494025, "sender": "@betz:hackerspace.be", "state_key": "@betz:hackerspace.be", "type": "m.room.member", "unsigned": { "age": 7600458653, "replaces_state": "$15030661681069pzvXc:hackerspace.be" } }, { "content": { "membership": "leave" }, "event_id": "$14991081902ULhzz:ngse.de", "membership": "leave", "origin_server_ts": 1499108190108, "sender": "@chris:ngse.de", "state_key": "@chris:ngse.de", "type": "m.room.member", "unsigned": { "age": 11559762570, "replaces_state": "$14991079761gCGdN:ngse.de" } }, { "content": { "avatar_url": null, "displayname": "Eric", "membership": "join" }, "event_id": "$1456978883347205UPuoV:matrix.org", "membership": "join", "origin_server_ts": 1456978883709, "sender": "@internetjanitor:matrix.org", "state_key": "@internetjanitor:matrix.org", "type": "m.room.member", "unsigned": { "age": 53689068969 } }, { "content": { "name": "#matrix-dev:matrix.org" }, "event_id": "$144069686715275mzmiP:matrix.org", "origin_server_ts": 1440696867764, "sender": "@erikj:matrix.org", "state_key": "", "type": "m.room.name", "unsigned": { "age": 69971084914, "replaces_state": "$144069686215271laiXu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oBTpzzaXRKMaTSktWKHCLMnV", "displayname": "oddvar", "membership": "join" }, "event_id": "$1470993594217288hJQmF:matrix.org", "membership": "join", "origin_server_ts": 1470993594553, "sender": "@oddvar:matrix.org", "state_key": "@oddvar:matrix.org", "type": "m.room.member", "unsigned": { "age": 39674358125, "replaces_state": "$144735122212404HukEV:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Wipeout", "kind": "guest", "membership": "join" }, "event_id": "$14825201811534935nwdoN:matrix.org", "membership": "join", "origin_server_ts": 1482520181304, "sender": "@108457:matrix.org", "state_key": "@108457:matrix.org", "type": "m.room.member", "unsigned": { "age": 28147771374 } }, { "content": { "avatar_url": "mxc://matrix.org/TBXxnGAeAGdTZaAkpdWWSAPj", "displayname": "RSS Bot", "membership": "join" }, "event_id": "$147498870484734STZbw:matrix.org", "membership": "join", "origin_server_ts": 1474988704362, "sender": "@rssbot:matrix.org", "state_key": "@rssbot:matrix.org", "type": "m.room.member", "unsigned": { "age": 35679248316, "replaces_state": "$147498134652860eJmvJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/olJZTEUYDOuRljXkGgFwwdGf", "displayname": "trinary", "membership": "join" }, "event_id": "$147439426171635xcegj:matrix.org", "membership": "join", "origin_server_ts": 1474394261065, "sender": "@trinary:matrix.org", "state_key": "@trinary:matrix.org", "type": "m.room.member", "unsigned": { "age": 36273691613, "replaces_state": "$147308311214361lSbBl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148223715822rtJet:glennarens.com", "membership": "leave", "origin_server_ts": 1482237158701, "sender": "@gl3nn:glennarens.com", "state_key": "@gl3nn:glennarens.com", "type": "m.room.member", "unsigned": { "age": 28430793977, "replaces_state": "$14821425021lITqZ:glennarens.com" } }, { "content": { "avatar_url": "mxc://matrix.org/RSpLmbolURGbcrVoivbztojg", "displayname": "PandHacks", "membership": "join" }, "event_id": "$1487014895247928cutTM:matrix.org", "membership": "join", "origin_server_ts": 1487014895648, "sender": "@hugor:matrix.org", "state_key": "@hugor:matrix.org", "type": "m.room.member", "unsigned": { "age": 23653057030, "replaces_state": "$14855299771144513xmTAn:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1448465755229944kDSeq:matrix.org", "origin_server_ts": 1448465755680, "sender": "@intelfx:matrix.org", "state_key": "@intelfx:matrix.org", "type": "m.room.member", "unsigned": { "age": 62202196998, "replaces_state": "$1446668278558551ucbmx:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/SZVDePGlrGTAbVltDIcuhUUi", "displayname": "Cobra36093", "membership": "join" }, "event_id": "$1493108670779745MPmpi:matrix.org", "membership": "join", "origin_server_ts": 1493108670951, "sender": "@Cobra36093:matrix.org", "state_key": "@Cobra36093:matrix.org", "type": "m.room.member", "unsigned": { "age": 17559281727, "replaces_state": "$1474717507608213YBBgf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448223198875oApRB:matrix.org", "membership": "leave", "origin_server_ts": 1509944822618, "sender": "@freenode_CcxWrk_:matrix.org", "state_key": "@freenode_CcxWrk_:matrix.org", "type": "m.room.member", "unsigned": { "age": 723130060, "replaces_state": "$15099126652432128sgNYY:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/cFhNTLGDqcKXhbjyuziSdoYA#auto", "displayname": "Bobby Tables", "membership": "join" }, "event_id": "$1438261679222598KbECr:matrix.org", "origin_server_ts": 1438261679592, "sender": "@bobbytables:matrix.org", "state_key": "@bobbytables:matrix.org", "type": "m.room.member", "unsigned": { "age": 72406273086, "replaces_state": "$14330607131056IIbvp:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14848091373421082KMllo:matrix.org", "membership": "leave", "origin_server_ts": 1484809137171, "sender": "@Riedmen:matrix.org", "state_key": "@Riedmen:matrix.org", "type": "m.room.member", "unsigned": { "age": 25858815507, "replaces_state": "$14848090573420843mGqZe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "smithsps", "membership": "join" }, "event_id": "$15017954051394904WlDLt:matrix.org", "membership": "join", "origin_server_ts": 1501795405404, "sender": "@smithsps:matrix.org", "state_key": "@smithsps:matrix.org", "type": "m.room.member", "unsigned": { "age": 8872547274 } }, { "content": { "avatar_url": null, "displayname": "synapseuser", "membership": "join" }, "event_id": "$1501095876163357AOoIr:matrix.org", "membership": "join", "origin_server_ts": 1501095876049, "sender": "@synapseuser:matrix.org", "state_key": "@synapseuser:matrix.org", "type": "m.room.member", "unsigned": { "age": 9572076629 } }, { "content": { "membership": "leave" }, "event_id": "$1426625064866fkUwa:matrix.org", "origin_server_ts": 1426625064877, "sender": "@brianpdx:matrix.org", "state_key": "@brianpdx:matrix.org", "type": "m.room.member", "unsigned": { "age": 84042887801, "replaces_state": "$1426624670851jPIbA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150940577921367NpRDx:iiens.net", "membership": "leave", "origin_server_ts": 1509405779465, "sender": "@morignot2011:iiens.net", "state_key": "@morignot2011:iiens.net", "type": "m.room.member", "unsigned": { "age": 1262173213, "prev_content": { "avatar_url": null, "displayname": "zouzou", "membership": "join" }, "prev_sender": "@morignot2011:iiens.net", "replaces_state": "$150940191421330PFIrR:iiens.net" } }, { "content": { "membership": "leave" }, "event_id": "$1451559042573961DLJtA:matrix.org", "origin_server_ts": 1451559042952, "sender": "@herah:matrix.org", "state_key": "@herah:matrix.org", "type": "m.room.member", "unsigned": { "age": 59108909726, "replaces_state": "$1451559015573932bzmEz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14673046335shHoE:goryachev.org", "membership": "leave", "origin_server_ts": 1467304633505, "sender": "@igor:goryachev.org", "state_key": "@igor:goryachev.org", "type": "m.room.member", "unsigned": { "age": 43363319173, "replaces_state": "$146350796927LMSIj:goryachev.org" } }, { "content": { "avatar_url": "mxc://matrix.bingo-boom.ru/uXWKfEBrTcYkzhOeexcpfHxD", "displayname": "Рябый Денис Валерьевич", "membership": "join" }, "event_id": "$149812864321648YPNqI:matrix.bingo-boom.ru", "membership": "join", "origin_server_ts": 1498128643495, "sender": "@dv_ryabyy:matrix.bingo-boom.ru", "state_key": "@dv_ryabyy:matrix.bingo-boom.ru", "type": "m.room.member", "unsigned": { "age": 12539309183, "replaces_state": "$149457959751WdWgQ:matrix.bingo-boom.ru" } }, { "content": { "avatar_url": "mxc://matrix.org/wATYcuunSHANaUxQptnWOVNe", "displayname": "Daniel Centore", "membership": "join" }, "event_id": "$146901841716175rpOPH:matrix.org", "membership": "join", "origin_server_ts": 1469018417178, "sender": "@daniel.centore:matrix.org", "state_key": "@daniel.centore:matrix.org", "type": "m.room.member", "unsigned": { "age": 41649535500, "replaces_state": "$14689602951366030NMFvx:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15052174733205080GmUZu:matrix.org", "membership": "leave", "origin_server_ts": 1505217473279, "sender": "@aesgcm:matrix.org", "state_key": "@aesgcm:matrix.org", "type": "m.room.member", "unsigned": { "age": 5450479399, "replaces_state": "$14925967561408254dtCkn:matrix.org" } }, { "content": { "avatar_url": "mxc://cybre.space/WeBAOkvRFCGpSlhZflAPiYIa", "displayname": "chr", "membership": "join" }, "event_id": "$1505859023949dcQfm:cybre.space", "membership": "join", "origin_server_ts": 1505859023189, "sender": "@chr:cybre.space", "state_key": "@chr:cybre.space", "type": "m.room.member", "unsigned": { "age": 4808929489, "prev_content": { "membership": "leave" }, "prev_sender": "@chr:cybre.space", "replaces_state": "$15014424421407XxbCp:cybre.space" } }, { "content": { "avatar_url": null, "displayname": "dev3dev", "membership": "join" }, "event_id": "$1472020931372940GzkvP:matrix.org", "membership": "join", "origin_server_ts": 1472020931749, "sender": "@dev3dev:matrix.org", "state_key": "@dev3dev:matrix.org", "type": "m.room.member", "unsigned": { "age": 38647020929 } }, { "content": { "membership": "leave" }, "event_id": "$14956631742024671AXxrs:matrix.org", "membership": "leave", "origin_server_ts": 1495663174937, "sender": "@freenode_Sipster__:matrix.org", "state_key": "@freenode_Sipster__:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004777741, "replaces_state": "$143872493530970eBTAf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1460628331647ZEOUR:matrix.org", "membership": "leave", "origin_server_ts": 1460628331235, "sender": "@evehkai:matrix.org", "state_key": "@evehkai:matrix.org", "type": "m.room.member", "unsigned": { "age": 50039621443, "replaces_state": "$1460628320627ZiKDE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/nFihSgSGmRFuWQxQLfCSOjFK", "displayname": "blide", "membership": "join" }, "event_id": "$14576233018643WmqLI:matrix.org", "membership": "join", "origin_server_ts": 1457623301134, "sender": "@blide:matrix.org", "state_key": "@blide:matrix.org", "type": "m.room.member", "unsigned": { "age": 53044651544, "replaces_state": "$145730847679717iuqaP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.dmp-develop.com/OZhQWRQEIOfLWKOwaDcOtvVW", "displayname": "JigmeDatseHS", "membership": "join" }, "event_id": "$147467118322ibnKt:matrix.dmp-develop.com", "membership": "join", "origin_server_ts": 1474671183342, "sender": "@JigmeDatseHS:matrix.dmp-develop.com", "state_key": "@JigmeDatseHS:matrix.dmp-develop.com", "type": "m.room.member", "unsigned": { "age": 35996769336, "prev_content": { "avatar_url": null, "displayname": "JigmeDatseHS", "membership": "join" }, "prev_sender": "@JigmeDatseHS:matrix.dmp-develop.com", "replaces_state": "$147467072317PKvdi:matrix.dmp-develop.com" } }, { "content": { "avatar_url": null, "displayname": "dq11", "membership": "join" }, "event_id": "$1456957474337335KIDiR:matrix.org", "membership": "join", "origin_server_ts": 1456957474315, "sender": "@dq11:matrix.org", "state_key": "@dq11:matrix.org", "type": "m.room.member", "unsigned": { "age": 53710478363, "replaces_state": "$145595962039926zWdmi:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Tiehscher", "membership": "join" }, "event_id": "$15017845021215082giuNv:matrix.org", "membership": "join", "origin_server_ts": 1501784502222, "sender": "@Tiehscher:matrix.org", "state_key": "@Tiehscher:matrix.org", "type": "m.room.member", "unsigned": { "age": 8883450456, "replaces_state": "$14851916731475679TulDv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1424072930155EMrBQ:matrix.org", "origin_server_ts": 1424072930318, "sender": "@dmk:matrix.org", "state_key": "@dmk:matrix.org", "type": "m.room.member", "unsigned": { "age": 86595022360, "replaces_state": "$14239186781073zEOfL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632212025726kxLWz:matrix.org", "membership": "leave", "origin_server_ts": 1495663221817, "sender": "@freenode_roosemberth:matrix.org", "state_key": "@freenode_roosemberth:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004730861, "replaces_state": "$1489740620571269DEfzY:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 231510", "kind": "guest", "membership": "join" }, "event_id": "$1494507455133818WfdPJ:matrix.org", "membership": "join", "origin_server_ts": 1494507455113, "sender": "@231510:matrix.org", "state_key": "@231510:matrix.org", "type": "m.room.member", "unsigned": { "age": 16160497565 } }, { "content": { "avatar_url": null, "displayname": "sn", "membership": "join" }, "event_id": "$14966951392zqDsa:stusta.de", "origin_server_ts": 1496695138846, "sender": "@simon.naab:stusta.de", "state_key": "@simon.naab:stusta.de", "type": "m.room.member", "unsigned": { "age": 300 } }, { "content": { "avatar_url": "mxc://matrix.org/aGpLwOEfIqdnHvUSaavDCJXK", "displayname": "Marit Annink", "membership": "join" }, "event_id": "$14320353421066VLqYZ:matrix.org", "membership": "join", "origin_server_ts": 1432035342484, "sender": "@Marit:matrix.org", "state_key": "@Marit:matrix.org", "type": "m.room.member", "unsigned": { "age": 78632610194 } }, { "content": { "avatar_url": "mxc://matrix.org/QlAcDjZVzzFVklwptcQpeQzo#auto", "displayname": "dvn", "membership": "join" }, "event_id": "$1426805990328VXxID:matrix.org", "origin_server_ts": 1426805990795, "sender": "@dvn:matrix.org", "state_key": "@dvn:matrix.org", "type": "m.room.member", "unsigned": { "age": 83861961883, "replaces_state": "$1426805986327Hmsma:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631502024159AzZNm:matrix.org", "membership": "leave", "origin_server_ts": 1495663150550, "sender": "@freenode_Mjark-:matrix.org", "state_key": "@freenode_Mjark-:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004802128, "replaces_state": "$1431075949973XycLl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1507206066564987iNizf:matrix.org", "membership": "leave", "origin_server_ts": 1507206066002, "sender": "@freenode_chridal_:matrix.org", "state_key": "@freenode_chridal_:matrix.org", "type": "m.room.member", "unsigned": { "age": 3461886676, "replaces_state": "$15054909897187547FplkL:matrix.org" } }, { "content": { "kind": "guest", "membership": "leave" }, "event_id": "$14863192771328281XZcyH:matrix.org", "membership": "leave", "origin_server_ts": 1486319277746, "sender": "@144218:matrix.org", "state_key": "@144218:matrix.org", "type": "m.room.member", "unsigned": { "age": 24348674932, "replaces_state": "$14862958041208469yERYe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15103233855JNAXH:kreatasien.de", "membership": "leave", "origin_server_ts": 1510323385865, "sender": "@luna:kreatasien.de", "state_key": "@luna:kreatasien.de", "type": "m.room.member", "unsigned": { "age": 344566813, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@luna:kreatasien.de", "replaces_state": "$15103230921QpCOQ:kreatasien.de" } }, { "content": { "membership": "leave" }, "event_id": "$148784352018PORPW:scryk.net", "membership": "leave", "origin_server_ts": 1487843520645, "sender": "@test:scryk.net", "state_key": "@test:scryk.net", "type": "m.room.member", "unsigned": { "age": 645917, "replaces_state": "$148784290916gyWcP:scryk.net" } }, { "content": { "membership": "leave" }, "event_id": "$14313918262029nKWIM:matrix.org", "origin_server_ts": 1431391826243, "sender": "@lexwin:matrix.org", "state_key": "@lexwin:matrix.org", "type": "m.room.member", "unsigned": { "age": 79276126435, "replaces_state": "$1423870384840HEwwn:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/VJMxyikuUyjHsNXJOBntyvPT", "displayname": "techno", "membership": "join" }, "event_id": "$1482008806519006JakRn:matrix.org", "membership": "join", "origin_server_ts": 1482008806504, "sender": "@technowizard:matrix.org", "state_key": "@technowizard:matrix.org", "type": "m.room.member", "unsigned": { "age": 28659146174, "replaces_state": "$1482002157490181AhPMw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jascott", "membership": "join" }, "event_id": "$1496821249555645RIYoR:matrix.org", "membership": "join", "origin_server_ts": 1496821249883, "sender": "@jascot:matrix.org", "state_key": "@jascot:matrix.org", "type": "m.room.member", "unsigned": { "age": 13846702795, "replaces_state": "$14967356585231927grTxm:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612605037jCYYs:matrix.org", "origin_server_ts": 1429261260953, "sender": "@kegan:matrix.org", "state_key": "@irc_Arathorn:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406691725, "replaces_state": "$14276642471253wWdnB:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Léon B", "membership": "join" }, "event_id": "$1490721620820951hNqRd:matrix.org", "membership": "join", "origin_server_ts": 1490721620014, "sender": "@fle:matrix.org", "state_key": "@fle:matrix.org", "type": "m.room.member", "unsigned": { "age": 19946332664 } }, { "content": { "membership": "ban" }, "event_id": "$1449493569120btVBI:jki.re", "origin_server_ts": 1449493569847, "sender": "@erikj:jki.re", "state_key": "@sanderr:matrix.grids.be", "type": "m.room.member", "unsigned": { "age": 61174382831, "replaces_state": "$141777272943huDOd:matrix.grids.be" } }, { "content": { "avatar_url": "mxc://matrix.ffslfl.net/vRFEOoRmfuwZQOmEgfDkdzkW", "displayname": "DasNordlicht", "membership": "join" }, "event_id": "$1490469586253DtgvQ:matrix.ffslfl.net", "origin_server_ts": 1490469586251, "sender": "@DasNordlicht:matrix.ffslfl.net", "state_key": "@DasNordlicht:matrix.ffslfl.net", "type": "m.room.member", "unsigned": { "age": 86 } }, { "content": { "avatar_url": null, "displayname": "seequ2", "membership": "join" }, "event_id": "$14835651491623231gjtQu:matrix.org", "membership": "join", "origin_server_ts": 1483565149574, "sender": "@seequ2:matrix.org", "state_key": "@seequ2:matrix.org", "type": "m.room.member", "unsigned": { "age": 27102803104 } }, { "content": { "avatar_url": "mxc://matrix.org/gjYgIXDOehSQktSHpVfTMwyn#auto", "displayname": "Matthew Test9", "membership": "join" }, "event_id": "$144236105831662KDfZD:matrix.org", "membership": "join", "origin_server_ts": 1442361058030, "sender": "@matthewtest9:matrix.org", "state_key": "@matthewtest9:matrix.org", "type": "m.room.member", "unsigned": { "age": 68306894648 } }, { "content": { "membership": "leave" }, "event_id": "$14229705992129eiIWZ:matrix.org", "origin_server_ts": 1422970599865, "sender": "@fabrix:matrix.org", "state_key": "@fabrix:matrix.org", "type": "m.room.member", "unsigned": { "age": 87697352813, "replaces_state": "$14229703262125euXEv:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1507346499652852mfsvk:matrix.org", "membership": "join", "origin_server_ts": 1507346499779, "sender": "@steven.dai:matrix.org", "state_key": "@steven.dai:matrix.org", "type": "m.room.member", "unsigned": { "age": 3321452899 } }, { "content": { "avatar_url": "mxc://matrix.org/aVIiiqzVPGzHIqMGNdvbLLkJ", "displayname": "Tiago¯\\_(ツ)_/¯", "membership": "join" }, "event_id": "$1477678760118372oPRYN:matrix.org", "membership": "join", "origin_server_ts": 1477678760151, "sender": "@TiagoDanin:matrix.org", "state_key": "@TiagoDanin:matrix.org", "type": "m.room.member", "unsigned": { "age": 32989192527, "replaces_state": "$14672263882058551daYAJ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DdXtitrUGgvUguohyqjfuSGu#auto", "displayname": "ScopeBurst", "membership": "join" }, "event_id": "$1437112995185905pqsWj:matrix.org", "membership": "join", "origin_server_ts": 1437112995129, "sender": "@ScopeBurst:matrix.org", "state_key": "@ScopeBurst:matrix.org", "type": "m.room.member", "unsigned": { "age": 73554957549 } }, { "content": { "membership": "leave" }, "event_id": "$15059551846suTYW:edraj.io", "membership": "leave", "origin_server_ts": 1505955184020, "sender": "@kefah:edraj.io", "state_key": "@kefah:edraj.io", "type": "m.room.member", "unsigned": { "age": 4712768658, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@kefah:edraj.io", "replaces_state": "$15059550734eKCja:edraj.io" } }, { "content": { "avatar_url": null, "displayname": "Peter Gärdenäs", "membership": "join" }, "event_id": "$1456928443315338rWeqK:matrix.org", "membership": "join", "origin_server_ts": 1456928443322, "sender": "@PeterGardenas:matrix.org", "state_key": "@PeterGardenas:matrix.org", "type": "m.room.member", "unsigned": { "age": 53739509356 } }, { "content": { "avatar_url": "mxc://matrix.org/XEPQejAuOudEkEEcPnpQiVNX", "displayname": "Ibrahim", "membership": "join" }, "event_id": "$14806933702754821gXgWN:matrix.org", "membership": "join", "origin_server_ts": 1480693370125, "sender": "@Ibrahim:matrix.org", "state_key": "@Ibrahim:matrix.org", "type": "m.room.member", "unsigned": { "age": 29974582553, "replaces_state": "$1464499298259491sfKPr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15027870935094Uklqf:open-xchange.com", "origin_server_ts": 1502787245980, "sender": "@bjoern.vonderlinde:open-xchange.com", "state_key": "@bjoern.vonderlinde:open-xchange.com", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$146571690069qUjEI:darkboli.net", "membership": "join", "origin_server_ts": 1465716900045, "sender": "@catbot:darkboli.net", "state_key": "@catbot:darkboli.net", "type": "m.room.member", "unsigned": { "age": 44951052633, "replaces_state": "$146571689468DSpKk:darkboli.net" } }, { "age_ts": 1509312924837, "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15093129244mGXNx:croxis.net", "origin_server_ts": 1509312923851, "sender": "@croxis:croxis.net", "state_key": "@croxis:croxis.net", "type": "m.room.member", "unsigned": { "age": 14, "replaces_state": "$15093097069WLyNs:croxis.net" } }, { "content": { "avatar_url": "mxc://matrix.org/NJZQKBOYWtnzRLivFAZQZpdT", "displayname": "technowizard", "membership": "join" }, "event_id": "$14668698451480218pbGwH:matrix.org", "membership": "join", "origin_server_ts": 1466869845731, "sender": "@austinhc:matrix.org", "state_key": "@austinhc:matrix.org", "type": "m.room.member", "unsigned": { "age": 43798106947, "replaces_state": "$14666908101160253mHgUu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 38069", "kind": "guest", "membership": "join" }, "event_id": "$1473202189135660QMKMN:matrix.org", "membership": "join", "origin_server_ts": 1473202189126, "sender": "@38069:matrix.org", "state_key": "@38069:matrix.org", "type": "m.room.member", "unsigned": { "age": 37465763552 } }, { "content": { "membership": "leave" }, "event_id": "$1508097573198970WqiVk:matrix.org", "membership": "leave", "origin_server_ts": 1508097573878, "sender": "@freenode_SyrupThi`:matrix.org", "state_key": "@freenode_SyrupThi`:matrix.org", "type": "m.room.member", "unsigned": { "age": 2570378800, "replaces_state": "$1508097504197821OYRco:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14170880440NtpJc:erikjohnston.com", "membership": "leave", "origin_server_ts": 1417088044517, "sender": "@erik:erikjohnston.com", "state_key": "@erik:erikjohnston.com", "type": "m.room.member", "unsigned": { "age": 93579907494 } }, { "content": { "membership": "leave" }, "event_id": "$15056967119FTZOc:matrix.pivik.fr", "membership": "leave", "origin_server_ts": 1505696711815, "sender": "@Guillaume:matrix.pivik.fr", "state_key": "@Guillaume:matrix.pivik.fr", "type": "m.room.member", "unsigned": { "age": 4971240863, "prev_content": { "avatar_url": "mxc://matrix.pivik.fr/wfQpRIFuhtpLaUaOVuBoDIng", "displayname": "Guillaume", "membership": "join" }, "prev_sender": "@Guillaume:matrix.pivik.fr", "replaces_state": "$15056962883MtsDX:matrix.pivik.fr" } }, { "content": { "membership": "leave" }, "event_id": "$1442576763105107NOnrL:matrix.org", "origin_server_ts": 1442576763490, "sender": "@spikebike:matrix.org", "state_key": "@spikebike:matrix.org", "type": "m.room.member", "unsigned": { "age": 68091189188, "replaces_state": "$1442568241101146Nhloj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 23997", "kind": "guest", "membership": "join" }, "event_id": "$1468311026116548gWGVw:matrix.org", "membership": "join", "origin_server_ts": 1468311026193, "sender": "@23997:matrix.org", "state_key": "@23997:matrix.org", "type": "m.room.member", "unsigned": { "age": 42356926485 } }, { "content": { "membership": "leave" }, "event_id": "$1435791847164581DjKux:matrix.org", "origin_server_ts": 1435791847558, "sender": "@ubahn:matrix.org", "state_key": "@ubahn:matrix.org", "type": "m.room.member", "unsigned": { "age": 74876105120, "replaces_state": "$143544325157690WPOnr:matrix.org" } }, { "age_ts": 1474527822954, "content": { "avatar_url": "mxc://matrix.zottel.net/YsrfijXnxjlBfIlStuXJRVgx", "displayname": "zottel", "membership": "join" }, "event_id": "$147452782180qLMdi:matrix.zottel.net", "origin_server_ts": 1474527819508, "sender": "@zottel:matrix.zottel.net", "state_key": "@zottel:matrix.zottel.net", "type": "m.room.member", "unsigned": { "age": 2364, "prev_content": { "avatar_url": "mxc://matrix.zottel.net/YsrfijXnxjlBfIlStuXJRVgx", "displayname": "zottel", "membership": "join" }, "prev_sender": "@zottel:matrix.zottel.net", "replaces_state": "$147437204948aPUzL:matrix.zottel.net" } }, { "content": { "avatar_url": null, "displayname": "Guest 164520", "kind": "guest", "membership": "join" }, "event_id": "$1488333965314089WJqKd:matrix.org", "membership": "join", "origin_server_ts": 1488333965787, "sender": "@164520:matrix.org", "state_key": "@164520:matrix.org", "type": "m.room.member", "unsigned": { "age": 22333986891 } }, { "content": { "avatar_url": "mxc://its.chat/cDKQgdlTtcdRTQpuZgruzzCu", "displayname": "siigna", "membership": "join" }, "event_id": "$14962315868fsGbL:its.chat", "origin_server_ts": 1496231586110, "sender": "@siigna:its.chat", "state_key": "@siigna:its.chat", "type": "m.room.member", "unsigned": { "age": 39 } }, { "content": { "membership": "leave" }, "event_id": "$15024946271025028lkAbN:matrix.org", "membership": "leave", "origin_server_ts": 1502494627324, "sender": "@freenode_Arathorn:matrix.org", "state_key": "@freenode_Arathorn:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173325354, "replaces_state": "$15016073805944730IVBVj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/FVCJsXvrNYZdaqndGEfoplPR", "displayname": "rymdhund", "membership": "join" }, "event_id": "$14845934172151150FisHC:matrix.org", "membership": "join", "origin_server_ts": 1484593417369, "sender": "@rymdhund:matrix.org", "state_key": "@rymdhund:matrix.org", "type": "m.room.member", "unsigned": { "age": 26074535309 } }, { "content": { "aliases": [ "#matrix-dev:tchncs.de" ] }, "event_id": "$1489306007202AVwet:tchncs.de", "origin_server_ts": 1489306007685, "sender": "@Milan:tchncs.de", "state_key": "tchncs.de", "type": "m.room.aliases", "unsigned": { "age": 21361944993 } }, { "content": { "membership": "leave" }, "event_id": "$14956631952025116nYAeI:matrix.org", "membership": "leave", "origin_server_ts": 1495663195714, "sender": "@freenode_cjd:matrix.org", "state_key": "@freenode_cjd:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004756964, "replaces_state": "$145433037471175VTYvP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "runciter (IRC)", "membership": "join" }, "event_id": "$1499322389406227MCrTe:matrix.org", "membership": "join", "origin_server_ts": 1499322389887, "sender": "@freenode_runciter:matrix.org", "state_key": "@freenode_runciter:matrix.org", "type": "m.room.member", "unsigned": { "age": 11345562791, "replaces_state": "$1499317792363359QGRqk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147758008718435qhtyK:57north.org.uk", "membership": "leave", "origin_server_ts": 1477580087234, "sender": "@lime:57north.org.uk", "state_key": "@lime:57north.org.uk", "type": "m.room.member", "unsigned": { "age": 33087865444, "replaces_state": "$1474487328563rPvJr:57north.org.uk" } }, { "content": { "membership": "leave" }, "event_id": "$148943778728TCObM:macbeth.cc", "membership": "leave", "origin_server_ts": 1489437787419, "sender": "@sam:macbeth.cc", "state_key": "@sam:macbeth.cc", "type": "m.room.member", "unsigned": { "age": 21230165259, "prev_content": { "avatar_url": null, "displayname": "sam", "membership": "join" }, "prev_sender": "@sam:macbeth.cc", "replaces_state": "$148718976616MuTGs:macbeth.cc" } }, { "content": { "avatar_url": "mxc://matrix.org/FnOVRVVEdyhCbadRWUoYHGZJ", "displayname": "mva1985", "membership": "join" }, "event_id": "$1485383178309438HwkRx:matrix.org", "membership": "join", "origin_server_ts": 1485383178160, "sender": "@mva1985:matrix.org", "state_key": "@mva1985:matrix.org", "type": "m.room.member", "unsigned": { "age": 25284774518, "replaces_state": "$14846840992699031QuKiC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/IqDuKBbBUYywreqOzsGdBdAh#auto", "displayname": "klfd", "membership": "join" }, "event_id": "$144741802339361zvWiA:matrix.org", "membership": "join", "origin_server_ts": 1447418023774, "sender": "@klfd:matrix.org", "state_key": "@klfd:matrix.org", "type": "m.room.member", "unsigned": { "age": 63249928904 } }, { "content": { "membership": "leave" }, "event_id": "$15016207866240297DUoRZ:matrix.org", "membership": "leave", "origin_server_ts": 1501620786470, "sender": "@freenode_wadadli:matrix.org", "state_key": "@freenode_wadadli:matrix.org", "type": "m.room.member", "unsigned": { "age": 9047166208, "replaces_state": "$15014006952753068Lhhcc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/COsgcQtHKzkCCesJoTAVmVrH#auto", "displayname": "Stass Soldatov", "membership": "join" }, "event_id": "$1427219566894RJqzg:matrix.org", "membership": "join", "origin_server_ts": 1427219566286, "sender": "@stass:matrix.org", "state_key": "@stass:matrix.org", "type": "m.room.member", "unsigned": { "age": 83448386392 } }, { "content": { "avatar_url": "mxc://matrix.org/vLELwLDaqBGOOzkiBDrTNkJQ", "displayname": "oxenfree89", "membership": "join" }, "event_id": "$14965507423326861XNLxd:matrix.org", "membership": "join", "origin_server_ts": 1496550742153, "sender": "@oxenfree:matrix.org", "state_key": "@oxenfree:matrix.org", "type": "m.room.member", "unsigned": { "age": 14117210525 } }, { "content": { "avatar_url": "", "displayname": "richvdh", "membership": "join" }, "event_id": "$Ukrcs5o0z9qRPnDU:dendrite.sw1v.org", "origin_server_ts": 1510355777883, "sender": "@richvdh:dendrite.sw1v.org", "state_key": "@richvdh:dendrite.sw1v.org", "type": "m.room.member", "unsigned": { "replaces_state": "$x5VfCKmzv1pPvFhY:dendrite.sw1v.org" } }, { "content": { "avatar_url": "mxc://matrix.org/zkMbjEiCToqWCfBIXcYRMLnz", "displayname": "Jon", "membership": "join" }, "event_id": "$1463174694412714EbATO:matrix.org", "membership": "join", "origin_server_ts": 1463174694384, "sender": "@jfred:matrix.org", "state_key": "@jfred:matrix.org", "type": "m.room.member", "unsigned": { "age": 47493258294, "replaces_state": "$1463174655412640LnaXT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Shaka", "membership": "join" }, "event_id": "$1474291915592893DMFep:matrix.org", "membership": "join", "origin_server_ts": 1474291915442, "sender": "@Shaka:matrix.org", "state_key": "@Shaka:matrix.org", "type": "m.room.member", "unsigned": { "age": 36376037236 } }, { "content": { "avatar_url": null, "displayname": "aetin0", "membership": "join" }, "event_id": "$14845141231747566OPQaX:matrix.org", "membership": "join", "origin_server_ts": 1484514123365, "sender": "@aetin0:matrix.org", "state_key": "@aetin0:matrix.org", "type": "m.room.member", "unsigned": { "age": 26153829313, "replaces_state": "$1484261342502242tRcdG:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XeEbqsxriAddtxGMgvPjHaJx", "displayname": "alisa", "membership": "join" }, "event_id": "$15061681482211366njtuO:matrix.org", "membership": "join", "origin_server_ts": 1506168148944, "sender": "@limansky:matrix.org", "state_key": "@limansky:matrix.org", "type": "m.room.member", "unsigned": { "age": 4499803734 } }, { "content": { "avatar_url": null, "displayname": "Bob", "membership": "join" }, "event_id": "$1452390831152444iNOUb:matrix.org", "membership": "join", "origin_server_ts": 1452390831084, "sender": "@savevshrnt:matrix.org", "state_key": "@savevshrnt:matrix.org", "type": "m.room.member", "unsigned": { "age": 58277121594 } }, { "content": { "membership": "leave" }, "event_id": "$145839314795515iyvZv:matrix.org", "membership": "leave", "origin_server_ts": 1458393147931, "sender": "@moyamo:matrix.org", "state_key": "@moyamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 52274804747, "replaces_state": "$145839311995506cxldp:matrix.org" } }, { "content": { "avatar_url": "mxc://lyndir.com/HIhiQYXtsCZhXYeqNUlpBYca", "displayname": "lhunath", "membership": "join" }, "event_id": "$148823565936uLcXs:lyndir.com", "origin_server_ts": 1488235655387, "sender": "@lhunath:lyndir.com", "state_key": "@lhunath:lyndir.com", "type": "m.room.member", "unsigned": { "age": 62 } }, { "content": { "avatar_url": "mxc://matrix.org/gWLPZZSJPbhgHoyShiGSesXS", "displayname": "Amandine", "membership": "join" }, "event_id": "$14576201646744oxyAG:matrix.org", "membership": "join", "origin_server_ts": 1457620164626, "sender": "@Amandine:matrix.org", "state_key": "@Amandine:matrix.org", "type": "m.room.member", "unsigned": { "age": 53047788052, "replaces_state": "$14576193265823ofbLi:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/DkyxGlkrbbvAjvMwBKtGoWeY", "displayname": "gustav", "membership": "join" }, "event_id": "$15052986344232440QBUsh:matrix.org", "membership": "join", "origin_server_ts": 1505298634505, "sender": "@spllg:matrix.org", "state_key": "@spllg:matrix.org", "type": "m.room.member", "unsigned": { "age": 5369318173 } }, { "content": { "avatar_url": "mxc://matrix.org/MyhoOCuggdIfVDNalMqWdPam", "displayname": "William Boman", "membership": "join" }, "event_id": "$1503688385434329qWhIN:matrix.org", "membership": "join", "origin_server_ts": 1503688385874, "sender": "@William:matrix.org", "state_key": "@William:matrix.org", "type": "m.room.member", "unsigned": { "age": 6979566804, "replaces_state": "$1443452679261506OZtLX:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/YFrptlzihABoAWJxviAjzVrq", "displayname": "Hot Giraffe", "membership": "join" }, "event_id": "$1474667743379095DOlBs:matrix.org", "membership": "join", "origin_server_ts": 1474667743256, "sender": "@hotgiraffe:matrix.org", "state_key": "@hotgiraffe:matrix.org", "type": "m.room.member", "unsigned": { "age": 36000209422 } }, { "content": { "avatar_url": "mxc://matrix.org/zbFOLIJBVvxMzoCjnVDKNOvD", "displayname": "Alexendoo", "membership": "join" }, "event_id": "$1483876055474532rcNOc:matrix.org", "membership": "join", "origin_server_ts": 1483876055134, "sender": "@Alexendoo:matrix.org", "state_key": "@Alexendoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 26791897544, "replaces_state": "$1477153959904062wWUrv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15050897174vpjuI:isengard.online", "membership": "leave", "origin_server_ts": 1505089717975, "sender": "@chronal:isengard.online", "state_key": "@chronal:isengard.online", "type": "m.room.member", "unsigned": { "age": 5578234703, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@chronal:isengard.online", "replaces_state": "$15050889801gkbKc:isengard.online" } }, { "content": { "avatar_url": "mxc://matrix.org/uJcOyHSaziTziviGTWcdeLre#auto", "displayname": "victorm", "membership": "join" }, "event_id": "$1446533402444991GGWJp:matrix.org", "membership": "join", "origin_server_ts": 1446533402900, "sender": "@victorm:matrix.org", "state_key": "@victorm:matrix.org", "type": "m.room.member", "unsigned": { "age": 64134549778 } }, { "content": { "avatar_url": "mxc://arbitrarion.com/IfEUvukQHEnKXzTcrbFAhrOl", "displayname": "hef", "membership": "join" }, "event_id": "$1501709016101WkOGs:arbitrarion.com", "membership": "join", "origin_server_ts": 1501709016971, "sender": "@hef:arbitrarion.com", "state_key": "@hef:arbitrarion.com", "type": "m.room.member", "unsigned": { "age": 8958935707, "prev_content": { "avatar_url": "mxc://arbitrarion.com/OMRruBGTpZZnnfEegbvuuZJL", "displayname": "hef", "membership": "join" }, "prev_sender": "@hef:arbitrarion.com", "replaces_state": "$150170893381pywvi:arbitrarion.com" } }, { "content": { "avatar_url": null, "displayname": "test123aa", "membership": "join" }, "event_id": "$1485810298160959OujMu:matrix.org", "membership": "join", "origin_server_ts": 1485810298467, "sender": "@test123aa:matrix.org", "state_key": "@test123aa:matrix.org", "type": "m.room.member", "unsigned": { "age": 24857654211 } }, { "content": { "membership": "leave" }, "event_id": "$15095726344eZJWP:polypeak.biz", "membership": "leave", "origin_server_ts": 1509572634307, "sender": "@ed:polypeak.biz", "state_key": "@ed:polypeak.biz", "type": "m.room.member", "unsigned": { "age": 1095318371, "prev_content": { "avatar_url": "mxc://polypeak.biz/EZEzfaxPAhuMnAVUAiGpIiBn", "displayname": "Eunchan", "membership": "join" }, "prev_sender": "@ed:polypeak.biz", "replaces_state": "$15095672371Brvyz:polypeak.biz" } }, { "content": { "membership": "leave" }, "event_id": "$145098970693216UrHhw:matrix.org", "origin_server_ts": 1450989706213, "sender": "@steffen:matrix.org", "state_key": "@steffen:matrix.org", "type": "m.room.member", "unsigned": { "age": 59678246465, "replaces_state": "$145098965793168fFqNU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "abiduzz420", "membership": "join" }, "event_id": "$1510248142924189rOJbt:matrix.org", "membership": "join", "origin_server_ts": 1510248142889, "sender": "@abiduzz420:matrix.org", "state_key": "@abiduzz420:matrix.org", "type": "m.room.member", "unsigned": { "age": 419809789 } }, { "content": { "avatar_url": "mxc://matrix.org/UAAnwRWqJzkdnKgwZAiVguHy#auto", "displayname": null, "membership": "join" }, "event_id": "$14527754868380jnKnR:matrix.org", "origin_server_ts": 1452775486066, "sender": "@krld:matrix.org", "state_key": "@krld:matrix.org", "type": "m.room.member", "unsigned": { "age": 57892466612 } }, { "content": { "avatar_url": null, "displayname": "loredan13", "membership": "join" }, "event_id": "$15054793616994224sDlFq:matrix.org", "membership": "join", "origin_server_ts": 1505479361873, "sender": "@loredan13:matrix.org", "state_key": "@loredan13:matrix.org", "type": "m.room.member", "unsigned": { "age": 5188590805 } }, { "content": { "membership": "leave" }, "event_id": "$1486217734844544HLShg:matrix.org", "membership": "leave", "origin_server_ts": 1486217734802, "sender": "@aeromax:matrix.org", "state_key": "@aeromax:matrix.org", "type": "m.room.member", "unsigned": { "age": 24450217876, "replaces_state": "$148224975269749AJBqJ:matrix.org" } }, { "content": { "avatar_url": "mxc://spod.ca/dxfmHlahdvtByGKmpgXDpkJP", "displayname": "slepp", "membership": "join" }, "event_id": "$1495820777180unyqq:spod.ca", "origin_server_ts": 1495820777634, "sender": "@slepp:spod.ca", "state_key": "@slepp:spod.ca", "type": "m.room.member", "unsigned": { "age": 115, "replaces_state": "$1495820719128CvwHI:disroot.org" } }, { "content": { "membership": "leave" }, "event_id": "$143523742721336cgOYF:matrix.org", "origin_server_ts": 1435237427499, "sender": "@slek:matrix.org", "state_key": "@slek:matrix.org", "type": "m.room.member", "unsigned": { "age": 75430525179, "replaces_state": "$14247963497668FsZSQ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15009879363830884ZVAIS:matrix.org", "membership": "join", "origin_server_ts": 1500987936636, "sender": "@Priyansh1:matrix.org", "state_key": "@Priyansh1:matrix.org", "type": "m.room.member", "unsigned": { "age": 9680016042 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15032279774095803YMniq:matrix.org", "membership": "join", "origin_server_ts": 1503227977716, "sender": "@evan2718281828:matrix.org", "state_key": "@evan2718281828:matrix.org", "type": "m.room.member", "unsigned": { "age": 7439974962 } }, { "content": { "membership": "leave" }, "event_id": "$1472506493561314hTewM:matrix.org", "membership": "leave", "origin_server_ts": 1472506493454, "sender": "@testsk:matrix.org", "state_key": "@testsk:matrix.org", "type": "m.room.member", "unsigned": { "age": 38161459224, "replaces_state": "$1472506448561169sbmgc:matrix.org" } }, { "content": { "avatar_url": "https://matrix.org:8448/_matrix/content/QGtvZmlzaDptYXRyaXgub3JnDaHIqgkqYArZwOlnxQUaOKST.aW1hZ2UvZ2lm.gif", "displayname": "KoFish", "membership": "join" }, "event_id": "$1416420910596DtYDo:matrix.org", "membership": "join", "origin_server_ts": 1409925578528, "sender": "@kofish:matrix.org", "state_key": "@kofish:matrix.org", "stream_ordering": 3497, "type": "m.room.member", "unsigned": { "age": 94247042082 } }, { "content": { "avatar_url": "mxc://matrix.org/TAfFcbQPlXYZpYMsYnGllfVw", "displayname": "Denis", "membership": "join" }, "event_id": "$150366184137453AlrSp:matrix.org", "membership": "join", "origin_server_ts": 1503661841229, "sender": "@keralk:matrix.org", "state_key": "@keralk:matrix.org", "type": "m.room.member", "unsigned": { "age": 7006111449 } }, { "content": { "avatar_url": "mxc://matrix.org/dLqZuVdYCgTPXvpNBaxyJrZT", "displayname": "McOmghall", "membership": "join" }, "event_id": "$1461018366299552NQVVW:matrix.org", "membership": "join", "origin_server_ts": 1461018366856, "sender": "@McOmghall:matrix.org", "state_key": "@McOmghall:matrix.org", "type": "m.room.member", "unsigned": { "age": 49649585822 } }, { "content": { "avatar_url": null, "displayname": "flipchrist", "membership": "join" }, "event_id": "$15099680183643475ZleWN:matrix.org", "membership": "join", "origin_server_ts": 1509968018561, "sender": "@flipchrist:matrix.org", "state_key": "@flipchrist:matrix.org", "type": "m.room.member", "unsigned": { "age": 699934117 } }, { "content": { "membership": "leave" }, "event_id": "$1470641261417153DLHOy:matrix.org", "membership": "leave", "origin_server_ts": 1470641261685, "sender": "@DaveySwift:matrix.org", "state_key": "@DaveySwift:matrix.org", "type": "m.room.member", "unsigned": { "age": 40026690993, "replaces_state": "$1470641124416875LCPPK:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "worldwarthree", "membership": "join" }, "event_id": "$14992549864837599bpGiV:matrix.org", "membership": "join", "origin_server_ts": 1499254986035, "sender": "@worldwarthree:matrix.org", "state_key": "@worldwarthree:matrix.org", "type": "m.room.member", "unsigned": { "age": 11412966643 } }, { "content": { "membership": "leave" }, "event_id": "$144415672410159mBWHz:matrix.org", "origin_server_ts": 1444156724245, "sender": "@paulcarroty:matrix.org", "state_key": "@paulcarroty:matrix.org", "type": "m.room.member", "unsigned": { "age": 66511228433, "replaces_state": "$1443249360174964sXKlw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631832024849HDmrG:matrix.org", "membership": "leave", "origin_server_ts": 1495663183801, "sender": "@freenode_shaftoe:matrix.org", "state_key": "@freenode_shaftoe:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004768877, "replaces_state": "$148733727951048wEtsc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.darkgen.ru/XlNXmkaQQcnVKafprcIrRwYn", "displayname": "Jakob", "membership": "join" }, "event_id": "$148723118613DUjNX:matrix.darkgen.ru", "origin_server_ts": 1487231186378, "sender": "@g1gn0:matrix.darkgen.ru", "state_key": "@g1gn0:matrix.darkgen.ru", "type": "m.room.member", "unsigned": { "age": 19, "replaces_state": "$148721250126KpODp:matrix.darkgen.ru" } }, { "content": { "avatar_url": "mxc://matrix.org/piJeIwyQNfklBnMPItNIjIsJ", "displayname": "bradlegge", "membership": "join" }, "event_id": "$1468315086123981vHpJv:matrix.org", "membership": "join", "origin_server_ts": 1468315086450, "sender": "@bradlegge:matrix.org", "state_key": "@bradlegge:matrix.org", "type": "m.room.member", "unsigned": { "age": 42352866228 } }, { "content": { "avatar_url": "mxc://matrix.org/AgAFOtrVPKFxDgGoLEPnoiWe", "displayname": "Khorne", "membership": "join" }, "event_id": "$15071069804157576TqPqe:matrix.org", "membership": "join", "origin_server_ts": 1507106980873, "sender": "@Khorne:matrix.org", "state_key": "@Khorne:matrix.org", "type": "m.room.member", "unsigned": { "age": 3560971805, "replaces_state": "$1498122564797439PeKeH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.controlled.space/KqhXumSrEZNipyjfGTBANYpG", "displayname": "ibu", "membership": "join" }, "event_id": "$150079386028upMsw:matrix.controlled.space", "membership": "join", "origin_server_ts": 1500793860601, "sender": "@ibu:matrix.controlled.space", "state_key": "@ibu:matrix.controlled.space", "type": "m.room.member", "unsigned": { "age": 9874092077, "replaces_state": "$14868197812iCxxS:matrix.controlled.space" } }, { "content": { "avatar_url": null, "displayname": "thesmiddy", "membership": "join" }, "event_id": "$15036193593404707qXqMq:matrix.org", "membership": "join", "origin_server_ts": 1503619359277, "sender": "@thesmiddy:matrix.org", "state_key": "@thesmiddy:matrix.org", "type": "m.room.member", "unsigned": { "age": 7048593401 } }, { "content": { "membership": "leave" }, "event_id": "$150808881145573sMbKN:matrix.org", "membership": "leave", "origin_server_ts": 1508088811011, "sender": "@caloyannis:matrix.org", "state_key": "@caloyannis:matrix.org", "type": "m.room.member", "unsigned": { "age": 2579141667, "replaces_state": "$150808865343383yrwSw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "riot_muppeth", "membership": "join" }, "event_id": "$148715901422974SkBHL:matrix.org", "membership": "join", "origin_server_ts": 1487159014882, "sender": "@riot_muppeth:matrix.org", "state_key": "@riot_muppeth:matrix.org", "type": "m.room.member", "unsigned": { "age": 23508937796 } }, { "content": { "avatar_url": "mxc://matrix.org/EAMeScUIFxgHDoRNStQYruvW", "displayname": "Aaron Raimist (matrix.org account)", "membership": "join" }, "event_id": "$1506648896115978jyfdf:matrix.org", "membership": "join", "origin_server_ts": 1506648896203, "sender": "@aaronraimist:matrix.org", "state_key": "@aaronraimist:matrix.org", "type": "m.room.member", "unsigned": { "age": 4019056475 } }, { "content": { "membership": "leave" }, "event_id": "$1436472151104309JorpT:matrix.org", "origin_server_ts": 1436472151290, "sender": "@skryking:matrix.org", "state_key": "@skryking:matrix.org", "type": "m.room.member", "unsigned": { "age": 74195801388, "replaces_state": "$143646008199241oRZsK:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 198719", "kind": "guest", "membership": "join" }, "event_id": "$1491387486334VTiLt:matrix.org", "membership": "join", "origin_server_ts": 1491387486847, "sender": "@198719:matrix.org", "state_key": "@198719:matrix.org", "type": "m.room.member", "unsigned": { "age": 19280465831 } }, { "content": { "membership": "leave" }, "event_id": "$148957139017oawvI:emeraldtomb.com", "membership": "leave", "origin_server_ts": 1489571390381, "sender": "@bryan:emeraldtomb.com", "state_key": "@bryan:emeraldtomb.com", "type": "m.room.member", "unsigned": { "age": 21096562297, "prev_content": { "avatar_url": "mxc://emeraldtomb.com/BkKTTdJlEOiwrlgLquLGWyUN", "displayname": "GodEater", "membership": "join" }, "prev_sender": "@bryan:emeraldtomb.com", "replaces_state": "$148956871015WozNg:emeraldtomb.com" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1457002297355546wdOVV:matrix.org", "membership": "join", "origin_server_ts": 1457002297534, "sender": "@jh:matrix.org", "state_key": "@jh:matrix.org", "type": "m.room.member", "unsigned": { "age": 53665655144 } }, { "content": { "membership": "leave" }, "event_id": "$14917379881402095OlbLw:matrix.org", "membership": "leave", "origin_server_ts": 1491737988020, "sender": "@yookoala:matrix.org", "state_key": "@yookoala:matrix.org", "type": "m.room.member", "unsigned": { "age": 18929964658, "replaces_state": "$14917287921343709fSdbU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632432026242xetxV:matrix.org", "membership": "leave", "origin_server_ts": 1495663243173, "sender": "@freenode_M-Half-Shot:matrix.org", "state_key": "@freenode_M-Half-Shot:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004709505, "replaces_state": "$1461954688138410HQuir:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14888803822387071jwiJM:matrix.org", "membership": "leave", "origin_server_ts": 1488880382468, "sender": "@frobel:matrix.org", "state_key": "@frobel:matrix.org", "type": "m.room.member", "unsigned": { "age": 21787570210, "replaces_state": "$1457556818209220CENIu:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ticao", "membership": "join" }, "event_id": "$1510585327216041RqtAa:matrix.org", "membership": "join", "origin_server_ts": 1510585327106, "sender": "@ticao:matrix.org", "state_key": "@ticao:matrix.org", "type": "m.room.member", "unsigned": { "age": 82625572 } }, { "content": { "avatar_url": "mxc://matrix.org/EDqfJcPEkHBhDtXiaGZcGyFt#auto", "displayname": null, "membership": "join" }, "event_id": "$1447190383879310sBQBc:matrix.org", "membership": "join", "origin_server_ts": 1447190383263, "sender": "@Dlozanof:matrix.org", "state_key": "@Dlozanof:matrix.org", "type": "m.room.member", "unsigned": { "age": 63477569415 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14676529112773943evAVG:matrix.org", "membership": "join", "origin_server_ts": 1467652911507, "sender": "@pbaur:matrix.org", "state_key": "@pbaur:matrix.org", "type": "m.room.member", "unsigned": { "age": 43015041171 } }, { "content": { "avatar_url": null, "displayname": "humerusj (IRC)", "membership": "join" }, "event_id": "$143872395930271rDaZe:matrix.org", "origin_server_ts": 1438723959597, "sender": "@freenode_humerusj:matrix.org", "state_key": "@freenode_humerusj:matrix.org", "type": "m.room.member", "unsigned": { "age": 71943993081, "replaces_state": "$143594176914018wgTxZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/IsLLgejXdrmuLXCccTsQwHCQ", "displayname": "Alexey Murz Korepov", "membership": "join" }, "event_id": "$14997590683157737ZugQB:matrix.org", "membership": "join", "origin_server_ts": 1499759068214, "sender": "@Murz:matrix.org", "state_key": "@Murz:matrix.org", "type": "m.room.member", "unsigned": { "age": 10908884464 } }, { "content": { "membership": "leave" }, "event_id": "$15098136601326333FFZCJ:matrix.org", "membership": "leave", "origin_server_ts": 1509813660945, "sender": "@viccuad:matrix.org", "state_key": "@viccuad:matrix.org", "type": "m.room.member", "unsigned": { "age": 854291733, "replaces_state": "$14827073352236007pPSjg:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "dbkr (IRC)", "membership": "join" }, "event_id": "$15099227862619385jtHJq:matrix.org", "membership": "join", "origin_server_ts": 1509922786511, "sender": "@freenode_dbkr:matrix.org", "state_key": "@freenode_dbkr:matrix.org", "type": "m.room.member", "unsigned": { "age": 745166167, "replaces_state": "$1508469879939566yNQUP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "dev3dev", "membership": "join" }, "event_id": "$145891057880258NkQOD:matrix.org", "membership": "join", "origin_server_ts": 1458910578296, "sender": "@Ahsan1234:matrix.org", "state_key": "@Ahsan1234:matrix.org", "type": "m.room.member", "unsigned": { "age": 51757374382, "replaces_state": "$145890556875536kvigw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1448596868345618xSfIt:matrix.org", "origin_server_ts": 1448596868694, "sender": "@CounterAttack:matrix.org", "state_key": "@CounterAttack:matrix.org", "type": "m.room.member", "unsigned": { "age": 62071083984, "replaces_state": "$1448596278345133pGzkC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/fFXMBAqvHyDcxewBONhaYEpd", "displayname": "SunMan", "membership": "join" }, "event_id": "$1461573861282128nWuND:matrix.org", "membership": "join", "origin_server_ts": 1461573861796, "sender": "@SunMan:matrix.org", "state_key": "@SunMan:matrix.org", "type": "m.room.member", "unsigned": { "age": 49094090882, "replaces_state": "$1461573852282116BbipL:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/pZMjNiBzKsMiXznCkHiqdqum#auto", "displayname": "jheenan", "membership": "join" }, "event_id": "$1461527285237960bjQrx:matrix.org", "membership": "join", "origin_server_ts": 1461527285703, "sender": "@jheenan:matrix.org", "state_key": "@jheenan:matrix.org", "type": "m.room.member", "unsigned": { "age": 49140666975, "replaces_state": "$1448470185236181NTFxW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14461445717680PNYsO:openmarket.com", "origin_server_ts": 1446144571695, "sender": "@richardv:openmarket.com", "state_key": "@richardv:openmarket.com", "type": "m.room.member", "unsigned": { "age": 64523380983, "replaces_state": "$144466533715066wEnnu:openmarket.com" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612455029XBQgO:matrix.org", "origin_server_ts": 1429261245195, "sender": "@kegan:matrix.org", "state_key": "@irc_Joachim-:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406707483, "replaces_state": "$1421659726758SoQEK:matrix.org" } }, { "age_ts": 1508699261699, "content": { "avatar_url": null, "displayname": "Peter Scholtens", "membership": "join" }, "event_id": "$1508699261130KTRrV:peterscholtens.net", "origin_server_ts": 1508699260976, "sender": "@petersch:peterscholtens.net", "state_key": "@petersch:peterscholtens.net", "type": "m.room.member", "unsigned": { "age": 36, "replaces_state": "$150869542317ekpPf:peterscholtens.net" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1485388382346591sOEXv:matrix.org", "membership": "join", "origin_server_ts": 1485388382085, "sender": "@hansnust:matrix.org", "state_key": "@hansnust:matrix.org", "type": "m.room.member", "unsigned": { "age": 25279570593 } }, { "content": { "avatar_url": null, "displayname": "YPTest", "membership": "join" }, "event_id": "$14847340712967824QTTjq:matrix.org", "membership": "join", "origin_server_ts": 1484734071247, "sender": "@rvalles:matrix.org", "state_key": "@rvalles:matrix.org", "type": "m.room.member", "unsigned": { "age": 25933881431 } }, { "content": { "avatar_url": "mxc://sfunk1x.com/bveisjHRKBSRzVrInfcBsTGW", "displayname": "sfunk1x", "membership": "join" }, "event_id": "$1500063191171fARDc:sfunk1x.com", "origin_server_ts": 1500063200168, "sender": "@sfunk1x:sfunk1x.com", "state_key": "@sfunk1x:sfunk1x.com", "type": "m.room.member", "unsigned": { "age": 140 } }, { "content": { "avatar_url": "mxc://matrix.org/waNEmMtHqgUyHXaHoWdAVuEw", "displayname": "florian.seidner", "membership": "join" }, "event_id": "$15015332864872588ndLkR:matrix.org", "membership": "join", "origin_server_ts": 1501533286426, "sender": "@florian.seidner:matrix.org", "state_key": "@florian.seidner:matrix.org", "type": "m.room.member", "unsigned": { "age": 9134666252, "replaces_state": "$15012287201025465emOpO:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1474045880131ENtyw:chat.mathiasp.me", "membership": "leave", "origin_server_ts": 1474045880794, "sender": "@mathias:chat.mathiasp.me", "state_key": "@mathias:chat.mathiasp.me", "type": "m.room.member", "unsigned": { "age": 36622071884, "replaces_state": "$1474045188124iRhLf:chat.mathiasp.me" } }, { "content": { "avatar_url": "https://matrix.perlsite.co.uk/_matrix/content/QGFuZHJvaWQ6cGVybHNpdGUuY28udWsgTBCTRuRudHPymyDHwgSSBmQ.aW1hZ2UvcG5n.png", "displayname": "An Android client", "membership": "join" }, "event_id": "$1416420971894EBkmq:perlsite.co.uk", "membership": "join", "origin_server_ts": 1413326435699, "sender": "@android:perlsite.co.uk", "state_key": "@android:perlsite.co.uk", "stream_ordering": 13086, "type": "m.room.member", "unsigned": { "age": 94246980784 } }, { "content": { "avatar_url": null, "displayname": "jzhu", "membership": "join" }, "event_id": "$1470479317162347KABmR:matrix.org", "membership": "join", "origin_server_ts": 1470479317954, "sender": "@jzhu98:matrix.org", "state_key": "@jzhu98:matrix.org", "type": "m.room.member", "unsigned": { "age": 40188634724, "replaces_state": "$1470477240159909DmJGJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14977950742WIAbK:hakimus.de", "membership": "leave", "origin_server_ts": 1497795074684, "sender": "@hakimus:hakimus.de", "state_key": "@hakimus:hakimus.de", "type": "m.room.member", "unsigned": { "age": 12872877994, "prev_content": { "avatar_url": null, "displayname": "hakimus", "membership": "join" }, "prev_sender": "@hakimus:hakimus.de", "replaces_state": "$14977950091NPeth:hakimus.de" } }, { "content": { "avatar_url": null, "displayname": "Jelv", "membership": "join" }, "event_id": "$15041245591693629YdexF:matrix.org", "membership": "join", "origin_server_ts": 1504124559934, "sender": "@Jelv:matrix.org", "state_key": "@Jelv:matrix.org", "type": "m.room.member", "unsigned": { "age": 6543392744 } }, { "content": { "avatar_url": "mxc://matrix.org/IvMJOxYPHYbsqussZlJPpxlg", "displayname": "tnotm", "membership": "join" }, "event_id": "$143947749543078OJXyS:matrix.org", "origin_server_ts": 1439477495376, "sender": "@tnotm:matrix.org", "state_key": "@tnotm:matrix.org", "type": "m.room.member", "unsigned": { "age": 71190457302 } }, { "content": { "avatar_url": null, "displayname": "Guest 204434", "kind": "guest", "membership": "join" }, "event_id": "$1493870843866458lKAlp:matrix.org", "membership": "join", "origin_server_ts": 1493870843394, "sender": "@204434:matrix.org", "state_key": "@204434:matrix.org", "type": "m.room.member", "unsigned": { "age": 16797109284 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1488232686161998ndnuS:matrix.org", "membership": "join", "origin_server_ts": 1488232686765, "sender": "@rtr63gdh:matrix.org", "state_key": "@rtr63gdh:matrix.org", "type": "m.room.member", "unsigned": { "age": 22435265913 } }, { "content": { "avatar_url": "mxc://diasp.in/OYkAtIkUfiedvyNQIviGxKoj", "displayname": "Da Shamil", "membership": "join" }, "event_id": "$14996948521261kjHME:diasp.in", "origin_server_ts": 1499694852568, "sender": "@notetest:diasp.in", "state_key": "@notetest:diasp.in", "type": "m.room.member", "unsigned": { "age": 90 } }, { "content": { "avatar_url": "mxc://matrix.org/QABNFDmvxCLvddtNMjaabvjr", "displayname": "Asiannoodles42", "membership": "join" }, "event_id": "$150168964732475auDLC:matrix.org", "membership": "join", "origin_server_ts": 1501689647565, "sender": "@Asiannoodles42:matrix.org", "state_key": "@Asiannoodles42:matrix.org", "type": "m.room.member", "unsigned": { "age": 8978305113 } }, { "content": { "avatar_url": null, "displayname": "irx", "membership": "join" }, "event_id": "$1474304579636839HmAVu:matrix.org", "membership": "join", "origin_server_ts": 1474304579190, "sender": "@irx:matrix.org", "state_key": "@irx:matrix.org", "type": "m.room.member", "unsigned": { "age": 36363373488 } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612475030LImtU:matrix.org", "origin_server_ts": 1429261247041, "sender": "@kegan:matrix.org", "state_key": "@irc_dbkr:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406705637, "replaces_state": "$14249695832617YdIzx:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1416421049924bSkUU:matrix.org", "membership": "leave", "origin_server_ts": 1415803457318, "sender": "@irc_Zuchto:matrix.org", "state_key": "@irc_Zuchto:matrix.org", "stream_ordering": 27294, "type": "m.room.member", "unsigned": { "age": 94246902754 } }, { "content": { "avatar_url": "mxc://kolab.schnuffle.de/gyktWmhtgJFdMgZugdFsUqJZ", "displayname": "Schnuffle", "membership": "join" }, "event_id": "$14838180107kXLmG:kolab.schnuffle.de", "membership": "join", "origin_server_ts": 1483818010276, "sender": "@schnuffle:kolab.schnuffle.de", "state_key": "@schnuffle:kolab.schnuffle.de", "type": "m.room.member", "unsigned": { "age": 26849942402, "prev_content": { "avatar_url": null, "displayname": "Schnuffle", "membership": "join" }, "prev_sender": "@schnuffle:kolab.schnuffle.de", "replaces_state": "$14838156791lUTaL:kolab.schnuffle.de" } }, { "content": { "avatar_url": "mxc://matrix.org/WOZvbUZHgWvfpayrrkpmYQlL", "displayname": "Martin", "membership": "join" }, "event_id": "$1492245671393121RHUeo:matrix.org", "membership": "join", "origin_server_ts": 1492245671489, "sender": "@mhr:matrix.org", "state_key": "@mhr:matrix.org", "type": "m.room.member", "unsigned": { "age": 18422281189, "replaces_state": "$1492243713380083tyccb:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZcIfDWfeBIFDMQeXeEtPzjCC", "displayname": "Jonah", "membership": "join" }, "event_id": "$1452039360978843Gyqht:matrix.org", "origin_server_ts": 1452039360757, "sender": "@jonah:matrix.org", "state_key": "@jonah:matrix.org", "type": "m.room.member", "unsigned": { "age": 58628591921 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QGdpYXZhYzptYXRyaXgub3JncGTHGeKYHtGNmvEqXCYgFTSX.aW1hZ2UvanBlZw==.jpeg", "displayname": "Giacomo Vacca", "membership": "join" }, "event_id": "$1417687027222eXXsX:matrix.org", "membership": "join", "origin_server_ts": 1417687027825, "sender": "@giavac:matrix.org", "state_key": "@giavac:matrix.org", "type": "m.room.member", "unsigned": { "age": 92980924853 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QFN1LVNoZWU6bWF0cml4Lm9yZwbyyhXrWLNLbHVZOrLlUSRqkJ.aW1hZ2UvcG5n.png", "displayname": "Su-Shee", "membership": "join" }, "event_id": "$1416420916884dajjM:matrix.org", "membership": "join", "origin_server_ts": 1411136224650, "sender": "@Su-Shee:matrix.org", "state_key": "@Su-Shee:matrix.org", "stream_ordering": 6797, "type": "m.room.member", "unsigned": { "age": 94247035794 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145637683228585AHlFl:matrix.org", "membership": "join", "origin_server_ts": 1456376832621, "sender": "@Akira:matrix.org", "state_key": "@Akira:matrix.org", "type": "m.room.member", "unsigned": { "age": 54291120057 } }, { "content": { "avatar_url": "mxc://matrix.org/iTsqgRasPEXmFtyVLCwhSojI", "displayname": "eternaleye", "membership": "join" }, "event_id": "$143772156733700WHENG:matrix.org", "origin_server_ts": 1437721567804, "sender": "@eternaleye:matrix.org", "state_key": "@eternaleye:matrix.org", "type": "m.room.member", "unsigned": { "age": 72946384874 } }, { "content": { "avatar_url": null, "displayname": "KEANO", "membership": "join" }, "event_id": "$1489245677861081YeLzU:matrix.org", "membership": "join", "origin_server_ts": 1489245677821, "sender": "@KEANO:matrix.org", "state_key": "@KEANO:matrix.org", "type": "m.room.member", "unsigned": { "age": 21422274857 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14941782521511964KrEgR:matrix.org", "membership": "join", "origin_server_ts": 1494178252753, "sender": "@alozie:matrix.org", "state_key": "@alozie:matrix.org", "type": "m.room.member", "unsigned": { "age": 16489699925 } }, { "content": { "avatar_url": "mxc://matrix.org/HEnajuZqWvtXIqOqxkxtQDjJ#auto", "displayname": "Mikos", "membership": "join" }, "event_id": "$148000329360418dVnQq:matrix.org", "membership": "join", "origin_server_ts": 1480003293483, "sender": "@mikos:matrix.org", "state_key": "@mikos:matrix.org", "type": "m.room.member", "unsigned": { "age": 30664659195, "replaces_state": "$148000252656697LHOOc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/RuFevHOWFfpZfcQRhdomWrRC", "displayname": "JaredMonkey", "membership": "join" }, "event_id": "$1492035944389981nawjo:matrix.org", "membership": "join", "origin_server_ts": 1492035944694, "sender": "@jaredmonkey:matrix.org", "state_key": "@jaredmonkey:matrix.org", "type": "m.room.member", "unsigned": { "age": 18632007984 } }, { "content": { "avatar_url": "mxc://paivola.fi/KOhjHpexnOuOaJJruleiFkin", "displayname": "viderizer", "membership": "join" }, "event_id": "$148716860710016npgks:paivola.fi", "membership": "join", "origin_server_ts": 1487168607444, "sender": "@viderizer:paivola.fi", "state_key": "@viderizer:paivola.fi", "type": "m.room.member", "unsigned": { "age": 23499345234, "prev_content": { "avatar_url": "mxc://paivola.fi/CwvlkSEZmOtWcjZIRkLzhnXy", "displayname": "viderizer", "membership": "join" }, "prev_sender": "@viderizer:paivola.fi", "replaces_state": "$14863912732257dhqzr:paivola.fi" } }, { "content": { "membership": "leave" }, "event_id": "$14896599572344bDvZh:pacien.net", "membership": "leave", "origin_server_ts": 1489659957297, "sender": "@pacien:pacien.net", "state_key": "@pacien:pacien.net", "type": "m.room.member", "unsigned": { "age": 21007995381, "prev_content": { "avatar_url": "mxc://pacien.net/TshfeObqbbjfZMSjOWNSXDSI", "displayname": "Notkea", "membership": "join" }, "prev_sender": "@pacien:pacien.net", "replaces_state": "$1489283070283RmMmL:pacien.net" } }, { "content": { "avatar_url": "mxc://nsb0.net/ghewhrcZEdCWilhscKvApTtU", "displayname": "sohum", "membership": "join" }, "event_id": "$14872059401oKdxr:nsb0.net", "origin_server_ts": 1487205940005, "sender": "@sohum:nsb0.net", "state_key": "@sohum:nsb0.net", "type": "m.room.member", "unsigned": { "age": 6 } }, { "content": { "membership": "leave" }, "event_id": "$15031007323272WnHKw:timecube.club", "membership": "leave", "origin_server_ts": 1503100732213, "sender": "@arekinath:timecube.club", "state_key": "@arekinath:timecube.club", "type": "m.room.member", "unsigned": { "age": 7567220465, "prev_content": { "avatar_url": "mxc://timecube.club/UuGKltPRbXsvfPNpuhlXseDT", "displayname": "arekinath", "membership": "join" }, "prev_sender": "@arekinath:timecube.club", "replaces_state": "$1500589882106MMPps:timecube.club" } }, { "content": { "avatar_url": null, "displayname": "matze", "membership": "join" }, "event_id": "$1419276337488vYbPt:matrix.org", "membership": "join", "origin_server_ts": 1419276337615, "sender": "@matze:matrix.org", "state_key": "@matze:matrix.org", "type": "m.room.member", "unsigned": { "age": 91391615063 } }, { "content": { "membership": "leave" }, "event_id": "$1487551325105aLThT:toppoint.de", "membership": "leave", "origin_server_ts": 1487551325410, "sender": "@BenBE:toppoint.de", "state_key": "@BenBE:toppoint.de", "type": "m.room.member", "unsigned": { "age": 23116627268, "prev_content": { "avatar_url": "mxc://toppoint.de/qoUlDlubmFiFlHweNUrbAMkN", "displayname": "BenBE", "membership": "join" }, "prev_sender": "@BenBE:toppoint.de", "replaces_state": "$1487324884163xVWMB:toppoint.de" } }, { "content": { "membership": "leave" }, "event_id": "$1508469880939600xDulw:matrix.org", "membership": "leave", "origin_server_ts": 1508469880884, "sender": "@freenode_ZoNE:matrix.org", "state_key": "@freenode_ZoNE:matrix.org", "type": "m.room.member", "unsigned": { "age": 2198071794, "replaces_state": "$15077192541371370EReWH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145728142867676woTRK:matrix.org", "membership": "leave", "origin_server_ts": 1457281428597, "sender": "@AmarOk:matrix.org", "state_key": "@AmarOk:matrix.org", "type": "m.room.member", "unsigned": { "age": 53386524081, "replaces_state": "$1438966636237383fXNQH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145397505695396MdFWX:matrix.org", "origin_server_ts": 1453975056393, "sender": "@jackvt93:matrix.org", "state_key": "@jackvt93:matrix.org", "type": "m.room.member", "unsigned": { "age": 56692896285, "replaces_state": "$145397432694628WzWuw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1468341064184400Kqpkr:matrix.org", "membership": "leave", "origin_server_ts": 1468341064022, "sender": "@PurpleGecko:matrix.org", "state_key": "@PurpleGecko:matrix.org", "type": "m.room.member", "unsigned": { "age": 42326888656, "replaces_state": "$1456833012256643VmmCo:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 54262", "kind": "guest", "membership": "join" }, "event_id": "$14754850411808193QFIBQ:matrix.org", "membership": "join", "origin_server_ts": 1475485041659, "sender": "@54262:matrix.org", "state_key": "@54262:matrix.org", "type": "m.room.member", "unsigned": { "age": 35182911019, "replaces_state": "$14754611461759293sJFNj:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Lukas", "membership": "join" }, "event_id": "$1504163238110WCaqV:matrix.philippdumke.net", "membership": "join", "origin_server_ts": 1504163238445, "sender": "@Lukas:matrix.philippdumke.net", "state_key": "@Lukas:matrix.philippdumke.net", "type": "m.room.member", "unsigned": { "age": 6504714233 } }, { "content": { "avatar_url": "mxc://matrix.org/lgPAuGgocpLRXEZnlnYsnoDs", "displayname": "fl1pfl0p", "membership": "join" }, "event_id": "$15080280083030513eNiSd:matrix.org", "membership": "join", "origin_server_ts": 1508028008356, "sender": "@fl1pfl0p:matrix.org", "state_key": "@fl1pfl0p:matrix.org", "type": "m.room.member", "unsigned": { "age": 2639944322, "replaces_state": "$1490684090454350kZADs:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sipster (IRC)", "membership": "join" }, "event_id": "$14991346113288723AXBeo:matrix.org", "membership": "join", "origin_server_ts": 1499134611015, "sender": "@freenode_Sipster:matrix.org", "state_key": "@freenode_Sipster:matrix.org", "type": "m.room.member", "unsigned": { "age": 11533341663, "replaces_state": "$14990947652494402BEvvZ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/bSTIrSMSFWdktcqvccgyQRlL", "displayname": "Kaustav Das Modak", "membership": "join" }, "event_id": "$14760929081113066Yqpen:matrix.org", "membership": "join", "origin_server_ts": 1476092908772, "sender": "@kaustavdm:matrix.org", "state_key": "@kaustavdm:matrix.org", "type": "m.room.member", "unsigned": { "age": 34575043906, "replaces_state": "$146527831982065lScfe:matrix.org" } }, { "content": { "avatar_url": "mxc://walladge.net/WDxSVNUFSqPaMxXwMYVuRfQV", "displayname": "Samuel Walladge", "membership": "join" }, "event_id": "$150690292092xGtbX:walladge.net", "membership": "join", "origin_server_ts": 1506902920686, "sender": "@samuel:walladge.net", "state_key": "@samuel:walladge.net", "type": "m.room.member", "unsigned": { "age": 3765031992, "prev_content": { "avatar_url": "mxc://walladge.net/WDxSVNUFSqPaMxXwMYVuRfQV", "displayname": "Samuel", "membership": "join" }, "prev_sender": "@samuel:walladge.net", "replaces_state": "$149307621515itZEF:walladge.net" } }, { "content": { "avatar_url": "mxc://matrix.org/VxcHrnRBWHIwxVQewktxqXtS", "displayname": "dtz", "membership": "join" }, "event_id": "$149520508232284invdr:matrix.org", "membership": "join", "origin_server_ts": 1495205082303, "sender": "@dtzWill:matrix.org", "state_key": "@dtzWill:matrix.org", "type": "m.room.member", "unsigned": { "age": 15462870375, "replaces_state": "$14844195571315110NxOcy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1507832680431388uVRJe:matrix.org", "membership": "leave", "origin_server_ts": 1507832680735, "sender": "@freenode_InstantG1:matrix.org", "state_key": "@freenode_InstantG1:matrix.org", "type": "m.room.member", "unsigned": { "age": 2835271943, "replaces_state": "$1507814238103863wHWuU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Sebastian Plesch", "membership": "join" }, "event_id": "$150773486382ZhGQa:matrix.f5.htw-berlin.de", "origin_server_ts": 1507734863229, "sender": "@plesch:matrix.f5.htw-berlin.de", "state_key": "@plesch:matrix.f5.htw-berlin.de", "type": "m.room.member", "unsigned": { "age": 518 } }, { "content": { "membership": "leave" }, "event_id": "$145813655153627TgFWW:matrix.org", "membership": "leave", "origin_server_ts": 1458136551084, "sender": "@fladd:matrix.org", "state_key": "@fladd:matrix.org", "type": "m.room.member", "unsigned": { "age": 52531401594, "replaces_state": "$145813645453579OCxds:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1489646943308KTIGf:lynxie.net", "membership": "leave", "origin_server_ts": 1489646943506, "sender": "@Hiro:lynxie.net", "state_key": "@Hiro:lynxie.net", "type": "m.room.member", "unsigned": { "age": 21021009172, "prev_content": { "avatar_url": "mxc://lynxie.net/JZvMzYzrVBwLpUfhLQpZAxnt", "displayname": "Hiro Lynx", "membership": "join" }, "prev_sender": "@Hiro:lynxie.net", "replaces_state": "$1473156358114cSSgV:lynxie.net" } }, { "content": { "avatar_url": "mxc://matrix.org/CTOeEQMMoaVuhWLEOTCILWdi", "displayname": "Rob Pickering", "membership": "join" }, "event_id": "$14341392993537eyVeB:matrix.org", "origin_server_ts": 1434139299704, "sender": "@rob:matrix.org", "state_key": "@rob:matrix.org", "type": "m.room.member", "unsigned": { "age": 76528652974 } }, { "content": { "membership": "leave" }, "event_id": "$15087898535368896HYCle:matrix.org", "membership": "leave", "origin_server_ts": 1508789853490, "sender": "@freenode_thrrgilag_:matrix.org", "state_key": "@freenode_thrrgilag_:matrix.org", "type": "m.room.member", "unsigned": { "age": 1878099188, "replaces_state": "$1506844858813254EjWRO:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15105205873186119HRHtC:matrix.org", "membership": "join", "origin_server_ts": 1510520587566, "sender": "@pekim:matrix.org", "state_key": "@pekim:matrix.org", "type": "m.room.member", "unsigned": { "age": 147365112 } }, { "content": { "membership": "leave" }, "event_id": "$1504635761122ZbNgM:matrix.ikandros.com", "membership": "leave", "origin_server_ts": 1504635761850, "sender": "@alex:matrix.ikandros.com", "state_key": "@alex:matrix.ikandros.com", "type": "m.room.member", "unsigned": { "age": 6032190828, "prev_content": { "avatar_url": "mxc://matrix.ikandros.com/dwAPiUheoVRIYnPsuMyRWSvV", "displayname": "alex", "membership": "join" }, "prev_sender": "@alex:matrix.ikandros.com", "replaces_state": "$15042733601200OwAyH:matrix.ikandros.com" } }, { "content": { "avatar_url": "mxc://matrix.org/FZeRmqRCJoDfbDLEmXriyeKa", "displayname": "jimscarver", "membership": "join" }, "event_id": "$14928894151178152GTzsa:matrix.org", "membership": "join", "origin_server_ts": 1492889415634, "sender": "@jimscarver:matrix.org", "state_key": "@jimscarver:matrix.org", "type": "m.room.member", "unsigned": { "age": 17778537044, "replaces_state": "$14923673441387070mdBJa:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150271482256ZoGSF:djc.id.au", "membership": "leave", "origin_server_ts": 1502714822397, "sender": "@dan:djc.id.au", "state_key": "@dan:djc.id.au", "type": "m.room.member", "unsigned": { "age": 7953130281, "replaces_state": "$15027138811eftJe:djc.id.au" } }, { "content": { "avatar_url": "mxc://matrix.org/CbOeqyLvfeknkwVwVqmpNpIk", "displayname": "minhazav", "membership": "join" }, "event_id": "$1461318356223229yXEGC:matrix.org", "membership": "join", "origin_server_ts": 1461318356544, "sender": "@minhazav:matrix.org", "state_key": "@minhazav:matrix.org", "type": "m.room.member", "unsigned": { "age": 49349596134, "replaces_state": "$145702616310266YnFKw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$144812087654957funFh:matrix.org", "origin_server_ts": 1448120876229, "sender": "@Tobarja:matrix.org", "state_key": "@Tobarja:matrix.org", "type": "m.room.member", "unsigned": { "age": 62547076449, "replaces_state": "$144812083154930fIElf:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1474263295536009FSJQY:matrix.org", "membership": "leave", "origin_server_ts": 1474263295872, "sender": "@Purple:matrix.org", "state_key": "@Purple:matrix.org", "type": "m.room.member", "unsigned": { "age": 36404656806, "replaces_state": "$1473558954278364VetkH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Olivier", "membership": "join" }, "event_id": "$1470370266358666gjZBY:matrix.org", "membership": "join", "origin_server_ts": 1470370266110, "sender": "@Olivier.Nyssen:matrix.org", "state_key": "@Olivier.Nyssen:matrix.org", "type": "m.room.member", "unsigned": { "age": 40297686568 } }, { "content": { "membership": "leave" }, "event_id": "$14963859114pvbLB:maximum.guru", "membership": "leave", "origin_server_ts": 1496385911964, "sender": "@alex:maximum.guru", "state_key": "@alex:maximum.guru", "type": "m.room.member", "unsigned": { "age": 14282040714, "prev_content": { "avatar_url": "mxc://maximum.guru/ennWklXKitIxJOjjcHDqMBVq", "displayname": "maxguru", "membership": "join" }, "prev_sender": "@alex:maximum.guru", "replaces_state": "$14963603862QBblo:maximum.guru" } }, { "content": { "membership": "leave" }, "event_id": "$15092350605363959jAEMY:matrix.org", "membership": "leave", "origin_server_ts": 1509235060841, "sender": "@freenode_Jimbojams:matrix.org", "state_key": "@freenode_Jimbojams:matrix.org", "type": "m.room.member", "unsigned": { "age": 1432891837, "replaces_state": "$15092287875292403ufEcq:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dEszbcuDYYCqonluEKZkZJHc", "displayname": "TimWolla", "membership": "join" }, "event_id": "$150168924126025IEkgp:matrix.org", "membership": "join", "origin_server_ts": 1501689241634, "sender": "@TimWolla:matrix.org", "state_key": "@TimWolla:matrix.org", "type": "m.room.member", "unsigned": { "age": 8978711044 } }, { "content": { "avatar_url": "mxc://matrix.mawersoft.co.uk/deGdenJPpaBBbPYQXXyXRVWj", "displayname": "its_notjack", "membership": "join" }, "event_id": "$14741498148AEcsS:matrix.mawersoft.co.uk", "origin_server_ts": 1474149813984, "sender": "@its_notjack:matrix.mawersoft.co.uk", "state_key": "@its_notjack:matrix.mawersoft.co.uk", "type": "m.room.member", "unsigned": { "age": 6 } }, { "age_ts": 1509400046814, "content": { "avatar_url": "mxc://cervoi.se/lKGCTFLJtTkQEPuOuBiaCuMR", "displayname": "erdnaxeli", "membership": "join" }, "event_id": "$15094000791686gZREK:cervoi.se", "origin_server_ts": 1509400042333, "sender": "@erdnaxeli:cervoi.se", "state_key": "@erdnaxeli:cervoi.se", "type": "m.room.member", "unsigned": { "age": 26, "replaces_state": "$15094000471684mMWGn:cervoi.se" } }, { "content": { "membership": "leave" }, "event_id": "$1486076638110515WroYQ:matrix.org", "membership": "leave", "origin_server_ts": 1486076638116, "sender": "@alexxtasi:matrix.org", "state_key": "@alexxtasi:matrix.org", "type": "m.room.member", "unsigned": { "age": 24591314562, "replaces_state": "$1486076432108963BHESJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Golarmo", "membership": "join" }, "event_id": "$15056664421112647aolCp:matrix.org", "membership": "join", "origin_server_ts": 1505666442627, "sender": "@Golarmo:matrix.org", "state_key": "@Golarmo:matrix.org", "type": "m.room.member", "unsigned": { "age": 5001510051 } }, { "content": { "membership": "leave" }, "event_id": "$1484037304119598MchDO:matrix.org", "membership": "leave", "origin_server_ts": 1484037304800, "sender": "@manish2:matrix.org", "state_key": "@manish2:matrix.org", "type": "m.room.member", "unsigned": { "age": 26630647878, "replaces_state": "$1484036749114802xhuzH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14980595201XQtZN:yhager.com", "membership": "leave", "origin_server_ts": 1498059520054, "sender": "@yhager:yhager.com", "state_key": "@yhager:yhager.com", "type": "m.room.member", "unsigned": { "age": 12608432624, "prev_content": { "avatar_url": null, "displayname": "yhager", "membership": "join" }, "prev_sender": "@yhager:yhager.com", "replaces_state": "$149592670119Mxsil:yhager.com" } }, { "content": { "avatar_url": "mxc://matrix.infursec.furry.nz/HizVfwSLhArJoVZTSirArcma", "displayname": "Kyhwana", "membership": "join" }, "event_id": "$148220217828JBjeq:matrix.infursec.furry.nz", "origin_server_ts": 1482202171410, "sender": "@kyhwana:matrix.infursec.furry.nz", "state_key": "@kyhwana:matrix.infursec.furry.nz", "type": "m.room.member", "unsigned": { "age": 28 } }, { "content": { "membership": "leave" }, "event_id": "$15098199961412440RPgwQ:matrix.org", "membership": "leave", "origin_server_ts": 1509819996028, "sender": "@TurBoss:matrix.org", "state_key": "@TurBoss:matrix.org", "type": "m.room.member", "unsigned": { "age": 847956650, "replaces_state": "$15065394472409738sqrUI:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632182025658zDjlB:matrix.org", "membership": "leave", "origin_server_ts": 1495663218597, "sender": "@freenode_danc64:matrix.org", "state_key": "@freenode_danc64:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004734081, "replaces_state": "$1465976551752028yJyUb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Smiddy", "membership": "join" }, "event_id": "$149908232414ExngA:matrix.matthewsmith.id.au", "membership": "join", "origin_server_ts": 1499082324211, "sender": "@smiddy:matrix.matthewsmith.id.au", "state_key": "@smiddy:matrix.matthewsmith.id.au", "type": "m.room.member", "unsigned": { "age": 11585628467, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@smiddy:matrix.matthewsmith.id.au", "replaces_state": "$14990731281SzbCt:matrix.matthewsmith.id.au" } }, { "content": { "membership": "leave" }, "event_id": "$1472634380145228TTaSG:matrix.org", "membership": "leave", "origin_server_ts": 1472634380109, "sender": "@user142:matrix.org", "state_key": "@user142:matrix.org", "type": "m.room.member", "unsigned": { "age": 38033572569, "replaces_state": "$1472633137142939wlWgI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "tilpner (IRC)", "membership": "join" }, "event_id": "$15081885871462874tklsZ:matrix.org", "membership": "join", "origin_server_ts": 1508188587624, "sender": "@freenode_tilpner:matrix.org", "state_key": "@freenode_tilpner:matrix.org", "type": "m.room.member", "unsigned": { "age": 2479365054, "replaces_state": "$15081879111451184KLFKo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14909817104626xXJHh:disroot.org", "membership": "leave", "origin_server_ts": 1490981710750, "sender": "@Stefan:disroot.org", "state_key": "@Stefan:disroot.org", "type": "m.room.member", "unsigned": { "age": 19686241928, "prev_content": { "avatar_url": "mxc://disroot.org/ItuDPyYdJtjqpSXYAVSFmyFY", "displayname": "Stefan", "membership": "join" }, "prev_sender": "@Stefan:disroot.org", "replaces_state": "$14909816844624MEhUe:disroot.org" } }, { "content": { "avatar_url": null, "displayname": "nag_loggin2", "membership": "join" }, "event_id": "$14999637341405988SAbTv:matrix.org", "membership": "join", "origin_server_ts": 1499963734475, "sender": "@nag_loggin2:matrix.org", "state_key": "@nag_loggin2:matrix.org", "type": "m.room.member", "unsigned": { "age": 10704218203 } }, { "content": { "membership": "leave" }, "event_id": "$14956631802024789azJxE:matrix.org", "membership": "leave", "origin_server_ts": 1495663180840, "sender": "@freenode_neiljp:matrix.org", "state_key": "@freenode_neiljp:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004771838, "replaces_state": "$14892778021097530cmQBH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ozpDHUhkAbEFlhRhvmljbUCT", "displayname": "CIA", "membership": "join" }, "event_id": "$150772856934437ROSKt:matrix.org", "membership": "join", "origin_server_ts": 1507728569493, "sender": "@CIA:matrix.org", "state_key": "@CIA:matrix.org", "type": "m.room.member", "unsigned": { "age": 2939383185 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$146475509368666ZaWvf:matrix.org", "membership": "join", "origin_server_ts": 1464755093160, "sender": "@wankoo:matrix.org", "state_key": "@wankoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 45912859518 } }, { "content": { "membership": "leave" }, "event_id": "$14816774272NphIl:volotenko.net", "membership": "leave", "origin_server_ts": 1481677427215, "sender": "@beefboolean:volotenko.net", "state_key": "@beefboolean:volotenko.net", "type": "m.room.member", "unsigned": { "age": 28990525463, "replaces_state": "$14816773231vzlLe:volotenko.net" } }, { "content": { "avatar_url": null, "displayname": "Broken Physicality", "membership": "join" }, "event_id": "$15059930113RzbEM:matrix.reticent-castanet.tech", "origin_server_ts": 1505993011395, "sender": "@broken-physicality:matrix.reticent-castanet.tech", "state_key": "@broken-physicality:matrix.reticent-castanet.tech", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "membership": "leave" }, "event_id": "$1508585741249dcjEc:matrix.reticu.li", "membership": "leave", "origin_server_ts": 1508585741391, "sender": "@andrew:matrix.reticu.li", "state_key": "@andrew:matrix.reticu.li", "type": "m.room.member", "unsigned": { "age": 2082211287, "prev_content": { "avatar_url": "mxc://matrix.reticu.li/qwWLgRdRrVHKYYgDQFhcDYWz", "displayname": "Andrew", "membership": "join" }, "prev_sender": "@andrew:matrix.reticu.li", "replaces_state": "$1508581829240KOLAd:matrix.reticu.li" } }, { "content": { "avatar_url": null, "displayname": "ira", "membership": "join" }, "event_id": "$14845727042020451gSESX:matrix.org", "membership": "join", "origin_server_ts": 1484572704576, "sender": "@ira:matrix.org", "state_key": "@ira:matrix.org", "type": "m.room.member", "unsigned": { "age": 26095248102, "replaces_state": "$14845614751967219ZpxCD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1464959195805PBDZZ:matrix.org", "membership": "leave", "origin_server_ts": 1464959195403, "sender": "@NeatBasis:matrix.org", "state_key": "@NeatBasis:matrix.org", "type": "m.room.member", "unsigned": { "age": 45708757275, "replaces_state": "$146491203338020DYHKb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Ralith", "membership": "join" }, "event_id": "$148375884636WLBFT:ralith.com", "origin_server_ts": 1483758845006, "sender": "@ralith:ralith.com", "state_key": "@ralith:ralith.com", "type": "m.room.member", "unsigned": { "age": 20, "prev_content": { "displayname": "Ralith", "membership": "invite" }, "prev_sender": "@tom:karp.id.au", "replaces_state": "$148375875212mBaLB:karp.id.au" } }, { "content": { "avatar_url": "mxc://matrix.org/LhBzdqDojmCiHiswigaWGJaR#auto", "displayname": "Tyler", "membership": "join" }, "event_id": "$143718045715533xSNOF:matrix.org", "origin_server_ts": 1437180457687, "sender": "@tyler:matrix.org", "state_key": "@tyler:matrix.org", "type": "m.room.member", "unsigned": { "age": 73487494991 } }, { "content": { "membership": "leave" }, "event_id": "$15003749941522275FtkCr:matrix.org", "membership": "leave", "origin_server_ts": 1500374994283, "sender": "@freenode_suy:matrix.org", "state_key": "@freenode_suy:matrix.org", "type": "m.room.member", "unsigned": { "age": 10292958395, "replaces_state": "$1495529251541232MUNPw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15101027891147eqGcQ:steganosgraphei.xyz", "membership": "leave", "origin_server_ts": 1510102789149, "sender": "@deepred:steganosgraphei.xyz", "state_key": "@deepred:steganosgraphei.xyz", "type": "m.room.member", "unsigned": { "age": 565163529, "prev_content": { "avatar_url": "mxc://steganosgraphei.xyz/jDJfNsYvXMeWyUOvLpfgzpiF", "displayname": "deepred", "membership": "join" }, "prev_sender": "@deepred:steganosgraphei.xyz", "replaces_state": "$15101017911101bewrv:steganosgraphei.xyz" } }, { "content": { "avatar_url": null, "displayname": "dmitry.sinina", "membership": "join" }, "event_id": "$148365591511MMBZb:onat.edu.ua", "origin_server_ts": 1483655914942, "sender": "@dmitry.sinina:onat.edu.ua", "state_key": "@dmitry.sinina:onat.edu.ua", "type": "m.room.member", "unsigned": { "age": 14, "replaces_state": "$148365451314WMAVN:onat.edu.ua" } }, { "content": { "avatar_url": null, "displayname": "epidemik", "membership": "join" }, "event_id": "$15023634332829037MexPS:matrix.org", "membership": "join", "origin_server_ts": 1502363433226, "sender": "@epidemik:matrix.org", "state_key": "@epidemik:matrix.org", "type": "m.room.member", "unsigned": { "age": 8304519452 } }, { "content": { "avatar_url": null, "displayname": "gun", "membership": "join" }, "event_id": "$15002267531757933GqnRc:matrix.org", "membership": "join", "origin_server_ts": 1500226753998, "sender": "@Mr.Riddle:matrix.org", "state_key": "@Mr.Riddle:matrix.org", "type": "m.room.member", "unsigned": { "age": 10441198680, "replaces_state": "$14990044621656732ExHMR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1510412966219ihhRF:yuri.im", "membership": "leave", "origin_server_ts": 1510412966764, "sender": "@luke:yuri.im", "state_key": "@luke:yuri.im", "type": "m.room.member", "unsigned": { "age": 254985914, "prev_content": { "avatar_url": "mxc://yuri.im/bNnTRQWSCcBXZmCJTHzZhVAg", "displayname": "Dab Man", "membership": "join" }, "prev_sender": "@luke:yuri.im", "replaces_state": "$1510412943218pJxDn:yuri.im" } }, { "content": { "membership": "leave" }, "event_id": "$15028796702990353iybDL:matrix.org", "membership": "leave", "origin_server_ts": 1502879670775, "sender": "@freenode_Sveta:matrix.org", "state_key": "@freenode_Sveta:matrix.org", "type": "m.room.member", "unsigned": { "age": 7788281903, "replaces_state": "$15028612112813661iAmbz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$147161688740857euKcO:matrix.org", "membership": "join", "origin_server_ts": 1471616887819, "sender": "@amandadyj:matrix.org", "state_key": "@amandadyj:matrix.org", "type": "m.room.member", "unsigned": { "age": 39051064859 } }, { "content": { "membership": "leave" }, "event_id": "$15084108366ATnrC:logic.net", "membership": "leave", "origin_server_ts": 1508410836258, "sender": "@esm:logic.net", "state_key": "@esm:logic.net", "type": "m.room.member", "unsigned": { "age": 2257116420, "prev_content": { "avatar_url": "mxc://logic.net/zkqNQxGyCUxVdrTbeZyHcCXz", "displayname": "Ed Marshall", "membership": "join" }, "prev_sender": "@esm:logic.net", "replaces_state": "$149732051566xrzjz:logic.net" } }, { "content": { "membership": "leave" }, "event_id": "$14956632372026110INtEL:matrix.org", "membership": "leave", "origin_server_ts": 1495663237887, "sender": "@freenode_koobs:matrix.org", "state_key": "@freenode_koobs:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004714791, "replaces_state": "$14522612089737altPz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "opal (IRC)", "membership": "join" }, "event_id": "$1510015186139488fpBWD:matrix.org", "membership": "join", "origin_server_ts": 1510015186068, "sender": "@freenode_opal:matrix.org", "state_key": "@freenode_opal:matrix.org", "type": "m.room.member", "unsigned": { "age": 652766610, "replaces_state": "$15099945034224201mQiIe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Rick", "membership": "join" }, "event_id": "$14887759191ikhoC:matrix.selwahealth.org", "origin_server_ts": 1488775919486, "sender": "@rangak:matrix.selwahealth.org", "state_key": "@rangak:matrix.selwahealth.org", "type": "m.room.member", "unsigned": { "age": 11, "replaces_state": "$14862399531qpnML:matrix.selwahealth.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15069549672066968gudFN:matrix.org", "membership": "join", "origin_server_ts": 1506954967159, "sender": "@xfreeman:matrix.org", "state_key": "@xfreeman:matrix.org", "type": "m.room.member", "unsigned": { "age": 3712985519 } }, { "content": { "avatar_url": "mxc://matrix.enteig.net/DOLLCcJsvGbeRsaeUmBTznCz", "displayname": "Malte", "membership": "join" }, "event_id": "$142672923539qsOOd:matrix.enteig.net", "origin_server_ts": 1426729235701, "sender": "@malte:matrix.enteig.net", "state_key": "@malte:matrix.enteig.net", "type": "m.room.member", "unsigned": { "age": 37 } }, { "content": { "avatar_url": "mxc://darmstadt.ccc.de/wRAmwESBnnlmbFHAXEDujkHJ", "displayname": "Martin", "membership": "join" }, "event_id": "$1501622800293Ggsyc:darmstadt.ccc.de", "membership": "join", "origin_server_ts": 1501622800942, "sender": "@hexa:darmstadt.ccc.de", "state_key": "@hexa:darmstadt.ccc.de", "type": "m.room.member", "unsigned": { "age": 9045151736, "prev_content": { "avatar_url": "mxc://darmstadt.ccc.de/axxkOXcfwlodFAourUkrjfIz", "displayname": "hexa-", "membership": "join" }, "prev_sender": "@hexa:darmstadt.ccc.de", "replaces_state": "$1475506682239dQadj:darmstadt.ccc.de" } }, { "content": { "membership": "leave" }, "event_id": "$14991437513416821xhDds:matrix.org", "membership": "leave", "origin_server_ts": 1499143751774, "sender": "@freenode_K0HAX_:matrix.org", "state_key": "@freenode_K0HAX_:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524200904, "replaces_state": "$1497657208538144RyrTn:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1452664275449846TfTgU:matrix.org", "origin_server_ts": 1452664275173, "sender": "@WillLM:matrix.org", "state_key": "@WillLM:matrix.org", "type": "m.room.member", "unsigned": { "age": 58003677505 } }, { "content": { "avatar_url": "mxc://matrix.org/IAzmkIJAPhuykIgPQuVtgong", "displayname": "JoshLemer", "membership": "join" }, "event_id": "$1471189602565403GacFe:matrix.org", "membership": "join", "origin_server_ts": 1471189602040, "sender": "@JoshLemer:matrix.org", "state_key": "@JoshLemer:matrix.org", "type": "m.room.member", "unsigned": { "age": 39478350638 } }, { "content": { "membership": "leave" }, "event_id": "$14977409842PSyHO:frasinich.in.ua", "membership": "leave", "origin_server_ts": 1497740984809, "sender": "@denys:frasinich.in.ua", "state_key": "@denys:frasinich.in.ua", "type": "m.room.member", "unsigned": { "age": 12926967869, "prev_content": { "avatar_url": null, "displayname": "denys", "membership": "join" }, "prev_sender": "@denys:frasinich.in.ua", "replaces_state": "$14977407151ABCwx:frasinich.in.ua" } }, { "content": { "membership": "leave" }, "event_id": "$1509738618494662bAUTt:matrix.org", "membership": "leave", "origin_server_ts": 1509738618900, "sender": "@freenode_asthasr:matrix.org", "state_key": "@freenode_asthasr:matrix.org", "type": "m.room.member", "unsigned": { "age": 929333778, "replaces_state": "$1509737730478789sDgJP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "nosmas", "membership": "join" }, "event_id": "$14821687701180194vUuWR:matrix.org", "membership": "join", "origin_server_ts": 1482168770318, "sender": "@nosmas:matrix.org", "state_key": "@nosmas:matrix.org", "type": "m.room.member", "unsigned": { "age": 28499182360 } }, { "content": { "membership": "leave" }, "event_id": "$15015301554800747cEbed:matrix.org", "membership": "leave", "origin_server_ts": 1501530155199, "sender": "@freenode_user2468:matrix.org", "state_key": "@freenode_user2468:matrix.org", "type": "m.room.member", "unsigned": { "age": 9137797479, "replaces_state": "$15014774823849400DbRIQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wFbcMjABkqfOrCnkduNvFtTF", "displayname": "SajilCK", "membership": "join" }, "event_id": "$1490196722807947eJzJa:matrix.org", "membership": "join", "origin_server_ts": 1490196722822, "sender": "@SajilCK:matrix.org", "state_key": "@SajilCK:matrix.org", "type": "m.room.member", "unsigned": { "age": 20471229856 } }, { "content": { "avatar_url": "https://matrix.perlsite.co.uk/_matrix/content/QGphdmE6cGVybHNpdGUuY28udWsLEaYLdLQMlqHHwGwjufrsdEd.aW1hZ2UvcG5n.png", "displayname": "tm604 java", "membership": "join" }, "event_id": "$1416420911472pnYfW:perlsite.co.uk", "membership": "join", "origin_server_ts": 1410149608518, "sender": "@java:perlsite.co.uk", "state_key": "@java:perlsite.co.uk", "stream_ordering": 4647, "type": "m.room.member", "unsigned": { "age": 94247041206 } }, { "content": { "membership": "leave" }, "event_id": "$14956631642024445IrTyC:matrix.org", "membership": "leave", "origin_server_ts": 1495663164557, "sender": "@freenode_||cw:matrix.org", "state_key": "@freenode_||cw:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004788121, "replaces_state": "$1476195246128497NGgsK:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631622024405hhEYw:matrix.org", "membership": "leave", "origin_server_ts": 1495663162499, "sender": "@freenode_thum_:matrix.org", "state_key": "@freenode_thum_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004790179, "replaces_state": "$14877052572124064ryVxu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150727723335PhVah:im.datenpunk.io", "membership": "leave", "origin_server_ts": 1507277233269, "sender": "@b3ng:im.datenpunk.io", "state_key": "@b3ng:im.datenpunk.io", "type": "m.room.member", "unsigned": { "age": 3390719409, "prev_content": { "avatar_url": "mxc://im.datenpunk.io/wtmONDDPAfGfjdmEclukTlPP", "displayname": "B3NG", "membership": "join" }, "prev_sender": "@b3ng:im.datenpunk.io", "replaces_state": "$150560415084LljIz:im.datenpunk.io" } }, { "content": { "avatar_url": null, "displayname": "Teo", "membership": "join" }, "event_id": "$1417614764351LSmGx:matrix.org", "membership": "join", "origin_server_ts": 1417614764274, "sender": "@teo:matrix.org", "state_key": "@teo:matrix.org", "type": "m.room.member", "unsigned": { "age": 93053188404 } }, { "content": { "avatar_url": "mxc://bbqsrc.net/hdvbVrZleIrzUnJiKyoXsPLY", "displayname": "Brendan", "membership": "join" }, "event_id": "$1459854121486BriTu:bbqsrc.net", "origin_server_ts": 1459854122794, "sender": "@brendan:bbqsrc.net", "state_key": "@brendan:bbqsrc.net", "type": "m.room.member", "unsigned": { "age": 78 } }, { "content": { "avatar_url": "mxc://darkboli.net/maFLbJHywzCHyAcjpraDuBsA", "displayname": "boli", "membership": "join" }, "event_id": "$146570430915ocMnq:darkboli.net", "membership": "join", "origin_server_ts": 1465704309471, "sender": "@boli:darkboli.net", "state_key": "@boli:darkboli.net", "type": "m.room.member", "unsigned": { "age": 44963643207, "replaces_state": "$146542866340FmcxG:darkboli.net" } }, { "content": { "membership": "leave" }, "event_id": "$150289045724dBrzY:frozennet.eu", "membership": "leave", "origin_server_ts": 1502890457331, "sender": "@siim.naur:frozennet.eu", "state_key": "@siim.naur:frozennet.eu", "type": "m.room.member", "unsigned": { "age": 1673869, "prev_content": { "avatar_url": "mxc://frozennet.eu/sIXBEtWtImlQAQCWqSWupUYI", "displayname": "DasNaur", "membership": "join" }, "prev_sender": "@siim.naur:frozennet.eu", "replaces_state": "$150288995821mEArH:frozennet.eu" } }, { "content": { "avatar_url": null, "displayname": "kdar", "membership": "join" }, "event_id": "$14911866801843970UckLU:matrix.org", "membership": "join", "origin_server_ts": 1491186680502, "sender": "@kdar:matrix.org", "state_key": "@kdar:matrix.org", "type": "m.room.member", "unsigned": { "age": 19481272176 } }, { "content": { "avatar_url": null, "displayname": "Pergolas", "membership": "join" }, "event_id": "$14851781771353530PBXVj:matrix.org", "membership": "join", "origin_server_ts": 1485178177707, "sender": "@pergolas:matrix.org", "state_key": "@pergolas:matrix.org", "type": "m.room.member", "unsigned": { "age": 25489774971 } }, { "age_ts": 1508526257727, "content": { "avatar_url": "mxc://westwork.org/ExApBngirLIibAFdkekKsizI", "displayname": "Ross Schulman", "membership": "join" }, "event_id": "$1508526257186lNLnb:westwork.org", "origin_server_ts": 1508526256965, "sender": "@rschulman:westwork.org", "state_key": "@rschulman:westwork.org", "type": "m.room.member", "unsigned": { "age": 66, "replaces_state": "$150834989788jnCmd:westwork.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631842024860rDVWg:matrix.org", "membership": "leave", "origin_server_ts": 1495663184572, "sender": "@freenode_eternaleye:matrix.org", "state_key": "@freenode_eternaleye:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004768106, "replaces_state": "$143872410730369mikOD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014748453798042YhJgD:matrix.org", "membership": "leave", "origin_server_ts": 1501474845370, "sender": "@freenode_asynclove:matrix.org", "state_key": "@freenode_asynclove:matrix.org", "type": "m.room.member", "unsigned": { "age": 9193107308, "replaces_state": "$1499502679720966rtVYy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1482049405665913ANHUp:matrix.org", "membership": "leave", "origin_server_ts": 1482049405665, "sender": "@freenode_chatter:matrix.org", "state_key": "@freenode_chatter:matrix.org", "type": "m.room.member", "unsigned": { "age": 28618547013, "replaces_state": "$1482047322660670WCnqO:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/iPUJZyNDZajkfFPgIcANZzAX#auto", "displayname": null, "membership": "join" }, "event_id": "$1445943430233898AxWhA:matrix.org", "origin_server_ts": 1445943430664, "sender": "@hewer:matrix.org", "state_key": "@hewer:matrix.org", "type": "m.room.member", "unsigned": { "age": 64724522014 } }, { "content": { "avatar_url": "mxc://matrix.org/bnddzOdYdxpmvIFDNCAEcPSF", "displayname": "heftig", "membership": "join" }, "event_id": "$1488465607590953liFTc:matrix.org", "membership": "join", "origin_server_ts": 1488465607301, "sender": "@heftig:matrix.org", "state_key": "@heftig:matrix.org", "type": "m.room.member", "unsigned": { "age": 22202345377 } }, { "content": { "avatar_url": null, "displayname": "Yatekii", "membership": "join" }, "event_id": "$1487255315170jpMJO:matrix.darkchannel.net", "origin_server_ts": 1487255313490, "sender": "@yatekii:matrix.darkchannel.net", "state_key": "@yatekii:matrix.darkchannel.net", "type": "m.room.member", "unsigned": { "age": 34 } }, { "content": { "avatar_url": "mxc://matrix.org/FtKlDUuYKhjMFTkxoOjdBqOH#auto", "displayname": "alllights", "membership": "join" }, "event_id": "$1438170570193060NIIVi:matrix.org", "membership": "join", "origin_server_ts": 1438170570275, "sender": "@alllights:matrix.org", "state_key": "@alllights:matrix.org", "type": "m.room.member", "unsigned": { "age": 72497382403 } }, { "content": { "avatar_url": "mxc://matrix.org/mhUIKJBIhMAkZGQFVsueggfJ#auto", "displayname": null, "membership": "join" }, "event_id": "$144596067411246ITywI:matrix.org", "origin_server_ts": 1445960674394, "sender": "@sandeepnagori:matrix.org", "state_key": "@sandeepnagori:matrix.org", "type": "m.room.member", "unsigned": { "age": 64707278284 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1491853505272173DIfwk:matrix.org", "membership": "join", "origin_server_ts": 1491853505446, "sender": "@gautiers:matrix.org", "state_key": "@gautiers:matrix.org", "type": "m.room.member", "unsigned": { "age": 18814447232 } }, { "content": { "membership": "leave" }, "event_id": "$148932038012yIkKp:athena.0xd182.net", "membership": "leave", "origin_server_ts": 1489320380329, "sender": "@D182:athena.0xd182.net", "state_key": "@D182:athena.0xd182.net", "type": "m.room.member", "unsigned": { "age": 25375155, "prev_content": { "avatar_url": "mxc://athena.0xd182.net/ZxLKJQRAjQvexmyDuCdDyQGA", "displayname": "D182", "membership": "join" }, "prev_sender": "@D182:athena.0xd182.net", "replaces_state": "$14893197401OeoQD:athena.0xd182.net" } }, { "content": { "membership": "leave" }, "event_id": "$15075864753yEFuP:matrix.philippdumke.net", "membership": "leave", "origin_server_ts": 1507586475638, "sender": "@philipp:matrix.philippdumke.net", "state_key": "@philipp:matrix.philippdumke.net", "type": "m.room.member", "unsigned": { "age": 3081477040, "prev_content": { "avatar_url": null, "displayname": "Philipp", "membership": "join" }, "prev_sender": "@philipp:matrix.philippdumke.net", "replaces_state": "$1504163193109BaJEj:matrix.philippdumke.net" } }, { "content": { "avatar_url": "mxc://matrix.org/PBAFmKLEnHVADYgPUwzYzMPi", "displayname": "Alex", "membership": "join" }, "event_id": "$1469730726427764iRXKJ:matrix.org", "membership": "join", "origin_server_ts": 1469730726316, "sender": "@arx:matrix.org", "state_key": "@arx:matrix.org", "type": "m.room.member", "unsigned": { "age": 40937226362, "replaces_state": "$1469730683427637gEOjc:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/XgLRTBracvwLutqZoigBbGdg", "displayname": "Ilya Ig. Petrov", "membership": "join" }, "event_id": "$1504367013685007QuRMT:matrix.org", "membership": "join", "origin_server_ts": 1504367013456, "sender": "@ilyaigpetrov:matrix.org", "state_key": "@ilyaigpetrov:matrix.org", "type": "m.room.member", "unsigned": { "age": 6300939222 } }, { "content": { "membership": "leave" }, "event_id": "$151015918031dERem:monero.dlinkddns.com", "membership": "leave", "origin_server_ts": 1510159180736, "sender": "@adalberto:monero.dlinkddns.com", "state_key": "@adalberto:monero.dlinkddns.com", "type": "m.room.member", "unsigned": { "age": 508771942, "prev_content": { "avatar_url": "mxc://monero.dlinkddns.com/nowASRYCmJIsxuIzQRkwixae", "displayname": "Adalberto", "membership": "join" }, "prev_sender": "@adalberto:monero.dlinkddns.com", "replaces_state": "$151015806826QPUrW:monero.dlinkddns.com" } }, { "content": { "avatar_url": null, "displayname": "s-makrushin", "membership": "join" }, "event_id": "$1506624213332770FOZwE:matrix.org", "membership": "join", "origin_server_ts": 1506624213412, "sender": "@s-makrushin:matrix.org", "state_key": "@s-makrushin:matrix.org", "type": "m.room.member", "unsigned": { "age": 4043739266, "replaces_state": "$1506620726269632CeYlT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "HeN (IRC)", "membership": "join" }, "event_id": "$1506710997886698ktSbr:matrix.org", "membership": "join", "origin_server_ts": 1506710997884, "sender": "@freenode_HeN:matrix.org", "state_key": "@freenode_HeN:matrix.org", "type": "m.room.member", "unsigned": { "age": 3956954794, "replaces_state": "$15053550195414771hJEiS:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "kevinliao", "membership": "join" }, "event_id": "$1464185822122419jbpSb:matrix.org", "membership": "join", "origin_server_ts": 1464185822739, "sender": "@kevinliao:matrix.org", "state_key": "@kevinliao:matrix.org", "type": "m.room.member", "unsigned": { "age": 46482129939, "replaces_state": "$145800182424616cIBJJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14991437513416817aMtxX:matrix.org", "membership": "leave", "origin_server_ts": 1499143751526, "sender": "@freenode_metaphysician:matrix.org", "state_key": "@freenode_metaphysician:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524201152, "replaces_state": "$1497757232402502tnHAj:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.feder8.ru/ObjlyneWHiEyXpiYNgJHdnDU", "displayname": "pztrn", "membership": "join" }, "event_id": "$1501551749785eDdMS:matrix.feder8.ru", "membership": "join", "origin_server_ts": 1501551749889, "sender": "@pztrn:matrix.feder8.ru", "state_key": "@pztrn:matrix.feder8.ru", "type": "m.room.member", "unsigned": { "age": 9116202789, "prev_content": { "avatar_url": "mxc://matrix.feder8.ru/pfOoaFkMshxeihnurFwcqdQB", "displayname": "pztrn", "membership": "join" }, "prev_sender": "@pztrn:matrix.feder8.ru", "replaces_state": "$147870143632oQaMA:matrix.feder8.ru" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$146591153311zIVfc:matrix.aoeu.me", "origin_server_ts": 1465911533935, "sender": "@moredhel:matrix.aoeu.me", "state_key": "@moredhel:matrix.aoeu.me", "type": "m.room.member", "unsigned": { "age": 23 } }, { "content": { "avatar_url": "mxc://matrix.org/MBWVHYxHLrBIfBAVawDaOYhp", "displayname": null, "membership": "join" }, "event_id": "$1482129877993603SwzlZ:matrix.org", "membership": "join", "origin_server_ts": 1482129877929, "sender": "@kebyn:matrix.org", "state_key": "@kebyn:matrix.org", "type": "m.room.member", "unsigned": { "age": 28538074749, "replaces_state": "$1482051036670225aIefd:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/MHKBdTZaGHaYyOuQOwLeisig", "displayname": "AcrylicStyle", "membership": "join" }, "event_id": "$145374608433435SxyNB:matrix.org", "membership": "join", "origin_server_ts": 1453746084874, "sender": "@AcrylicStyle:matrix.org", "state_key": "@AcrylicStyle:matrix.org", "type": "m.room.member", "unsigned": { "age": 56921867804 } }, { "content": { "avatar_url": "mxc://matrix.swarm.strahlungsfrei.de/laEWpYhxVmDZtQmNUIWQOaRK", "displayname": "maze", "membership": "join" }, "event_id": "$1508109701547ZkMCG:matrix.swarm.strahlungsfrei.de", "origin_server_ts": 1508109701165, "sender": "@djmaze:matrix.swarm.strahlungsfrei.de", "state_key": "@djmaze:matrix.swarm.strahlungsfrei.de", "type": "m.room.member", "unsigned": { "age": 45 } }, { "content": { "avatar_url": "mxc://matrix.org/DkebajnbGcrcjDxGWEOqhGqQ", "displayname": "✞凤凰", "membership": "join" }, "event_id": "$14956074931142665PJkCA:matrix.org", "membership": "join", "origin_server_ts": 1495607493127, "sender": "@phenix2417:matrix.org", "state_key": "@phenix2417:matrix.org", "type": "m.room.member", "unsigned": { "age": 15060459551 } }, { "content": { "avatar_url": "mxc://matrix.org/ZxclLpeVqcUFgPePjzkGyIDM", "displayname": "paulfree", "membership": "join" }, "event_id": "$14961574894181499VdLaR:matrix.org", "membership": "join", "origin_server_ts": 1496157489307, "sender": "@paulfree:matrix.org", "state_key": "@paulfree:matrix.org", "type": "m.room.member", "unsigned": { "age": 14510463371, "replaces_state": "$1465917061651756rNlAM:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15078998711332454fSBew:matrix.org", "membership": "leave", "origin_server_ts": 1507899871883, "sender": "@freenode_SyrupThinker:matrix.org", "state_key": "@freenode_SyrupThinker:matrix.org", "type": "m.room.member", "unsigned": { "age": 2768080795, "replaces_state": "$1507821316223366bcEMV:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1504014243206650ygBiI:matrix.org", "membership": "join", "origin_server_ts": 1504014243674, "sender": "@sudobaal:matrix.org", "state_key": "@sudobaal:matrix.org", "type": "m.room.member", "unsigned": { "age": 6653709004 } }, { "content": { "membership": "leave" }, "event_id": "$143215997088sfdkX:matrix.org", "origin_server_ts": 1432159970538, "sender": "@AndrejLamov:matrix.org", "state_key": "@AndrejLamov:matrix.org", "type": "m.room.member", "unsigned": { "age": 78507982140, "replaces_state": "$14321493192769zVkfr:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145716913427930ewxiw:matrix.org", "membership": "join", "origin_server_ts": 1457169134926, "sender": "@qwer:matrix.org", "state_key": "@qwer:matrix.org", "type": "m.room.member", "unsigned": { "age": 53498817752 } }, { "content": { "avatar_url": "mxc://matrix.org/pSBEvswpICfyABeCIAKnBnuG", "displayname": "Soup", "membership": "join" }, "event_id": "$1437972464117804uudeE:matrix.org", "origin_server_ts": 1437972464515, "sender": "@soup:matrix.org", "state_key": "@soup:matrix.org", "type": "m.room.member", "unsigned": { "age": 72695488163 } }, { "content": { "avatar_url": null, "displayname": "tipiman", "membership": "join" }, "event_id": "$1460022966392813jgybU:matrix.org", "membership": "join", "origin_server_ts": 1460022966136, "sender": "@tipiman:matrix.org", "state_key": "@tipiman:matrix.org", "type": "m.room.member", "unsigned": { "age": 50644986542, "replaces_state": "$1459966828318881MSAia:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/VtXrNMJlhreoteokfciZcLfy", "displayname": "Luis Longoria", "membership": "join" }, "event_id": "$1488243086243342NJyrs:matrix.org", "membership": "join", "origin_server_ts": 1488243086667, "sender": "@llongoria:matrix.org", "state_key": "@llongoria:matrix.org", "type": "m.room.member", "unsigned": { "age": 22424866011 } }, { "content": { "membership": "leave" }, "event_id": "$1466603510982705bHCbs:matrix.org", "origin_server_ts": 1466603510303, "sender": "@kegan:matrix.org", "state_key": "@freenode_Kegsay_:matrix.org", "type": "m.room.member", "unsigned": { "age": 44064442375, "replaces_state": "$14296860514084UNyBW:matrix.org" } }, { "content": { "avatar_url": "mxc://testmatrix.0pt.pw/jiQlJGiUiCEpazUQOuTwsILG#auto", "displayname": "ingo (on 0pt)", "membership": "join" }, "event_id": "$142772069835cgrNL:testmatrix.0pt.pw", "origin_server_ts": 1427720698670, "sender": "@ianus:testmatrix.0pt.pw", "state_key": "@ianus:testmatrix.0pt.pw", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "membership": "leave" }, "event_id": "$1495165090360909grGex:matrix.org", "membership": "leave", "origin_server_ts": 1495165090995, "sender": "@220455:matrix.org", "state_key": "@220455:matrix.org", "type": "m.room.member", "unsigned": { "age": 15502861683, "replaces_state": "$1494082688827161TKjTD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14806156512437023OyHRZ:matrix.org", "membership": "leave", "origin_server_ts": 1480615651041, "sender": "@test7457:matrix.org", "state_key": "@test7457:matrix.org", "type": "m.room.member", "unsigned": { "age": 30052301637, "replaces_state": "$14798427801030308KdFii:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/dxSLorGYPkzdxPMZxuqWkuax", "displayname": "Brain Chris", "membership": "join" }, "event_id": "$15099511403310029bGrna:matrix.org", "membership": "join", "origin_server_ts": 1509951140238, "sender": "@brain:matrix.org", "state_key": "@brain:matrix.org", "type": "m.room.member", "unsigned": { "age": 716812440, "replaces_state": "$15099508893306149MteyJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150583384110BPlrG:schnuffle.de", "membership": "leave", "origin_server_ts": 1505833841300, "sender": "@me:schnuffle.de", "state_key": "@me:schnuffle.de", "type": "m.room.member", "unsigned": { "age": 4834111378, "prev_content": { "avatar_url": "mxc://schnuffle.de/meghGIoWKUYyZGJIruASMVAM", "displayname": "Me@Schnuffle", "membership": "join" }, "prev_sender": "@me:schnuffle.de", "replaces_state": "$148986539547uzEOF:schnuffle.de" } }, { "content": { "membership": "leave" }, "event_id": "$15103561459hySlp:savics.ddns.net", "membership": "leave", "origin_server_ts": 1510356145965, "sender": "@savage:savics.ddns.net", "state_key": "@savage:savics.ddns.net", "type": "m.room.member", "unsigned": { "age": 311806713, "prev_content": { "avatar_url": null, "displayname": "savage", "membership": "join" }, "prev_sender": "@savage:savics.ddns.net", "replaces_state": "$15103558838HFaFR:savics.ddns.net" } }, { "content": { "avatar_url": "mxc://dereferenced.org/awyYIJOXQayfOVwrKzteJUGd", "displayname": "kaniini", "membership": "join" }, "event_id": "$14883537221pjFoy:dereferenced.org", "membership": "join", "origin_server_ts": 1488353722236, "sender": "@kaniini:dereferenced.org", "state_key": "@kaniini:dereferenced.org", "type": "m.room.member", "unsigned": { "age": 22314230442, "replaces_state": "$14883529921rTkhS:dereferenced.org" } }, { "content": { "avatar_url": "mxc://matrix.org/slFJGMusxiIvoLcVaJcZLbDR", "displayname": "Chris", "membership": "join" }, "event_id": "$14232078352079qOFAW:matrix.org", "membership": "join", "origin_server_ts": 1423207835465, "sender": "@cdata:matrix.org", "state_key": "@cdata:matrix.org", "type": "m.room.member", "unsigned": { "age": 87460117213 } }, { "content": { "membership": "leave" }, "event_id": "$14956631872024930aiKxu:matrix.org", "membership": "leave", "origin_server_ts": 1495663187550, "sender": "@freenode_spacekitteh:matrix.org", "state_key": "@freenode_spacekitteh:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004765128, "replaces_state": "$1480134447534191igypc:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956632172025637TufUL:matrix.org", "membership": "leave", "origin_server_ts": 1495663217677, "sender": "@freenode_M-erikj1:matrix.org", "state_key": "@freenode_M-erikj1:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004735001, "replaces_state": "$143090390290AUGHz:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1508613579377munND:secureim.de", "membership": "leave", "origin_server_ts": 1508613579489, "sender": "@Felix:secureim.de", "state_key": "@Felix:secureim.de", "type": "m.room.member", "unsigned": { "age": 2054373189, "prev_content": { "avatar_url": "mxc://secureim.de/KuSyCCGCXqhzJkSxRBcVLSjI", "displayname": "Felix", "membership": "join" }, "prev_sender": "@Felix:secureim.de", "replaces_state": "$1508235602269bHrwk:secureim.de" } }, { "content": { "avatar_url": null, "displayname": "Guest 114279", "kind": "guest", "membership": "join" }, "event_id": "$1483436244802894mlTHu:matrix.org", "membership": "join", "origin_server_ts": 1483436244567, "sender": "@114279:matrix.org", "state_key": "@114279:matrix.org", "type": "m.room.member", "unsigned": { "age": 27231708111 } }, { "content": { "avatar_url": null, "displayname": "simple.", "membership": "join" }, "event_id": "$15072521091306788UpNNj:matrix.org", "membership": "join", "origin_server_ts": 1507252109085, "sender": "@simple.:matrix.org", "state_key": "@simple.:matrix.org", "type": "m.room.member", "unsigned": { "age": 3415843593 } }, { "content": { "membership": "leave" }, "event_id": "$14956631592024332XaCZi:matrix.org", "membership": "leave", "origin_server_ts": 1495663159042, "sender": "@freenode_mflow:matrix.org", "state_key": "@freenode_mflow:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004793636, "replaces_state": "$1490884701956619NtAFs:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14921692721656609CoUWN:matrix.org", "membership": "leave", "origin_server_ts": 1492169272311, "sender": "@peterhoeg:matrix.org", "state_key": "@peterhoeg:matrix.org", "type": "m.room.member", "unsigned": { "age": 18498680367, "replaces_state": "$14921661971633293aSKrw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1493732993101mcopA:sh.dalleau.me", "membership": "leave", "origin_server_ts": 1493732993013, "sender": "@kevind:sh.dalleau.me", "state_key": "@kevind:sh.dalleau.me", "type": "m.room.member", "unsigned": { "age": 16934959665, "prev_content": { "avatar_url": "mxc://sh.dalleau.me/USXrhESVisfUCbBTWKliwCUN", "displayname": "kevin", "membership": "join" }, "prev_sender": "@kevind:sh.dalleau.me", "replaces_state": "$1493732820100Sarks:sh.dalleau.me" } }, { "content": { "avatar_url": null, "displayname": "Bitti", "membership": "join" }, "event_id": "$148797217738pWTjW:mybitti.de", "origin_server_ts": 1487972173830, "sender": "@Bitti:mybitti.de", "state_key": "@Bitti:mybitti.de", "type": "m.room.member", "unsigned": { "age": 3602 } }, { "content": { "membership": "leave" }, "event_id": "$1474367150810954pBotj:matrix.org", "membership": "leave", "origin_server_ts": 1474367150267, "sender": "@Ecthelionotsandon:matrix.org", "state_key": "@Ecthelionotsandon:matrix.org", "type": "m.room.member", "unsigned": { "age": 36300802411, "replaces_state": "$1474367149810949flOBS:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$145437375930419FdRgy:matrix.org", "origin_server_ts": 1454373759644, "sender": "@rryan:matrix.org", "state_key": "@rryan:matrix.org", "type": "m.room.member", "unsigned": { "age": 56294193034, "replaces_state": "$14543610649339ibWVE:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JKklRPuDAvMnvAPvxPsRbKnv", "displayname": "Martin Giess (EMnify)", "membership": "join" }, "event_id": "$1451396094417259pjCPs:matrix.org", "membership": "join", "origin_server_ts": 1451396094211, "sender": "@marty:matrix.org", "state_key": "@marty:matrix.org", "type": "m.room.member", "unsigned": { "age": 59271858467, "replaces_state": "$1448811514121166kJNBJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1452508987251051tUmaL:matrix.org", "origin_server_ts": 1452508987077, "sender": "@theingi:matrix.org", "state_key": "@theingi:matrix.org", "type": "m.room.member", "unsigned": { "age": 58158965601 } }, { "content": { "avatar_url": "mxc://ipcortex.co.uk/KwbyhUINNvGPXZmbpNZNidaZ", "displayname": "Rob", "membership": "join" }, "event_id": "$150617166727bQNMo:ipcortex.co.uk", "membership": "join", "origin_server_ts": 1506171667796, "sender": "@rob:ipcortex.co.uk", "state_key": "@rob:ipcortex.co.uk", "type": "m.room.member", "unsigned": { "age": 4496284882, "replaces_state": "$150617160912jpVqp:ipcortex.co.uk" } }, { "content": { "avatar_url": null, "displayname": "dwg", "membership": "join" }, "event_id": "$14868167201Ccuqc:matrix.ozlabs.org", "origin_server_ts": 1486816719993, "sender": "@test:matrix.ozlabs.org", "state_key": "@test:matrix.ozlabs.org", "type": "m.room.member", "unsigned": { "age": 29 } }, { "content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "TravisR", "membership": "join" }, "event_id": "$1472131339222SbQjM:t2l.io", "membership": "join", "origin_server_ts": 1472131339088, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 38536613590, "prev_content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "Travis", "membership": "join" }, "prev_sender": "@travis:t2l.io", "replaces_state": "$146825175174AHVUD:t2l.io" } }, { "content": { "avatar_url": "mxc://matrix.org/nUpzboMouUDsVJTtwQUtaFXq", "displayname": "jzk", "membership": "join" }, "event_id": "$15025651071825310NxDtX:matrix.org", "membership": "join", "origin_server_ts": 1502565107940, "sender": "@jzk:matrix.org", "state_key": "@jzk:matrix.org", "type": "m.room.member", "unsigned": { "age": 8102844738, "replaces_state": "$1502483398641470EFaCt:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14987645881utokW:upyum.com", "membership": "leave", "origin_server_ts": 1498764588972, "sender": "@kooda:upyum.com", "state_key": "@kooda:upyum.com", "type": "m.room.member", "unsigned": { "age": 11903363706, "prev_content": { "avatar_url": "mxc://upyum.com/kSFQsjmEapJebdmrfBxDPues", "displayname": "Kooda 🐾", "membership": "join" }, "prev_sender": "@kooda:upyum.com", "replaces_state": "$1495359978210kYHwY:upyum.com" } }, { "content": { "avatar_url": null, "displayname": "fron", "membership": "join" }, "event_id": "$14888376802159468ZPBMR:matrix.org", "membership": "join", "origin_server_ts": 1488837680263, "sender": "@fcro:matrix.org", "state_key": "@fcro:matrix.org", "type": "m.room.member", "unsigned": { "age": 21830272415 } }, { "content": { "membership": "leave" }, "event_id": "$146354964719229pYJuL:matrix.org", "membership": "leave", "origin_server_ts": 1463549647994, "sender": "@CarcinoGeneticist:matrix.org", "state_key": "@CarcinoGeneticist:matrix.org", "type": "m.room.member", "unsigned": { "age": 47118304684, "replaces_state": "$146354957019144KUCFN:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14989384271172731wblnL:matrix.org", "membership": "leave", "origin_server_ts": 1498938427499, "sender": "@freenode_madgoat:matrix.org", "state_key": "@freenode_madgoat:matrix.org", "type": "m.room.member", "unsigned": { "age": 11729525179, "replaces_state": "$14989383231171665aShLe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jan", "membership": "join" }, "event_id": "$1489604012105776EJUnT:matrix.org", "membership": "join", "origin_server_ts": 1489604012040, "sender": "@jan.renz:matrix.org", "state_key": "@jan.renz:matrix.org", "type": "m.room.member", "unsigned": { "age": 21063940638 } }, { "content": { "avatar_url": null, "displayname": "VoteBlanc", "membership": "join" }, "event_id": "$1485446258640371abXsV:matrix.org", "membership": "join", "origin_server_ts": 1485446258402, "sender": "@VoteBlanc:matrix.org", "state_key": "@VoteBlanc:matrix.org", "type": "m.room.member", "unsigned": { "age": 25221694276, "replaces_state": "$1485446195639788VfUrT:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14942984012558143osnwo:matrix.org", "membership": "join", "origin_server_ts": 1494298401707, "sender": "@sophiehp:matrix.org", "state_key": "@sophiehp:matrix.org", "type": "m.room.member", "unsigned": { "age": 16369550971 } }, { "content": { "avatar_url": "mxc://matrix.derchris.eu/CrtaHcxugFaKXCjovtivlQyx", "displayname": "derchris", "membership": "join" }, "event_id": "$14823260481WUekH:matrix.derchris.eu", "origin_server_ts": 1482326048721, "sender": "@derchris:matrix.derchris.eu", "state_key": "@derchris:matrix.derchris.eu", "type": "m.room.member", "unsigned": { "age": 74 } }, { "content": { "avatar_url": "mxc://matrix.org/QgYmCMXlnfhRDuXlrrivpCaU#auto", "displayname": null, "membership": "join" }, "event_id": "$1444842426369308nRKSZ:matrix.org", "origin_server_ts": 1444842426951, "sender": "@applec:matrix.org", "state_key": "@applec:matrix.org", "type": "m.room.member", "unsigned": { "age": 65825525727 } }, { "content": { "avatar_url": "mxc://cortex.zaibatsutel.net/cIKOLXaTLCiwuDBiRdEdYWlc", "displayname": "Morgan Gangwere", "membership": "join" }, "event_id": "$14432554876oDDzx:cortex.zaibatsutel.net", "origin_server_ts": 1443255487467, "sender": "@indrora:cortex.zaibatsutel.net", "state_key": "@indrora:cortex.zaibatsutel.net", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "display_name": "zha...@mol...", "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA", "public_keys": [ { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA" }, { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/ephemeral/isvalid", "public_key": "VJ0B3ynNr-6TgFFxZ3XX4sdm0WtJ4qijiQTy7uwxQGo" } ] }, "event_id": "$148138386725jVVPt:matrix.molinkx.com", "origin_server_ts": 1481383867875, "sender": "@douglas:matrix.molinkx.com", "state_key": "EgaNRPQxINiHdJIkxtvVOQqGFdsnCxlpXNDQRzlipOGnzdpocZpHAixUGoiNddxrTrkBXslrNxMlYxvGFFcTKCWACmhJVzKaZwcLykySntnnaQnbrvQQDDQKYUwOJSyz", "type": "m.room.third_party_invite", "unsigned": { "age": 29284084803 } }, { "content": { "avatar_url": null, "displayname": "An Android client", "membership": "join" }, "event_id": "$1416420911262iitPd:192.168.1.7", "membership": "join", "origin_server_ts": 1410126089544, "sender": "@android:192.168.1.7", "state_key": "@android:192.168.1.7", "stream_ordering": 4479, "type": "m.room.member", "unsigned": { "age": 94247041416 } }, { "content": { "avatar_url": null, "displayname": "Mirko", "membership": "join" }, "event_id": "$14806928492752169AVQyo:matrix.org", "membership": "join", "origin_server_ts": 1480692849872, "sender": "@mirrom:matrix.org", "state_key": "@mirrom:matrix.org", "type": "m.room.member", "unsigned": { "age": 29975102806 } }, { "content": { "membership": "leave" }, "event_id": "$150186249040LxDki:x18.id4net.de", "membership": "leave", "origin_server_ts": 1501862490476, "sender": "@Sebastian:x18.id4net.de", "state_key": "@Sebastian:x18.id4net.de", "type": "m.room.member", "unsigned": { "age": 8805462202, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@Sebastian:x18.id4net.de", "replaces_state": "$15016708021scKDu:x18.id4net.de" } }, { "content": { "membership": "leave" }, "event_id": "$14530592655zVzqw:xeserv.us", "origin_server_ts": 1453059265563, "sender": "@Xena:xeserv.us", "state_key": "@Xena:xeserv.us", "type": "m.room.member", "unsigned": { "age": 57608687115, "replaces_state": "$14530588482QSOLl:xeserv.us" } }, { "content": { "avatar_url": "mxc://cirrus.arasphere.net/qdYYJTnpUsuyyXOdahtzFruH#auto", "displayname": "Matthew", "membership": "join" }, "event_id": "$14748118280iBiYf:cirrus.arasphere.net", "membership": "join", "origin_server_ts": 1474811828642, "sender": "@matthew:cirrus.arasphere.net", "state_key": "@matthew:cirrus.arasphere.net", "type": "m.room.member", "unsigned": { "age": 35856124036, "replaces_state": "$141674961211JhYjd:cirrus.arasphere.net" } }, { "content": { "avatar_url": "mxc://matrix.org/FfNrNdtatPDgqJUgTWqDuyQh", "displayname": "PabloS in Matrix.org", "membership": "join" }, "event_id": "$1493295756107044EPUSP:matrix.org", "membership": "join", "origin_server_ts": 1493295756155, "sender": "@psaavedra:matrix.org", "state_key": "@psaavedra:matrix.org", "type": "m.room.member", "unsigned": { "age": 17372196523, "replaces_state": "$149329400388236lYYHh:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Matthew", "membership": "join" }, "event_id": "$14527244470foRlO:arasphere.net", "membership": "join", "origin_server_ts": 1452724447616, "sender": "@matthew:arasphere.net", "state_key": "@matthew:arasphere.net", "type": "m.room.member", "unsigned": { "age": 57943505062, "replaces_state": "$143489616320hbYRu:arasphere.net" } }, { "content": { "avatar_url": null, "displayname": "Xe (IRC)", "membership": "join" }, "event_id": "$1502476088416463xzWkf:matrix.org", "membership": "join", "origin_server_ts": 1502476088431, "sender": "@freenode_Xe:matrix.org", "state_key": "@freenode_Xe:matrix.org", "type": "m.room.member", "unsigned": { "age": 8191864247, "replaces_state": "$15024244493642253bQLRx:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QQhDddHnPJovpdrNSeIcODix", "displayname": "ㄉㄠ ㄆㄨ", "membership": "join" }, "event_id": "$1490173249609674qtsym:matrix.org", "membership": "join", "origin_server_ts": 1490173249756, "sender": "@daopu:matrix.org", "state_key": "@daopu:matrix.org", "type": "m.room.member", "unsigned": { "age": 20494702922, "replaces_state": "$1483870779456277ycuKW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14671063531820823GGtwk:matrix.org", "membership": "leave", "origin_server_ts": 1467106353513, "sender": "@prakash:matrix.org", "state_key": "@prakash:matrix.org", "type": "m.room.member", "unsigned": { "age": 43561599165, "replaces_state": "$14670795671781993WOKNS:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/fyctFxQmhgtGwEVQrobyGBMO", "displayname": "ThomasJ", "membership": "join" }, "event_id": "$1476870466716454EQZPd:matrix.org", "membership": "join", "origin_server_ts": 1476870466823, "sender": "@tjuberg:matrix.org", "state_key": "@tjuberg:matrix.org", "type": "m.room.member", "unsigned": { "age": 33797485855, "replaces_state": "$14753464721476738COKtv:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "throwaway_efefefefef", "membership": "join" }, "event_id": "$15042938433810992igIYE:matrix.org", "membership": "join", "origin_server_ts": 1504293843847, "sender": "@throwaway_efefefefef:matrix.org", "state_key": "@throwaway_efefefefef:matrix.org", "type": "m.room.member", "unsigned": { "age": 6374108831 } }, { "content": { "membership": "leave" }, "event_id": "$14991437563416906fFOOA:matrix.org", "membership": "leave", "origin_server_ts": 1499143756047, "sender": "@freenode_mikaela[m]:matrix.org", "state_key": "@freenode_mikaela[m]:matrix.org", "type": "m.room.member", "unsigned": { "age": 11524196631, "replaces_state": "$1497650561429915FbrgN:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "bchris", "membership": "join" }, "event_id": "$1496237003184876wZhjL:matrix.org", "membership": "join", "origin_server_ts": 1496237003235, "sender": "@bchris:matrix.org", "state_key": "@bchris:matrix.org", "type": "m.room.member", "unsigned": { "age": 14430949443 } }, { "content": { "membership": "leave" }, "event_id": "$149365831457jVIAA:cloud.agnos.is", "membership": "leave", "origin_server_ts": 1493658314487, "sender": "@jeff:cloud.agnos.is", "state_key": "@jeff:cloud.agnos.is", "type": "m.room.member", "unsigned": { "age": 17009638191, "prev_content": { "avatar_url": null, "displayname": "jeff", "membership": "join" }, "prev_sender": "@jeff:cloud.agnos.is", "replaces_state": "$149365815756xqmzv:cloud.agnos.is" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15023116432320657lDVxR:matrix.org", "membership": "join", "origin_server_ts": 1502311643049, "sender": "@vwiencek:matrix.org", "state_key": "@vwiencek:matrix.org", "type": "m.room.member", "unsigned": { "age": 8356309629 } }, { "content": { "membership": "leave" }, "event_id": "$14956631522024205LcUPi:matrix.org", "membership": "leave", "origin_server_ts": 1495663152761, "sender": "@freenode_Ara4n:matrix.org", "state_key": "@freenode_Ara4n:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004799917, "replaces_state": "$14716307515602LwGQe:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612565035SpCDy:matrix.org", "origin_server_ts": 1429261256996, "sender": "@kegan:matrix.org", "state_key": "@irc_M-matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406695682, "replaces_state": "$1426202138954vxyFw:matrix.org" } }, { "content": { "display_name": "t...@myn...", "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA", "public_keys": [ { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/isvalid", "public_key": "LKd2ww8OslLxmzKShqFvCV4U7xGTcWjq4VDQXYGgdzA" }, { "key_validity_url": "https://vector.im/_matrix/identity/api/v1/pubkey/ephemeral/isvalid", "public_key": "AzD2ywE1FcI40Lk4VA7-2ceLLheSPDtv8NGsbpLkxRc" } ] }, "event_id": "$14798404621015969ofoUo:matrix.org", "origin_server_ts": 1479840462981, "sender": "@Shaka:matrix.org", "state_key": "qkhATyYYQMmqVTvhjraXeJTCuwSRDxuaREBeDAOrndiHVqwCqGzcoosDIpsQNgPLRuAKDNkxmgjlEgDrjFaKShoLDMWabeOrwqoZdGvZwwaHFmzLbOnTtlHMuaCyupMB", "type": "m.room.third_party_invite", "unsigned": { "age": 30827489697 } }, { "content": { "avatar_url": "mxc://matrix.org/MDvROUxmmDMffnePksbtUMBN", "displayname": "evck", "membership": "join" }, "event_id": "$1470594619336409PIwdE:matrix.org", "membership": "join", "origin_server_ts": 1470594619418, "sender": "@evck:matrix.org", "state_key": "@evck:matrix.org", "type": "m.room.member", "unsigned": { "age": 40073333260, "replaces_state": "$1465580003187317hNcZq:matrix.org" } }, { "content": { "groups": [ "+matrix:matrix.org" ] }, "event_id": "$1508853852357oaGFJ:jki.re", "origin_server_ts": 1508853852480, "sender": "@erikj:jki.re", "state_key": "", "type": "m.room.related_groups", "unsigned": { "age": 1814100198, "replaces_state": "$1508851829210108tZpJe:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1466505048791026OjikT:matrix.org", "membership": "leave", "origin_server_ts": 1466505048079, "sender": "@spykeburn:matrix.org", "state_key": "@spykeburn:matrix.org", "type": "m.room.member", "unsigned": { "age": 44162904599, "replaces_state": "$146605153889282YJrkV:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/JXAXPdFzWCTuUejpBwafvhfZ", "displayname": "baldo", "membership": "join" }, "event_id": "$1487451063681004weHpz:matrix.org", "membership": "join", "origin_server_ts": 1487451063385, "sender": "@baldo:matrix.org", "state_key": "@baldo:matrix.org", "type": "m.room.member", "unsigned": { "age": 23216889293 } }, { "content": { "avatar_url": null, "displayname": "jippa", "membership": "join" }, "event_id": "$1479221686320658wGlTO:matrix.org", "membership": "join", "origin_server_ts": 1479221686970, "sender": "@jippa:matrix.org", "state_key": "@jippa:matrix.org", "type": "m.room.member", "unsigned": { "age": 31446265708 } }, { "content": { "membership": "leave" }, "event_id": "$1440783894103qeLmF:matrix.pin13.net", "origin_server_ts": 1440783894014, "sender": "@aaronpk:matrix.pin13.net", "state_key": "@aaronpk:matrix.pin13.net", "type": "m.room.member", "unsigned": { "age": 69884058664, "replaces_state": "$144069329652YfjwY:matrix.pin13.net" } }, { "content": { "membership": "leave" }, "event_id": "$1502124413116591BJUmN:matrix.org", "membership": "leave", "origin_server_ts": 1502124413116, "sender": "@sirmitco:matrix.org", "state_key": "@sirmitco:matrix.org", "type": "m.room.member", "unsigned": { "age": 8543539562, "replaces_state": "$1494422452913423yyLmm:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612635038gotRD:matrix.org", "origin_server_ts": 1429261263531, "sender": "@kegan:matrix.org", "state_key": "@irc_Alien685:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406689147, "replaces_state": "$14242054853817oUSXw:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Hello", "membership": "invite" }, "event_id": "$14926148711613387SzSZd:matrix.org", "membership": "invite", "origin_server_ts": 1492614871593, "sender": "@Olivier.Nyssen:matrix.org", "state_key": "@211268:matrix.org", "type": "m.room.member", "unsigned": { "age": 18053081085 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1477515791430008FDrIu:matrix.org", "membership": "join", "origin_server_ts": 1477515791495, "sender": "@pseudonnym:matrix.org", "state_key": "@pseudonnym:matrix.org", "type": "m.room.member", "unsigned": { "age": 33152161183 } }, { "content": { "avatar_url": "mxc://gottsnack.net/AYblGymPABEIPEumyQinnpRH", "displayname": "joenas", "membership": "join" }, "event_id": "$14980690051564cyiBl:gottsnack.net", "membership": "join", "origin_server_ts": 1498069005493, "sender": "@joenas:gottsnack.net", "state_key": "@joenas:gottsnack.net", "type": "m.room.member", "unsigned": { "age": 12598947185, "prev_content": { "avatar_url": "mxc://gottsnack.net/AYblGymPABEIPEumyQinnpRH", "displayname": "joenass", "membership": "join" }, "prev_sender": "@joenas:gottsnack.net", "replaces_state": "$14980689761554vFeFP:gottsnack.net" } }, { "content": { "avatar_url": "mxc://matrix.org/uhiNfDUveWlqhGxsOYncUwdH", "displayname": "Aqeel", "membership": "join" }, "event_id": "$15028199922303998vxjWq:matrix.org", "membership": "join", "origin_server_ts": 1502819992238, "sender": "@aqeeliz:matrix.org", "state_key": "@aqeeliz:matrix.org", "type": "m.room.member", "unsigned": { "age": 7847960440 } }, { "content": { "membership": "leave" }, "event_id": "$14908613591lxVrQ:lowpolydev.de", "membership": "leave", "origin_server_ts": 1490861359910, "sender": "@timo:lowpolydev.de", "state_key": "@timo:lowpolydev.de", "type": "m.room.member", "unsigned": { "age": 19806592768, "prev_content": { "avatar_url": null, "displayname": "Timo☕️", "membership": "join" }, "prev_sender": "@timo:lowpolydev.de", "replaces_state": "$1490019098125mJyaO:lowpolydev.de" } }, { "content": { "avatar_url": "mxc://matrix.org/yWrEkEEANXvzSjVaEXLAJsKi", "displayname": "Alfie", "membership": "join" }, "event_id": "$14966965744867692ONfCF:matrix.org", "membership": "join", "origin_server_ts": 1496696574987, "sender": "@alfie:matrix.org", "state_key": "@alfie:matrix.org", "type": "m.room.member", "unsigned": { "age": 13971377691, "replaces_state": "$14966965164866789HYlmZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15084008684371936iLLKG:matrix.org", "membership": "leave", "origin_server_ts": 1508400868618, "sender": "@centiledevs5:matrix.org", "state_key": "@centiledevs5:matrix.org", "type": "m.room.member", "unsigned": { "age": 2267084060, "replaces_state": "$15059828735380350BXsFL:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15106301311274746ckcnG:matrix.org", "membership": "leave", "origin_server_ts": 1510630131487, "sender": "@freenode_anthm__:matrix.org", "state_key": "@freenode_anthm__:matrix.org", "type": "m.room.member", "unsigned": { "age": 37821191, "replaces_state": "$151026299893321ZNCCb:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Nick Hu", "membership": "join" }, "event_id": "$15105223853211093Geqsv:matrix.org", "membership": "join", "origin_server_ts": 1510522385602, "sender": "@nickhu:matrix.org", "state_key": "@nickhu:matrix.org", "type": "m.room.member", "unsigned": { "age": 145567076 } }, { "age_ts": 1504011948929, "content": { "avatar_url": "mxc://matrixim.cc/LCdVuiUgajzKQPMhUJozNSVg", "displayname": "vimacs", "membership": "join" }, "event_id": "$15040119481282oLamk:matrixim.cc", "origin_server_ts": 1504011948148, "sender": "@vimacs:matrixim.cc", "state_key": "@vimacs:matrixim.cc", "type": "m.room.member", "unsigned": { "age": 29, "prev_content": { "avatar_url": "mxc://matrixim.cc/LCdVuiUgajzKQPMhUJozNSVg", "displayname": "vimacs", "membership": "join" }, "prev_sender": "@vimacs:matrixim.cc", "replaces_state": "$1501151883379dqrLo:matrixim.cc" } }, { "content": { "avatar_url": "mxc://matrix.org/IjfxdhgSIzsflaJgAaEoEWYj", "displayname": "mr.d", "membership": "join" }, "event_id": "$14375913437137Fovjw:matrix.org", "origin_server_ts": 1437591343388, "sender": "@deterok:matrix.org", "state_key": "@deterok:matrix.org", "type": "m.room.member", "unsigned": { "age": 73076609290, "replaces_state": "$14374163391459tErYf:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$148190403586524ZVsQl:matrix.org", "membership": "join", "origin_server_ts": 1481904035381, "sender": "@yuiop:matrix.org", "state_key": "@yuiop:matrix.org", "type": "m.room.member", "unsigned": { "age": 28763917297 } }, { "content": { "avatar_url": "mxc://matrix.org/eikzzmEKUXxcuZCUKSmZtinH", "displayname": "shd4", "membership": "join" }, "event_id": "$1492656499441873yMYLj:matrix.org", "membership": "join", "origin_server_ts": 1492656499909, "sender": "@shod4n:matrix.org", "state_key": "@shod4n:matrix.org", "type": "m.room.member", "unsigned": { "age": 18011452769 } }, { "content": { "membership": "leave" }, "event_id": "$1437130015190454QMWmX:matrix.org", "origin_server_ts": 1437130015314, "sender": "@kegan3:matrix.org", "state_key": "@kegan3:matrix.org", "type": "m.room.member", "unsigned": { "age": 73537937364, "replaces_state": "$1437129987190447sDZvJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "theworldbright", "membership": "join" }, "event_id": "$14671011741810699BWhcq:matrix.org", "membership": "join", "origin_server_ts": 1467101174391, "sender": "@theworldbright:matrix.org", "state_key": "@theworldbright:matrix.org", "type": "m.room.member", "unsigned": { "age": 43566778287 } }, { "content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "TimePath", "membership": "join" }, "event_id": "$1502283439264QAPlX:timepath.xyz", "membership": "join", "origin_server_ts": 1502283439643, "sender": "@TimePath:timepath.xyz", "state_key": "@TimePath:timepath.xyz", "type": "m.room.member", "unsigned": { "age": 8384513035, "prev_content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "‮htaPemiT‬", "membership": "join" }, "prev_sender": "@TimePath:timepath.xyz", "replaces_state": "$1502272346145MVTrr:timepath.xyz" } }, { "content": { "membership": "leave" }, "event_id": "$1510491626291xotJb:bidetxe.org", "membership": "leave", "origin_server_ts": 1510491626298, "sender": "@jonmungia:bidetxe.org", "state_key": "@jonmungia:bidetxe.org", "type": "m.room.member", "unsigned": { "age": 176326380, "prev_content": { "avatar_url": null, "displayname": "jon", "membership": "join" }, "prev_sender": "@jonmungia:bidetxe.org", "replaces_state": "$1510490828288ciwRF:bidetxe.org" } }, { "content": { "avatar_url": null, "displayname": "Slavi", "membership": "join" }, "event_id": "$150289193919350vYSoY:matrix.org", "membership": "join", "origin_server_ts": 1502891939291, "sender": "@s.pantaleev:matrix.org", "state_key": "@s.pantaleev:matrix.org", "type": "m.room.member", "unsigned": { "age": 7776013387 } }, { "content": { "avatar_url": null, "displayname": "Guest 195240", "kind": "guest", "membership": "join" }, "event_id": "$1491032030691783YgsUB:matrix.org", "membership": "join", "origin_server_ts": 1491032030693, "sender": "@195240:matrix.org", "state_key": "@195240:matrix.org", "type": "m.room.member", "unsigned": { "age": 19635921985 } }, { "content": { "avatar_url": null, "displayname": "superboum", "kind": "guest", "membership": "join" }, "event_id": "$1483352465342725NzgSj:matrix.org", "membership": "join", "origin_server_ts": 1483352465135, "sender": "@115354:matrix.org", "state_key": "@115354:matrix.org", "type": "m.room.member", "unsigned": { "age": 27315487543 } }, { "content": { "avatar_url": null, "displayname": "patrickr", "membership": "join" }, "event_id": "$147003611252397vfDqD:matrix.org", "membership": "join", "origin_server_ts": 1470036112780, "sender": "@patrickr:matrix.org", "state_key": "@patrickr:matrix.org", "type": "m.room.member", "unsigned": { "age": 40631839898 } }, { "content": { "membership": "leave" }, "event_id": "$15053550185414753mivwO:matrix.org", "membership": "leave", "origin_server_ts": 1505355018545, "sender": "@freenode_togart[a]:matrix.org", "state_key": "@freenode_togart[a]:matrix.org", "type": "m.room.member", "unsigned": { "age": 5312934133, "replaces_state": "$15031762213669886efGMd:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.eclabs.de/uakjsYpKsfCPqLEHSTqmFDSV", "displayname": "sven", "membership": "join" }, "event_id": "$15003745832312spzeT:matrix.eclabs.de", "membership": "join", "origin_server_ts": 1500374583090, "sender": "@sven:matrix.eclabs.de", "state_key": "@sven:matrix.eclabs.de", "type": "m.room.member", "unsigned": { "age": 10293369588, "prev_content": { "avatar_url": "mxc://matrix.eclabs.de/uakjsYpKsfCPqLEHSTqmFDSV", "displayname": "sven", "membership": "invite" }, "prev_sender": "@rubo77:matrix.eclabs.de", "replaces_state": "$15003745532311CVAvA:matrix.eclabs.de" } }, { "content": { "avatar_url": null, "displayname": "scrdcow (IRC)", "membership": "join" }, "event_id": "$15031770183679538yzlMj:matrix.org", "membership": "join", "origin_server_ts": 1503177018079, "sender": "@freenode_scrdcow:matrix.org", "state_key": "@freenode_scrdcow:matrix.org", "type": "m.room.member", "unsigned": { "age": 7490934599, "replaces_state": "$15029623661168975gNEhW:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "im@ttf", "membership": "join" }, "event_id": "$1416420910784pdqOM:matrix.org", "membership": "join", "origin_server_ts": 1409935859938, "sender": "@imattf:matrix.org", "state_key": "@imattf:matrix.org", "stream_ordering": 3609, "type": "m.room.member", "unsigned": { "age": 94247041894 } }, { "content": { "avatar_url": "mxc://matrix.org/ikCvdsJMHrqZkjqhhXngfvQv", "displayname": "goern", "membership": "join" }, "event_id": "$1474619212218651fvNQa:matrix.org", "membership": "join", "origin_server_ts": 1474619212771, "sender": "@goern:matrix.org", "state_key": "@goern:matrix.org", "type": "m.room.member", "unsigned": { "age": 36048739907 } }, { "content": { "avatar_url": "mxc://matrix.cigliola.com/IcyfRpTUbhEtkYJePQuzvkJY", "displayname": "cataldoc", "membership": "join" }, "event_id": "$148466945253plFcX:matrix.cigliola.com", "origin_server_ts": 1484669449990, "sender": "@cataldoc:matrix.cigliola.com", "state_key": "@cataldoc:matrix.cigliola.com", "type": "m.room.member", "unsigned": { "age": 2080 } }, { "content": { "avatar_url": "mxc://teraspek.com/hojNBnWbYWEfRQOnwFBGwJvn", "displayname": "陳鵬", "membership": "join" }, "event_id": "$149570811639apmzZ:teraspek.com", "membership": "join", "origin_server_ts": 1495708116264, "sender": "@roccen:teraspek.com", "state_key": "@roccen:teraspek.com", "type": "m.room.member", "unsigned": { "age": 14959836414, "replaces_state": "$149570810437IIQRa:teraspek.com" } }, { "content": { "avatar_url": "mxc://matrix.org/QkSGOxEGpdMQyqnUviMDNlbM", "displayname": "MeTheFlea", "membership": "join" }, "event_id": "$1507379824937823fdKrC:matrix.org", "membership": "join", "origin_server_ts": 1507379824566, "sender": "@MeTheFlea:matrix.org", "state_key": "@MeTheFlea:matrix.org", "type": "m.room.member", "unsigned": { "age": 3288128112 } }, { "content": { "avatar_url": "mxc://toastwerk.net/kgzXKmDVQOOMiIOcYPooUDQp", "displayname": "Buli", "membership": "join" }, "event_id": "$1494547125250UhBTs:toastwerk.net", "origin_server_ts": 1494547130917, "sender": "@Buli:toastwerk.net", "state_key": "@Buli:toastwerk.net", "type": "m.room.member", "unsigned": { "age": 39, "replaces_state": "$14943799161HUnXY:toastwerk.net" } }, { "content": { "membership": "leave" }, "event_id": "$145596643940604UauYq:matrix.org", "origin_server_ts": 1455966439825, "sender": "@adufilie:matrix.org", "state_key": "@adufilie:matrix.org", "type": "m.room.member", "unsigned": { "age": 54701512853, "replaces_state": "$145594860838439gZQrK:matrix.org" } }, { "content": { "avatar_url": "mxc://skryking.com/iJZUszHATThMtTvHIPcJsHWG", "displayname": null, "membership": "join" }, "event_id": "$14374152791wmSis:skryking.com", "origin_server_ts": 1437415279051, "sender": "@skryking:skryking.com", "state_key": "@skryking:skryking.com", "type": "m.room.member", "unsigned": { "age": 73252673627, "replaces_state": "$14365002356rTINr:skryking.com" } }, { "content": { "avatar_url": "mxc://matrix.org/WeXSOGWLOAsnbfZcPObsuFjN", "displayname": "Simen", "membership": "join" }, "event_id": "$1449077474367075syLPU:matrix.org", "origin_server_ts": 1449077474749, "sender": "@simeng:matrix.org", "state_key": "@simeng:matrix.org", "type": "m.room.member", "unsigned": { "age": 61590477929 } }, { "content": { "avatar_url": "mxc://matrix.org/ssLTKPovwLMsLaeIsibcEstF#auto", "displayname": "Max Teufel", "membership": "join" }, "event_id": "$1469275107462271oAvgO:matrix.org", "membership": "join", "origin_server_ts": 1469275107954, "sender": "@mteufel:matrix.org", "state_key": "@mteufel:matrix.org", "type": "m.room.member", "unsigned": { "age": 41392844724, "replaces_state": "$1449076500365979NRVxA:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "anaxios", "membership": "join" }, "event_id": "$15082993283019071tCRWH:matrix.org", "membership": "join", "origin_server_ts": 1508299328319, "sender": "@anaxios:matrix.org", "state_key": "@anaxios:matrix.org", "type": "m.room.member", "unsigned": { "age": 2368624359 } }, { "content": { "avatar_url": null, "displayname": "bmiller59test", "membership": "join" }, "event_id": "$14903234691999733kQkfA:matrix.org", "membership": "join", "origin_server_ts": 1490323469068, "sender": "@bmiller59test:matrix.org", "state_key": "@bmiller59test:matrix.org", "type": "m.room.member", "unsigned": { "age": 20344483610 } }, { "content": { "avatar_url": "mxc://matrix.org/FQyZPHoPCKAuYtvylJFjfAmq", "displayname": "Uniaika", "membership": "join" }, "event_id": "$1465721364354424lGxhX:matrix.org", "membership": "join", "origin_server_ts": 1465721364742, "sender": "@Uniaika:matrix.org", "state_key": "@Uniaika:matrix.org", "type": "m.room.member", "unsigned": { "age": 44946587936 } }, { "content": { "avatar_url": "mxc://matrix.org/bsbxMyunHJoYtfxZHBrjRSrj", "displayname": "chittti", "membership": "join" }, "event_id": "$1491982141853929GWrml:matrix.org", "membership": "join", "origin_server_ts": 1491982141683, "sender": "@chittti:matrix.org", "state_key": "@chittti:matrix.org", "type": "m.room.member", "unsigned": { "age": 18685810995 } }, { "content": { "avatar_url": "mxc://matrix.org/vxUqMornOkSutRlXWnzFppUI", "displayname": "Poulad", "membership": "join" }, "event_id": "$15047953393467511QAEBV:matrix.org", "membership": "join", "origin_server_ts": 1504795339190, "sender": "@poulad:matrix.org", "state_key": "@poulad:matrix.org", "type": "m.room.member", "unsigned": { "age": 5872613488 } }, { "content": { "avatar_url": null, "displayname": "serdtfygh", "kind": "guest", "membership": "join" }, "event_id": "$14869028931248537juCpE:matrix.org", "membership": "join", "origin_server_ts": 1486902893551, "sender": "@150780:matrix.org", "state_key": "@150780:matrix.org", "type": "m.room.member", "unsigned": { "age": 23765059127 } }, { "content": { "membership": "leave" }, "event_id": "$148745175623izFzg:matrix.laxpeter.net", "membership": "leave", "origin_server_ts": 1487451756157, "sender": "@peter:matrix.laxpeter.net", "state_key": "@peter:matrix.laxpeter.net", "type": "m.room.member", "unsigned": { "age": 23216196521, "replaces_state": "$148745006822EHujM:matrix.laxpeter.net" } }, { "content": { "avatar_url": "mxc://matrix.org/JFAxmoUcuZrVlnVulSoqVuTC", "displayname": "Vic", "membership": "join" }, "event_id": "$14552049961543bFjbQ:matrix.org", "origin_server_ts": 1455204996372, "sender": "@Scootaloose:matrix.org", "state_key": "@Scootaloose:matrix.org", "type": "m.room.member", "unsigned": { "age": 55462956306, "replaces_state": "$145433575175782ybctg:matrix.org" } }, { "age_ts": 1483010801182, "content": { "avatar_url": "mxc://matrix.loboto.net/DJuYVuSSKfHRlTeOYFqnSIXP", "displayname": "Thunder", "membership": "join" }, "event_id": "$1483010800685nixpW:matrix.loboto.net", "origin_server_ts": 1483010800827, "sender": "@thunder:matrix.loboto.net", "state_key": "@thunder:matrix.loboto.net", "type": "m.room.member", "unsigned": { "age": 17 } }, { "content": { "membership": "leave" }, "event_id": "$149489374614UwaCa:handmadedev.org", "membership": "leave", "origin_server_ts": 1494893746781, "sender": "@chronal:handmadedev.org", "state_key": "@chronal:handmadedev.org", "type": "m.room.member", "unsigned": { "age": 15774205897, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@chronal:handmadedev.org", "replaces_state": "$14948935048wDUjg:handmadedev.org" } }, { "content": { "membership": "leave" }, "event_id": "$14997255702839705MFIjf:matrix.org", "membership": "leave", "origin_server_ts": 1499725570186, "sender": "@freenode_deep-book-gk_:matrix.org", "state_key": "@freenode_deep-book-gk_:matrix.org", "type": "m.room.member", "unsigned": { "age": 10942382492, "replaces_state": "$14997254012837460uRCAa:matrix.org" } }, { "age_ts": 1502875789432, "content": { "avatar_url": null, "displayname": "test2", "membership": "join" }, "event_id": "$150287578835uRnLy:matrix.dust-puppy.net", "origin_server_ts": 1502875782202, "sender": "@test2:matrix.dust-puppy.net", "state_key": "@test2:matrix.dust-puppy.net", "type": "m.room.member", "unsigned": { "age": 30 } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QHRob206bWF0cml4Lm9yZwhfGzZPzyEIMGcKWPFzWFRHtV.aW1hZ2UvcG5n.png", "displayname": "Thom", "membership": "join" }, "event_id": "$1416420915742NQoXP:matrix.org", "membership": "join", "origin_server_ts": 1411071035732, "sender": "@thom:matrix.org", "state_key": "@thom:matrix.org", "stream_ordering": 6567, "type": "m.room.member", "unsigned": { "age": 94247036936 } }, { "content": { "avatar_url": null, "displayname": "107262", "membership": "join" }, "event_id": "$14824685091273945yEFfU:matrix.org", "membership": "join", "origin_server_ts": 1482468509508, "sender": "@107262:matrix.org", "state_key": "@107262:matrix.org", "type": "m.room.member", "unsigned": { "age": 28199443170 } }, { "content": { "avatar_url": "mxc://matrix.org/yJexAyhTrEnLPMyRxTRAmWTV", "displayname": "enough", "membership": "join" }, "event_id": "$1483057385175974rcFmV:matrix.org", "membership": "join", "origin_server_ts": 1483057385569, "sender": "@enough:matrix.org", "state_key": "@enough:matrix.org", "type": "m.room.member", "unsigned": { "age": 27610567109 } }, { "content": { "avatar_url": "mxc://matrix.org/FQYtCczmMRRJHvzYwdDYDUpw#auto", "displayname": "Vitaly", "membership": "join" }, "event_id": "$145331769298027YIUWO:matrix.org", "origin_server_ts": 1453317692273, "sender": "@vitalyster:matrix.org", "state_key": "@vitalyster:matrix.org", "type": "m.room.member", "unsigned": { "age": 57350260405 } }, { "content": { "avatar_url": "mxc://matrix.org/bQKoZEHwIPLpuzVylSihmLhz#auto", "displayname": "Ralph", "membership": "join" }, "event_id": "$145410705029800KLsRZ:matrix.org", "origin_server_ts": 1454107050018, "sender": "@rg:matrix.org", "state_key": "@rg:matrix.org", "type": "m.room.member", "unsigned": { "age": 56560902660 } }, { "content": { "avatar_url": "mxc://matrix.org/iuzsxYuLfouZzEMVhGZhpNJb", "displayname": "erwin", "membership": "join" }, "event_id": "$148723966754866jwwYx:matrix.org", "membership": "join", "origin_server_ts": 1487239667945, "sender": "@erwin:matrix.org", "state_key": "@erwin:matrix.org", "type": "m.room.member", "unsigned": { "age": 23428284733, "replaces_state": "$1486731388365386lomPB:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/eGFJLHkBwHgQvRPHkuPcLJHA#auto", "displayname": "Matt", "membership": "join" }, "event_id": "$142575871614508vcQOx:matrix.org", "membership": "join", "origin_server_ts": 1425758716673, "sender": "@matt:matrix.org", "state_key": "@matt:matrix.org", "type": "m.room.member", "unsigned": { "age": 84909236005 } }, { "content": { "avatar_url": "mxc://tedomum.net/msrXodeLXfEqPpdObUyMDaMQ", "displayname": "kaiyou", "membership": "join" }, "event_id": "$1485465725106OgHVn:tedomum.net", "origin_server_ts": 1485465725360, "sender": "@kaiyou:tedomum.net", "state_key": "@kaiyou:tedomum.net", "type": "m.room.member", "unsigned": { "age": 99 } }, { "content": { "avatar_url": null, "displayname": "Guest 172918", "kind": "guest", "membership": "join" }, "event_id": "$148906310636916alLHe:matrix.org", "membership": "join", "origin_server_ts": 1489063106797, "sender": "@172918:matrix.org", "state_key": "@172918:matrix.org", "type": "m.room.member", "unsigned": { "age": 21604845881 } }, { "content": { "membership": "leave" }, "event_id": "$149479007717WlYsJ:zientek.pl", "membership": "leave", "origin_server_ts": 1494790077315, "sender": "@adam:zientek.pl", "state_key": "@adam:zientek.pl", "type": "m.room.member", "unsigned": { "age": 15877875363, "prev_content": { "avatar_url": "mxc://zientek.pl/RfXcINdqAAsFJQYeApAVNQPG", "displayname": "zielus", "membership": "join" }, "prev_sender": "@adam:zientek.pl", "replaces_state": "$149478691314oqTaJ:zientek.pl" } }, { "content": { "avatar_url": null, "displayname": "adru (IRC)", "membership": "join" }, "event_id": "$1510614540846964UBHwa:matrix.org", "membership": "join", "origin_server_ts": 1510614540930, "sender": "@freenode_adru:matrix.org", "state_key": "@freenode_adru:matrix.org", "type": "m.room.member", "unsigned": { "age": 53411748, "prev_content": { "membership": "leave" }, "prev_sender": "@freenode_adru:matrix.org", "replaces_state": "$15025701421984675qINoZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15028164242249376EhpQn:matrix.org", "membership": "leave", "origin_server_ts": 1502816424012, "sender": "@heyalex:matrix.org", "state_key": "@heyalex:matrix.org", "type": "m.room.member", "unsigned": { "age": 7851528666, "replaces_state": "$15010440084584398Vyzns:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/QAxoEYTLdeBqEAECazsngbJK", "displayname": "ben-Nabiy", "membership": "join" }, "event_id": "$1508096158176785GHLbI:matrix.org", "membership": "join", "origin_server_ts": 1508096158792, "sender": "@bennabiy:matrix.org", "state_key": "@bennabiy:matrix.org", "type": "m.room.member", "unsigned": { "age": 2571793886, "replaces_state": "$15058366593457262EZMAY:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ICGKtechxMdbfdoeDAUaAefj", "displayname": "qzorg", "membership": "join" }, "event_id": "$1484173837288500XlwuU:matrix.org", "membership": "join", "origin_server_ts": 1484173837165, "sender": "@qzorg:matrix.org", "state_key": "@qzorg:matrix.org", "type": "m.room.member", "unsigned": { "age": 26494115513 } }, { "content": { "membership": "leave" }, "event_id": "$14956631822024829zhmYJ:matrix.org", "membership": "leave", "origin_server_ts": 1495663182687, "sender": "@freenode_M-kegan1:matrix.org", "state_key": "@freenode_M-kegan1:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004769991, "replaces_state": "$14315059721592pQInH:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix4me.nl/AdpZRjNgJzSoxpTcxUkUErdw", "displayname": "Peter Scholtens", "membership": "join" }, "event_id": "$151059758849GDGfX:matrix4me.nl", "membership": "join", "origin_server_ts": 1510597588922, "sender": "@peter.scholtens:matrix4me.nl", "state_key": "@peter.scholtens:matrix4me.nl", "type": "m.room.member", "unsigned": { "age": 70363756, "prev_content": { "avatar_url": "mxc://matrix4me.nl/AdpZRjNgJzSoxpTcxUkUErdw", "displayname": "PeterSch", "membership": "join" }, "prev_sender": "@peter.scholtens:matrix4me.nl", "replaces_state": "$151059747114ZHPVn:matrix4me.nl" } }, { "content": { "membership": "leave" }, "event_id": "$14978007452EiMRN:matrix.aeminium.org", "membership": "leave", "origin_server_ts": 1497800745210, "sender": "@testuser:matrix.aeminium.org", "state_key": "@testuser:matrix.aeminium.org", "type": "m.room.member", "unsigned": { "age": 12867207468, "prev_content": { "avatar_url": null, "displayname": "testuser", "membership": "join" }, "prev_sender": "@testuser:matrix.aeminium.org", "replaces_state": "$1497800083106IWVVS:matrix.aeminium.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$148665805273067qsjgD:matrix.org", "membership": "join", "origin_server_ts": 1486658052144, "sender": "@pfault:matrix.org", "state_key": "@pfault:matrix.org", "type": "m.room.member", "unsigned": { "age": 24009900534 } }, { "content": { "avatar_url": null, "displayname": "mrw", "membership": "join" }, "event_id": "$1488344037367827wwVst:matrix.org", "membership": "join", "origin_server_ts": 1488344037526, "sender": "@markrwilliams:matrix.org", "state_key": "@markrwilliams:matrix.org", "type": "m.room.member", "unsigned": { "age": 22323915152, "replaces_state": "$1488344014367727KmTdm:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1500603134268oYJYn:matrix.molinkx.com", "membership": "leave", "origin_server_ts": 1500603134859, "sender": "@zhaowei:matrix.molinkx.com", "state_key": "@zhaowei:matrix.molinkx.com", "type": "m.room.member", "unsigned": { "age": 10064817819, "prev_content": { "avatar_url": null, "displayname": "wei zhao", "membership": "join" }, "prev_sender": "@zhaowei:matrix.molinkx.com", "replaces_state": "$14825123963056OwwVd:matrix.molinkx.com" } }, { "content": { "avatar_url": "mxc://matrix.org/SATNfSFDYCRLckwthKnoIGNk", "displayname": "dor", "membership": "join" }, "event_id": "$14828209272701811CMcFX:matrix.org", "membership": "join", "origin_server_ts": 1482820927870, "sender": "@Dor:matrix.org", "state_key": "@Dor:matrix.org", "type": "m.room.member", "unsigned": { "age": 27847024808, "replaces_state": "$14808668973383102RUMlC:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/acnzkNEFRknnftabgRaJhoOi", "displayname": null, "membership": "join" }, "event_id": "$14825836051797977XcPfg:matrix.org", "membership": "join", "origin_server_ts": 1482583605939, "sender": "@xuyan:matrix.org", "state_key": "@xuyan:matrix.org", "type": "m.room.member", "unsigned": { "age": 28084346739 } }, { "content": { "avatar_url": "mxc://matrix.org/cuSFxgmRPdtAcfzzTvUTOyGS#auto", "displayname": "Ingo", "membership": "join" }, "event_id": "$1468446832431380gBTVC:matrix.org", "membership": "join", "origin_server_ts": 1468446832351, "sender": "@testme:matrix.org", "state_key": "@testme:matrix.org", "type": "m.room.member", "unsigned": { "age": 42221120327, "replaces_state": "$14308221295052ubQcJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Mikaela (IRC)", "membership": "join" }, "event_id": "$14979517653293881Tbppk:matrix.org", "membership": "join", "origin_server_ts": 1497951765047, "sender": "@freenode_Mikaela:matrix.org", "state_key": "@freenode_Mikaela:matrix.org", "type": "m.room.member", "unsigned": { "age": 12716187631, "replaces_state": "$1497653335476355Clvgo:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1469586702124003XGEDy:matrix.org", "membership": "leave", "origin_server_ts": 1469586702656, "sender": "@Ryan:matrix.org", "state_key": "@Ryan:matrix.org", "type": "m.room.member", "unsigned": { "age": 41081250022, "replaces_state": "$1469586685123976MYnqC:matrix.org" } }, { "content": { "avatar_url": "mxc://davidar.io/cOYetNDarmZwGRtxaKIntyJn", "displayname": "davidar", "membership": "join" }, "event_id": "$1491294520139SCpbl:davidar.io", "membership": "join", "origin_server_ts": 1491294520722, "sender": "@david:davidar.io", "state_key": "@david:davidar.io", "type": "m.room.member", "unsigned": { "age": 19373431956, "prev_content": { "avatar_url": "mxc://davidar.io/cOYetNDarmZwGRtxaKIntyJn", "displayname": "davidar.io", "membership": "join" }, "prev_sender": "@david:davidar.io", "replaces_state": "$148715290833iland:davidar.io" } }, { "content": { "membership": "leave" }, "event_id": "$1485367135174791RIYIg:matrix.org", "membership": "leave", "origin_server_ts": 1485367135233, "sender": "@NewTribeAlbum:matrix.org", "state_key": "@NewTribeAlbum:matrix.org", "type": "m.room.member", "unsigned": { "age": 25300817445, "replaces_state": "$1485366192167504mUfyy:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15016569426619088lNczF:matrix.org", "membership": "leave", "origin_server_ts": 1501656942951, "sender": "@elvisangelaccio:matrix.org", "state_key": "@elvisangelaccio:matrix.org", "type": "m.room.member", "unsigned": { "age": 9011009727, "replaces_state": "$14960784883444176ypCND:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15014788493873364XksIX:matrix.org", "membership": "leave", "origin_server_ts": 1501478849160, "sender": "@freenode_GK1wmSU:matrix.org", "state_key": "@freenode_GK1wmSU:matrix.org", "type": "m.room.member", "unsigned": { "age": 9189103518, "replaces_state": "$15014787513871933TZxqX:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Toucan (IRC)", "membership": "join" }, "event_id": "$1495529257541270urcen:matrix.org", "membership": "join", "origin_server_ts": 1495529257669, "sender": "@freenode_Toucan:matrix.org", "state_key": "@freenode_Toucan:matrix.org", "type": "m.room.member", "unsigned": { "age": 15138695009 } }, { "content": { "avatar_url": "mxc://matrix.org/GBzEZYjwfQMJVJvntzTcpfXz", "displayname": "knolle", "membership": "join" }, "event_id": "$14780449961194489EIJSx:matrix.org", "membership": "join", "origin_server_ts": 1478044996161, "sender": "@knolle:matrix.org", "state_key": "@knolle:matrix.org", "type": "m.room.member", "unsigned": { "age": 32622956517 } }, { "content": { "avatar_url": "mxc://matrix.org/IiKZYTscTkoVSGXEqUemhLnv", "displayname": null, "membership": "join" }, "event_id": "$1478882002354974LDmti:matrix.org", "membership": "join", "origin_server_ts": 1478882002819, "sender": "@bot:matrix.org", "state_key": "@bot:matrix.org", "type": "m.room.member", "unsigned": { "age": 31785949859, "replaces_state": "$1478880568349088QMBpQ:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/wuTUSwjaWUMNMEyBfGKYaSef", "displayname": "saqura", "membership": "join" }, "event_id": "$1474666323374410XBTcy:matrix.org", "membership": "join", "origin_server_ts": 1474666323690, "sender": "@saqura:matrix.org", "state_key": "@saqura:matrix.org", "type": "m.room.member", "unsigned": { "age": 36001628988, "replaces_state": "$1472387955313532ybEuu:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hpinaiKbrgvnDUrnvNtZvHeU", "displayname": "jmnx", "membership": "join" }, "event_id": "$1473666380466844ZUWmT:matrix.org", "membership": "join", "origin_server_ts": 1473666380358, "sender": "@jmnx:matrix.org", "state_key": "@jmnx:matrix.org", "type": "m.room.member", "unsigned": { "age": 37001572320 } }, { "content": { "membership": "leave" }, "event_id": "$1417535024163NofrC:matrix.org", "membership": "leave", "origin_server_ts": 1417535024439, "sender": "@irc_anthm:matrix.org", "state_key": "@irc_anthm:matrix.org", "type": "m.room.member", "unsigned": { "age": 93132928239 } }, { "content": { "avatar_url": "mxc://matrix.org/cQVTUrHUvVSVhMdkvXlKibyP", "displayname": "0x004a", "membership": "join" }, "event_id": "$145482035327310cOSNN:matrix.org", "origin_server_ts": 1454820353711, "sender": "@0x004a:matrix.org", "state_key": "@0x004a:matrix.org", "type": "m.room.member", "unsigned": { "age": 55847598967, "replaces_state": "$145481973927158mydlY:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$144103960123695rHnyL:matrix.org", "origin_server_ts": 1441039601094, "sender": "@sameh.hasan:matrix.org", "state_key": "@sameh.hasan:matrix.org", "type": "m.room.member", "unsigned": { "age": 69628351584, "replaces_state": "$1440945987197258kByRp:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Matthew2", "membership": "join" }, "event_id": "$14170018440okjmR:cirrus.arasphere.net", "membership": "join", "origin_server_ts": 1417001844437, "sender": "@matthew2:cirrus.arasphere.net", "state_key": "@matthew2:cirrus.arasphere.net", "type": "m.room.member", "unsigned": { "age": 93666108060 } }, { "content": { "avatar_url": "mxc://matrix.org/WyRXHMsbuAzAIIQLEEpbsfDV", "displayname": "[m] TravisR", "membership": "join" }, "event_id": "$14956451271704915Ecjap:matrix.org", "membership": "join", "origin_server_ts": 1495645127287, "sender": "@turt2live:matrix.org", "state_key": "@turt2live:matrix.org", "type": "m.room.member", "unsigned": { "age": 15022825391, "replaces_state": "$146502501177229pEjfk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1506325375576405OnagW:matrix.org", "membership": "leave", "origin_server_ts": 1506325375042, "sender": "@jan:matrix.org", "state_key": "@jan:matrix.org", "type": "m.room.member", "unsigned": { "age": 4342577636, "replaces_state": "$149985207326902ztzqG:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/OTwzRbBmrqwemBNaGtOTIwoN", "displayname": "MTRNord", "membership": "join" }, "event_id": "$15037709301254053bTwoB:matrix.org", "membership": "join", "origin_server_ts": 1503770930718, "sender": "@MTRNord:matrix.org", "state_key": "@MTRNord:matrix.org", "type": "m.room.member", "unsigned": { "age": 6897021960 } }, { "content": { "membership": "leave" }, "event_id": "$15099448203198835Ofgyf:matrix.org", "membership": "leave", "origin_server_ts": 1509944820624, "sender": "@freenode_fxrh:matrix.org", "state_key": "@freenode_fxrh:matrix.org", "type": "m.room.member", "unsigned": { "age": 723132054, "replaces_state": "$1502946975774544TsvOJ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1456731324190501yuGEO:matrix.org", "membership": "leave", "origin_server_ts": 1456731324322, "sender": "@themole:matrix.org", "state_key": "@themole:matrix.org", "type": "m.room.member", "unsigned": { "age": 53936628356, "replaces_state": "$1456731177190473cBcYi:matrix.org" } }, { "content": { "avatar_url": "mxc://eggy.cc/vySkCYKWuZHDgqybvdxxglBW", "displayname": "Matt (eggy)", "membership": "join" }, "event_id": "$1508196223379zorCX:eggy.cc", "membership": "join", "origin_server_ts": 1508196223954, "sender": "@eggy:eggy.cc", "state_key": "@eggy:eggy.cc", "type": "m.room.member", "unsigned": { "age": 2471728724, "replaces_state": "$1508196153354zDiKw:eggy.cc" } }, { "content": { "avatar_url": "mxc://matrix.org/iiXSowWgENNvlCjGdymjtjQJ", "displayname": "[RTA] Trung", "membership": "join" }, "event_id": "$15018513691947243TNDwP:matrix.org", "membership": "join", "origin_server_ts": 1501851369305, "sender": "@trung:matrix.org", "state_key": "@trung:matrix.org", "type": "m.room.member", "unsigned": { "age": 8816583373, "replaces_state": "$1480215342794959yjlgn:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14959715112554443CGscq:matrix.org", "membership": "leave", "origin_server_ts": 1495971511583, "sender": "@freenode_WubTheCaptain:matrix.org", "state_key": "@freenode_WubTheCaptain:matrix.org", "type": "m.room.member", "unsigned": { "age": 14696441095, "replaces_state": "$14954513721853089lJhJH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$148878867120mySml:synapse.uneyahourtiere.fr", "membership": "leave", "origin_server_ts": 1488788671624, "sender": "@bobby:synapse.uneyahourtiere.fr", "state_key": "@bobby:synapse.uneyahourtiere.fr", "type": "m.room.member", "unsigned": { "age": 21879281054, "prev_content": { "avatar_url": null, "displayname": "UneYahourtiere", "membership": "join" }, "prev_sender": "@bobby:synapse.uneyahourtiere.fr", "replaces_state": "$148849212188sAKmb:synapse.uneyahourtiere.fr" } }, { "content": { "membership": "leave" }, "event_id": "$14831250816786wtMoW:matrix.org", "membership": "leave", "origin_server_ts": 1483125081603, "sender": "@August39:matrix.org", "state_key": "@August39:matrix.org", "type": "m.room.member", "unsigned": { "age": 27542871075, "replaces_state": "$14831249936318dzZEz:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15051489712936iYZte:fucktheinternet.org", "origin_server_ts": 1505148982060, "sender": "@juju:fucktheinternet.org", "state_key": "@juju:fucktheinternet.org", "type": "m.room.member", "unsigned": { "age": 53 } }, { "content": { "membership": "leave" }, "event_id": "$15024946281025054nNJyZ:matrix.org", "membership": "leave", "origin_server_ts": 1502494628541, "sender": "@freenode_humerusj_:matrix.org", "state_key": "@freenode_humerusj_:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173324137, "replaces_state": "$15020464453865745mNZGB:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14871100942xCNhB:tille.ch", "membership": "leave", "origin_server_ts": 1487110094196, "sender": "@josue:tille.ch", "state_key": "@josue:tille.ch", "type": "m.room.member", "unsigned": { "age": 1308988183, "prev_content": { "avatar_url": null, "displayname": "Josué", "membership": "join" }, "prev_sender": "@josue:tille.ch", "replaces_state": "$14871084481mSrcV:tille.ch" } }, { "content": { "avatar_url": null, "displayname": "Tom M", "membership": "join" }, "event_id": "$1416420910579Luior:perlsite.co.uk", "membership": "join", "origin_server_ts": 1409924726336, "sender": "@tm604:perlsite.co.uk", "state_key": "@tm604:perlsite.co.uk", "stream_ordering": 3470, "type": "m.room.member", "unsigned": { "age": 94247042099 } }, { "content": { "avatar_url": "mxc://matrix.org/WehAJrWyduSaXKIvDjwoAOec#auto", "displayname": "Andrew J", "membership": "join" }, "event_id": "$145571031615531fQqvo:matrix.org", "membership": "join", "origin_server_ts": 1455710316678, "sender": "@AndrewJDR:matrix.org", "state_key": "@AndrewJDR:matrix.org", "type": "m.room.member", "unsigned": { "age": 54957636000 } }, { "content": { "membership": "leave" }, "event_id": "$14834728161039196HIRwL:matrix.org", "membership": "leave", "origin_server_ts": 1483472816346, "sender": "@nothoughts:matrix.org", "state_key": "@nothoughts:matrix.org", "type": "m.room.member", "unsigned": { "age": 27195136332, "replaces_state": "$1483433997791439dfPGw:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099945014224163fbNek:matrix.org", "membership": "leave", "origin_server_ts": 1509994501893, "sender": "@freenode_wNz:matrix.org", "state_key": "@freenode_wNz:matrix.org", "type": "m.room.member", "unsigned": { "age": 673450785, "replaces_state": "$15099498273288480HYZVQ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448193198817ZuHzG:matrix.org", "membership": "leave", "origin_server_ts": 1509944819742, "sender": "@freenode_dbkr`:matrix.org", "state_key": "@freenode_dbkr`:matrix.org", "type": "m.room.member", "unsigned": { "age": 723132936, "replaces_state": "$15083159113188307YwxAi:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/IpNewFuiAaJDLsYvKgYRKbSx", "displayname": "Knippy", "membership": "join" }, "event_id": "$1468504483525337naSZG:matrix.org", "membership": "join", "origin_server_ts": 1468504483555, "sender": "@knip:matrix.org", "state_key": "@knip:matrix.org", "type": "m.room.member", "unsigned": { "age": 42163469123, "replaces_state": "$1461585589293774Cglel:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "jental", "membership": "join" }, "event_id": "$14987264818hXehU:jental.name", "origin_server_ts": 1498726481248, "sender": "@jental:jental.name", "state_key": "@jental:jental.name", "type": "m.room.member", "unsigned": { "age": 393, "replaces_state": "$14849242822SPfjT:jental.name" } }, { "content": { "avatar_url": null, "displayname": "auger", "membership": "join" }, "event_id": "$14898466647rKqdD:sindustries.net", "membership": "join", "origin_server_ts": 1489846664027, "sender": "@auger:sindustries.net", "state_key": "@auger:sindustries.net", "type": "m.room.member", "unsigned": { "age": 20821288651, "replaces_state": "$14869989079cBLrH:sindustries.net" } }, { "content": { "membership": "leave" }, "event_id": "$14939233680GxYaZ:dkess.me", "membership": "leave", "origin_server_ts": 1493923368242, "sender": "@daniel:dkess.me", "state_key": "@daniel:dkess.me", "type": "m.room.member", "unsigned": { "age": 16744584436, "prev_content": { "avatar_url": null, "displayname": "Daniel Kessler", "membership": "join" }, "prev_sender": "@daniel:dkess.me", "replaces_state": "$14939226101WVjEG:dkess.me" } }, { "content": { "avatar_url": "https://matrix.org/_matrix/content/QHJ6cjptYXRyaXgub3JnkTDXvuDiArLjdldplkKPpItV.aW1hZ2UvcG5n.png", "displayname": "rzr", "membership": "join" }, "event_id": "$1445854279137057Lzsaz:matrix.org", "membership": "join", "origin_server_ts": 1445854279764, "sender": "@rzr:matrix.org", "state_key": "@rzr:matrix.org", "type": "m.room.member", "unsigned": { "age": 64813672914, "replaces_state": "$144250308961817CocDp:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/lQsZPAOiHKWRJBMUFczaiYzs", "displayname": "jerrykan", "membership": "join" }, "event_id": "$14912673872585086HcKAX:matrix.org", "membership": "join", "origin_server_ts": 1491267387048, "sender": "@jerrykan:matrix.org", "state_key": "@jerrykan:matrix.org", "type": "m.room.member", "unsigned": { "age": 19400565630 } }, { "content": { "membership": "leave" }, "event_id": "$148606730712099oGczR:kolm.io", "membership": "leave", "origin_server_ts": 1486067307697, "sender": "@yaniel:kolm.io", "state_key": "@yaniel:kolm.io", "type": "m.room.member", "unsigned": { "age": 24600644981, "replaces_state": "$1481481779286pTkvG:kolm.io" } }, { "content": { "membership": "leave" }, "event_id": "$145708933641245wcVZs:matrix.org", "membership": "leave", "origin_server_ts": 1457089336919, "sender": "@pawel:matrix.org", "state_key": "@pawel:matrix.org", "type": "m.room.member", "unsigned": { "age": 53578615759, "replaces_state": "$1456727233188851eZQXn:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15097117620KsGXi:acme.bo.it", "membership": "leave", "origin_server_ts": 1509711762828, "sender": "@m:acme.bo.it", "state_key": "@m:acme.bo.it", "type": "m.room.member", "unsigned": { "age": 956189850, "prev_content": { "avatar_url": null, "displayname": "m", "membership": "join" }, "prev_sender": "@m:acme.bo.it", "replaces_state": "$15097112341voDiy:acme.bo.it" } }, { "content": { "avatar_url": "mxc://matrix.org/NEobdtsyIvQoLaeaFGOWgclE#auto", "displayname": "mozkit", "membership": "join" }, "event_id": "$14314881571358RDfJb:matrix.org", "membership": "join", "origin_server_ts": 1431488157547, "sender": "@mozkit:matrix.org", "state_key": "@mozkit:matrix.org", "type": "m.room.member", "unsigned": { "age": 79179795131 } }, { "content": { "avatar_url": "mxc://sorunome.de/ixXwZGyYFnUiNoRDsSOAQqRv", "displayname": "Digital", "membership": "join" }, "event_id": "$1508273229157269sgkFo:sorunome.de", "membership": "join", "origin_server_ts": 1508273229065, "sender": "@digital:sorunome.de", "state_key": "@digital:sorunome.de", "type": "m.room.member", "unsigned": { "age": 2394723613, "prev_content": { "avatar_url": "mxc://sorunome.de/ixXwZGyYFnUiNoRDsSOAQqRv", "displayname": null, "membership": "join" }, "prev_sender": "@digital:sorunome.de", "replaces_state": "$1508273062157247mRKNw:sorunome.de" } }, { "content": { "membership": "leave" }, "event_id": "$144644791734qBBOb:matrix.doravel.me", "origin_server_ts": 1446447917732, "sender": "@victor:matrix.doravel.me", "state_key": "@victor:matrix.doravel.me", "type": "m.room.member", "unsigned": { "age": 64220034946, "replaces_state": "$144644742833RVQXG:matrix.doravel.me" } }, { "content": { "avatar_url": "mxc://matrix.org/COzYmEQVaZjsvcWpoSDUdSEE", "displayname": "rocketpig", "membership": "join" }, "event_id": "$15075675251136705NWJGF:matrix.org", "membership": "join", "origin_server_ts": 1507567525216, "sender": "@rocketpig:matrix.org", "state_key": "@rocketpig:matrix.org", "type": "m.room.member", "unsigned": { "age": 3100427462 } }, { "content": { "avatar_url": "mxc://matrix.pin13.net/LoQTdGbiTLWnBZdNhRTyAKxt", "displayname": null, "membership": "join" }, "event_id": "$144069600482NSXIv:matrix.pin13.net", "membership": "join", "origin_server_ts": 1440696004205, "sender": "@donpdonp:matrix.pin13.net", "state_key": "@donpdonp:matrix.pin13.net", "type": "m.room.member", "unsigned": { "age": 69971948473 } }, { "content": { "membership": "leave" }, "event_id": "$15062838414xsiUu:matrix.bitchslapper.org", "membership": "leave", "origin_server_ts": 1506283841678, "sender": "@Whyned:matrix.bitchslapper.org", "state_key": "@Whyned:matrix.bitchslapper.org", "type": "m.room.member", "unsigned": { "age": 4384111000, "prev_content": { "avatar_url": null, "displayname": "Whyned", "membership": "join" }, "prev_sender": "@Whyned:matrix.bitchslapper.org", "replaces_state": "$1503591887539eksIl:matrix.bitchslapper.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$145400611332818TCaHs:matrix.org", "origin_server_ts": 1454006113933, "sender": "@sdfdsfds:matrix.org", "state_key": "@sdfdsfds:matrix.org", "type": "m.room.member", "unsigned": { "age": 56661838745 } }, { "content": { "membership": "leave" }, "event_id": "$15024946291025092CQOAx:matrix.org", "membership": "leave", "origin_server_ts": 1502494629816, "sender": "@freenode_spossiba_:matrix.org", "state_key": "@freenode_spossiba_:matrix.org", "type": "m.room.member", "unsigned": { "age": 8173322862, "replaces_state": "$15020467723871389TseIP:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ajay_gupta", "membership": "join" }, "event_id": "$15006240704612488eyGff:matrix.org", "membership": "join", "origin_server_ts": 1500624070346, "sender": "@ajay_gupta:matrix.org", "state_key": "@ajay_gupta:matrix.org", "type": "m.room.member", "unsigned": { "age": 10043882332 } }, { "content": { "avatar_url": "mxc://matrixsoup.pw/QgqcXRCFnCVNUFNPaOMDodOJ", "displayname": "Soup", "membership": "join" }, "event_id": "$14776712751189xjcUA:matrixsoup.pw", "origin_server_ts": 1477671275152, "sender": "@soup:matrixsoup.pw", "state_key": "@soup:matrixsoup.pw", "type": "m.room.member", "unsigned": { "age": 11 } }, { "content": { "membership": "leave" }, "event_id": "$1501151338744yfgdI:hugs.at", "membership": "leave", "origin_server_ts": 1501151338557, "sender": "@karl:hugs.at", "state_key": "@karl:hugs.at", "type": "m.room.member", "unsigned": { "age": 9516614121, "prev_content": { "avatar_url": "mxc://hugs.at/awMNsRBygoItdagOAoLouyaR", "displayname": "Karl", "membership": "join" }, "prev_sender": "@karl:hugs.at", "replaces_state": "$1501129220736OUkPI:hugs.at" } }, { "content": { "avatar_url": null, "displayname": "jaydrake", "kind": "guest", "membership": "join" }, "event_id": "$1465921868664159IksIK:matrix.org", "membership": "join", "origin_server_ts": 1465921868020, "sender": "@18012:matrix.org", "state_key": "@18012:matrix.org", "type": "m.room.member", "unsigned": { "age": 44746084658 } }, { "content": { "membership": "leave" }, "event_id": "$1445867738145654PtLUm:matrix.org", "origin_server_ts": 1445867738445, "sender": "@jovemteste:matrix.org", "state_key": "@jovemteste:matrix.org", "type": "m.room.member", "unsigned": { "age": 64800214233, "replaces_state": "$1445828185122415zlxKD:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$147259553478319ybaSZ:matrix.org", "membership": "leave", "origin_server_ts": 1472595534711, "sender": "@efaakgun:matrix.org", "state_key": "@efaakgun:matrix.org", "type": "m.room.member", "unsigned": { "age": 38072417967, "replaces_state": "$147259546578177UuJVR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150399881227028SVoBp:matrix.org", "membership": "leave", "origin_server_ts": 1503998812857, "sender": "@freenode_totte:matrix.org", "state_key": "@freenode_totte:matrix.org", "type": "m.room.member", "unsigned": { "age": 6669139821, "replaces_state": "$14996702592132442woVIE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14239410271239FpwCY:matrix.org", "origin_server_ts": 1423941027035, "sender": "@LadyT:matrix.org", "state_key": "@LadyT:matrix.org", "type": "m.room.member", "unsigned": { "age": 86726925643, "replaces_state": "$14194248451407xZVvE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14804170241552931PvpKW:matrix.org", "membership": "leave", "origin_server_ts": 1480417024585, "sender": "@pedroc:matrix.org", "state_key": "@pedroc:matrix.org", "type": "m.room.member", "unsigned": { "age": 30250928093, "replaces_state": "$1464253654223936GBDQE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150067792941Iltva:tchncs.de", "membership": "leave", "origin_server_ts": 1500677929548, "sender": "@arekinath:tchncs.de", "state_key": "@arekinath:tchncs.de", "type": "m.room.member", "unsigned": { "age": 9990023130, "prev_content": { "avatar_url": null, "displayname": "arekinath", "membership": "join" }, "prev_sender": "@arekinath:tchncs.de", "replaces_state": "$149145087525755GcSfK:tchncs.de" } }, { "content": { "membership": "leave" }, "event_id": "$14956631522024184gcDdA:matrix.org", "membership": "leave", "origin_server_ts": 1495663152069, "sender": "@freenode_Uniaika:matrix.org", "state_key": "@freenode_Uniaika:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004800609, "replaces_state": "$1456930784317204MBkCe:matrix.org" } }, { "content": { "membership": "join" }, "event_id": "$1447887539102567HFgHA:matrix.org", "origin_server_ts": 1447887539740, "sender": "@john:matrix.freelock.com", "state_key": "@john:matrix.freelock.com", "type": "m.room.member", "unsigned": {} }, { "content": { "avatar_url": null, "displayname": "Romain Le Carrer", "membership": "join" }, "event_id": "$1491844446154386TqpCg:matrix.org", "membership": "join", "origin_server_ts": 1491844446432, "sender": "@romain.lecarrer:matrix.org", "state_key": "@romain.lecarrer:matrix.org", "type": "m.room.member", "unsigned": { "age": 18823506246 } }, { "content": { "avatar_url": null, "displayname": "Woutifier", "membership": "join" }, "event_id": "$14883792692Xsyea:matrix.wbdv.nl", "origin_server_ts": 1488379269516, "sender": "@woutifier:matrix.wbdv.nl", "state_key": "@woutifier:matrix.wbdv.nl", "type": "m.room.member", "unsigned": { "age": 46 } }, { "content": { "membership": "leave" }, "event_id": "$15004932713034426voTiS:matrix.org", "membership": "leave", "origin_server_ts": 1500493271349, "sender": "@freenode_tinyurl_comSLASH:matrix.org", "state_key": "@freenode_tinyurl_comSLASH:matrix.org", "type": "m.room.member", "unsigned": { "age": 10174681329, "replaces_state": "$15004931413032380qycTE:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "rttest123456", "membership": "join" }, "event_id": "$14886534841104432hPloU:matrix.org", "membership": "join", "origin_server_ts": 1488653484078, "sender": "@rttest123456:matrix.org", "state_key": "@rttest123456:matrix.org", "type": "m.room.member", "unsigned": { "age": 22014468600 } }, { "content": { "avatar_url": "mxc://dmp-develop.com/SyKTPlfZkfYBEyNMzhZaTVBI", "displayname": "JigmeDatseHS", "membership": "join" }, "event_id": "$147417611911WIpqZ:dmp-develop.com", "membership": "join", "origin_server_ts": 1474176119249, "sender": "@JigmeDatse:dmp-develop.com", "state_key": "@JigmeDatse:dmp-develop.com", "type": "m.room.member", "unsigned": { "age": 36491833429, "prev_content": { "avatar_url": "mxc://dmp-develop.com/ToRHWizeEUCgawSFVXUWOFBF", "displayname": "JigmeDatseHS", "membership": "join" }, "prev_sender": "@JigmeDatse:dmp-develop.com", "replaces_state": "$14703787691bNlzW:dmp-develop.com" } }, { "content": { "avatar_url": "mxc://matrix.org/FDFLACCMUFROHrupquzAFsoc#auto", "displayname": null, "membership": "join" }, "event_id": "$144113406111786UfAdA:matrix.org", "origin_server_ts": 1441134061543, "sender": "@miguelsantos:matrix.org", "state_key": "@miguelsantos:matrix.org", "type": "m.room.member", "unsigned": { "age": 69533891135 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14757386582625849eFSji:matrix.org", "membership": "join", "origin_server_ts": 1475738658319, "sender": "@sudk1896:matrix.org", "state_key": "@sudk1896:matrix.org", "type": "m.room.member", "unsigned": { "age": 34929294359 } }, { "content": { "avatar_url": null, "displayname": "Guest 175654", "kind": "guest", "membership": "join" }, "event_id": "$14892826601128693rYwEY:matrix.org", "membership": "join", "origin_server_ts": 1489282660987, "sender": "@175654:matrix.org", "state_key": "@175654:matrix.org", "type": "m.room.member", "unsigned": { "age": 21385291691 } }, { "content": { "avatar_url": null, "displayname": "ryk0z", "membership": "join" }, "event_id": "$15015807155377790fmwgP:matrix.org", "membership": "join", "origin_server_ts": 1501580715795, "sender": "@ryk0z:matrix.org", "state_key": "@ryk0z:matrix.org", "type": "m.room.member", "unsigned": { "age": 9087236883 } }, { "content": { "avatar_url": null, "displayname": "pp", "membership": "join" }, "event_id": "$145413354449426NANiN:matrix.org", "membership": "join", "origin_server_ts": 1454133544807, "sender": "@ppillo:matrix.org", "state_key": "@ppillo:matrix.org", "type": "m.room.member", "unsigned": { "age": 56534407871 } }, { "content": { "avatar_url": "mxc://zenfolie.org/mdQfZuVsmvTMxexlAgGGKKMM", "displayname": "Alain 🚲", "membership": "join" }, "event_id": "$150930312469aoxiC:zenfolie.org", "membership": "join", "origin_server_ts": 1509303124880, "sender": "@alain:zenfolie.org", "state_key": "@alain:zenfolie.org", "type": "m.room.member", "unsigned": { "age": 1364827798, "prev_content": { "avatar_url": "mxc://zenfolie.org/NNjnwgXTFlfAeTwccSohHxLg", "displayname": "Alain 🚲", "membership": "join" }, "prev_sender": "@alain:zenfolie.org", "replaces_state": "$150930172450FIwVs:zenfolie.org" } }, { "content": { "membership": "leave" }, "event_id": "$148701199215lmZoM:matrix.werise.de", "membership": "leave", "origin_server_ts": 1487011992919, "sender": "@erdii:matrix.werise.de", "state_key": "@erdii:matrix.werise.de", "type": "m.room.member", "unsigned": { "age": 1407089460, "prev_content": { "avatar_url": "mxc://matrix.werise.de/elzkBluLlMUJyTvzRCLlbvMC", "displayname": "erdii", "membership": "join" }, "prev_sender": "@erdii:matrix.werise.de", "replaces_state": "$14870111966AqDpR:matrix.werise.de" } }, { "content": { "avatar_url": "mxc://matrix.org/yxpGDgjaNOCXHHBkVOlhhZOm", "displayname": "N E Bot", "membership": "join" }, "event_id": "$1420631992187xqQNO:matrix.org", "origin_server_ts": 1420631992609, "sender": "@neb:matrix.org", "state_key": "@neb:matrix.org", "type": "m.room.member", "unsigned": { "age": 90035960069, "replaces_state": "$1416420913137QDxRk:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/jThqBtVpWywDgMkJXyqPdsaJ", "displayname": "leonerd", "membership": "join" }, "event_id": "$1474995521244013eWTLh:matrix.org", "membership": "join", "origin_server_ts": 1474995521954, "sender": "@_slack_matrixdotorg_U27S9E891:matrix.org", "state_key": "@_slack_matrixdotorg_U27S9E891:matrix.org", "type": "m.room.member", "unsigned": { "age": 35672430724 } }, { "content": { "avatar_url": "mxc://matrix.org/UydveHmMmodaBEMbGhEtFCNr", "displayname": "kitsune", "membership": "join" }, "event_id": "$14799869331039akBNd:matrix.org", "membership": "join", "origin_server_ts": 1479986933261, "sender": "@kitsune:matrix.org", "state_key": "@kitsune:matrix.org", "type": "m.room.member", "unsigned": { "age": 30681019417, "replaces_state": "$14761046211142307qzScU:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "RainingMonkey", "membership": "join" }, "event_id": "$14876435351752502xGnrs:matrix.org", "membership": "join", "origin_server_ts": 1487643535291, "sender": "@therainingmonkey:matrix.org", "state_key": "@therainingmonkey:matrix.org", "type": "m.room.member", "unsigned": { "age": 23024417387 } }, { "content": { "avatar_url": null, "displayname": "av8ta", "membership": "join" }, "event_id": "$1496828582622319WzFXO:matrix.org", "membership": "join", "origin_server_ts": 1496828582632, "sender": "@av8ta:matrix.org", "state_key": "@av8ta:matrix.org", "type": "m.room.member", "unsigned": { "age": 13839370046 } }, { "content": { "avatar_url": null, "displayname": "Mr.Pickle", "membership": "join" }, "event_id": "$14974449581012252NwtEe:matrix.org", "membership": "join", "origin_server_ts": 1497444958761, "sender": "@Mr.Pickle:matrix.org", "state_key": "@Mr.Pickle:matrix.org", "type": "m.room.member", "unsigned": { "age": 13222993917 } }, { "content": { "avatar_url": "mxc://matrix.org/oUxxDyzQOHdVDMxgwFzyCWEe", "displayname": "Matthew", "membership": "join" }, "event_id": "$1506686342493368eGdVm:matrix.org", "membership": "join", "origin_server_ts": 1506686342057, "sender": "@matthew:matrix.org", "state_key": "@matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 3981610621, "replaces_state": "$15046824202011003zzGGJ:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "brdy", "membership": "join" }, "event_id": "$1492074379715178OtfFw:matrix.org", "membership": "join", "origin_server_ts": 1492074379373, "sender": "@brdy:matrix.org", "state_key": "@brdy:matrix.org", "type": "m.room.member", "unsigned": { "age": 18593573305 } }, { "content": { "membership": "leave" }, "event_id": "$1456870789285390wbFIt:matrix.org", "membership": "leave", "origin_server_ts": 1456870789759, "sender": "@bblanco:matrix.org", "state_key": "@bblanco:matrix.org", "type": "m.room.member", "unsigned": { "age": 53797162919, "replaces_state": "$1456869531284035EPNFG:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14938654380oZtJw:laelath.us", "membership": "leave", "origin_server_ts": 1493865438495, "sender": "@justin:laelath.us", "state_key": "@justin:laelath.us", "type": "m.room.member", "unsigned": { "age": 16802514183, "prev_content": { "avatar_url": null, "displayname": null, "membership": "join" }, "prev_sender": "@justin:laelath.us", "replaces_state": "$149384620345CnNCC:laelath.us" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1499469755477142vNTIu:matrix.org", "membership": "join", "origin_server_ts": 1499469755982, "sender": "@faguoma:matrix.org", "state_key": "@faguoma:matrix.org", "type": "m.room.member", "unsigned": { "age": 11198196696 } }, { "content": { "avatar_url": "mxc://matrix.org/gvNEdwJOuaNVRRJyIQVaMgNt", "displayname": "Jack Mawer", "membership": "join" }, "event_id": "$1474150216300613nnBrf:matrix.org", "membership": "join", "origin_server_ts": 1474150216069, "sender": "@its_notjack:matrix.org", "state_key": "@its_notjack:matrix.org", "type": "m.room.member", "unsigned": { "age": 36517736609, "replaces_state": "$1474150193300555gyZnl:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631652024475iKOZu:matrix.org", "membership": "leave", "origin_server_ts": 1495663165775, "sender": "@freenode_ander:matrix.org", "state_key": "@freenode_ander:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004786903, "replaces_state": "$1482331222494173ocVZR:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15016147496125688zOflK:matrix.org", "membership": "leave", "origin_server_ts": 1501614749938, "sender": "@freenode_Ralith_:matrix.org", "state_key": "@freenode_Ralith_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9053202740, "replaces_state": "$1498071156280935qAAkD:matrix.org" } }, { "content": { "avatar_url": "mxc://nycresistor.com/oJmgulZArZkikDLmyZGMSHdV", "displayname": "Georgyo", "membership": "join" }, "event_id": "$1464815676115JTHvb:nycresistor.com", "membership": "join", "origin_server_ts": 1464815676418, "sender": "@georgyo:nycresistor.com", "state_key": "@georgyo:nycresistor.com", "type": "m.room.member", "unsigned": { "age": 45852276260, "replaces_state": "$1464815463103NUynK:nycresistor.com" } }, { "content": { "avatar_url": null, "displayname": "ultrasparc1", "membership": "join" }, "event_id": "$15094938352003626rPyPp:matrix.org", "membership": "join", "origin_server_ts": 1509493835045, "sender": "@ultrasparc1:matrix.org", "state_key": "@ultrasparc1:matrix.org", "type": "m.room.member", "unsigned": { "age": 1174117633 } }, { "content": { "membership": "leave" }, "event_id": "$148483061829pQBKF:geofrogger.net", "membership": "leave", "origin_server_ts": 1484830618124, "sender": "@volker:geofrogger.net", "state_key": "@volker:geofrogger.net", "type": "m.room.member", "unsigned": { "age": 25837334554, "prev_content": { "avatar_url": "mxc://geofrogger.net/VOcIqDYsKojyiMZGRVdcyNdC", "displayname": "frosch", "membership": "join" }, "prev_sender": "@volker:geofrogger.net", "replaces_state": "$148483033528PwztO:geofrogger.net" } }, { "content": { "membership": "leave" }, "event_id": "$15015227414587158ThQkb:matrix.org", "membership": "leave", "origin_server_ts": 1501522741074, "sender": "@dare-to-recurse:matrix.org", "state_key": "@dare-to-recurse:matrix.org", "type": "m.room.member", "unsigned": { "age": 9145211604, "replaces_state": "$15001911391448854nrVUm:matrix.org" } }, { "content": { "avatar_url": "mxc://home.rdash.in/yIvaFLacwtvGPljJJgteXLvu", "displayname": "Alpha", "membership": "join" }, "event_id": "$151033530513MWvQj:home.rdash.in", "membership": "join", "origin_server_ts": 1510335305572, "sender": "@alpha:home.rdash.in", "state_key": "@alpha:home.rdash.in", "type": "m.room.member", "unsigned": { "age": 332647106, "prev_content": { "avatar_url": null, "displayname": "Alpha", "membership": "join" }, "prev_sender": "@alpha:home.rdash.in", "replaces_state": "$151033515411maaxC:home.rdash.in" } }, { "content": { "membership": "leave" }, "event_id": "$14984829612262776ZWuSX:matrix.org", "membership": "leave", "origin_server_ts": 1498482961404, "sender": "@babolivier:matrix.org", "state_key": "@babolivier:matrix.org", "type": "m.room.member", "unsigned": { "age": 12184991274, "replaces_state": "$1497875479808011BdaQk:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$150487454227DujkD:matrix.kozlov.msk.ru", "membership": "leave", "origin_server_ts": 1504874542334, "sender": "@oleg:matrix.kozlov.msk.ru", "state_key": "@oleg:matrix.kozlov.msk.ru", "type": "m.room.member", "unsigned": { "age": 5793410344, "replaces_state": "$150487384623dzDfG:matrix.kozlov.msk.ru" } }, { "content": { "avatar_url": null, "displayname": "Druecker", "membership": "join" }, "event_id": "$14972686303028154MvjBU:matrix.org", "membership": "join", "origin_server_ts": 1497268630230, "sender": "@Druecker:matrix.org", "state_key": "@Druecker:matrix.org", "type": "m.room.member", "unsigned": { "age": 13399322448 } }, { "content": { "avatar_url": null, "displayname": "guest-vith", "kind": "guest", "membership": "join" }, "event_id": "$14829735643494279XTtkN:matrix.org", "membership": "join", "origin_server_ts": 1482973564748, "sender": "@102878:matrix.org", "state_key": "@102878:matrix.org", "type": "m.room.member", "unsigned": { "age": 27694387930 } }, { "content": { "avatar_url": "mxc://matrix.org/okMgrqlJhapHbFkRhViVYrdH", "displayname": "ldionmarcil", "membership": "join" }, "event_id": "$1492477702168537hScoY:matrix.org", "membership": "join", "origin_server_ts": 1492477702811, "sender": "@ldionmarcil:matrix.org", "state_key": "@ldionmarcil:matrix.org", "type": "m.room.member", "unsigned": { "age": 18190249867, "replaces_state": "$1492475937151389MTHyv:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14956631692024553ZwtZn:matrix.org", "membership": "leave", "origin_server_ts": 1495663169274, "sender": "@freenode_kegan_:matrix.org", "state_key": "@freenode_kegan_:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004783404, "replaces_state": "$143548327768191HurZl:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14232341640Yyuxz:arasphere.net", "membership": "join", "origin_server_ts": 1423234164910, "sender": "@erikj:arasphere.net", "state_key": "@erikj:arasphere.net", "type": "m.room.member", "unsigned": { "age": 87433787768 } }, { "content": { "avatar_url": null, "displayname": "siyb_ (IRC)", "membership": "join" }, "event_id": "$15035827022837989USIpL:matrix.org", "membership": "join", "origin_server_ts": 1503582702565, "sender": "@freenode_siyb_:matrix.org", "state_key": "@freenode_siyb_:matrix.org", "type": "m.room.member", "unsigned": { "age": 7085250113, "replaces_state": "$15035821472830137IWbkH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "DannyWa", "kind": "guest", "membership": "join" }, "event_id": "$1493158530593963cOUOM:matrix.org", "membership": "join", "origin_server_ts": 1493158530987, "sender": "@217222:matrix.org", "state_key": "@217222:matrix.org", "type": "m.room.member", "unsigned": { "age": 17509421691 } }, { "content": { "avatar_url": "mxc://binets.fr/rDYQTPucrnLkfaBKbttUptwd", "displayname": "Sobex", "membership": "join" }, "event_id": "$1483469374506hSGEv:binets.fr", "membership": "join", "origin_server_ts": 1483469374965, "sender": "@guillaume.didier:binets.fr", "state_key": "@guillaume.didier:binets.fr", "type": "m.room.member", "unsigned": { "age": 27198577713 } }, { "content": { "avatar_url": null, "displayname": "Guest 41809", "kind": "guest", "membership": "join" }, "event_id": "$1474296862610605nobaI:matrix.org", "membership": "join", "origin_server_ts": 1474296862731, "sender": "@41809:matrix.org", "state_key": "@41809:matrix.org", "type": "m.room.member", "unsigned": { "age": 36371089947 } }, { "content": { "avatar_url": "mxc://matrix.org/ddAylkwSdoeWuDiofgoEzijZ#auto", "displayname": "yunsoul", "membership": "join" }, "event_id": "$143623561223817eirdq:matrix.org", "membership": "join", "origin_server_ts": 1436235612186, "sender": "@yunsoul:matrix.org", "state_key": "@yunsoul:matrix.org", "type": "m.room.member", "unsigned": { "age": 74432340492 } }, { "content": { "avatar_url": null, "displayname": "realitygaps (IRC)", "membership": "join" }, "event_id": "$1507308909123260KurBq:matrix.org", "membership": "join", "origin_server_ts": 1507308909620, "sender": "@freenode_realitygaps:matrix.org", "state_key": "@freenode_realitygaps:matrix.org", "type": "m.room.member", "unsigned": { "age": 3359043058, "replaces_state": "$15072964421773158AIkYe:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "ylecollen Test 2", "membership": "join" }, "event_id": "$14194306481570XEoSp:matrix.org", "origin_server_ts": 1419430648728, "sender": "@ylecollen2:matrix.org", "state_key": "@ylecollen2:matrix.org", "type": "m.room.member", "unsigned": { "age": 91237303950, "replaces_state": "$14194302831562jvory:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "silvia_s", "membership": "join" }, "event_id": "$1469476469186124SPlne:matrix.org", "membership": "join", "origin_server_ts": 1469476469468, "sender": "@silvia_schia:matrix.org", "state_key": "@silvia_schia:matrix.org", "type": "m.room.member", "unsigned": { "age": 41191483210, "replaces_state": "$1469476399185943Bmyly:matrix.org" } }, { "content": { "avatar_url": "mxc://n3t.work/ZFoFGwTCqsFnSSqEanxWMUWW", "displayname": "vith", "membership": "join" }, "event_id": "$146898910028fBgHQ:n3t.work", "origin_server_ts": 1468989100013, "sender": "@vith:n3t.work", "state_key": "@vith:n3t.work", "type": "m.room.member", "unsigned": { "age": 12 } }, { "content": { "avatar_url": "mxc://matrix.org/ocBPBfSKIJlgSMywcFXdWihq#auto", "displayname": "krab", "membership": "join" }, "event_id": "$1430340261103rBhwE:matrix.org", "membership": "join", "origin_server_ts": 1430340261691, "sender": "@krab:matrix.org", "state_key": "@krab:matrix.org", "type": "m.room.member", "unsigned": { "age": 80327690987 } }, { "content": { "avatar_url": null, "displayname": "chensixian", "membership": "join" }, "event_id": "$14948087751767756mQAGI:matrix.org", "membership": "join", "origin_server_ts": 1494808775748, "sender": "@chensixian:matrix.org", "state_key": "@chensixian:matrix.org", "type": "m.room.member", "unsigned": { "age": 15859176930 } }, { "content": { "membership": "leave" }, "event_id": "$149633158318yTOtF:birdee.at", "membership": "leave", "origin_server_ts": 1496331583376, "sender": "@helmut:birdee.at", "state_key": "@helmut:birdee.at", "type": "m.room.member", "unsigned": { "age": 14336369302, "prev_content": { "avatar_url": null, "displayname": "helmut", "membership": "join" }, "prev_sender": "@helmut:birdee.at", "replaces_state": "$149633153417imocg:birdee.at" } }, { "content": { "membership": "leave" }, "event_id": "$1416421050022ayPzD:matrix.org", "membership": "leave", "origin_server_ts": 1415803457320, "sender": "@irc_markjh:matrix.org", "state_key": "@irc_markjh:matrix.org", "stream_ordering": 27296, "type": "m.room.member", "unsigned": { "age": 94246902656 } }, { "content": { "membership": "leave" }, "event_id": "$14927581441tqdYi:linagkar.me", "membership": "leave", "origin_server_ts": 1492758144158, "sender": "@LinAGKar:linagkar.me", "state_key": "@LinAGKar:linagkar.me", "type": "m.room.member", "unsigned": { "age": 17909808520, "prev_content": { "avatar_url": "mxc://linagkar.me/sVyfuQEbiBMVepsSnPldiQeL", "displayname": "LinAGKar", "membership": "join" }, "prev_sender": "@LinAGKar:linagkar.me", "replaces_state": "$14927016481DPGFS:linagkar.me" } }, { "content": { "membership": "leave" }, "event_id": "$14951971166611roeAO:firc.de", "membership": "leave", "origin_server_ts": 1495197116950, "sender": "@fireglow:firc.de", "state_key": "@fireglow:firc.de", "type": "m.room.member", "unsigned": { "age": 15470835728, "prev_content": { "avatar_url": "mxc://firc.de/kWDgEREtSLxGLomAHlKyqpEq", "displayname": "fireglow", "membership": "join" }, "prev_sender": "@fireglow:firc.de", "replaces_state": "$1494336671983esRUy:firc.de" } }, { "content": { "membership": "leave" }, "event_id": "$14956631792024758GGYVl:matrix.org", "membership": "leave", "origin_server_ts": 1495663179396, "sender": "@freenode_Anon4311:matrix.org", "state_key": "@freenode_Anon4311:matrix.org", "type": "m.room.member", "unsigned": { "age": 15004773282, "replaces_state": "$1452640325422118VampW:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15099448203198832wToIs:matrix.org", "membership": "leave", "origin_server_ts": 1509944820439, "sender": "@freenode_WubTheCaptain_:matrix.org", "state_key": "@freenode_WubTheCaptain_:matrix.org", "type": "m.room.member", "unsigned": { "age": 723132239, "replaces_state": "$15090542743218684TLUYC:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$14296390153703QbPHF:matrix.org", "origin_server_ts": 1429639015523, "sender": "@vfpuglia:matrix.org", "state_key": "@vfpuglia:matrix.org", "type": "m.room.member", "unsigned": { "age": 81028937155, "replaces_state": "$14296387653702KHmdA:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15052462873648860iZCiM:matrix.org", "membership": "leave", "origin_server_ts": 1505246287645, "sender": "@freenode_anon9002:matrix.org", "state_key": "@freenode_anon9002:matrix.org", "type": "m.room.member", "unsigned": { "age": 5421665033, "replaces_state": "$15052447853623070CQxqs:matrix.org" } }, { "content": { "avatar_url": "mxc://cyberfish.org/caDMnMTsIJTNHFsRqskEbOQO", "displayname": "Mat", "membership": "join" }, "event_id": "$142975161422ZVdqi:cyberfish.org", "origin_server_ts": 1429751614447, "sender": "@mat:cyberfish.org", "state_key": "@mat:cyberfish.org", "type": "m.room.member", "unsigned": { "age": 21, "replaces_state": "$142975155019PzKjz:cyberfish.org" } }, { "content": { "membership": "leave" }, "event_id": "$145438639945338CEjtl:matrix.org", "origin_server_ts": 1454386399347, "sender": "@Jedd:matrix.org", "state_key": "@Jedd:matrix.org", "type": "m.room.member", "unsigned": { "age": 56281553331, "replaces_state": "$145438639545333iFwat:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1490206012915214xyphG:matrix.org", "membership": "leave", "origin_server_ts": 1490206012287, "sender": "@ThatWikiDude:matrix.org", "state_key": "@ThatWikiDude:matrix.org", "type": "m.room.member", "unsigned": { "age": 20461940391, "replaces_state": "$1490198211825919mUYDi:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/hadyrfIoqEsFVnjWNOrRvBoz", "displayname": "Shufeng Hui", "membership": "join" }, "event_id": "$1445243869212ryUbD:matrix.org", "origin_server_ts": 1445243869719, "sender": "@shufeng:matrix.org", "state_key": "@shufeng:matrix.org", "type": "m.room.member", "unsigned": { "age": 65424082959, "replaces_state": "$1445243787137KoGwH:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$14996471681947369MmgnR:matrix.org", "membership": "join", "origin_server_ts": 1499647168203, "sender": "@tybee:matrix.org", "state_key": "@tybee:matrix.org", "type": "m.room.member", "unsigned": { "age": 11020784475 } }, { "content": { "avatar_url": "mxc://matrix.org/LAzPbZpyPXWnSpGBPuQMeBHC", "displayname": "SkaveRat", "membership": "join" }, "event_id": "$143612424593057xJBMr:matrix.org", "origin_server_ts": 1436124245307, "sender": "@skaverat:matrix.org", "state_key": "@skaverat:matrix.org", "type": "m.room.member", "unsigned": { "age": 74543707371, "replaces_state": "$143601779062101XdXBd:matrix.org" } }, { "content": { "avatar_url": "mxc://lovely.beer/mBOypsbrTJqhKZNuuaKHGWyr#auto", "displayname": null, "membership": "join" }, "event_id": "$14470660226FOYPn:lovely.beer", "origin_server_ts": 1447066022538, "sender": "@illicitonion:lovely.beer", "state_key": "@illicitonion:lovely.beer", "type": "m.room.member", "unsigned": { "age": 45621842 } }, { "content": { "avatar_url": "mxc://matrix.org/eTblXqWsYPyAAHORFMPDZAtA#auto", "displayname": null, "membership": "join" }, "event_id": "$1469123573205164ogTdM:matrix.org", "membership": "join", "origin_server_ts": 1469123573989, "sender": "@tuckerm:matrix.org", "state_key": "@tuckerm:matrix.org", "type": "m.room.member", "unsigned": { "age": 41544378689 } }, { "content": { "avatar_url": "mxc://matrix.org/obbkrygtrhBraacMFwUyNxKU", "displayname": "The Orb", "membership": "join" }, "event_id": "$15104281372137043LyYss:matrix.org", "membership": "join", "origin_server_ts": 1510428137363, "sender": "@the-orb:matrix.org", "state_key": "@the-orb:matrix.org", "type": "m.room.member", "unsigned": { "age": 239815315, "replaces_state": "$15099094972386563xDKby:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1417796091348VPjxp:matrix.org", "membership": "leave", "origin_server_ts": 1417796091077, "sender": "@irc_sanderr:matrix.org", "state_key": "@irc_sanderr:matrix.org", "type": "m.room.member", "unsigned": { "age": 92871861601 } }, { "content": { "membership": "leave" }, "event_id": "$14985512403066917pZQzh:matrix.org", "membership": "leave", "origin_server_ts": 1498551240963, "sender": "@frabrunelle:matrix.org", "state_key": "@frabrunelle:matrix.org", "type": "m.room.member", "unsigned": { "age": 12116711715, "replaces_state": "$1463080811274944rxXyL:matrix.org" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$1499885012509261sglIS:matrix.org", "membership": "join", "origin_server_ts": 1499885012402, "sender": "@Nurshod55:matrix.org", "state_key": "@Nurshod55:matrix.org", "type": "m.room.member", "unsigned": { "age": 10782940276 } }, { "content": { "membership": "leave" }, "event_id": "$1462074007269013uxxAL:matrix.org", "membership": "leave", "origin_server_ts": 1462074007452, "sender": "@rbsns:matrix.org", "state_key": "@rbsns:matrix.org", "type": "m.room.member", "unsigned": { "age": 48593945226, "replaces_state": "$1462073952268952Jxiwq:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/KQGZjzNVxRRqOmsesxhzGHwa#auto", "displayname": "mdfk", "membership": "join" }, "event_id": "$143997085624861Ioqfw:matrix.org", "membership": "join", "origin_server_ts": 1439970856238, "sender": "@madafaka:matrix.org", "state_key": "@madafaka:matrix.org", "type": "m.room.member", "unsigned": { "age": 70697096440 } }, { "content": { "membership": "leave" }, "event_id": "$15015301574800793liiDs:matrix.org", "membership": "leave", "origin_server_ts": 1501530157119, "sender": "@freenode_wadadli_:matrix.org", "state_key": "@freenode_wadadli_:matrix.org", "type": "m.room.member", "unsigned": { "age": 9137795559, "replaces_state": "$15014381163084086RYBQs:matrix.org" } }, { "content": { "membership": "leave", "reason": "Old IRC bot user" }, "event_id": "$14292612745043igGaR:matrix.org", "origin_server_ts": 1429261274877, "sender": "@kegan:matrix.org", "state_key": "@irc_erikj:matrix.org", "type": "m.room.member", "unsigned": { "age": 81406677801, "replaces_state": "$14279829556225VoPOJ:matrix.org" } }, { "content": { "avatar_url": "mxc://perthchat.org/pHkTXuiFacTssuXzSHCfDffG", "displayname": "PC-Admin", "membership": "join" }, "event_id": "$150218767917IlAND:perthchat.org", "origin_server_ts": 1502187679037, "sender": "@PC-Admin:perthchat.org", "state_key": "@PC-Admin:perthchat.org", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "avatar_url": "mxc://matrix.org/OuTyWrysqDsfrIluDFlNGnSU#auto", "displayname": "Robbie Coomber", "membership": "join" }, "event_id": "$1433968105151wrWpZ:matrix.org", "membership": "join", "origin_server_ts": 1433968105787, "sender": "@robbie:matrix.org", "state_key": "@robbie:matrix.org", "type": "m.room.member", "unsigned": { "age": 76699846891 } }, { "content": { "avatar_url": "mxc://matrix.org/olmvMiCORGdPwEGHKegMdFma", "displayname": "Friederick Tan", "membership": "join" }, "event_id": "$15015285594760983bCvoC:matrix.org", "membership": "join", "origin_server_ts": 1501528559216, "sender": "@friedericktan21:matrix.org", "state_key": "@friedericktan21:matrix.org", "type": "m.room.member", "unsigned": { "age": 9139393462 } }, { "content": { "membership": "leave" }, "event_id": "$14689040611240908rJudm:matrix.org", "membership": "leave", "origin_server_ts": 1468904061155, "sender": "@nizam:matrix.org", "state_key": "@nizam:matrix.org", "type": "m.room.member", "unsigned": { "age": 41763891523, "replaces_state": "$14689040561240900QsqWZ:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149426742112443UlohO:disroot.org", "membership": "leave", "origin_server_ts": 1494267421602, "sender": "@antilopa:disroot.org", "state_key": "@antilopa:disroot.org", "type": "m.room.member", "unsigned": { "age": 16400531076, "prev_content": { "avatar_url": "mxc://disroot.org/sdnyKmKeuVLOolAINjOPRIVw", "displayname": "antilopa", "membership": "join" }, "prev_sender": "@antilopa:disroot.org", "replaces_state": "$148312505393uWjEg:disroot.org" } }, { "content": { "avatar_url": null, "displayname": "pox", "membership": "join" }, "event_id": "$146243993073448TlfXc:matrix.org", "membership": "join", "origin_server_ts": 1462439930758, "sender": "@pox1:matrix.org", "state_key": "@pox1:matrix.org", "type": "m.room.member", "unsigned": { "age": 48228021920 } }, { "content": { "avatar_url": "mxc://matrix.org/xaiAbARKAfHYAmbZRcdMRxQW#auto", "displayname": "clokep", "membership": "join" }, "event_id": "$1480169481626795IoBtv:matrix.org", "membership": "join", "origin_server_ts": 1480169481295, "sender": "@clokep:matrix.org", "state_key": "@clokep:matrix.org", "type": "m.room.member", "unsigned": { "age": 30498471383, "replaces_state": "$147914141223638gBekh:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.netzgehirn.de/UUBKvbbtrnGQMnECbQCDSjtk", "displayname": "soltix", "membership": "join" }, "event_id": "$147500208846dPoMP:matrix.netzgehirn.de", "origin_server_ts": 1475002088621, "sender": "@soltix:matrix.netzgehirn.de", "state_key": "@soltix:matrix.netzgehirn.de", "type": "m.room.member", "unsigned": { "age": 5 } }, { "content": { "join_rule": "public" }, "event_id": "$1416420910538EkGDl:matrix.org", "origin_server_ts": 1409924389016, "sender": "@LeoNerd:matrix.org", "state_key": "", "type": "m.room.join_rules", "unsigned": {} }, { "content": { "membership": "leave" }, "event_id": "$15058269483274659POgvJ:matrix.org", "membership": "leave", "origin_server_ts": 1505826948409, "sender": "@freenode_chridal:matrix.org", "state_key": "@freenode_chridal:matrix.org", "type": "m.room.member", "unsigned": { "age": 4841004269, "replaces_state": "$150446295394953PoUCg:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1493152900125UOYKE:activis.me", "membership": "leave", "origin_server_ts": 1493152900082, "sender": "@archange:activis.me", "state_key": "@archange:activis.me", "type": "m.room.member", "unsigned": { "age": 17515052596, "prev_content": { "avatar_url": null, "displayname": "archange", "membership": "join" }, "prev_sender": "@archange:activis.me", "replaces_state": "$149306419069iccOG:activis.me" } }, { "content": { "membership": "leave" }, "event_id": "$143872643932148dfQmY:matrix.org", "origin_server_ts": 1438726439761, "sender": "@freenode_SkaveRat:matrix.org", "state_key": "@freenode_SkaveRat:matrix.org", "type": "m.room.member", "unsigned": { "age": 71941512917, "replaces_state": "$143871846325235YXXPl:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/BjGbwvajewbuBuSTuHqXSXWz", "displayname": "Holger Weiß", "membership": "join" }, "event_id": "$143634062656294OdpDA:matrix.org", "origin_server_ts": 1436340626672, "sender": "@holger:matrix.org", "state_key": "@holger:matrix.org", "type": "m.room.member", "unsigned": { "age": 74327326006 } }, { "content": { "membership": "leave" }, "event_id": "$15099448193198812TAaDt:matrix.org", "membership": "leave", "origin_server_ts": 1509944819534, "sender": "@freenode_rovonovo_zoro:matrix.org", "state_key": "@freenode_rovonovo_zoro:matrix.org", "type": "m.room.member", "unsigned": { "age": 723133144, "replaces_state": "$15090775923487288TEqBq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Freddy", "membership": "join" }, "event_id": "$14756973915HsJeN:hamburg.freifunk.net", "origin_server_ts": 1475697460079, "sender": "@freddy:hamburg.freifunk.net", "state_key": "@freddy:hamburg.freifunk.net", "type": "m.room.member", "unsigned": { "age": 10 } }, { "content": { "avatar_url": "mxc://matrix.org/YoZjOfFOwsiOyyCOwmuasKzK", "displayname": "ITY", "membership": "join" }, "event_id": "$1448915090204815cdgll:matrix.org", "origin_server_ts": 1448915090428, "sender": "@isthatyou:matrix.org", "state_key": "@isthatyou:matrix.org", "type": "m.room.member", "unsigned": { "age": 61752862250, "replaces_state": "$1448802290116123NscoI:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "user318", "membership": "join" }, "event_id": "$14828416632776522DlyWw:matrix.org", "membership": "join", "origin_server_ts": 1482841663460, "sender": "@user318:matrix.org", "state_key": "@user318:matrix.org", "type": "m.room.member", "unsigned": { "age": 27826289218 } }, { "content": { "avatar_url": null, "displayname": "wouerner", "membership": "join" }, "event_id": "$150636040816119QkDlX:matrix.org", "membership": "join", "origin_server_ts": 1506360408684, "sender": "@wouerner:matrix.org", "state_key": "@wouerner:matrix.org", "type": "m.room.member", "unsigned": { "age": 4307543994 } }, { "content": { "avatar_url": "mxc://matrix.org/AGePqSJMJKdwniMWiMVUqjDs", "displayname": "netpro2k", "membership": "join" }, "event_id": "$15104555262480661QQrxz:matrix.org", "membership": "join", "origin_server_ts": 1510455526198, "sender": "@netpro2k:matrix.org", "state_key": "@netpro2k:matrix.org", "type": "m.room.member", "unsigned": { "age": 212426480 } }, { "content": { "membership": "leave" }, "event_id": "$143673976049006mdCoH:matrix.org", "origin_server_ts": 1436739760056, "sender": "@fox:matrix.org", "state_key": "@fox:matrix.org", "type": "m.room.member", "unsigned": { "age": 73928192622, "replaces_state": "$143639585277775fiDbW:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Testuser", "membership": "join" }, "event_id": "$1503955730371knWVY:coding.chat", "origin_server_ts": 1503956116029, "sender": "@Testuser:coding.chat", "state_key": "@Testuser:coding.chat", "type": "m.room.member", "unsigned": { "age": 20 } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15035294542276740yYMqu:matrix.org", "membership": "join", "origin_server_ts": 1503529454710, "sender": "@cworobetz:matrix.org", "state_key": "@cworobetz:matrix.org", "type": "m.room.member", "unsigned": { "age": 7138497968 } }, { "content": { "avatar_url": "mxc://exul.org/FVeNMVznVXFlxJgLfSAqZZEW", "displayname": "exul", "membership": "join" }, "event_id": "$1473004424104DVrRK:exul.org", "membership": "join", "origin_server_ts": 1473004424424, "sender": "@exul:exul.org", "state_key": "@exul:exul.org", "type": "m.room.member", "unsigned": { "age": 37663528254, "prev_content": { "avatar_url": "mxc://exul.org/FVeNMVznVXFlxJgLfSAqZZEW", "displayname": "exul", "membership": "join" }, "prev_sender": "@exul:exul.org", "replaces_state": "$14728213141wapIB:exul.org" } }, { "content": { "avatar_url": null, "displayname": "Guest 56008", "kind": "guest", "membership": "join" }, "event_id": "$14756783362416003GbLlL:matrix.org", "membership": "join", "origin_server_ts": 1475678336048, "sender": "@56008:matrix.org", "state_key": "@56008:matrix.org", "type": "m.room.member", "unsigned": { "age": 34989616630 } }, { "content": { "membership": "leave" }, "event_id": "$14401736594ArUtX:mtrx.me", "origin_server_ts": 1440173659110, "sender": "@tb0hdan:mtrx.me", "state_key": "@tb0hdan:mtrx.me", "type": "m.room.member", "unsigned": { "age": 70494293568, "replaces_state": "$14400972745cfkZh:mtrx.me" } }, { "content": { "avatar_url": "mxc://matrix.org/aVokmLEJzCggFvzyUpDukSCl", "displayname": "Foxy", "membership": "join" }, "event_id": "$1496965431392130hbNDK:matrix.org", "membership": "join", "origin_server_ts": 1496965431985, "sender": "@Foxy:matrix.org", "state_key": "@Foxy:matrix.org", "type": "m.room.member", "unsigned": { "age": 13702520693, "replaces_state": "$147164625452609iJWvH:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$1475826421112OXkQs:von-und-zu-weiss.de", "membership": "leave", "origin_server_ts": 1475826421548, "sender": "@nelius:von-und-zu-weiss.de", "state_key": "@nelius:von-und-zu-weiss.de", "type": "m.room.member", "unsigned": { "age": 34841531130, "replaces_state": "$14756775191fueBN:von-und-zu-weiss.de" } }, { "content": { "avatar_url": "mxc://matrix.org/qENDTQUVwQvgGIhpQIosocZE#auto", "displayname": "jots", "membership": "join" }, "event_id": "$145826269243507cUwoQ:matrix.org", "membership": "join", "origin_server_ts": 1458262692580, "sender": "@jots:matrix.org", "state_key": "@jots:matrix.org", "type": "m.room.member", "unsigned": { "age": 52405260098, "replaces_state": "$1447233721889021PiiXE:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$149680125064vEMGs:matrix.colonelkrud.com", "membership": "leave", "origin_server_ts": 1496801250276, "sender": "@colonelkrud:matrix.colonelkrud.com", "state_key": "@colonelkrud:matrix.colonelkrud.com", "type": "m.room.member", "unsigned": { "age": 13866702402, "prev_content": { "avatar_url": "mxc://matrix.colonelkrud.com/sicUoNqIJNnSbhsukCRlwFed", "displayname": "colonelkrud", "membership": "join" }, "prev_sender": "@colonelkrud:matrix.colonelkrud.com", "replaces_state": "$149680040260CzPel:matrix.colonelkrud.com" } }, { "content": { "avatar_url": "mxc://matrix.org/WEFlmNJcYIhkehkDMQDvbzit", "displayname": "Christyy", "membership": "join" }, "event_id": "$14915339421423143SJwIS:matrix.org", "membership": "join", "origin_server_ts": 1491533942952, "sender": "@aaaaAaaaa:matrix.org", "state_key": "@aaaaAaaaa:matrix.org", "type": "m.room.member", "unsigned": { "age": 19134009726, "replaces_state": "$14915337181421680lmBAu:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15091316870TEljx:matrix.daedalist.net", "membership": "leave", "origin_server_ts": 1509131687062, "sender": "@anaxios:matrix.daedalist.net", "state_key": "@anaxios:matrix.daedalist.net", "type": "m.room.member", "unsigned": { "age": 1536265616, "prev_content": { "avatar_url": "mxc://matrix.daedalist.net/rJmCAEckVTwkJNkZTecdJTWb", "displayname": "anaxios", "membership": "join" }, "prev_sender": "@anaxios:matrix.daedalist.net", "replaces_state": "$150847898713Sdnpo:matrix.daedalist.net" } }, { "content": { "avatar_url": "mxc://matrix.org/cRkqrXPUuVtZtpFhOadVKOTg", "displayname": "jaen", "membership": "join" }, "event_id": "$1452680013464754iGZeN:matrix.org", "origin_server_ts": 1452680013553, "sender": "@jaen:matrix.org", "state_key": "@jaen:matrix.org", "type": "m.room.member", "unsigned": { "age": 57987939125, "replaces_state": "$1452679693464387GhPfP:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mtVWlvGZeTHQRmIEyRlvfhea", "displayname": "JpRouault01", "membership": "join" }, "event_id": "$14984922782401901HesOr:matrix.org", "membership": "join", "origin_server_ts": 1498492278564, "sender": "@JpRouault01:matrix.org", "state_key": "@JpRouault01:matrix.org", "type": "m.room.member", "unsigned": { "age": 12175674114, "replaces_state": "$14967452855318326qTtOi:matrix.org" } } ] }, "timeline": { "events": [ { "content": { "avatar_url": "mxc://matrix.org/mikjYEIVtlGtTZttlKLueSpE", "displayname": "ImpYoo", "membership": "join" }, "event_id": "$15106534421575085AcTQW:matrix.org", "membership": "join", "origin_server_ts": 1510653442575, "sender": "@ImpYoo:matrix.org", "state_key": "@ImpYoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 14510103, "prev_content": { "membership": "leave" }, "prev_sender": "@ImpYoo:matrix.org", "replaces_state": "$15106534301574893AUvjU:matrix.org" } }, { "content": { "membership": "leave" }, "event_id": "$15106535951577006OYOGC:matrix.org", "membership": "leave", "origin_server_ts": 1510653595051, "sender": "@ImpYoo:matrix.org", "state_key": "@ImpYoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 14357627, "prev_content": { "avatar_url": "mxc://matrix.org/mikjYEIVtlGtTZttlKLueSpE", "displayname": "ImpYoo", "membership": "join" }, "prev_sender": "@ImpYoo:matrix.org", "replaces_state": "$15106534421575085AcTQW:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/mikjYEIVtlGtTZttlKLueSpE", "displayname": "ImpYoo", "membership": "join" }, "event_id": "$15106536101577193PcUsy:matrix.org", "membership": "join", "origin_server_ts": 1510653610286, "sender": "@ImpYoo:matrix.org", "state_key": "@ImpYoo:matrix.org", "type": "m.room.member", "unsigned": { "age": 14342392, "prev_content": { "membership": "leave" }, "prev_sender": "@ImpYoo:matrix.org", "replaces_state": "$15106535951577006OYOGC:matrix.org" } }, { "content": { "body": "atm it's stuck on a branch", "msgtype": "m.text" }, "event_id": "$15106609251664056lXnAd:matrix.org", "origin_server_ts": 1510660925749, "sender": "@matthew:matrix.org", "type": "m.room.message", "unsigned": { "age": 7026929 } }, { "content": { "body": "and Rob, who wrote it, is currently on hiatus", "msgtype": "m.text" }, "event_id": "$15106609321664147gcOxN:matrix.org", "origin_server_ts": 1510660932029, "sender": "@matthew:matrix.org", "type": "m.room.message", "unsigned": { "age": 7020649 } }, { "content": { "body": "so, unless we can find someone to finish the job, it's stuck atm.", "msgtype": "m.text" }, "event_id": "$15106609421664299sRcWX:matrix.org", "origin_server_ts": 1510660942924, "sender": "@matthew:matrix.org", "type": "m.room.message", "unsigned": { "age": 7009754 } }, { "content": { "body": "ohh I have a fix for the alpine issue", "msgtype": "m.text" }, "event_id": "$1510660973416nzByq:sw1v.org", "origin_server_ts": 1510660973211, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 6979467 } }, { "content": { "body": "which I should really PR", "msgtype": "m.text" }, "event_id": "$1510660979417VKkhh:sw1v.org", "origin_server_ts": 1510660979209, "sender": "@richvdh:sw1v.org", "type": "m.room.message", "unsigned": { "age": 6973469 } }, { "content": { "membership": "leave" }, "event_id": "$151066110053AEPOa:scorpionland.net", "membership": "leave", "origin_server_ts": 1510661100130, "sender": "@brooksm:scorpionland.net", "state_key": "@brooksm:scorpionland.net", "type": "m.room.member", "unsigned": { "age": 6852548, "prev_content": { "avatar_url": null, "displayname": "Brooks", "membership": "join" }, "prev_sender": "@brooksm:scorpionland.net", "replaces_state": "$15105958071xhjoF:scorpionland.net" } }, { "content": { "avatar_url": null, "displayname": "drp_ (IRC)", "membership": "join" }, "event_id": "$15106611661667705QDrMD:matrix.org", "membership": "join", "origin_server_ts": 1510661166316, "sender": "@freenode_drp_:matrix.org", "state_key": "@freenode_drp_:matrix.org", "type": "m.room.member", "unsigned": { "age": 6786362 } } ], "limited": true, "prev_batch": "t135083-333171095_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": { "highlight_count": 0, "notification_count": 0 } } }, "leave": { "!fILrmqIZQfJcrUiBRk:matrix.org": { "account_data": { "events": [ { "content": { "event_id": "$1508873653359zNLaY:t2l.io" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "user_ids": [] }, "type": "m.typing" }, { "content": { "$1509366392307MlOrL:kamax.io": { "m.read": { "@jomari:matrix.org": { "ts": 1509380293275 } } }, "$1509473290644OIhOg:kamax.io": { "m.read": { "@Half-Shot:half-shot.uk": { "ts": 1509473308283 } } }, "$1509693067356HWfCP:magnap.dk": { "m.read": { "@poulad:matrix.org": { "ts": 1509713081642 } } }, "$150973218127EUAxf:kamax.io": { "m.read": { "@florianjacob:matrix.org": { "ts": 1509743805955 } } }, "$1509743801584618WpHHq:matrix.org": { "m.read": { "@davidar:matrix.org": { "ts": 1509857157407 }, "@li:matrix.org": { "ts": 1509777720312 } } }, "$1510032259551465KlGuy:matrix.org": { "m.read": { "@Amandine:matrix.org": { "ts": 1510035247569 } } }, "$15100662851938MSkJR:berigora.net": { "m.read": { "@matthew:matrix.org": { "ts": 1510066323455 } } }, "$15100749561121LsQEg:kamax.io": { "m.read": { "@mujx:matrix.org": { "ts": 1510075312606 } } }, "$15100808071245347VuDKW:matrix.org": { "m.read": { "@max:kamax.io": { "ts": 1510080806866 } } }, "$1510080987688wcORG:magnap.dk": { "m.read": { "@voyager:t2bot.io": { "ts": 1510080991564 } } }, "$15100813271254907LoQIS:matrix.org": { "m.read": { "@seequ:krtdex.com": { "ts": 1510081351433 } } }, "$15100829341285156rEgxm:matrix.org": { "m.read": { "@jon:terracrypt.net": { "ts": 1510082987523 } } }, "$15100892471406822YtBjw:matrix.org": { "m.read": { "@aegir:kamax.cloud": { "ts": 1510091744626 }, "@uhoreg:matrix.org": { "ts": 1510089330369 } } }, "$15101017431611129WouVc:matrix.org": { "m.read": { "@148833:matrix.org": { "ts": 1510149803729 }, "@Moose:matrix.org": { "ts": 1510110553953 }, "@abeckmeyer:matrix.org": { "ts": 1510237292230 }, "@thekyriarchy:matrix.org": { "ts": 1510101813564 } } }, "$15102674514420RBquX:agr.social": { "m.read": { "@karieton:matrix.org": { "ts": 1510297291015 }, "@musoke:matrix.org": { "ts": 1510284308368 } } }, "$1510385828115wDywE:gruenhage.xyz": { "m.read": { "@ERIIX:matrix.org": { "ts": 1510418721701 }, "@agiri:agr.social": { "ts": 1510406034886 }, "@erikj:jki.re": { "ts": 1510570833772 }, "@jzk:matrix.org": { "ts": 1510478756591 }, "@kaniini:dereferenced.org": { "ts": 1510633102264 }, "@kythyria:berigora.net": { "ts": 1510418043808 }, "@magnap:magnap.dk": { "ts": 1510514446815 }, "@richvdh:sw1v.org": { "ts": 1510565580923 }, "@schnuffle:matrix.org": { "ts": 1510491608886 }, "@teej:matrix.org": { "ts": 1510506111709 } } }, "$15106481321511073apKQd:matrix.org": { "m.read": { "@Manu:matrix.org": { "ts": 1510653371971 }, "@TimePath:timepath.xyz": { "ts": 1510661614105 }, "@adam:thebeckmeyers.xyz": { "ts": 1510662188682 }, "@dave:matrix.org": { "ts": 1510652420871 }, "@hristo:venev.name": { "ts": 1510656889037 }, "@jan.christian:gruenhage.xyz": { "ts": 1510650702038 }, "@levans:safaradeg.net": { "ts": 1510650271987 }, "@lub:imninja.net": { "ts": 1510654232311 }, "@ptman:matrix.org": { "ts": 1510656082815 }, "@travis:t2l.io": { "ts": 1510667302366 } } } }, "type": "m.receipt" } ] }, "state": { "events": [ { "content": { "avatar_url": "mxc://magnap.dk/IECIiaFLQGVHVkYgDkEoexad", "displayname": "Magnap​", "membership": "join" }, "event_id": "$150884977985yzSfS:magnap.dk", "origin_server_ts": 1508849779773, "sender": "@magnap:magnap.dk", "state_key": "@magnap:magnap.dk", "type": "m.room.member", "unsigned": { "age": 5 } }, { "content": { "avatar_url": "mxc://matrix.org/OonjUOmcuVpUnmOWKtzPmAFe", "displayname": "uhoreg", "membership": "join" }, "event_id": "$1508849836177279FIjlj:matrix.org", "membership": "join", "origin_server_ts": 1508849836233, "sender": "@uhoreg:matrix.org", "state_key": "@uhoreg:matrix.org", "type": "m.room.member", "unsigned": { "age": 1818116445 } }, { "content": { "avatar_url": "mxc://imninja.net/GyLhBiUpKDxpWiXqoDRMuJIk", "displayname": "lub", "membership": "join" }, "event_id": "$150885735348OsGOe:imninja.net", "origin_server_ts": 1508857369274, "sender": "@lub:imninja.net", "state_key": "@lub:imninja.net", "type": "m.room.member", "unsigned": { "age": 15 } }, { "content": { "avatar_url": "mxc://sw1v.org/rARZrbDMGnNQOKKWZtCVxusq", "displayname": "richvdh", "membership": "join" }, "event_id": "$1508850124336ZuMRi:sw1v.org", "origin_server_ts": 1508850123996, "sender": "@richvdh:sw1v.org", "state_key": "@richvdh:sw1v.org", "type": "m.room.member", "unsigned": { "age": 8 } }, { "content": { "avatar_url": "mxc://half-shot.uk/HdtjwMjxtbBbDuefWnTFYIet", "displayname": "Half-Shot", "membership": "join" }, "event_id": "$1508857401204gPRkH:half-shot.uk", "origin_server_ts": 1508857401372, "sender": "@Half-Shot:half-shot.uk", "state_key": "@Half-Shot:half-shot.uk", "type": "m.room.member", "unsigned": { "age": 53 } }, { "content": { "avatar_url": "mxc://thebeckmeyers.xyz/MpWpOzvvdeSOsDPmkEVMmviz", "displayname": "&Adam", "membership": "join" }, "event_id": "$15088511081141SHRwX:thebeckmeyers.xyz", "origin_server_ts": 1508851107796, "sender": "@adam:thebeckmeyers.xyz", "state_key": "@adam:thebeckmeyers.xyz", "type": "m.room.member", "unsigned": { "age": 4, "replaces_state": "$1508851082197983UEUEr:matrix.org" } }, { "content": { "avatar_url": "mxc://venev.name/IJpdoTTzvfXHGxVtzdjFlOVF", "displayname": "Hristo Venev", "membership": "join" }, "event_id": "$15096584936IIbLO:venev.name", "origin_server_ts": 1509658493421, "sender": "@hristo:venev.name", "state_key": "@hristo:venev.name", "type": "m.room.member", "unsigned": { "age": 31 } }, { "content": { "avatar_url": "mxc://dereferenced.org/awyYIJOXQayfOVwrKzteJUGd", "displayname": "kaniini", "membership": "join" }, "event_id": "$15089566772452FCYlK:dereferenced.org", "origin_server_ts": 1508956677717, "sender": "@kaniini:dereferenced.org", "state_key": "@kaniini:dereferenced.org", "type": "m.room.member", "unsigned": { "age": 125, "replaces_state": "$15089433731542620GAOjY:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "teej", "membership": "join" }, "event_id": "$15090441833032446rsglH:matrix.org", "membership": "join", "origin_server_ts": 1509044183345, "sender": "@teej:matrix.org", "state_key": "@teej:matrix.org", "type": "m.room.member", "unsigned": { "age": 1623769333 } }, { "content": { "avatar_url": "mxc://matrix.org/CKvKqvaLZkrqKZcXeUabhnUw", "displayname": "@thekyriarchy", "membership": "join" }, "event_id": "$1508856750295741MNLQU:matrix.org", "membership": "join", "origin_server_ts": 1508856750423, "sender": "@thekyriarchy:matrix.org", "state_key": "@thekyriarchy:matrix.org", "type": "m.room.member", "unsigned": { "age": 1811202255 } }, { "content": { "url": "mxc://matrix.org/tBkNapxxJkJrZOscomKcLXln" }, "event_id": "$1508850033180392ZmVgy:matrix.org", "origin_server_ts": 1508850033514, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.avatar", "unsigned": { "age": 1817919164 } }, { "content": { "groups": [] }, "event_id": "$1508849585173376AdZkQ:matrix.org", "origin_server_ts": 1508849585677, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.related_groups", "unsigned": { "age": 1818367001 } }, { "content": { "avatar_url": "mxc://agr.social/saVBePHoulgszrnRGNIBdeQx", "displayname": "Agiri", "membership": "join" }, "event_id": "$15102674514420RBquX:agr.social", "membership": "join", "origin_server_ts": 1510267451893, "sender": "@agiri:agr.social", "state_key": "@agiri:agr.social", "type": "m.room.member", "unsigned": { "age": 400500785, "prev_content": { "avatar_url": "mxc://agr.social/rBJjXupMxwIrIIOVYVFNfWqK", "displayname": "Agiri", "membership": "join" }, "prev_sender": "@agiri:agr.social", "replaces_state": "$15093417846vEDyL:agr.social" } }, { "content": { "avatar_url": "mxc://matrix.org/IssHdyiXMcSnRCxCzqoaocGL", "displayname": "Dave", "membership": "join" }, "event_id": "$1508849812176931sUXYM:matrix.org", "membership": "join", "origin_server_ts": 1508849812919, "sender": "@dave:matrix.org", "state_key": "@dave:matrix.org", "type": "m.room.member", "unsigned": { "age": 1818139759 } }, { "content": { "avatar_url": "mxc://matrix.org/nUpzboMouUDsVJTtwQUtaFXq", "displayname": "jzk", "membership": "join" }, "event_id": "$1508849753175990tmFIq:matrix.org", "membership": "join", "origin_server_ts": 1508849753359, "sender": "@jzk:matrix.org", "state_key": "@jzk:matrix.org", "type": "m.room.member", "unsigned": { "age": 1818199319 } }, { "content": { "avatar_url": "mxc://terracrypt.net/dgrTvNjRusPYHJNDqgvscjwZ", "displayname": "Jon ☎️", "membership": "join" }, "event_id": "$1509214512496YGdRz:terracrypt.net", "origin_server_ts": 1509214524697, "sender": "@jon:terracrypt.net", "state_key": "@jon:terracrypt.net", "type": "m.room.member", "unsigned": { "age": 13 } }, { "content": { "avatar_url": null, "displayname": "musoke", "membership": "join" }, "event_id": "$15096062103446367NlTPt:matrix.org", "membership": "join", "origin_server_ts": 1509606210318, "sender": "@musoke:matrix.org", "state_key": "@musoke:matrix.org", "type": "m.room.member", "unsigned": { "age": 1061742360 } }, { "content": { "avatar_url": "mxc://matrix.org/gWLPZZSJPbhgHoyShiGSesXS", "displayname": "Amandine", "membership": "join" }, "event_id": "$1508851253200798UeSzo:matrix.org", "membership": "join", "origin_server_ts": 1508851253519, "sender": "@Amandine:matrix.org", "state_key": "@Amandine:matrix.org", "type": "m.room.member", "unsigned": { "age": 1816699159 } }, { "content": { "avatar_url": "mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname": "mujx", "membership": "join" }, "event_id": "$1508850093181371isHWx:matrix.org", "membership": "join", "origin_server_ts": 1508850093567, "sender": "@mujx:matrix.org", "state_key": "@mujx:matrix.org", "type": "m.room.member", "unsigned": { "age": 1817859111 } }, { "content": { "avatar_url": "mxc://matrix.org/NeNDgdgVFtZCTdxwJiblKtDE", "displayname": "Li", "membership": "join" }, "event_id": "$15090899573602413zvMoP:matrix.org", "membership": "join", "origin_server_ts": 1509089957672, "sender": "@li:matrix.org", "state_key": "@li:matrix.org", "type": "m.room.member", "unsigned": { "age": 1577995006 } }, { "content": { "avatar_url": "mxc://matrix.org/ukfJsuTFLRmOXgCcpyYejrXp", "displayname": "ERIIX Blaike", "membership": "join" }, "event_id": "$15101017431611129WouVc:matrix.org", "membership": "join", "origin_server_ts": 1510101743932, "sender": "@ERIIX:matrix.org", "state_key": "@ERIIX:matrix.org", "type": "m.room.member", "unsigned": { "age": 566208746 } }, { "content": { "guest_access": "can_join" }, "event_id": "$1508849575173217shdSY:matrix.org", "origin_server_ts": 1508849575124, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 1818377554 } }, { "content": { "avatar_url": "mxc://matrix.org/vxUqMornOkSutRlXWnzFppUI", "displayname": "Poulad", "membership": "join" }, "event_id": "$15092923515908551RIgbm:matrix.org", "membership": "join", "origin_server_ts": 1509292351679, "sender": "@poulad:matrix.org", "state_key": "@poulad:matrix.org", "type": "m.room.member", "unsigned": { "age": 1375600999, "replaces_state": "$15092897775873504SnWWI:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/ZnBnDzDPzGtpeiTNzMkIXjzK", "displayname": "Paul", "membership": "join" }, "event_id": "$15092108615054372TGbsM:matrix.org", "membership": "join", "origin_server_ts": 1509210861815, "sender": "@ptman:matrix.org", "state_key": "@ptman:matrix.org", "type": "m.room.member", "unsigned": { "age": 1457090863 } }, { "age_ts": 1508935627841, "content": { "avatar_url": "mxc://t2l.io/fYhaPLjAZLwEYqaSGKwRpQgk", "displayname": "TravisR", "membership": "join" }, "event_id": "$1508935624594dJeCg:t2l.io", "origin_server_ts": 1508935624216, "sender": "@travis:t2l.io", "state_key": "@travis:t2l.io", "type": "m.room.member", "unsigned": { "age": 5, "replaces_state": "$1508900003556rhPDQ:t2l.io" } }, { "content": { "avatar_url": "mxc://matrix.org/qzaNAnzhghheUNahmnJPpRsZ", "displayname": "SchnuffleMatrix", "membership": "join" }, "event_id": "$15091193513993398zhrEb:matrix.org", "membership": "join", "origin_server_ts": 1509119351031, "sender": "@schnuffle:matrix.org", "state_key": "@schnuffle:matrix.org", "type": "m.room.member", "unsigned": { "age": 1548601647 } }, { "content": { "avatar_url": "mxc://krtdex.com/vsKSsrMRnuQqvVRnePgCPjOp", "displayname": "seequ_", "membership": "join" }, "event_id": "$1508879630717qsyWH:krtdex.com", "origin_server_ts": 1508879630122, "sender": "@seequ:krtdex.com", "state_key": "@seequ:krtdex.com", "type": "m.room.member", "unsigned": { "age": 7, "replaces_state": "$1508879618128VGysa:magnap.dk" } }, { "content": { "join_rule": "public" }, "event_id": "$1508849705175242pNZPP:matrix.org", "origin_server_ts": 1508849705998, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 1818246680, "replaces_state": "$1508849575173212eApDi:matrix.org" } }, { "content": { "avatar_url": "mxc://t2bot.io/WqIjLnbmpJfVoHoFcMStMXkO", "displayname": "Matrix Traveler (bot)", "membership": "join" }, "event_id": "$15088513096147pTAfd:t2bot.io", "origin_server_ts": 1508851309048, "sender": "@voyager:t2bot.io", "state_key": "@voyager:t2bot.io", "type": "m.room.member", "unsigned": { "age": 7 } }, { "content": { "avatar_url": "mxc://berigora.net/DVcwKWVnwgPqERZtxJwZEfIX", "displayname": "kythyria", "membership": "join" }, "event_id": "$1508849751220EFNSm:berigora.net", "origin_server_ts": 1508849751894, "sender": "@kythyria:berigora.net", "state_key": "@kythyria:berigora.net", "type": "m.room.member", "unsigned": { "age": 4 } }, { "content": { "avatar_url": "mxc://matrix.org/XcoBYiEebcHikyXHjagpCRJv", "displayname": "@davidar:matrix.org", "membership": "join" }, "event_id": "$1509389955512546zzdCx:matrix.org", "membership": "join", "origin_server_ts": 1509389955391, "sender": "@davidar:matrix.org", "state_key": "@davidar:matrix.org", "type": "m.room.member", "unsigned": { "age": 1277997287 } }, { "content": { "creator": "@matthew:matrix.org" }, "event_id": "$1508849574173208QAEdR:matrix.org", "origin_server_ts": 1508849574903, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.create", "unsigned": { "age": 1818377775 } }, { "content": { "membership": "leave" }, "event_id": "$15100808121132dZOCf:kamax.io", "membership": "leave", "origin_server_ts": 1510080812836, "sender": "@max:kamax.io", "state_key": "@max:kamax.io", "type": "m.room.member", "unsigned": { "age": 587139842, "replaces_state": "$1508849752130FSDYa:kamax.io" } }, { "content": { "avatar_url": null, "displayname": null, "membership": "join" }, "event_id": "$15100844751315070kufOs:matrix.org", "membership": "join", "origin_server_ts": 1510084475295, "sender": "@pamo:matrix.org", "state_key": "@pamo:matrix.org", "type": "m.room.member", "unsigned": { "age": 583477383 } }, { "content": { "avatar_url": "mxc://matrix.org/DoOrcNwyloaOgWwtgxaSHOak", "displayname": "hl", "membership": "join" }, "event_id": "$15089417941513378DZdyj:matrix.org", "membership": "join", "origin_server_ts": 1508941794635, "sender": "@148833:matrix.org", "state_key": "@148833:matrix.org", "type": "m.room.member", "unsigned": { "age": 1726158043 } }, { "content": { "avatar_url": "mxc://matrix.org/hGflZQNxFcDTropATvVZChBI", "displayname": "Florian", "membership": "join" }, "event_id": "$1509743801584618WpHHq:matrix.org", "membership": "join", "origin_server_ts": 1509743801965, "sender": "@florianjacob:matrix.org", "state_key": "@florianjacob:matrix.org", "type": "m.room.member", "unsigned": { "age": 924150713 } }, { "content": { "aliases": [ "#matrix-spec:matrix.org", "#matrix-doc:matrix.org", "#matrix-architecture:matrix.org" ] }, "event_id": "$1508850412186649jNuFI:matrix.org", "origin_server_ts": 1508850412106, "sender": "@matthew:matrix.org", "state_key": "matrix.org", "type": "m.room.aliases", "unsigned": { "age": 1817540572, "replaces_state": "$1508849585173381exlCv:matrix.org" } }, { "content": { "avatar_url": "mxc://jki.re/GVSWoYAaZphVlOxPuwtQCFCl", "displayname": "Erik", "membership": "join" }, "event_id": "$1508854149361NLuxr:jki.re", "origin_server_ts": 1508854149458, "sender": "@erikj:jki.re", "state_key": "@erikj:jki.re", "type": "m.room.member", "unsigned": { "age": 6, "replaces_state": "$1508851770209031BVBAg:matrix.org" } }, { "content": { "avatar_url": "mxc://matrix.org/oUxxDyzQOHdVDMxgwFzyCWEe", "displayname": "Matthew", "membership": "join" }, "event_id": "$1508849574173209UEUOA:matrix.org", "membership": "join", "origin_server_ts": 1508849574936, "sender": "@matthew:matrix.org", "state_key": "@matthew:matrix.org", "type": "m.room.member", "unsigned": { "age": 1818377742 } }, { "content": { "avatar_url": "mxc://matrix.org/ezttfjRgjNWNTArAgqOuuBWA", "displayname": "Total Stranger", "membership": "join" }, "event_id": "$1510297290516335CIwWv:matrix.org", "membership": "join", "origin_server_ts": 1510297290373, "sender": "@karieton:matrix.org", "state_key": "@karieton:matrix.org", "type": "m.room.member", "unsigned": { "age": 370662305 } }, { "content": { "avatar_url": "mxc://timepath.xyz/QoVCFJJrIrkrhzqiowYZKCiT", "displayname": "TimePath", "membership": "join" }, "event_id": "$1509630132861kGVJN:timepath.xyz", "origin_server_ts": 1509630131952, "sender": "@TimePath:timepath.xyz", "state_key": "@TimePath:timepath.xyz", "type": "m.room.member", "unsigned": { "age": 61 } }, { "content": { "avatar_url": "mxc://kamax.cloud/OEfadawATwquNdJQgjTvNMLW", "displayname": "aegir", "membership": "join" }, "event_id": "$1508869324340CTKsu:kamax.cloud", "origin_server_ts": 1508869324686, "sender": "@aegir:kamax.cloud", "state_key": "@aegir:kamax.cloud", "type": "m.room.member", "unsigned": { "age": 44 } }, { "content": { "avatar_url": null, "displayname": "Manu", "membership": "join" }, "event_id": "$15090939293643220LEaor:matrix.org", "membership": "join", "origin_server_ts": 1509093929665, "sender": "@Manu:matrix.org", "state_key": "@Manu:matrix.org", "type": "m.room.member", "unsigned": { "age": 1574023013 } }, { "content": { "history_visibility": "shared" }, "event_id": "$1508849575173213NkcoR:matrix.org", "origin_server_ts": 1508849575060, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 1818377618 } }, { "content": { "avatar_url": "mxc://matrix.org/QOAKpstCmMXewwYiChckurDP", "displayname": "$Adam", "membership": "join" }, "event_id": "$1508849724175536cDzNg:matrix.org", "membership": "join", "origin_server_ts": 1508849724638, "sender": "@abeckmeyer:matrix.org", "state_key": "@abeckmeyer:matrix.org", "type": "m.room.member", "unsigned": { "age": 1818228040 } }, { "content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@matthew:matrix.org": 100 }, "users_default": 0 }, "event_id": "$1508849574173210YIpBP:matrix.org", "origin_server_ts": 1508849574966, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 1818377712 } }, { "content": { "avatar_url": "mxc://matrix.org/ZbUbYCtVHRrFXpUbMNJerpCX", "displayname": "jomari", "membership": "join" }, "event_id": "$15090398202951996rqTYl:matrix.org", "membership": "join", "origin_server_ts": 1509039820017, "sender": "@jomari:matrix.org", "state_key": "@jomari:matrix.org", "type": "m.room.member", "unsigned": { "age": 1628132661 } }, { "content": { "alias": "#matrix-architecture:matrix.org" }, "event_id": "$1508850412186646syZze:matrix.org", "origin_server_ts": 1508850412099, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.canonical_alias", "unsigned": { "age": 1817540579 } }, { "content": { "topic": "For discussion of Matrix's architecture & philosophy | Design drafts: https://drive.google.com/drive/folders/0B4wHq8qP86r2ck15MHEwMmlNVUk" }, "event_id": "$1508850240183890aGIWs:matrix.org", "origin_server_ts": 1508850240924, "sender": "@matthew:matrix.org", "state_key": "", "type": "m.room.topic", "unsigned": { "age": 1817711754, "replaces_state": "$1508849720175481XqeWq:matrix.org" } }, { "content": { "avatar_url": null, "displayname": "Moose", "membership": "join" }, "event_id": "$15090692193400785SuYAU:matrix.org", "membership": "join", "origin_server_ts": 1509069219371, "sender": "@Moose:matrix.org", "state_key": "@Moose:matrix.org", "type": "m.room.member", "unsigned": { "age": 1598733307 } }, { "content": { "avatar_url": "mxc://safaradeg.net/TfUUoDkOWpbbIwuIpShznpNp", "displayname": "Levans", "membership": "join" }, "event_id": "$1510071241790kpzsH:safaradeg.net", "origin_server_ts": 1510071240835, "sender": "@levans:safaradeg.net", "state_key": "@levans:safaradeg.net", "type": "m.room.member", "unsigned": { "age": 94 } } ] }, "timeline": { "events": [ { "content": { "avatar_url": "mxc://gruenhage.xyz/HOkBeFWIoDOiuDxqXHPrFLUE", "displayname": "jcgruenhage", "membership": "join" }, "event_id": "$1510385828115wDywE:gruenhage.xyz", "membership": "join", "origin_server_ts": 1510385828909, "sender": "@jan.christian:gruenhage.xyz", "state_key": "@jan.christian:gruenhage.xyz", "type": "m.room.member", "unsigned": { "age": 282123769, "prev_content": { "avatar_url": "mxc://gruenhage.xyz/QsgpIokavDaHBQhAohxCpvVS", "displayname": "jcgruenhage", "membership": "join" }, "prev_sender": "@jan.christian:gruenhage.xyz", "replaces_state": "$1508943231172HaHzZ:gruenhage.xyz" } }, { "content": {}, "event_id": "$15106476911506155lqHXz:matrix.org", "origin_server_ts": 1510647691530, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 20261148, "redacted_because": { "content": {}, "event_id": "$15106478221507654CQwzQ:matrix.org", "origin_server_ts": 1510647822024, "redacts": "$15106476911506155lqHXz:matrix.org", "sender": "@jzk:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 20130654 } }, "redacted_by": "$15106478221507654CQwzQ:matrix.org" } }, { "content": {}, "event_id": "$15106477001506280BBigg:matrix.org", "origin_server_ts": 1510647700000, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 20252678, "redacted_because": { "content": {}, "event_id": "$15106478251507703eLBMQ:matrix.org", "origin_server_ts": 1510647825963, "redacts": "$15106477001506280BBigg:matrix.org", "sender": "@jzk:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 20126715 } }, "redacted_by": "$15106478251507703eLBMQ:matrix.org" } }, { "content": { "body": "You have an origin join a channel", "msgtype": "m.text" }, "event_id": "$15106477021506317FkWCr:matrix.org", "origin_server_ts": 1510647702173, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 20250505 } }, { "content": { "body": "The sigil for an origin is `:`", "format": "org.matrix.custom.html", "formatted_body": "The sigil for an origin is :", "msgtype": "m.text" }, "event_id": "$15106477041506347bsvAZ:matrix.org", "origin_server_ts": 1510647704445, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 20248233 } }, { "content": { "body": "a joined origin without any joined members from that origin is a peeker", "msgtype": "m.text" }, "event_id": "$15106477721507201RrgGI:matrix.org", "origin_server_ts": 1510647772882, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 20179796 } }, { "content": {}, "event_id": "$15106478221507654CQwzQ:matrix.org", "origin_server_ts": 1510647822024, "redacts": "$15106476911506155lqHXz:matrix.org", "sender": "@jzk:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 20130654 } }, { "content": {}, "event_id": "$15106478251507703eLBMQ:matrix.org", "origin_server_ts": 1510647825963, "redacts": "$15106477001506280BBigg:matrix.org", "sender": "@jzk:matrix.org", "type": "m.room.redaction", "unsigned": { "age": 20126715 } }, { "content": { "body": "PR? 🙂", "msgtype": "m.text" }, "event_id": "$15106479751509261dxDYL:matrix.org", "origin_server_ts": 1510647975242, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 19977436 } }, { "content": { "body": "re: https://github.com/matrix-org/matrix-doc/issues/913", "msgtype": "m.text" }, "event_id": "$15106481321511073apKQd:matrix.org", "origin_server_ts": 1510648132867, "sender": "@jzk:matrix.org", "type": "m.room.message", "unsigned": { "age": 19819811 } } ], "limited": true, "prev_batch": "t3762-329870949_324502987_444424_65663508_21685260_193623_2377336_2940807_454" }, "unread_notifications": { "highlight_count": 0, "notification_count": 0 } } } } } mtxclient-0.2.1/tests/fixtures/responses/sync_with_crypto.json000066400000000000000000000153551347137727200251050ustar00rootroot00000000000000{ "device_lists": { "changed": [ "@carl:matrix.org" ], "left": [ "@alice:matrix.org", "@bob:matrix.org" ] }, "device_one_time_keys_count": { "curve25519": 10, "signed_curve25519": 50 }, "next_batch": "s494057840_423411319_1821908_113293863_47864708_266862_5484556_5263815_7649", "rooms": { "invite": {}, "join": { "!IPVqGoHnIWsdDXumBP:matrix.org": { "account_data": { "events": [ { "content": { "disable": false }, "type": "org.matrix.room.preview_urls" }, { "content": { "event_id": "$15228448975390942fkGNW:matrix.org" }, "type": "m.fully_read" } ] }, "ephemeral": { "events": [ { "content": { "user_ids": [] }, "type": "m.typing" } ] }, "state": { "events": [] }, "timeline": { "events": [ { "content": { "creator": "@nheko_test:matrix.org" }, "event_id": "$1522842370112623guywH:matrix.org", "origin_server_ts": 1522842370396, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.create", "unsigned": { "age": 8760031 } }, { "content": { "avatar_url": "mxc://matrix.org/JdKiSOBDDxCHxmaLAgoQwSAHaddd", "displayname": "NhekoTest", "membership": "join" }, "event_id": "$1522842376112627lBkqf:matrix.org", "membership": "join", "origin_server_ts": 1522842376792, "sender": "@nheko_test:matrix.org", "state_key": "@nheko_test:matrix.org", "type": "m.room.member", "unsigned": { "age": 8753635 } }, { "content": { "ban": 50, "events": { "m.room.avatar": 50, "m.room.canonical_alias": 50, "m.room.history_visibility": 100, "m.room.name": 50, "m.room.power_levels": 100 }, "events_default": 0, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "users": { "@nheko_test:matrix.org": 100 }, "users_default": 0 }, "event_id": "$1522842378112631SMZXu:matrix.org", "origin_server_ts": 1522842378844, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.power_levels", "unsigned": { "age": 8751583 } }, { "content": { "join_rule": "invite" }, "event_id": "$1522842379112633iYqxJ:matrix.org", "origin_server_ts": 1522842379916, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.join_rules", "unsigned": { "age": 8750511 } }, { "content": { "history_visibility": "shared" }, "event_id": "$1522842380112635MjSag:matrix.org", "origin_server_ts": 1522842380953, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.history_visibility", "unsigned": { "age": 8749474 } }, { "content": { "guest_access": "can_join" }, "event_id": "$1522842381112637VVAcs:matrix.org", "origin_server_ts": 1522842381216, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.guest_access", "unsigned": { "age": 8749211 } }, { "content": { "name": "Encry" }, "event_id": "$1522842381112639RJdHA:matrix.org", "origin_server_ts": 1522842381350, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.name", "unsigned": { "age": 8749077 } }, { "content": { "disable": true }, "event_id": "$1522842442112651RJkob:matrix.org", "origin_server_ts": 1522842442143, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "org.matrix.room.preview_urls", "unsigned": { "age": 8688284 } }, { "content": { "algorithm": "m.megolm.v1.aes-sha2" }, "event_id": "$1522842442112652dsEBQ:matrix.org", "origin_server_ts": 1522842442325, "sender": "@nheko_test:matrix.org", "state_key": "", "type": "m.room.encryption", "unsigned": { "age": 8688102 } }, { "content": { "algorithm": "m.megolm.v1.aes-sha2", "ciphertext": "AwgAEnASZJwgOIzs56NQxMygoU2Io5ErzBHRjjyip3oQLX8YJaIOjkxr0r+8LHp3aBy1qZe6uL8/aDM2mGVOH7t918Q+3PnebNeniseyUaS2SBBuZ5ahOLxxPBx4ARXn/wx1PGw9h2Q1bsux/el/91nQabSP3/BZwdqWZTJ60M4wYVSEtGWaeIfcSp3OIvIwbnsdRI+vSVUU2Y+Mju9tkYTw2cBR3FeKoSo8E20Zohe5XDKtQaWKjWudhC0H", "device_id": "MRJSQFIBFM", "sender_key": "I5Uh9SWD6eZyM6WO1Ylms0iLWw6081O8VZFnp4OYyE0", "session_id": "I0BQWDfgQiZ/6bXj4Gy1NCHdX9Jb0KQ9cj7pk02vdoE" }, "event_id": "$15228448975390942fkGNW:matrix.org", "origin_server_ts": 1522844897577, "sender": "@nheko_test:matrix.org", "type": "m.room.encrypted", "unsigned": { "age": 6232850, "transaction_id": "m1522844896690.0" } } ], "limited": false, "prev_batch": "s494057840_423411319_1821908_113293863_47864708_266862_5484556_5263815_7649" }, "unread_notifications": {} } }, "leave": {} }, "to_device": { "events": [] } } mtxclient-0.2.1/tests/fixtures/sound.mp3000066400000000000000000001032601347137727200203240ustar00rootroot00000000000000Info6 !%%**//4488==BGGKKPPUUZZ^^chhmmqqvv{{9LAME3.99r4$PEq>Ca txr /7;=t5PՎN5 cM32۠P( (G?gÂp|(@‡ PP1 18>(sX>|\?|?>{ lÕ80ԃQo6sK65bp@h /\\\wDܹ`8> pN s`>!\# 1qkcHcpצL.hGVR 0( )1.%[CFj;~j4ß+GeqqPD]MbU9Kְre_/9jh^^s؜b$}ʿՄDr2b(ejz livd0PYWؑr@Pa@!S`aMX"CT^Kuʡ^RK!s= ñ$rpTN_R%VR6uX19n[ß3N_޿aqhzx8 &58K#/+IGzzi<9C)<ɢw$e0&`lWa"E1Drh &j%Ԗkd-7I7Ej6uuTgrPX! 5g5Kdcʔ 4W TC8C4. 9Bx4`D^>J sYP|ĭ曏Mn/wE˞6`.J^f8xb2vh]HҴdG{Չ2+1)A,M%D$Z"iP= C~9DOifQNEz q%˄g'S^ىS ~ý{Q־Y@jzt x#Af dFK|Q?V^yauQf qETD`8b7` @s 182d!"q5Ā/F_Gc.sPݥL{ea@pf'byTtm&.fY &nrHd_^'[S(kN>UNcÂ'j,ҥ0̇ j[~ɀ m H,4(#/T'#)a()$0d *%\qVѢײ +QZxRj_bXnfqB /Kxsn7ӑ9\N9ܫh4yۼ_O)_̬Q9`f`h)7*zɓ؂Ӄ Y'" M@űPiQ!ECC饜1+#Ri5#\$ٵwEVC=ADk;%¡P9cKѩ׎,8 Bz+d&``abah6+pD0 @cJ yq{Q/A&5}D\5!w+(} tDdbBBʊn[ (:76cHDHʃu~揖=UV2v,אov)/pl`w9"SLB6jH1eDKZ0!X\0s;#:VqWLmCzT(}ŊzPpyo(w@Fg;P 2Vz$(ҕ{ T-⮱-wu&؝HԕJWU7f?'h2hM%i2^zDOXé2$F<]bĝ"d>&b$`ˊ9K@+i8I0L±$74nf: ap,@W`r|EɥTKY_2P-v6TbIYU3|?kr u/ɔC)F`C;]Jd Q{P0XİZV7h *"fjfx"PywÈ +rEcV|,Hz >,qnѡ"g B( ]@1>1Lޫ1jG98KK,9nɌܶmjK5*+GA3 s@hFb} bjtzg,E"kn ښV%qKhA#%̛(SZi* Wd6+ET,60~R3Nt{Ŵ'Ɣĭ#NA֭ס2((-/J c/AfTm!#ez`2T_W~`9HH^0┪mg]+NmV%%z!H14^u03y/3K8]};4!IZبb_ؿ.c~zVI\xNOwιcΊDNmc1HL_GAFQpX;Gezֿ9--ij $"RH‡2 lD.pnKl'EQOXU5cٱQm5&\ùn{4='9mek4c]VIUKU {QA"B8( &jL(~"U<ܺӸQYBbu7)Jʦ~j`MEPA'@A ٺ$<ܤF`E@|R%d6jlU^6e/Nt(qwYT_ym,켆vKjƌDag\ݪ4 b2(`0'sc1k(#7@<9%LY p3 P2bHoTňDy9ȳ̙:yz}S+,u?%E @p%SPJ,?wpCf M } MPe1m98G]ܥL3N崣ntmp؛:x%]GvZ Md.)0c5J 22C00@LRߊ$X,ᵚV.&nTj *;P1:PiV=t#bbtbw%";-{=;ْA<'@wG2%y_?/'8$wmrL @2XLV=̅M)0 *e:u!1$/H(PpfQH81ͱApw,]GG&lC`z3,KmR18?ਸ਼#\`;Pɛ,1I8ԸW+Mu@,R@ H>5wlM`Āq" v"j-iF4#a-ZiPGZI,%aҲ֗Cer(s6fk/y,3^SkLf-꯮ Xs&$@\BJ|rUŘ*1ӁEnsNJ2jZ܅` @f'm~n >bŽ$ʖ`#3sܲ?^KNƿ&Y2QpmpL=U. )EG߳[(/Yd! L7jTӐ@BBCʺ^ Ml#֤}.h0{j%$E )璃jjrЪmZ@0ɶřUQ e엲1YՕY(W*O7IGY=JD#I5#i HHHf`h I ,o.kR~1 Sx1?22 f606r56~ D"~iIh6练AKYz};ZHӛII,TfSlȿe}/c;o<3v۫Ǫ-!= ͌el1C7 Fm pV02c ~b``Y BqłD29DmcZ}٫>ő[:ҟ=2 N1:WAiQx i2ow0BK4>hM'ͽwMshe q}K:.mHDjD ?#]D ϖ[.lpA$OѱK+4KMciJq[PP/ê!&=qTPW7]JLiԈ:eEdU;ĘKWHRɟ͗~dgE*b=iϜX;I"BNyd& exēP:b(*p++b*> Z@g^Έ £hCu=_XU9gi#ϏKRZThmK-M~ǿ+xOMB! ݲBJɑ #ᙘf~*U%#A7˷CJ eEeF [AHp\Aduѓ%}ȣT:Oit+|"^;X7mn?Z /knAA*cLk@ gd &eX ,? #Iq r3!´@7NV QsLQro:O ,{XpCs3kQn"ctHmGj 90(USА Ay()J zVhͮ]EW=W60ĢKl#]uD!' ~3,y7/ z}7k;KipÙ19$m#%ԙy1Z !]Ba& >r A"q#,pSICqa%o9e%Ȟ;d,+K M9J|j A)ެ~yC,3胞"!Y4tH6ZA@vDx"ؐi217MGr0w"@8(WB20Zj'O[jUlK_ H⃙TOG0 S#3y#|ٵvyJ2!u9ԜKr \Hr#D4C(3PAP86⦃& 6)^KkRƭh5Y 1T F 'X5!fdbÍ숛r;}Ǿ[ˡrڞ`:A$ 5.F~ޥ,-ǵ% $ ; cu<;IjԂ'XZ s֎;l0嚖a'hLt0zg"zU1 M.l_ne'Tg¢VԡWdZ ! !1l+Gd uWu,n)(eTD?gu˦,R\A1}ilÙPT5p&gu->7ٝ X*Z1;22#1NkZkNW%ؒFxSVKg|sEi˝B:dhL9#*A0%0mb5`!s.i)2V2>(-C]v(L*H5/R#"3Pˇl/[y$0xX֕Eek}Q "Wh@&-PT/:^v^i4^SgMx*69;7~5q*BL׀(PPͱ;: b  VE\̕I&VlP*5{[AYB"7rvJ*3 /3{@d+`bI[_ |$`ɤ/eb45!v%KƜ,R Nň'M*x&eIKz}i^tGt"cE[[[`mqAkH~)p}7q"g5 `U=a㠀̊4@<4BLw*ڵqI1&[OcmY]/CQ\Zʡ5]5= r@-sq@|2P+VD;%gm0Gwܟ޿<̙}&perEPt\(bAP ҀMMklIYm]30o* 5, <_&ᾨeLE٥TjaX(LENP$,D'<*)8h uAFb:mI2AYlEU--ϟygSn~|( #MDsP,D 4 M1@=HpщLeQINKDˊFRg}†x&W&m-J3% 3~+Az-J*@@ 0p!tl0"+RQ)EYId=@, pJ(2&fAQD} JOGycN{dWih'ukRY4ҙ':h5iYy(}%NnR߯b~uo/|FV2a75{0׬Kn4وm 9! xNhOJʇIU ;2~y%#* M\zKT [ppd6hOF #IKv̩x.>"EkΓaє^Pp+v\_1H.HpPJ Q@7g!BĖS0!?8h 􀄜OkȜIIkPe+3q*_d%9AeG^,`D |z/aE:ɂ/pa&7!N9ûeHy9}fUn*.o;J.|KX` f e/fK6a~&Gx bRʤNMLSرx=+fU" J( @bܝ@gmc5mB<;/ÅH2nd$V,F#6ߋjB;xzS?hfG)!ú"lg L pCQG$ $H9LAUa~<1Ҥ@hY#`mc%8MgJ DTsWM"|~nñ4.r$A  -@sP㐼CҐ<+`\NqUy  '9FHɛHI2HвB&d wha -Y09;0kUL|" V#TfVS#?8z/D˾|#km_$xp1u@=dK2i6-0H@@wG hgR+obxԚ ! W;ֶ?T-RƔ$(8ώDfǁE',D^'5*\rlnhgV֒<܍ۋ|T#Tج6"簠֘B*[ptj+k ^1 `$c:J~cmhK`0N2)lwe?ԙ دMH^A[C. UoJ`=9P39eQE Ҳpm״]"5`{=̥jQ%Ԋ@hsd]ޫ;芳7E˭h16HPL`N:85o`g gP)H:%XK'Rnd8UA.B"fYdg\5#: kDk^sUlxO1WP@CK4@aWa@A&.Wa jBDOIѴ?*03Pqg>>140QSOApvwAY;00bvjA} ԏCyab!(XiwF(tCkZX Ā!\I2%J)FuԜnH˦`y,tÚP /0m&}č턇PG4XBFi ibjFdLCd~%m0&A*TѢ DRJ,qF2>.rȉ  4ԝ;ԤR뺹)8*f Ă@ .#؇rZa!a՞6}& M.Fh%hy\qb pn9U3wra@ aR+3Y]k2Cɗ 6F-RG"˞^QJpT.av=(B"(A`Plp0 076hb1ԲUy)2bEپ& T㳕COo7ZE!:nz3N?OPׁZ!8cJm9O?7}_6w$R )D(T0r!,e4c Nl1TҀ3KC`N|hjOP4 Tz9`y@pSc{Qu59N$ed/\tƶ}Ʒyo֕yCi,]zXmD.Q' l`wG˩қ.tèQ81$eu f^q`Vk5$pY&$a2vvg~śam%:`0 0-}sɁ7 h3رU%L!1[(UcX䄱=A~^qU&S}8%ЉtFzNLY>6u=/_v"'?8;]*dM|`ҶmCeqSQĊW@0cmJaAl"tXatһϣ:d*W"Ä[^':4g)f#Fk1pV>$0E!%1XV9zkfeT]`֓C2U'ks/;nҘ1o ó^f`8}ԡG)Yf˩rxæR %S`'$%ܘaȈ5] qH{o;V´$-Y$N"ӦIwc%9TC%33M яKw/3+P~i_u0ctwn QYj4n*݆ywWE G@5>=)Tz~$8Y6G140+DQv[JOqtxFPH6aYs3*vWHHDlS5Hp&G+sKM󗦜K9XiP`vc[@mɆ2`?D0ŗxu^ׄǀ/O(QFB *B/`K3yu[RFql)ɉ'c 5TZaˆ!cc9?{UwTk؊u6 Dr_ Hx;I[j?]Kr_fH ^9#2 ^k-ܱ*-U1uj؜}!P0 ,*DAHd#ͬ`BDth$sjE/ۣ>/uFE `n%k$" @PL.yEӎ;S/EL BQ"8 1yYc Ĕ͒_h%e%9ՅńO$',"&Mn,zL]}r/vZ1) y{~fܥ-zJ$DT(0 "ѰV\`dHRDP@\3 EcB7YTkÏg^Ʃ5Z88q;+Js'&ՎaD6JElLCקE?xr+l},24nb9bT"$0LHKbItÚ)#NmE1$eq9b3m6P ( B"ŊC0bDg$4RB'ZPLsif`ebN̸6\hPZz\xb;icgKye?>S"b旾NYzRαsnn\*@ZͦD"$``CMFl>A,Ũtd P&M 1'oxlDFLR51qy5uwd6\Y0g T`IPeg?&] `4aT L4 e,Q;{o[c$DNɉ~٤j]'f:dg(-J2<]I8X/*Vn^R1El_͌Ȍ/?ē q܌ti`xC, )`XLatbwhpRa@  `-Yw`<0R@ R2iu0AHs s 1MG&:Eɒ!%U_'&T}rts?d?ÓM{Mgf|S;Ȑqd@FE'F{DOPؒ(u#zSM.qJu<ԍ&@pP@D&\"DlD5%2ʊ'rV)(Oܨ/jONB@B6De鞛L_L3,LiϮZLfr[MJgCL,9i!5A%Z~cQ 4 "KМ$@9I2CaRrr@Z k\*ADIY᎐v\$Y@g@̮V)I%M0(ML !fGf A@*McC28EIGɍ.S֚MՎb>JZ{4J(UY +%ߎ%H>R,c92Lc2e-RoX@>Y Յ!hkhlìU%pmOY>GX5iPvL(! Qg&*ɛZm׻yY<޼vA񷶷G>)½m4y߱NqWHN;qr 4Ȁ#D,/BKk؇im}Twʃ;# 6cݩ U"t˲D%D@96Y \wc؍Jѽ>NrNNAuJ.0%tX$jhy58RюT8xdEϧrӇK?~$m&*CA5m;Ԡ_4BA2ـcԓB8u1g*5̫n6y&Y3ŽFю{s5 4?f#Քr Lqά)}L7z?q !#AhVWuŇR2I^ԭ;"JCue@1mY;j!rd !d UCf.ˑ,I.kS˅wmZ_tzaꓻ:hmų+9voӼViu*πd0 9@InA/8`DA!22..2Ʒ*oCqiNj0B":N\kwBTL۔sYO'^S#)!l[XKcq󷢚g̽k빊ZGZ9C8a'KPH3bcxmkSaodq [>5sǂʪ*X82ğj.McW b%haE!6O$7Գ.X.ط1ܛx~g-7L^4ky]_tdFc۲*e,eI$8P.S {B/)GV\G!U٩Y,?(*eU0s#JF+NDΒQ[J>~ʩϺrzmi9S&b-_{ߟ3o@ RȂ a L.F+(PB0 82>Dv2WIK0*\p×q!.pi;ԍ65. Cm]XHtt.PH4gWFdC$LVU8l=L)+Y O08 PZ><]W> ]<SE2\fn1u5Mح$xWgL[Gei6D!-3le IF)BfBVOKfHyllÛ.mJpԎqT Hhp3AeLFQ; iW\."6xhQҋ ͵~}eSo|5^(5Cf[Wߍ=ީʚ?dPof̥ԛIz^ Ɏ 'jN]8hj< 0# <8;-,|˖[짩1@Vsju9HC&Z~2٪᪡u>)l pua3 k@HU)1:&IX4!8j [ɋhbT񜀉ѥ0f“ǁC?Z_B;㲤jRՒm%g}0֚ieZ #dn]n>q8՞"syKA ܇:ebYg (1$O#IAHLù,gCS OA,u!|>#quԇF(= 4+*Ms3=~eWtzgwW(R;'<iuz!,Lw@008?1E 40V4Jc1H9mqgmieqJd VeH^|bXh RѲa L[R8\4Ya:yw{iӋUQ͚i1|G޹QPfh\S|\^O=5xXr،reK ( Vf D@sD#@2V$AhJf2ދR 4&OF(qeYK4%҅JkX̷"*@l bn#IBR|*L,F@&Աe $•%}LۧPjή9=[EZ ./g*C取ڗĒ +̈N#yja|CGcz>ɞ~nևVBdped&XБUoB 7#i#b8S.q8AݕV[W捻D&k?"N?*D;먡. YąƒC ;'g =g+a%%RЭ(جh]DP]EAZC"dw>}B Ydqr*@DpvHЙ(ulP#+o"#5*bˠTKŃW )c:n!pD qAFHsAJ-+9 2) q8FLuܗ+jƓ8# %N "τ^ "E|H 0%NZeA A ;YS8t0mf}!z !8 pujQfY33Q]EF$:e-5F3O!v,sQu0bu#Ί̈ _wf&[6rn9E6N!sTSM"IK4),>aqc8hqB=½2+S<)Wv uJmcHNc DSh'rNΠ }{ QUU% "@ _hy"bw궠. (p\ d..XI§6~t^u%+%p|CuH^d?gl5BA#2d\pu:, u4F z I߇ hH, tÜQ%+5$o5)f5uooeOzg0 ?P5$AiK%vChk61ga ώR~5hX&Q5}|ONd 3εwz&n2{xDU cB2qb# "5@0B0Z1hu*I^.NTjI( #Gŕ=3 ]1|[ȼt*u@/^$:lOB&,$OL<_IħAe`Gb;q+wP`a`PVD2HbB /< hԶeb1kot%3F[58]F,[J=8UA!ɏ!C"e l,h)VO-AVuʕP;Q ^mĦZ?޷,Nh_pa %m@<Aa.W)ִQz<1->W`gAL`$vbpϧ4(B:USL؋ƃL"1[czd㔅Br`m m{1J# .P ,2@`[f4c!yG3šq#Qu/-s6%%4+_Kto/(-=%BQ \dI3KPrXoWۘzbKA5-Z'7, `F%^O{/P`!@d%+D2Ȼ(T HKh<P3H,S9ޞ`COR.@2 "$hx)0@[Rze:U'l"zj'tU$#ɪFB;)tYSqgie}.DV(3zV1@#H$h1 70Cfe^* ϣ-Y< 7 ,LE%%4ĝ f=I2}(B,Bd!rG3Tvj^V!Y0g1isGsb3S+1}nug \t`q8 &1`AJP*QvZ`?%lPɱi*}^e Ne=S;68jq0I#*n=u1C) 1(GIyWDss43/s7i*]QR#jh~ . MP aNUHcb(u#|S.0m]7% yF4)vgA*S"K)7^YanBF\SF-,֒xeȌsRӭEON;r3(!TfFߺ~E]hκjkC0 kDbIUJ)Rf &-J%u3O aK8y]FXL\;^, , mum ^W%ђa䐲rmpQ֭-3'c:ލ~? ||K#MiR X~It.8XV8-^yobQ|0@҂ML0 7 0j=H+k>Ԑ;2S2_YBxWvgVٳpiK~Lp(̭S* Y43/}("T+ ĦqKT;K)YH 櫪FhCwn[E^5%{gigi#Ұnn~R!dDύNSS/ ^eߥ>Et#a-&Kv|\KƞJ ѽ2xGˌBp¼Pu30n,5mDz6 b2Xȧt*zz ,A<IQw8r$R^̕-5ȋ!I˧/͋TJLlzj.Q,+_@bX0<)2Bm$Σ4ݝyܕ; @izӗ7K6 :G"@ FL  R;T&=Ul ͊Scjde;+2^OXM^!6W8+ n0 $@D`E\nm->$Y֟\01z"mi,u3&yBSϷ\t~ϟ2YZ6Z KR"9k[;tԓz+Jt#Di4ǹ Z1{~C R񑑚"&X#|@ْ"" Dũg5 *iMF:K ֖ZrKQ̡ʋ*+,NdHn\^>EBW[z,4cRt&;#$%Ea*\1@0*AP)zGC.tŮSsBZ;q$ kX@ 7#/j vK%oF1?qF&EĦ9=5I"bjxWf~/mTnNGÇȭBiޠ,wu3,VZvIs8SzPτgK!.7EdTFY6X#>P'\QYS@/8bESbV(.s[Rs9قLϖ)ŠDIb"@0899&J9dFr2\'32XR< ӸPfjYhxj}KEd$(qgPdfMAVFBQEJvHO8-YA >$P8yٟK_E֭ƽkhHH7m;U4!g0CbC-m/~c}E (de}P!F?/ }e5{5T+>Hp!tꑩd>JqF$oU))$0`j2V娻<ً9feQ3ޔqZpYKz\ijd;K&2r%34͒àrJDZ`55, fc$%(`yԄXbiiG#`4X蹅c1yEevXXoRE GtLYxO[T\b9cegE{y+svzP3"4E=d6B0  &0H.)xP *0<ʎq.J!9$F|9l -bI&< ~DYLl Fݒ4P1UZ |Abuˆ,qnQ1q)e=bo30 VEz逄OXV:T,O"Bd8l*?SG1M!F=QIN}ፘ2*ܖ_i4.0T]\s 7"*$ݣ0Ֆz" unW:S* ga 8Y5d ؜/anTcO¦*5/L{]=If网)tzƶ|y#Kh;=@G^ie2;, h`kp XVf<[`vPi,%  &FʣҖdmdT-s>z$ ş3'K\\>q^yPvd˙/uxs,_bZU]rI0Df*< kSF*T#Zbf2H{سi^UK;QN-99}p!2Pՙ0_^.R,u~Q>_2B!{ oWe@]iEzC #( $a&: c'i(m8 fR@ nJK{Ǎy+]XđҨ5 oWV,C )ZEWJY3[T- ZWG:u?;8I\>jfUQ- i(/?)І:$ P2 ljb˭l)&SrL sTSDDXlPvESB>Ds'Spl\5{PCJL APΈܿ۹2Y/JW߷,慱0ꋬw)3B[@zR!X 0\$@!IF77GRm0wf❏lÎR.$oG:d% LPjO{'~ >=hd{؁[*e/Rk %; h#'30ݡ"pp t`hJE3R)*oφ| >M;Ȯm|\AT :8"&B`i9i d)3\!Z!>U3̞G@@%\00L * G?WA,m:p;uT[+$\jT35AЈ:@Q3)0Ut+b%Ok&v, D)6&Jkr_9&jR2Ź f h7낵 E8QB?{ع#6u#*A\UA{!G2CTS"7̣s3BK#zT`rFDD (j9_$uH mȣ\h Ea$* Cq$}$F,u;Sy˩t3ʨ¬G'*XJ\ ZV]#W>ksHhxHL$rg8%,šO$Mh[-) !mFɈ-5uˌRHq#z))$o)%1,%ot`xiJ(itIUcivYDPߏɯaANHw fЩv[̤eqTrAҦW',yCyvW<ƴ}Xƃ @%^D6aK#u 3I7а#HU2_VG1GCJ $]7M JF+ga `LQgp*HIٖ_ Y)Zu''W.IK7,&9iv$ͽ9,+VU\@ƣky%>.qq)GiV0%b9p}ԌArnIJ[*Xu%(W10BUM*#xޮڢ0C<%c;$,:f5iF;swGMiIb6# ǀDbg8x-lL͔as,Exa,#a1 ~+ד6bGrک\YWhTdWL๿&{Ǭ?D wIkI6q?=V; I3V'{+>ںǶ6>5hr^4U I A}{GoSb׍*Q+[q<$R& 5T* w1eܓ;U/I_CF 2(N-%U*Rx9$6f`Gj] -M9ԓIɤL1DĞa@cI"%,Q& "G$13Bd$u` u#u2L)T]5Cn8<Cz&eI B>1<D9\*!u=p% =Fկ쪕A RIVN餦LeQd Ks hURGճ-Q8 ,t %RHv :! C؈0LEAR$dR;cL Q$wMa( YXX2\~kro;^1{ Yd=)鬏=l/J( þN["Y!o{@P&gH oP=@D=?k Z-ӱyAтug8X~hفG7 `H W.3J8!+8"RI&Қ<82?ȩL#!i`ۛeJ-FE*Zz2|b4;A`I,jV0qln ayND6!TiR ?Լtٌ>^XS5{[MEyOXDTڙy'Mj{r$iSn#??oq[FWќqa.USaz4|DᖏT*8(hLal?/׾珍'6zmc!H,KШ|.?AWAt^i~wmlvi>}Mqqw7$'V*:Kڐj\1n(@Qq!3SƉ]O9 a?giS?۷VoZiG(VI6u뙣- ~]+]g/s6/waBdmVrӚR^fWMmngS17{?~ЍW%`'2:M EQD7dlG)`0-h- PI0WLמꚤOWr6Li8r@][ǜz?|B$k+<4qv"ۛHc"verTL#u8SsN#%Za0jjճS"bd"Jue__S1̙l@0yRI !.tRy;l՛_cl8E}8Ĭe&|O@3arj-73:<ơ)<ƋPV#uN @1 ǢI|8iA#Rcg3+.{E6aA&Rxgxs9{oqwEe¯P.#*nb[cvY5uhoz@vOhoyԽ@?:_ܣ?I&&*ˍ3UqCԈ׺ͧff$1S.Y̬s1~ Hϗnnrd`P,PU6V1}Ռjhmq.zѬ%DD@U GEVW /7]>1xzonI-, 3;b ())GdW.qnCI^ xqQ6.c!N"D_\pj9Lk\ky[s"څLΡ]8PC a4#B ڡ5hk Vdԙi5&MaCXk2kKjjL,*F[3\Ӥ%.frz&OG(l 4j3[_\lmzե޶Ĺ3n*1/IEd*k`r],I̊ Rv9b:LAME3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUmtxclient-0.2.1/tests/fixtures/test.jpeg000066400000000000000000000073311347137727200204030ustar00rootroot00000000000000JFIF  )  )/'%'/9339GDG]]}  )  )/'%'/9339GDG]]},," `7;~o} *Lnc)(zZFNW2Y3hǮ-䩟ݦEP݀CME[.>j߽gj4b{~ô |b QJ}cq"[)?}w lE1:Rr"<%Yb/C(fr=\|LAu lE1:RtTQ= 'ax_CQE*wEHז~Ԫ9@؋+U<:RGME2ΙxlyYPPV*q.YwM V167RUrtu !"0345AQ2Babs#$q@S?.O M g'iDlRu2My}7*gTnU5iΨܪkQTם:r;O6uFS^v|lʦ>My}7*gTnU5iΨܪkQTם:r;O6uFS^v|IN9J7#8ĺAT DZߤLj+L!0EC4Z>2Ud `))@wv&f%Uu"H&\c16uEK^v|lʦ>My}7*gTnU5iΨܪkQTםm-?0Fܲ*i%0CzX  (Ǥ~[3IM& q.Q797<&T]U Ps1*d,|%͠;|k{"WEFr}t!X KXV,fBAuit -F(zBzznךTxqb7Gהݝo\\@Xl >!U)Y4HM,0!fݡP(D-DN-lM%U5c P:w rĭ6rTI3G#k-|sf'+:j$u^bMPI7>u7Ě%#b,JI'م%W~:e>R*;W Ucek68T,$̢"j$jTuT*G bX\Q޺SIl@XRk7)Ò 8 DQ2"(V:myu#>068j٨*&}[[ +lqxn..ޭ??OsDt-炪^{zxY' ݘbkWZ,ȼ*z_ :&WoӉoiBp_Mj3yU,YI#B9l&g!S Ohvig2%:IEH ^,x42-6,x5r-6,52JQ 9p0@Ba7+F_NRo j?zUKMt?{cqsǶ.r8Qk:f$+EyaQ)'d1Q4T=UHIlLӗ7UDN &`1GQ^FI#8nM?a^Y<2fR.T8O0P*&/zi5,I$'%wAYYB& . .Ê aiP  X^PŒU+NEV_ 3 C4mpQYI}Et>ej*]Es%3,LQG4Ru WM3= :T18F^aa-m1*;yપ^^_ĺ|@>K{L`hu.J 5.q*ҘmnY#ɩ.!/N;ۋ]6"8Q-뙧Tp@Ä%W!/+F_NRo jj?zUKMtķ!8o /&xY{+ްKfmߧ ܰbI." D0.fG7̑Y@󸛉P%UgVQ)Vk-}Rh߾Zc+۪U-WGU$M광]b)`,;Z}v2QLI $|7^^_ĺ|@>Cp%YR(`i_93+#5e|xf̯ĥ|y^t1pyk" %8cCZk'BbU4 iBQE:9ÄDbɬH3|hL }Nqfw !6%KQ pL*Ls0M+۪U-Vf.֕ ălT86VجmR9mX)UY&P]Q:`0xcϖ:&%eLʾK,Dל2D9Uk]k6VجX?G8>$KI T1s?4?4mtxclient-0.2.1/tests/identifiers.cpp000066400000000000000000000036101347137727200177110ustar00rootroot00000000000000#include #include using namespace mtx::identifiers; TEST(MatrixIdentifiers, EventValid) { Event eventid = parse("$39hvsi03hlne:example.com"); EXPECT_EQ(eventid.to_string(), "$39hvsi03hlne:example.com"); EXPECT_EQ(eventid.localpart(), "39hvsi03hlne"); EXPECT_EQ(eventid.hostname(), "example.com"); } TEST(MatrixIdentifiers, Hostname) { Event eventid = parse("$39hvsi03hlne:22.23.112.44:8080"); EXPECT_EQ(eventid.to_string(), "$39hvsi03hlne:22.23.112.44:8080"); EXPECT_EQ(eventid.localpart(), "39hvsi03hlne"); EXPECT_EQ(eventid.hostname(), "22.23.112.44:8080"); auto t1 = parse("@39fasdsdfsdf:333.22.22.22:5000"); EXPECT_EQ(t1.hostname(), "333.22.22.22:5000"); auto t2 = parse("@39fasdsdfsdf:333:22:22.22:5000"); EXPECT_EQ(t2.hostname(), "333:22:22.22:5000"); auto t3 = parse("$39hvsi03hlne:com:109999"); EXPECT_EQ(t3.hostname(), "com:109999"); auto t4 = parse("$39hvsi03hlne:[33:ssdf:sd:2323]:333"); EXPECT_EQ(t4.hostname(), "[33:ssdf:sd:2323]:333"); } TEST(MatrixIdentifiers, RoomValid) { Room room1 = parse("!39fasdsdfsdf:example.com:5000"); EXPECT_EQ(room1.to_string(), "!39fasdsdfsdf:example.com:5000"); EXPECT_EQ(room1.localpart(), "39fasdsdfsdf"); EXPECT_EQ(room1.hostname(), "example.com:5000"); Room room2 = parse("!39fasdsdfsdf:example.com"); EXPECT_EQ(room2.to_string(), "!39fasdsdfsdf:example.com"); EXPECT_EQ(room2.localpart(), "39fasdsdfsdf"); EXPECT_EQ(room2.hostname(), "example.com"); } TEST(MatrixIdentifiers, IdentifierInvalid) { ASSERT_THROW(parse("39fasdsdfsdf:example.com:5000"), std::invalid_argument); ASSERT_THROW(parse("39fasdsdfsdf:example.com:5000"), std::invalid_argument); } mtxclient-0.2.1/tests/media_api.cpp000066400000000000000000000171551347137727200173250ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include using namespace mtx::http; using namespace mtx::identifiers; using namespace std; string read_file(const string &file_path) { ifstream file(file_path); string data((istreambuf_iterator(file)), istreambuf_iterator()); return data; } void validate_upload(const mtx::responses::ContentURI &res, RequestErr err) { if (err) { if (err->status_code != boost::beast::http::status::unknown) cout << err->status_code << "\n"; if (!err->matrix_error.error.empty()) cout << err->matrix_error.error << "\n"; if (err->error_code) cout << err->error_code.message() << "\n"; } ASSERT_FALSE(err); ASSERT_TRUE(res.content_uri.size() > 10); } TEST(MediaAPI, UploadTextFile) { std::shared_ptr alice = std::make_shared("localhost"); alice->login("alice", "secret", [alice](const mtx::responses::Login &, RequestErr err) { ASSERT_FALSE(err); const auto text = "This is some random text"; alice->upload(text, "text/plain", "doc.txt", [alice, text](const mtx::responses::ContentURI &res, RequestErr err) { validate_upload(res, err); alice->download(res.content_uri, [text](const string &data, const string &content_type, const string &original_filename, RequestErr err) { ASSERT_FALSE(err); EXPECT_EQ(data, text); EXPECT_EQ(content_type, "text/plain"); EXPECT_EQ(original_filename, "doc.txt"); }); }); }); alice->close(); } TEST(MediaAPI, UploadAudio) { std::shared_ptr bob = std::make_shared("localhost"); bob->login("bob", "secret", [bob](const mtx::responses::Login &, RequestErr err) { ASSERT_FALSE(err); const auto audio = read_file("./fixtures/sound.mp3"); bob->upload(audio, "audio/mp3", "sound.mp3", [bob, audio](const mtx::responses::ContentURI &res, RequestErr err) { validate_upload(res, err); bob->download(res.content_uri, [audio](const string &data, const string &content_type, const string &original_filename, RequestErr err) { ASSERT_FALSE(err); EXPECT_EQ(data, audio); EXPECT_EQ(content_type, "audio/mp3"); EXPECT_EQ(original_filename, "sound.mp3"); }); }); }); bob->close(); } TEST(MediaAPI, UploadImage) { std::shared_ptr carl = std::make_shared("localhost"); carl->login("carl", "secret", [carl](const mtx::responses::Login &, RequestErr err) { ASSERT_FALSE(err); const auto img = read_file("./fixtures/test.jpeg"); carl->upload(img, "image/jpeg", "a name that needs to be encode/d.jpeg", [carl, img](const mtx::responses::ContentURI &res, RequestErr err) { validate_upload(res, err); }); carl->upload( img, "image/jpeg", "test.jpeg", [carl, img](const mtx::responses::ContentURI &res, RequestErr err) { validate_upload(res, err); ThumbOpts opts; opts.mxc_url = res.content_uri; carl->get_thumbnail(opts, [](const std::string &res, RequestErr err) { ASSERT_FALSE(err); ASSERT_FALSE(res.empty()); }); carl->download(res.content_uri, [img](const string &data, const string &content_type, const string &original_filename, RequestErr err) { ASSERT_FALSE(err); EXPECT_EQ(data, img); EXPECT_EQ(content_type, "image/jpeg"); EXPECT_EQ(original_filename, "test.jpeg"); }); }); }); carl->close(); } TEST(MediaAPI, UploadSVG) { std::shared_ptr carl = std::make_shared("localhost"); carl->login("carl", "secret", [carl](const mtx::responses::Login &, RequestErr err) { ASSERT_FALSE(err); const auto img = read_file("./fixtures/kiwi.svg"); carl->upload( img, "image/svg", "kiwi.svg", [carl, img](const mtx::responses::ContentURI &res, RequestErr err) { validate_upload(res, err); ThumbOpts opts; opts.mxc_url = res.content_uri; carl->get_thumbnail(opts, [img](const std::string &res, RequestErr err) { ASSERT_FALSE(err); EXPECT_EQ(res, img); }); carl->download(res.content_uri, [img](const string &data, const string &content_type, const string &original_filename, RequestErr err) { ASSERT_FALSE(err); EXPECT_EQ(data, img); EXPECT_EQ(content_type, "image/svg"); EXPECT_EQ(original_filename, "kiwi.svg"); }); }); }); carl->close(); } mtxclient-0.2.1/tests/messages.cpp000066400000000000000000000347641347137727200172310ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace mtx::events; TEST(RoomEvents, Redacted) { json data = R"({ "unsigned": { "age": 146, "redacted_by": "$152135702813129HltcO:matrix.org" }, "content": {}, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "sender": "@example:localhost", "type": "m.room.message" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.unsigned_data.redacted_by, "$152135702813129HltcO:matrix.org"); } TEST(RoomEvents, AudioMessage) { json data = R"({ "unsigned": { "age": 146 }, "content": { "body": "Bee Gees - Stayin' Alive", "info": { "duration": 2140786, "mimetype": "audio/mpeg", "size": 1563685 }, "msgtype": "m.audio", "url": "mxc://localhost/ffed755USFFxlgbQYZGtryd" }, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "sender": "@example:localhost", "type": "m.room.message" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.content.body, "Bee Gees - Stayin' Alive"); EXPECT_EQ(event.content.msgtype, "m.audio"); EXPECT_EQ(event.content.url, "mxc://localhost/ffed755USFFxlgbQYZGtryd"); EXPECT_EQ(event.content.info.mimetype, "audio/mpeg"); EXPECT_EQ(event.content.info.size, 1563685); EXPECT_EQ(event.content.info.duration, 2140786); } TEST(RoomEvents, EmoteMessage) { json data = R"({ "origin_server_ts": 1509878682149, "sender": "@mujx:matrix.org", "event_id": "$15098786822025533uttji:matrix.org", "unsigned": { "age": 626351821 }, "content": { "body": "tests", "msgtype": "m.emote" }, "type": "m.room.message", "room_id": "!VaMCVKSVcyPtXbcMXh:matrix.org" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$15098786822025533uttji:matrix.org"); EXPECT_EQ(event.room_id, "!VaMCVKSVcyPtXbcMXh:matrix.org"); EXPECT_EQ(event.sender, "@mujx:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1509878682149L); EXPECT_EQ(event.unsigned_data.age, 626351821); EXPECT_EQ(event.content.body, "tests"); EXPECT_EQ(event.content.msgtype, "m.emote"); } TEST(RoomEvents, FileMessage) { json data = R"({ "origin_server_ts": 1510485607737, "sender": "@nheko_test:matrix.org", "event_id": "$15104856072749611ERqhw:matrix.org", "unsigned": { "age": 31, "transaction_id": "m1510485607454.1" }, "content": { "body": "optimize.pdf", "info": { "mimetype": "application/pdf", "size": 40565 }, "msgtype": "m.file", "url": "mxc://matrix.org/XpxykZBESCSQnYkLKbbIKnVn" }, "type": "m.room.message", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$15104856072749611ERqhw:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510485607737L); EXPECT_EQ(event.unsigned_data.age, 31); EXPECT_EQ(event.unsigned_data.transaction_id, "m1510485607454.1"); EXPECT_EQ(event.content.body, "optimize.pdf"); EXPECT_EQ(event.content.msgtype, "m.file"); EXPECT_EQ(event.content.url, "mxc://matrix.org/XpxykZBESCSQnYkLKbbIKnVn"); EXPECT_EQ(event.content.info.mimetype, "application/pdf"); EXPECT_EQ(event.content.info.size, 40565); } TEST(RoomEvents, ImageMessage) { json data = R"({ "origin_server_ts": 1510504294993, "sender": "@max:kamax.io", "event_id": "$15105042942524OGmZm:kamax.io", "unsigned": { "age": 738977 }, "content": { "body": "image.png", "info": { "mimetype": "image/png", "thumbnail_info": { "mimetype": "image/png", "h": 302, "w": 474, "size": 33504 }, "h": 302, "thumbnail_url": "mxc://kamax.io/IlTRDmpGMPkiwlyYUpHXSqjH", "w": 474, "size": 32573 }, "msgtype": "m.image", "url": "mxc://kamax.io/ewDDLHYnysbHYCPViZwAEIjT" }, "type": "m.room.message", "room_id": "!cURbafjkfsMDVwdRDQ:matrix.org" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$15105042942524OGmZm:kamax.io"); EXPECT_EQ(event.room_id, "!cURbafjkfsMDVwdRDQ:matrix.org"); EXPECT_EQ(event.sender, "@max:kamax.io"); EXPECT_EQ(event.origin_server_ts, 1510504294993L); EXPECT_EQ(event.unsigned_data.age, 738977); EXPECT_EQ(event.content.body, "image.png"); EXPECT_EQ(event.content.info.mimetype, "image/png"); EXPECT_EQ(event.content.info.h, 302); EXPECT_EQ(event.content.info.w, 474); EXPECT_EQ(event.content.info.size, 32573); EXPECT_EQ(event.content.info.thumbnail_url, "mxc://kamax.io/IlTRDmpGMPkiwlyYUpHXSqjH"); EXPECT_EQ(event.content.info.thumbnail_info.mimetype, "image/png"); EXPECT_EQ(event.content.info.thumbnail_info.w, 474); EXPECT_EQ(event.content.info.thumbnail_info.h, 302); EXPECT_EQ(event.content.info.thumbnail_info.size, 33504); } TEST(RoomEvents, LocationMessage) {} TEST(RoomEvents, NoticeMessage) { json data = R"({ "origin_server_ts": 1510435865515, "sender": "@_neb_github:matrix.org", "event_id": "$15104358652239178iCnZy:matrix.org", "unsigned": { "age": 69168455 }, "content": { "body": "https://github.com/postmarketOS/pmbootstrap/issues/900 : Package nheko", "msgtype": "m.notice" }, "type": "m.room.message", "room_id": "!BPvgRcBVHzyFSlYkrg:matrix.org" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$15104358652239178iCnZy:matrix.org"); EXPECT_EQ(event.room_id, "!BPvgRcBVHzyFSlYkrg:matrix.org"); EXPECT_EQ(event.sender, "@_neb_github:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510435865515L); EXPECT_EQ(event.unsigned_data.age, 69168455); EXPECT_EQ(event.content.body, "https://github.com/postmarketOS/pmbootstrap/issues/900 : Package nheko"); EXPECT_EQ(event.content.msgtype, "m.notice"); } TEST(RoomEvents, TextMessage) { json data = R"({ "origin_server_ts": 1510489356530, "sender": "@nheko_test:matrix.org", "event_id": "$15104893562785758wEgEU:matrix.org", "unsigned": { "age": 2225, "transaction_id": "m1510489356267.2" }, "content": { "body": "hey there", "msgtype": "m.text" }, "type": "m.room.message", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$15104893562785758wEgEU:matrix.org"); EXPECT_EQ(event.room_id, "!lfoDRlNFWlvOnvkBwQ:matrix.org"); EXPECT_EQ(event.sender, "@nheko_test:matrix.org"); EXPECT_EQ(event.origin_server_ts, 1510489356530L); EXPECT_EQ(event.unsigned_data.age, 2225); EXPECT_EQ(event.unsigned_data.transaction_id, "m1510489356267.2"); EXPECT_EQ(event.content.body, "hey there"); EXPECT_EQ(event.content.msgtype, "m.text"); } TEST(RoomEvents, VideoMessage) { json data = R"({ "unsigned": { "age": 146 }, "content": { "body": "Gangnam Style", "info": { "duration": 2140786, "mimetype": "video/mp4", "size": 1563685, "h": 320, "w": 480, "thumbnail_url": "mxc://localhost/FHyPlCeYUSFFxlgbQYZmoEoe", "thumbnail_info": { "h": 300, "mimetype": "image/jpeg", "size": 46144, "w": 310 } }, "msgtype": "m.video", "url": "mxc://localhost/ffed755USFFxlgbQYZGtryd" }, "event_id": "$143273582443PhrSn:localhost", "origin_server_ts": 1432735824653, "room_id": "!jEsUZKDJdhlrceRyVU:localhost", "sender": "@example:localhost", "type": "m.room.message" })"_json; RoomEvent event = data; EXPECT_EQ(event.type, EventType::RoomMessage); EXPECT_EQ(event.event_id, "$143273582443PhrSn:localhost"); EXPECT_EQ(event.room_id, "!jEsUZKDJdhlrceRyVU:localhost"); EXPECT_EQ(event.sender, "@example:localhost"); EXPECT_EQ(event.origin_server_ts, 1432735824653L); EXPECT_EQ(event.unsigned_data.age, 146); EXPECT_EQ(event.content.body, "Gangnam Style"); EXPECT_EQ(event.content.msgtype, "m.video"); EXPECT_EQ(event.content.url, "mxc://localhost/ffed755USFFxlgbQYZGtryd"); EXPECT_EQ(event.content.info.mimetype, "video/mp4"); EXPECT_EQ(event.content.info.w, 480); EXPECT_EQ(event.content.info.h, 320); EXPECT_EQ(event.content.info.size, 1563685); EXPECT_EQ(event.content.info.duration, 2140786); EXPECT_EQ(event.content.info.thumbnail_info.h, 300); EXPECT_EQ(event.content.info.thumbnail_info.w, 310); EXPECT_EQ(event.content.info.thumbnail_info.size, 46144); } TEST(RoomEvents, Sticker) { json data = R"({ "age": 242352, "content": { "body": "Landing", "info": { "h": 200, "mimetype": "image/png", "size": 73602, "thumbnail_info": { "h": 200, "mimetype": "image/png", "size": 73602, "w": 140 }, "thumbnail_url": "mxc://matrix.org/sHhqkFCvSkFwtmvtETOtKnLP", "w": 140 }, "url": "mxc://matrix.org/sHhqkFCvSkFwtmvtETOtKnLP" }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example:localhost", "type": "m.sticker" })"_json; Sticker event = data; EXPECT_EQ(event.type, EventType::Sticker); EXPECT_EQ(event.event_id, "$WLGTSEFSEF:localhost"); EXPECT_EQ(event.content.body, "Landing"); EXPECT_EQ(event.content.url, "mxc://matrix.org/sHhqkFCvSkFwtmvtETOtKnLP"); EXPECT_EQ(event.content.info.w, 140); EXPECT_EQ(event.content.info.h, 200); EXPECT_EQ(event.content.info.size, 73602); } TEST(FormattedMessages, Deserialization) { json notice_data = R"({ "origin_server_ts": 1510435865515, "sender": "@_neb_github:matrix.org", "event_id": "$15104358652239178iCnZy:matrix.org", "content": { "body": "https://github.com/postmarketOS/pmbootstrap/issues/900 : Package nheko", "msgtype": "m.notice", "format": "org.matrix.custom.html", "formatted_body": "

Hello World!

" }, "type": "m.room.message", "room_id": "!BPvgRcBVHzyFSlYkrg:matrix.org" })"_json; RoomEvent notice = notice_data; EXPECT_EQ(notice.type, EventType::RoomMessage); EXPECT_EQ(notice.content.msgtype, "m.notice"); EXPECT_EQ(notice.content.format, "org.matrix.custom.html"); EXPECT_EQ(notice.content.formatted_body, "

Hello World!

"); json text_data = R"({ "origin_server_ts": 1510489356530, "sender": "@nheko_test:matrix.org", "event_id": "$15104893562785758wEgEU:matrix.org", "content": { "body": "hey there", "msgtype": "m.text", "format": "org.matrix.custom.html", "formatted_body": "

Hello World!

" }, "type": "m.room.message", "room_id": "!lfoDRlNFWlvOnvkBwQ:matrix.org" })"_json; RoomEvent text = text_data; EXPECT_EQ(text.content.msgtype, "m.text"); EXPECT_EQ(text.content.format, "org.matrix.custom.html"); EXPECT_EQ(text.content.formatted_body, "

Hello World!

"); json emote_data = R"({ "origin_server_ts": 1509878682149, "sender": "@mujx:matrix.org", "event_id": "$15098786822025533uttji:matrix.org", "content": { "body": "tests", "msgtype": "m.emote", "format": "org.matrix.custom.html", "formatted_body": "

Hello World!

" }, "type": "m.room.message", "room_id": "!VaMCVKSVcyPtXbcMXh:matrix.org" })"_json; RoomEvent emote = emote_data; EXPECT_EQ(emote.content.msgtype, "m.emote"); EXPECT_EQ(emote.content.format, "org.matrix.custom.html"); EXPECT_EQ(emote.content.formatted_body, "

Hello World!

"); } mtxclient-0.2.1/tests/requests.cpp000066400000000000000000000121401347137727200172550ustar00rootroot00000000000000#include #include #include using json = nlohmann::json; using namespace mtx::requests; TEST(Requests, Login) { Login t1, t2, t3; t1.user = "@alice:matrix.org"; t1.password = "secret"; t1.initial_device_display_name = "Mobile"; json j = t1; ASSERT_EQ(j.dump(), "{\"initial_device_display_name\":\"Mobile\",\"password\":\"secret\",\"type\":" "\"m.login.password\",\"user\":\"@alice:matrix.org\"}"); t2.user = "@bob:matrix.org"; t2.password = "secret2"; j = t2; ASSERT_EQ( j.dump(), "{\"password\":\"secret2\",\"type\":\"m.login.password\",\"user\":\"@bob:matrix.org\"}"); t3.user = "@carl:matrix.org"; t3.password = "secret3"; t3.device_id = "ZSDF2RG"; j = t3; ASSERT_EQ(j.dump(), "{\"device_id\":\"ZSDF2RG\",\"password\":\"secret3\",\"type\":\"m.login." "password\",\"user\":\"@carl:matrix.org\"}"); } TEST(Requests, Typing) { TypingNotification t1, t2; t1.timeout = 4000; json j = t1; ASSERT_EQ(j.dump(), "{\"timeout\":4000,\"typing\":false}"); t2.typing = true; t2.timeout = 4242; j = t2; ASSERT_EQ(j.dump(), "{\"timeout\":4242,\"typing\":true}"); } TEST(Requests, UploadKeys) { UploadKeys r1, r2, r3; json j = r1; ASSERT_EQ(j.dump(), "{}"); r2.device_keys.user_id = "@alice:example.com"; r2.device_keys.device_id = "JLAFKJWSCS"; r2.device_keys.keys.emplace("curve25519:JLAFKJWSCS", "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI"); std::map tmp = { {"ed25519:JLAFKJWSCS", "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/" "a+myXS367WT6NAIcBA"}}; r2.device_keys.signatures.emplace("@alice:example.com", tmp); // Only device_keys are present j = r2; ASSERT_EQ( j.dump(), "{\"device_keys\":{\"algorithms\":[\"m.olm.v1.curve25519-aes-sha2\",\"m.megolm.v1." "aes-sha2\"],\"device_id\":\"JLAFKJWSCS\",\"keys\":{\"curve25519:JLAFKJWSCS\":" "\"3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI\"},\"signatures\":{\"@alice:" "example.com\":{\"ed25519:JLAFKJWSCS\":\"dSO80A01XiigH3uBiDVx/" "EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/" "a+myXS367WT6NAIcBA\"}},\"user_id\":\"@alice:example.com\"}}"); json k1 = {{"key", "zKbLg+NrIjpnagy+pIY6uPL4ZwEG2v+8F9lmgsnlZzs"}, {"signatures", {{"@alice:example.com", {{"ed25519:JLAFKJWSCS", "IQeCEPb9HFk217cU9kw9EOiusC6kMIkoIRnbnfOh5Oc63S1ghgyjShBGpu34blQomoalCyXWyh" "aaT3MrLZYQ" "AA"}}}}}}; json k2 = {{"key", "j3fR3HemM16M7CWhoI4Sk5ZsdmdfQHsKL1xuSft6MSw"}, {"signatures", {{"@alice:example.com", {{"ed25519:JLAFKJWSCS", "FLWxXqGbwrb8SM3Y795eB6OA8bwBcoMZFXBqnTn58AYWZSqiD45tlBVcDa2L7RwdKXebW/" "VzDlnfVJ+9jok1Bw"}}}}}}; r3.one_time_keys.emplace("curve25519:AAAAAQ", "/qyvZvwjiTxGdGU0RCguDCLeR+nmsb3FfNG3/Ve4vU8"); r3.one_time_keys.emplace("signed_curve25519:AAAAHg", k1); r3.one_time_keys.emplace("signed_curve25519:AAAAHQ", k2); j = r3; ASSERT_EQ( j.dump(), "{\"one_time_keys\":{\"curve25519:AAAAAQ\":\"/qyvZvwjiTxGdGU0RCguDCLeR+nmsb3FfNG3/" "Ve4vU8\",\"signed_curve25519:AAAAHQ\":{\"key\":" "\"j3fR3HemM16M7CWhoI4Sk5ZsdmdfQHsKL1xuSft6MSw\",\"signatures\":{\"@alice:example.com\":{" "\"ed25519:JLAFKJWSCS\":" "\"FLWxXqGbwrb8SM3Y795eB6OA8bwBcoMZFXBqnTn58AYWZSqiD45tlBVcDa2L7RwdKXebW/" "VzDlnfVJ+9jok1Bw\"}}},\"signed_curve25519:AAAAHg\":{\"key\":\"zKbLg+NrIjpnagy+" "pIY6uPL4ZwEG2v+8F9lmgsnlZzs\",\"signatures\":{\"@alice:example.com\":{\"ed25519:" "JLAFKJWSCS\":" "\"IQeCEPb9HFk217cU9kw9EOiusC6kMIkoIRnbnfOh5Oc63S1ghgyjShBGpu34blQomoalCyXWyhaaT3MrLZYQAA" "\"}}}}}"); } TEST(Requests, QueryKeys) { QueryKeys k1; std::vector empty_vec; k1.device_keys.emplace("@alice:localhost", empty_vec); k1.token = "this_is_a_token"; json j = k1; ASSERT_EQ(j.dump(), "{\"device_keys\":{\"@alice:localhost\":[]},\"timeout\":10000,\"token\":\"this_" "is_a_token\"}"); } TEST(Requests, ClaimKeys) { ClaimKeys k1; std::map devices; devices.emplace("JLAFKJWSCS", "curve25519"); k1.one_time_keys.emplace("@alice:localhost", devices); json j = k1; ASSERT_EQ(j.dump(), "{\"one_time_keys\":{\"@alice:localhost\":{\"JLAFKJWSCS\":\"curve25519\"}}," "\"timeout\":10000}"); } mtxclient-0.2.1/tests/responses.cpp000066400000000000000000000717271347137727200174430ustar00rootroot00000000000000#include #include #include #include #include using json = nlohmann::json; using namespace mtx::responses; using namespace mtx::events; TEST(Responses, State) { json data = R"({ "events": [ { "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "aliases": [ "#somewhere:localhost", "#another:localhost" ] }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example:localhost", "state_key": "localhost", "type": "m.room.aliases" }, { "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "name": "Random name" }, "event_id": "$WLGTSEFSEF2:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example2:localhost", "state_key": "localhost", "type": "m.room.name" } ] })"_json; State state = data; EXPECT_EQ(state.events.size(), 2); auto aliases = boost::get>(state.events[0]); EXPECT_EQ(aliases.event_id, "$WLGTSEFSEF:localhost"); EXPECT_EQ(aliases.type, EventType::RoomAliases); EXPECT_EQ(aliases.sender, "@example:localhost"); EXPECT_EQ(aliases.content.aliases.size(), 2); EXPECT_EQ(aliases.content.aliases[0], "#somewhere:localhost"); auto name = boost::get>(state.events[1]); EXPECT_EQ(name.event_id, "$WLGTSEFSEF2:localhost"); EXPECT_EQ(name.type, EventType::RoomName); EXPECT_EQ(name.sender, "@example2:localhost"); EXPECT_EQ(name.content.name, "Random name"); // The first event is malformed (has null as the user id) // and therefore is should be skipped. json malformed_data = R"({ "events": [ { "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "aliases": [ "#somewhere:localhost", "#another:localhost" ] }, "event_id": "$WLGTSEFSEF:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": null, "state_key": "localhost", "type": "m.room.aliases" }, { "unsigned": { "age": 242352, "transaction_id": "txnid" }, "content": { "name": "Random name" }, "event_id": "$WLGTSEFSEF2:localhost", "origin_server_ts": 1431961217939, "room_id": "!Cuyf34gef24t:localhost", "sender": "@example2:localhost", "state_key": "localhost", "type": "m.room.name" } ] })"_json; State malformed_state = malformed_data; EXPECT_EQ(malformed_state.events.size(), 1); name = boost::get>(malformed_state.events[0]); EXPECT_EQ(name.event_id, "$WLGTSEFSEF2:localhost"); EXPECT_EQ(name.type, EventType::RoomName); EXPECT_EQ(name.sender, "@example2:localhost"); EXPECT_EQ(name.content.name, "Random name"); } TEST(Responses, Timeline) {} TEST(Responses, JoinedRoom) { json data1 = R"({ "ephemeral": { "events": [ { "content": { "$123456789123456789ABC:matrix.org": { "m.read": { "@user1:s1.example.com": { "ts": 1515754170039 }, "@user2:s2.example.com": { "ts": 1515713767417 } } } }, "type": "m.receipt" } ] }, "unread_notifications": { "highlight_count": 2, "notification_count": 4 } })"_json; JoinedRoom room1 = data1; // It this succeeds parsing was done successfully EXPECT_EQ(room1.ephemeral.receipts.size(), 1); EXPECT_EQ(room1.timeline.events.size(), 0); EXPECT_EQ(room1.unread_notifications.highlight_count, 2); EXPECT_EQ(room1.unread_notifications.notification_count, 4); json data2 = R"({ "timeline": { "events": [ { "content": { "avatar_url": "mxc://matrix.org/MatrixContentID123456789", "displayname": "DisplayName", "membership": "join" }, "event_id": "$1234567898765432123456:matrix.org", "membership": "join", "origin_server_ts": 1515756721018, "sender": "@user1:s1.example.com", "state_key": "@user1:s1.example.com", "type": "m.room.member", "unsigned": { "age": 18585, "prev_content": { "avatar_url": null, "displayname": "DisplayName", "membership": "join" }, "prev_sender": "@user1:s1.example.com", "replaces_state": "$1234567898765432123455:matrix.org" } }, { "content": { "body": "Hello World", "msgtype": "m.text" }, "event_id": "$12345678987654321asdfg:matrix.org", "origin_server_ts": 1515756732500, "sender": "@user1:s1.example.com", "type": "m.room.message", "unsigned": { "age": 8032 } } ], "limited": false, "prev_batch": "s42_42_42_42_42_42_42_42_1" }, "unread_notifications": { "highlight_count": 2, "notification_count": 4 } })"_json; JoinedRoom room2 = data2; EXPECT_EQ(room2.ephemeral.receipts.size(), 0); EXPECT_EQ(room2.timeline.events.size(), 2); EXPECT_EQ(room2.timeline.prev_batch, "s42_42_42_42_42_42_42_42_1"); EXPECT_EQ(room2.unread_notifications.highlight_count, 2); EXPECT_EQ(room2.unread_notifications.notification_count, 4); } TEST(Responses, LeftRoom) { json data = R"({ "timeline": { "events": [ { "content": { "membership": "leave" }, "event_id": "$12345678923456789:s1.example.com", "membership": "leave", "origin_server_ts": 1234567894342, "sender": "@u1:s1.example.com", "state_key": "@u1:s1.example.com", "type": "m.room.member", "unsigned": { "age": 1566, "prev_content": { "avatar_url": "mxc://msgs.tk/MatrixContentId123456789", "displayname": "User 1!", "membership": "join" }, "prev_sender": "@u1:s1.example.com", "replaces_state": "$12345678912345678:s1.example.com" } } ], "limited": false, "prev_batch": "s123_42_1234_4321123_13579_12_14400_4221_7" } })"_json; LeftRoom room = data; EXPECT_EQ(room.timeline.events.size(), 1); EXPECT_EQ(room.timeline.limited, false); EXPECT_EQ(room.state.events.size(), 0); } TEST(Responses, InvitedRoom) { json data = R"({ "invite_state": { "events":[{ "content":{ "name":"Testing room" }, "sender":"@mujx:matrix.org", "state_key":"", "type":"m.room.name" },{ "content":{"url":"mxc://matrix.org/wdjzHdrThpqWyVArfyWmRbBx"}, "sender":"@mujx:matrix.org", "state_key":"", "type":"m.room.avatar" },{ "content":{ "avatar_url":"mxc://matrix.org/JKiSOBDDxCHxmaLAgoQwSAHa", "displayname":"NhekoTest", "membership":"join" }, "sender":"@nheko_test:matrix.org", "state_key":"@nheko_test:matrix.org", "type":"m.room.member" },{ "content":{"alias":"#tessssssst:matrix.org"}, "sender":"@mujx:matrix.org", "state_key":"", "type":"m.room.canonical_alias"}, { "content":{"join_rule":"invite"}, "sender":"@mujx:matrix.org", "state_key":"", "type":"m.room.join_rules" },{ "content":{"avatar_url":"mxc://matrix.org/mGOKULXnAOnyplROyaxQcyoC", "displayname":"mujx", "membership":"invite" }, "event_id":"$1513636848665012cjHwG:matrix.org", "membership":"invite", "origin_server_ts":1513636848325, "sender":"@nheko_test:matrix.org", "state_key":"@mujx:matrix.org", "type":"m.room.member", "unsigned":{ "age":279, "prev_content":{"membership":"leave"}, "prev_sender":"@mujx:matrix.org", "replaces_state":"$15068762701126850oGdvT:matrix.org" } } ]}} )"_json; InvitedRoom room = data; EXPECT_EQ(room.invite_state.size(), 6); auto name = boost::get>(room.invite_state[0]); EXPECT_EQ(name.type, EventType::RoomName); EXPECT_EQ(name.content.name, "Testing room"); auto avatar = boost::get>(room.invite_state[1]); EXPECT_EQ(avatar.type, EventType::RoomAvatar); EXPECT_EQ(avatar.content.url, "mxc://matrix.org/wdjzHdrThpqWyVArfyWmRbBx"); } TEST(Responses, Sync) { std::ifstream file("./fixtures/responses/sync.json"); json data1; file >> data1; Sync sync1 = data1; EXPECT_EQ(sync1.next_batch, "s333358558_324502987_444424_65663508_21685260_193623_2377336_2940807_454"); EXPECT_EQ(sync1.rooms.join.size(), 5); auto nheko = sync1.rooms.join["!BPvgRcBVHzyFSlYkrg:matrix.org"]; EXPECT_GT(nheko.state.events.size(), 0); EXPECT_GT(nheko.timeline.events.size(), 0); EXPECT_EQ(nheko.timeline.limited, true); EXPECT_EQ(nheko.timeline.prev_batch, "t10853-333025362_324502987_444424_65663508_21685260_193623_2377336_2940807_454"); EXPECT_EQ(nheko.account_data.events.size(), 1); EXPECT_EQ(sync1.rooms.leave.size(), 1); EXPECT_EQ(sync1.rooms.invite.size(), 0); // Check consistency of incomplete sync json data2 = R"({ "device_one_time_keys_count": {}, "next_batch": "s123_42_42_42_42_42_42_42_7" })"_json; Sync sync2 = data2; EXPECT_EQ(sync2.next_batch, "s123_42_42_42_42_42_42_42_7"); EXPECT_EQ(sync2.rooms.join.size(), 0); EXPECT_EQ(sync2.rooms.leave.size(), 0); EXPECT_EQ(sync2.rooms.invite.size(), 0); } TEST(Responses, SyncWithEncryption) { std::ifstream file("./fixtures/responses/sync_with_crypto.json"); json data; file >> data; Sync sync = data; EXPECT_EQ(sync.device_lists.changed.size(), 1); EXPECT_EQ(sync.device_lists.changed.at(0), "@carl:matrix.org"); EXPECT_EQ(sync.device_lists.left.size(), 2); EXPECT_EQ(sync.device_lists.left.at(0), "@alice:matrix.org"); EXPECT_EQ(sync.device_lists.left.at(1), "@bob:matrix.org"); EXPECT_EQ(sync.device_one_time_keys_count.size(), 2); EXPECT_EQ(sync.device_one_time_keys_count["curve25519"], 10); EXPECT_EQ(sync.device_one_time_keys_count["signed_curve25519"], 50); auto timeline_events = sync.rooms.join.begin()->second.timeline.events; std::string algorithm_found; std::string event_id; for (const auto &e : timeline_events) { if (boost::get>(&e) != nullptr) { auto enc_event = boost::get>(e); algorithm_found = enc_event.content.algorithm; event_id = enc_event.event_id; } } EXPECT_EQ(algorithm_found, "m.megolm.v1.aes-sha2"); EXPECT_EQ(event_id, "$1522842442112652dsEBQ:matrix.org"); } TEST(Responses, Rooms) {} TEST(Responses, Profile) { json response = R"({ "avatar_url": "mxc://matrix.org/SDGdghriugerRg", "displayname": "Alice Margatroid" })"_json; json null_response = R"({ "avatar_url": "mxc://matrix.org/SDGdghriugerRg", "displayname": null })"_json; json missing_response = R"({ "displayname": "Alice Margatroid" })"_json; json error_response = R"({ "displayname": 42 })"_json; Profile profile = response; EXPECT_EQ(profile.avatar_url, "mxc://matrix.org/SDGdghriugerRg"); EXPECT_EQ(profile.display_name, "Alice Margatroid"); Profile null_profile = null_response; EXPECT_EQ(null_profile.avatar_url, "mxc://matrix.org/SDGdghriugerRg"); EXPECT_EQ(null_profile.display_name, ""); Profile missing_profile = missing_response; EXPECT_EQ(missing_profile.avatar_url, ""); EXPECT_EQ(missing_profile.display_name, "Alice Margatroid"); ASSERT_THROW(Profile error_profile = error_response, std::exception); } TEST(Responses, Versions) { json data = R"({ "versions" : [ "r0.0.1", "r0.2.0", "r0.3.0" ] })"_json; Versions versions = data; EXPECT_EQ(versions.versions.size(), 3); EXPECT_EQ(versions.versions[0], "r0.0.1"); EXPECT_EQ(versions.versions[1], "r0.2.0"); EXPECT_EQ(versions.versions[2], "r0.3.0"); json error_data = R"({ "versions" : [ "r.0.0.1" ] })"_json; ASSERT_THROW(Versions versions = error_data, std::invalid_argument); } TEST(Responses, CreateRoom) { json data = R"({"room_id" : "!sefiuhWgwghwWgh:example.com"})"_json; mtx::responses::CreateRoom create_room = data; EXPECT_EQ(create_room.room_id.to_string(), "!sefiuhWgwghwWgh:example.com"); json error_data = R"({"room_id" : "#akajdkf:example.com"})"_json; ASSERT_THROW(CreateRoom create_room = error_data, std::invalid_argument); } TEST(Responses, Login) { json data = R"({ "user_id": "@cheeky_monkey:matrix.org", "access_token": "abc123", "home_server": "matrix.org", "device_id": "GHTYAJCE" })"_json; Login login = data; EXPECT_EQ(login.user_id.to_string(), "@cheeky_monkey:matrix.org"); EXPECT_EQ(login.access_token, "abc123"); EXPECT_EQ(login.home_server, "matrix.org"); EXPECT_EQ(login.device_id, "GHTYAJCE"); json data2 = R"({ "user_id": "@cheeky_monkey:matrix.org", "access_token": "abc123", "home_server": "matrix.org" })"_json; Login login2 = data2; EXPECT_EQ(login2.user_id.to_string(), "@cheeky_monkey:matrix.org"); EXPECT_EQ(login2.access_token, "abc123"); EXPECT_EQ(login2.home_server, "matrix.org"); EXPECT_EQ(login2.device_id, ""); } TEST(Responses, Messages) { json data = R"({ "start": "t47429-4392820_219380_26003_2265", "end": "t47409-4357353_219380_26003_2265", "chunk": [{ "origin_server_ts": 1444812213737, "sender": "@alice:example.com", "event_id": "$1444812213350496Caaaa:example.com", "content": { "body": "hello world", "msgtype": "m.text" }, "room_id": "!Xq3620DUiqCaoxq:example.com", "type": "m.room.message", "age": 1042 }, { "origin_server_ts": 1444812194656, "sender": "@bob:example.com", "event_id": "$1444812213350496Cbbbb:example.com", "content": { "body": "the world is big", "msgtype": "m.text" }, "room_id": "!Xq3620DUiqCaoxq:example.com", "type": "m.room.message", "age": 20123 }, { "origin_server_ts": 1444812163990, "sender": "@bob:example.com", "event_id": "$1444812213350496Ccccc:example.com", "content": { "name": "New room name" }, "prev_content": { "name": "Old room name" }, "state_key": "", "room_id": "!Xq3620DUiqCaoxq:example.com", "type": "m.room.name", "age": 50789 } ]})"_json; Messages messages = data; EXPECT_EQ(messages.start, "t47429-4392820_219380_26003_2265"); EXPECT_EQ(messages.end, "t47409-4357353_219380_26003_2265"); EXPECT_EQ(messages.chunk.size(), 3); using mtx::events::RoomEvent; using mtx::events::StateEvent; using mtx::events::msg::Text; using mtx::events::state::Name; auto first_event = boost::get>(messages.chunk[0]); EXPECT_EQ(first_event.content.body, "hello world"); EXPECT_EQ(first_event.content.msgtype, "m.text"); EXPECT_EQ(first_event.type, mtx::events::EventType::RoomMessage); EXPECT_EQ(first_event.event_id, "$1444812213350496Caaaa:example.com"); auto second_event = boost::get>(messages.chunk[1]); EXPECT_EQ(second_event.content.body, "the world is big"); EXPECT_EQ(second_event.content.msgtype, "m.text"); EXPECT_EQ(second_event.type, mtx::events::EventType::RoomMessage); EXPECT_EQ(second_event.event_id, "$1444812213350496Cbbbb:example.com"); auto third_event = boost::get>(messages.chunk[2]); EXPECT_EQ(third_event.content.name, "New room name"); EXPECT_EQ(third_event.type, mtx::events::EventType::RoomName); EXPECT_EQ(third_event.event_id, "$1444812213350496Ccccc:example.com"); EXPECT_EQ(third_event.sender, "@bob:example.com"); // Two of the events are malformed and should be dropped. // 1. Missing "type" key. // 2. Content is null. json malformed_data = R"({ "start": "t47429-4392820_219380_26003_2265", "end": "t47409-4357353_219380_26003_2265", "chunk": [{ "origin_server_ts": 1444812213737, "sender": "@alice:example.com", "event_id": "$1444812213350496Caaaa:example.com", "content": { "body": "hello world", "msgtype": "m.text" }, "room_id": "!Xq3620DUiqCaoxq:example.com", "age": 1042 }, { "origin_server_ts": 1444812194656, "sender": "@bob:example.com", "event_id": "$1444812213350496Cbbbb:example.com", "content": null, "room_id": "!Xq3620DUiqCaoxq:example.com", "type": "m.room.message", "age": 20123 }, { "origin_server_ts": 1444812163990, "sender": "@bob:example.com", "event_id": "$1444812213350496Ccccc:example.com", "content": { "name": "New room name" }, "prev_content": { "name": "Old room name" }, "state_key": "", "room_id": "!Xq3620DUiqCaoxq:example.com", "type": "m.room.name", "age": 50789 } ]})"_json; messages = malformed_data; EXPECT_EQ(messages.start, "t47429-4392820_219380_26003_2265"); EXPECT_EQ(messages.end, "t47409-4357353_219380_26003_2265"); EXPECT_EQ(messages.chunk.size(), 1); third_event = boost::get>(messages.chunk[0]); EXPECT_EQ(third_event.content.name, "New room name"); EXPECT_EQ(third_event.type, mtx::events::EventType::RoomName); EXPECT_EQ(third_event.event_id, "$1444812213350496Ccccc:example.com"); EXPECT_EQ(third_event.sender, "@bob:example.com"); } TEST(Responses, EphemeralTyping) { json data = R"({ "events": [{ "type": "m.typing", "content": { "user_ids": [ "@alice:example.com", "@bob:example.com" ] } }] })"_json; mtx::responses::Ephemeral ephemeral = data; EXPECT_EQ(ephemeral.typing.size(), 2); EXPECT_EQ(ephemeral.typing[0], "@alice:example.com"); EXPECT_EQ(ephemeral.typing[1], "@bob:example.com"); } TEST(Responses, EphemeralReceipts) { json data = R"({ "events": [{ "type": "m.typing", "content": { "user_ids": [ "@alice:example.com", "@bob:example.com" ] } }, { "type": "m.receipt", "content": { "$1493012095444993JeMrW:matrix.org": { "m.read": { "@trilobite17:matrix.org": { "ts": 1493020945945 } } }, "$1493135885261887UVyOW:matrix.org": { "m.read": { "@aaron:matrix.org": { "ts": 1493161552008 } } }, "$149339947230ohuCC:krtdex.com": { "m.read": { "@walle303:matrix.eastcoast.hosting": { "ts": 1493404654684 } } }, "$1493556582917fOMpi:vurpo.fi": { "m.read": { "@matthew2:matrix.org": { "ts": 1493557057338 } } }, "$14935874261161012PaoJD:matrix.org": { "m.read": { "@frantisek:gajdusek.net": { "ts": 1493623595682 }, "@PhoenixLandPirate:matrix.org": { "ts": 1510630539168 }, "@Tokodomo:matrix.org": { "ts": 1510588032780 }, "@matthew:matrix.org": { "ts": 1510440324233 }, "@memoryruins:matrix.org": { "ts": 1510518443679 }, "@nagua:2hg.org": { "ts": 1510451215569 }, "@nioshd:matrix.org": { "ts": 1510521086750 } } } } }] })"_json; mtx::responses::Ephemeral ephemeral = data; EXPECT_EQ(ephemeral.typing.size(), 2); EXPECT_EQ(ephemeral.typing[0], "@alice:example.com"); EXPECT_EQ(ephemeral.typing[1], "@bob:example.com"); EXPECT_EQ(ephemeral.receipts.size(), 5); EXPECT_EQ(ephemeral.receipts["$149339947230ohuCC:krtdex.com"].size(), 1); EXPECT_EQ(ephemeral.receipts["$14935874261161012PaoJD:matrix.org"].size(), 7); EXPECT_EQ(ephemeral.receipts["$14935874261161012PaoJD:matrix.org"]["@matthew:matrix.org"], 1510440324233); } TEST(Responses, Empty) { json data = R"({})"_json; Empty e = data; (void)e; } TEST(Responses, Media) { json data = R"({ "content_uri": "mxc://example.com/AQwafuaFswefuhsfAFAgsw" })"_json; ContentURI res = data; EXPECT_EQ(res.content_uri, "mxc://example.com/AQwafuaFswefuhsfAFAgsw"); } TEST(Responses, Register) { json data = R"({ "flows": [{ "stages": [ "m.login.recaptcha" ] }, { "stages": [ "m.login.email.identity", "m.login.recaptcha" ] } ], "params": { "m.login.recaptcha": { "public_key": "6Le31_kSAAAAAK-54VKccKamtr-MFA_3WS1d_fGV" } }, "session": "kLmDGyIaqzgCeLgzVEebtNig" })"_json; RegistrationFlows res = data; EXPECT_EQ(res.session, "kLmDGyIaqzgCeLgzVEebtNig"); EXPECT_EQ(res.flows.size(), 2); auto s1 = res.flows.at(0); EXPECT_EQ(s1.stages.size(), 1); EXPECT_EQ(s1.stages.at(0), "m.login.recaptcha"); auto s2 = res.flows.at(1); EXPECT_EQ(s2.stages.size(), 2); EXPECT_EQ(s2.stages.at(0), "m.login.email.identity"); EXPECT_EQ(s2.stages.at(1), "m.login.recaptcha"); } TEST(Responses, UploadKeys) { json data = R"({ "one_time_key_counts": { "curve25519": 10, "signed_curve25519": 20 } })"_json; UploadKeys res = data; EXPECT_EQ(res.one_time_key_counts.size(), 2); EXPECT_EQ(res.one_time_key_counts["curve25519"], 10); EXPECT_EQ(res.one_time_key_counts["signed_curve25519"], 20); } TEST(Responses, QueryKeys) { json data = R"({ "failures": { "noidea": { "what": 0 }, "toput": { "here": 1 } }, "device_keys": { "@alice:example.com": { "JLAFKJWSCS": { "user_id": "@alice:example.com", "device_id": "JLAFKJWSCS", "algorithms": [ "m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2" ], "keys": { "curve25519:JLAFKJWSCS": "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI", "ed25519:JLAFKJWSCS": "lEuiRJBit0IG6nUf5pUzWTUEsRVVe/HJkoKuEww9ULI" }, "signatures": { "@alice:example.com": { "ed25519:JLAFKJWSCS": "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA" } }, "unsigned": { "device_display_name": "Alice's mobile phone" } } } } })"_json; QueryKeys res = data; EXPECT_EQ(res.failures.size(), 2); EXPECT_EQ(res.device_keys.size(), 1); auto device_keys = res.device_keys["@alice:example.com"]["JLAFKJWSCS"]; EXPECT_EQ(device_keys.user_id, "@alice:example.com"); EXPECT_EQ(device_keys.device_id, "JLAFKJWSCS"); EXPECT_EQ(device_keys.algorithms[0], "m.olm.v1.curve25519-aes-sha2"); EXPECT_EQ(device_keys.algorithms[1], "m.megolm.v1.aes-sha2"); EXPECT_EQ(device_keys.keys.size(), 2); EXPECT_EQ(device_keys.keys["curve25519:JLAFKJWSCS"], "3C5BFWi2Y8MaVvjM8M22DBmh24PmgR0nPvJOIArzgyI"); EXPECT_EQ(device_keys.keys["ed25519:JLAFKJWSCS"], "lEuiRJBit0IG6nUf5pUzWTUEsRVVe/HJkoKuEww9ULI"); EXPECT_EQ( device_keys.signatures["@alice:example.com"]["ed25519:JLAFKJWSCS"], "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA"); EXPECT_EQ(device_keys.unsigned_info.device_display_name, "Alice's mobile phone"); } TEST(Crypto, KeyChanges) { json data = R"({ "changed": [ "@alice:example.com", "@bob:example.org" ], "left": [ "@clara:example.com", "@doug:example.org" ] })"_json; KeyChanges res = data; EXPECT_EQ(res.changed.size(), 2); EXPECT_EQ(res.changed[0], "@alice:example.com"); EXPECT_EQ(res.changed[1], "@bob:example.org"); EXPECT_EQ(res.left.size(), 2); EXPECT_EQ(res.left[0], "@clara:example.com"); EXPECT_EQ(res.left[1], "@doug:example.org"); } TEST(Crypto, ClaimKeys) { json data = R"({ "failures": {}, "one_time_keys": { "@alice:example.com": { "JLAFKJWSCS": { "signed_curve25519:AAAAHg": { "key": "zKbLg+NrIjpnagy+pIY6uPL4ZwEG2v+8F9lmgsnlZzs", "signatures": { "@alice:example.com": { "ed25519:JLAFKJWSCS": "FLWxXqGbwrb8SM3Y795eB6OA8bwBcoMZFXBqnTn58AYWZSqiD45tlBVcDa2L7RwdKXebW/VzDlnfVJ+9jok1Bw" } } } } } } })"_json; ClaimKeys res = data; EXPECT_EQ(res.failures.size(), 0); EXPECT_EQ(res.one_time_keys.size(), 1); auto device = res.one_time_keys["@alice:example.com"]["JLAFKJWSCS"]; EXPECT_EQ(device["signed_curve25519:AAAAHg"]["key"], "zKbLg+NrIjpnagy+pIY6uPL4ZwEG2v+8F9lmgsnlZzs"); } TEST(Responses, Notifications) { json data = R"({ "next_token": "abcdef", "notifications": [{ "actions": [ "notify" ], "profile_tag": null, "read": true, "room_id": "!abcdefg:example.com", "ts": 1475508881945, "event": { "sender": "@alice:example.com", "type": "m.room.message", "age": 124524, "txn_id": "1234", "content": { "body": "I am a fish", "msgtype": "m.text" }, "origin_server_ts": 1417731086797, "event_id": "$74686972643033:example.com" } }] })"_json; mtx::responses::Notifications notif = data; // EXPECT_EQ(notif.next_token, "abcdef"); EXPECT_EQ(notif.notifications.size(), 1); EXPECT_EQ(notif.notifications.at(0).profile_tag, ""); EXPECT_EQ(notif.notifications.at(0).read, true); EXPECT_EQ(notif.notifications.at(0).ts, 1475508881945L); EXPECT_EQ(notif.notifications.at(0).room_id, "!abcdefg:example.com"); using TextEvent = mtx::events::RoomEvent; auto event = boost::get(notif.notifications.at(0).event); EXPECT_EQ(event.content.body, "I am a fish"); EXPECT_EQ(event.sender, "@alice:example.com"); } mtxclient-0.2.1/tests/test_helpers.hpp000066400000000000000000000041541347137727200201160ustar00rootroot00000000000000#pragma once #include "gtest/gtest.h" #include #include #include #include #include #include inline int random_number() { std::mt19937 rng; rng.seed(std::random_device()()); std::uniform_int_distribution dist( 1, std::numeric_limits::max()); return dist(rng); } inline void sleep() { std::this_thread::sleep_for(std::chrono::milliseconds(100)); } #define WAIT_UNTIL(condition) \ while (!(condition)) { \ sleep(); \ }; inline void check_error(mtx::http::RequestErr err) { if (err) { std::cout << "matrix (error) : " << err->matrix_error.error << "\n"; std::cout << "matrix (errcode): " << mtx::errors::to_string(err->matrix_error.errcode) << "\n"; std::cout << "error_code : " << err->error_code << "\n"; std::cout << "status_code : " << err->status_code << "\n"; if (!err->parse_error.empty()) std::cout << "parse_error : " << err->parse_error << "\n"; } ASSERT_FALSE(err); } inline void check_login(const mtx::responses::Login &, mtx::http::RequestErr err) { check_error(err); } inline void validate_login(const std::string &user, const mtx::responses::Login &res) { EXPECT_EQ(res.user_id.to_string(), user); EXPECT_EQ(res.home_server, "localhost"); ASSERT_TRUE(res.access_token.size() > 100); ASSERT_TRUE(res.device_id.size() > 5); } template std::vector get_event_ids(const std::vector &events) { std::vector ids; for (const auto &e : events) ids.push_back(boost::apply_visitor([](auto msg) { return msg.event_id; }, e)); return ids; } mtxclient-0.2.1/tests/utils.cpp000066400000000000000000000135461347137727200165550ustar00rootroot00000000000000#include #include #include #include using json = nlohmann::json; using namespace mtx::crypto; using namespace std; TEST(Utilities, CanonicalJSON) { // Examples taken from // https://matrix.org/docs/spec/appendices.html#canonical-json json data = R"({ "auth": { "success": true, "mxid": "@john.doe:example.com", "profile": { "display_name": "John Doe", "three_pids": [{ "medium": "email", "address": "john.doe@example.org" }, { "medium": "msisdn", "address": "123456789" }] }}})"_json; EXPECT_EQ( data.dump(), "{\"auth\":{\"mxid\":\"@john.doe:example.com\",\"profile\":{\"display_name\":\"John " "Doe\",\"three_pids\":[{\"address\":\"john.doe@example.org\",\"medium\":\"email\"},{" "\"address\":\"123456789\",\"medium\":\"msisdn\"}]},\"success\":true}}"); json data0 = R"({"b":"2","a":"1"})"_json; EXPECT_EQ(data0.dump(), "{\"a\":\"1\",\"b\":\"2\"}"); json data1 = R"({ "本": 2, "日": 1 })"_json; EXPECT_EQ(data1.dump(), "{\"日\":1,\"本\":2}"); json data2 = R"({"a": "\u65E5"})"_json; EXPECT_EQ(data2.dump(), "{\"a\":\"日\"}"); json data3 = R"({ "a": null })"_json; EXPECT_EQ(data3.dump(), "{\"a\":null}"); } TEST(Utilities, VerifySignedOneTimeKey) { auto alice = make_shared(); alice->create_new_account(); alice->create_new_utility(); alice->generate_one_time_keys(1); auto keys = alice->one_time_keys(); auto first_key = keys.curve25519.begin()->second; auto msg = json({{"key", first_key}}).dump(); auto sig = alice->sign_message(msg); auto res = olm_ed25519_verify(alice->utility(), alice->identity_keys().ed25519.data(), alice->identity_keys().ed25519.size(), msg.data(), msg.size(), (void *)sig.data(), sig.size()); EXPECT_EQ(std::string(olm_utility_last_error(alice->utility())), "SUCCESS"); EXPECT_EQ(res, 0); } TEST(Utilities, ValidUploadKeysRequest) { const std::string user_id = "@alice:matrix.org"; const std::string device_id = "FKALSOCCC"; auto alice = make_shared(); alice->create_new_account(); alice->set_device_id(device_id); alice->set_user_id(user_id); alice->generate_one_time_keys(1); auto id_sig = alice->sign_identity_keys(); json body{{"algorithms", {"m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2"}}, {"user_id", user_id}, {"device_id", device_id}, {"keys", { {"curve25519:" + device_id, alice->identity_keys().curve25519}, {"ed25519:" + device_id, alice->identity_keys().ed25519}, }}}; body["signatures"][user_id]["ed25519:" + device_id] = id_sig; json obj = alice->create_upload_keys_request(); json device_keys = obj.at("device_keys"); ASSERT_TRUE(device_keys.dump() == body.dump()); ASSERT_TRUE(verify_identity_signature(body, DeviceId(device_id), UserId(user_id))); ASSERT_TRUE(verify_identity_signature(device_keys, DeviceId(device_id), UserId(user_id))); } TEST(Utilities, VerifySignedIdentityKeys) { auto alice = make_shared(); alice->create_new_account(); alice->create_new_utility(); json keys = alice->identity_keys(); auto msg = json({{"algorithms", {"m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2"}}, {"device_id", "some_device"}, {"user_id", "@alice:localhost"}, {"keys", {{"curve25519:some_device", keys["curve25519"]}, {"ed25519:some_device", keys["ed25519"]}}}}) .dump(); auto sig = alice->sign_message(msg); auto res = olm_ed25519_verify(alice->utility(), alice->identity_keys().ed25519.data(), alice->identity_keys().ed25519.size(), msg.data(), msg.size(), (void *)sig.data(), sig.size()); EXPECT_EQ(std::string(olm_utility_last_error(alice->utility())), "SUCCESS"); EXPECT_EQ(res, 0); } TEST(Utilities, VerifyIdentityKeyJson) { //! JSON extracted from an account created through Riot. json data = R"({ "algorithms": [ "m.olm.v1.curve25519-aes-sha2", "m.megolm.v1.aes-sha2" ], "device_id": "VVLXGGTJGN", "keys": { "curve25519:VVLXGGTJGN": "TEdjuBVstvGMy0NYJxpeD7Zo97bLEgT2ukefWDPbe0w", "ed25519:VVLXGGTJGN": "L5IUXmjZGzZO9IwB/j61lTjuD79TCMRDM4bBHvGstT4" }, "signatures": { "@nheko_test:matrix.org": { "ed25519:VVLXGGTJGN": "tVWnGmZ5cMHiLJiaMhkZjNThQXlvFBsal3dclgPyiqkm/dG7F65U8xHpRb3QWFWALo9iy+L7W+fwv0yGhJFxBQ" } }, "unsigned": { "device_display_name": "https://riot.im/develop/ via Firefox on Linux" }, "user_id": "@nheko_test:matrix.org" })"_json; const auto user_id = data.at("user_id").get(); const auto device_id = data.at("device_id").get(); ASSERT_TRUE(verify_identity_signature(data, DeviceId(device_id), UserId(user_id))); }