Skip to content

Full-native implementation of MTProto protocol on Golang.

License

Notifications You must be signed in to change notification settings

xAmarnath/gogram

Repository files navigation

Gogram
Telegram MTProto API Framework for Golang
Homepage Docs Releases Support

GoGram

Light Weight, Fast, Elegant Telegram MTProto API framework in Golang for building Telegram clients and bots.

Status

GoDoc Go Report Card License GitHub stars GitHub forks GitHub issues

package main

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

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

    client.ConnectBot("<bot-token>") // or client.Login("<phone-number>") for user account
    // client.AuthPrompt() // for console-based interactive auth

    client.AddMessageHandler(telegram.OnNewMessage, func(message *telegram.NewMessage) error {
        if m.IsPrivate() {
            m.Reply("Hello from Gogram!")
        }
    })

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

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.

Support

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 - 179 (Updated on 2024-04-27)

Installing

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

Doing Stuff

Sending a Message

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

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

client.AddMessageHandler("/start", func(m *telegram.Message) error {
    m.Reply("Hello from Gogram!") // m.Respond("<text>")
    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!",
})

Inline Queries

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

	return nil
})

Features TODO

  • Basic MTProto implementation (LAYER 179)
  • Updates handling system + Cache
  • HTML, Markdown Parsing, Friendly Methods
  • Support for Flag2.0, Layer 147
  • WebRTC Calls Support
  • Documentation for all methods
  • Stabilize File Uploading
  • Stabilize File Downloading
  • Secret Chats Support

Known Issues

  • File Uploading/Downloading is not stable
  • MessageMediaPoll, UserFull Decode Fails
  • invokeWithLayer channel missing while bad Salt
  • tcp.io.Reader.Read unstable
  • Perfect HTML Parser
  • Session File some issues
  • Unidentified RPCError decoding fails

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.

Resources

  • Documentation: (Coming Soon)
  • Support: @rosexchat

License

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