惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
小众软件
小众软件
F
Fortinet All Blogs
爱范儿
爱范儿
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
C
Check Point Blog
博客园 - 聂微东
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
宝玉的分享
宝玉的分享
Jina AI
Jina AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
gogram
classccai · 2026-04-24 · via DEV Community

classccai

Gogram
modern golang library for mtproto
documentation  •  releases  •  telegram chat

GoDoc
Go Report Card
License
GitHub stars
GitHub forks

<img src="https://count.getloli.com/get/@gogram-amarnathcdj?theme=moebooru" alt="Counter">

Enter fullscreen mode Exit fullscreen mode

⭐️ Gogram is a modern, elegant and concurrent MTProto API framework. It enables you to easily interact with the main Telegram API through a user account (custom client) or a bot identity (bot API alternative) using Go.

Gogram is currently in its stable release stage. While there may still be a few bugs, feel free to use it and provide feedback if you encounter any issues or rough edges. 😊

setup

please note that gogram requires Go 1.18 or later to support go-generics

go get -u github.com/amarnathcjd/gogram/telegram

Enter fullscreen mode Exit fullscreen mode

quick start

package main

import "github.com/amarnathcjd/gogram/telegram"

func main() {
    client, err := telegram.NewClient(telegram.ClientConfig{
        AppID: 6, AppHash: "<app-hash>",
    })

    if err != nil {
        log.Fatal(err)
    }

    client.Conn()

    client.LoginBot("<bot-token>") // or client.Login("<phone-number>") for user account, or client.AuthPrompt() for interactive login

    client.On(telegram.OnMessage, func(message *telegram.NewMessage) error { // client.AddMessageHandler
            message.Reply("Hello from Gogram!")
                return nil
    }, telegram.IsPrivate) // waits for private messages only

    client.Idle() // block main goroutine until client is closed
}

Enter fullscreen mode Exit fullscreen mode

support dev

If you'd like to support Gogram, you can consider:

key features

  • ready: 🚀 install gogram with go get and you are ready to go!
  • easy: 😊 makes the telegram api simple and intuitive, while still allowing advanced usages.
  • elegant: 💎 low-level details are abstracted and re-presented in a more convenient way.
  • fast: ⚡ backed by a powerful and concurrent library, gogram can handle even the heaviest workloads.
  • zero dependencies: 🛠️ no need to install anything else than gogram itself.
  • powerful: 💪 full access to telegram's api to execute any official client action and more.
  • feature-rich: 🌟 built-in support for file uploading, formatting, custom keyboards, message editing, moderation tools and more.
  • up-to-date: 🔄 gogram is always in sync with the latest telegram api changes and additions (tl-parser is used to generate the api layer).

Current Layer - unknown (Updated on 2026-03-05)

doing stuff

// sending a message

client.SendMessage("username", "Hello from Gogram!")

client.SendDice("username", "🎲")

client.On("message:/start", func(m *telegram.NewMessage) error {
    m.Reply("Hello from Gogram!") // m.Respond("...")
    return nil
})

Enter fullscreen mode Exit fullscreen mode

// sending media

client.SendMedia("username", "<file-name>", &telegram.MediaOptions{ // filename/inputmedia,...
    Caption: "Hello from Gogram!",
    TTL: int32((math.Pow(2, 31) - 1)), //  TTL For OneTimeMedia
})

client.SendAlbum("username", []string{"<file-name>", "<file-name>"}, &telegram.MediaOptions{ // Array of filenames/inputmedia,...
    Caption: "Hello from Gogram!",
})

// with progress
var pm *telegram.ProgressManager
client.SendMedia("username", "<file-name>", &telegram.MediaOptions{
    Progress: func(a,b int) {
        if pm == nil {
            pm = telegram.NewProgressManager(a, 3) // 3 is edit interval
        }

        if pm.ShouldEdit(b) {
            fmt.Println(pm.GetStats(b)) // client.EditMessage("<chat-id>", "<message-id>", pm.GetStats())
        }
    },
})

Enter fullscreen mode Exit fullscreen mode

// inline queries

client.On("inline:<pattern>", func(iq *telegram.InlineQuery) error { // client.AddInlineHandler
    builder := iq.Builder()
    builder.Article("<title>", "<description>", "<text>", &telegram.ArticleOptions{
            LinkPreview: true,
    })

    return nil
})

Enter fullscreen mode Exit fullscreen mode

// callback queries

client.On("callback:<pattern>", func(cb *telegram.CallbackQuery) error { // client.AddCallbackHandler
    cb.Answer("This is a callback response", &CallbackOptions{
        Alert: true,
    })
    return nil
})

Enter fullscreen mode Exit fullscreen mode

For more examples, check the examples directory.

features

  • [x] basic mtproto implementation (layer 184)
  • [x] updates handling system + cache
  • [x] html, markdown parsing, friendly methods
  • [x] support for flag2.0, layer 147
  • [x] webrtc calls support
  • [x] documentation for all methods
  • [x] stabilize file uploading
  • [x] stabilize file downloading
  • [ ] secret chats support
  • [x] cdn dc support
  • [x] reply markup builder helpers
  • [x] reimplement file downloads (more speed + less cpu usage)

known issues

  • [x] ~ file download, is cpu intensive
  • [x] ~ open issues if found :)
  • [x] ~ enhance peer caching (Fixed: improved locking, username persistence, debounced writes, min entity handling)

contributing

Gogram is an open-source project and your contribution is very much appreciated. If you'd like to contribute, simply fork the repository, commit your changes and send a pull request. If you have any questions, feel free to ask.

License

This library is provided under the terms of the GPL-3.0 License.