使用 Java 桌面应用程序的 Telegram API?

Posted

技术标签:

【中文标题】使用 Java 桌面应用程序的 Telegram API?【英文标题】:Using Telegram API for Java Desktop App? 【发布时间】:2014-05-03 08:11:58 【问题描述】:

我对 Java 编程并不陌生,但我从未使用过外部库等。现在我想为“Telegram”开源消息传递平台开发一个桌面客户端,但当涉及到API 用法。

在https://core.telegram.org/api 找到了很多关于 Telegram API 的文档,我已经从 github 下载了 mtproto、telegram-api 和 tl-core,并使用 gradle 从源代码编译了我自己的库 jar。同样,我已经编写了一个小应用程序,用户单击一个按钮并提示输入他的电话号码,为此我使用了 Java-swing-Libraries 和 ActionListener。

现在应该检查用户输入的电话号码是否已经注册,auth.checkPhone 方法似乎可以做到这一点。但是如何在我的 Eclipse 项目中引用它呢?我在任何课程中都没有看到任何方法“checkPhone”!我该怎么办?

请帮助我,我无法帮助自己,我拼命地陷入了我的项目中。即使是一个小提示也会有所帮助。

提前致谢, 卢卡斯

【问题讨论】:

您好,您可以在这里查看我的问题:***.com/questions/22903957/… 看看是否有帮助。 :) 【参考方案1】:

基本上,您必须填写 GitHub 上 ex3ndr/telegram-api 存储库中给出的代码中的空白。如果你有你构建的库 Jar 文件和 Eclipse 项目的 Java 构建路径上的 tl-api-v12.jarfile,那么请查看 README 的 RPC Calls 部分和

首先您需要使用您的API credentials 设置一个AppInfo 对象,然后您还必须创建一些实现AbsApiStateApiCallback 接口的新类。一旦这些可用,您可以创建 TelegramApi 对象并对 Telegram 服务进行 RPC 调用,如下所示;在这种情况下使用建议的auth.checkPhone 方法:

// TODO set up AbsApiState, AppInfo and ApiCallback objects
TelegramApi api = new TelegramApi(state, appInfo, apiCallback);

// Create request
String phoneNumber = "1234567890";
TLRequestAuthCheckPhone checkPhone = new TLRequestAuthCheckPhone(phoneNumber);

// Call service synchronously
TLCheckedPhone checkedPhone = api.doRpcCall(checkPhone);
boolean invited = checkedPhone.getPhoneInvited();
boolean registered = checkedPhone.getPhoneRegistered();
// TODO process response further

TelegramApi 对象代表您与远程服务的连接,这是一种 API 的请求响应样式。 RPC 调用是通过doRpcCall 方法进行的,该方法从org.telegram.api.requests 包(示例中的TLRequestAuthCheckPhone 类型)中获取一个请求对象,并填充适当的参数。一个响应对象(上面的TLCheckedPhone)会在结果可用时返回。

在异步调用的情况下,该方法立即返回,并在结果可用时执行onResult回调方法:

// Call service aynchronously
api.doRpcCall(checkPhone, new RpcCallbackEx<TLCheckedPhone>() 
    public void onConfirmed()  
    public void onResult(TLCheckedPhone result) 
        boolean invited = checkedPhone.getPhoneInvited();
        boolean registered = checkedPhone.getPhoneRegistered();
        // TODO process response further
    
    public void onError(int errorCode, String message)  
);

【讨论】:

嘿,很抱歉自从我上次回复以来已经有一段时间了,我放弃了这个项目的工作,直到我看到有人回答了我的旧帖子。我想,我最了解如何开始这个项目,但现在我被困在 "apiStorage" 点上。在 ex3ndr's-gitHub-page 的 readme.md 中说,“Telegram-Api”-Object 需要一个“ApiStorage”-object,由 “new MyApiStorage” 创建。但是我找不到那个“MyApiStorage”类,那我应该放什么? 此外,我无法使用 gradle 构建库。我从 GitHub 下载了资源并按照自述文件中的说明重命名了文件夹,但 gradle 总是失败 并出现“* 出了什么问题:无法确定任务 ':test' 的依赖关系。 > 未找到名称为“默认”的配置。我不知道如何解决这个问题,你能帮忙吗?现在我已经将原始资源文件复制到我的 eclipse 项目中,但必须有办法解决这个 gradle 问题。我会很感激任何答案,在此先感谢,卢卡斯 MyApiStorage 位是复杂的部分。您需要创建一个实现org.telegram.api.engine.storage.AbsApiState 接口的类,并将其用作构造函数的第一个参数。您的 IDE 应该能够帮助您构建一个框架类以帮助您入门…… 你好,grkvlt!我已经能够弄清楚这一点,但我被困在这里如何发送和接收消息。请告知如何进行。 LukeLR,检查电报机器人示例应用程序!它解决了 urs 的一些问题! 您好,我已阅读并尝试实现此处给出的示例,但不幸的是它不起作用。它还说我唯一要做的就是填写示例应用程序中的空白,但 id 似乎没有任何“空白”要填写。命令行中的示例是用 C 语言编写的,所以恐怕它与我需要的情况不匹配。我解决了 AbsApiState 的问题,但我得到了一个 TimeoutException。同样,这些超时之一似乎是由 Linux 引起的(java 必须使用 /dev/urandom 而不是 /dev/random),但在那之后我又得到了另一个超时。对不起,这对我来说太多了【参考方案2】:

或者看看这个 API https://github.com/pengrad/java-telegram-bot-api

使用起来真的很简单

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效

以上是关于使用 Java 桌面应用程序的 Telegram API?的主要内容,如果未能解决你的问题,请参考以下文章

java 使用带有ReplyMarkupKeyboard的Telegram API发送SendMessage方法的示例

Android Telegram App --> java.lang.UnsatisfiedLinkError: No implementation found for void

markdown 使用Telegram Bot注册您的应用程序

如何与 Telegram API 交互

我的 Telegram Bot 无法读取另一个 Telegram Bot 发送的消息

使用python-telegram-bot模块转发telegram机器人消息到钉钉平台