MCPcopy Index your code
hub / github.com/clansty/Q2TG

github.com/clansty/Q2TG @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
513 symbols 1,188 edges 107 files 5 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Q2TG

QQ 群与 Telegram 群相互转发的 bot discord GitHub package.json dependency version (prod)

安装方法

  1. 首先将用于机器人的账号在 oicq 框架上登录一次,通过设备验证

  2. config.example.yaml 复制一份为 config.yaml ,并填入相关设置项

需要 MongoDB 数据库来存储消息 ID 之间的对应关系

(不要忘记 YAML 冒号后的空格((

以及 QQ 和 TG 的群号都不需要加引号

  1. 安装必要的依赖项 yarn install,以及 FFmpegtgs-to-gif(需要安装到 PATH 中)

  2. 在能同时连接 QQ 和 Telegram 的服务器上启动服务 yarn start

关于 TG 群的 ID

如果不知道群的 ID,可以先不配置转发匹配,运行 bot,在需要查询 ID 的 TG 群里发送 /id 指令即可获得 ID

PS. TG 群组可以分为 Group 和 SuperGroup。在比较旧的版本中群主可以手动转换,而新的版本中已经没有这个概念了(新版本中转换是无感的),但是为了兼容,在群组 ID 上面还是有所区分的。Group 可以单向转换成 SuperGroup,ID 会发生变化。SuperGroup 的 ID 一般以 -100 开头。在配置的时候最好将群组转换成 SuperGroup,这样的话以后 ID 就不会发生变化了,方法是开启「允许新成员查看历史消息」的开关。虽然这不是必要的但是可以避免以后的麻烦。

通过 Docker 部署(推荐)

首先需要安装有 dockerdocker-compose,并且能同时连接 QQ 和 TG 的机器

  1. 下载 docker-compose.yaml,填写相关参数。数据库部分无需改动

  2. 运行 docker-compose up -d

支持的消息类型

  • [x] 文字(双向)
  • [x] 图片(双向)
  • [x] GIF
  • [x] 闪照

    (目前会转换为普通图片) - [x] 图文混排消息(双向) - [x] 大表情(双向) - [x] TG 中的动态 Sticker

    目前是转换成 GIF 发送的,并且可能有些问题 - [x] 视频(双向) - [x] 语音(双向) - [ ] 小表情

(可显示为文字) - [x] 链接(双向) - [x] JSON/XML 卡片

(包括部分转化为小程序的链接) - [x] 群公告 - [x] 回复(双平台原生回复) - [x] 文件(单向 QQ -> TG,按需获取下载地址) - [x] 转发多条消息记录

(依赖 chatrecord-viewer 服务) - [x] TG 编辑消息(撤回再重发) - [x] 双向撤回消息

如何撤回消息

在 QQ 中,直接撤回相应的消息,撤回操作会同步到 TG

在 TG 中,由于机器人无法接收到撤回指令,可以选择以下操作之一:

  • 将消息内容编辑为 /rm
  • 回复要撤回的消息,内容为 /rm。如果操作者在 TG 群组中没有「删除消息」权限,则只能撤回自己的消息

为了使撤回功能正常工作,TG 机器人需要具有「删除消息」权限,QQ 机器人需要为管理员或群主

即使 QQ 机器人为管理员,也无法撤回其他管理员在 QQ 中发送的消息

搭建 UserBot 实现监听原生撤回事件

搭配 KunoiSayami/delete-message-notifier,可以将 Telegram 中原生的撤回事件发送给 Q2TG

  1. 更改配置文件 config.yaml

yaml api: enabled: true port: 8080 deleteNotifier: /deleteMessages

  1. 启动 delete-message-notifier,将上游地址设置为 http://localhost:8080/deleteMessages

使用图床存储头像数据

以前 TG 消息发送者头像会预载到 QQ 消息图片存储中,将 MD5 附在消息里传递给 QQ 群,但是不知道什么原因时间长了会下载不了(显示为灰色,即使重新上传)。

所以现在支持了哔哩图床、sm.ms 图床和腾讯云 COS 三种图床,可以同时开启,按照前文的顺序使用,一个失败的话尝试下一个。需要在配置文件中开启并设置相应 token。

额外功能

  • 在 TG 中可以使用 /forwardon/forwardoff 命令控制 TG 到 QQ 的单向开关
  • 使用 Icalingua 时可以无缝显示 TG 中的头像和名称

运行演示

gif

Extension points exported contracts — how you extend this code

GroupMember (Interface)
(no doc) [4 implementers]
main/src/client/QQClient/entity.ts
BilibiliMiniApp (Interface)
(no doc)
ui/src/views/ChatRecord/Viewer/types/BilibiliMiniApp.d.ts
Friend (Interface)
(no doc) [2 implementers]
main/src/client/QQClient/entity.ts
StructMessageCard (Interface)
(no doc)
ui/src/views/ChatRecord/Viewer/types/StructMessageCard.d.ts
Group (Interface)
(no doc) [2 implementers]
main/src/client/QQClient/entity.ts
GroupFs (Interface)
(no doc) [2 implementers]
main/src/client/QQClient/entity.ts
CreateOicqParams (Interface)
(no doc)
main/src/client/OicqClient.ts

Core symbols most depended-on inside this repo

reply
called by 51
main/src/client/QQClient/events.ts
find
called by 35
main/src/models/ForwardPairs.ts
sendMessage
called by 34
main/src/client/TelegramChat.ts
callApi
called by 32
main/src/client/NapCatClient/client.ts
getChat
called by 30
main/src/client/Telegram.ts
info
called by 26
main/src/services/InChatCommandsService.ts
create
called by 22
main/src/client/Telegram.ts
addNewMessageEventHandler
called by 18
main/src/client/Telegram.ts

Shape

Method 266
Function 135
Class 98
Interface 13
Enum 1

Languages

TypeScript100%

Modules by API surface

main/src/client/NapCatClient/entity.ts39 symbols
main/src/client/Telegram.ts31 symbols
main/src/client/QQClient/events.ts29 symbols
main/src/client/QQClient/index.ts27 symbols
main/src/client/NapCatClient/client.ts25 symbols
main/src/client/TelegramChat.ts24 symbols
main/src/models/Instance.ts22 symbols
main/src/client/QQClient/entity.ts20 symbols
main/src/client/OicqClient.ts20 symbols
main/src/client/NapCatClient/event.ts16 symbols
main/src/services/ConfigService.ts15 symbols
main/src/helpers/forwardHelper.ts15 symbols

Datastores touched

db_nameDatabase · 1 repos

For agents

$ claude mcp add Q2TG \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact