telegabber/README.md

177 lines
5 KiB
Markdown
Raw Normal View History

2019-12-22 02:21:40 +00:00
## Telegabber: like Zhabogram, but in Go! ##
Now it's native, more asynchronous, and does not require to mess your server up with a monstrous third-party interpreter.
The configuration file is compatible with Zhabogram 2.0, so you can easily copy your existing `config.yml`.
### Build ###
Prerequisites: Go links the binary against the `glibc` version present in the system where the build process happens, so it should be less or equal to the version of `glibc` in the system where Telegabber will run.
2021-12-04 18:10:54 +00:00
* Build TDLib according to [TDLib build instructions](https://tdlib.github.io/td/build.html). Roll back to commit 8d7bda00a535d1eda684c3c8802e85d69c89a14a if the compatibility got broken.
2019-12-23 01:57:07 +00:00
2019-12-22 02:21:40 +00:00
* Install Go (tested with 1.13, but may work with earlier versions too).
* Open the source dir in a new shell (to make sure that `$GOPATH` works) and run `make`. Dependencies will be installed automatically.
After a successful build, you get a single binary to deploy on your server.
2019-12-22 22:31:49 +00:00
In the deploy directory, you need only three files:
* `telegabber` (the binary)
* `config.yml`
* `config_schema.json` (copy it from the repo)
2019-12-22 02:21:40 +00:00
### Installation ###
2022-02-12 00:14:44 +00:00
A third-party Docker config was prepared to set up telegabber+Prosody: https://github.com/e1z0/telegabber-docker/
**Hard way:**
2019-12-22 02:21:40 +00:00
First of all, you need to create component listener on your Jabber server.
For example, for ejabberd in **/etc/ejabberd/ejabberd.yml**:
```
listen:
-
port: 8888
module: ejabberd_service
access: all
shaper_rule: fast
ip: "127.0.0.1"
service_check_from: false
hosts:
"tlgrm.localhost":
password: "secret"
```
Next, rename **config.yml.example** to **config.yml** and edit **xmpp** section to match your component listener:
```
:xmpp:
db 'users.db'
jid: 'tlgrm.localhost'
host: 'localhost'
port: 8888
secret: 'secret'
loglevel: :warn
```
### Configuration ###
It is good idea to obtain Telegram API ID from [**https://my.telegram.org**](https://my.telegram.org) to remove demo key requests limit, and then edit in **config.yml**:
```
:telegram:
:tdlib:
:client:
:api_id: '845316' # telegram API ID (my.telegram.org) #
:api_hash: '27fe5224bc822bf3a45e015b4f9dfdb7' # telegram API HASH (my.telegram.org) #
...
```
2020-01-13 15:31:28 +00:00
### Arguments ###
2022-01-27 06:57:46 +00:00
* `--profiling-port=xxxx`: start the pprof server on port `xxxx`. Access is limited to localhost.
* `--config=/bla/bla/config.yml`: set the config file path (default: `config.yml`).
* `--schema=/bla/bla/schema.json`: set the schema file path (default: `./config_schema.json`).
2023-06-03 04:20:03 +00:00
* `--ids=/bla/bla/ids`: set the folder for ids database (default: `ids`).
2020-01-13 15:31:28 +00:00
2019-12-22 02:21:40 +00:00
### How to receive files from Telegram ###
First of all, you need to set up web server that will serve some directory in your filesystem.
Example nginx config:
```
server {
listen 80;
server_name tlgrm.localhost;
location /content {
alias /var/zhabogram;
}
}
```
You need to set `:content: → :path: and :link:` **config.yml**.
Set `:path:` according to location (for our example it will be `/var/zhabogram/content`).
Set `:link:` according to server_name (for our example it will be `http://tlgrm.localhost`)
### How to send files to Telegram chats ###
You need to setup `mod_http_upload` for your XMPP server.
For example, for ejabberd in **/etc/ejabberd/ejabberd.yml**
```
modules:
mod_http_upload:
docroot: "/var/ejabberd/upload" # this must be a valid path, user ownership and SELinux flags must be set accordingly
put_url: "https://xmpp.localhost:5443/upload/@HOST@"
get_url: "https://xmppfiles.localhost/upload/@HOST@"
access: local
max_size: 500000000 #500 MByte
thumbnail: false
file_mode: "0644"
dir_mode: "0744"
```
Then you need to setup nginx proxy that will serve `get_url` path, because Telegram will not handle URLs with non-default http(s) ports.
Example nginx config:
2020-01-10 15:44:26 +00:00
```
2019-12-22 02:21:40 +00:00
server {
listen 80;
listen 443 ssl;
server_name xmppfiles.localhost;
# SSL settigns #
keepalive_timeout 60;
ssl_certificate /etc/ssl/domain.crt;
ssl_certificate_key /etc/ssl/domain.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "RC4:HIGH:!aNULL:!MD5:!kEDH";
add_header Strict-Transport-Security 'max-age=604800';
location / {
proxy_pass https://xmpp.localhost:5443;
}
}
```
Finally, update `:upload:` in your config.yml to match `server_name` in nginx config.
2023-03-18 21:43:11 +00:00
### Carbons ###
Telegabber needs special privileges according to XEP-0356 to simulate message carbons from the users (to display messages they have sent earlier or via other clients). Example configuration for Prosody:
```
modules_enabled = {
[...]
"privilege";
}
[...]
Component "telegabber.yourdomain.tld"
component_secret = "yourpassword"
modules_enabled = {"privilege"}
[...]
VirtualHost "yourdomain.tld"
[...]
privileged_entities = {
[...]
["telegabber.yourdomain.tld"] = {
message = "outgoing";
},
}
```