Git Product home page Git Product logo

fishroom's Introduction

fishroom

GPL license Proudly Powered by Python3

Message forwarding for multiple IM protocols

Motivation

TUNA needs a chatroom, while each IM protocol/software has its own implementation for chatroom.

Unlike email and mailing list, instant messaging is fragmented: everyone prefers different softwares. As a result, people of TUNA are divided by the IM they use, be it IRC, wechat, telegram, or XMPP.

To reunify TUNA, we created this project to relay messages between IM clients, so that people can enjoy a big party again.

Supported IMs

  • IRC
  • XMPP
  • Matrix
  • Telegram
  • Gitter
  • Actor (not yet)
  • Tox (not yet)
  • Wechat (maybe)

Basic Architecture

Fishroom consists of a fishroom core process, which routes messages among IMs and process commands, and several IM handler processes to deal with different IMs. These components are connected via Redis pub/sub.

+----------+
| IRC      |<-+
+----------+  |
+----------+  |
| XMPP     |<-+
+----------+  |
+----------+  |    +-------+       +---------------+
| Telegram |<-+--> | Redis | <---> | Fishroom Core |
+----------+  |    +-------+       +---------------+
+----------+  |
| Gitter   |<-+
+----------+  |
+----------+  |
| Web      |<-+
+----------+

How to Use

Clone me first

git clone https://github.com/tuna/fishroom
cd fishroom

Docker Rocks!

Get a redis docker and run it:

docker pull redis:alpine
docker run --name redis -v /var/lib/redis:/data -d redis:alpine

Modify the config file, and remember the redis hostname you specified in config.py. I suggest that just use redis as the hostname.

mv fishroom/config.py.example fishroom/config.py
vim fishroom/config.py

Modify Dockerfile, you may want to change the sources.list content. Build the docker for fishroom:

docker build --tag fishroom:dev .

Since the code of fishroom often changes, we mount the code as a volume, and link redis to it.

You can test it using

# this is fishroom core
docker run -it --rm --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.fishroom

# these are fishroom IM interfaces, not all of them are needed
docker run -it --rm --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.telegram
docker run -it --rm --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.IRC
docker run -it --rm --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.gitter
docker run -it --rm --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.xmpp

You may need tmux or simply multiple terminals to run the aforementioned foreground commands.

If everything works, we run it as daemon.

docker run -d --name fishroom --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.fishroom
docker run -d --name fishroom --link redis:redis -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.telegram

To view the logs, use

docker logs fishroom

Next we run the web interface, if you have configured the chat_logger part in config.py.

docker run -d --name fishroom-web --link redis:redis -p 127.0.0.1:8000:8000 -v /path/to/fishroom/fishroom:/data/fishroom fishroom:dev python3 -u -m fishroom.web

Open your browser, and visit http://127.0.0.1:8000/, you should be able to view the web UI of fishoom.

Docker Sucks!

Install and run redis first, assuming you use ubuntu or debian.

apt-get install redis

Modify the config file, the redis server should be on addr 127.0.0.1 and port 6379.

mv fishroom/config.py.example fishroom/config.py
vim fishroom/config.py

Ensure your python version is at least 3.5, next, we install the dependencies for fishroom.

apt-get install -y python3-dev python3-pip libmagic1 libjpeg-dev libpng-dev libwebp-dev zlib1g-dev gcc
pip3 install --upgrade pip setuptools
pip3 install -r requirements.txt

Run fishroom and fishroom web.

# run fishroom core
python3 -m fishroom.fishroom

# start IM interfaces, select not all of them are needed
python3 -m fishroom.telegram
python3 -m fishroom.IRC
python3 -m fishroom.gitter
python3 -m fishroom.xmpp

python3 -m fishroom.web

Open your browser, and visit http://127.0.0.1:8000/, you should be able to view the web UI of fishoom.

Good Luck!

Related Projects

LICENSE

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

fishroom's People

Contributors

bigeagle avatar mytbk avatar hexchain avatar zhsj avatar simonsmh avatar mys721tx avatar felixonmars avatar huiyiqun avatar hosiet avatar xiaq avatar gumblex avatar maskray avatar dotkrnl avatar wengxt avatar condy0919 avatar

Watchers

Dang Fan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.