Top Related Projects
Telegram Desktop messaging app
Cross-platform library for building Telegram clients
Telegram for Android source
Telegram-iOS
Telegram web application, GPL v3
Quick Overview
vysheng/tg is a Telegram CLI (Command Line Interface) client written in C. It allows users to interact with Telegram's API directly from the command line, enabling scripting and automation of Telegram-related tasks.
Pros
- Lightweight and efficient, consuming minimal system resources
- Supports scripting and automation of Telegram actions
- Provides direct access to Telegram's API without a graphical interface
- Ideal for server-side applications and bots
Cons
- Requires technical knowledge to set up and use effectively
- Limited visual feedback compared to GUI clients
- May require frequent updates to keep up with Telegram's API changes
- Not suitable for users who prefer graphical interfaces
Getting Started
-
Clone the repository:
git clone --recursive https://github.com/vysheng/tg.git && cd tg
-
Install dependencies (for Debian-based systems):
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make
-
Configure and build:
./configure make
-
Run the Telegram CLI:
bin/telegram-cli -k tg-server.pub
-
Follow the prompts to enter your phone number and authentication code.
Note: The project hasn't been updated recently, so you may need to check for compatibility with the current Telegram API version.
Competitor Comparisons
Telegram Desktop messaging app
Pros of tdesktop
- Official Telegram desktop client with full feature support
- Cross-platform (Windows, macOS, Linux) with native look and feel
- Regular updates and active development
Cons of tdesktop
- Larger codebase and more complex architecture
- Higher system requirements due to GUI and additional features
Code Comparison
tdesktop (C++):
void MainWindow::showSettings() {
if (_settings) {
_settings->showSettings();
}
}
tg (C):
void do_show_settings (struct tgl_state *TLS) {
print_start ();
push_color (COLOR_YELLOW);
print_user_info (TLS, TLS->our_id);
pop_color ();
print_end ();
}
Key Differences
- tdesktop is a full-featured GUI application, while tg is a command-line interface
- tdesktop uses C++ and Qt framework, tg is written in C
- tdesktop offers a more user-friendly experience for non-technical users
- tg is lightweight and suitable for systems with limited resources or terminal-only environments
Use Cases
- tdesktop: Everyday desktop users, those who prefer a graphical interface
- tg: System administrators, power users, those who prefer command-line tools or need to run Telegram on servers
Cross-platform library for building Telegram clients
Pros of td
- Written in C++, offering better performance and cross-platform compatibility
- Officially supported by Telegram, ensuring up-to-date features and security
- Extensive documentation and active development community
Cons of td
- Steeper learning curve due to C++ complexity
- Larger codebase and potentially higher resource usage
Code Comparison
td (C++):
auto send_message = td_api::make_object<td_api::sendMessage>();
send_message->chat_id_ = chat_id;
send_message->input_message_content_ = td_api::make_object<td_api::inputMessageText>();
send_message->input_message_content_->as_input_message_text()->text_ = td_api::make_object<td_api::formattedText>();
send_message->input_message_content_->as_input_message_text()->text_->text_ = "Hello, World!";
tg (Lua):
send_msg(chat_id, "Hello, World!", false)
Summary
td offers a more robust, officially supported solution with better performance and cross-platform compatibility. However, it comes with a steeper learning curve and potentially higher resource usage. tg, on the other hand, provides a simpler API with Lua scripting, making it easier to use for quick prototyping or simpler applications. The choice between the two depends on the specific requirements of your project, such as performance needs, development complexity, and long-term support considerations.
Telegram for Android source
Pros of Telegram
- More active development with frequent updates
- Richer feature set, including voice calls and secret chats
- Better UI/UX with a more modern, user-friendly interface
Cons of Telegram
- Larger codebase, potentially more complex to maintain
- Closed-source server-side code, limiting full transparency
- Higher resource usage due to additional features
Code Comparison
tg (CLI-based):
void loop(void) {
while (1) {
if (verbosity >= 2) {
logprintf ("Main loop\n");
}
net_loop (loop_timeout, term_ev);
if (loop_timeout) {
term_ev = 0;
}
}
}
Telegram (Android app):
@Override
protected void onResume() {
super.onResume();
ApplicationLoader.mainInterfacePaused = false;
ConnectionsManager.getInstance(currentAccount).resume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
checkPermissions();
}
}
Summary
Telegram offers a more feature-rich, user-friendly experience with active development, while tg provides a lightweight, CLI-based alternative. Telegram's codebase is more complex but offers a polished mobile app experience, whereas tg focuses on simplicity and efficiency for command-line usage.
Telegram-iOS
Pros of Telegram-iOS
- Official iOS client, ensuring full compatibility with Telegram's features
- Regular updates and maintenance by the Telegram team
- Polished UI and native iOS experience
Cons of Telegram-iOS
- Limited to iOS platform, not cross-platform like tg
- Closed-source, limiting community contributions and customization
- Larger codebase and potentially more complex than tg
Code Comparison
tg (CLI-based):
void loop (void) {
while (1) {
if (verbosity >= 2) {
logprintf ("Main loop\n");
}
net_loop (0, 0);
if (safe_quit && !pending_queries) {
break;
}
}
}
Telegram-iOS (Swift-based):
override func viewDidLoad() {
super.viewDidLoad()
self.setupUI()
self.configureNavigationBar()
self.bindViewModel()
}
Summary
Telegram-iOS is the official iOS client, offering a polished native experience with regular updates. However, it's platform-specific and closed-source. tg, on the other hand, is a cross-platform CLI client that's open-source but may lack some of the refined UI features of Telegram-iOS. The code comparison highlights the difference in approach, with tg focusing on network operations and Telegram-iOS on UI setup.
Telegram web application, GPL v3
Pros of Webogram
- Web-based client, accessible from any browser without installation
- User-friendly interface with modern design
- Supports multiple accounts and easy switching between them
Cons of Webogram
- Limited functionality compared to native clients
- Potentially slower performance, especially with large chats or media
- Dependent on browser compatibility and web technologies
Code Comparison
Webogram (JavaScript)
function sendMessage(message) {
return MtpApiManager.invokeApi('messages.sendMessage', {
peer: peerID,
message: message,
random_id: [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)]
});
}
tg (C)
void send_message (peer_id_t id, const char *text, int text_len, unsigned long long flags) {
clear_packet ();
out_int (CODE_messages_send_message);
out_int (flags);
out_peer_id (id);
out_string (text, text_len);
out_long (0);
send_packet ();
}
Summary
Webogram offers a convenient web-based solution with a modern interface, while tg provides a more robust, native client with potentially better performance. Webogram is easier to access across devices, but tg may offer more advanced features and faster operation, especially for power users or those with large chat histories.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Telegram messenger CLI
Command-line interface for Telegram. Uses readline interface.
API, Protocol documentation
Documentation for Telegram API is available here: http://core.telegram.org/api
Documentation for MTproto protocol is available here: http://core.telegram.org/mtproto
Upgrading to version 1.0
First of all, the binary is now in ./bin folder and is named telegram-cli. So be careful, not to use old binary.
Second, config folder is now ${HOME}/.telegram-cli
Third, database is not compatible with older versions, so you'll have to login again.
Fourth, in peer_name '#' are substitued to '@'. (Not applied to appending of '#%d' in case of two peers having same name).
Installation
Clone GitHub Repository
git clone --recursive https://github.com/vysheng/tg.git && cd tg
Python Support
Python support is currently limited to Python 2.7 or Python 3.1+. Other versions may work but are not tested.
Linux and BSDs
Install libs: readline, openssl and (if you want to use config) libconfig, liblua, python and libjansson. If you do not want to use them pass options --disable-libconfig, --disable-liblua, --disable-python and --disable-json respectively.
On Ubuntu/Debian use:
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make
On gentoo:
sudo emerge -av sys-libs/readline dev-libs/libconfig dev-libs/openssl dev-lang/lua dev-libs/libevent dev-libs/jansson dev-lang/python
On Fedora:
sudo dnf install lua-devel openssl-devel libconfig-devel readline-devel libevent-devel libjansson-devel python-devel
On Archlinux:
yaourt -S telegram-cli-git
On FreeBSD:
pkg install libconfig libexecinfo lua52 python
On OpenBSD:
pkg_add libconfig libexecinfo lua python
On openSUSE:
sudo zypper in lua-devel libconfig-devel readline-devel libevent-devel libjansson-devel python-devel libopenssl-devel
Then,
./configure
make
Other methods to install on linux
On Gentoo: use ebuild provided.
On Arch: https://aur.archlinux.org/packages/telegram-cli-git
Mac OS X
The client depends on readline library and libconfig, which are not included in OS X by default. You have to install these libraries manually.
If using Homebrew:
brew install libconfig readline lua python libevent jansson
export CFLAGS="-I/usr/local/include -I/usr/local/Cellar/readline/6.3.8/include"
export LDFLAGS="-L/usr/local/lib -L/usr/local/Cellar/readline/6.3.8/lib"
./configure && make
Thanks to @jfontan for this solution.
If using MacPorts:
sudo port install libconfig-hr
sudo port install readline
sudo port install lua51
sudo port install python34
sudo port install libevent
export CFLAGS="-I/usr/local/include -I/opt/local/include -I/opt/local/include/lua-5.1"
export LDFLAGS="-L/usr/local/lib -L/opt/local/lib -L/opt/local/lib/lua-5.1"
./configure && make
Install these ports:
- devel/libconfig
- devel/libexecinfo
- lang/lua52
Then build:
env CC=clang CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib LUA=/usr/local/bin/lua52 LUA_INCLUDE=-I/usr/local/include/lua52 LUA_LIB=-llua-5.2 ./configure
make
Other UNIX
If you manage to launch it on other UNIX, please let me know.
Contacts
If you would like to ask a question, you can write to my telegram or to the github (or both). To contact me via telegram, you should use import_card method with argument 000653bf:0738ca5d:5521fbac:29246815:a27d0cda
Usage
bin/telegram-cli -k <public-server-key>
By default, the public key is stored in tg-server.pub in the same folder or in /etc/telegram-cli/server.pub. If not, specify where to find it:
bin/telegram-cli -k tg-server.pub
Client support TAB completion and command history.
Peer refers to the name of the contact or dialog and can be accessed by TAB completion.
For user contacts peer name is Name
If two or more peers have same name,
Supported commands
Messaging
- msg <peer> Text - sends message to this peer
- fwd <user> <msg-seqno> - forward message to user. You can see message numbers starting client with -N
- chat_with_peer <peer> starts one on one chat session with this peer. /exit or /quit to end this mode.
- add_contact <phone-number> <first-name> <last-name> - tries to add contact to contact-list by phone
- rename_contact <user> <first-name> <last-name> - tries to rename contact. If you have another device it will be a fight
- mark_read <peer> - mark read all received messages with peer
- delete_msg <msg-seqno> - deletes message (not completly, though)
- restore_msg <msg-seqno> - restores delete message. Impossible for secret chats. Only possible short time (one hour, I think) after deletion
Multimedia
- send_photo <peer> <photo-file-name> - sends photo to peer
- send_video <peer> <video-file-name> - sends video to peer
- send_text <peer> <text-file-name> - sends text file as plain messages
- load_photo/load_video/load_video_thumb/load_audio/load_document/load_document_thumb <msg-seqno> - loads photo/video/audio/document to download dir
- view_photo/view_video/view_video_thumb/view_audio/view_document/view_document_thumb <msg-seqno> - loads photo/video to download dir and starts system default viewer
- fwd_media <msg-seqno> send media in your message. Use this to prevent sharing info about author of media (though, it is possible to determine user_id from media itself, it is not possible get access_hash of this user)
- set_profile_photo <photo-file-name> - sets userpic. Photo should be square, or server will cut biggest central square part
Group chat options
- chat_info <chat> - prints info about chat
- chat_add_user <chat> <user> - add user to chat
- chat_del_user <chat> <user> - remove user from chat
- rename_chat <chat> <new-name>
- create_group_chat <chat topic> <user1> <user2> <user3> ... - creates a groupchat with users, use chat_add_user to add more users
- chat_set_photo <chat> <photo-file-name> - sets group chat photo. Same limits as for profile photos.
Search
- search <peer> pattern - searches pattern in messages with peer
- global_search pattern - searches pattern in all messages
Secret chat
- create_secret_chat <user> - creates secret chat with this user
- visualize_key <secret_chat> - prints visualization of encryption key. You should compare it to your partner's one
- set_ttl <secret_chat> <ttl> - sets ttl to secret chat. Though client does ignore it, client on other end can make use of it
- accept_secret_chat <secret_chat> - manually accept secret chat (only useful when starting with -E key)
Stats and various info
- user_info <user> - prints info about user
- history <peer> [limit] - prints history (and marks it as read). Default limit = 40
- dialog_list - prints info about your dialogs
- contact_list - prints info about users in your contact list
- suggested_contacts - print info about contacts, you have max common friends
- stats - just for debugging
- show_license - prints contents of GPLv2
- help - prints this help
- get_self - get our user info
Card
- export_card - print your 'card' that anyone can later use to import your contact
- import_card <card> - gets user by card. You can write messages to him after that.
Other
- quit - quit
- safe_quit - wait for all queries to end then quit
Top Related Projects
Telegram Desktop messaging app
Cross-platform library for building Telegram clients
Telegram for Android source
Telegram-iOS
Telegram web application, GPL v3
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot