#bot #login #matrix #subcommand #room #join #send

app fafbot

一次性使用的矩阵机器人

1 个不稳定版本

0.1.0 2023年3月12日

#823 in 身份验证

Apache-2.0

330KB
1K SLoC

一次性使用的矩阵机器人

面向一次使用从命令行调用的矩阵机器人。

功能/使用方法

命令本身非常有用

Usage: fafbot [OPTIONS] <COMMAND>

Commands:
  login                  Login to server with user and password
  login-sso              Login to server through SSO
  login-restore-session  Login to server by reusing an existing token
  join                   Join room
  leave                  Leave room
  list-joined            List joined rooms
  list-invited           List rooms invited to
  send                   Send message
  help                   Print this message or the help of the given subcommand(s)

Options:
      --debug            Enable debug logging
      --dry-run          Do everything but send the message and join/leave channels (still log in, etc)
  -d, --db-dir <db-dir>  Directory where the bot state is stored [env: FAFBOT_DB_DIR] [default: /home/user/.local/state/fafbot]
  -h, --help             Print help

本质上

  1. 您需要通过运行前三个子命令之一来登录服务器。
  2. 对于下一次调用,您应该使用 join 子命令加入一个房间。如果您想加入一个私人房间,请确保首先被邀请。方便起见,有一个 list-invited 子命令。
  3. 做任何事;加入/离开房间,发送消息。我不是你的妈妈。

如果你不熟悉矩阵,请注意,用户可能有多个设备。矩阵的端到端加密是通过向每个用户的设备发送加密密钥来工作的,这意味着通常用户会尽量减少设备的数量。这就是为什么登录与加入/离开/发送分开,以及为什么有一个状态目录:每次登录都会创建一个会话,即一个设备。

已知问题 1

有时在运行时,fafbot可能会遇到解密问题。这看起来是矩阵SDK的问题,但看起来是无害的

Failed to decrypt a non-pre-key message with all available sessions sender=@user:example.org sender_key=f0O69NqwrEVNjdnqlwhQPdn4xVqF05YGr8wR1Jhi+mTNr0UFAaOiQtu1Q
An Olm message got replayed, decryption failed sender="@user:example.org" sender_key=vf0O69NqwrEVNjdnqlwhQPdn4xVqF05YGr8wR1Jhi+mTNr0UFAaOiQtu1Q

还有

Failed to deserialize a global account data event error=Error("unknown variant `org.matrix.msc3931.room_version_supports`, expected one of `event_match`, `contains_display_name`, `room_member_count`, `sender_notification_permission`", line: 1, column: 1018)
Failed to deserialize a global account data event error=Error("unknown variant `org.matrix.msc3931.room_version_supports`, expected one of `event_match`, `contains_display_name`, `room_member_count`, `sender_notification_permission`", line: 1, column: 1018)

已知问题 2

如果在使用 login-restore-session 子命令时,设备上没有注册任何密钥。如果有,您将看到这样的错误,并需要设置一个新会话

Error when sending out an outgoing E2EE request error=Http(Api(Server(Known(ClientApi(Error { kind: Unknown, message: "One time key signed_curve25519:AAAAAAAAAA0 already exists. Old key: {\"key\":\"mme2Wf6Bj4wfx50ZHIr6LbR7eVGByKQFwHtmgOYjpoOqAQa1gM1SLKD2hg\",\"signatures\":{\"@user:example.org\":{\"ed25519:\":\"a072/U1At3i1JXi7XzOaCsRTR8hhjcgLwMS4Q5pOFCkRBA9KX2J8RWcX+/m5adqcybUzHrgtQ3TCaz9N1rmAEP2eNfsVA1Ug/IcImub7MT1xQ4kzr2Y\"}}}; new key: {'key': 'd44FTHHoKWazpSZhHKUpPFoakL0p3RhUrxoyFmEphmoBxfO+cA2KOkh4AQ', 'signatures': {'@user:example.org': {'ed25519:BIEPEEXIEN': '9cynKfWRywWX3y1+dp3XzrS7HMa2v9DKButSZYv/F4gLCI3pnSLH+NRuMpEMiIsMcrW6xsg6cImK9nbZ/f/lYlbWfTUUIMRsx5inyTWl9qvnpepegNM'}}}", status_code: 400 })))))

依赖项

~26–45MB
~731K SLoC