| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | # SPDX-License-Identifier: AGPL-3.0-or-later# lint: pylint"""Matrix Rooms Search - a fully-featured, standalone, matrix rooms search service.Configuration=============The engine has the following mandatory settings:- :py:obj:`base_url`.. code:: yaml  - name: MRS    engine: mrs    base_url: https://mrs-host    ...Implementation=============="""from urllib.parse import quote_plusabout = {    "website": 'https://matrixrooms.info',    "wikidata_id": None,    "official_api_documentation": 'https://gitlab.com/etke.cc/mrs/api/-/blob/main/openapi.yml?ref_type=heads',    "use_official_api": True,    "require_api_key": False,    "results": 'JSON',}paging = Truecategories = ['social media']base_url = ""matrix_url = "https://matrix.to"page_size = 20def init(engine_settings):  # pylint: disable=unused-argument    """The ``base_url`` must be set in the configuration, if ``base_url`` is not    set, a :py:obj:`ValueError` is raised during initialization.    """    if not base_url:        raise ValueError('engine MRS, base_url is unset')def request(query, params):    params['url'] = f"{base_url}/search/{quote_plus(query)}/{page_size}/{(params['pageno']-1)*page_size}"    return paramsdef response(resp):    results = []    for result in resp.json():        results.append(            {                'url': matrix_url + '/#/' + result['alias'],                'title': result['name'],                'content': result['topic']                + f" // {result['members']} members"                + f" // {result['alias']}"                + f" // {result['server']}",                'thumbnail': result['avatar_url'],            }        )    return results
 |