Compare commits
19 Commits
backupbot
...
2.1.0+v1.6
Author | SHA1 | Date | |
---|---|---|---|
0838cb819e | |||
0e3c286eaf
|
|||
2beb6e4bf0
|
|||
bf3db9999f
|
|||
00b0375b1c
|
|||
1832911526
|
|||
2bac1aa31c
|
|||
dd4841dbe0
|
|||
467a35e7b9
|
|||
06381aceaf
|
|||
d9c5248f8c
|
|||
786bf0587f
|
|||
840f532376
|
|||
dcc9ec543d | |||
65a149eac3 | |||
6041ad6112 | |||
1afa8cf7b7
|
|||
b5831114f4
|
|||
02d78e9aa9 |
47
.env.sample
47
.env.sample
@ -29,7 +29,7 @@ ROOT_LOG_LEVEL=WARN
|
||||
|
||||
REDACTION_RETENTION_PERIOD=7d
|
||||
|
||||
RETENTION_MAX_LIFETIME=1m
|
||||
RETENTION_MAX_LIFETIME=4w
|
||||
|
||||
ENABLE_3PID_LOOKUP=true
|
||||
|
||||
@ -40,21 +40,34 @@ ENCRYPTED_BY_DEFAULT=all
|
||||
#ENABLE_ALLOWLIST=1
|
||||
#FEDERATION_ALLOWLIST="[]"
|
||||
|
||||
#COMPOSE_FILE="compose.yml:compose.keycloak.yml"
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.keycloak.yml"
|
||||
#KEYCLOAK_ENABLED=1
|
||||
#KEYCLOAK_ID=keycloak
|
||||
#KEYCLOAK_NAME=
|
||||
#KEYCLOAK_URL=
|
||||
#KEYCLOAK_CLIENT_ID=
|
||||
#KEYCLOAK_CLIENT_DOMAIN=
|
||||
#KEYCLOAK_ALLOW_EXISTING_USERS=false
|
||||
#SECRET_KEYCLOAK_CLIENT_SECRET_VERSION=v1
|
||||
|
||||
#COMPOSE_FILE="compose.yml:compose.turn.yml"
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.keycloak2.yml"
|
||||
#KEYCLOAK2_ENABLED=1
|
||||
#KEYCLOAK2_ID=keycloak2
|
||||
#KEYCLOAK2_NAME=
|
||||
#KEYCLOAK2_URL=
|
||||
#KEYCLOAK2_CLIENT_ID=
|
||||
#KEYCLOAK2_CLIENT_DOMAIN=
|
||||
#KEYCLOAK2_ALLOW_EXISTING_USERS=false
|
||||
#SECRET_KEYCLOAK2_CLIENT_SECRET_VERSION=v1
|
||||
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.turn.yml"
|
||||
#TURN_ENABLED=1
|
||||
#TURN_URIS="[\"turns:coturn.foo.zone?transport=udp\", \"turns:coturn.foo.zone?transport=tcp\"]"
|
||||
#TURN_ALLOW_GUESTS=true
|
||||
#KEYCLOAK2_ALLOW_EXISTING_USERS=false
|
||||
#SECRET_TURN_SHARED_SECRET_VERSION=v1
|
||||
|
||||
#COMPOSE_FILE="compose.yml:compose.smtp.yml"
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.smtp.yml"
|
||||
#SMTP_ENABLED=1
|
||||
#SMTP_APP_NAME=
|
||||
#SMTP_FROM=
|
||||
@ -62,3 +75,29 @@ ENCRYPTED_BY_DEFAULT=all
|
||||
#SMTP_PORT=
|
||||
#SMTP_USER=
|
||||
#SECRET_SMTP_PASSWORD_VERSION=v1
|
||||
|
||||
#APP_SERVICES_ENABLED=1
|
||||
#APP_SERVICE_CONFIGS="[\"...\"]"
|
||||
|
||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.telegram.yml"
|
||||
#APP_SERVICE_BOT_USERNAME=telegrambot
|
||||
#APP_SERVICE_DISPLAY_NAME="Telegram bridge bot"
|
||||
#APP_SERVICE_ID=
|
||||
#HOMESERVER_DOMAIN=
|
||||
#HOMESERVER_URL=
|
||||
#VERIFY_SSL=false
|
||||
#ENABLE_ENCRYPTION=true
|
||||
#TELEGRAM_APP_ID=
|
||||
#TELEGRAM_BRIDGE_ADMIN_1=
|
||||
#TELEGRAM_BRIDGE_ADMIN_2=
|
||||
#SECRET_TELEGRAM_DB_PASSWORD_VERSION=v1
|
||||
#SECRET_TELEGRAM_API_HASH_VERSION=v1
|
||||
#SECRET_TELEGRAM_BOT_TOKEN_VERSION=v1
|
||||
#SECRET_TELEGRAM_AS_TOKEN_VERSION=v1
|
||||
#SECRET_TELEGRAM_HS_TOKEN_VERSION=v1
|
||||
|
||||
COMPOSE_FILE="$COMPOSE_FILE:compose.discord.yml"
|
||||
#DISCORD_CLIENT_ID=
|
||||
#DISCORD_BRIDGE_ADMIN=
|
||||
#SECRET_DISCORD_BOT_TOKEN_VERSION=v1
|
||||
#SECRET_DISCORD_DB_PASSWORD_VERSION=v1
|
||||
|
60
README.md
60
README.md
@ -78,4 +78,62 @@ docker run -it \
|
||||
|
||||
You'll need to deploy something like [this](https://git.autonomic.zone/ruangrupa/well-known-uris).
|
||||
|
||||
This could be implemented in this recipe but we haven't merged it in yet. Chang sets are welcome.
|
||||
This could be implemented in this recipe but we haven't merged it in yet. Change sets are welcome.
|
||||
|
||||
### Telegram bridging
|
||||
|
||||
> WIP
|
||||
|
||||
Setting it up is a bit of a chicken/egg & chasing cats moment.
|
||||
|
||||
You need to get your bot setup on the telegram side first and have these values:
|
||||
|
||||
```
|
||||
api_id: ...
|
||||
api_hash: ...
|
||||
telegram_bot_token: ...
|
||||
```
|
||||
|
||||
Here is a rough guide:
|
||||
|
||||
```
|
||||
abra app secret insert <domain> telegram_api_hash v1 <secret>
|
||||
abra app secret insert <domain> telegram_bot_token v1 <secret>
|
||||
abra app secret generate -a <domain>
|
||||
|
||||
abra app deploy <domain>
|
||||
abra app run matrix.fva.wtf telegram_bridge cat /data/registration.yaml
|
||||
abra app undeploy <domain>
|
||||
|
||||
abra app secret rm <domain> telegram_as_token
|
||||
abra app secret insert <domain> telegram_as_token v1 <secret>
|
||||
|
||||
abra app secret rm <domain> telegram_as_token
|
||||
abra app secret insert <domain> telegram_hs_token v1 <secret>
|
||||
|
||||
abra app deploy <domain>
|
||||
```
|
||||
|
||||
Some helpful documentation:
|
||||
|
||||
- [`docs.mau.fi`](https://docs.mau.fi/bridges/python/setup/docker.html?bridge=telegram)
|
||||
- [`example-config.yaml`](https://mau.dev/mautrix/telegram/-/blob/master/mautrix_telegram/example-config.yaml)
|
||||
|
||||
### Discord bridging
|
||||
|
||||
> WIP
|
||||
|
||||
Just as messy as the Telegram bridging above! Rough guide:
|
||||
|
||||
- get a local copy of [`config.yaml`](https://github.com/matrix-org/matrix-appservice-discord/blob/develop/config/config.sample.yaml)
|
||||
- fill it out with the values you need, all the discord token stuff, etc.
|
||||
- run `mkdir -p data && cp config.yaml data/` then `docker run --rm -v data:/data halfshot/matrix-appservice-discord:v1.0.0 sh -c "cd /data && node /build/src/discordas.js -r -u "http://discordbridge:9005" -c config.yaml"`
|
||||
- this generates the app service registration configuration you need to feed to the homeserver
|
||||
- run secret generation for the `discord_db_password`, insert your `discord_bot_token`
|
||||
- run `abra app cp <domain> discord-registration.yaml app:/discord-data` (it has to be called `discord-registration.yaml`)
|
||||
- deploy the bridge & happy hacking
|
||||
|
||||
Some helpful documentation:
|
||||
|
||||
- [`matrix-org/matrix-appservice-discord` docs](https://github.com/matrix-org/matrix-appservice-discord#bridging-a-room)
|
||||
- [`t2bot.io/discord`](https://t2bot.io/discord/)
|
||||
|
4
abra.sh
4
abra.sh
@ -1,3 +1,5 @@
|
||||
export ENTRYPOINT_CONF_VERSION=v1
|
||||
export HOMESERVER_YAML_VERSION=v8
|
||||
export HOMESERVER_YAML_VERSION=v11
|
||||
export LOG_CONFIG_VERSION=v2
|
||||
export TELEGRAM_BRIDGE_YAML_VERSION=v2
|
||||
export DISCORD_BRIDGE_YAML_VERSION=v1
|
||||
|
66
compose.discord.yml
Normal file
66
compose.discord.yml
Normal file
@ -0,0 +1,66 @@
|
||||
---
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
environment:
|
||||
- APP_SERVICES_ENABLED
|
||||
- APP_SERVICE_CONFIGS
|
||||
volumes:
|
||||
- discord-data:/discord-data
|
||||
|
||||
discordbridge:
|
||||
image: halfshot/matrix-appservice-discord:v1.0.0
|
||||
depends_on:
|
||||
- discorddb
|
||||
configs:
|
||||
- source: discord_bridge_yaml
|
||||
target: /data/config.yaml
|
||||
environment:
|
||||
- DISCORD_CLIENT_ID
|
||||
- DISCORD_BRIDGE_ADMIN
|
||||
- HOMESERVER_DOMAIN
|
||||
- HOMESERVER_URL
|
||||
secrets:
|
||||
- discord_bot_token
|
||||
- discord_db_password
|
||||
volumes:
|
||||
- discord-data:/data
|
||||
networks:
|
||||
- internal
|
||||
|
||||
discorddb:
|
||||
image: postgres:13-alpine
|
||||
secrets:
|
||||
- discord_db_password
|
||||
environment:
|
||||
- LC_COLLATE=C
|
||||
- LC_CTYPE=C
|
||||
- POSTGRES_DB=discordbridge
|
||||
- POSTGRES_INITDB_ARGS="-E \"UTF8\""
|
||||
- POSTGRES_PASSWORD_FILE=/run/secrets/discord_db_password
|
||||
- POSTGRES_USER=discordbridge
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "synapse"]
|
||||
volumes:
|
||||
- discord-postgres:/var/lib/postgresql/data
|
||||
|
||||
configs:
|
||||
discord_bridge_yaml:
|
||||
name: ${STACK_NAME}_discord_bridge_yaml_${DISCORD_BRIDGE_YAML_VERSION}
|
||||
file: discord_bridge.yaml.tmpl
|
||||
template_driver: golang
|
||||
|
||||
volumes:
|
||||
discord-data:
|
||||
discord-postgres:
|
||||
|
||||
secrets:
|
||||
discord_db_password:
|
||||
external: true
|
||||
name: ${STACK_NAME}_discord_db_password_${SECRET_DISCORD_DB_PASSWORD_VERSION}
|
||||
discord_bot_token:
|
||||
external: true
|
||||
name: ${STACK_NAME}_discord_bot_token_${SECRET_DISCORD_BOT_TOKEN_VERSION}
|
@ -14,7 +14,9 @@ services:
|
||||
- KEYCLOAK_CLIENT_ID
|
||||
- KEYCLOAK_ENABLED
|
||||
- KEYCLOAK_NAME
|
||||
- KEYCLOAK_ID
|
||||
- KEYCLOAK_URL
|
||||
- KEYCLOAK_ALLOW_EXISTING_USERS
|
||||
|
||||
secrets:
|
||||
keycloak_client_secret:
|
||||
|
@ -6,8 +6,10 @@ services:
|
||||
secrets:
|
||||
- keycloak2_client_secret
|
||||
environment:
|
||||
- KEYCLOAK2_ALLOW_EXISTING_USERS
|
||||
- KEYCLOAK2_CLIENT_ID
|
||||
- KEYCLOAK2_ENABLED
|
||||
- KEYCLOAK2_ID
|
||||
- KEYCLOAK2_NAME
|
||||
- KEYCLOAK2_URL
|
||||
|
||||
|
84
compose.telegram.yml
Normal file
84
compose.telegram.yml
Normal file
@ -0,0 +1,84 @@
|
||||
---
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
environment:
|
||||
- APP_SERVICES_ENABLED
|
||||
- APP_SERVICE_CONFIGS
|
||||
volumes:
|
||||
- telegram-data:/telegram-data
|
||||
|
||||
telegrambridge:
|
||||
image: dock.mau.dev/mautrix/telegram:1f5b91cbec7866663d8dd8f4c9a62115e2905552-amd64
|
||||
depends_on:
|
||||
- telegramdb
|
||||
configs:
|
||||
- source: telegram_bridge_yaml
|
||||
target: /data/config.yaml
|
||||
environment:
|
||||
- APP_SERVICE_BOT_USERNAME
|
||||
- APP_SERVICE_DISPLAY_NAME
|
||||
- APP_SERVICE_ID
|
||||
- ENABLE_ENCRYPTION
|
||||
- HOMESERVER_DOMAIN
|
||||
- HOMESERVER_URL
|
||||
- TELEGRAM_APP_ID
|
||||
- TELEGRAM_BRIDGE_ADMIN_1
|
||||
- TELEGRAM_BRIDGE_ADMIN_2
|
||||
- VERIFY_SSL
|
||||
secrets:
|
||||
- telegram_api_hash
|
||||
- telegram_as_token
|
||||
- telegram_bot_token
|
||||
- telegram_db_password
|
||||
- telegram_hs_token
|
||||
volumes:
|
||||
- telegram-data:/data
|
||||
networks:
|
||||
- internal
|
||||
|
||||
telegramdb:
|
||||
image: postgres:13-alpine
|
||||
secrets:
|
||||
- telegram_db_password
|
||||
environment:
|
||||
- LC_COLLATE=C
|
||||
- LC_CTYPE=C
|
||||
- POSTGRES_DB=telegrambridge
|
||||
- POSTGRES_INITDB_ARGS="-E \"UTF8\""
|
||||
- POSTGRES_PASSWORD_FILE=/run/secrets/telegram_db_password
|
||||
- POSTGRES_USER=telegrambridge
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-U", "synapse"]
|
||||
volumes:
|
||||
- telegram-postgres:/var/lib/postgresql/data
|
||||
|
||||
configs:
|
||||
telegram_bridge_yaml:
|
||||
name: ${STACK_NAME}_telegram_bridge_yaml_${TELEGRAM_BRIDGE_YAML_VERSION}
|
||||
file: telegram_bridge.yaml.tmpl
|
||||
template_driver: golang
|
||||
|
||||
volumes:
|
||||
telegram-data:
|
||||
telegram-postgres:
|
||||
|
||||
secrets:
|
||||
telegram_db_password:
|
||||
external: true
|
||||
name: ${STACK_NAME}_telegram_db_password_${SECRET_TELEGRAM_DB_PASSWORD_VERSION}
|
||||
telegram_api_hash:
|
||||
external: true
|
||||
name: ${STACK_NAME}_telegram_api_hash_${SECRET_TELEGRAM_API_HASH_VERSION}
|
||||
telegram_bot_token:
|
||||
external: true
|
||||
name: ${STACK_NAME}_telegram_bot_token_${SECRET_TELEGRAM_BOT_TOKEN_VERSION}
|
||||
telegram_as_token:
|
||||
external: true
|
||||
name: ${STACK_NAME}_telegram_as_token_${SECRET_TELEGRAM_AS_TOKEN_VERSION}
|
||||
telegram_hs_token:
|
||||
external: true
|
||||
name: ${STACK_NAME}_telegram_hs_token_${SECRET_TELEGRAM_HS_TOKEN_VERSION}
|
@ -3,9 +3,11 @@ version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: "matrixdotorg/synapse:v1.55.2"
|
||||
image: "matrixdotorg/synapse:v1.62.0"
|
||||
volumes:
|
||||
- "data:/data"
|
||||
depends_on:
|
||||
- db
|
||||
secrets:
|
||||
- db_password
|
||||
- registration_shared_secret
|
||||
@ -34,6 +36,7 @@ services:
|
||||
- USER_IPS_MAX_AGE
|
||||
- VIRTUAL_HOST=${DOMAIN}
|
||||
- VIRTUAL_PORT=8008
|
||||
- RETENTION_MAX_LIFETIME
|
||||
networks:
|
||||
- proxy
|
||||
- internal
|
||||
@ -55,7 +58,7 @@ services:
|
||||
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
|
||||
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
|
||||
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
|
||||
- "coop-cloud.${STACK_NAME}.version=1.3.0+v1.55.2"
|
||||
- "coop-cloud.${STACK_NAME}.version=2.1.0+v1.62.0"
|
||||
|
||||
db:
|
||||
image: postgres:13-alpine
|
||||
|
123
discord_bridge.yaml.tmpl
Normal file
123
discord_bridge.yaml.tmpl
Normal file
@ -0,0 +1,123 @@
|
||||
bridge:
|
||||
# Domain part of the bridge, e.g. matrix.org
|
||||
domain: "{{ env "HOMESERVER_DOMAIN" }}"
|
||||
# This should be your publicly-facing URL because Discord may use it to
|
||||
# fetch media from the media store.
|
||||
homeserverUrl: "{{ env "HOMESERVER_URL" }}"
|
||||
# The TCP port on which the appservice runs on.
|
||||
port: 9005
|
||||
# Interval at which to process users in the 'presence queue'. If you have
|
||||
# 5 users, one user will be processed every 500 milliseconds according to the
|
||||
# value below. This has a minimum value of 250.
|
||||
# WARNING: This has a high chance of spamming the homeserver with presence
|
||||
# updates since it will send one each time somebody changes state or is online.
|
||||
presenceInterval: 500
|
||||
# Disable setting presence for 'ghost users' which means Discord users on Matrix
|
||||
# will not be shown as away or online.
|
||||
disablePresence: false
|
||||
# Disable sending typing notifications when somebody on Discord types.
|
||||
disableTypingNotifications: false
|
||||
# Disable deleting messages on Discord if a message is redacted on Matrix.
|
||||
disableDeletionForwarding: false
|
||||
# Disable portal bridging, where Matrix users can search for unbridged Discord
|
||||
# rooms on their Matrix server.
|
||||
disablePortalBridging: false
|
||||
# Enable users to bridge rooms using !discord commands. See
|
||||
# https://t2bot.io/discord for instructions.
|
||||
enableSelfServiceBridging: true
|
||||
# Disable sending of read receipts for Matrix events which have been
|
||||
# successfully bridged to Discord.
|
||||
disableReadReceipts: false
|
||||
# Disable Join Leave echos from matrix
|
||||
disableJoinLeaveNotifications: false
|
||||
# Disable Invite echos from matrix
|
||||
disableInviteNotifications: false
|
||||
# Auto-determine the language of code blocks (this can be CPU-intensive)
|
||||
determineCodeLanguage: false
|
||||
# MXID of an admin user that will be PMd if the bridge experiences problems. Optional
|
||||
adminMxid: '{{ env "DISCORD_BRIDGE_ADMIN" }}'
|
||||
# The message to send to the bridge admin if the Discord token is not valid
|
||||
invalidTokenMessage: 'Your Discord bot token seems to be invalid, and the bridge cannot function. Please update it in your bridge settings and restart the bridge'
|
||||
|
||||
# Authentication configuration for the discord bot.
|
||||
auth:
|
||||
# This MUST be a string (wrapped in quotes)
|
||||
clientID: "{{ env "DISCORD_CLIENT_ID" }}"
|
||||
botToken: "{{ secret "discord_bot_token" }}"
|
||||
# You must enable "Privileged Gateway Intents" in your bot settings on discord.com (e.g. https://discord.com/developers/applications/12345/bot)
|
||||
# for this to work
|
||||
usePrivilegedIntents: false
|
||||
|
||||
logging:
|
||||
# What level should the logger output to the console at.
|
||||
console: "warn" #silly, verbose, info, http, warn, error, silent
|
||||
lineDateFormat: "MMM-D HH:mm:ss.SSS" # This is in moment.js format
|
||||
files:
|
||||
- file: "debug.log"
|
||||
disable:
|
||||
- "PresenceHandler" # Will not capture presence logging
|
||||
- file: "warn.log" # Will capture warnings
|
||||
level: "warn"
|
||||
- file: "botlogs.log" # Will capture logs from DiscordBot
|
||||
level: "info"
|
||||
enable:
|
||||
- "DiscordBot"
|
||||
|
||||
database:
|
||||
# You may either use SQLite or Postgresql for the bridge database, which contains
|
||||
# important mappings for events and user puppeting configurations.
|
||||
# Use the filename option for SQLite, or connString for Postgresql.
|
||||
# If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite
|
||||
# WARNING: You will almost certainly be fine with sqlite unless your bridge
|
||||
# is in heavy demand and you suffer from IO slowness.
|
||||
connString: "postgres://discordbridge:{{ secret "discord_db_password" }}@discorddb/discordbridge"
|
||||
|
||||
room:
|
||||
# Set the default visibility of alias rooms, defaults to "public".
|
||||
# One of: "public", "private"
|
||||
defaultVisibility: "public"
|
||||
|
||||
channel:
|
||||
# Pattern of the name given to bridged rooms.
|
||||
# Can use :guild for the guild name and :name for the channel name.
|
||||
namePattern: "[Discord] :guild :name"
|
||||
# Changes made to rooms when a channel is deleted.
|
||||
deleteOptions:
|
||||
# Prefix the room name with a string.
|
||||
#namePrefix: "[Deleted]"
|
||||
# Prefix the room topic with a string.
|
||||
#topicPrefix: "This room has been deleted"
|
||||
# Disable people from talking in the room by raising the event PL to 50
|
||||
disableMessaging: false
|
||||
# Remove the discord alias from the room.
|
||||
unsetRoomAlias: true
|
||||
# Remove the room from the directory.
|
||||
unlistFromDirectory: true
|
||||
# Set the room to be unavailable for joining without an invite.
|
||||
setInviteOnly: true
|
||||
# Make all the discord users leave the room.
|
||||
ghostsLeave: true
|
||||
|
||||
limits:
|
||||
# Delay in milliseconds between discord users joining a room.
|
||||
roomGhostJoinDelay: 6000
|
||||
# Lock timeout in milliseconds before sending messages to discord to avoid
|
||||
# echos. Default is rather high as the lock will most likely time out
|
||||
# before anyways.
|
||||
# echos = (Copies of a sent message may arrive from discord before we've
|
||||
# fininished handling it, causing us to echo it back to the room)
|
||||
discordSendDelay: 1500
|
||||
# Set a maximum of rooms to be bridged.
|
||||
# roomCount: 20
|
||||
|
||||
ghosts:
|
||||
# Pattern for the ghosts nick, available is :nick, :username, :tag and :id
|
||||
nickPattern: ":nick"
|
||||
# Pattern for the ghosts username, available is :username, :tag and :id
|
||||
usernamePattern: ":username#:tag"
|
||||
|
||||
# Prometheus-compatible metrics endpoint
|
||||
metrics:
|
||||
enable: false
|
||||
port: 9001
|
||||
host: "127.0.0.1"
|
@ -463,6 +463,12 @@ limit_remote_rooms:
|
||||
#
|
||||
#allow_per_room_profiles: false
|
||||
|
||||
# The largest allowed file size for a user avatar. Defaults to no restriction.
|
||||
# Note that user avatar changes will not work if this is set without
|
||||
# using Synapse's media repository.
|
||||
#
|
||||
max_avatar_size: 10M
|
||||
|
||||
# How long to keep redacted events in unredacted form in the database. After
|
||||
# this period redacted events get replaced with their redacted form in the DB.
|
||||
#
|
||||
@ -1442,9 +1448,9 @@ room_prejoin_state:
|
||||
|
||||
# A list of application service config files to use
|
||||
#
|
||||
#app_service_config_files:
|
||||
# - app_service_1.yaml
|
||||
# - app_service_2.yaml
|
||||
{{ if eq (env "APP_SERVICES_ENABLED") "1" }}
|
||||
app_service_config_files: {{ env "APP_SERVICE_CONFIGS" }}
|
||||
{{ end }}
|
||||
|
||||
# Uncomment to enable tracking of application service IP addresses. Implicitly
|
||||
# enables MAU tracking for application service users.
|
||||
@ -1885,12 +1891,13 @@ saml2_config:
|
||||
oidc_providers:
|
||||
|
||||
{{ if eq (env "KEYCLOAK_ENABLED") "1" }}
|
||||
- idp_id: keycloak
|
||||
- idp_id: {{ env "KEYCLOAK_ID" }}
|
||||
idp_name: {{ env "KEYCLOAK_NAME" }}
|
||||
issuer: "{{ env "KEYCLOAK_URL" }}"
|
||||
client_id: "{{ env "KEYCLOAK_CLIENT_ID" }}"
|
||||
client_secret: "{{ secret "keycloak_client_secret" }}"
|
||||
scopes: ["openid", "profile"]
|
||||
allow_existing_users: {{ env "KEYCLOAK_ALLOW_EXISTING_USERS" }}
|
||||
user_mapping_provider:
|
||||
config:
|
||||
localpart_template: "{{ "{{ user.preferred_username }}" }}"
|
||||
@ -1898,12 +1905,13 @@ oidc_providers:
|
||||
{{ end }}
|
||||
|
||||
{{ if eq (env "KEYCLOAK2_ENABLED") "1" }}
|
||||
- idp_id: keycloak2
|
||||
- idp_id: {{ env "KEYCLOAK2_ID" }}
|
||||
idp_name: {{ env "KEYCLOAK2_NAME" }}
|
||||
issuer: "{{ env "KEYCLOAK2_URL" }}"
|
||||
client_id: "{{ env "KEYCLOAK2_CLIENT_ID" }}"
|
||||
client_secret: "{{ secret "keycloak2_client_secret" }}"
|
||||
scopes: ["openid", "profile"]
|
||||
allow_existing_users: {{ env "KEYCLOAK2_ALLOW_EXISTING_USERS" }}
|
||||
user_mapping_provider:
|
||||
config:
|
||||
localpart_template: "{{ "{{ user.preferred_username }}" }}"
|
||||
|
9
release/2.0.0+v1.58.1
Normal file
9
release/2.0.0+v1.58.1
Normal file
@ -0,0 +1,9 @@
|
||||
This upgrade adds new env variables for homeserver.yml, please add them to your .env file:
|
||||
|
||||
```
|
||||
ENCRYPTED_BY_DEFAULT=all
|
||||
SERVE_SERVER_WELLKNOWN=false
|
||||
|
||||
#KEYCLOAK_ID=keycloak
|
||||
#KEYCLOAK_ALLOW_EXISTING_USERS=false
|
||||
```
|
5
release/2.1.0+v1.62.0
Normal file
5
release/2.1.0+v1.62.0
Normal file
@ -0,0 +1,5 @@
|
||||
The only release note worthy point for this release is: if you're using the
|
||||
horrendous `compose.keycloak2.yml` (as creator of this horrible hack, I am
|
||||
allowed to call it horrendous ;)), you will need to re-check the new
|
||||
~/.abra/recipes/matrix-synapse/.env.sample, there are some new default env vars
|
||||
which you'll have to add in (e.g. KEYCLOAK2_ID=...).
|
547
telegram_bridge.yaml.tmpl
Normal file
547
telegram_bridge.yaml.tmpl
Normal file
@ -0,0 +1,547 @@
|
||||
# Homeserver details
|
||||
homeserver:
|
||||
# The address that this appservice can use to connect to the homeserver.
|
||||
address: {{ env "HOMESERVER_URL" }}
|
||||
# The domain of the homeserver (for MXIDs, etc).
|
||||
domain: {{ env "HOMESERVER_DOMAIN" }}
|
||||
# Whether or not to verify the SSL certificate of the homeserver.
|
||||
# Only applies if address starts with https://
|
||||
verify_ssl: {{ env "VERIFY_SSL" }}
|
||||
asmux: false
|
||||
# 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: null
|
||||
# Endpoint for reporting per-message status.
|
||||
message_send_checkpoint_endpoint: null
|
||||
# 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://telegrambridge: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: postgres://telegrambridge:{{ secret "telegram_db_password" }}@telegramdb/telegrambridge
|
||||
# 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.
|
||||
database_opts:
|
||||
min_size: 1
|
||||
max_size: 10
|
||||
|
||||
# Public part of web server for out-of-Matrix interaction with the bridge.
|
||||
# Used for things like login if the user wants to make sure the 2FA password isn't stored in
|
||||
# the HS database.
|
||||
public:
|
||||
# Whether or not the public-facing endpoints should be enabled.
|
||||
enabled: false
|
||||
# The prefix to use in the public-facing endpoints.
|
||||
prefix: /public
|
||||
# The base URL where the public-facing endpoints are available. The prefix is not added
|
||||
# implicitly.
|
||||
external: https://example.com/public
|
||||
|
||||
# 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: false
|
||||
# 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: generate
|
||||
|
||||
# The unique ID of this appservice.
|
||||
id: {{ env "APP_SERVICE_ID" }}
|
||||
# Username of the appservice bot.
|
||||
bot_username: {{ env "APP_SERVICE_BOT_USERNAME" }}
|
||||
# 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: {{ env "APP_SERVICE_DISPLAY_NAME" }}
|
||||
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: "{{ secret "telegram_as_token" }}"
|
||||
hs_token: "{{ secret "telegram_hs_token" }}"
|
||||
|
||||
# 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 config
|
||||
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
|
||||
# Maximum length of displayname
|
||||
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: false
|
||||
|
||||
# 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
|
||||
# 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: 30
|
||||
# Whether or not to sync and create portals for direct chats at startup.
|
||||
sync_direct_chats: false
|
||||
# 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 bridge plaintext highlights.
|
||||
# Only enable this if your displayname_template has some static part that the bridge can use to
|
||||
# reliably identify what is a plaintext highlight.
|
||||
plaintext_highlights: false
|
||||
# Whether or not to make portals of publicly joinable channels/supergroups publicly joinable on Matrix.
|
||||
public_portals: true
|
||||
# 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: false
|
||||
# Servers to always allow double puppeting from
|
||||
double_puppet_server_map:
|
||||
example.com: https://example.com
|
||||
# Allow using double puppeting from any server with a valid client .well-known file.
|
||||
double_puppet_allow_discovery: false
|
||||
# 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
|
||||
# Set to false to disable link previews in messages sent to Telegram.
|
||||
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: false
|
||||
# Use inline images instead of a separate message for the caption.
|
||||
# N.B. Inline images are not supported on all clients (e.g. Element iOS/Android).
|
||||
inline_images: false
|
||||
# Maximum size of image in megabytes before sending to Telegram as a document.
|
||||
image_as_file_size: 10
|
||||
# Maximum number of pixels in an image before sending to Telegram as a document. Defaults to 1280x1280 = 1638400.
|
||||
image_as_file_pixels: 1638400
|
||||
# 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: true
|
||||
# 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
|
||||
target: gif
|
||||
# Arguments for converter. All converters take width and height.
|
||||
args:
|
||||
width: 256
|
||||
height: 256
|
||||
fps: 25 # only for webm and gif (2, 5, 10, 20 or 25 recommended)
|
||||
# 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: {{ env "ENABLE_ENCRYPTION" }}
|
||||
# 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
|
||||
# Database for the encryption data. If set to `default`, will use the appservice database.
|
||||
database: default
|
||||
# Options for automatic key sharing.
|
||||
key_sharing:
|
||||
# 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: false
|
||||
# Require the requesting device to have a valid cross-signing signature?
|
||||
# This doesn't require that the bridge has verified the device, only that the user has verified it.
|
||||
# Not yet implemented.
|
||||
require_cross_signing: false
|
||||
# Require devices to be verified by the bridge?
|
||||
# Verification by the bridge is not yet implemented.
|
||||
require_verification: false
|
||||
# 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 Telegram.
|
||||
delivery_receipts: false
|
||||
# Whether or not delivery errors should be reported as messages in the Matrix room.
|
||||
delivery_error_reports: 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
|
||||
# When using double puppeting, should muted chats be muted in Matrix?
|
||||
mute_bridging: false
|
||||
# When using double puppeting, should pinned chats be moved to a specific tag in Matrix?
|
||||
# The favorites tag is `m.favourite`.
|
||||
pinned_tag: null
|
||||
# Same as above for archived chats, the low priority tag is `m.lowpriority`.
|
||||
archive_tag: null
|
||||
# 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: true
|
||||
# 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
|
||||
# Settings for backfilling messages from Telegram.
|
||||
backfill:
|
||||
# Whether or not the Telegram ghosts of logged in Matrix users should be
|
||||
# invited to private chats when backfilling history from Telegram. This is
|
||||
# usually needed to prevent rate limits and to allow timestamp massaging.
|
||||
invite_own_puppet: true
|
||||
# Maximum number of messages to backfill without using a takeout.
|
||||
# The first time a takeout is used, the user has to manually approve it from a different
|
||||
# device. If initial_limit or missed_limit are higher than this value, the bridge will ask
|
||||
# the user to accept the takeout after logging in before syncing any chats.
|
||||
takeout_limit: 100
|
||||
# Maximum number of messages to backfill initially.
|
||||
# Set to 0 to disable backfilling when creating portal, or -1 to disable the limit.
|
||||
#
|
||||
# N.B. Initial backfill will only start after member sync. Make sure your
|
||||
# max_initial_member_sync is set to a low enough value so it doesn't take forever.
|
||||
initial_limit: 0
|
||||
# Maximum number of messages to backfill if messages were missed while the bridge was
|
||||
# disconnected. Note that this only works for logged in users and only if the chat isn't
|
||||
# older than sync_update_limit
|
||||
# Set to 0 to disable backfilling missed messages.
|
||||
missed_limit: 50
|
||||
# If using double puppeting, should notifications be disabled
|
||||
# while the initial backfill is in progress?
|
||||
disable_notifications: 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
|
||||
|
||||
# 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:
|
||||
"*": "relaybot"
|
||||
"{{ env "TELEGRAM_BRIDGE_ADMIN_1" }}": "admin"
|
||||
"{{ env "TELEGRAM_BRIDGE_ADMIN_2" }}": "admin"
|
||||
|
||||
# Options related to the message relay Telegram bot.
|
||||
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 config
|
||||
telegram:
|
||||
# Get your own API keys at https://my.telegram.org/apps
|
||||
api_id: {{ env "TELEGRAM_APP_ID" }}
|
||||
api_hash: {{ secret "telegram_api_hash" }}
|
||||
# (Optional) Create your own bot at https://t.me/BotFather
|
||||
bot_token: {{ secret "telegram_bot_token" }}
|
||||
|
||||
# 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: auto
|
||||
# "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:
|
||||
file:
|
||||
class: logging.handlers.RotatingFileHandler
|
||||
formatter: normal
|
||||
filename: /data/mautrix-telegram.log
|
||||
maxBytes: 10485760
|
||||
backupCount: 10
|
||||
console:
|
||||
class: logging.StreamHandler
|
||||
formatter: colored
|
||||
loggers:
|
||||
mau:
|
||||
level: DEBUG
|
||||
telethon:
|
||||
level: INFO
|
||||
aiohttp:
|
||||
level: INFO
|
||||
root:
|
||||
level: DEBUG
|
||||
handlers: [file, console]
|
Reference in New Issue
Block a user