开发文档

TDLib 语言与平台示例

按 Python、JavaScript、Go、Java、C++、Swift、Dart 等语言查找 TDLib 绑定、构建说明与源码。GetTGAPI 整理官方示例入口。

GetTGAPI 编辑团队更新于
TDLib 文档核对日期

来源版本 a94b83d67ab4 · TDLib contributors · BSL-1.0

依据官方资料整理,由 GetTGAPI 独立维护。 文档目录与术语表 →

本页内容
  1. GetTGAPI 阅读提示
  2. TDLib 使用与构建示例
  3. 在 Python 项目中使用 TDLib
  4. 在 JavaScript 项目中使用 TDLib
  5. 在 Go 项目中使用 TDLib
  6. 在 Java 项目中使用 TDLib
  7. 在 Kotlin 项目中使用 TDLib
  8. 在 C# 项目中使用 TDLib
  9. 在 C++ 项目中使用 TDLib
  10. 在 Swift 项目中使用 TDLib
  11. 在 Objective-C 项目中使用 TDLib
  12. 在 Delphi 与 Lazarus 的 Object Pascal 项目中使用 TDLib
  13. 在 Dart 项目中使用 TDLib
  14. 在 Rust 项目中使用 TDLib
  15. 在 Erlang 项目中使用 TDLib
  16. 在 PHP 项目中使用 TDLib
  17. 在 Lua 项目中使用 TDLib
  18. 在 D 项目中使用 TDLib
  19. 在 Ruby 项目中使用 TDLib
  20. 在 Crystal 项目中使用 TDLib
  21. 在 Haskell 项目中使用 TDLib
  22. 在 Nim 项目中使用 TDLib
  23. 在 Clojure 项目中使用 TDLib
  24. 在 Emacs Lisp 项目中使用 TDLib
  25. 在 Elixir 项目中使用 TDLib
  26. 在 Vala 项目中使用 TDLib
  27. 在 1С:Enterprise 中使用 TDLib
  28. 在 C 项目中使用 TDLib
  29. 在汇编项目中使用 TDLib
  30. 在 G 项目中使用 TDLib
  31. 从其他编程语言中使用 TDLib

GetTGAPI 阅读提示

这里汇集了 TDLib 文档列出的语言绑定与客户端示例,便于按编程语言查找接入方式。其中的第三方项目并非都由 Telegram 维护,GetTGAPI 也未逐一验证其当前安全性或兼容性。选择依赖前,应到各仓库核对最近维护、许可及支持的 TDLib 版本。

此目录回答“使用什么接口、到哪里找示例”,不替代每个项目的安装文档。先阅读 TDLib 总览与构建,再按语言定位;Python 和 Java 的具体步骤见 开发指南。文中的历史开发时间与项目评价均来自所列版本原文。

TDLib 使用与构建示例

该目录包含以不同编程语言使用 TDLib 的基本示例,以及在不同平台上构建库的示例。若要查看所有 TDLib 方法的文档,请查阅 td_api.tl 模式定义,或自动生成的 HTML 文档,其中列出全部 TDLib 方法和类。基本概念还可参考官方 Getting Started 入门教程。

TDLib 几乎可在任何平台上由任何编程语言便捷地使用。详细构建步骤见 TDLib 构建说明生成器。请选择需要的语言,查看示例与详细说明:

在 Python 项目中使用 TDLib

Python 可以通过 JSON 接口使用 TDLib。

已有一些方便的 Python 封装可供这个 JSON 接口使用。

如果使用 Python >= 3.6,可查看 python-telegram。它充分使用 asyncio,提供良好的文档和多个示例,可通过 pip 安装,也可在 Docker 容器中使用。还可以尝试它的一个分支 python-telegram。

如果希望结合 asyncio 与 Python >= 3.9 使用 TDLib,可查看 aiotdlib 或 Pytdbot;后者基于高性能 TDLib 绑定 AYMENJD/tdjson。

如果希望将 TDLib 与 SidusAI 配合使用,可查看 sidusai-tdlib。

旧版 Python 可以使用 pytdlib。该封装包含 TDLib API 类生成器,以及与 TDLib 交互的基本接口。

还可以查看 example/python/tdjson_example.py、tdlib-python 或 Python Wrapper TDLib,了解 TDLib JSON 接口与 Python 集成的基本示例。

在 JavaScript 项目中使用 TDLib

TDLib 可以编译成 WebAssembly,并由浏览器中的 JavaScript 使用。tdweb 提供浏览器环境的便捷封装,telegram-react 则是基于 TDLib 的 Telegram 客户端示例。

另见 Svelte-tdweb-starter,它是 tdweb 的 Svelte 封装;以及 Telegram-Photoframe,它将选定群组或频道展示成相框式网页应用。

Node.js 可以通过 JSON 接口使用 TDLib。

这个 JSON 接口已有便捷的 Node.js 封装,例如面向 TypeScript/JavaScript 的现代 TDLib 框架 Airgram,以及提供便捷、完全异步 TDLib 交互接口和多个示例的 tdl。

其他 Node.js 集成示例还包括 TdNode、tglib、node-tdlib、tdlnode、Paper Plane 和 node-tlg。

还可以查看 DIBgram 的源码;这是一个外观类似 Telegram Desktop 的非官方 Telegram 网页应用。

NativeScript 也可以通过 JSON 接口使用 TDLib。nativescript-tglib 是用于构建 Telegram 客户端的 NativeScript 库示例。

TDLib 也能用于 iOS 和 Android 上的 React Native。react-native-tdlib 是用于构建 Telegram 客户端的 React Native 库示例。

在 Go 项目中使用 TDLib

Go 可通过 JSON 接口与 Cgo 使用 TDLib,既可静态链接,也可动态链接。

这个 JSON 接口已有便捷的 Go 封装。例如 github.com/AshokShau/gotdbot、github.com/zelenin/go-tdlib 和 github.com/Arman92/go-tdlib,它们提供便捷的 TDLib 客户端、TDLib API 类生成器及大量示例。

github.com/aliforever/go-tdlib 也提供 TDLib JSON 接口与 Go 集成的示例。

在 Java 项目中使用 TDLib

Java 可以通过原生 JNI 绑定使用 TDLib。

上游提供 JNI 桥接方法,以及全部 TDLib API 方法和对象所需 Java 类的生成器。桌面 Java 的使用示例、详细构建与使用说明见 example/java。Android 的详细构建说明见 example/android。

在 Kotlin 项目中使用 TDLib

Kotlin/JVM 可以采用与 Java 相同的方式使用 TDLib。

参见 tdl-coroutines,这是基于协程的 Kotlin Multiplatform TDLib 封装。

另见 Kotlin 协程封装 td-ktx。

也可以使用提供 Kotlin 专用绑定的 ktd 库。

在 C# 项目中使用 TDLib

TDLib 通过 C++/CLI 和 C++/CX 提供原生 .NET 接口。tdlib-netcore 提供类似 SWIG 的绑定,可自动生成 TDLib API 类。example/uwp 展示如何为通用 Windows 平台构建 TDLib SDK 并从 C# 使用;example/csharp 展示如何启用 C++/CLI 构建 TDLib 并在 Windows 上从 C# 使用。

使用 .NET Core 编写跨平台 C# 应用时,可查看 tdsharp。它采用 JSON 接口,提供异步交互接口、自动生成的 TDLib API 类及示例。

另见 Unigram:使用通用 Windows 平台 TDLib SDK,在不到 2 个月内以 C# 从零重写的完整客户端;egram.tel:使用 C#、.NET Core、ReactiveUI 和 Avalonia 的跨平台 Telegram 客户端;以及面向三星手表的 Telegram 客户端 telewear。

在 C++ 项目中使用 TDLib

TDLib 具有用于发送和接收请求的简单、便捷 C++11 接口,可以静态链接到应用中。

C++ 使用示例见 example/cpp。td_example.cpp 包含授权、处理新消息、获取聊天列表及发送文本消息的示例。

还可以查看 Sailfish OS 的 Telegram 应用 Fernschreiber 和 Depecher;Ubuntu Touch 的 Qt 客户端 TELEports;Pidgin 插件 tdlib-purple;Nokia N9 客户端 MeeGram;以及 TDLib JSON 接口的 Sciter 原生扩展 TDLib Native Sciter Extension。这些项目均基于 TDLib。

在 Swift 项目中使用 TDLib

Swift 可以通过 JSON 接口使用 TDLib,支持静态或动态链接。

iOS、watchOS、tvOS、visionOS 和 macOS 的构建示例见 example/ios。

TDLibKit、tdlib-swift 和 TDLib-iOS 提供便捷的 TDLib 客户端,包含为全部 API 方法和对象自动生成、文档完整的类。

还可查看 Moc 的源码;这是功能强大的原生 macOS 和 iPadOS Telegram 客户端,针对大型社区管理和个人使用优化。

macOS Swift 应用示例见 example/swift。

在 Objective-C 项目中使用 TDLib

Objective-C 可以通过 JSON 接口使用 TDLib,支持静态或动态链接。

iOS、watchOS、tvOS、visionOS 和 macOS 的构建示例见 example/ios。

在 Delphi 与 Lazarus 的 Object Pascal 项目中使用 TDLib

Object Pascal 可以通过 JSON 使用 TDLib。

Delphi 使用示例见 tdlib-delphi。

Lazarus 使用示例见 tdlib-lazarus。

在 Dart 项目中使用 TDLib

Dart 可以通过 JSON 接口,结合 Dart Native Extension 或 Dart FFI 使用 TDLib。

tdlib-dart 提供便捷的 TDLib 客户端,包含全部 API 方法和对象的自动生成类及完整文档。

通过 FFI 提供 Dart 绑定的示例还包括 dart_tdlib、flutter_libtdjson、Dart wrapper for TDLib 和 tdlib_bindings。

