Skip to main content

Sync your IM group chat to Slack.

Project description

Chatroom-Syncer

pdm-managed License PyPI GitHub stars Code size Actions Status Code style: black

Chatroom-Syncer is a project to sync IM Chat Room to the public domain like IRC in the old days, so that the information, context and history of communication could be discoverred, learnt from and referenced by others, anyware, anytime.

https://user-images.githubusercontent.com/1651790/207810877-b86943fa-24b3-479c-ac25-d602a6c5d53c.mp4

Supported Sinks

  • Slack
  • GitHub
  • IRC
  • Telegram
  • Discord

Components and Flow

Component Docker Images
wechaty-gateway Docker Image docker:wechaty-gateway
chatroom-syncer Docker Image docker:chatroom-syncer

There are two processes in the system:

  • Chatroom Syncer, current code base in Python as the WeChaty Client and the bot
  • WeChaty Gateway, which leverages the Wechaty with UOS Wechat Client(also named as a puppet) to be called by the Chatroom Syncer due to WebChaty is not a native Python library, and the Wechaty Gateway is a gRPC server to manipulate and watch WeChat the puppet.

Thus, we need to start the WeChaty Gateway before the Chatroom Syncer.

┌────────────────────────────┐          ┌────────┐
│                            │          │        │
│ Chatroom Syncer            │          │        │
│                            │          │ GitHub │
│ WebChaty.onMessage()       ├──────────▶ Slack  │
│                            │          │        │
└──────────────▲─────────────┘          │        │
               │                        └────────┘
             gRPC
               │
┌──────────────▼──────────────┐
│                             │
│  Wechaty Gateway            │
│                             │
│┌────────────────────────┐   │
││ Wechaty UOS puppet     │   │
│└────────────────────────┘   │
└─────────────────────────────┘

Run

Before running, we need follow prerequisites:

  • Configure WeChat Group Names and Slack Channel Names in config.yaml, they should exist in both WeChat and Slack.
  • Configure Slack API Token in .env.

Run with Docker

Run it in background:

cp config-example.yaml config.yaml
cp env-example .env
docker-compose up -d

Check both containers are Up:

docker-compose ps

In case there are any Exit 0 containers, give another try of starting up:

docker-compose up -d

Scan the QR code with your WeChat App, and you are ready to go!

docker logs chatroom-syncer_chatroom-syncer_1 2>/dev/null | grep -v Wechaty

Stop it:

docker-compose down

Run from host

Run Webchaty gateway first:

export token="iwonttellyou"
docker run -d \
    --name=wechaty-gateway \
    --net=bridge \
    -p 9009:9009 \
    -e WECHATY_PUPPET_SERVICE_TOKEN="$token" \
    -v /wechaty_data:/wechaty/data \
    --restart=unless-stopped weygu/wechaty-gateway:latest

Run Chatroom-Syncer:

# install it
python3 -m pip install chatroom-syncer
# create config.yaml and change it
cp config-example.yaml config.yaml

# put tokens for sink according to your config.yaml
# i.e. if both slack and github discussion sinks were enabled
# we need token to send message to slack and github discussion
# as follow:
export SLACK_BOT_TOKEN="xoxb-1234567890-1234567890-1234567890-1234567890"
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxx

# run it
python3 -m chatroom_syncer

Configuration

WeChat

Copy the config-example.yaml to config.yaml

cp config-example.yaml config.yaml

And fill in the following fields in the table:

Field Description
enable_slack Switch of slack sink
group_channel_mapping Mapping WeChat group name to Slack channel name
enable_avatar Switch to generate emoji-based avatar for Slack sink
enable_github_discussion Switch of Github Discussion sink
group_github_discussion_mapping Mapping WeChat group name to discussion:owner/repo/category

Contribute

Build from host

git clone https://github.com/wey-gu/chatroom-syncer && cd chatroom-syncer
# install pdm
curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -
# install chatroom-syncer
pdm install

If dependencies are updated, run pdm sync to update the lock manifest.

pdm sync

Build from docker

docker-compose -f docker-compose.dev.yaml build
docker-compose -f docker-compose.dev.yaml up -d

# get QR code to scan
docker logs chatroom-syncer_chatroom-syncer_1 2>/dev/null | grep -v Wechaty

# watch logs of the chatroom syncer
docker logs chatroom-syncer_chatroom-syncer_1 --follow

# stop the chatroom syncer and remove the container
docker-compose -f docker-compose.dev.yaml down

linting

# install pre-commit
pip install pre-commit

# run pre-commit
pre-commit run --all-files

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chatroom-syncer-0.1.9.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

chatroom_syncer-0.1.9-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file chatroom-syncer-0.1.9.tar.gz.

File metadata

  • Download URL: chatroom-syncer-0.1.9.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.3.3 CPython/3.10.6

File hashes

Hashes for chatroom-syncer-0.1.9.tar.gz
Algorithm Hash digest
SHA256 1d50bb95683ac3fe9e93f13a8e1fc82e1d6b8a8ce6d27a1b93a768dcbbf1fa54
MD5 f38ebdbb32dece353a49cf9db1485ceb
BLAKE2b-256 5da0586c5ffb8db37cb08c2cf7044ea367847c812ce7507a763c09fe744dad72

See more details on using hashes here.

File details

Details for the file chatroom_syncer-0.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for chatroom_syncer-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 8c030c6da5afcb6f57f78ce07dc34fe177cc49af1b23f4ce0108a81ad551b280
MD5 fdda805304bf0d9759ea77e118875569
BLAKE2b-256 ca7a7569ef0d94f47dc43c2ff0c77e47145cef6dd97ef70b3c8140684760b42a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page