README
¶
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
package main
import "github.com/xamarnath/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/xamarnath/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 ¶
- func CloseChannelWithoutPanic(ch chan tl.Object)
- func MessageRequireToAck(msg tl.Object) bool
- func RpcErrorToNative(r *objects.RpcError) error
- func Sha1(input string) []byte
- func Sha1Byte(input []byte) []byte
- func TryExpandError(errStr string) (nativeErrorName string, additionalData any)
- type BadMsgError
- type BadSystemMessageCode
- type Config
- type ErrResponseCode
- type MTProto
- func (m *MTProto) AddCustomServerRequestHandler(handler func(i any) bool)
- func (m *MTProto) AppID() int32
- func (m *MTProto) CreateConnection(withLog bool) error
- func (m *MTProto) DeleteSession() (err error)
- func (m *MTProto) Disconnect() error
- func (m *MTProto) ExportAuth() (*session.Session, int)
- func (m *MTProto) ExportNewSender(dcID int, mem bool) (*MTProto, error)
- func (m *MTProto) GetAuthKey() []byte
- func (m *MTProto) GetDC() int
- func (m *MTProto) GetSeqNo() int32
- func (m *MTProto) GetServerSalt() int64
- func (m *MTProto) GetSessionID() int64
- func (m *MTProto) ImportAuth(stringSession string) (bool, error)
- func (m *MTProto) ImportRawAuth(authKey, authKeyHash []byte, addr string, appID int32) (bool, error)
- func (m *MTProto) InvokeRequestWithoutUpdate(data tl.Object, expectedTypes ...reflect.Type) error
- func (m *MTProto) LoadSession(sess *session.Session) error
- func (m *MTProto) MakeRequest(msg tl.Object) (any, error)
- func (m *MTProto) MakeRequestWithHintToDecoder(msg tl.Object, expectedTypes ...reflect.Type) (any, error)
- func (m *MTProto) Ping() time.Duration
- func (m *MTProto) Reconnect(WithLogs bool) error
- func (m *MTProto) ReconnectToNewDC(dc int) (*MTProto, error)
- func (m *MTProto) SaveSession() (err error)
- func (m *MTProto) SetAppID(appID int32)
- func (m *MTProto) SetAuthKey(key []byte)
- func (m *MTProto) TcpActive() bool
- func (m *MTProto) Terminate() error
- func (m *MTProto) UpdateSeqNo() int32
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func MessageRequireToAck ¶
func RpcErrorToNative ¶
func TryExpandError ¶
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 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 ¶
func NewMTProto ¶
func (*MTProto) AddCustomServerRequestHandler ¶
func (*MTProto) CreateConnection ¶
func (*MTProto) DeleteSession ¶
func (*MTProto) Disconnect ¶
func (*MTProto) ExportNewSender ¶
func (*MTProto) GetAuthKey ¶
GetAuthKey returns decryption key of current session salt 🧐
func (*MTProto) GetServerSalt ¶
GetServerSalt returns current server salt 🧐