UnifiedMessageRelay is a framework for the purpose of bringing messages from different chat platform together. With UnifiedMessageRelay, user no longer need to view messages on different platform, or different groups. UnifiedMessageRelay brings powerful message forwarding functionality and flexible plugin API to meet your custom need. A driver API specification is also provided, so one can compose their own backend driver, and the framework will load and utilize the driver automatically.
Support group (Need help? Join this group)
Telegram <-> QQ:
Telegram <-> Discord:
All four platforms: QQ, Telegram, Line and Discord can forward between each other directly.
- QQ API based on CoolQ HTTP API aiocqhttp
- Telegram API based on aiogram
- Line API based on linebotx linebot
- Discord API based on Discord.py
- Forward text and image between all supported platforms
- Image is converted to supported format automatically
- Reply is preserved with best effort
- Markdown format is preserved for supported platforms
- Command API for customize triggers
- Message Hook API for even more customized needs
Limited support for Coolq Air. image sending is available for Coolq Pro.
Make sure Python 3.7+ and pip
are installed. Run:
pip3 install -r requirements.txt
apt install libcairo2 ffmpeg libmagickwand-dev
Create ~/.umr/
mkdir ~/.umr
Copy config.yaml to ~/.umr
ForwardList:
Accounts:
QQ: 12213312 # your QQ bot account number
Telegram: 12321312 # your telegram bot chat id
Topology: # keep this key even if no topology exists
# Topology contains all the point to point forward:
# E.g. From one QQ group to one telegram group, type = OneWay+
- From: QQ
FromChat: 1123131231
FromChatType: group # group, discuss, private
To: Telegram
ToChat: -31231212344 # telegram chat id, use !!id to show
ToChatType: group
ForwardType: OneWay+
# OneWay:
# Forward from "FromChat" to "ToChat"
# BiDirection:
# Forward from "FromChat" to "ToChat" and vise versa
# OneWay+:
# Forward from "FromChat" to "ToChat", and vise versa, ignoring backward message without "reply_to"
Default: # keep this key even if no default route exists
# Default contains all the platform to point forward:
# E.g. Any message originated from QQ to one telegram group, type = OneWay+
- From: QQ
To: Telegram
ToChat: 123244234234
ToChatType: group
ForwardType: OneWay+
# OneWay:
# Forward from "FromChat" to "ToChat"
# OneWay+:
# Forward from "FromChat" to "ToChat", and vise versa, ignoring backward message without "reply_to"
Driver:
[See each platform guide below for this section]
DataRoot: /root/coolq/data/image # Make sure this directory exists. If you are using QQ, make sure this is pointing to coolq image directory.
CommandPrefix: "!!" # default value is "!!"
BotAdmin:
QQ:
- 123456789 # qq number
- 987654321
Telegram:
- 213442352354534534 # telegram chat id
- 345235345345345345
Debug: yes # verbose output
The "QQ", "Telegram" or "Line" above are all custom names. Real bot driver should be configure throgh "Driver" list.
python3 daemon.py -h
- Start background service
python3 daemon.py start
or
python3 daemon.py restart
By default, log will be stored in /var/log/umr/bot.log
, and cache will be cleared out upon start.
- Stop the background service
python3 daemon.py stop
If you need to see the log output for debugging purpose, stop the running daemon first. Then follow this command.
Remember to enable debug option in config.
python3 daemon.py run
Hit Ctrl + C to stop.
Send !!help
to show available commands.
Send !!id
anywhere to see chat id.
Reply message with !!id
to reveal source chat id.
Reply to the message you want to delete with !!del
Message containing these keyword will not be forwarded to any other chat
Send !!bk
and keywords separated by space
Message originated from these channel will not be forwarded to any other chat
Reply forwarded channel message with !!bc
- Check if you are using Python 3.7+
- Check if requirements.txt is installed correctly
- Check if binary dependencies are installed (search apt in this page)
- (If using Coolq) Check if cq-http-api is enabled in Coolq
- Check if the log suggests any missing configuration
- Check if you are on Dev branch, please switch back to master
- Descriptions about the issue
- Logs of python3 daemon.py run (Desensitization)
- Steps to reproduce