diff --git a/README.md b/README.md index a601ef8..dec4f74 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ First, copy config.json.example to config.json. Then fill in the fields: * `hosts.bare`: Just the (sub)domain of the server. * `user_id_format`: A Python `str.format`-style string to format user IDs as * `db_url`: A SQLAlchemy URL for the database. See the [SQLAlchemy docs](http://docs.sqlalchemy.org/en/latest/core/engines.html). +* `bot_owners`: A list of matrix users the bot won't use a `` prefix for. Can be left blank to print a prefix for all matrix users. Useful if you would like the bridge to replace Telegram for yourself, but also want to allow others to use the Matrix room. **Synapse configuration** diff --git a/config.json.example b/config.json.example index 67378e0..9f7280b 100644 --- a/config.json.example +++ b/config.json.example @@ -12,6 +12,12 @@ "bare": "DOMAIN.TLD" }, + "bot_owners": [ + "@youruser:DOMAIN.TLD", + "@youruser:matrix.org", + "@youruser:example.com" + ], + "user_id_format": "@telegram_{}:DOMAIN.TLD", "db_url": "sqlite:///database.db", diff --git a/telematrix/__init__.py b/telematrix/__init__.py index 653de8c..eceb8ca 100644 --- a/telematrix/__init__.py +++ b/telematrix/__init__.py @@ -38,6 +38,11 @@ try: MATRIX_HOST_EXT = CONFIG['hosts']['external'] MATRIX_HOST_BARE = CONFIG['hosts']['bare'] + try: + MATRIX_BOT_OWNERS = CONFIG['bot-owners'] + except KeyError: + MATRIX_BOT_OWNERS = {} + MATRIX_PREFIX = MATRIX_HOST + '_matrix/client/r0/' MATRIX_MEDIA_PREFIX = MATRIX_HOST + '_matrix/media/r0/' @@ -205,37 +210,43 @@ async def matrix_transaction(request): if event['type'] == 'm.room.message': user_id = event['user_id'] - if matrix_is_telegram(user_id): - continue - - - sender = db.session.query(db.MatrixUser)\ - .filter_by(matrix_id=user_id).first() - - if not sender: - response = await matrix_get('client', 'profile/{}/displayname' - .format(user_id), None) - try: - displayname = response['displayname'] - except KeyError: - displayname = get_username(user_id) - sender = db.MatrixUser(user_id, displayname) - db.session.add(sender) + if user_id in MATRIX_BOT_OWNERS: + displayname = '' else: - displayname = sender.name or get_username(user_id) + if matrix_is_telegram(user_id): + continue + + + sender = db.session.query(db.MatrixUser)\ + .filter_by(matrix_id=user_id).first() + + if not sender: + response = await matrix_get('client', 'profile/{}/displayname' + .format(user_id), None) + try: + displayname = response['displayname'] + except KeyError: + displayname = get_username(user_id) + sender = db.MatrixUser(user_id, displayname) + db.session.add(sender) + else: + displayname = sender.name or get_username(user_id) content = event['content'] if 'msgtype' not in content: continue if content['msgtype'] == 'm.text': - msg, mode = format_matrix_msg('<{}> {}', displayname, content) + prefix = '<' + displayname + '> ' if displayname != '' + msg, mode = format_matrix_msg('{}{}', prefix, content) response = await group.send_text(msg, parse_mode=mode) elif content['msgtype'] == 'm.notice': - msg, mode = format_matrix_msg('[{}] {}', displayname, content) + prefix = '[' + displayname + '] ' if displayname != '' + msg, mode = format_matrix_msg('{}{}', prefix, content) response = await group.send_text(msg, parse_mode=mode) elif content['msgtype'] == 'm.emote': - msg, mode = format_matrix_msg('* {} {}', displayname, content) + prefix = '* ' + displayname + ' ' if displayname != '' + msg, mode = format_matrix_msg('{}{}', prefix, content) response = await group.send_text(msg, parse_mode=mode) elif content['msgtype'] == 'm.image': try: @@ -255,7 +266,8 @@ async def matrix_transaction(request): .format(url.netloc, quote(url.path)) url_str = await shorten_url(url_str) - caption = '<{}> {} ({})'.format(displayname, + prefix = '<' + displayname + '> ' if displayname != '' + caption = '{}{} ({})'.format(prefix, content['body'], url_str) response = await group.send_photo(img_file, caption=caption) except: