文件夹
Telegram 允许根据聊天类型、静音状态或其他自定义条件将聊天放入文件夹中,这得益于文件夹黑名单和白名单:这些文件夹也可以与其他用户共享。
文件夹
模式:
dialogFilter#aa472651 flags:# contacts:flags.0?true non_contacts:flags.1?true groups:flags.2?true broadcasts:flags.3?true bots:flags.4?true exclude_muted:flags.11?true exclude_read:flags.12?true exclude_archived:flags.13?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector<InputPeer> include_peers:Vector<InputPeer> exclude_peers:Vector<InputPeer> = DialogFilter; dialogFilterChatlist#96537bd7 flags:# has_my_invites:flags.26?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector<InputPeer> include_peers:Vector<InputPeer> = DialogFilter; dialogFilterDefault#363293ae = DialogFilter;dialogFilterSuggested#77744d4a filter:DialogFilter description:string = DialogFilterSuggested;updateDialogFilter#26ffde7d flags:# id:int filter:flags.0?DialogFilter = Update; updateDialogFilterOrder#a5d72105 order:Vector<int> = Update; updateDialogFilters#3504914f = Update;messages.dialogFilters#2ad93719 flags:# tags_enabled:flags.0?true filters:Vector<DialogFilter> = messages.DialogFilters;---functions---messages.getDialogFilters#efd48c89 = messages.DialogFilters; messages.getSuggestedDialogFilters#a29cd42c = Vector<DialogFilterSuggested>; messages.updateDialogFilter#1ad4a04a flags:# id:int filter:flags.0?DialogFilter = Bool; messages.updateDialogFiltersOrder#c563c1e4 order:Vector<int> = Bool;help.getAppConfig#61e3f854 hash:int = help.AppConfig;
在API中,文件夹被称为“对话框过滤器”。
在用户界面中,文件夹通常以选项卡的形式呈现。
创业初期,客户会拨打以下电话:
- messages.getDialogFilters获取先前配置的文件夹列表。
- messages.getSuggestedDialogFilters获取建议的文件夹组合列表。
- help.getAppConfig获取应用程序特定的配置参数。
help.getAppConfig返回结果中dialog_filters_tooltipJSON 键下的布尔值可用于确定是否应立即向用户显示文件夹工具提示。然后,用户界面应显示建议的文件夹组合列表。
配置完成后,应用会调用messages.updateDialogFilter来创建或更新现有文件夹。
根据dialogFilter/dialogFilterChatlist构造函数,文件夹有多个标志,可以组合使用这些标志来确定哪些聊天应该包含在文件夹内(或从文件夹中排除),文件夹图标使用的表情符号以及文件夹名称。
文件夹还可以包含最多 个置顶聊天,具体数量由客户端配置dialogs_folder_pinned_limit_*决定。
dialogFilterChatlist构造函数用于表示导入的可共享文件夹。
要重新排列现有文件夹,应使用messages.updateDialogFiltersOrder和各个对话框筛选器的 ID。
高级用户还可以使用dialogFilterDefault构造函数,该构造函数仅在重新排列文件夹以指示默认(所有聊天)文件夹时使用。
要删除文件夹,请使用messages.updateDialogFilter,但不要填充filterflag 字段。
客户端可以接收由其他客户端在修改文件夹信息时生成的包含新筛选信息的updateDialogFilter和updateDialogFilterOrder
更新。
客户端还可以接收updateDialogFilters ,在这种情况下,应使用messages.getDialogFilters手动重新获取文件夹信息。
文件夹标签
dialogFilter#aa472651 flags:# contacts:flags.0?true non_contacts:flags.1?true groups:flags.2?true broadcasts:flags.3?true bots:flags.4?true exclude_muted:flags.11?true exclude_read:flags.12?true exclude_archived:flags.13?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector<InputPeer> include_peers:Vector<InputPeer> exclude_peers:Vector<InputPeer> = DialogFilter; dialogFilterChatlist#96537bd7 flags:# has_my_invites:flags.26?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector<InputPeer> include_peers:Vector<InputPeer> = DialogFilter;updateDialogFilters#3504914f = Update;messages.dialogFilters#2ad93719 flags:# tags_enabled:flags.0?true filters:Vector<DialogFilter> = messages.DialogFilters;---functions---messages.toggleDialogFilterTags#fd2dda49 enabled:Bool = Bool; messages.getDialogFilters#efd48c89 = messages.DialogFilters;
可以使用messages.toggleDialogFilterTags方法为所有文件夹启用或禁用文件夹标签(仅限企业用户)。
如果切换按钮的新值不同,该方法将向所有其他当前已登录的会话发出updateDialogFilters消息,这将触发对messages.toggleDialogFilterTags的 调用,以在messages.dialogFilters中加载切换按钮的新值。tags_enabled
如果启用文件夹标签,客户端应在所有对话条目的最新消息预览下方添加文件夹标签(对话条目所属 的每个文件夹一个标签,但dialogFilterDefault表示的“所有聊天”文件夹及其标签除外)。color=-1
这些文件夹标签应包含文件夹名称,并应使用color对话框文件夹条目中指定的颜色。
颜色为 -1 到 6 之间的整数;如果为 -1,则标签不得显示在对话框列表中;索引 0 到 6 应使用红色、橙色、紫色、绿色、青色、蓝色、粉色(即与随机回退消息强调色相同的颜色)。
只有拥有高级订阅且启用标签功能的color用户才能更改标签。
共享文件夹
inputChatlistDialogFilter#f3e0da33 filter_id:int = InputChatlist;exportedChatlistInvite#0c5181ac flags:# title:string url:string peers:Vector<Peer> = ExportedChatlistInvite;chatlists.exportedChatlistInvite#10e6e3a6 filter:DialogFilter invite:ExportedChatlistInvite = chatlists.ExportedChatlistInvite;chatlists.exportedInvites#10ab6dc7 invites:Vector<ExportedChatlistInvite> chats:Vector<Chat> users:Vector<User> = chatlists.ExportedInvites;chatlists.chatlistInviteAlready#fa87f659 filter_id:int missing_peers:Vector<Peer> already_peers:Vector<Peer> chats:Vector<Chat> users:Vector<User> = chatlists.ChatlistInvite; chatlists.chatlistInvite#f10ece2f flags:# title_noanimate:flags.1?true title:TextWithEntities emoticon:flags.0?string peers:Vector<Peer> chats:Vector<Chat> users:Vector<User> = chatlists.ChatlistInvite;chatlists.chatlistUpdates#93bd878d missing_peers:Vector<Peer> chats:Vector<Chat> users:Vector<User> = chatlists.ChatlistUpdates;---functions---chatlists.exportChatlistInvite#8472478e chatlist:InputChatlist title:string peers:Vector<InputPeer> = chatlists.ExportedChatlistInvite;chatlists.getExportedInvites#ce03da83 chatlist:InputChatlist = chatlists.ExportedInvites; chatlists.editExportedInvite#653db63d flags:# chatlist:InputChatlist slug:string title:flags.1?string peers:flags.2?Vector<InputPeer> = ExportedChatlistInvite; chatlists.deleteExportedInvite#719c5c5e chatlist:InputChatlist slug:string = Bool;chatlists.checkChatlistInvite#41c10fff slug:string = chatlists.ChatlistInvite; chatlists.joinChatlistInvite#a6b1e39a slug:string peers:Vector<InputPeer> = Updates;chatlists.getChatlistUpdates#89419521 chatlist:InputChatlist = chatlists.ChatlistUpdates; chatlists.joinChatlistUpdates#e089f8f5 chatlist:InputChatlist peers:Vector<InputPeer> = Updates; chatlists.hideChatlistUpdates#66e486fb chatlist:InputChatlist = Bool;chatlists.getLeaveChatlistSuggestions#fdbcd714 chatlist:InputChatlist = Vector<Peer>; chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector<InputPeer> = Updates;
可以使用聊天文件夹深度链接来共享文件夹。
这些链接通过调用`chatlists.exportChatlistInvite`生成,需要传入要导出的文件夹 ID 以及peers要包含在共享文件夹中的列表。数组
中只能指定频道和群组/超级群组;这些频道和群组必须是公开的,或者用户必须拥有管理邀请链接的权限。调用该方法时,peers普通群组将自动转换为超级群组
。
还可以使用 `.` 为共享链接指定一个可选名称title。
使用chatlists.getExportedInvites列出为文件夹生成的所有链接,使用chatlists.editExportedInvite编辑peers特定链接的标题或列表,使用chatlists.deleteExportedInvite撤销导出的链接,防止新用户导入它。
Premium用户/非Premium用户可创建的每个文件夹的最大邀请数由chatlist_invites_limit_default/chatlist_invites_limit_premium客户端配置参数 »指定。
使用`chatlists.checkChatlistInvite`获取聊天文件夹深度链接的信息,然后再使用`chatlists.joinChatlistInvite`导入该链接,并指定peers要加入的频道和群组(排除无法访问的频道/超级群组,例如用户不能加入已被封禁的超级群组/频道,这对应于 `channelForbidden`构造函数)。
如果用户无法加入peers文件夹中的任何频道或群组,则无法导入该文件夹。
Premium/非Premium用户可加入的最大共享文件夹数量由chatlists_joined_limit_default客户chatlists_joined_limit_premium端配置参数指定。
导入文件夹的用户应通过调用`chatlists.getChatlistUpdates`函数(最多每隔chatlist_update_period几秒调用一次,客户端配置参数 »)来获取添加到对等列表中的节点。
如果返回的missing_peers列表不为空,客户端应将其显示给用户,用户可以选择加入全部或部分节点(排除无法访问的频道/超级群组),并将选择加入的节点传递给 `chatlists.joinChatlistUpdates`peers函数的参数。如果在排除无法访问的节点和用户取消选择的节点后,列表为空,则调用`chatlists.hideChatlistUpdates`函数而不是`chatlists.joinChatlistUpdates`函数。
peers
删除导入的文件夹时,应在删除之前向用户显示包含的对等节点列表,其中chatlists.getLeaveChatlistSuggestions中列出的对等节点已预先标记为要删除:然后,用户在调用 chatlists.leaveChatlist 删除文件夹时,可以选择删除或保留文件夹中的部分或全部群组和频道,并在文件夹中的频道和群组列表中指定peers也要删除的频道和群组。
对等文件夹
该 API 还提供了一种识别同伴群体的方法,用于存档聊天记录。
模式:
inputFolderPeer#fbd2c296 peer:InputPeer folder_id:int = InputFolderPeer;folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer;updateFolderPeers#19360dc0 folder_peers:Vector<FolderPeer> pts:int pts_count:int = Update;updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer; inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer;dialogPeer#e56dbf05 peer:Peer = DialogPeer; dialogPeerFolder#514519e2 folder_id:int = DialogPeer;---functions---folders.editPeerFolders#6847d0ab folder_peers:Vector<InputFolderPeer> = Updates;
API 对等文件夹通常仅用于存档聊天,并且对于区分对等组非常方便,因为大多数与对等相关的构造函数(更新、聊天信息)将包含分配folder_id给指定聊天的文件夹。
在 Telegram 应用中,API 对等文件夹仅用于实现聊天存档,由 标识folder_id1;所有其他对等文件夹folder_id0默认位于 中;folder_id目前不允许其他文件夹。
- folders.editPeerFolders可用于向对等文件夹添加和删除对等节点。
两种方法都返回一个更新构造函数,其中包含一个updateFolderPeers对象,该对象记录了已移动的对等节点的新信息folder_id。
客户端还可以收到由其他客户端在修改对等文件夹时生成的updateFolderPeers对象,作为常规更新。
客户端可以使用InputDialogPeer来引用特定的聊天,或者引用对等文件夹中的所有聊天:服务器会在某些构造函数中返回DialogPeer以达到相同的目的。