MCPcopy Index your code
hub / github.com/AmarnathCJD/gogram

github.com/AmarnathCJD/gogram @2.3.19

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.3.19 ↗ · + Follow
7,801 symbols 14,820 edges 97 files 2,121 documented · 27%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<a href="https://github.com/amarnathcjd/gogram">
    <img src="https://i.imgur.com/RE1M0sM.png" alt="Gogram" width="256">
</a>



<b>modern golang library for mtproto</b>



<b>
<a href="https://gogramd.vercel.app">documentation</a>
&nbsp;•&nbsp;
<a href="https://github.com/amarnathcjd/gogram/releases">releases</a>
&nbsp;•&nbsp;
<a href="https://t.me/rosexchat">telegram chat</a>
</b>

GoDoc Go Report Card License GitHub stars GitHub forks

⭐️ 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.

[!WARNING] gogram is currently in beta stage: there may be a few bugs
although its pretty stable and feature-rich. feel free to try it out, though, any feedback is appreciated!

setup

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

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

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.FilterPrivate) // waits for private messages only

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

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 - 192 (Updated on 2024-10-29)

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
})
// 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())
        }
    },
})
// 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
})
// 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
})

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
  • [ ] documentation for all methods
  • [x] stabilize file uploading
  • [x] stabilize file downloading
  • [ ] secret chats support
  • [ ] cdn dc support
  • [ ] reimplement file downloads (more speed + less cpu usage)

known issues

  • [ ] ~ file download, is cpu intensive
  • [x] ~ open issues if found :)

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.

Extension points exported contracts — how you extend this code

Handle (Interface)
(no doc) [10 implementers]
telegram/updates.go
Object (Interface)
(no doc) [1996 implementers]
internal/encoding/tl/object.go
Mode (Interface)
Mode is an interface that defines how the connection sides determine the size of transmitted messages. Unlike HTTP or UD [3 …
internal/mode/mode.go
IBox (Interface)
IBox is common interface of box [2 implementers]
internal/utils/media.go
SessionLoader (Interface)
SessionLoader is the interface which allows you to access sessions from different storages (like filesystem, database, s [2 …
internal/session/interface.go
Common (Interface)
Common is a message (either encrypted or unencrypted) used for communication between the client and server. [2 implementers]
internal/mtproto/messages/messages.go
Mode (Interface)
(no doc) [3 implementers]
internal/transport/interfaces.go
Number (Interface)
(no doc)
telegram/utils.go

Core symbols most depended-on inside this repo

MakeRequest
called by 671
internal/mtproto/objects/methods.go
New
called by 175
internal/utils/media.go
Error
called by 67
errors.go
Debug
called by 58
internal/utils/logging.go
getValue
called by 57
telegram/utils.go
ResolvePeer
called by 48
telegram/helpers.go
getVariadic
called by 42
telegram/messages.go
Add
called by 29
internal/utils/set.go

Shape

Method 5,136
Struct 2,138
Function 276
Interface 216
TypeAlias 25
FuncType 10

Languages

Go100%

Modules by API surface

telegram/interfaces_gen.go3,552 symbols
telegram/methods_gen.go2,172 symbols
telegram/types_gen.go761 symbols
internal/utils/media.go125 symbols
internal/mtproto/objects/types.go84 symbols
telegram/updates.go83 symbols
telegram/newmessage.go83 symbols
telegram/client.go49 symbols
telegram/enums_gen.go42 symbols
telegram/messages.go41 symbols
telegram/helpers.go38 symbols
telegram/media.go35 symbols

For agents

$ claude mcp add gogram \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact