modern golang library for mtproto
documentation
Β β’Β
releases
Β β’Β
telegram chat
βοΈ 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. π
please note that gogram requires Go 1.18 or later to support go-generics
go get -u github.com/amarnathcjd/gogram/telegram
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
}
- sample modular bot: a simple modular bot built using gogram with plugins support.
If you'd like to support Gogram, you can consider:
- become a github sponsor
- star this repo :) β
- 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).
// 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.
- 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
- reimplement file downloads (more speed less cpu usage)
- ~ file download, is cpu intensive
- ~ open issues if found :)
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.
This library is provided under the terms of the GPL-3.0 License.