Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理Telegram.org API模式中未定义的类型,如;MessageMedia“;_Api_Telegram - Fatal编程技术网

处理Telegram.org API模式中未定义的类型,如;MessageMedia“;

处理Telegram.org API模式中未定义的类型,如;MessageMedia“;,api,telegram,Api,Telegram,在telegram.org api模式中,消息类型定义如下: 消息#c09be45f flags:#out:flags.1?真提到:flags.4?真媒体_未读:flags.5?真静默:flags.13?真帖子:flags.14?真id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader通过_bot_id:flags.11?int回复_msg_id:flags.3?int日期:int消息:string媒体:fl

在telegram.org api模式中,
消息
类型定义如下:

消息#c09be45f flags:#out:flags.1?真提到:flags.4?真媒体_未读:flags.5?真静默:flags.13?真帖子:flags.14?真id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader通过_bot_id:flags.11?int回复_msg_id:flags.3?int日期:int消息:string媒体:flags.9?MessageMedia回复_标记:flags.6?ReplyMarkup实体:标志。7?矢量视图:标志。10?整数编辑日期:标志。15?整数=消息

注意可选参数
media:flags.9?MessageMedia
被定义为类型
MessageMedia
。但是没有任何地方定义了
MessageMedia
,因此我的客户机不知道如何序列化/反序列化它


什么类型是
MessageMedia
,我如何处理可能未定义的其他类型?

理解这一点的最佳方式是
media:flags.9?MessageMedia
表示一般类型,或者如他们所说的
基本类型,可以是以下任何类型:

messageMediaEmpty#3ded6320 = MessageMedia;
messageMediaPhoto#3d8ce53d photo:Photo caption:string = MessageMedia;
messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia;
messageMediaUnsupported#9f84f49e = MessageMedia;
messageMediaDocument#f3e02ea8 document:Document caption:string = MessageMedia;
messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
messageMediaVenue#7912b71f geo:GeoPoint title:string address:string provider:string venue_id:string = MessageMedia;

这种模式在电报API中很常见理解这一点的最佳方式是
媒体:flags.9?MessageMedia
表示一般类型,或者如他们所说的
基本类型,可以是以下任何类型:

messageMediaEmpty#3ded6320 = MessageMedia;
messageMediaPhoto#3d8ce53d photo:Photo caption:string = MessageMedia;
messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia;
messageMediaUnsupported#9f84f49e = MessageMedia;
messageMediaDocument#f3e02ea8 document:Document caption:string = MessageMedia;
messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
messageMediaVenue#7912b71f geo:GeoPoint title:string address:string provider:string venue_id:string = MessageMedia;

这种模式在电报API中很常见,但即使是基类型最终也必须解析为已知类型(Int、Long、String等),这样它们才能被序列化/反序列化,对吗?在我的例子中,我目前正在进行反序列化,稍后我将担心序列化。如果
MessageMedia
可以是上述任何一种类型,我如何知道要反序列化的类型?@KennyCason反序列化是我在为
MessageMedia
之类的字段读取描述符时的意思,您将找不到
MessageMedia
,相反,它将是一个
MessageMedia
variants如何知道是哪一个?是服务器返回的id号吗?@KennyCason您正在按照接收的顺序解码电报中的字节流,并且它总是按照给定类型的预期字段顺序进行编码。这一点非常好。只要将返回的字符串转换为io.BytesIO,您就可以一次解压一个元素,前提是您知道预期的数据类型(int、string等),并且这是协议中已知的。但即使是基类型最终也必须解析为已知的类型(int、Long、string等),以便可以对它们进行序列化/反序列化,对吗?在我的例子中,我目前正在进行反序列化,稍后我将担心序列化。如果
MessageMedia
可以是上述任何一种类型,我如何知道要反序列化的类型?@KennyCason反序列化是我在为
MessageMedia
之类的字段读取描述符时的意思,您将找不到
MessageMedia
,相反,它将是一个
MessageMedia
variants如何知道是哪一个?是服务器返回的id号吗?@KennyCason您正在按照接收的顺序解码电报中的字节流,并且它总是按照给定类型的预期字段顺序进行编码。这一点非常好。只要将返回的字符串转换为io.BytesIO,您就可以一次解包一个元素,前提是您知道预期的数据类型(int、string等),并且这是协议中已知的。