在 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一样实现它:
- 检查应在请求中发送哪些字段。请参阅 telegram API 以供参考。
- 从摘要 class 继承您的自定义消息
TLMethod
。
实现以下在基础 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 页面。
我发现,到目前为止,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一样实现它:
- 检查应在请求中发送哪些字段。请参阅 telegram API 以供参考。
- 从摘要 class 继承您的自定义消息
TLMethod
。 实现以下在基础 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 页面。