使用动画骰子
Telegram 支持发送动态骰子表情符号。这是通过使用骰子构造函数实现的:
inputMediaDice#e66fbf7b emoticon:string = InputMedia; messageMediaDice#3f7ee58b value:int emoticon:string = MessageMedia;inputStickerSetDice#e67f520e emoticon:string = InputStickerSet;messages.stickerSet#6e153f16 set:StickerSet packs:Vector<StickerPack> keywords:Vector<StickerKeyword> documents:Vector<Document> = messages.StickerSet;---functions---messages.sendMedia#ac55d9c1 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> schedule_date:flags.10?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates;messages.getStickerSet#c8a0ec74 stickerset:InputStickerSet hash:int = messages.StickerSet;help.getAppConfig#61e3f854 hash:int = help.AppConfig;
启动时,客户端应使用 `help.getAppConfig` 获取应用配置。
然后,对于emojies_send_dice字段中包含的每个骰子表情符号,客户端应调用 `messages.getStickerSet`方法获取骰子表情符号贴纸集,并将正确填充的`inputStickerSetDice`传递给该stickerset字段。
返回的贴纸集将包含一组动画贴纸,每个骰子点数对应一个贴纸,此外还有一个循环播放的初始贴纸,用于在实际发送骰子之前向用户显示预览。
如果用户尝试发送指定表情符号中的单个表情符号emojies_send_dice,则应使用messages.sendMedia发送骰子表情符号,并将骰子表情符号提供给该emoticon字段。
接收到的骰子贴纸将以messageMediaDice构造函数的形式发送,同时还会收到一个随机生成的服务器端值,该值介于 1 到此类型骰子允许的最大值之间。
客户端应根据指定的值显示正确的骰子动画贴纸:由于骰子值从 1 开始,并且骰子贴纸集中的第一个动画贴纸是预览,因此value可以直接使用索引documents从动画贴纸集中获取贴纸数组。
配置emojies_send_dice_success参数包含除基本表情符号之外的更多关于骰子表情符号的信息
:
"emojies_send_dice_success": {"\ud83c\udfaf": {"value": 6,"frame_start": 62},"\ud83c\udfc0": {"value": 5,"frame_start": 110}}
每个骰子表情符号都指定了最大“获胜”值,以及显示烟花特效的帧数
。请注意,骰子动画贴纸在首次
发送/接收后应仅循环播放一次;点击骰子贴纸应弹出窗口,邀请用户发送同类型的新骰子。
老虎机
老虎机
骰子贴纸的实现方式略有不同:它value不是直接用于索引贴纸数组,而是按如下方式使用。
该value值由三个 2 位值组成,每个值指示要在三个槽位中显示的动画贴纸,每个值递增 1。
该stickers数组的组成如下:
- 0 => 老虎机背景
- 1 => 老虎机中奖背景,在中奖后显示
- 2 => 老虎机框架和把手,仅供开始时玩一次
- 3 => 左侧槽位中奖 7
- 4..7 => 左侧非中奖选项
- 8 => 左侧插槽旋转动画
- 9 => 中心槽中奖 7
- 10..13 => 中心槽位非中奖选项
- 14 => 中心槽旋转动画
- 15 => 右侧老虎机中奖 7
- 16..19 => 右侧老虎机非中奖选项
- 20 => 右侧老虎机旋转动画
动画播放方法(所有贴纸直接重叠放置即可,无需特殊摆放):
- 冻结单帧背景(0)
- 播放句柄动画(2)一次
- 播放这三个旋转老虎机动画(8,,14)20一次
-
以下三种老虎机动画各播放一次:
-
如果我们处于领先地位value == 64:
- 左侧槽位:选择3
- 中心槽:选择9
- 右侧插槽:选择15
-
否则,考虑到map := [1, 2, 3, 0]:
- 左侧槽位:选择4 + map[(value-1) & 3]
- 中心槽:选择10 + map[((value-1) >> 2) & 3]
- 右侧插槽:选择16 + map[((value-1) >> 4) & 3]
-
如果我们处于领先地位value == 64:
- 如果我们处于胜利状态value=64,则将背景(0)替换为1。
示例实现:tdesktop。