- 有一个自己的 matrix server
大概就是给已有的 telegram room 创建 matrix room 镜像,然后以自己的matrix账号发信可以在telegram用对应的telegram账号发信1。
应该是可以实现的吧?本文边实践边记录的。
参考了nickcao的配置
systemd.services = {
  mautrix-telegram.serviceConfig.RuntimeMaxSec = 86400;
};
services.mautrix-telegram = {
  enable = true;
  environmentFile = config.age.secrets.mautrix-tg.path;
  serviceDependencies = [ "conduit.service" ];
  settings = {
    homeserver = {
      address = "http://127.0.0.1:${toString config.services.matrix-conduit.settings.global.port}";
      domain = config.services.matrix-conduit.settings.global.server_name;
    };
    appservice = {
      address = "http://127.0.0.1:21389";
      database = "postgres:///mautrix-telegram?host=/run/postgresql";
      hostname = "127.0.0.1";
      port = 21389;
      provisioning.enabled = false;
    };
    bridge = {
      displayname_template = "{displayname}";
      public_portals = true;
      delivery_error_reports = true;
      incoming_bridge_error_reports = true;
      bridge_matrix_leave = false;
      relay_user_distinguishers = [ ];
      create_group_on_invite = false;
      animated_sticker = {
        target = "webp";
        convert_from_webm = true;
      };
      state_event_formats = {
        join = "";
        leave = "";
        name_change = "";
      };
      permissions = {
        "*" = "relaybot";
        "@sec:nyaw.xyz" = "admin";
      };
      relaybot = {
        authless_portals = false;
      };
    };
    telegram = {
      # 抄 tdesktop 的
      api_id = 611335;
      api_hash = "d524b414d21f4d37f08684c1df41ac9c";
      device_info = {
        app_version = "3.5.2";
      };
      force_refresh_interval_seconds = 3600;
    };
    logging = {
      loggers = {
        mau.level = "WARNING";
        telethon.level = "WARNING";
      };
    };
  };
};运行一次 mautrix server 之后 在 /var/lib/mautrix-telegram 会生成一个 telegram-registration.yaml。把 as_token hs_token 填回配置或作为环境变量导入mautrix-tg。
# mautrix-telegram 的环境变量,示例,一下两个是从telegram-registration.yaml取的
MAUTRIX_TELEGRAM_APPSERVICE_AS_TOKEN=tQSnxXhRBG726zqmtzt21DS7PDNR4LMIO3aI6ncGNjoXJZi1YX1Du2m5v4mV8iwB
MAUTRIX_TELEGRAM_APPSERVICE_HS_TOKEN=KtAGywnou2F/q7j2emtmGKZOeReO7xDg1HMmWAgVcKdg8neVBIMCPj5pjo2sr33v
# 以下是自己生成的
MAUTRIX_TELEGRAM_DOUBLE_PUPPET_SECRETS=json::{"nyaw.xyz":"as_token:VVEazouQjhWoL4jRVtNimKFrUTkH/7CK6H"}
# 以下是从tg拿的,作为userbot的登录凭据
MAUTRIX_TELEGRAM_TELEGRAM_BOT_TOKEN=1234578:YYRYT7t53EjiTGsX4WReGfEbkqgRJ8CII
再将 telegram AppService 注册至实例,conduit 的话在 admin room 里面操作,其余见官方教程2。
我的操作方式:
@conduit@nyaw.xyz appservices register
```
</var/lib/mautrix-telegram/telegram-registration.yaml 的内容>
```
然后注册doublepuppet appservice3
@conduit@nyaw.xyz appservices register
```
# The ID doesn't really matter, put whatever you want.
id: doublepuppet
# The URL is intentionally left empty (null), as the homeserver shouldn't
# push events anywhere for this extra appservice. If you use a
# non-spec-compliant server, you may need to put some fake URL here.
url:
# Generate random strings for these three fields. Only the as_token really
# matters, hs_token is never used because there's no url, and the default
# user (sender_localpart) is never used either.
as_token: VVEazouQjhWoL4jRVtNimKFrUTkH/7CK6H
hs_token: randomstring
sender_localpart: randomstring
# Bridges don't like ratelimiting. This should only apply when using the
# as_token, normal user tokens will still be ratelimited.
```
注册成功后在自己的 matrix client 私聊 @telegrambot:domain.com 再发help, 查看后续攻略。
可以直接对其发送 login 登陆 telegram 账号,使其作为 userbot 来辅助 doublepuppet 和群组消息同步。
到达基本使用的步骤基本就这些,但是文档一大堆东西混在一起混乱不堪,令人费解。