gogram

package module
v1.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2024 License: GPL-3.0 Imports: 31 Imported by: 0

README

Gogram
Telegram MTProto API Framework for Golang
HOME 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 GitHub pull requests

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

Setup

Please note that Gogram requires Go 1.18 or later.

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

Getting Started

package main

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

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

	if err != nil {
		log.Fatal(err)
	}

	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

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 - 184 (Updated on 2024-07-07)

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 TODO

  • 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

Known Issues

  • ~ 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.

Resources

License

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MessageRequireToAck

func MessageRequireToAck(msg tl.Object) bool

func RpcErrorToNative

func RpcErrorToNative(r *objects.RpcError) error

func TryExpandError

func TryExpandError(errStr string) (nativeErrorName string, additionalData any)

Types

type BadMsgError

type BadMsgError struct {
	*objects.BadMsgNotification
	Description string
}

func BadMsgErrorFromNative

func BadMsgErrorFromNative(in *objects.BadMsgNotification) *BadMsgError

func (*BadMsgError) Error

func (e *BadMsgError) Error() string

type BadSystemMessageCode

type BadSystemMessageCode int32
const (
	ErrBadMsgUnknown             BadSystemMessageCode = 0
	ErrBadMsgIdTooLow            BadSystemMessageCode = 16
	ErrBadMsgIdTooHigh           BadSystemMessageCode = 17
	ErrBadMsgIncorrectMsgIdBits  BadSystemMessageCode = 18
	ErrBadMsgWrongContainerMsgId BadSystemMessageCode = 19 // this must never happen
	ErrBadMsgMessageTooOld       BadSystemMessageCode = 20
	ErrBadMsgSeqNoTooLow         BadSystemMessageCode = 32
	ErrBadMsgSeqNoTooHigh        BadSystemMessageCode = 33
	ErrBadMsgSeqNoExpectedEven   BadSystemMessageCode = 34
	ErrBadMsgSeqNoExpectedOdd    BadSystemMessageCode = 35
	ErrBadMsgServerSaltIncorrect BadSystemMessageCode = 48
	ErrBadMsgInvalidContainer    BadSystemMessageCode = 64
)

type Config

type Config struct {
	AuthKeyFile    string
	StringSession  string
	SessionStorage session.SessionLoader
	MemorySession  bool
	AppID          int32

	ServerHost string
	PublicKey  *rsa.PublicKey
	DataCenter int
	LogLevel   string
	Proxy      *url.URL
}

type ErrResponseCode

type ErrResponseCode struct {
	Code           int64
	Message        string
	Description    string
	AdditionalInfo any // some errors has additional data like timeout seconds, dc id etc.
}

func (*ErrResponseCode) Error

func (e *ErrResponseCode) Error() string

type MTProto

type MTProto struct {
	Addr string

	Logger *utils.Logger
	// contains filtered or unexported fields
}

func NewMTProto

func NewMTProto(c Config) (*MTProto, error)

func (*MTProto) AddCustomServerRequestHandler

func (m *MTProto) AddCustomServerRequestHandler(handler func(i any) bool)

func (*MTProto) AppID

func (m *MTProto) AppID() int32

func (*MTProto) CreateConnection

func (m *MTProto) CreateConnection(withLog bool) error

func (*MTProto) DeleteSession

func (m *MTProto) DeleteSession() (err error)

func (*MTProto) Disconnect

func (m *MTProto) Disconnect() error

func (*MTProto) ExportAuth

func (m *MTProto) ExportAuth() (*session.Session, int)

func (*MTProto) ExportNewSender

func (m *MTProto) ExportNewSender(dcID int, mem bool) (*MTProto, error)

func (*MTProto) GetAuthKey

func (m *MTProto) GetAuthKey() []byte

GetAuthKey returns decryption key of current session salt 🧐

func (*MTProto) GetDC

func (m *MTProto) GetDC() int

func (*MTProto) GetSeqNo

func (m *MTProto) GetSeqNo() int32

GetSeqNo returns seqno

func (*MTProto) GetServerSalt

func (m *MTProto) GetServerSalt() int64

GetServerSalt returns current server salt

func (*MTProto) GetSessionID

func (m *MTProto) GetSessionID() int64

func (*MTProto) ImportAuth

func (m *MTProto) ImportAuth(stringSession string) (bool, error)

func (*MTProto) ImportRawAuth

func (m *MTProto) ImportRawAuth(authKey, authKeyHash []byte, addr string, appID int32) (bool, error)

func (*MTProto) InvokeRequestWithoutUpdate

func (m *MTProto) InvokeRequestWithoutUpdate(data tl.Object, expectedTypes ...reflect.Type) error

func (*MTProto) LoadSession

func (m *MTProto) LoadSession(sess *session.Session) error

func (*MTProto) MakeRequest

func (m *MTProto) MakeRequest(msg tl.Object) (any, error)

func (*MTProto) MakeRequestWithHintToDecoder

func (m *MTProto) MakeRequestWithHintToDecoder(msg tl.Object, expectedTypes ...reflect.Type) (any, error)

func (*MTProto) Ping

func (m *MTProto) Ping() time.Duration

func (*MTProto) Reconnect

func (m *MTProto) Reconnect(WithLogs bool) error

func (*MTProto) ReconnectToNewDC

func (m *MTProto) ReconnectToNewDC(dc int) (*MTProto, error)

func (*MTProto) SaveSession

func (m *MTProto) SaveSession() (err error)

func (*MTProto) SetAppID

func (m *MTProto) SetAppID(appID int32)

func (*MTProto) SetAuthKey

func (m *MTProto) SetAuthKey(key []byte)

func (*MTProto) SetTransfer

func (m *MTProto) SetTransfer(transfer bool)

func (*MTProto) TcpActive

func (m *MTProto) TcpActive() bool

func (*MTProto) Terminate

func (m *MTProto) Terminate() error

func (*MTProto) UpdateSeqNo

func (m *MTProto) UpdateSeqNo() int32

Directories

Path Synopsis
examples
bot
proxy command
simple command
stars command
internal
cmd/tlgen module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL