在 TLSharp 库中使用 SendRequestAsync 函数

Using SendRequestAsync function in TLSharp Library

我发现,到目前为止,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 方法。

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

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

  1. 检查应在请求中发送哪些字段。请参阅 telegram API 以供参考。
  2. 从摘要 class 继承您的自定义消息 TLMethod
  3. 实现以下在基础 class:

    中抽象的属性和方法
    • public abstract int Constructor { get; }
    • public abstract void SerializeBody(BinaryWriter bw);
    • public abstract void DeserializeBody(BinaryReader br);
    • public abstract void deserializeResponse(BinaryReader stream);

Constructor 属性 应该只是 return 该方法的一些唯一整数。

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 页面。