从 Dart 使用 TDLib 的示例见 Telegram Client library、project.scarlet、tdlib、tdlib-dart、FluGram 和 telegram-service。

另见以 Dart 编写的 Telegram 客户端 telegram-flutter,以及 Flutter Telegram 客户端 f-Telegram。

在 Rust 项目中使用 TDLib

Rust 可以通过 JSON 接口使用 TDLib。

rust-tdlib 和 tdlib 提供便捷的 TDLib 客户端,包含全部 API 方法和对象的自动生成类及完整文档。

Rust 绑定示例见 rtdlib、tdlib-rs、tdlib-futures、tdlib-sys、tdjson-rs、rust-tdlib 和 tdlib-json-sys。

另见使用 Rust 与 GTK 编写的 Telegram 客户端 Paper Plane。

在 Erlang 项目中使用 TDLib

Erlang 可以通过 JSON 接口使用 TDLib。

Erlang 绑定示例见 erl-tdlib。

在 PHP 项目中使用 TDLib

如果使用现代 PHP >= 7.4,可以通过 PHP FFI 扩展使用 TDLib。例如 ffi-tdlib、tdlib-php-ffi 和 tdjson_example 都是基于 FFI 的封装。

另见 TDLib API 类生成器 tdlib-schema。

较早的 PHP 版本可以通过 PHP 扩展封装 TDLib 功能。

phptdlib、tdlib 和 PIF-TDPony 是这种提供 PHP 访问能力的扩展示例。

tdlib-bundle 是基于 phptdlib 的 Symfony bundle。

在 Lua 项目中使用 TDLib

Lua 可以通过 JSON 接口使用 TDLib。

Lua 绑定及基本使用示例见 luajit-tdlib、tdlua 和 luajit-tdlib。

另见 tdbot,它使 Lua 脚本能够使用 TDLib 的全部功能。

在 D 项目中使用 TDLib

D 可以通过 JSON 接口使用 TDLib。

D 绑定示例见 d-tdlib-service。

在 Ruby 项目中使用 TDLib

Ruby 可以通过 JSON 接口使用 TDLib。

Ruby 绑定与客户端示例见 tdlib-ruby。

在 Crystal 项目中使用 TDLib

Crystal 可以通过 JSON 接口使用 TDLib。

Crystal 绑定示例见 Proton,它为全部 API 方法和对象提供自动生成的类型。

在 Haskell 项目中使用 TDLib

Haskell 可以使用 TDLib。

使用示例和 Haskell 封装见 haskell-tdlib 或 tdlib。该库包含为全部 TDLib API 方法和对象自动生成的 Haskell 类型。

在 Nim 项目中使用 TDLib

Nim 可以使用 TDLib。

使用示例与 Nim 封装见 telenim。

在 Clojure 项目中使用 TDLib

Clojure 可以通过 JSON 接口使用 TDLib。

Clojure 绑定示例见 clojure-tdlib-json-wrapper。

在 Emacs Lisp 项目中使用 TDLib

Emacs Lisp 可以使用 TDLib。

GNU Emacs Telegram 客户端示例见 telega.el。

在 Elixir 项目中使用 TDLib

Elixir 可以使用 TDLib。

使用示例及 Elixir 客户端见 Elixir TDLib。该库包含全部 TDLib API 方法和对象的自动生成类及完整文档。

在 Vala 项目中使用 TDLib

Vala 可以使用 TDLib。

使用示例见 TDLib Vala。

在 1С:Enterprise 中使用 TDLib

1С 可以使用 TDLib。

使用示例见 TDLib bindings for 1С:Enterprise 和 e1c.tAgents。

在 C 项目中使用 TDLib

C 可以通过 JSON 接口使用 TDLib,支持静态或动态链接。

使用示例见 easy-tg。

也可以尝试官方 C 客户端,它曾用于 telegram-cli 的一个未公开、基于 TDLib 的版本。

在汇编项目中使用 TDLib

汇编语言可以通过 JSON 接口使用 TDLib。

参见 nasm_tdjson_example。

也可查看 gas_tdjson_example、arm_tdjson_example 和 arm64_tdjson_example。

在 G 项目中使用 TDLib

TDLib 可以用于 LabVIEW 开发环境中的 G 图形化编程语言。

使用示例见 TDLib bindings for LabVIEW。

从其他编程语言中使用 TDLib

其他语言可借助 tdbot 或 TDLib JSON CLI 使用 TDLib。这些工具通过 stdin 和 stdout,以 JSON 接口与 TDLib 交互。例如,这种方式也可用于 Brainfuck;上游作者写道,他们尚未看到通过 TDLib、用 Brainfuck 发送 Telegram 消息的示例。

另一种方式是在你的编程语言中直接使用 TDLib JSON 接口。

如果你制作了有价值的 TDLib 绑定或某种语言的 TDLib 客户端,希望将它加入此示例列表,可以向上游提交 issue。

原文许可与归属 · BSL-1.0

TDLib contributors · 完整许可文件

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.