mautrix / telegram

A Matrix-Telegram hybrid puppeting/relaybot bridge
https://matrix.to/#/#telegram:maunium.net
GNU Affero General Public License v3.0
1.3k stars 172 forks source link

"Empty room" invites after (during startup) chat sync #876

Closed IngwiePhoenix closed 1 year ago

IngwiePhoenix commented 1 year ago

First, my setup:

Homeserver: Dendrite (ingwie.me) 0.10.7 Clients:

docker-compose.yml:

version: "3.6"
services:
  mautrix-telegram:
    image: dock.mau.dev/mautrix/telegram:latest
    restart: unless-stopped
    volumes:
      #- ./:/data
      #- mt_db:/db
      - type: bind
        source: ./
        target: /data
      - type: bind
        source: ./db/
        target: /opt/mautrix-telegram/db
    ports:
      - 29317:29317

config.yml:

# Homeserver details
homeserver:
    # The address that this appservice can use to connect to the homeserver.
    address: https://ingwie.me
    # The domain of the homeserver (for MXIDs, etc).
    domain: ingwie.me
    # Whether or not to verify the SSL certificate of the homeserver.
    # Only applies if address starts with https://
    verify_ssl: true
    # What software is the homeserver running?
    # Standard Matrix homeservers like Synapse, Dendrite and Conduit should just use "standard" here.
    software: standard
    # Number of retries for all HTTP requests if the homeserver isn't reachable.
    http_retry_count: 4
    # The URL to push real-time bridge status to.
    # If set, the bridge will make POST requests to this URL whenever a user's Telegram connection state changes.
    # The bridge will use the appservice as_token to authorize requests.
    status_endpoint:
    # Endpoint for reporting per-message status.
    message_send_checkpoint_endpoint:
    # Whether asynchronous uploads via MSC2246 should be enabled for media.
    # Requires a media repo that supports MSC2246.
    async_media: false

# Application service host/registration related details
# Changing these values requires regeneration of the registration.
appservice:
    # The address that the homeserver can use to connect to this appservice.
    address: http://localhost:29317
    # When using https:// the TLS certificate and key files for the address.
    tls_cert: false
    tls_key: false

    # The hostname and port where this appservice should listen.
    hostname: 0.0.0.0
    port: 29317
    # The maximum body size of appservice API requests (from the homeserver) in mebibytes
    # Usually 1 is enough, but on high-traffic bridges you might need to increase this to avoid 413s
    max_body_size: 1

    # The full URI to the database. SQLite and Postgres are supported.
    # Format examples:
    #   SQLite:   sqlite:///filename.db
    #   Postgres: postgres://username:password@hostname/dbname
    database: sqlite:./db/store.db
    # Additional arguments for asyncpg.create_pool() or sqlite3.connect()
    # https://magicstack.github.io/asyncpg/current/api/index.html#asyncpg.pool.create_pool
    # https://docs.python.org/3/library/sqlite3.html#sqlite3.connect
    # For sqlite, min_size is used as the connection thread pool size and max_size is ignored.
    # Additionally, SQLite supports init_commands as an array of SQL queries to run on connect (e.g. to set PRAGMAs).
    database_opts:
        min_size: 1
        max_size: 10
    public:
        # Whether or not the public-facing endpoints should be enabled.
        enabled: true
        # The prefix to use in the public-facing endpoints.
        prefix: /_matrix_telegram
        # The base URL where the public-facing endpoints are available. The prefix is not added
        # implicitly.
        external: https://ingwie.me/_matrix_telegram

    # Provisioning API part of the web server for automated portal creation and fetching information.
    # Used by things like mautrix-manager (https://github.com/tulir/mautrix-manager).
    provisioning:
        # Whether or not the provisioning API should be enabled.
        enabled: true
        # The prefix to use in the provisioning API endpoints.
        prefix: /_matrix/provision
        # The shared secret to authorize users of the API.
        # Set to "generate" to generate and save a new token.
        shared_secret: <redacted>

    # The unique ID of this appservice.
    id: telegram
    # Username of the appservice bot.
    bot_username: telegrambot
    # Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty
    # to leave display name/avatar as-is.
    bot_displayname: Telegram bridge bot
    bot_avatar: mxc://maunium.net/tJCRmUyJDsgRNgqhOgoiHWbX

    # Whether or not to receive ephemeral events via appservice transactions.
    # Requires MSC2409 support (i.e. Synapse 1.22+).
    # You should disable bridge -> sync_with_custom_puppets when this is enabled.
    ephemeral_events: false

    # Authentication tokens for AS <-> HS communication. Autogenerated; do not modify.
    as_token: <redacted>
    hs_token: <redacted>

