Skip to content

Repository files navigation

ATC — Another Telegram Client

A small Telegram desktop client written from scratch in C++, as a pet project. It implements the MTProto protocol itself and talks directly to Telegram's servers — no Telegram SDK.

Features

  • Login by phone number, SMS code, and 2FA password
  • Multiple accounts with quick switching
  • Sessions persist between launches
  • Dialog list with previews, paginated as you scroll
  • Message history with scroll-up-to-load-older
  • Media is labelled (photo / video / voice / file / sticker / poll / location)
  • Download attachments to disk
  • Send messages; view and edit your profile
  • Unicode font bundled, so Cyrillic and other scripts render fine

How it's built

  • Protocol: MTProto 2.0 by hand — the DH handshake, AES-IGE, RSA, and the TL serializer
  • Crypto: mbedTLS
  • UI: Dear ImGui + GLFW + OpenGL 2
  • Language: C++

Build

Needs a C++ toolchain, CMake, and dev packages for mbedTLS, GLFW, OpenGL and zlib.

# Arch
sudo pacman -S mbedtls glfw cmake

# add your API credentials (see below)
cp include/config/config.h.example include/config/config.h
$EDITOR include/config/config.h

cmake -B build
cmake --build build --target atc_gui
./build/atc_gui

atc_gui is the desktop client. The older atc target is the original low-level handshake/CLI testbed.

API credentials

Get an api_id / api_hash from https://my.telegram.org and put them in include/config/config.h (gitignored, so they stay local).

Status

Work in progress, but usable: login, browse chats, read/send messages, multiple accounts, download attachments, and it survives restarts. Inline media preview and playback aren't planned — a client isn't a media player.

License

MIT — see LICENSE.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages