Popularity
0.8
Growing
Activity
9.4
Stable
8
1
0

Programming language: Go
License: MIT License
Tags: Bot Building    

telego alternatives and similar packages

Based on the "Bot Building" category.
Alternatively, view telego alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of telego or a related project?

Add another 'Bot Building' Package

README

Telego • Go Telegram Bot API

Go Reference Telegram Bot API Version Mentioned in Awesome Go Telegram Chat

CI Status Quality Gate Status Go Report Coverage Code Smells Lines of Code

Telego is Telegram Bot API library for Golang with full API implementation (one-to-one)

The goal of this library was to create API with same types and methods as actual telegram bot API. Every type and method have been represented in [types.go](types.go) and [methods.go](methods.go) files with mostly all documentation from telegram.

Note: Telego uses fasthttp instead of net/http and jsoniter instead of encoding/json.

Table Of Content

Click to show • hide

ToDo List & Ideas

Click to show • hide

  • [ ] Handlers package
  • [X] Rename package alias tg to tu
  • [ ] Stopped() bool func
  • [ ] Godoc for every package
  • [ ] Add more examples
  • [ ] Create Wiki page
  • [ ] Publish stable version
  • [ ] Add library to official Telegram examples

Getting Started

How to get the library:

go get -u github.com/mymmrac/telego

Make sure you get the latest version to have all new features & fixes.

More examples can be seen here:

Click to show • hide

  • [Configuration](examples/configuration/main.go)
  • [Sending files (documents, photos, media groups)](examples/sending_fiels/main.go)
  • [Inline keyboard](examples/inline_keyboard/main.go)
  • [Keyboard](examples/keyboard/main.go)
  • [Echo bot](examples/echo_bot/main.go)
  • [Inline query bot](examples/inline_query_bot/main.go)

Note: Error handling may be missing in examples, but I strongly recommend handling all errors.

Note: While library in unstable version (v0.x.x) some parts of examples may not work.

Basic setup

For start, you need to create instance of your bot and specify token.

package main

import (
    "fmt"
    "os"

    "github.com/mymmrac/telego"
)

func main() {
    // Get Bot token from environment variables
    botToken := os.Getenv("TOKEN")

    // Create bot and enable debugging info
    // (more on configuration at /examples/configuration/main.go)
    bot, err := telego.NewBot(botToken, telego.DefaultLogger(true, true))
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // Call method getMe (https://core.telegram.org/bots/api#getme)
    botUser, err := bot.GetMe()
    if err != nil {
        fmt.Println("Error:", err)
    }

    // Print Bot information
    fmt.Printf("Bot user: %#v\n", botUser)
}

Getting updates

In order to receive updates you can use two methods:

  • using long polling (bot.GetUpdatesViaLongPulling)
  • using webhook (bot.GetUpdatesViaWebhook)

Let's start from long pulling (easier for local testing):

package main

import (
    "fmt"
    "os"
    "time"

    "github.com/mymmrac/telego"
)

func main() {
    botToken := os.Getenv("TOKEN")

    bot, err := telego.NewBot(botToken, telego.DefaultLogger(true, true))
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // Optional. Set interval of getting updates (default: 0.5s).
    // If you want to get updates as fast as possible set to 0,
    // but webhook method is recommended for this.
    bot.SetUpdateInterval(time.Second / 2)

    // Get updates channel
    updates, _ := bot.GetUpdatesViaLongPulling(nil)

    // Stop reviving updates from updates channel
    defer bot.StopLongPulling()

    // Loop through all updates when they came
    for update := range updates {
        fmt.Printf("Update: %#v\n", update)
    }
}

Webhook example (recommended way):

package main

import (
    "fmt"
    "os"

    "github.com/mymmrac/telego"
)

func main() {
    botToken := os.Getenv("TOKEN")

    bot, err := telego.NewBot(botToken, telego.DefaultLogger(true, true))
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // Set up a webhook on Telegram side
    _ = bot.SetWebhook(&telego.SetWebhookParams{
        URL: "https://example.com/bot" + bot.Token(),
    })

    // Receive information about webhook
    info, _ := bot.GetWebhookInfo()
    fmt.Printf("Webhook Info: %#v\n", info)

    // Get updates channel from webhook.
    // Note: For one bot only one webhook allowed.
    updates, _ := bot.GetUpdatesViaWebhook("/bot" + bot.Token())

    // Start server for receiving requests from Telegram
    bot.StartListeningForWebhook("localhost:443")

    // Stop reviving updates from updates channel and shutdown webhook server
    defer func() {
        _ = bot.StopWebhook()
    }()

    // Loop through all updates when they came
    for update := range updates {
        fmt.Printf("Update: %#v\n", update)
    }
}

Note: You may wish to use Let's Encrypt in order to generate your free TLS certificate.

Using Telegram methods

All Telegram Bot API methods described in documentation can be used by the library. They have same names and same parameters, parameters represented by struct with name: <methodName> + Params. If method don't have required parameters nil value can be used as a parameter.

Note: [types.go](types.go) and [methods.go](methods.go) was automatically [generated](internal/generator) from documentation, and it's possible that they have errors or missing parts both in comments and actual code. Fell free to report such things.

package main

import (
    "fmt"
    "os"

    "github.com/mymmrac/telego"
    tu "github.com/mymmrac/telego/telegoutil"
)

func main() {
    botToken := os.Getenv("TOKEN")

    bot, err := telego.NewBot(botToken, telego.DefaultLogger(true, true))
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // Call method getMe
    botUser, _ := bot.GetMe()
    fmt.Printf("Bot User: %#v\n", botUser)

    updates, _ := bot.GetUpdatesViaLongPulling(nil)
    defer bot.StopLongPulling()

    for update := range updates {
        if update.Message != nil {
            // Retrieve chat ID
            chatID := update.Message.Chat.ID

            // Call method sendMessage (https://core.telegram.org/bots/api#sendmessage).
            // Sends message to sender with same text (echo bot).
            sentMessage, _ := bot.SendMessage(tu.Message(tu.ID(chatID), update.Message.Text))

            fmt.Printf("Sent Message: %v\n", sentMessage)
        }
    }
}

Utility methods

In Telego even though you have all [types](types.go) and [methods](methods.go) available, it's often not so convenient to use them directly. To solve this issues [telegoutil](telegoutil) package was created. It contains utility-helper function that will make your life a bit easier.

I suggest including it with alias to get cleaner code:

import tu "github.com/mymmrac/telego/telegoutil"

Package contains couple methods for creating send parameters with all required parameters like:

  • Message(chatID, text) => SendMessageParams
  • Photo(chatID, photoFile) => SendPhotoParams
  • Location(chatID, latitude, longitude) => SendLocationParams
  • ...

Or other useful methods like:

  • ID(intID) => ChatID
  • File(namedReader) => InputFile
  • ...

Utils related to [methods](methods.go) can be found in [telegoutil/methods](telegoutil/methods.go), and those that are related to [types](types.go) in [telegoutil/types](telegoutil/types.go).

Note: If you think that something can be added to [telegoutil](telegoutil) package fill free to create an issue or pull request with desired changes.

Contribution

  1. Fork repo
  2. Clone git clone https://github.com/mymmrac/telego.git
  3. Create new branch git checkout -b my-new-feature
  4. Make your changes, then add them git add .
  5. Commit git commit -m "New feature added"
  6. Push git push origin my-new-feature
  7. Create pull request

Note: Please try to use descriptive names for your changes, not just fix or new stuff.

License

Telego is distributed under [MIT licence](LICENSE).


*Note that all licence references and agreements mentioned in the telego README section above are relevant to that project's source code only.