# Prometheus telemetry config. Requires prometheus-client to be installed.
metrics:
    enabled: false
    listen_port: 8000

# Manhole config.
manhole:
    # Whether or not opening the manhole is allowed.
    enabled: false
    # The path for the unix socket.
    path: /var/tmp/mautrix-telegram.manhole
    # The list of UIDs who can be added to the whitelist.
    # If empty, any UIDs can be specified in the open-manhole command.
    whitelist:
    - 0
bridge:
    # Localpart template of MXIDs for Telegram users.
    # {userid} is replaced with the user ID of the Telegram user.
    username_template: telegram_{userid}
    # Localpart template of room aliases for Telegram portal rooms.
    # {groupname} is replaced with the name part of the public channel/group invite link ( https://t.me/{} )
    alias_template: telegram_{groupname}
    # Displayname template for Telegram users.
    # {displayname} is replaced with the display name of the Telegram user.
    displayname_template: '{displayname} (Telegram)'

    # Set the preferred order of user identifiers which to use in the Matrix puppet display name.
    # In the (hopefully unlikely) scenario that none of the given keys are found, the numeric user
    # ID is used.
    #
    # If the bridge is working properly, a phone number or an username should always be known, but
    # the other one can very well be empty.
    #
    # Valid keys:
    #   "full name"          (First and/or last name)
    #   "full name reversed" (Last and/or first name)
    #   "first name"
    #   "last name"
    #   "username"
    #   "phone number"
    displayname_preference:
    - full name
    - username
    - phone number
    displayname_max_length: 100
    # Remove avatars from Telegram ghost users when removed on Telegram. This is disabled by default
    # as there's no way to determine whether an avatar is removed or just hidden from some users. If
    # you're on a single-user instance, this should be safe to enable.
    allow_avatar_remove: true

    # Maximum number of members to sync per portal when starting up. Other members will be
    # synced when they send messages. The maximum is 10000, after which the Telegram server
    # will not send any more members.
    # -1 means no limit (which means it's limited to 10000 by the server)
    max_initial_member_sync: 100
    # Maximum number of participants in chats to bridge. Only applies when the portal is being created.
    # If there are more members when trying to create a room, the room creation will be cancelled.
    # -1 means no limit (which means all chats can be bridged)
    max_member_count: -1
    # Whether or not to sync the member list in channels.
    # If no channel admins have logged into the bridge, the bridge won't be able to sync the member
    # list regardless of this setting.
    sync_channel_members: true
    # Whether or not to skip deleted members when syncing members.
    skip_deleted_members: true
    # Whether or not to automatically synchronize contacts and chats of Matrix users logged into
    # their Telegram account at startup.
    startup_sync: true
    # Number of most recently active dialogs to check when syncing chats.
    # Set to 0 to remove limit.
    sync_update_limit: 0
    # Number of most recently active dialogs to create portals for when syncing chats.
    # Set to 0 to remove limit.
    sync_create_limit: 0
    # Should all chats be scheduled to be created later?
    # This is best used in combination with MSC2716 infinite backfill.
    sync_deferred_create_all: false
    # Whether or not to sync and create portals for direct chats at startup.
    sync_direct_chats: true
    # The maximum number of simultaneous Telegram deletions to handle.
    # A large number of simultaneous redactions could put strain on your homeserver.
    max_telegram_delete: 10
    # Whether or not to automatically sync the Matrix room state (mostly unpuppeted displaynames)
    # at startup and when creating a bridge.
    sync_matrix_state: true
    # Allow logging in within Matrix. If false, users can only log in using login-qr or the
    # out-of-Matrix login website (see appservice.public config section)
    allow_matrix_login: true
    # Whether or not to make portals of publicly joinable channels/supergroups publicly joinable on Matrix.
    public_portals: false
    # Whether or not to use /sync to get presence, read receipts and typing notifications
    # when double puppeting is enabled
    sync_with_custom_puppets: true
    # Whether or not to update the m.direct account data event when double puppeting is enabled.
    # Note that updating the m.direct event is not atomic (except with mautrix-asmux)
    # and is therefore prone to race conditions.
    sync_direct_chat_list: true
    # Servers to always allow double puppeting from
    double_puppet_server_map:
        ingwie.me: https://ingwie.me
    double_puppet_allow_discovery: true
    # Shared secrets for https://github.com/devture/matrix-synapse-shared-secret-auth
    #
    # If set, custom puppets will be enabled automatically for local users
    # instead of users having to find an access token and run `login-matrix`
    # manually.
    # If using this for other servers than the bridge's server,
    # you must also set the URL in the double_puppet_server_map.
    login_shared_secret_map:
        example.com: foobar
    telegram_link_preview: true
    # Whether or not the !tg join command should do a HTTP request
    # to resolve redirects in invite links.
    invite_link_resolve: true
    # Send captions in the same message as images. This will send data compatible with both MSC2530 and MSC3552.
    # This is currently not supported in most clients.
    caption_in_message: false
    # Maximum size of image in megabytes before sending to Telegram as a document.
    image_as_file_size: 5
    # Maximum number of pixels in an image before sending to Telegram as a document. Defaults to 4096x4096 = 16777216.
    image_as_file_pixels: 16777216
    # Enable experimental parallel file transfer, which makes uploads/downloads much faster by
    # streaming from/to Matrix and using many connections for Telegram.
    # Note that generating HQ thumbnails for videos is not possible with streamed transfers.
    # This option uses internal Telethon implementation details and may break with minor updates.
    parallel_file_transfer: false
    # Whether or not created rooms should have federation enabled.
    # If false, created portal rooms will never be federated.
    federate_rooms: false
    # Should the bridge send all unicode reactions as custom emoji reactions to Telegram?
    # By default, the bridge only uses custom emojis for unicode emojis that aren't allowed in reactions.
    always_custom_emoji_reaction: false
    # Settings for converting animated stickers.
    animated_sticker:
        # Format to which animated stickers should be converted.
        # disable - No conversion, send as-is (gzipped lottie)
        # png - converts to non-animated png (fastest),
        # gif - converts to animated gif
        # webm - converts to webm video, requires ffmpeg executable with vp9 codec and webm container support
        # webp - converts to animated webp, requires ffmpeg executable with webp codec/container support
        target: gif
        # Should video stickers be converted to the specified format as well?
        convert_from_webm: true
        # Arguments for converter. All converters take width and height.
        args:
            width: 256
            height: 256
            fps: 25 # only for webm, webp and gif (2, 5, 10, 20 or 25 recommended)
    # Settings for converting animated emoji.
    # Same as animated_sticker, but webm is not supported as the target
    # (because inline images can only contain images, not videos).
    animated_emoji:
        target: gif
        args:
            width: 64
            height: 64
            fps: 25
    # End-to-bridge encryption support options.
    #
    # See https://docs.mau.fi/bridges/general/end-to-bridge-encryption.html for more info.
    encryption:
        # Allow encryption, work in group chat rooms with e2ee enabled
        allow: false
        # Default to encryption, force-enable encryption in all portals the bridge creates
        # This will cause the bridge bot to be in private chats for the encryption to work properly.
        default: false
        # Whether to use MSC2409/MSC3202 instead of /sync long polling for receiving encryption-related data.
        appservice: false
        # Require encryption, drop any unencrypted messages.
        require: false
        # Enable key sharing? If enabled, key requests for rooms where users are in will be fulfilled.
        # You must use a client that supports requesting keys from other users to use this feature.
        allow_key_sharing: true
        # What level of device verification should be required from users?
        #
        # Valid levels:
        #   unverified - Send keys to all device in the room.
        #   cross-signed-untrusted - Require valid cross-signing, but trust all cross-signing keys.
        #   cross-signed-tofu - Require valid cross-signing, trust cross-signing keys on first use (and reject changes).
        #   cross-signed-verified - Require valid cross-signing, plus a valid user signature from the bridge bot.
        #                           Note that creating user signatures from the bridge bot is not currently possible.
        #   verified - Require manual per-device verification
        #              (currently only possible by modifying the `trust` column in the `crypto_device` database table).
        verification_levels:
            # Minimum level for which the bridge should send keys to when bridging messages from Telegram to Matrix.
            receive: unverified
            # Minimum level that the bridge should accept for incoming Matrix messages.
            send: unverified
            # Minimum level that the bridge should require for accepting key requests.
            share: cross-signed-tofu
        # Options for Megolm room key rotation. These options allow you to
        # configure the m.room.encryption event content. See:
        # https://spec.matrix.org/v1.3/client-server-api/#mroomencryption for
        # more information about that event.
        rotation:
            # Enable custom Megolm room key rotation settings. Note that these
            # settings will only apply to rooms created after this option is
            # set.
            enable_custom: false
            # The maximum number of milliseconds a session should be used
            # before changing it. The Matrix spec recommends 604800000 (a week)
            # as the default.
            milliseconds: 604800000
            # The maximum number of messages that should be sent with a given a
            # session before changing it. The Matrix spec recommends 100 as the
            # default.
            messages: 100

    # Whether or not to explicitly set the avatar and room name for private
    # chat portal rooms. This will be implicitly enabled if encryption.default is true.
    private_chat_portal_meta: true
    # Whether or not the bridge should send a read receipt from the bridge bot when a message has
    # been sent to Telegram.
    delivery_receipts: true
    # Whether or not delivery errors should be reported as messages in the Matrix room.
    delivery_error_reports: true
    # Whether the bridge should send the message status as a custom com.beeper.message_send_status event.
    message_status_events: true
    # Set this to true to tell the bridge to re-send m.bridge events to all rooms on the next run.
    # This field will automatically be changed back to false after it,
    # except if the config file is not writable.
    resend_bridge_info: false
    # When using double puppeting, should muted chats be muted in Matrix?
    mute_bridging: true
    # When using double puppeting, should pinned chats be moved to a specific tag in Matrix?
    # The favorites tag is `m.favourite`.
    pinned_tag:
    # Same as above for archived chats, the low priority tag is `m.lowpriority`.
    archive_tag: m.lowpriority
    # Whether or not mute status and tags should only be bridged when the portal room is created.
    tag_only_on_create: true
    # Should leaving the room on Matrix make the user leave on Telegram?
    bridge_matrix_leave: false
    # Should the user be kicked out of all portals when logging out of the bridge?
    kick_on_logout: true
    # Should the "* user joined Telegram" notice always be marked as read automatically?
    always_read_joined_telegram_notice: true
    # Should the bridge auto-create a group chat on Telegram when a ghost is invited to a room?
    # Requires the user to have sufficient power level and double puppeting enabled.
    create_group_on_invite: true
    # Settings for backfilling messages from Telegram.
    backfill:
        # Allow backfilling at all?
        enable: true
        # Use MSC2716 for backfilling?
        #
        # This requires a server with MSC2716 support, which is currently an experimental feature in Synapse.
        # It can be enabled by setting experimental_features -> msc2716_enabled to true in homeserver.yaml.
        msc2716: false
        # Use double puppets for backfilling?
        #
        # If using MSC2716, the double puppets must be in the appservice's user ID namespace
        # (because the bridge can't use the double puppet access token with batch sending).
        #
        # Even without MSC2716, bridging old messages with correct timestamps requires the double
        # puppets to be in an appservice namespace, or the server to be modified to allow
        # overriding timestamps anyway.
        double_puppet_backfill: false
        # Whether or not to enable backfilling in normal groups.
        # Normal groups have numerous technical problems in Telegram, and backfilling normal groups
        # will likely cause problems if there are multiple Matrix users in the group.
        normal_groups: false

        # If a backfilled chat is older than this number of hours, mark it as read even if it's unread on Telegram.
        # Set to -1 to let any chat be unread.
        unread_hours_threshold: -1

        # Forward backfilling limits. These apply to both MSC2716 and legacy backfill.
        #
        # Using a negative initial limit is not recommended, as it would try to backfill everything in a single batch.
        # MSC2716 and the incremental settings are meant for backfilling everything incrementally rather than at once.
        forward:
            # Number of messages to backfill immediately after creating a portal.
            initial_limit: 10
            # Number of messages to backfill when syncing chats.
            sync_limit: 100

        # Settings for incremental backfill of history. These only apply when using MSC2716.
        incremental:
            # Maximum number of messages to backfill per batch.
            messages_per_batch: 100
            # The number of seconds to wait after backfilling the batch of messages.
            post_batch_delay: 5
            # The maximum number of batches to backfill per portal, split by the chat type.
            # If set to -1, all messages in the chat will eventually be backfilled.
            max_batches:
                # Direct chats
                user: -1
                # Normal groups. Note that the normal_groups option above must be enabled
                # for these to be backfilled.
                normal_group: -1
                # Supergroups
                supergroup: 10
                # Broadcast channels
                channel: -1

    # Overrides for base power levels.
    initial_power_level_overrides:
        user: {}
        group: {}

    # Whether to bridge Telegram bot messages as m.notices or m.texts.
    bot_messages_as_notices: true
    bridge_notices:
        # Whether or not Matrix bot messages (type m.notice) should be bridged.
        default: false
        # List of user IDs for whom the previous flag is flipped.
        # e.g. if bridge_notices.default is false, notices from other users will not be bridged, but
        #      notices from users listed here will be bridged.
        exceptions: []

    # An array of possible values for the $distinguisher variable in message formats.
    # Each user gets one of the values here, based on a hash of their user ID.
    # If the array is empty, the $distinguisher variable will also be empty.
    relay_user_distinguishers: [šŸŸ¦, šŸŸ£, šŸŸ©, ā­•ļø, šŸ”¶, ā¬›ļø, šŸ”µ, šŸŸ¢]
    # The formats to use when sending messages to Telegram via the relay bot.
    # Text msgtypes (m.text, m.notice and m.emote) support HTML, media msgtypes don't.
    #
    # Available variables:
    #   $sender_displayname - The display name of the sender (e.g. Example User)
    #   $sender_username    - The username (Matrix ID localpart) of the sender (e.g. exampleuser)
    #   $sender_mxid        - The Matrix ID of the sender (e.g. @exampleuser:example.com)
    #   $distinguisher      - A random string from the options in the relay_user_distinguishers array.
    #   $message            - The message content
    message_formats:
        m.text: '$distinguisher <b>$sender_displayname</b>: $message'
        m.notice: '$distinguisher <b>$sender_displayname</b>: $message'
        m.emote: '* $distinguisher <b>$sender_displayname</b> $message'
        m.file: '$distinguisher <b>$sender_displayname</b> sent a file: $message'
        m.image: '$distinguisher <b>$sender_displayname</b> sent an image: $message'
        m.audio: '$distinguisher <b>$sender_displayname</b> sent an audio file: $message'
        m.video: '$distinguisher <b>$sender_displayname</b> sent a video: $message'
        m.location: '$distinguisher <b>$sender_displayname</b> sent a location: $message'
    # Telegram doesn't have built-in emotes, this field specifies how m.emote's from authenticated
    # users are sent to telegram. All fields in message_formats are supported. Additionally, the
    # Telegram user info is available in the following variables:
    #    $displayname - Telegram displayname
    #    $username    - Telegram username (may not exist)
    #    $mention     - Telegram @username or displayname mention (depending on which exists)
    emote_format: '* $mention $formatted_body'

    # The formats to use when sending state events to Telegram via the relay bot.
    #
    # Variables from `message_formats` that have the `sender_` prefix are available without the prefix.
    # In name_change events, `$prev_displayname` is the previous displayname.
    #
    # Set format to an empty string to disable the messages for that event.
    state_event_formats:
        join: $distinguisher <b>$displayname</b> joined the room.
        leave: $distinguisher <b>$displayname</b> left the room.
        name_change: $distinguisher <b>$prev_displayname</b> changed their name to $distinguisher <b>$displayname</b>

    # Filter rooms that can/can't be bridged. Can also be managed using the `filter` and
    # `filter-mode` management commands.
    #
    # Filters do not affect direct chats.
    # An empty blacklist will essentially disable the filter.
    filter:
        # Filter mode to use. Either "blacklist" or "whitelist".
        # If the mode is "blacklist", the listed chats will never be bridged.
        # If the mode is "whitelist", only the listed chats can be bridged.
        mode: blacklist
        # The list of group/channel IDs to filter.
        list: []

    # The prefix for commands. Only required in non-management rooms.
    command_prefix: '!tg'

    # Messages sent upon joining a management room.
    # Markdown is supported. The defaults are listed below.
    management_room_text:
        # Sent when joining a room.
        welcome: Hello, I'm a Telegram bridge bot.
        # Sent when joining a management room and the user is already logged in.
        welcome_connected: Use `help` for help.
        # Sent when joining a management room and the user is not logged in.
        welcome_unconnected: Use `help` for help or `login` to log in.
        # Optional extra text sent when joining a management room.
        additional_help: ''

    # Send each message separately (for readability in some clients)
    management_room_multiple_messages: false

    # Permissions for using the bridge.
    # Permitted values:
    #   relaybot - Only use the bridge via the relaybot, no access to commands.
    #       user - Relaybot level + access to commands to create bridges.
    #  puppeting - User level + logging in with a Telegram account.
    #       full - Full access to use the bridge, i.e. previous levels + Matrix login.
    #      admin - Full access to use the bridge and some extra administration commands.
    # Permitted keys:
    #        * - All Matrix users
    #   domain - All users on that homeserver
    #     mxid - Specific user
    permissions:
        '@ingwiephoenix:ingwie.me': admin
    relaybot:
        private_chat:
            # List of users to invite to the portal when someone starts a private chat with the bot.
            # If empty, private chats with the bot won't create a portal.
            invite: []
            # Whether or not to bridge state change messages in relaybot private chats.
            state_changes: true
            # When private_chat_invite is empty, this message is sent to users /starting the
            # relaybot. Telegram's "markdown" is supported.
            message: This is a Matrix bridge relaybot and does not support direct chats
        # List of users to invite to all group chat portals created by the bridge.
        group_chat_invite: []
        # Whether or not the relaybot should not bridge events in unbridged group chats.
        # If false, portals will be created when the relaybot receives messages, just like normal
        # users. This behavior is usually not desirable, as it interferes with manually bridging
        # the chat to another room.
        ignore_unbridged_group_chat: true
        # Whether or not to allow creating portals from Telegram.
        authless_portals: true
        # Whether or not to allow Telegram group admins to use the bot commands.
        whitelist_group_admins: true
        # Whether or not to ignore incoming events sent by the relay bot.
        ignore_own_incoming_events: true
        # List of usernames/user IDs who are also allowed to use the bot commands.
        whitelist:
        - myusername
        - 12345678
