A Matrix-Instagram DM puppeting bridge

Overview
Comments
  • Attachment not available: failed to copy file when receiving voice messages

    Attachment not available: failed to copy file when receiving voice messages

    As the title says, when receiving voice messages now, it always says "Attachment not available: failed to copy file" and I can't hear it (obviously), wasn't always like this.

    Using Element web & android from what I can tell i'm using 0.2.2 so the latest

    opened by Mozoloa 5
  • Challenge required on login

    Challenge required on login

    I logged out in the bridge, changed IG password on the web, then logged in on the web without any error, then tried to log in with the bridge, and I get this error every time:

    Unhandled error while handling command:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/commands/auth.py", line 77, in login
        resp = await api.login(username, password)
      File "/opt/mautrix-instagram/mauigpapi/http/login.py", line 58, in login
        return await self.std_http_post(
      File "/opt/mautrix-instagram/mauigpapi/http/base.py", line 158, in std_http_post
        json_data = await self._handle_response(resp)
      File "/opt/mautrix-instagram/mauigpapi/http/base.py", line 191, in _handle_response
        await self._raise_response_error(resp)
      File "/opt/mautrix-instagram/mauigpapi/http/base.py", line 213, in _raise_response_error
        raise err
    mauigpapi.errors.response.IGChallengeError: Request POST /api/v1/accounts/login/ failed: challenge_required
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/mautrix/bridge/commands/handler.py", line 491, in handle
        await self._run_handler(handler, evt)
      File "/usr/lib/python3.10/site-packages/mautrix/bridge/commands/handler.py", line 340, in __call__
        return await self._handler(evt)
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/commands/auth.py", line 100, in login
        await api.challenge_auto(reset=True)
      File "/opt/mautrix-instagram/mauigpapi/http/challenge.py", line 107, in challenge_auto
        challenge = self.state.challenge or await self.challenge_get_state()
      File "/opt/mautrix-instagram/mauigpapi/http/challenge.py", line 35, in challenge_get_state
        await self.std_http_get(self.__path, query=query, response_type=ChallengeStateResponse)
      File "/opt/mautrix-instagram/mauigpapi/http/challenge.py", line 26, in __path
        return f"/api/v1{self.state.challenge_path}"
      File "/opt/mautrix-instagram/mauigpapi/state/state.py", line 77, in challenge_path
        raise IGNoChallengeError()
    mauigpapi.errors.state.IGNoChallengeError: No challenge data available
    

    After it happens, I need to accept a "was this you" screen on the web:

    Screenshot_2022-11-30_12-54-59

    I suppose this is what the bridge is presented, too, and so it can't login. Maybe the screen is different from what the bridge expects, so that's why there is "no challenge data available" or I don't know.

    opened by immanuelfodor 4
  • error when running

    error when running

    here is the log

    Nov 22 18:20:20 server python[680955]: [2021-11-22 18:20:20,963] [[email protected]] Initializing mautrix-instagram 0.1.1+dev.a87b1a44
    Nov 22 18:20:20 server python[680955]: [2021-11-22 18:20:20,965] [[email protected]] Initialization complete in 0.08 seconds
    Nov 22 18:20:20 server python[680955]: [2021-11-22 18:20:20,965] [[email protected]] Running startup actions...
    Nov 22 18:20:20 server python[680955]: [2021-11-22 18:20:20,966] [[email protected]] Connecting to postgres://instagram:[redacted]@127.0.0.1/instagram
    Nov 22 18:20:20 server python[680955]: [2021-11-22 18:20:20,966] [[email protected]] Unexpected error in main event loop
    Nov 22 18:20:20 server python[680955]: Traceback (most recent call last):
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/mautrix/util/program.py", line 197, in _run
    Nov 22 18:20:20 server python[680955]:     self.loop.run_until_complete(self.start())
    Nov 22 18:20:20 server python[680955]:   File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    Nov 22 18:20:20 server python[680955]:     return future.result()
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/mautrix_instagram/__main__.py", line 76, in start
    Nov 22 18:20:20 server python[680955]:     await self.db.start()
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/mautrix/util/async_db/asyncpg.py", line 39, in start
    Nov 22 18:20:20 server python[680955]:     self._pool = await asyncpg.create_pool(self.url, **self._db_args)
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/pool.py", line 407, in _async__init__
    Nov 22 18:20:20 server python[680955]:     await self._initialize()
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/pool.py", line 435, in _initialize
    Nov 22 18:20:20 server python[680955]:     await first_ch.connect()
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/pool.py", line 127, in connect
    Nov 22 18:20:20 server python[680955]:     self._con = await self._pool._get_new_connection()
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/pool.py", line 477, in _get_new_connection
    Nov 22 18:20:20 server python[680955]:     con = await connection.connect(
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/connection.py", line 1981, in connect
    Nov 22 18:20:20 server python[680955]:     return await connect_utils._connect(
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/connect_utils.py", line 725, in _connect
    Nov 22 18:20:20 server python[680955]:     addrs, params, config = _parse_connect_arguments(timeout=timeout, **kwargs)
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/connect_utils.py", line 491, in _parse_connect_arguments
    Nov 22 18:20:20 server python[680955]:     addrs, params = _parse_connect_dsn_and_args(
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/connect_utils.py", line 253, in _parse_connect_dsn_and_args
    Nov 22 18:20:20 server python[680955]:     host, port = _parse_hostlist(dsn_hostspec, port, unquote=True)
    Nov 22 18:20:20 server python[680955]:   File "/opt/mautrix-instagram/lib/python3.9/site-packages/asyncpg/connect_utils.py", line 213, in _parse_hostlist
    Nov 22 18:20:20 server python[680955]:     hostlist_ports.append(int(hostspec_port))
    Nov 22 18:20:20 server python[680955]: ValueError: invalid literal for int() with base 10: '!2'
    Nov 22 18:20:21 server systemd[1]: mautrix-instagram.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
    Nov 22 18:20:21 server systemd[1]: mautrix-instagram.service: Failed with result 'exit-code'.
    lines 31-73/73 (END)
    ~~~
    opened by Anas-Sherif 4
  • Error on first Setup

    Error on first Setup

    I use PostgresSQL and if try to create the Registration.yaml i get this error Virtualenv Python 3.9 latest

    source bin/activate
    pip install --upgrade https://github.com/tulir/mautrix-instagram/tarball/master#egg=mautrix-instagram[all] \
    pip install --upgrade psycopg2-binary
    python -m mautrix_instagram -g -c config.yaml
    
    Traceback (most recent call last):
      File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mautrix_instagram/__main__.py", line 26, in <module>
        from .db import upgrade_table, init as init_db
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mautrix_instagram/db/__init__.py", line 4, in <module>
        from .user import User
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mautrix_instagram/db/user.py", line 21, in <module>
        from mauigpapi.state import AndroidState
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mauigpapi/__init__.py", line 1, in <module>
        from .state import AndroidState
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mauigpapi/state/__init__.py", line 1, in <module>
        from .state import AndroidState
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mauigpapi/state/state.py", line 28, in <module>
        from .device import AndroidDevice
      File "/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mauigpapi/state/device.py", line 29, in <module>
        builds = json.loads(pkgutil.get_data("mauigpapi.state", "samples/builds.json"))
      File "/usr/lib/python3.9/pkgutil.py", line 638, in get_data
        return loader.get_data(resource_name)
      File "<frozen importlib._bootstrap_external>", line 979, in get_data
    FileNotFoundError: [Errno 2] No such file or directory: '/opt/matrix/bridges/matrix-appservice-instagram/lib/python3.9/site-packages/mauigpapi/state/samples/builds.json'
    
    
    opened by DoM1niC 4
  • Duplicate Messages in backfilled chats

    Duplicate Messages in backfilled chats

    When backfilling chats, the first messages are duplicated. The exact number of duplications varies, I counted between 6 and 9 times the same messages. The number of messages duplicated also varies, I counted 3-6. All chats with duplicates have more than 5 messages, all chats without have less than 5 messages. This didn't occur yesterday with bride version mautrix-instagram 0.2.3+dev.6556cbb7. I cleared the cache of Element Desktop (Windows) and also verified the existente of the duplicate messages in Element Android. current bridge version: mautrix-instagram 0.2.3+dev.6f40e012.

    I'm not sure what to search for in the logs, please tell me what information you need :)

    Relevant config:

        max_startup_thread_sync_count: 40
        backfill:
            enable: true
            msc2716: true
            double_puppet_backfill: false
            max_conversations: -1
            min_sync_thread_delay: 5
            unread_hours_threshold: 0
            backoff:
                thread_list: 300
                message_history: 300
            incremental:
                max_pages: 10
                max_total_pages: -1
                page_delay: 5
                post_batch_delay: 20
    
    opened by Severin-S 3
  • Message sent from instagram are not reported in the bridge room

    Message sent from instagram are not reported in the bridge room

    Backfilled messages use a puppet to mimic the linked account posting messages, but this is not the case when the bot is live running.

    Any message sent from instagram fail with the following error:

    Nov 25 07:20:45 mathilda python[4435]: [2021-11-25 07:20:45,020] [[email protected]] Fatal error handling Instagram item
    Nov 25 07:20:45 mathilda python[4435]: Traceback (most recent call last):
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 350, in ensure_joined
    Nov 25 07:20:45 mathilda python[4435]:     await self.join_room(room_id, max_retries=0)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 83, in wrapper
    Nov 25 07:20:45 mathilda python[4435]:     return await __method(*args, **kwargs)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/client/api/rooms.py", line 270, in join_room
    Nov 25 07:20:45 mathilda python[4435]:     content=content, query_params=query_params)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/api.py", line 299, in request
    Nov 25 07:20:45 mathilda python[4435]:     return await self._send(method, full_url, content, query_params, headers or {})
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/api.py", line 221, in _send
    Nov 25 07:20:45 mathilda python[4435]:     errcode=errcode, message=message)
    Nov 25 07:20:45 mathilda python[4435]: mautrix.errors.request.MForbidden: You are not invited to this room.
    Nov 25 07:20:45 mathilda python[4435]: During handling of the above exception, another exception occurred:
    Nov 25 07:20:45 mathilda python[4435]: Traceback (most recent call last):
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 350, in ensure_joined
    Nov 25 07:20:45 mathilda python[4435]:     await self.join_room(room_id, max_retries=0)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 83, in wrapper
    Nov 25 07:20:45 mathilda python[4435]:     return await __method(*args, **kwargs)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/client/api/rooms.py", line 270, in join_room
    Nov 25 07:20:45 mathilda python[4435]:     content=content, query_params=query_params)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/api.py", line 299, in request
    Nov 25 07:20:45 mathilda python[4435]:     return await self._send(method, full_url, content, query_params, headers or {})
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/api.py", line 221, in _send
    Nov 25 07:20:45 mathilda python[4435]:     errcode=errcode, message=message)
    Nov 25 07:20:45 mathilda python[4435]: mautrix.errors.request.MForbidden: You are not invited to this room.
    Nov 25 07:20:45 mathilda python[4435]: The above exception was the direct cause of the following exception:
    Nov 25 07:20:45 mathilda python[4435]: Traceback (most recent call last):
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/portal.py", line 673, in handle_instagram_item
    Nov 25 07:20:45 mathilda python[4435]:     await self._handle_instagram_item(source, sender, item, is_backfill)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/portal.py", line 758, in _handle_instagram_item
    Nov 25 07:20:45 mathilda python[4435]:     event_id = await self._handle_instagram_text(intent, item, item.text)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/portal.py", line 635, in _handle_instagram_text
    Nov 25 07:20:45 mathilda python[4435]:     return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/bridge/portal.py", line 80, in _send_message
    Nov 25 07:20:45 mathilda python[4435]:     return await intent.send_message_event(self.mxid, event_type, content, **kwargs)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 94, in wrapper
    Nov 25 07:20:45 mathilda python[4435]:     await __self.ensure_joined(room_id)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 356, in ensure_joined
    Nov 25 07:20:45 mathilda python[4435]:     await bot.invite_user(room_id, self.mxid)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 94, in wrapper
    Nov 25 07:20:45 mathilda python[4435]:     await __self.ensure_joined(room_id)
    Nov 25 07:20:45 mathilda python[4435]:   File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/appservice/api/intent.py", line 354, in ensure_joined
    Nov 25 07:20:45 mathilda python[4435]:     raise IntentError(f"Failed to join room {room_id} as {self.mxid}") from e
    Nov 25 07:20:45 mathilda python[4435]: mautrix.errors.base.IntentError: Failed to join room !pPRsTtrCYqdmBgtlzy:server.com as @instagrambot:serveur.com
    

    Expected behavior: A puppet is invited, transmit the message then leaves. This may be related to #15.

    opened by NicolasDerumigny 3
  • Login half-succeeds / connection error

    Login half-succeeds / connection error

    For about 18 hours now, the bridge (dock.mau.dev/mautrix/instagram:latest, pulled about an hour ago) fails to properly connect. It starts normally, upon logging in it reports success but a subsequent ping tells me I'm not actually logged in. The log contains the following error:

    [2022-10-05 09:32:06,754] [[email protected].@redacted] Error while connecting to Instagram
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 212, in _dict_to_attrs
        obj = attrs_type(**new_items)
    TypeError: CurrentUser.__init__() missing 1 required keyword-only argument: 'biography_product_mentions'
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 181, in try_connect
        await self.connect()
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 204, in connect
        resp = await client.current_user()
      File "/opt/mautrix-instagram/mauigpapi/http/account.py", line 29, in current_user
        return await self.std_http_get(
      File "/opt/mautrix-instagram/mauigpapi/http/base.py", line 177, in std_http_get
        return response_type.deserialize(json_data)
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 375, in deserialize
        return _dict_to_attrs(cls, data)
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 198, in _dict_to_attrs
        new_items[name] = _try_deserialize(field_meta, value)
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 229, in _try_deserialize
        return _deserialize(field.type, value, field.default)
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 267, in _deserialize
        return _dict_to_attrs(cls, value, default, default_if_empty=True)
      File "/usr/lib/python3.10/site-packages/mautrix/types/util/serializable_attrs.py", line 218, in _dict_to_attrs
        raise SerializerError(
    mautrix.types.util.serializable.SerializerError: Missing value for required key biography_product_mentions in CurrentUser
    
    
    opened by Philantrop 2
  • [Question] How does this bridge receive messages from IG without any published endpoint?

    [Question] How does this bridge receive messages from IG without any published endpoint?

    How does this bridge receive messages from IG without any published endpoint?

    I tried running this bridge on my development machine using docker. But without any published endpoint, it's able to receive messages from IG. I'm wondering how it's done.

    opened by dulguun0225 2
  • "Typing..." Delayed ?

    Hello,

    I'm using your bridge and everything works pretty well except I realized that there is a latency between the moment someone starts to write to me and the moment I see it.

    So when I'm talking with someone, I see a brief "typing..." with a message straight after, then the "typing..." sticks there (or reappears) for a while and disappears randomly without any other message received. It's happening on every conversation so it's not just someone being very hesitant about their messages hehe.

    Am I the only one ?

    Thanks you guys

    opened by Mozoloa 2
  • Missing value for required key is_pin in Thread error on login

    Missing value for required key is_pin in Thread error on login

    When trying to login to the bridge it says successfully logged in, gets my name and instagram sends me an email saying a new device has logged in but ping tells me MQTT not connected. Running connect gives this:

    Traceback (most recent call last):
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 194, in _dict_to_attrs
        obj = attrs_type(**new_items)
    TypeError: __init__() missing 1 required keyword-only argument: 'is_pin'
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/bridge/commands/handler.py", line 409, in handle
        await self._run_handler(handler, evt)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/bridge/commands/handler.py", line 296, in __call__
        return await self._handler(evt)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/commands/conn.py", line 70, in connect
        await evt.sender.refresh(resync=False)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/user.py", line 255, in refresh
        await self.start_listen()
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix_instagram/user.py", line 295, in start_listen
        resp = await self.client.get_inbox(limit=1)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mauigpapi/http/thread.py", line 39, in get_inbox
        response_type=DMInboxResponse)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mauigpapi/http/base.py", line 138, in std_http_get
        return response_type.deserialize(json_data)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 354, in deserialize
        return _dict_to_attrs(cls, data)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 182, in _dict_to_attrs
        new_items[name] = _try_deserialize(field_meta, value)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 210, in _try_deserialize
        return _deserialize(field.type, value, field.default)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 248, in _deserialize
        return _dict_to_attrs(cls, value, default, default_if_empty=True)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 182, in _dict_to_attrs
        new_items[name] = _try_deserialize(field_meta, value)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 210, in _try_deserialize
        return _deserialize(field.type, value, field.default)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 261, in _deserialize
        return [_deserialize(item_cls, item) for item in value]
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 261, in <listcomp>
        return [_deserialize(item_cls, item) for item in value]
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 248, in _deserialize
        return _dict_to_attrs(cls, value, default, default_if_empty=True)
      File "/opt/mautrix-instagram/lib/python3.7/site-packages/mautrix/types/util/serializable_attrs.py", line 201, in _dict_to_attrs
        f"{json_key} in {attrs_type.__name__}") from e
    mautrix.types.util.serializable.SerializerError: Missing value for required key is_pin in Thread
    

    The same error appeared in the bridge log when initially logging in but wasn't reported in the management room.

    opened by uumas 2
  • Shared Reels aren't sent

    Shared Reels aren't sent

    Reproduction steps:

    1. View a reel on instagram
    2. tap the paper airplane
    3. send to yourself

    for me, no message is sent from Instagram bridge bot. If possible, I'd like to get a message that a reel failed to send so I at least know to check instagram.

    opened by mibzman 2
  • Sending or receiving story in DM no longer downloads the video

    Sending or receiving story in DM no longer downloads the video

    Sending or receiving a story in DM in Instagram app would trigger the download of the story by the bridge, as it needs to show the message in the bridged room.

    However, since a month ago (roughly late November 2022), only an image would be downloaded and shown in the bridged room, regardless of the type of story. In other words, it would always download a still picture no matter the story is, indeed, a still picture, or a video.

    opened by ronyclau 0
  • error: bridge.permissions not configured

    error: bridge.permissions not configured

    I have 3 files:

    docker-compose.yml with conduit server, element and mautrix-instagram

    version: '3'
    services:
        homeserver:
            ### If you already built the Conduit image with 'docker build' or want to use a registry image,
            ### then you are ready to go.
            image: matrixconduit/matrix-conduit:latest
            ### If you want to build a fresh image from the sources, then comment the image line and uncomment the
            ### build lines. If you want meaningful labels in your built Conduit image, you should run docker-compose like this:
            ### CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ') VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml) docker-compose up -d
            # build:
            #     context: .
            #     args:
            #         CREATED: '2021-03-16T08:18:27Z'
            #         VERSION: '0.1.0'
            #         LOCAL: 'false'
            #         GIT_REF: origin/master
            restart: unless-stopped
            ports:
                - 8448:6167
            volumes:
                - db:/var/lib/matrix-conduit/
            environment:
                CONDUIT_SERVER_NAME: your.server.name # EDIT THIS
                CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/
                CONDUIT_DATABASE_BACKEND: rocksdb
                CONDUIT_PORT: 6167
                CONDUIT_MAX_REQUEST_SIZE: 20_000_000 # in bytes, ~20 MB
                CONDUIT_ALLOW_REGISTRATION: 'true'
                CONDUIT_ALLOW_FEDERATION: 'true'
                CONDUIT_TRUSTED_SERVERS: '["matrix.org"]'
                #CONDUIT_MAX_CONCURRENT_REQUESTS: 100
                #CONDUIT_LOG: warn,rocket=off,_=off,sled=off
                CONDUIT_ADDRESS: 0.0.0.0
                CONDUIT_CONFIG: '' # Ignore this
    
        ## Uncomment if you want to use your own Element-Web App.
        ## Note: You need to provide a config.json for Element and you also need a second
        ##       Domain or Subdomain for the communication between Element and Conduit
        ## Config-Docs: https://github.com/vector-im/element-web/blob/develop/docs/config.md
        element-web:
            image: vectorim/element-web:latest
            restart: unless-stopped
            ports:
                - 8009:80
            volumes:
                - ./element_config.json:/app/config.json
            depends_on:
                - homeserver
    
        mautrix-instagram:
            container_name: mautrix-instagram
            image: dock.mau.dev/mautrix/instagram
            restart: unless-stopped
            volumes:
                - .:/data
    
    
    volumes:
        db:
    

    Element_config.json

    {
        "default_server_config": {
            "m.homeserver": {
                "base_url": "http://localhost:8448"
            }
        }
    }
    

    and automatically generated config.yaml

    I couldn't open it as user so changed his permissions using

    sudo chown $USER config.yaml
    

    content of config.yml is

    # Homeserver details
    homeserver:
        # The address that this appservice can use to connect to the homeserver.
        address: http://localhost:8448
        # The domain of the homeserver (for MXIDs, etc).
        domain: your.server.name
        # Whether or not to verify the SSL certificate of the homeserver.
        # Only applies if address starts with https://
        verify_ssl: false
        # 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 Instagram MQTT 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:29330
        # 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: 29330
        # 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:///filename.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
        id: instagram
        # Username of the appservice bot.
        bot_username: instagrambot
        # 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: Instagram bridge bot
        bot_avatar: mxc://maunium.net/JxjlbZUlCPULEeHZSwleUXQv
    
        # 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: true
    
        # Authentication tokens for AS <-> HS communication. Autogenerated; do not modify.
        as_token: This value is generated when generating the registration
        hs_token: This value is generated when generating the registration
    
    # 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-instagram.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
    instagram:
        # Seed for generating devices. This is secret because the seed is used to generate
        # device IDs, which can apparently be used to bypass two-factor authentication after
        # logging out, because Instagram is insecure.
        device_seed: 6_3g-7Ze3qzr6rESpNwlV7lKat7_x6vJGFBaUec64S9rLmVUEMioeNKyzwcoYOz5
    
    # Bridge config
    bridge:
        # Localpart template of MXIDs for Instagram users.
        # {userid} is replaced with the user ID of the Instagram user.
        username_template: instagram_{userid}
        # Displayname template for Instagram users.
        # {displayname} is replaced with the display name of the Instagram user.
        # {username} is replaced with the username of the Instagram user.
        displayname_template: '{displayname} (Instagram)'
        # Displayname template for 1:1 chat portals. Same variables as displayname_template.
        private_chat_name_template: '{displayname}'
        # Displayname template for group chat portals. Only {name} is available.
        group_chat_name_template: '{name}'
    
        # Maximum length of displayname
        displayname_max_length: 100
    
        # The maximum number of conversations that should be synced when we get a
        # message sync error. In general, 1 page (20) is sufficient.
        max_startup_thread_sync_count: 20
        # Whether or not to use /sync to get read receipts and typing notifications
        # when double puppeting is enabled
        sync_with_custom_puppets: false
        # 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: false
        # Allow using double puppeting from any server with a valid client .well-known file.
        double_puppet_allow_discovery: false
        # Servers to allow double puppeting from, even if double_puppet_allow_discovery is false.
        double_puppet_server_map:
            example.com: https://example.com
        login_shared_secret_map:
            example.com: foo
        federate_rooms: true
        # Settings for backfilling messages from Instagram.
        backfill:
            # Whether to enable backfilling at all.
            #
            # 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.
            #
            # Note that prior to Synapse 1.49, there were some bugs with the
            # implementation, especially if using event persistence workers. There
            # are also still some issues in Synapse's federation implementation.
            enable: false
            # Use MSC2716 for backfilling? If this is disabled, backfilling only happens when syncing threads,
            # and the incremental settings below don't apply.
            #
            # 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?
            # In order to use this, 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).
            # This only affects double puppets on the local server, double puppets on other servers will never be used.
            double_puppet_backfill: false
            # The maximum number of conversations that should be synced.
            # Other conversations will be backfilled on demand when the start PM
            # provisioning endpoint is used or when a message comes in from that
            # chat.
            # If set to -1, all conversations will by synced.
            max_conversations: 20
            # The minimum amount of time to wait between syncing each thread. This
            # helps avoid situations where you sync too quickly.
            min_sync_thread_delay: 5
            # If this value is greater than 0, then if the conversation's last
            # message was more than this number of hours ago, then the conversation
            # will automatically be marked it as read.
            # Conversations that have a last message that is less than this number
            # of hours ago will have their unread status synced from Instagram.
            unread_hours_threshold: 0
    
            # Settings for how quickly to backoff when rate-limits are encountered
            # while backfilling.
            backoff:
                # How many seconds to wait after getting rate limited during a
                # thread list fetch.
                thread_list: 300
                # How many seconds to wait after getting rate limited during a
                # message history fetch.
                message_history: 300
    
            # Settings for backfills.
            #
            # During initial/incremental sync, the entirety of the thread that is
            # available will be backfilled. For example, on initial sync, about 20
            # messages are included for each thread in the thread list returned by
            # the server. After that, incremental backfills will be run for each of
            # the portals in a round-robin fashion until all portals have been
            # backfilled as configured below.
            incremental:
                # The maximum number of pages to backfill per batch.
                max_pages: 10
                # The maximum number of total pages to backfill per portal.
                # If set to -1, infinite pages will be synced.
                max_total_pages: -1
                # The number of seconds to wait between backfilling each page.
                page_delay: 5
                # The number of seconds to wait after backfilling the batch of
                # messages.
                post_batch_delay: 20
    
        periodic_reconnect:
            # Interval in seconds in which to automatically reconnect all users.
            # This can be used to automatically mitigate the bug where Instagram stops sending messages.
            # Set to -1 to disable periodic reconnections entirely.
            interval: -1
            # Whether or not the bridge should backfill chats when reconnecting.
            resync: true
            # Should even disconnected users be reconnected?
            always: false
    
        # URL to call to retrieve a proxy URL from (defaults to the http_proxy environment variable).
        get_proxy_api_url:
    
        # 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: false
            # 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: false
        # Whether or not the bridge should send a read receipt from the bridge bot when a message has
        # been sent to Instagram.
        delivery_receipts: false
        # Whether or not delivery errors should be reported as messages in the Matrix room.
        delivery_error_reports: false
        # Whether the bridge should send the message status as a custom com.beeper.message_send_status event.
        message_status_events: false
        # 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
        # Whether or not unimportant bridge notices should be sent to the user.
        # (e.g. connected, disconnected but will retry)
        unimportant_bridge_notices: true
        # Disable bridge notices entirely
        disable_bridge_notices: false
        # 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
    
        # Should Matrix m.notice-type messages be bridged?
        bridge_notices: true
    
        # 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/v1
            # The shared secret to authorize users of the API.
            # Set to "generate" to generate and save a new token.
            shared_secret: SIVYauktlF9EP7B6vFqKDAD6p6KpYwsmJ3J3ddWAFIbuYd2PVYsyYvUk97-xZflA
            # Segment API key to enable analytics tracking for web server endpoints. Set to null to disable.
            segment_key:
    
        # The prefix for commands. Only required in non-management rooms.
        command_prefix: '!ig'
    
        # Permissions for using the bridge.
        # Permitted values:
        #      relay - Allowed to be relayed through the bridge, no access to commands.
        #       user - Use the bridge with puppeting.
        #      admin - Use and administrate the bridge.
        # Permitted keys:
        #        * - All Matrix users
        #   domain - All users on that homeserver
        #     mxid - Specific user
        permissions:
            "*": admin
    #        "*": relay
    #        "your.server.name": user
    #        "@gustawdaniel:your.server.name": admin
        relay:
            # Whether relay mode should be allowed. If allowed, `!ig set-relay` can be used to turn any
            # authenticated user into a relaybot for that chat.
            enabled: false
            # The formats to use when sending messages to Instagram via a relay user.
            #
            # 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)
            #   $message            - The message content
            #
            # Note that Instagram doesn't support captions for images, so images won't include any indication of being relayed.
            message_formats:
                m.text: '$sender_displayname: $message'
                m.notice: '$sender_displayname: $message'
                m.emote: '* $sender_displayname $message'
    
    # 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_instagram.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
            mauigpapi:
                level: DEBUG
            aiohttp:
                level: INFO
            paho.mqtt:
                level: INFO
        root:
            level: DEBUG
            handlers: [console]
    

    After docker-compose up I see:

    mautrix-instagram    | [2022-12-27 22:40:33,721] [[email protected]] Configuration error: bridge.permissions not configured
    mautrix-instagram exited with code 11
    
    opened by gustawdaniel 1
  • Application service has not registered this user

    Application service has not registered this user

    Probably related to #71. After a restart (and update to mautrix-instagram 0.2.3+dev.6f40e012) of the bridge I found another exception. Like in #71 it occurred during thread sync, but this time it raises a different error.

    [2022-12-16 19:50:12,802] [[email protected].@severin:schueller.xyz] Failed to sync threads. Waiting 30 seconds before retrying sync.
    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 823, in run_with_sync_lock
        await func()
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 760, in _backfill_threads
        await self._sync_threads_with_delay(
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 796, in _sync_threads_with_delay
        had_new_messages = await self._sync_thread(thread)
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/user.py", line 604, in _sync_thread
        base_insertion_event_id = await portal.backfill_message_page(
      File "/usr/lib/python3.10/site-packages/mautrix_instagram/portal.py", line 2166, in backfill_message_page
        batch_send_resp = await self.main_intent.batch_send(
      File "/usr/lib/python3.10/site-packages/mautrix/appservice/api/intent.py", line 536, in batch_send
        resp = await self.api.request(
      File "/usr/lib/python3.10/site-packages/mautrix/api.py", line 401, in request
        resp_data, resp = await self._send(
      File "/usr/lib/python3.10/site-packages/mautrix/api.py", line 256, in _send
        raise make_request_error(
    mautrix.errors.request.MForbidden: Application service has not registered this user (@instagram_ID:schueller.xyz)
    
    opened by Severin-S 1
  • In some rooms the retransmissions are not working.

    In some rooms the retransmissions are not working.

    Version: mautrix-instagram 0.2.2

    Some rooms that were previously configured with the set-relay command to be able to retransmit messages are not working correctly. What is happening is that they are not rebroadcasting messages.

    This image is from the first time I sent the command to the room. image

    Logs:

    [2022-11-28 22:38:21,793] [[email protected]] Received Matrix event $wQglAzyM6iF20ynceR73VSinELw3_ntzROi22buL5t8 from @menubot:calidex.co in !silyLXfjrPMPyZbCpI:calidex.co
    [2022-11-28 22:38:21,793] [[email protected]] Ignoring event $wQglAzyM6iF20ynceR73VSinELw3_ntzROi22buL5t8 from @menubot:calidex.co: not allowed to send to portal
    

    DB:

    mautrix_instagram=# select * from portal where mxid = '!silyLXfjrPMPyZbCpI:calidex.co';
                    thread_id                |  receiver  | other_user_pk |              mxid              |          name          |                avatar_url                 | name_set | avatar_set | encrypted |  relay_user_id   
    -----------------------------------------+------------+---------------+--------------------------------+------------------------+-------------------------------------------+----------+------------+-----------+------------------
     xyz | xyz |    xyz | !silyLXfjrPMPyZbCpI:calidex.co | Alejandro Herrera (IG) | mxc://calidex.co/tImCgzezNeMjCHoisfjkQlml | t        | t          | f         | @acd2:calidex.co
    

    After sending the set-realy command again, the retransmissions were working again.

    opened by bramenn 0
  • every time I sign into matrix, it logs me out of my IG app. every time I sign into the app, it signs me out of matrix

    every time I sign into matrix, it logs me out of my IG app. every time I sign into the app, it signs me out of matrix

    this is new behavior. I kept getting signed out randomly so I enabled 2FA. now with 2FA it's even worse. I tried upgrading the bridge, even went to the master branch version, nothing helped

    opened by yspreen 2
  • fix(portal): force encoding video

    fix(portal): force encoding video

    This seems to fix #47, unfortunately it is incredibly hard to test, some videos pass, others don't. I made tests using iPhone clips (which should be mov format with video/quicktime MIME) but Synapse or the Matrix client (Element) seems to convert the video to mp4 upfront but, it doesn't use the same encoding parameters as this library does.

    It could be nice if someone can do some other tests on multiple devices (iPhone, Android, etc.), but in any case, this commit is not breaking.

    opened by vlourme 0
Releases(v0.2.3)
  • v0.2.3(Dec 13, 2022)

    • Added support for "mentioned in comment" messages.
    • Added support for re-requesting 2FA SMS when logging in.
    • Updated Docker image to Alpine 3.17.
    • Fixed error in image bridging.
    • Fixed logging in with phone/email in provisioning API.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Nov 1, 2022)

    • Added option to send captions in the same message using MSC2530.
    • Updated app version identifiers to bridge some new message types.
    • Fixed race condition when backfilling chat with incoming message.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Oct 30, 2022)

    • Fixed login breaking due to an Instagram API change.
    • Added support for SQLite as the bridge database.
    • Added option to use MSC2409 and MSC3202 for end-to-bridge encryption. However, this may not work with the Synapse implementation as it hasn't been tested yet.
    • The docker image now has an option to bypass the startup script by setting the MAUTRIX_DIRECT_STARTUP environment variable. Additionally, it will refuse to run as a non-root user if that variable is not set (and print an error message suggesting to either set the variable or use a custom command).
    • Moved environment variable overrides for config fields to mautrix-python. The new system also allows loading JSON values to enable overriding maps like login_shared_secret_map.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Aug 26, 2022)

    • Added handling for rate limit errors when connecting to Instagram.
    • Added option to not bridge m.notice messages (thanks to @bramenn in #55).
    • Fixed bridging voice messages to Instagram (broke due to server-side changes).
    • Made Instagram message processing synchronous so messages are bridged in order.
    • Updated Docker image to Alpine 3.16.
    • Enabled appservice ephemeral events by default for new installations.
      • Existing bridges can turn it on by enabling ephemeral_events and disabling sync_with_custom_puppets in the config, then regenerating the registration file.
    • Added options to make encryption more secure.
      • The encryption -> verification_levels config options can be used to make the bridge require encrypted messages to come from cross-signed devices, with trust-on-first-use validation of the cross-signing master key.
      • The encryption -> require option can be used to make the bridge ignore any unencrypted messages.
      • Key rotation settings can be configured with the encryption -> rotation config.
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Apr 6, 2022)

    • Added support for Matrix->Instagram replies.
    • Added support for sending clickable links with previews to Instagram.
    • Added support for creating DMs from Matrix (by starting a chat with a ghost).
    • Added option to use MSC2246 async media uploads.
    • Added support for logging in with a Facebook token in the provisioning API.
    • Added support for sending giphy gifs (requires client support).
    • Changed some fields to stop the user from showing up as online on Instagram all the time.
    • Fixed messages on Instagram not being marked as read if last event on Matrix is not a normal message.
    • Fixed incoming messages not being deduplicated properly in some cases.
    • Removed legacy community_id config option.
    • Stopped running as root in Docker image (default user is now 1337).
    • Disabled file logging in Docker image by default.
      • If you want to enable it, set the filename in the file log handler to a path that is writable, then add "file" back to logging.root.handlers.
    • Dropped Python 3.7 support.
    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Jan 15, 2022)

    • Added relay mode (see docs for more info).
    • Added notices for unsupported incoming message types.
    • Added support for more message types:
      • "Tagged in post" messages
      • Reel clip shares
      • Profile shares
    • Updated Docker image to Alpine 3.15.
    • Formatted all code using black and isort.
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Aug 20, 2021)

    N.B. Docker images have moved from dock.mau.dev/tulir/mautrix-instagram to dock.mau.dev/mautrix/instagram. New versions are only available at the new path.

    • Added retrying failed syncs when refreshing Instagram connection.
    • Updated displayname handling to fall back to username if user has no displayname set.
    • Updated Docker image to Alpine 3.14.
    • Fixed handling some Instagram message types.
    Source code(tar.gz)
    Source code(zip)
📷 Instagram Bot - Tool for automated Instagram interactions

InstaPy Tooling that automates your social media interactions to “farm” Likes, Comments, and Followers on Instagram Implemented in Python using the Se

Tim Großmann 13.5k Dec 1, 2021
An instagram bot developed in Python with Selenium that helps you get more Instagram followers.

instabot An instagram bot developed in Python with Selenium that helps you get more Instagram followers. Install You’ll need to have: Python Selenium

null 65 Nov 22, 2022
A Python Instagram Scraper for Downloading Profile's Posts, stories, ProfilePic and See the Details of Particular Instagram Profile.

✔ ✔ InstAstra ⚡ ⚡ ⁜ Description ~ A Python Instagram Scraper for Downloading Profile's Posts, stories, ProfilePic and See the Details of Particular In

null 12 Jun 23, 2022
Instagram bot that upload images for you which scrape posts from 9gag meme website or other Instagram users , which is 24/7 Automated Runnable.

Autonicgram Automates your Instagram posts by taking images from sites like 9gag or other Instagram accounts and posting it onto your page. Features A

Mastermind 20 Sep 17, 2022
This Instagram app created as a clone of instagram.Developed during Moringa Core.

Instagram This Instagram app created as a clone of instagram.Developed during Moringa Core. AUTHOR By: Nyagah Isaac Description This web-app allows a

Nyagah Isaac 1 Nov 1, 2021
Unofficial instagram API, give you access to ALL instagram features (like, follow, upload photo and video and etc)! Write on python.

Instagram-API-python Unofficial Instagram API to give you access to ALL Instagram features (like, follow, upload photo and video, etc)! Written in Pyt

Vladimir Bezrukov 1 Nov 19, 2021
Projeto Informações Conta do Instagram - Instagram Account Information Project

Projeto Informações Conta do Instagram - Instagram Account Information Project Descrição - Description Projeto que exibe informações de perfil, lista

Thiago Souza 1 Dec 2, 2021
Instagram Brute force attack helps you to find password of an instagram account from your list of provided password.

Instagram Brute force attack Instagram Brute force attack helps you to find password of an instagram account from your list of provided password. Inst

Naman Raj Singh 1 Dec 27, 2021
Instagram-follower-bot - An Instagram follower bot written in Python

Instagram Follower Bot An Instagram follower bot written in Python. The bot follows the follower of which account you want. e.g. (You want to follow @

Aytaç Kaşoğlu 1 Dec 31, 2021
Instagram - Instagram Account Reporting Tool

Instagram Instagram Account Reporting Tool Installation On Termux $ apt update $

Aryan 6 Nov 18, 2022
Upload-Instagram - Auto Uploading Instagram Bot

###Instagram Uploading Bot### Download Python and Chrome browser pip install -r

byeonggeon sim 1 Feb 13, 2022
Faux is a chatbot bridge between urbit and discord.

Faux Faux is a chatbot bridge between urbit and discord. Whenever a member posts in your discord group, a bot will echo their message in your urbit gr

null 10 Dec 27, 2022
Simplebot-tg - Telegram/DeltaChat Bridge with python

simplebot_tg Telegram/DeltaChat Bridge, is a plugin for https://github.com/simpl

Arián Díaz Cruz 1 Dec 30, 2021
Telegram-Discord Bridge

imperial-toilet Скрипт, пересылающий сообщения из нескольких каналов Telegram в один/несколько каналов Discord. Технически это Telegram-юзербот и Disc

null 1 Jan 17, 2022
DIAL(Did I Alert Lambda?) is a centralised security misconfiguration detection framework which completely runs on AWS Managed services like AWS API Gateway, AWS Event Bridge & AWS Lambda

DIAL(Did I Alert Lambda?) is a centralised security misconfiguration detection framework which completely runs on AWS Managed services like AWS API Gateway, AWS Event Bridge & AWS Lambda

CRED 71 Dec 29, 2022
Matrix trivia bot with python

Matrix-trivia-bot Getting started See SETUP.md for how to setup and run the template project. Project structure A reference of each file included in t

null 1 Nov 16, 2021
An example of matrix addition, demonstrating the basic method of Python calling C library functions

Example for Python call C functions An example of matrix addition, demonstrating the basic method of Python calling C library functions. How to run Bu

Quantum LIu 2 Dec 21, 2021
The worst but simplest webhook bot for GitHub and Matrix.

gh-bot gh-bot is maybe the worst (but simplest) Matrix webhook bot for Github. Example of commits: Example of workflow finished: Setting up Server You

Jae Lo Presti 4 Aug 18, 2022
PR Changes Matrix Builder

Pr-changes-matrix-builder - A Github Action that will output a variable to be used in a matrix strategy job based on a PR&'s changes

Kyle James Walker (he/him) 21 Oct 4, 2022