Skip to content

AmarnathCJD/gogram

Folders and files

NameName
Last commit message
Last commit date
Oct 8, 2024
Nov 19, 2024
Nov 19, 2024
Nov 14, 2024
Nov 19, 2024
Nov 13, 2022
Aug 11, 2024
Mar 22, 2023
Aug 31, 2022
Nov 14, 2024
Oct 21, 2024
Oct 4, 2024
Oct 4, 2024
Jul 23, 2024
Nov 19, 2024
Nov 16, 2024

Repository files navigation

Gogram
modern golang library for mtproto
documentation  β€’  releases  β€’  telegram chat

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.


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

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 - 193 (Updated on 2024-11-14)

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

  • basic mtproto implementation (layer 184)
  • 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
  • cdn dc support
  • reply markup builder helpers
  • reimplement file downloads (more speed + less cpu usage)

known issues

  • ~ file download, is cpu intensive
  • ~ open issues if found :)
  • ~ enhance peer caching.

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.