Repo Meta

Why

过去用 logseq 一直搭配用一款插件 — logseq-inbox-telegram-plugin,用于摘取 TG 上转发的内容。说不上好用 1,后来我自己 Fork 了 一份,对主要特性修改了一些,即使仍然缺乏对超链接的支持,但也顺手了很多。

可是问题仍然存在,为了在小主机上运行这个服务,必须后台同时跑一个 Logseq,要知道,Electron 可不是什么好东西。加上小主机默认没有屏幕,在启动这类 GUI 软件的时候,必须添加 DISPLAY 环境变量,如下:

Environment=DISPLAY=:0

总免得有些画蛇添足,说不上优雅。所以这个项目应运而生,我需要长时间地利用 TG bot 监听我的频道,对频道的信息进行归档。

Quick start

# install dependencies
go mod tidy
 
# build the result
go build -o tg main.go
 
# give the right to run. 
chmod +x ./tg
 
# run bot
./tg sync -t TG_BOT_TOKEN

Optional: run in background using nohup

nohup ./tg sync -t 5883330296:AAFCI0jtgH1iHU1zDaL2p3Hj5Z6fkqaRWaU > bot.log 2>&1 &
 
# kill background
pkill -f tg

Optional: run in background using nohup

sudo vim /lib/systemd/system/[email protected]

Add following config:

[Unit]
Description=tg message sync bot for %i.
After=network.target
 
[Service]
Type=simple
User=%i
Restart=on-abort
Environment=http_proxy=192.168.31.20:10800
Environment=https_proxy=192.168.31.20:10800
ExecStart=/home/bgzo/workspaces/telegram-message-sync/tg sync -t 58833029:AAFCI0jiHU1zDaL2p3HaRWaU -o /home/bgzo/workspaces/telegram-message-sync/archives
 
[Install]
# WantedBy=multi-user.target
WantedBy=graphical-session.target

Then restart systemd and enable -

systemctl daemon-reload
systenctl start tg@bgzo
systenctl enable tg@bgzo

Features

  • 状态检测
  • 后台运行
  • 日志支持
  • 按频道来源进行归档
  • 超文本格式支持
    • EMOJI 特殊处理
  • 存档反馈
  • Dockerfile
  • 更多消息格式支持(下划线/加粗文本)
  • 持久化内容
    • 支持时间排序/倒叙
    • 输出 MD YAML header
    • 支持自定义模板

Notes

设计的项目

Footnotes

  1. 无法格式化文字超链接,无法读取图片的字幕,结合 logseq 的 API 的特性,插件一直无法对含 tg@username 的消息进行处理,并且无法转发频道的信息,必须是经过认证人的消息才会被存档。