diff --git a/.codespellrc b/.codespellrc index 251af7fcf..adada9132 100644 --- a/.codespellrc +++ b/.codespellrc @@ -1,2 +1,2 @@ [codespell] -ignore-words-list = aNULL,brose,doub,Udo,re-use,re-used,registr,shema,commet,Commet +ignore-words-list = aNULL,brose,doub,Udo,re-use,re-used,registr,shema,commet,Commet,Bloks diff --git a/bin/rebuild-mautrix-meta-instagram.sh b/bin/rebuild-mautrix-meta-instagram.sh deleted file mode 100755 index 9e1fcac67..000000000 --- a/bin/rebuild-mautrix-meta-instagram.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# SPDX-FileCopyrightText: 2024 Slavi Pantaleev -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -set -euxo pipefail - -# This script rebuilds the mautrix-meta-instagram Ansible role, using the mautrix-meta-messenger role as a source. - -if [ $# -eq 0 ]; then - echo "Error: No argument supplied. Please provide the path to the roles/custom directory." - exit 1 -fi - -roles_path=$1 - -messenger_role_path=$roles_path/matrix-bridge-mautrix-meta-messenger -instagram_role_path=$roles_path/matrix-bridge-mautrix-meta-instagram - -if [ ! -d $messenger_role_path ]; then - echo "Cannot find: $messenger_role_path" - exit 1 -fi - -if [ -d $instagram_role_path ]; then - rm -rf $instagram_role_path -fi - -cp -ar $messenger_role_path $instagram_role_path - -find "$instagram_role_path" -type f | while read -r file; do - sed --in-place 's/matrix_bridge_mautrix_meta_messenger_/matrix_bridge_mautrix_meta_instagram_/g' "$file" - sed --in-place 's/mautrix-meta-messenger/mautrix-meta-instagram/g' "$file" -done - -sed --in-place 's/matrix_bridge_mautrix_meta_instagram_meta_mode: \(.*\)/matrix_bridge_mautrix_meta_instagram_meta_mode: instagram/g' $instagram_role_path/defaults/main.yml -sed --in-place 's/matrix_bridge_mautrix_meta_instagram_identifier: \(.*\)/matrix_bridge_mautrix_meta_instagram_identifier: matrix-mautrix-meta-instagram/g' $instagram_role_path/defaults/main.yml - -# Create the README.md file with the license header -cat > $instagram_role_path/README.md << 'EOF' - -EOF - -echo "" >> $instagram_role_path/README.md -echo "# matrix-mautrix-meta-instagram" >> $instagram_role_path/README.md -echo "" >> $instagram_role_path/README.md -echo "This bridge role is derived from the matrix-mautrix-meta-messenger Ansible role via automatic changes (see \`just rebuild-mautrix-meta-instagram\` or \`bin/rebuild-mautrix-meta-instagram.sh\`)." >> $instagram_role_path/README.md -echo "" >> $instagram_role_path/README.md -echo "If you'd like to make a change to this role, consider making it to the \`matrix-mautrix-meta-messenger\` role instead." >> $instagram_role_path/README.md diff --git a/docs/configuring-playbook-bridge-mautrix-meta-instagram.md b/docs/configuring-playbook-bridge-mautrix-meta-instagram.md index 36220ff50..6784fb2b9 100644 --- a/docs/configuring-playbook-bridge-mautrix-meta-instagram.md +++ b/docs/configuring-playbook-bridge-mautrix-meta-instagram.md @@ -13,7 +13,7 @@ The playbook can install and configure the [mautrix-meta](https://github.com/mau See the project's [documentation](https://docs.mau.fi/bridges/go/meta/index.html) to learn what it does and why it might be useful to you. -Since this bridge component can bridge to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/) and you may wish to do both at the same time, the playbook makes it available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`). The latter is a reconfigured copy of the first one (created by `just rebuild-mautrix-meta-instagram` and `bin/rebuild-mautrix-meta-instagram.sh`). +The mautrix-meta project provides bridging to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/), each via a separate bridge (its own binary and container image) since mautrix-meta v26.07. The playbook makes them available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`), which can both be enabled at the same time. This documentation page only deals with the bridge's ability to bridge to Instagram. For bridging to Facebook/Messenger, see [Setting up Messenger bridging via Mautrix Meta](configuring-playbook-bridge-mautrix-meta-messenger.md). diff --git a/docs/configuring-playbook-bridge-mautrix-meta-messenger.md b/docs/configuring-playbook-bridge-mautrix-meta-messenger.md index 4a49eb75f..8cb289778 100644 --- a/docs/configuring-playbook-bridge-mautrix-meta-messenger.md +++ b/docs/configuring-playbook-bridge-mautrix-meta-messenger.md @@ -14,7 +14,7 @@ The playbook can install and configure the [mautrix-meta](https://github.com/mau See the project's [documentation](https://docs.mau.fi/bridges/go/meta/index.html) to learn what it does and why it might be useful to you. -Since this bridge component can bridge to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/) and you may wish to do both at the same time, the playbook makes it available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`). The latter is a reconfigured copy of the first one (created by `just rebuild-mautrix-meta-instagram` and `bin/rebuild-mautrix-meta-instagram.sh`). +The mautrix-meta project provides bridging to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/), each via a separate bridge (its own binary and container image) since mautrix-meta v26.07. The playbook makes them available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`), which can both be enabled at the same time. This documentation page only deals with the bridge's ability to bridge to Facebook Messenger. For bridging to Instagram, see [Setting up Instagram bridging via Mautrix Meta](configuring-playbook-bridge-mautrix-meta-instagram.md). diff --git a/justfile b/justfile index 3b32a0a93..e92b5fb5f 100644 --- a/justfile +++ b/justfile @@ -120,10 +120,6 @@ stop-all *extra_args: (run-tags "stop-all" extra_args) stop-group group *extra_args: @{{ just_executable() }} --justfile "{{ justfile() }}" run-tags stop-group --extra-vars="group={{ group }}" {{ extra_args }} -# Rebuilds the mautrix-meta-instagram Ansible role using the mautrix-meta-messenger role as a source -rebuild-mautrix-meta-instagram: - /bin/bash "{{ justfile_directory() }}/bin/rebuild-mautrix-meta-instagram.sh" "{{ justfile_directory() }}/roles/custom" - # Internal - ensures var/mise and var/prek directories exist _ensure_mise_data_directory: @mkdir -p "{{ mise_data_dir }}" diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/README.md b/roles/custom/matrix-bridge-mautrix-meta-instagram/README.md index a8755d41a..5a1ef2905 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/README.md +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/README.md @@ -1,11 +1,12 @@ # matrix-mautrix-meta-instagram -This bridge role is derived from the matrix-mautrix-meta-messenger Ansible role via automatic changes (see `just rebuild-mautrix-meta-instagram` or `bin/rebuild-mautrix-meta-instagram.sh`). +This role installs the Instagram bridge developed in the [mautrix-meta](https://github.com/mautrix/meta) repository. -If you'd like to make a change to this role, consider making it to the `matrix-mautrix-meta-messenger` role instead. +This role used to be auto-generated from the `matrix-bridge-mautrix-meta-messenger` role, back when a single mautrix-meta binary served both Messenger and Instagram depending on a `mode` configuration setting. +Since mautrix-meta v26.07, Instagram is a separate binary with its own container image (`ig-` prefixed tags) and its own configuration schema, so the two roles are maintained independently. diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/defaults/main.yml b/roles/custom/matrix-bridge-mautrix-meta-instagram/defaults/main.yml index 733ba318a..9d56af179 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/defaults/main.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/defaults/main.yml @@ -7,13 +7,11 @@ --- -# mautrix-meta is a Matrix <-> Facebook/Messenger/Instagram bridge +# mautrix-instagram is a Matrix <-> Instagram bridge # Project source code URL: https://github.com/mautrix/meta # -# WARNING: this bridge role is used for both Messenger and Instagram. -# This Messenger role acts as a source and auto-generates matrix-bridge-mautrix-meta-instagram -# thanks to `just rebuild-mautrix-meta-instagram` (`bin/rebuild-mautrix-meta-instagram.sh`). -# If you'd like to make changes to the Instagram role, consider making your changes to the Messenger role instead. +# Since v26.07, upstream develops the Instagram bridge in the mautrix-meta repository, but ships it as a separate binary and a separate container image (with `ig-` prefixed tags). +# The Messenger side of mautrix-meta is covered by the matrix-bridge-mautrix-meta-messenger role. matrix_bridge_mautrix_meta_instagram_enabled: true @@ -30,6 +28,11 @@ matrix_bridge_mautrix_meta_instagram_container_src_files_path: "{{ matrix_bridge matrix_bridge_mautrix_meta_instagram_container_image_self_build: false matrix_bridge_mautrix_meta_instagram_container_image_self_build_repo: "https://github.com/mautrix/meta.git" +# The path to the bridge binary inside the container image. +# The prebuilt image is built by upstream's CI, whose Dockerfile copies the Instagram binary to a fixed `/usr/bin/mautrix-meta` destination. +# Self-building uses the `Dockerfile.ig` file from the source tree, which produces `/usr/bin/mautrix-instagram`. +matrix_bridge_mautrix_meta_instagram_container_binary_path: "{{ '/usr/bin/mautrix-instagram' if matrix_bridge_mautrix_meta_instagram_container_image_self_build else '/usr/bin/mautrix-meta' }}" + matrix_bridge_mautrix_meta_instagram_container_image: "{{ matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix }}mautrix/meta:{{ matrix_bridge_mautrix_meta_instagram_container_image_tag }}" matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix: "{{ 'localhost/' if matrix_bridge_mautrix_meta_instagram_container_image_self_build else matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix_upstream }}" matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix_upstream: "{{ matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix_upstream_default }}" @@ -39,7 +42,7 @@ matrix_bridge_mautrix_meta_instagram_container_image_registry_prefix_upstream_de # See: https://mau.fi/blog/2026-07-mautrix-release/#new-instagram-bridge # # Prebuilt container images for specific commit hashes are tagged with an architecture suffix (e.g. `HASH-amd64`). -matrix_bridge_mautrix_meta_instagram_container_image_tag: "{{ 'ig-' if matrix_bridge_mautrix_meta_instagram_meta_mode == 'instagram' else '' }}{{ matrix_bridge_mautrix_meta_instagram_version }}{{ ('-' ~ matrix_architecture) if (matrix_bridge_mautrix_meta_instagram_version | length == 40) else '' }}" +matrix_bridge_mautrix_meta_instagram_container_image_tag: "ig-{{ matrix_bridge_mautrix_meta_instagram_version }}{{ ('-' ~ matrix_architecture) if (matrix_bridge_mautrix_meta_instagram_version | length == 40) else '' }}" matrix_bridge_mautrix_meta_instagram_container_network: "" @@ -97,21 +100,11 @@ matrix_bridge_mautrix_meta_instagram_database_engine: sqlite3-fk-wal matrix_bridge_mautrix_meta_instagram_sqlite_database_path_local: "{{ matrix_bridge_mautrix_meta_instagram_data_path }}/mautrix-meta.db" matrix_bridge_mautrix_meta_instagram_sqlite_database_path_in_container: "/data/mautrix-meta.db" -matrix_bridge_mautrix_meta_instagram_database_suffix: |- - {{ - ({ - 'facebook': '_facebook', - 'facebook-tor': '_facebook', - 'messenger': '_messenger', - 'instagram': '_instagram', - })[matrix_bridge_mautrix_meta_instagram_meta_mode] - }} - -matrix_bridge_mautrix_meta_instagram_database_username: "matrix_mautrix_meta{{ matrix_bridge_mautrix_meta_instagram_database_suffix }}" +matrix_bridge_mautrix_meta_instagram_database_username: matrix_mautrix_meta_instagram matrix_bridge_mautrix_meta_instagram_database_password: '' matrix_bridge_mautrix_meta_instagram_database_hostname: '' matrix_bridge_mautrix_meta_instagram_database_port: 5432 -matrix_bridge_mautrix_meta_instagram_database_name: "matrix_mautrix_meta{{ matrix_bridge_mautrix_meta_instagram_database_suffix }}" +matrix_bridge_mautrix_meta_instagram_database_name: matrix_mautrix_meta_instagram matrix_bridge_mautrix_meta_instagram_database_sslmode: disable matrix_bridge_mautrix_meta_instagram_database_connection_string: 'postgres://{{ matrix_bridge_mautrix_meta_instagram_database_username }}:{{ matrix_bridge_mautrix_meta_instagram_database_password }}@{{ matrix_bridge_mautrix_meta_instagram_database_hostname }}:{{ matrix_bridge_mautrix_meta_instagram_database_port }}/{{ matrix_bridge_mautrix_meta_instagram_database_name }}?sslmode={{ matrix_bridge_mautrix_meta_instagram_database_sslmode }}' @@ -132,28 +125,14 @@ matrix_bridge_mautrix_meta_instagram_scheme: https # Used for the provisioning API's external-server (OpenID) flow and for public media links. matrix_bridge_mautrix_meta_instagram_bridge_public_address: "{{ (matrix_bridge_mautrix_meta_instagram_scheme + '://' + matrix_bridge_mautrix_meta_instagram_exposure_hostname + matrix_bridge_mautrix_meta_instagram_exposure_path_prefix) if matrix_bridge_mautrix_meta_instagram_exposure_enabled else '' }}" -matrix_bridge_mautrix_meta_instagram_appservice_id: "{{ matrix_bridge_mautrix_meta_instagram_meta_mode }}" +matrix_bridge_mautrix_meta_instagram_appservice_id: instagram matrix_bridge_mautrix_meta_instagram_msc4190_enabled: "{{ matrix_bridges_msc4190_enabled }}" matrix_bridge_mautrix_meta_instagram_self_sign_enabled: "{{ matrix_bridges_self_sign_enabled }}" -# For Facebook/Messenger, we use the same `@messengerbot:example.com` username regardless of how bridging happens for multiple reasons: -# - it's consistent - regardless of how bridging happens, the bridged service is actually Messenger -# - it's easy for users - you may change the mode, but the bot is always at `@messengerbot:example.com` -# - it doesn't conflict with mautrix-facebook which uses `@facebookbot:example.com` -# - `matrix_bridge_mautrix_meta_instagram_appservice_avatar` only has icons for Messenger and Instagram, not Facebook -matrix_bridge_mautrix_meta_instagram_appservice_username_prefix: |- - {{ - ({ - 'facebook': 'messenger', - 'facebook-tor': 'messenger', - 'messenger': 'messenger', - 'instagram': 'instagram', - })[matrix_bridge_mautrix_meta_instagram_meta_mode] - }} -matrix_bridge_mautrix_meta_instagram_appservice_username: "{{ matrix_bridge_mautrix_meta_instagram_appservice_username_prefix }}bot" -matrix_bridge_mautrix_meta_instagram_appservice_displayname: "{{ matrix_bridge_mautrix_meta_instagram_meta_mode | capitalize }} bridge bot" -matrix_bridge_mautrix_meta_instagram_appservice_avatar: "{{ 'mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv' if matrix_bridge_mautrix_meta_instagram_meta_mode == 'instagram' else 'mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak' }}" +matrix_bridge_mautrix_meta_instagram_appservice_username: instagrambot +matrix_bridge_mautrix_meta_instagram_appservice_displayname: Instagram bridge bot +matrix_bridge_mautrix_meta_instagram_appservice_avatar: mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv matrix_bridge_mautrix_meta_instagram_appservice_database_type: "{{ matrix_bridge_mautrix_meta_instagram_database_engine }}" @@ -167,15 +146,6 @@ matrix_bridge_mautrix_meta_instagram_appservice_database_uri: |- matrix_bridge_mautrix_meta_instagram_appservice_token: '' -# Controls which service this bridge is for. -# Valid options: -# * facebook - connect to FB Messenger via facebook.com -# * facebook-tor - connect to FB Messenger via facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion -# (note: does not currently proxy media downloads) -# * messenger - connect to FB Messenger via messenger.com (can be used with the facebook side deactivated) -# * instagram - connect to Instagram DMs via instagram.com -matrix_bridge_mautrix_meta_instagram_meta_mode: instagram - matrix_bridge_mautrix_meta_instagram_provisioning_shared_secret: disable # Controls whether mautrix-meta-instagram's HTTP API is exposed publicly (used by tools like mautrix-manager for bridge login). @@ -183,43 +153,19 @@ matrix_bridge_mautrix_meta_instagram_exposure_enabled: false matrix_bridge_mautrix_meta_instagram_exposure_hostname: '' matrix_bridge_mautrix_meta_instagram_exposure_path_prefix: '' -matrix_bridge_mautrix_meta_instagram_bridge_username_prefix: |- - {{ - ({ - 'facebook': 'facebook_', - 'facebook-tor': 'facebook_', - 'messenger': 'messenger_', - 'instagram': 'instagram_', - })[matrix_bridge_mautrix_meta_instagram_meta_mode] - }} +matrix_bridge_mautrix_meta_instagram_bridge_username_prefix: instagram_ -# Localpart template of MXIDs for FB/IG users. +# Localpart template of MXIDs for IG users. # {{.}} is replaced with the internal ID of the FB/IG user. # Changing this may require that you change the regex in the appservice. matrix_bridge_mautrix_meta_instagram_bridge_username_template: "{{ matrix_bridge_mautrix_meta_instagram_bridge_username_prefix + '{{.}}' }}" -matrix_bridge_mautrix_meta_instagram_bridge_displayname_suffix: |- - {{ - ({ - 'facebook': '(FB)', - 'facebook-tor': '(FB)', - 'messenger': '(FB)', - 'instagram': '(IG)', - })[matrix_bridge_mautrix_meta_instagram_meta_mode] - }} +matrix_bridge_mautrix_meta_instagram_bridge_displayname_suffix: '(IG)' matrix_bridge_mautrix_meta_instagram_bridge_displayname_template: '{% raw %}{{or .DisplayName .Username "Unknown user"}}{% endraw %}{{ (" " ~ matrix_bridge_mautrix_meta_instagram_bridge_displayname_suffix) if matrix_bridge_mautrix_meta_instagram_bridge_displayname_suffix else "" }}' # The prefix for commands. Only required in non-management rooms. -matrix_bridge_mautrix_meta_instagram_bridge_command_prefix: |- - {{ - ({ - 'facebook': '!fb', - 'facebook-tor': '!fb', - 'messenger': '!fb', - 'instagram': '!ig', - })[matrix_bridge_mautrix_meta_instagram_meta_mode] - }} +matrix_bridge_mautrix_meta_instagram_bridge_command_prefix: '!ig' # Whether or not created rooms should have federation enabled. # If false, created portal rooms will never be federated. diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/install.yml b/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/install.yml index 342bd1be4..7da752b7c 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/install.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/install.yml @@ -80,7 +80,7 @@ - name: Ensure mautrix-meta-instagram container image is built community.docker.docker_image_build: name: "{{ matrix_bridge_mautrix_meta_instagram_container_image }}" - dockerfile: Dockerfile + dockerfile: Dockerfile.ig path: "{{ matrix_bridge_mautrix_meta_instagram_container_src_files_path }}" pull: true rebuild: "{{ 'always' if matrix_bridge_mautrix_meta_instagram_git_pull_results.changed | bool else 'never' }}" @@ -125,7 +125,7 @@ - name: Ensure mautrix-meta-instagram.service installed ansible.builtin.template: - src: "{{ role_path }}/templates/systemd/matrix-mautrix-meta.service.j2" + src: "{{ role_path }}/templates/systemd/matrix-mautrix-meta-instagram.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/{{ matrix_bridge_mautrix_meta_instagram_identifier }}.service" mode: '0644' register: matrix_bridge_mautrix_meta_instagram_systemd_service_result diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/validate_config.yml b/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/validate_config.yml index e490850d9..55c6d101e 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/validate_config.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/tasks/validate_config.yml @@ -43,3 +43,6 @@ - {'old': 'matrix_bridge_mautrix_meta_instagram_container_labels_metrics_middleware_basic_auth_enabled', 'new': ' (mautrix-meta-instagram does not support metrics)'} - {'old': 'matrix_bridge_mautrix_meta_instagram_container_labels_metrics_middleware_basic_auth_users', 'new': ' (mautrix-meta-instagram does not support metrics)'} - {'old': 'matrix_bridge_mautrix_meta_instagram_meta_ig_e2ee', 'new': ' (mautrix-meta no longer has an `ig_e2ee` configuration option)'} + - {'old': 'matrix_bridge_mautrix_meta_instagram_meta_mode', 'new': ' (since v0.2608.0, upstream ships Instagram as a separate bridge without a `mode` configuration option)'} + - {'old': 'matrix_bridge_mautrix_meta_instagram_appservice_username_prefix', 'new': ''} + - {'old': 'matrix_bridge_mautrix_meta_instagram_database_suffix', 'new': ' (the database name is controlled directly by matrix_bridge_mautrix_meta_instagram_database_name)'} diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/config.yaml.j2 b/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/config.yaml.j2 index edddf2d79..be8452be8 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/config.yaml.j2 +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/config.yaml.j2 @@ -1,36 +1,42 @@ #jinja2: lstrip_blocks: True # Network-specific config options network: - # Which service is this bridge for? Available options: - # * unset - allow users to pick any service when logging in (except facebook-tor) - # * facebook - connect to FB Messenger via facebook.com - # * facebook-tor - connect to FB Messenger via facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion - # (note: does not currently proxy media downloads) - # * messenger - connect to FB Messenger via messenger.com (can be used with the facebook side deactivated) - # * instagram - connect to Instagram DMs via instagram.com - # - # Remember to change the appservice ID, bot profile info, bridge username_template and management_room_text too. - mode: {{ matrix_bridge_mautrix_meta_instagram_meta_mode | to_json }} - - # Displayname template for FB/IG users. Available variables: + # Displayname template for IG users. Available variables: # .DisplayName - The display name set by the user. # .Username - The username set by the user. # .ID - The internal user ID of the user. displayname_template: {{ matrix_bridge_mautrix_meta_instagram_bridge_displayname_template | to_json }} - # Static proxy address (HTTP or SOCKS5) for connecting to Meta. + # Static proxy address (HTTP or SOCKS5) for connecting to Instagram. proxy: # HTTP endpoint to request new proxy address from, for dynamically assigned proxies. # The endpoint must return a JSON body with a string field called proxy_url. get_proxy_from: + # Should media be proxied too? + proxy_media: false + # Should other traffic, not configured here, be proxied? + proxy_other: true # Minimum interval between full reconnects in seconds, default is 1 hour min_full_reconnect_interval_seconds: 3600 # Interval to force refresh the connection (full reconnect), default is 20 hours. Set 0 to disable force refreshes. force_refresh_interval_seconds: 72000 + # Should connection state be cached to allow quicker restarts? + cache_connection_state: true # Disable fetching XMA media (reels, stories, etc) when backfilling. disable_xma_backfill: true # Disable fetching XMA media entirely. disable_xma_always: false + # Should typing notification bridging be disabled? + disable_typing: false + # Should view-once messages be disabled entirely? + disable_view_once: false + + # Thread backfill settings for syncing older conversations + thread_backfill: + # Number of batches (pages) to backfill (-1 for unlimited, 0 to disable) + batch_count: 0 + # Delay between fetching each batch of threads (to avoid rate limiting) + batch_delay: 2s # Config options that affect the central bridge module. diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta.service.j2 b/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta-instagram.service.j2 similarity index 95% rename from roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta.service.j2 rename to roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta-instagram.service.j2 index 52b12e5e1..824c9401a 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta.service.j2 +++ b/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta-instagram.service.j2 @@ -33,7 +33,7 @@ ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \ {{ arg }} \ {% endfor %} {{ matrix_bridge_mautrix_meta_instagram_container_image }} \ - /usr/bin/mautrix-meta -c /config/config.yaml -r /config/registration.yaml --no-update + {{ matrix_bridge_mautrix_meta_instagram_container_binary_path }} -c /config/config.yaml -r /config/registration.yaml --no-update {% if matrix_bridge_mautrix_meta_instagram_container_network != 'host' %} {% for network in matrix_bridge_mautrix_meta_instagram_container_additional_networks %} diff --git a/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta.service.j2.license b/roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta-instagram.service.j2.license similarity index 100% rename from roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta.service.j2.license rename to roles/custom/matrix-bridge-mautrix-meta-instagram/templates/systemd/matrix-mautrix-meta-instagram.service.j2.license diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/defaults/main.yml b/roles/custom/matrix-bridge-mautrix-meta-messenger/defaults/main.yml index 83e92b9ba..f5073eda7 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-messenger/defaults/main.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-messenger/defaults/main.yml @@ -7,13 +7,11 @@ --- -# mautrix-meta is a Matrix <-> Facebook/Messenger/Instagram bridge +# mautrix-meta is a Matrix <-> Facebook/Messenger bridge # Project source code URL: https://github.com/mautrix/meta # -# WARNING: this bridge role is used for both Messenger and Instagram. -# This Messenger role acts as a source and auto-generates matrix-bridge-mautrix-meta-instagram -# thanks to `just rebuild-mautrix-meta-instagram` (`bin/rebuild-mautrix-meta-instagram.sh`). -# If you'd like to make changes to the Instagram role, consider making your changes to the Messenger role instead. +# Since v26.07, upstream ships the Instagram side of mautrix-meta as a separate binary and a separate container image. +# It is covered by the matrix-bridge-mautrix-meta-instagram role. matrix_bridge_mautrix_meta_messenger_enabled: true @@ -103,7 +101,6 @@ matrix_bridge_mautrix_meta_messenger_database_suffix: |- 'facebook': '_facebook', 'facebook-tor': '_facebook', 'messenger': '_messenger', - 'instagram': '_instagram', })[matrix_bridge_mautrix_meta_messenger_meta_mode] }} @@ -137,23 +134,14 @@ matrix_bridge_mautrix_meta_messenger_appservice_id: "{{ matrix_bridge_mautrix_me matrix_bridge_mautrix_meta_messenger_msc4190_enabled: "{{ matrix_bridges_msc4190_enabled }}" matrix_bridge_mautrix_meta_messenger_self_sign_enabled: "{{ matrix_bridges_self_sign_enabled }}" -# For Facebook/Messenger, we use the same `@messengerbot:example.com` username regardless of how bridging happens for multiple reasons: +# We use the same `@messengerbot:example.com` username regardless of how bridging happens for multiple reasons: # - it's consistent - regardless of how bridging happens, the bridged service is actually Messenger # - it's easy for users - you may change the mode, but the bot is always at `@messengerbot:example.com` # - it doesn't conflict with mautrix-facebook which uses `@facebookbot:example.com` -# - `matrix_bridge_mautrix_meta_messenger_appservice_avatar` only has icons for Messenger and Instagram, not Facebook -matrix_bridge_mautrix_meta_messenger_appservice_username_prefix: |- - {{ - ({ - 'facebook': 'messenger', - 'facebook-tor': 'messenger', - 'messenger': 'messenger', - 'instagram': 'instagram', - })[matrix_bridge_mautrix_meta_messenger_meta_mode] - }} -matrix_bridge_mautrix_meta_messenger_appservice_username: "{{ matrix_bridge_mautrix_meta_messenger_appservice_username_prefix }}bot" +# - `matrix_bridge_mautrix_meta_messenger_appservice_avatar` only has an icon for Messenger, not Facebook +matrix_bridge_mautrix_meta_messenger_appservice_username: messengerbot matrix_bridge_mautrix_meta_messenger_appservice_displayname: "{{ matrix_bridge_mautrix_meta_messenger_meta_mode | capitalize }} bridge bot" -matrix_bridge_mautrix_meta_messenger_appservice_avatar: "{{ 'mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv' if matrix_bridge_mautrix_meta_messenger_meta_mode == 'instagram' else 'mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak' }}" +matrix_bridge_mautrix_meta_messenger_appservice_avatar: mxc://maunium.net/ygtkteZsXnGJLJHRchUwYWak matrix_bridge_mautrix_meta_messenger_appservice_database_type: "{{ matrix_bridge_mautrix_meta_messenger_database_engine }}" @@ -167,13 +155,16 @@ matrix_bridge_mautrix_meta_messenger_appservice_database_uri: |- matrix_bridge_mautrix_meta_messenger_appservice_token: '' -# Controls which service this bridge is for. +# Controls how the bridge connects to Messenger. # Valid options: # * facebook - connect to FB Messenger via facebook.com # * facebook-tor - connect to FB Messenger via facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion # (note: does not currently proxy media downloads) # * messenger - connect to FB Messenger via messenger.com (can be used with the facebook side deactivated) -# * instagram - connect to Instagram DMs via instagram.com +# +# Since v0.2608.0, the bridge itself no longer has a `mode` configuration option. +# This variable controls playbook-level naming (database name, bridged user prefix, command prefix, etc.) and whether the bridge's `tor` configuration option gets enabled (for `facebook-tor`). +# Bridging to Instagram is done by the separate matrix-bridge-mautrix-meta-instagram role. matrix_bridge_mautrix_meta_messenger_meta_mode: messenger matrix_bridge_mautrix_meta_messenger_provisioning_shared_secret: disable @@ -189,37 +180,20 @@ matrix_bridge_mautrix_meta_messenger_bridge_username_prefix: |- 'facebook': 'facebook_', 'facebook-tor': 'facebook_', 'messenger': 'messenger_', - 'instagram': 'instagram_', })[matrix_bridge_mautrix_meta_messenger_meta_mode] }} -# Localpart template of MXIDs for FB/IG users. -# {{.}} is replaced with the internal ID of the FB/IG user. +# Localpart template of MXIDs for FB users. +# {{.}} is replaced with the internal ID of the FB user. # Changing this may require that you change the regex in the appservice. matrix_bridge_mautrix_meta_messenger_bridge_username_template: "{{ matrix_bridge_mautrix_meta_messenger_bridge_username_prefix + '{{.}}' }}" -matrix_bridge_mautrix_meta_messenger_bridge_displayname_suffix: |- - {{ - ({ - 'facebook': '(FB)', - 'facebook-tor': '(FB)', - 'messenger': '(FB)', - 'instagram': '(IG)', - })[matrix_bridge_mautrix_meta_messenger_meta_mode] - }} +matrix_bridge_mautrix_meta_messenger_bridge_displayname_suffix: '(FB)' matrix_bridge_mautrix_meta_messenger_bridge_displayname_template: '{% raw %}{{or .DisplayName .Username "Unknown user"}}{% endraw %}{{ (" " ~ matrix_bridge_mautrix_meta_messenger_bridge_displayname_suffix) if matrix_bridge_mautrix_meta_messenger_bridge_displayname_suffix else "" }}' # The prefix for commands. Only required in non-management rooms. -matrix_bridge_mautrix_meta_messenger_bridge_command_prefix: |- - {{ - ({ - 'facebook': '!fb', - 'facebook-tor': '!fb', - 'messenger': '!fb', - 'instagram': '!ig', - })[matrix_bridge_mautrix_meta_messenger_meta_mode] - }} +matrix_bridge_mautrix_meta_messenger_bridge_command_prefix: '!fb' # Whether or not created rooms should have federation enabled. # If false, created portal rooms will never be federated. diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/install.yml b/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/install.yml index 1f814b84e..b18a6ef6a 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/install.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/install.yml @@ -125,7 +125,7 @@ - name: Ensure mautrix-meta-messenger.service installed ansible.builtin.template: - src: "{{ role_path }}/templates/systemd/matrix-mautrix-meta.service.j2" + src: "{{ role_path }}/templates/systemd/matrix-mautrix-meta-messenger.service.j2" dest: "{{ devture_systemd_docker_base_systemd_path }}/{{ matrix_bridge_mautrix_meta_messenger_identifier }}.service" mode: '0644' register: matrix_bridge_mautrix_meta_messenger_systemd_service_result diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/validate_config.yml b/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/validate_config.yml index 529e75785..99ef354dc 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/validate_config.yml +++ b/roles/custom/matrix-bridge-mautrix-meta-messenger/tasks/validate_config.yml @@ -43,3 +43,4 @@ - {'old': 'matrix_bridge_mautrix_meta_messenger_container_labels_metrics_middleware_basic_auth_enabled', 'new': ' (mautrix-meta-messenger does not support metrics)'} - {'old': 'matrix_bridge_mautrix_meta_messenger_container_labels_metrics_middleware_basic_auth_users', 'new': ' (mautrix-meta-messenger does not support metrics)'} - {'old': 'matrix_bridge_mautrix_meta_messenger_meta_ig_e2ee', 'new': ' (mautrix-meta no longer has an `ig_e2ee` configuration option)'} + - {'old': 'matrix_bridge_mautrix_meta_messenger_appservice_username_prefix', 'new': ''} diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/config.yaml.j2 b/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/config.yaml.j2 index 47accdcef..cdebfe3b0 100644 --- a/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/config.yaml.j2 +++ b/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/config.yaml.j2 @@ -1,18 +1,7 @@ #jinja2: lstrip_blocks: True # Network-specific config options network: - # Which service is this bridge for? Available options: - # * unset - allow users to pick any service when logging in (except facebook-tor) - # * facebook - connect to FB Messenger via facebook.com - # * facebook-tor - connect to FB Messenger via facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion - # (note: does not currently proxy media downloads) - # * messenger - connect to FB Messenger via messenger.com (can be used with the facebook side deactivated) - # * instagram - connect to Instagram DMs via instagram.com - # - # Remember to change the appservice ID, bot profile info, bridge username_template and management_room_text too. - mode: {{ matrix_bridge_mautrix_meta_messenger_meta_mode | to_json }} - - # Displayname template for FB/IG users. Available variables: + # Displayname template for FB users. Available variables: # .DisplayName - The display name set by the user. # .Username - The username set by the user. # .ID - The internal user ID of the user. @@ -20,17 +9,43 @@ network: # Static proxy address (HTTP or SOCKS5) for connecting to Meta. proxy: + # If using a Tor proxy in the field above, you can set this to connect to + # facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion instead of facebook.com. + tor: {{ (matrix_bridge_mautrix_meta_messenger_meta_mode == 'facebook-tor') | to_json }} # HTTP endpoint to request new proxy address from, for dynamically assigned proxies. # The endpoint must return a JSON body with a string field called proxy_url. get_proxy_from: + # Should media be proxied too? + proxy_media: false + # Should E2EE messages be proxied too? + proxy_e2ee: false + # Should Messenger Lite login traffic be proxied? + proxy_messenger_lite: true + # Should other traffic, not configured here, be proxied? + proxy_other: true # Minimum interval between full reconnects in seconds, default is 1 hour min_full_reconnect_interval_seconds: 3600 # Interval to force refresh the connection (full reconnect), default is 20 hours. Set 0 to disable force refreshes. force_refresh_interval_seconds: 72000 - # Disable fetching XMA media (reels, stories, etc) when backfilling. - disable_xma_backfill: true - # Disable fetching XMA media entirely. - disable_xma_always: false + # Should connection state be cached to allow quicker restarts? + cache_connection_state: false + # Should the bridge mark you as online when you send typing + # notifications? Currently, this only has an effect for E2EE chats on + # Facebook/Messenger. Full presence bridging is not supported. + send_presence_on_typing: false + # Should view-once messages be disabled entirely? + disable_view_once: false + # Should FB marketplace chats have a separate space inside the main Facebook space? + marketplace_space: true + # Log raw Bloks payloads even at debug level, with any user identifiers or credentials redacted. + log_redacted_bloks_payloads: false + + # Thread backfill settings for syncing older conversations + thread_backfill: + # Number of batches (pages) to backfill (-1 for unlimited, 0 to disable) + batch_count: -1 + # Delay between fetching each batch of threads (to avoid rate limiting) + batch_delay: 2s # Config options that affect the central bridge module. diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta.service.j2 b/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta-messenger.service.j2 similarity index 100% rename from roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta.service.j2 rename to roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta-messenger.service.j2 diff --git a/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta.service.j2.license b/roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta-messenger.service.j2.license similarity index 100% rename from roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta.service.j2.license rename to roles/custom/matrix-bridge-mautrix-meta-messenger/templates/systemd/matrix-mautrix-meta-messenger.service.j2.license