No description
Find a file
2020-05-29 17:26:11 +08:00
.github/workflows add some mypy flags 2020-05-20 09:19:51 +03:00
tg Merge branch 'master' into copy-msg 2020-05-29 17:16:45 +08:00
.gitignore correctly handle situation when there are chats with all deleted msgs 2020-05-03 21:44:54 +03:00
pyproject.toml Format with black 2020-05-04 15:01:24 +08:00
README.md Add to README new reply feature 2020-05-29 17:25:10 +08:00
UNLICENSE Reorganize structure of the project 2019-02-20 19:15:43 +01:00

tg

Terminal telegram client.

(!) usable but still in development

Features

  • view mediafiles: photo, video, voice/video notes, documents
  • ability to send pictures, documents, audio, video
  • reply, edit, forward, delete, send messages
  • stickers
  • notifications
  • record and send voice msgs
  • auto download files
  • toggle chats: pin/unpin, mark as read/unread, mute/unmute
  • Message history

TODO:

  • secret chats
  • list contacts
  • search
  • show users and their status in current chat
  • create new chat
  • bots (bot keyboard)

Requirements

  • tdlib For macOS:
    brew install tdlib
    
  • python3.8
  • pip3 install python-telegram
  • config file at ~/.config/tg/conf.py
    phone = "[your phone number]"
    enc_key = "[telegram db encryption key]"
    
  • terminal-notifier or other program for notifications
  • ffmpeg - to record voice msgs

Usage

Clone repository and run it:

git clone git@github.com:paul-nameless/tg.git
cd tg
PYTHONPATH=. python3 tg/main.py

Configuration

Config file should be stored at ~/.config/tg/conf.py. This is simple python file.

Simple config:

PHONE = "[your phone number]"
ENC_KEY = "[telegram db encryption key]"

Advanced configuration:

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()


PHONE = get_pass("i/telegram-phone")
ENC_KEY = get_pass("i/telegram-enc-key")

# log level for debugging
LOG_LEVEL = "DEBUG"

# If you have problems with tdlib shipped with the client, you can install and
# use your own
TDLIB_PATH = "/usr/local/Cellar/tdlib/1.6.0/lib/libtdjson.dylib"

# 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
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\''

# you can customize to use your own voice recording cmd
VOICE_RECORD_CMD = "ffmpeg -f avfoundation -i ':0' -ar 22050 -b:a 32k '{file_path}'"

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 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
  • r,R: reply to a current msg
  • 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