gogram

package module
v0.0.0-...-761494b Latest Latest
Warning

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

Go to latest
Published: Apr 27, 2024 License: GPL-3.0 Imports: 31 Imported by: 1

README

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/amarnathcjd/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/amarnathcjd/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.

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 Sha1

func Sha1(input string) []byte

func Sha1Byte

func Sha1Byte(input []byte) []byte

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) TcpActive

func (m *MTProto) TcpActive() bool

func (*MTProto) Terminate

func (m *MTProto) Terminate() error

func (*MTProto) UpdateSeqNo

func (m *MTProto) UpdateSeqNo() int32

Jump to

Keyboard shortcuts

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