telegram:
    # Get your own API keys at https://my.telegram.org/apps
    api_id: <redacted>
    api_hash: <redacted>
    # (Optional) Create your own bot at https://t.me/BotFather
    bot_token: disabled

    # Should the bridge request missed updates from Telegram when restarting?
    catch_up: true
    # Should incoming updates be handled sequentially to make sure order is preserved on Matrix?
    sequential_updates: true
    exit_on_update_error: false

    # Telethon connection options.
    connection:
        # The timeout in seconds to be used when connecting.
        timeout: 120
        # How many times the reconnection should retry, either on the initial connection or when
        # Telegram disconnects us. May be set to a negative or null value for infinite retries, but
        # this is not recommended, since the program can get stuck in an infinite loop.
        retries: 5
        # The delay in seconds to sleep between automatic reconnections.
        retry_delay: 1
        # The threshold below which the library should automatically sleep on flood wait errors
        # (inclusive). For instance, if a FloodWaitError for 17s occurs and flood_sleep_threshold
        # is 20s, the library will sleep automatically. If the error was for 21s, it would raise
        # the error instead. Values larger than a day (86400) will be changed to a day.
        flood_sleep_threshold: 60
        # How many times a request should be retried. Request are retried when Telegram is having
        # internal issues, when there is a FloodWaitError less than flood_sleep_threshold, or when
        # there's a migrate error. May take a negative or null value for infinite retries, but this
        # is not recommended, since some requests can always trigger a call fail (such as searching
        # for messages).
        request_retries: 5

    # Device info sent to Telegram.
    device_info:
        # "auto" = OS name+version.
        device_model: mautrix-telegram
        # "auto" = Telethon version.
        system_version: auto
        # "auto" = mautrix-telegram version.
        app_version: auto
        lang_code: en
        system_lang_code: en

    # Custom server to connect to.
    server:
        # Set to true to use these server settings. If false, will automatically
        # use production server assigned by Telegram. Set to false in production.
        enabled: false
        # The DC ID to connect to.
        dc: 2
        # The IP to connect to.
        ip: 149.154.167.40
        # The port to connect to. 443 may not work, 80 is better and both are equally secure.
        port: 80

    # Telethon proxy configuration.
    # You must install PySocks from pip for proxies to work.
    proxy:
        # Allowed types: disabled, socks4, socks5, http, mtproxy
        type: disabled
        # Proxy IP address and port.
        address: 127.0.0.1
        port: 1080
        # Whether or not to perform DNS resolving remotely. Only for socks/http proxies.
        rdns: true
        # Proxy authentication (optional). Put MTProxy secret in password field.
        username: ''
        password: ''

# Python logging configuration.
#
# See section 16.7.2 of the Python documentation for more info:
# https://docs.python.org/3.6/library/logging.config.html#configuration-dictionary-schema
logging:
    version: 1
    formatters:
        colored:
            (): mautrix_telegram.util.ColorFormatter
            format: '[%(asctime)s] [%(levelname)s@%(name)s] %(message)s'
        normal:
            format: '[%(asctime)s] [%(levelname)s@%(name)s] %(message)s'
    handlers:
        console:
            class: logging.StreamHandler
            formatter: colored
    loggers:
        mau:
            level: DEBUG
        telethon:
            level: INFO
        aiohttp:
            level: INFO
    root:
        level: DEBUG
        handlers: [console]

Once I start the bridge, I get a lot of "Empty room" invites, which causes Element to show me an error message and tells me to file an issue, whilst Cinny and Element Android at least give me the option to join or decline. Once I do join, the room loads properly and entirely.

image image

When setting up the bridge, I initially had E2EE enabled, but then was shown an error message in the management room that it was potentially not supported by my homeserver; so I disabled it, without wiping the configuration. This is a single-user instance, so I felt confortable using SQLite.

Do you see any possible cause of this in the configuration?

Thank you and kind regards, Ingwie

IngwiePhoenix commented 1 year ago

I nuked my installation of the bridge, changed id, prefixes and alike, re-registered and made sure encryption was completely disabled. That ended up working.

Still confused about this oddity though but oh well.