paul-nameless / Tg

Licence: unlicense
terminal telegram client that really works

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Tg

Meli
🐝 experimental terminal mail client, mirror of https://git.meli.delivery/meli/meli.git https://crates.io/crates/meli
Stars: ✭ 242 (-13.88%)
Mutual labels:  terminal, tui, client
Cordless
The Discord terminal client you never knew you wanted.
Stars: ✭ 1,391 (+395.02%)
Mutual labels:  terminal, tui, client
Jexer
Java Text User Interface
Stars: ✭ 174 (-38.08%)
Mutual labels:  terminal, tui
Goaccess
GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.
Stars: ✭ 14,096 (+4916.37%)
Mutual labels:  terminal, tui
Ox
An independent Rust text editor that runs in your terminal!
Stars: ✭ 2,634 (+837.37%)
Mutual labels:  terminal, tui
Wtf
The personal information dashboard for your terminal
Stars: ✭ 12,973 (+4516.73%)
Mutual labels:  terminal, tui
Slash
Slack terminal client.
Stars: ✭ 164 (-41.64%)
Mutual labels:  terminal, client
Qrc
QR code generator for text terminals (ASCII art, Sixel)
Stars: ✭ 200 (-28.83%)
Mutual labels:  terminal, tui
Smenu
smenu started as a lightweight and flexible terminal menu generator, but quickly evolved into a powerful and versatile CLI selection tool for interactive or scripting use.
Stars: ✭ 1,906 (+578.29%)
Mutual labels:  terminal, tui
Jquery.terminal
jQuery Terminal Emulator - JavaScript library for creating web-based terminals with custom commands
Stars: ✭ 2,623 (+833.45%)
Mutual labels:  terminal, tui
S Tui
Terminal-based CPU stress and monitoring utility
Stars: ✭ 2,825 (+905.34%)
Mutual labels:  terminal, tui
Hascard
flashcard TUI with markdown cards
Stars: ✭ 171 (-39.15%)
Mutual labels:  terminal, tui
Tuicss
Text-based user interface CSS library
Stars: ✭ 167 (-40.57%)
Mutual labels:  terminal, tui
Mandown
man-page inspired Markdown viewer
Stars: ✭ 173 (-38.43%)
Mutual labels:  terminal, tui
Tui Go
A UI library for terminal applications.
Stars: ✭ 2,015 (+617.08%)
Mutual labels:  terminal, tui
Cursive
A Text User Interface library for the Rust programming language
Stars: ✭ 2,613 (+829.89%)
Mutual labels:  terminal, tui
Httpie
As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie
Stars: ✭ 53,052 (+18779.72%)
Mutual labels:  terminal, client
Kubebox
⎈❏ Terminal and Web console for Kubernetes
Stars: ✭ 1,855 (+560.14%)
Mutual labels:  terminal, tui
Bottom
Yet another cross-platform graphical process/system monitor.
Stars: ✭ 3,182 (+1032.38%)
Mutual labels:  terminal, tui
Bb
simple process viewer in rust https://crates.io/crates/bb
Stars: ✭ 212 (-24.56%)
Mutual labels:  terminal, tui

tg

Join telegram chat

Telegram terminal client.

tg screenshot

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
  • [X] list contacts
  • [X] show user status
  • [X] secret chats
  • [ ] search
  • [ ] bots (bot keyboard)

Requirements

To use tg, you'll need to have the following installed:

Optional dependencies

  • terminal-notifier - for Mac (used by default). You can change it to dunst for Linux or any other notifications program (see NOTIFY_CMD in configuration)
  • ffmpeg - to record voice msgs and upload videos.
  • tdlib - in case of incompatibility with built in package. For example, macOS:
    brew install tdlib
    
    and then set in config TDLIB_PATH
  • urlview to choose urls when there is multiple in message, use URL_VIEW in config file to use another app (it should accept urls in stdin)
  • to open stickers and animated ones (thumbnail preview) you need to set in mailcap appropriate handler and have app which will open webp file:
    image/webp; mpv %s
    
  • ranger, nnn - can be used to choose file when sending, customizable with FILE_PICKER_CMD
  • fzf - to create groups and secret chats (used for single and multiple user selection)

Installation

From PyPI

This option is recommended for production:

pip3 install tg
tg

From sources

This option is recommended for development:

git clone https://github.com/paul-nameless/tg.git
cd tg
pip install python-telegram
pip install .
tg

Using Docker

Please note that voice recordings and notifications won't work when using Docker.

docker run -it --rm tg

From the AUR

If you're using Arch Linux, you can install tg through its AUR package:

