【问题标题】:Using SendRequestAsync function in TLSharp Library在 TLSharp 库中使用 SendRequestAsync 函数
【发布时间】:2017-03-27 14:46:02
【问题描述】:

我发现,到目前为止,TLSharp 库是封装 C# 实现的 Telegram API 方法的最佳库。

很遗憾,许多 Telegram 方法并未在此库中实现,但它们简化了实现这些方法的方式。 TLSharp 文档说:

您可以在 SendRequestAsync 函数的帮助下调用任何方法。例如发送用户输入方法:

  //Create request 
  var req = new TLRequestSetTyping()
  {
    action = new TLSendMessageTypingAction(),
    peer = peer
  };

  //run request, and deserialize response to Boolean
  return await SendRequestAsync<Boolean>(req);

现在我想知道我们如何使用 SendRequestAsync 函数实现其他 Telegram API 方法。

【问题讨论】:

    标签: c# telegram


    【解决方案1】:

    您确定 TLSharp 不会以其众多的消息类型覆盖您的通话吗? 尝试在TLSharp sources 中搜索已实现的消息类。查找从 'TLRequest...' 开始的文件,例如TLRequestDeleteHistory、TLRequestCreateChat 等。

    如果你需要的方法确实缺失,你可以像 TLSharp 一样实现它:

    1. 检查应在请求中发送哪些字段。参考telegram API
    2. 从抽象类 TLMethod 继承您的自定义消息。
    3. 在基类中实现以下抽象属性和方法:

      • public abstract int Constructor { get; }
      • public abstract void SerializeBody(BinaryWriter bw);
      • public abstract void DeserializeBody(BinaryReader br);
      • public abstract void deserializeResponse(BinaryReader stream);

    Constructor 属性应该只为方法返回一些 uniq 整数。

    SerializeBody 应该将步骤 1 中的字段写入BinaryWriter

    DeserializeBody 应该从BinaryReader 读取它们。

    deserializeResponse 可以直接打电话给ObjectUtils.DeserializeObject()

    public override void deserializeResponse(BinaryReader br)
    {
        Response = (TLAbsUpdates)ObjectUtils.DeserializeObject(br);
    }
    

    您可以使您的实现类似于现有的 TLSharp 方法,例如TLRequestForwardMessage.

    更新:

    这是将用户添加到 Telegram 聊天或频道的代码:

    await client.SendRequestAsync<TLAbsUpdates>(new TLRequestAddChatUser()
    {
        //  Chat or channel ID
        chat_id = chatId,
        //  User ID to be added
        user_id = userId,
        //  Number of last messages to be forwarded
        fwd_limit = forwardLimit,
    });
    

    有关详细信息,请参阅messages.addChatUser 的 Telegram API 页面。

    【讨论】:

    • 我想要的方法在messages目录中实现,但在TelegramClient.cs中没有实现。所以它在 TelegramClient 类中不可用。 1-我不明白如何在调用方法时实现请求的字段。 2-方法与其调用方法返回的整数之间有什么关系。
    • 您要发送什么请求?我将发布通话示例。
    • 我需要实现 channels.joinChannel
    • 感谢您的帮助。您的指南非常有帮助。现在的主要问题是 Telegram API 页面中没有记录通道方法。遇到这样的问题我该怎么办?
    • 不幸的是,Telegram API 没有涵盖所有功能,而且文档也很差。我不必处理频道呼叫。如果您真的需要它,我建议您查看 Telegram 的其他 API(Java、C++、...)并检查它们是否提供您需要的方法。如果他们不这样做,那么 Telegram API 可能根本没有涵盖它。如果他们这样做,您可以深入研究来源并检查实际发送的请求。然后,您可以按照我的回答中的步骤进行操作。相当艰难的道路,同意。
    猜你喜欢
    • 2021-12-11
    • 2023-04-06
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多