2020-05-02 12:46:40 +00:00
|
|
|
# tg
|
2019-02-20 18:15:43 +00:00
|
|
|
|
2020-05-23 04:42:07 +00:00
|
|
|
Terminal telegram client.
|
2020-05-02 12:46:40 +00:00
|
|
|
|
2020-05-23 04:42:07 +00:00
|
|
|
(!) usable but still in development
|
2020-05-02 12:46:40 +00:00
|
|
|
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
- [X] view mediafiles: photo, video, voice/video notes, documents
|
|
|
|
- [X] ability to send pictures, documents, audio, video
|
|
|
|
- [X] reply, edit, forward, delete, send messages
|
|
|
|
- [X] stickers
|
|
|
|
- [X] notifications
|
|
|
|
- [X] record and send voice msgs
|
|
|
|
- [X] auto download files
|
|
|
|
- [X] toggle chats: pin/unpin, mark as read/unread, mute/unmute
|
|
|
|
- [X] Message history
|
|
|
|
|
|
|
|
TODO:
|
|
|
|
|
|
|
|
- [ ] secret chats
|
|
|
|
- [ ] list contacts
|
|
|
|
- [ ] search
|
|
|
|
- [ ] show users and their status in current chat
|
|
|
|
- [ ] create new chat
|
|
|
|
- [ ] bots (bot keyboard)
|
2020-05-09 06:34:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
- [tdlib](https://tdlib.github.io/td/build.html?language=Python)
|
|
|
|
For macOS:
|
|
|
|
```sh
|
|
|
|
brew install tdlib
|
|
|
|
```
|
|
|
|
- `python3.8`
|
|
|
|
- `pip3 install python-telegram`
|
2020-05-23 04:42:07 +00:00
|
|
|
- config file at `~/.config/tg/conf.py`
|
|
|
|
```python
|
|
|
|
phone = "[your phone number]"
|
|
|
|
enc_key = "[telegram db encryption key]"
|
2020-05-09 06:34:02 +00:00
|
|
|
```
|
2020-05-23 04:42:07 +00:00
|
|
|
- terminal-notifier or other program for notifications
|
|
|
|
- ffmpeg - to record voice msgs
|
|
|
|
|
2020-05-02 12:46:40 +00:00
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
2020-05-23 04:42:07 +00:00
|
|
|
Clone repository and run it:
|
2020-05-02 12:46:40 +00:00
|
|
|
|
2020-05-09 06:34:02 +00:00
|
|
|
```sh
|
|
|
|
git clone git@github.com:paul-nameless/tg.git
|
|
|
|
cd tg
|
|
|
|
PYTHONPATH=. python3 tg/main.py
|
2020-05-02 12:46:40 +00:00
|
|
|
```
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
Config file should be stored at `~/.config/tg/conf.py`. This is simple python file.
|
|
|
|
|
|
|
|
### Simple config:
|
|
|
|
|
|
|
|
```python
|
2020-05-29 09:25:10 +00:00
|
|
|
PHONE = "[your phone number]"
|
|
|
|
ENC_KEY = "[telegram db encryption key]"
|
2020-05-23 04:42:07 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
### Advanced configuration:
|
|
|
|
|
|
|
|
```python
|
|
|
|
import os
|
|
|
|
|
|
|
|
# You can write anything you want here, file will be executed at start time
|
|
|
|
# You can keep you sensitive information in password managers or gpg
|
|
|
|
# encrypted files for example
|
|
|
|
def get_pass(key):
|
|
|
|
# retrieves key from password store
|
|
|
|
return os.popen("pass show {} | head -n 1".format(key)).read().strip()
|
|
|
|
|
|
|
|
|
2020-05-29 09:25:10 +00:00
|
|
|
PHONE = get_pass("i/telegram-phone")
|
|
|
|
ENC_KEY = get_pass("i/telegram-enc-key")
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
# log level for debugging
|
2020-05-29 09:25:10 +00:00
|
|
|
LOG_LEVEL = "DEBUG"
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
# If you have problems with tdlib shipped with the client, you can install and
|
|
|
|
# use your own
|
2020-05-29 09:25:10 +00:00
|
|
|
TDLIB_PATH = "/usr/local/Cellar/tdlib/1.6.0/lib/libtdjson.dylib"
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
# you can use any other notification cmd, it is simple python file which
|
|
|
|
# can format title, msg, subtitle and icon_path paramters
|
|
|
|
# In these exapmle, kitty terminal is used and when notification is pressed
|
|
|
|
# it will focus on the tab of running tg
|
2020-05-29 09:25:10 +00:00
|
|
|
NOTIFY_CMD = '/usr/local/bin/terminal-notifier -title "{title}" -subtitle "{subtitle}" -message "{msg}" -appIcon "{icon_path}" -sound default -execute \'/Applications/kitty.app/Contents/MacOS/kitty @ --to unix:/tmp/kitty focus-tab --no-response -m title:tg\''
|
2020-05-23 04:42:07 +00:00
|
|
|
|
|
|
|
# you can customize to use your own voice recording cmd
|
2020-05-29 09:25:10 +00:00
|
|
|
VOICE_RECORD_CMD = "ffmpeg -f avfoundation -i ':0' -ar 22050 -b:a 32k '{file_path}'"
|
2020-05-23 04:42:07 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Keybindings
|
|
|
|
|
|
|
|
vi like keybindings are used in the project. Can be used commands like `4j` - 4 lines down.
|
|
|
|
|
|
|
|
For navigation arrow keys also can be used.
|
|
|
|
|
|
|
|
### Chats:
|
|
|
|
|
|
|
|
- `j,k`: move up/down
|
|
|
|
- `J,K`: move 10 chats up/down
|
|
|
|
- `l`: open msgs of the chat
|
|
|
|
- `m`: mute/unmute current chat
|
|
|
|
- `p`: pin/unpin current chat
|
|
|
|
- `u`: mark read/unread
|
|
|
|
- `r`: read current chat
|
|
|
|
|
|
|
|
## Msgs:
|
|
|
|
|
|
|
|
- `j,k`: move up/down
|
|
|
|
- `J,K`: move 10 msgs up/down
|
|
|
|
- `G`: move to the last msg (at the bottom)
|
|
|
|
- `l`: if video, pics or audio then open app specified in mailcap file, for example:
|
|
|
|
```
|
|
|
|
# Images
|
|
|
|
image/png; icat %s && read
|
|
|
|
audio/*; mpv %s
|
|
|
|
```
|
|
|
|
if text, open in less (to view multiline msgs)
|
|
|
|
- `e`: edit current msg
|
|
|
|
- `<space>`: space can be used to select multiple msgs for deletion or forwarding
|
|
|
|
- `y`: yank (copy) selected msgs with <space> to internal buffer
|
|
|
|
- `p`: forward (paste) yanked (copied) msgs to current chat
|
|
|
|
- `dd`: delete msg for everybody (multiple messages will be deleted if selected)
|
|
|
|
- `i or a`: insert mode, type new message
|
|
|
|
- `I or A`: open vim to write long msg and send
|
|
|
|
- `v`: record and send voice message
|
2020-05-29 09:25:10 +00:00
|
|
|
- `r,R`: reply to a current msg
|
2020-05-23 04:42:07 +00:00
|
|
|
- `sv`: send video
|
|
|
|
- `sa`: send audio
|
|
|
|
- `sp`: send picture
|
|
|
|
- `sd`: send document
|
|
|
|
- `c`: copy current msg text or path to file if this is document, photo or video
|
|
|
|
- `]`: next chat
|
|
|
|
- `[`: prev chat
|