If you're using the yay AUR helper, you can install the package with:

yay -S telegram-tg

If you want to use the latest developement version via the AUR you can find it here

Configuration

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

Simple config:

# should start with + (plus) and contain country code
PHONE = "[phone number in international format]"

Advanced configuration:

All configurable variables can be found here

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")
# encrypt you local tdlib database with the key
ENC_KEY = get_pass("i/telegram-enc-key")

# log level for debugging, info by default
LOG_LEVEL = "DEBUG"
# path where logs will be stored (all.log and error.log)
LOG_PATH = os.path.expanduser("~/.local/share/tg/")

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

# you can use any other notification cmd, it is simple python string 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 use your own voice recording cmd but it's better to use default one.
# The voice note must be encoded with the Opus codec, and stored inside an OGG
# container. Voice notes can have only a single audio channel.
VOICE_RECORD_CMD = "ffmpeg -f avfoundation -i ':0' -c:a libopus -b:a 32k {file_path}"

# You can customize chat and msg flags however you want.
# By default words will be used for readability, but you can make
# it as simple as one letter flags like in mutt or add emojies
CHAT_FLAGS = {
    "online": "●",
    "pinned": "P",
    "muted": "M",
    # chat is marked as unread
    "unread": "U",
    # last msg haven't been seen by recipient
    "unseen": "✓",
    "secret": "🔒",
    "seen": "✓✓",  # leave empty if you don't want to see it
}
MSG_FLAGS = {
    "selected": "*",
    "forwarded": "F",
    "new": "N",
    "unseen": "U",
    "edited": "E",
    "pending": "...",
    "failed": "💩",
    "seen": "✓✓",  # leave empty if you don't want to see it
}

# use this app to open url when there are multiple
URL_VIEW = 'urlview'

# Specifies range of colors to use for drawing users with
# different colors
# this one uses base 16 colors which should look good by default
USERS_COLORS = tuple(range(2, 16))

# to use 256 colors, set range appropriately
# though 233 looks better, because last colors are black and gray
# USERS_COLORS = tuple(range(233))

# to make one color for all users
# USERS_COLORS = (4,)

# cleanup cache
# Values: N days, None (never)
KEEP_MEDIA = 7

FILE_PICKER_CMD = "ranger --choosefile={file_path}"
# FILE_PICKER_CMD = "nnn -p {file_path}"

MAILCAP_FILE = os.path.expanduser("~/.config/mailcap")

DOWNLOAD_DIR = os.path.expanduser("~/Downloads/")  # copy file to this dir

Mailcap file

Mailcap file is used for deciding how to open telegram files (docs, pics, voice notes, etc.). Path to the file can be overriden with MAILCAP_FILE in config file.

Example: ~/.mailcap

# media
video/*; mpv "%s"
audio/ogg; mpv --speed 1.33 "%s"
audio/mpeg; mpv --no-video "%s"
image/*; qView "%s"

# text
text/html; w3m "%s"
text/html; open -a Firefox "%s"
text/plain; less "%s"

# fallback to vim
text/*; vim "%s"

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
  • g: go to top chat
  • l: open msgs of the chat
  • m: mute/unmute current chat
  • p: pin/unpin current chat
  • u: mark read/unread
  • r: read current chat
  • c: show list of contacts
  • dd: delete chat or remove history
  • ng: create new group chat
  • ns: create new secret chat
  • /: search in chats
  • ?: show help

Msgs:

  • j,k: move up/down
  • J,K: move 10 msgs up/down
  • G: move to the last msg (at the bottom)
  • D: download file
  • l: if video, pics or audio then open app specified in mailcap file, for example:
    # Images
    image/png; qView "%s"
    audio/*; mpv "%s"
    
    if text, open in less (to view multiline msgs)
  • e: edit current msg
  • <space>: select msg and jump one msg down (use for deletion or forwarding)
  • <ctrl+space>: same as space but jumps one msg up
  • y: yank (copy) selected msgs with to internal buffer (for forwarding) and copy current msg text or path to file to clipboard
  • 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
  • o: open url present in message (if multiple urls, urlview will be opened)
  • ]: next chat
  • [: prev chat
  • u: show user info (username, bio, phone, etc.)
  • c: show chat info (e.g. secret chat encryption key, chat id, state, etc.)
  • ?: show help
  • !: open msg with custom cmd

Publish

# increase version in tg/__init__.py
git commit -m 'Release 0.7.0'
git tag v0.7.0
flit publish
git log --pretty=format:"%cn: %s" v0.6.0...v0.7.0  | grep -v -e "Merge pull request" | grep -v "Release"
git push origin master --tags
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].