MCPcopy Index your code
hub / github.com/Arman92/go-tdlib

github.com/Arman92/go-tdlib @v1.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.0 ↗ · + Follow
4,154 symbols 6,417 edges 11 files 3,977 documented · 96% updated 4y ago★ 45649 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

go-tdlib

All Contributors

Golang Telegram TdLib JSON bindings

Introduction

Telegram Tdlib is a complete library for creating telegram clients, it also has a simple tdjson ready-to-use library to ease the integration with different programming languages and platforms.

go-tdlib is a complete tdlib-tdjson binding package to help you create your own Telegram clients.

NOTE: basic tdjson-golang binding is inspired from this package: go-tdjson

All the classes and functions declared in Tdlib TypeLanguage schema file have been exported using the autogenerate tool tl-parser. So you can use every single type and method in Tdlib.

Key features:

  • Autogenerated golang structs and methods out of tdlib .tl schema
  • Custom event receivers defined by user (e.g. get only text messages from a specific user)
  • Supports all tdjson functions: Send(), Execute(), Receive(), Destroy(), SetFilePath(), SetLogVerbosityLevel()
  • Supports all tdlib functions and types

Installation

First of all you need to clone the Tdlib repo and build it:

git clone git@github.com:tdlib/td.git --depth 1
cd td
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . -- -j5
make install

# -j5 refers to number of your cpu cores + 1 for multi-threaded build.

If hit any build errors, refer to Tdlib build instructions I'm using static linking against tdlib so it won't require to build the whole tdlib source files.

Docker

You can use the prebuilt tdlib image and Go image of your liking:

FROM golang:1.15-alpine AS golang

COPY --from=wcsiu/tdlib:1.7-alpine /usr/local/include/td /usr/local/include/td
COPY --from=wcsiu/tdlib:1.7-alpine /usr/local/lib/libtd* /usr/local/lib/
COPY --from=wcsiu/tdlib:1.7-alpine /usr/lib/libssl.a /usr/local/lib/libssl.a
COPY --from=wcsiu/tdlib:1.7-alpine /usr/lib/libcrypto.a /usr/local/lib/libcrypto.a
COPY --from=wcsiu/tdlib:1.7-alpine /lib/libz.a /usr/local/lib/libz.a
RUN apk add build-base

WORKDIR /myApp

COPY . .

RUN go build --ldflags "-extldflags '-static -L/usr/local/lib -ltdjson_static -ltdjson_private -ltdclient -ltdcore -ltdactor -ltddb -ltdsqlite -ltdnet -ltdutils -ldl -lm -lssl -lcrypto -lstdc++ -lz'" -o /tmp/getChats getChats.go

FROM gcr.io/distroless/base:latest
COPY --from=golang /tmp/getChats /getChats
ENTRYPOINT [ "/getChats" ]
$ docker build -fDockerfile -ttelegram-client .

Example

Here is a simple example for authorization and fetching updates:

package main

import (
    "fmt"

    "github.com/Arman92/go-tdlib"
)

func main() {
    tdlib.SetLogVerbosityLevel(1)
    tdlib.SetFilePath("./errors.txt")

    // Create new instance of client
    client := tdlib.NewClient(tdlib.Config{
        APIID:               "187786",
        APIHash:             "e782045df67ba48e441ccb105da8fc85",
        SystemLanguageCode:  "en",
        DeviceModel:         "Server",
        SystemVersion:       "1.0.0",
        ApplicationVersion:  "1.0.0",
        UseMessageDatabase:  true,
        UseFileDatabase:     true,
        UseChatInfoDatabase: true,
        UseTestDataCenter:   false,
        DatabaseDirectory:   "./tdlib-db",
        FileDirectory:       "./tdlib-files",
        IgnoreFileNames:     false,
    })

    for {
        currentState, _ := client.Authorize()
        if currentState.GetAuthorizationStateEnum() == tdlib.AuthorizationStateWaitPhoneNumberType {
            fmt.Print("Enter phone: ")
            var number string
            fmt.Scanln(&number)
            _, err := client.SendPhoneNumber(number)
            if err != nil {
                fmt.Printf("Error sending phone number: %v", err)
            }
        } else if currentState.GetAuthorizationStateEnum() == tdlib.AuthorizationStateWaitCodeType {
            fmt.Print("Enter code: ")
            var code string
            fmt.Scanln(&code)
            _, err := client.SendAuthCode(code)
            if err != nil {
                fmt.Printf("Error sending auth code : %v", err)
            }
        } else if currentState.GetAuthorizationStateEnum() == tdlib.AuthorizationStateWaitPasswordType {
            fmt.Print("Enter Password: ")
            var password string
            fmt.Scanln(&password)
            _, err := client.SendAuthPassword(password)
            if err != nil {
                fmt.Printf("Error sending auth password: %v", err)
            }
        } else if currentState.GetAuthorizationStateEnum() == tdlib.AuthorizationStateReadyType {
            fmt.Println("Authorization Ready! Let's rock")
            break
        }
    }

    // Main loop
    for update := range client.RawUpdates {
        // Show all updates
        fmt.Println(update.Data)
        fmt.Print("\n\n")
    }

}

More examples can be found on examples folder

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Aleksandr Zelenin 💡 for 🐛 Ahmadreza Zibaei 💻 Max 💻 Ruben Vermeersch 🐛 Alexander Shelepenok 💻 🚧 ⚠️ Karim Nahas 💻 🚧 🐛
Wachiu Siu 💡 🐛 📖 motylkov 💻 Juliia-b 🐛

This project follows the all-contributors specification. Contributions of any kind welcome!

Extension points exported contracts — how you extend this code

TdMessage (Interface)
TdMessage is the interface for all messages send and received to/from tdlib [866 implementers]
types.go
EventFilterFunc (FuncType)
EventFilterFunc used to filter out unwanted messages in receiver channels
tdlib.go
AuthorizationState (Interface)
AuthorizationState Represents the current authorization state of the TDLib client [11 implementers]
types.go
ThumbnailFormat (Interface)
ThumbnailFormat Describes format of the thumbnail [6 implementers]
types.go
ChatMemberStatus (Interface)
ChatMemberStatus Provides information about the status of a member in a chat [6 implementers]
types.go
ChatMembersFilter (Interface)
ChatMembersFilter Specifies the kind of chat members to return in searchChatMembers [7 implementers]
types.go

Core symbols most depended-on inside this repo

SendAndCatch
called by 405
tdlib.go
unmarshalRichText
called by 32
types.go
unmarshalStatisticalGraph
called by 18
types.go
GetAuthorizationStateEnum
called by 17
types.go
unmarshalInputFile
called by 17
types.go
unmarshalReplyMarkup
called by 14
types.go
Authorize
called by 13
tdlib.go
unmarshalInputMessageContent
called by 12
types.go

Shape

Method 2,153
Function 961
Struct 872
TypeAlias 84
Interface 83
FuncType 1

Languages

Go100%

Modules by API surface

types.go3,717 symbols
methods.go405 symbols
tdlib.go21 symbols
examples/multipleAccounts/multipleAcounts.go3 symbols
examples/getChats/getChats.go2 symbols
examples/socksProxy/socksProxy.go1 symbols
examples/sendText/sendText.go1 symbols
examples/sendPhoto/sendPhoto.go1 symbols
examples/customEvents/getCustomEvents.go1 symbols
examples/authorization/botAuthorization.go1 symbols
examples/authorization/basicAuthorization.go1 symbols

For agents

$ claude mcp add go-tdlib \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact