bundles/mautrix-telegram: introduce
This commit is contained in:
parent
180802a669
commit
cf2920f284
5 changed files with 321 additions and 1 deletions
179
bundles/mautrix-telegram/files/config.yaml
Normal file
179
bundles/mautrix-telegram/files/config.yaml
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
homeserver:
|
||||||
|
address: ${node.metadata['mautrix-telegram']['homeserver']['url']}
|
||||||
|
domain: ${node.metadata['mautrix-telegram']['homeserver']['domain']}
|
||||||
|
verify_ssl: true
|
||||||
|
|
||||||
|
appservice:
|
||||||
|
address: http://${node.metadata['mautrix-telegram'].get('listen-addr', '127.0.0.1')}:${node.metadata['mautrix-telegram'].get('port', 21000)}
|
||||||
|
tls_cert: false
|
||||||
|
tls_key: false
|
||||||
|
hostname: ${node.metadata['mautrix-telegram'].get('listen-addr', '127.0.0.1')}
|
||||||
|
port: ${node.metadata['mautrix-telegram'].get('port', 21000)}
|
||||||
|
max_body_size: ${node.metadata['mautrix-telegram'].get('max-body-size', 1)}
|
||||||
|
database: postgres://${node.metadata['mautrix-telegram']['database']['user']}:${node.metadata['mautrix-telegram']['database']['password']}@${node.metadata['mautrix-telegram']['database'].get('host', 'localhost')}/${node.metadata['mautrix-telegram']['database']['database']}
|
||||||
|
public:
|
||||||
|
enabled: false
|
||||||
|
prefix: /public
|
||||||
|
external: https://example.com/public
|
||||||
|
provisioning:
|
||||||
|
enabled: ${str(node.metadata['mautrix-telegram']['provisioning']['enabled']).lower()}
|
||||||
|
prefix: /_matrix/provision/v1
|
||||||
|
shared_secret: ${node.metadata['mautrix-telegram']['provisioning']['shared_secret']}
|
||||||
|
id: telegram
|
||||||
|
bot_username: telegrambot
|
||||||
|
bot_displayname: Telegram bridge bot
|
||||||
|
bot_avatar: mxc://maunium.net/tJCRmUyJDsgRNgqhOgoiHWbX
|
||||||
|
community_id: false
|
||||||
|
as_token: ${node.metadata['mautrix-telegram']['as_token']}
|
||||||
|
hs_token: ${node.metadata['mautrix-telegram']['hs_token']}
|
||||||
|
|
||||||
|
metrics:
|
||||||
|
enabled: false
|
||||||
|
listen_port: 8000
|
||||||
|
|
||||||
|
manhole:
|
||||||
|
enabled: false
|
||||||
|
path: /var/tmp/mautrix-telegram.manhole
|
||||||
|
whitelist:
|
||||||
|
- 0
|
||||||
|
|
||||||
|
bridge:
|
||||||
|
username_template: telegram_{userid}
|
||||||
|
alias_template: telegram_{groupname}
|
||||||
|
displayname_template: '{displayname} (Telegram)'
|
||||||
|
displayname_preference:
|
||||||
|
- full name
|
||||||
|
- username
|
||||||
|
- phone number
|
||||||
|
displayname_max_length: 100
|
||||||
|
allow_avatar_remove: false
|
||||||
|
max_initial_member_sync: -1
|
||||||
|
sync_channel_members: true
|
||||||
|
skip_deleted_members: true
|
||||||
|
startup_sync: true
|
||||||
|
sync_dialog_limit: 30
|
||||||
|
sync_direct_chats: true
|
||||||
|
max_telegram_delete: 100
|
||||||
|
sync_matrix_state: true
|
||||||
|
allow_matrix_login: true
|
||||||
|
plaintext_highlights: false
|
||||||
|
public_portals: true
|
||||||
|
sync_with_custom_puppets: true
|
||||||
|
login_shared_secret:
|
||||||
|
telegram_link_preview: true
|
||||||
|
inline_images: false
|
||||||
|
image_as_file_size: 10
|
||||||
|
max_document_size: 500
|
||||||
|
parallel_file_transfer: true
|
||||||
|
federate_rooms: true
|
||||||
|
animated_sticker:
|
||||||
|
target: gif
|
||||||
|
args:
|
||||||
|
width: 256
|
||||||
|
height: 256
|
||||||
|
background: '020202' # only for gif
|
||||||
|
fps: 30 # only for webm
|
||||||
|
encryption:
|
||||||
|
allow: true
|
||||||
|
default: false
|
||||||
|
private_chat_portal_meta: false
|
||||||
|
delivery_receipts: true
|
||||||
|
delivery_error_reports: true
|
||||||
|
initial_power_level_overrides:
|
||||||
|
user: {}
|
||||||
|
group: {}
|
||||||
|
bot_messages_as_notices: true
|
||||||
|
bridge_notices:
|
||||||
|
default: false
|
||||||
|
exceptions:
|
||||||
|
- '@importantbot:example.com'
|
||||||
|
deduplication:
|
||||||
|
pre_db_check: false
|
||||||
|
cache_queue_length: 20
|
||||||
|
message_formats:
|
||||||
|
m.text: '<b>$sender_displayname</b>: $message'
|
||||||
|
m.notice: '<b>$sender_displayname</b>: $message'
|
||||||
|
m.emote: '* <b>$sender_displayname</b> $message'
|
||||||
|
m.file: '<b>$sender_displayname</b> sent a file: $message'
|
||||||
|
m.image: '<b>$sender_displayname</b> sent an image: $message'
|
||||||
|
m.audio: '<b>$sender_displayname</b> sent an audio file: $message'
|
||||||
|
m.video: '<b>$sender_displayname</b> sent a video: $message'
|
||||||
|
m.location: '<b>$sender_displayname</b> sent a location: $message'
|
||||||
|
emote_format: '* $mention $formatted_body'
|
||||||
|
state_event_formats:
|
||||||
|
join: <b>$displayname</b> joined the room.
|
||||||
|
leave: <b>$displayname</b> left the room.
|
||||||
|
name_change: <b>$prev_displayname</b> changed their name to <b>$displayname</b>
|
||||||
|
filter:
|
||||||
|
mode: blacklist
|
||||||
|
list: []
|
||||||
|
command_prefix: '!tg'
|
||||||
|
permissions:
|
||||||
|
% for user, permission in node.metadata['mautrix-telegram']['permissions'].items():
|
||||||
|
${user}: ${permission}
|
||||||
|
% endfor
|
||||||
|
relaybot:
|
||||||
|
private_chat:
|
||||||
|
invite:
|
||||||
|
% for user, permission in node.metadata['mautrix-telegram']['permissions'].items():
|
||||||
|
% if permission == 'admin':
|
||||||
|
- ${user}
|
||||||
|
% endif
|
||||||
|
% endfor
|
||||||
|
state_changes: true
|
||||||
|
message: This is a Matrix bridge relaybot and does not support direct chats
|
||||||
|
group_chat_invite: []
|
||||||
|
ignore_unbridged_group_chat: true
|
||||||
|
authless_portals: true
|
||||||
|
whitelist_group_admins: true
|
||||||
|
ignore_own_incoming_events: true
|
||||||
|
whitelist: []
|
||||||
|
|
||||||
|
telegram:
|
||||||
|
api_id: ${node.metadata['mautrix-telegram']['telegram']['api_id']}
|
||||||
|
api_hash: ${node.metadata['mautrix-telegram']['telegram']['api_token']}
|
||||||
|
bot_token: ${node.metadata['mautrix-telegram']['telegram']['bot_token']}
|
||||||
|
connection:
|
||||||
|
timeout: 60
|
||||||
|
retries: 5
|
||||||
|
retry_delay: 3
|
||||||
|
flood_sleep_threshold: 60
|
||||||
|
request_retries: 5
|
||||||
|
device_info:
|
||||||
|
device_model: auto
|
||||||
|
system_version: auto
|
||||||
|
app_version: auto
|
||||||
|
lang_code: en
|
||||||
|
system_lang_code: en
|
||||||
|
server:
|
||||||
|
enabled: false
|
||||||
|
dc: 2
|
||||||
|
ip: 149.154.167.40
|
||||||
|
port: 80
|
||||||
|
proxy:
|
||||||
|
type: disabled
|
||||||
|
address: 127.0.0.1
|
||||||
|
port: 1080
|
||||||
|
rdns: true
|
||||||
|
username: ''
|
||||||
|
password: ''
|
||||||
|
|
||||||
|
logging:
|
||||||
|
version: 1
|
||||||
|
formatters:
|
||||||
|
precise:
|
||||||
|
format: '[%(asctime)s] [%(levelname)s@%(name)s] %(message)s'
|
||||||
|
handlers:
|
||||||
|
console:
|
||||||
|
class: logging.StreamHandler
|
||||||
|
formatter: precise
|
||||||
|
loggers:
|
||||||
|
mau:
|
||||||
|
level: INFO
|
||||||
|
telethon:
|
||||||
|
level: INFO
|
||||||
|
aiohttp:
|
||||||
|
level: INFO
|
||||||
|
root:
|
||||||
|
level: INFO
|
||||||
|
handlers: [console]
|
15
bundles/mautrix-telegram/files/mautrix-telegram.service
Normal file
15
bundles/mautrix-telegram/files/mautrix-telegram.service
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Matrix Telegram Bridge
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=mautrix-telegram
|
||||||
|
Group=mautrix-telegram
|
||||||
|
Environment="VIRTUAL_ENV=/opt/mautrix-telegram/venv"
|
||||||
|
Environment="PATH=/opt/mautrix-telegram/venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||||
|
ExecStart=/opt/mautrix-telegram/venv/bin/python -m mautrix_telegram -c /opt/mautrix-telegram/config.yaml
|
||||||
|
WorkingDirectory=/opt/mautrix-telegram
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
70
bundles/mautrix-telegram/items.py
Normal file
70
bundles/mautrix-telegram/items.py
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
actions = {
|
||||||
|
'mautrix-telegram_create_virtualenv': {
|
||||||
|
'command': '/usr/bin/python3 -m virtualenv -p python3 /opt/mautrix-telegram/venv/',
|
||||||
|
'unless': 'test -d /opt/mautrix-telegram/venv/',
|
||||||
|
'needs': {
|
||||||
|
'directory:/opt/mautrix-telegram', # provided by bundle:users
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'mautrix-telegram_install_bridge': {
|
||||||
|
# TODO find out how we can check if *this package* requires an update
|
||||||
|
'command': '/opt/mautrix-telegram/venv/bin/pip install --upgrade mautrix-telegram[all]',
|
||||||
|
'needs': {
|
||||||
|
'action:mautrix-telegram_create_virtualenv',
|
||||||
|
},
|
||||||
|
'triggers': {
|
||||||
|
'action:mautrix-telegram_generate_registration',
|
||||||
|
'action:mautrix-telegram_upgrade_database',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'mautrix-telegram_generate_registration': {
|
||||||
|
'command': '/opt/mautrix-telegram/venv/bin/python3 -m mautrix_telegram -c /opt/mautrix-telegram/config.yaml -r /opt/mautrix-telegram/registration.yaml -g',
|
||||||
|
'needs': {
|
||||||
|
'file:/opt/mautrix-telegram/config.yaml',
|
||||||
|
},
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:mautrix-telegram:restart',
|
||||||
|
},
|
||||||
|
'triggered': True,
|
||||||
|
},
|
||||||
|
'mautrix-telegram_upgrade_database': {
|
||||||
|
'command': '/opt/mautrix-telegram/venv/bin/alembic -x /opt/mautrix-telegram/config.yaml upgrade head',
|
||||||
|
'needs': {
|
||||||
|
# Actually, the dependency is 'mautrix-telegram has run
|
||||||
|
# atleast once, but we can't check that.
|
||||||
|
'action:mautrix-telegram_generate_registration',
|
||||||
|
'postgres_db:mautrix-telegram',
|
||||||
|
'postgres_role:mautrix-telegram',
|
||||||
|
},
|
||||||
|
'triggered': True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd = {
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'needs': {
|
||||||
|
'action:mautrix-telegram_generate_registration',
|
||||||
|
'action:mautrix-telegram_upgrade_database',
|
||||||
|
'file:/etc/systemd/system/mautrix-telegram.service',
|
||||||
|
'postgres_db:mautrix-telegram',
|
||||||
|
'postgres_role:mautrix-telegram',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
files = {
|
||||||
|
'/opt/mautrix-telegram/config.yaml': {
|
||||||
|
'content_type': 'mako',
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:mautrix-telegram:restart',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'/etc/systemd/system/mautrix-telegram.service': {
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:mautrix-telegram:restart',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if node.has_bundle('matrix-synapse'):
|
||||||
|
actions['mautrix-telegram_generate_registration']['triggers'].add('svc_systemd:matrix-synapse:restart')
|
33
bundles/mautrix-telegram/metadata.py
Normal file
33
bundles/mautrix-telegram/metadata.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
defaults = {
|
||||||
|
'users': {
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'home': '/opt/mautrix-telegram',
|
||||||
|
'home-mode': '0755',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'matrix-synapse': {
|
||||||
|
'appservice_configs': {
|
||||||
|
'/opt/mautrix-telegram/registration.yaml',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'database': {
|
||||||
|
'user': 'mautrix-telegram',
|
||||||
|
'password': repo.vault.password_for('{} postgresql mautrix-telegram'.format(node.name)),
|
||||||
|
'database': 'mautrix-telegram',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'postgresql': {
|
||||||
|
'users': {
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'password': repo.vault.password_for('{} postgresql mautrix-telegram'.format(node.name)),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'databases': {
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'owner': 'mautrix-telegram',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ nodes['htz.ex42-1048908'] = {
|
||||||
'gitea',
|
'gitea',
|
||||||
'jenkins-ci',
|
'jenkins-ci',
|
||||||
'matrix-synapse',
|
'matrix-synapse',
|
||||||
|
'mautrix-telegram',
|
||||||
'mx-puppet-discord',
|
'mx-puppet-discord',
|
||||||
'nodejs',
|
'nodejs',
|
||||||
'riot-web',
|
'riot-web',
|
||||||
|
@ -110,7 +111,6 @@ nodes['htz.ex42-1048908'] = {
|
||||||
'appservice_configs': {
|
'appservice_configs': {
|
||||||
# TODO move to bundles
|
# TODO move to bundles
|
||||||
'/opt/matrix-bridges/mautrix-whatsapp/registration.yaml',
|
'/opt/matrix-bridges/mautrix-whatsapp/registration.yaml',
|
||||||
'/opt/matrix-bridges/mautrix-telegram/registration.yaml',
|
|
||||||
},
|
},
|
||||||
'trusted_key_servers': {
|
'trusted_key_servers': {
|
||||||
'matrix.org',
|
'matrix.org',
|
||||||
|
@ -118,6 +118,29 @@ nodes['htz.ex42-1048908'] = {
|
||||||
'nyantec.com',
|
'nyantec.com',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'mautrix-telegram': {
|
||||||
|
'homeserver': {
|
||||||
|
'domain': 'franzi.business',
|
||||||
|
'url': 'https://matrix.franzi.business',
|
||||||
|
},
|
||||||
|
'provisioning': {
|
||||||
|
'enabled': True,
|
||||||
|
'shared_secret': vault.decrypt('encrypt$gAAAAABfVKflEMAi07C_QGP8cy97hF-4gGPym0oF6p4WSMdAveTpx-hFsZd2s7v9ubw99yIsyKx0dHOJI0UND7hV1rKZdvjy4Qa642abZ2wwW7SWTqvuP_qVtrf6-klc2QKTzeD9c_LVsyZ2dqz_JxRPq3MRXgkubZuWOZ6FmFlAlteTffoGfWE='),
|
||||||
|
},
|
||||||
|
'as_token': vault.decrypt('encrypt$gAAAAABfVK4eOskBMde8BgmLmMpgr5O1562Ln3qLwCGrW85j57aVkm33-ySWv12ByUoS4U6zU_aTstX1aiRaNgPa76FewNv-Yq9WxNsyxjbpeMdfhX2O9Q5T5RFL4Uple4kJCbOvqDn92U1gAKv2K-RioEGb41iv3Z7usXeyfkny5wa-s8gjICg='),
|
||||||
|
'hs_token': vault.decrypt('encrypt$gAAAAABfVK461ryXf-ka8P7x0GQ64O5bBG5-U2mvCzrlS02VGDsLPgNY-_QKd2-GhBtMaYb-OG1KZO_CtCHs54KWQsSDfxJbId4GVpncNDCoDQRnpIvXb0ebdj10-dC3zcANMb9Q2un1psnmgFYawSl4YJLf0_pkQaT13Y1OwWTmHdILUKyAzQU='),
|
||||||
|
'permissions': {
|
||||||
|
"'*'": 'relaybot',
|
||||||
|
'nyantec.com': 'full',
|
||||||
|
'franzi.business': 'full',
|
||||||
|
"'@kunsi:franzi.business'": 'admin',
|
||||||
|
},
|
||||||
|
'telegram': {
|
||||||
|
'api_id': vault.decrypt('encrypt$gAAAAABfVK5SmDDru-UQxitkE5VhPArnUBhaRbAqQPvAW2Fh3fd1XDrWxa3Qn4BSnJAPNWglH5wil_SXUMcIm95FMhPe8dVeMQ=='),
|
||||||
|
'api_token': vault.decrypt('encrypt$gAAAAABfVK5jHuUly1xr9Iku362k7oF4ZYRhLGzNJh3aJpiNrLfAy_DJpTwucx4FV_g45dyQF5boqG2rgdDfwsJN_Ab95es6T4SPGiXIxJOBlvIln1Torwh16pXKchhUTn_PQ077Ll1W'),
|
||||||
|
'bot_token': vault.decrypt('encrypt$gAAAAABfVK51ErJ6gfsOOkbRxSHDnVYmf7EihAQf7Uwj9og3TlAw64WRsA6ZVEgTSvOdLB3SMKZ-cTEhwkCOpbymq-_WLhes-hZALhN-H_oXHaxTQErJ0lARynKmjM-4ZhoGlUWlfh4Q'),
|
||||||
|
},
|
||||||
|
},
|
||||||
'mx-puppet-discord': {
|
'mx-puppet-discord': {
|
||||||
'homeserver': {
|
'homeserver': {
|
||||||
'domain': 'franzi.business',
|
'domain': 'franzi.business',
|
||||||
|
|
Loading…
Reference in a new issue