Vovó API 1
由 Vovó 自己的代码生成,所以总与此版本一致。来自观众的文字始终以纯文本到达,绝不会是 HTML。
简单事件
在所有平台上都一样;{platform} 说明是哪个平台。只有某个平台才有的内容,请使用下方它自己的事件。
follow
有人关注了频道。 来源 twitch.follow.
user(文本): 是谁做的,以平台上显示的名字为准。platform(平台): 发生在哪里。
sub
有人订阅、续订或获赠了订阅。 来源 twitch.sub.
user(文本): 是谁做的,以平台上显示的名字为准。tier(数字): 1、2 或 3。months(数字): 累计订阅月数。gift(是或否): 是否为赠送。platform(平台): 发生在哪里。
raid
另一个频道突袭了这个频道。 来源 twitch.raid.
user(文本): 是谁做的,以平台上显示的名字为准。viewers(数字): 带来了多少人。platform(平台): 发生在哪里。
chat
聊天中的一条消息。 来源 twitch.chat.
user(文本): 是谁做的,以平台上显示的名字为准。text(文本): 消息内容,为纯文本。parts(文本和表情): 按顺序分段的消息:每段的text,表情还会附带图片image,由 Vovó 提供。vovo.chat.parts(e)会把它们变成可显示的节点。platform(平台): 发生在哪里。
tip
有人送了钱或 Bits。 来源 twitch.cheer.
user(文本): 是谁做的,以平台上显示的名字为准。amount(数字): 金额,单位见currency。currency(文本):bits,或货币代码,例如BRL。text(文本): 消息内容,为纯文本。platform(平台): 发生在哪里。
Twitch
twitch.follow
Twitch 上的一次关注。
user(文本): 是谁做的,以平台上显示的名字为准。
twitch.sub
Twitch 上的订阅、续订或赠送订阅。
user(文本): 是谁做的,以平台上显示的名字为准。tier(数字): 1、2 或 3。months(数字): 累计订阅月数。gift(是或否): 是否为赠送。gifter(文本): 若为赠送,赠送者是谁。text(文本): 消息内容,为纯文本。
twitch.raid
Twitch 上的一次突袭。
user(文本): 是谁做的,以平台上显示的名字为准。viewers(数字): 带来了多少人。
twitch.chat
Twitch 上的一条聊天消息。
user(文本): 是谁做的,以平台上显示的名字为准。text(文本): 消息内容,为纯文本。parts(文本和表情): 按顺序分段的消息:每段的text,表情还会附带图片image,由 Vovó 提供。vovo.chat.parts(e)会把它们变成可显示的节点。color(文本): 名字的颜色,#RRGGBB。badges(文本): 徽章,用逗号分隔:moderator,subscriber。persona(是或否): 当这一行是角色自己用其账号在聊天中写的时为 true。
twitch.viewers
有多少人在看直播。直播期间大约每分钟读取一次 Twitch;人数变化时会收到此事件,直播结束时会收到 live 为 false 的事件。
viewers(数字): 现在有多少人在看。live(是或否): 直播期间为 true。
twitch.cheer
Twitch 上送出的 Bits。
user(文本): 是谁做的,以平台上显示的名字为准。bits(数字): 多少 Bits。text(文本): 消息内容,为纯文本。
twitch.redemption
有人兑换了频道积分奖励。
user(文本): 是谁做的,以平台上显示的名字为准。reward(文本): 奖励的标题。reward_id(文本): Twitch 中奖励的 id,重命名后保持不变。input(文本): 对方输入的内容(适用于需要输入文字的奖励)。redemption(文本): Twitch 中此次兑换的 id:与它的twitch.redemption.resolved中相同。
twitch.redemption.resolved
奖励队列中等待的一次兑换被批准或拒绝(拒绝会退还积分)。
user(文本): 是谁做的,以平台上显示的名字为准。reward(文本): 奖励的标题。reward_id(文本): Twitch 中奖励的 id,重命名后保持不变。input(文本): 对方输入的内容(适用于需要输入文字的奖励)。status(文本):approved(已批准)或rejected(已拒绝)。redemption(文本): Twitch 中此次兑换的 id,与它的twitch.redemption中相同。
twitch.hypetrain
热度列车开始、推进或结束了。
level(数字): 当前等级。progress(数字): 本级已获得的点数。goal(数字): 本级所需的点数。ended(是或否): 是否刚刚结束。
来自 Vovó 和 OBS
button
它在控制板上的按钮被按下了。
label(文本): 按钮的标签。
hotkey
按下了一个全局快捷键,无论游戏是否在前台。触发器用条件指明组合键,keys 为 Ctrl+Alt+1,配置文件处于活动状态时应用会监听它。
keys(文本): 组合键,例如Ctrl+Alt+1。
timer
定时器触发了。触发器用条件设置间隔,every 为秒数(5 或更大);不设置则每分钟触发一次。从触发器出现时开始计时,紧急期间暂停。
every(数字): 间隔,以秒为单位。
control
动作的某个控件在控制板上被更改了。新值也会保存在 vovo.state 中该控件的键下,因此之后打开的页面也会显示。提供控件的动作无需把它添加为触发器即可收到。
key(文本): 控件的键,即动作声明的那个。value(控件的值): 新值:true 或 false、一个选项、一个整数或一行文本。
settings
在“自定义”中对动作设置的选择发生了变化:vovo.settings、它的 --vovo-<key> 变量和 data-vovo-<key> 属性已是新值。声明了设置的动作无需把它添加为触发器即可收到。
key(文本): 设置的键;当所有设置都恢复为动作原样时为空。
panel
在动作的面板中进行了操作(清单中的 panel,显示在侧边栏的“面板”里):按下按钮、提交表单,或按下列表某行的按钮。与 control 一样,有面板的动作无需把它添加为触发器即可收到;只有操控直播的人能触发它。
name(文本): 按钮、表单或行按钮的名称,即面板声明的名称。values(控件的值): 表单的字段,按键排列,每个为一行文本;按钮时为空。item(控件的值): 对于列表的一行,即它显示的条目,与状态中保存的一致。index(数字): 对于列表的一行,即它在列表中的位置,从 0 开始;否则为 -1。
webhook
某个入站 webhook 被调用了。
hook(文本): webhook 的名称。data(数据): 发送来的内容,不可信:只能作为文本显示。
obs.scene
OBS 切换了场景。
scene(文本): 现在正在播出的场景。previous(文本): 之前的场景。
media.track
这台电脑上正在播放的内容变了:换了曲目,或播放、暂停。来自任何会告诉 Windows 自己在播放什么的应用(Spotify、浏览器、播放器)。
title(文本): 曲目标题。artist(文本): 表演者。album(文本): 所属专辑(如已知)。playing(是或否): 播放时为 true;暂停或停止时为 false。art(文本): 封面地址,可用于<img src>;没有时为空。source(文本): 播放所在的应用。
audio.level
麦克风的音量,变化时每秒约 20 次:可用于会动的嘴、音量表、光晕。只有在打开的叠加层显示着等待此事件的动作时,Vovó 才会收听;声音本身绝不会离开电脑,只有音量。
level(数字): 音量,从 0(静音)到 1(最大),按人耳的感知刻度。peak(数字): 自上一次以来最响的时刻,0 到 1。speaking(是或否): 有人声时为 true,短暂停顿时会保持片刻。
screen.color
主屏幕的颜色,变化时每秒数次:可用于跟随游戏的光晕或边框。只有在打开的叠加层显示着等待此事件的动作时才会读取;Vovó 自己的屏幕叠加层绝不会被算进去。
color(文本): 平均颜色,#RRGGBB。vivid(文本): 屏幕上最醒目的颜色,#RRGGBB:平均色偏灰,这个不会。brightness(数字): 屏幕亮度,0(黑)到 1(白)。
input.move
主播在游戏中的移动,变化时每秒最多 60 次:镜头转了多少、往哪里走、是否跳跃。用于随镜头摇摆、横移时倾斜、跳跃时下沉的场景。来自鼠标、移动键(W、A、S、D 按键盘上的位置识别,无论键盘布局如何,或方向键,以及空格键)和第一个连接的手柄(摇杆和 A 键),始终以方向表示,绝不记录按了哪个键。只有在打开的叠加层显示着等待此事件的动作时才会读取,不读取键盘的其他部分;Vovó 自己的窗口在前台时不读取按键(鼠标和手柄仍会读取,除非这台电脑也设置为暂停)。以管理员身份运行的游戏可能会对 Vovó 隐藏输入,因为 Vovó 不以管理员身份运行。
dx(数字): 自上次以来镜头左右转动了多少,向右为正:鼠标自身的移动量,以其计数为单位(不是指针位置,游戏会把指针固定住),手柄的右摇杆也会叠加进来。dy(数字): 上下转动了多少,向下为正。walk(数字): 从 -1(后退)到 1(前进):W 或 S、方向键会给出 1 或 -1,手柄左摇杆按推动程度给出;站立不动为 0。strafe(数字): 从 -1(左,A)到 1(右,D),方式相同。jump(是或否): 按住空格键或手柄 A 键时为 true。
speech.text
主播对着麦克风说的话,逐句转写,用于字幕:由这台电脑上的 Whisper 转写,或在主播选择时由 OpenAI 转写(设置 > 语音,语音转文字)。只有在打开的叠加层显示着监听此事件的动作时才会读取麦克风;每句话在其停顿结束时到达,即说完后一两秒,不保存任何内容。
text(文本): 这句话的文本。
screen.shared
共享屏幕开始或停止播出:一个屏幕、窗口或浏览器标签页,可以是主播自己的(由 Vovó 自己捕获,或通过它在浏览器中的共享页面共享),也可以是主播播出的嘉宾屏幕。放置它的动作(vovo.screen.place)会显示它。当其他内容取代原先共享的内容时,它会再次到来,on 仍为真。
on(是或否): 有内容在共享时为 true。kind(文本): 共享的内容:screen、window或tab(标签页只来自共享页面);没有共享时为空。audio(是或否): 声音也一起传来时为 true。guest(文本): 屏幕所属的嘉宾,即主播给他起的名字;主播自己的屏幕则为空。
camera
动作放置的摄像头(vovo.camera.place)开始在它的页面中显示,或停止显示:主播打开或关闭了摄像头、紧急把它关掉了、它被拔出,或另一个程序正在使用它。和 settings 一样,放置摄像头的动作无需把它添加为触发器就会收到。
camera(文本): 它所显示的摄像头设置的键,与动作声明的一致。on(是或否): 画面显示期间为 true。
persona.answer
角色回答了某人;开启批准时为已批准的回答。应用已会按设置把它发到聊天并朗读;动作负责显示。
persona(文本): 角色的名字。user(文本): 是谁做的,以平台上显示的名字为准。question(文本): 提出的问题。answer(文本): 它的回答。mood(文本): 回答要求角色做的动作,取自开头或结尾方括号中的词([dancing] 我们赢了!),小写;没有则为空。该词会从回答中去掉,聊天和语音中都不会出现,所以可以在性格设定里让角色边说边做动作。
tts.spoken
应用在直播中朗读了内容:操控直播的人选择朗读的一条聊天消息,或批准后的奖励文字。应用会用朗读语音(设置 > 语音)自己说出来;动作负责显示,或让角色的嘴动起来。角色自己在聊天中写的一行会带有 persona 为 true,只有在角色设置为说话时应用才会用角色的语音朗读,因此为角色配音的动作会代替应用说出来。
user(文本): 是谁做的,以平台上显示的名字为准。text(文本): 朗读的内容。source(文本): 来源:chat或reward。persona(是或否): 当这一行是角色自己用其账号在聊天中写的时为 true。
music.request
一位观众通过奖励或聊天命令(设置 > 音乐)向 Vovó 的音乐播放器点了一首歌,这里说明它的结果:等待批准、进入队列、开始播放、被舍弃,或被拒绝及原因。Vovó 自己不会在聊天里写任何东西;由动作在那里回复,或显示正在播放的歌是谁点的。
user(文本): 是谁做的,以平台上显示的名字为准。text(文本): 点歌时写的内容。song(文本): 找到的歌,含歌名和艺人;没找到时为空。state(文本): 结果:waiting、queued、playing、discarded或refused。why(文本): 被拒绝的原因:none(没有匹配的歌)、many(多首同样匹配)、busy(此人已有一首在等待或在队列中)、full(等待的太多)、queued(这首歌已在队列中)或again(刚播过);其他情况为空。source(文本): 点歌方式:reward或chat。
sound.played
控制板上的声音按钮播放了它的声音,或从它的多个声音中随机选出的一个。
label(文本): 按钮的名称。button(数字): 按钮的 id。file(文本): 播放的文件名;按钮随机选择时为选中的那个。seconds(数字): 文件时长,以秒为单位精确到十分之一;Vovó 无法判断时为 0。
video.played
控制板上的视频按钮在舞台上播放了它的视频,或从它的多个视频中随机选出的一个。
label(文本): 按钮的名称。button(数字): 按钮的 id。file(文本): 播放的文件名;按钮随机选择时为选中的那个。seconds(数字): 文件时长,以秒为单位精确到十分之一;Vovó 无法判断时为 0。
remote.talk
有人用手机在直播中讲话,像对讲机一样按住讲话按钮:他的声音正通过场景页面在直播的所有叠加层上播放。动作可在他讲话期间显示是谁在说话。
name(文本): 手机,即主播配对时给它起的名字。seconds(数字): 语音时长,以秒为单位,精确到十分之一。
call.started
动作请求的语音通话(vovo.call.start)已开启:模型已就位,听到的是静音,它说的话在 vovo.call.answer 之前不会播放。显示该动作的每个页面都会收到此事件,让每个页面都能响铃并同步接听。
seconds(数字): 通话的上限,以秒为单位,从请求时开始计算。
call.answered
通话已接听(vovo.call.answer,来自任意页面):麦克风的声音传给模型,模型的声音在直播中播放。
call.text
通话中刚说的话的文字,边说边出,每次几个词:双方可能重叠。用于字幕或文字记录;声音本身由场景页面播放。
who(文本):caller(在麦克风前操控直播的人)或model。text(文本): 这些词,按到达顺序接在前面的词后面。start(数字): 它们在通话中开始的时间,以毫秒为单位。end(数字): 结束的时间,以毫秒为单位。
call.ended
通话已结束或从未开启:所有页面上的语音都已停止。
reason(文本):hangup(动作或应用挂断)、panic、limit(达到上限)、content(模型的内容审核),或其他值表示通话中断或从未开启。seconds(数字): 持续了多久,从请求时算起。
overlay.connected
当前配置文件的一个叠加层页面已连接:OBS 加载或重新加载了一个场景。页面自己的动作在加载完成后也会收到。
scene(文本): 场景的名称。pages(数字): 现在有多少个页面显示这个场景。
JavaScript
vovo.on: 每次事件发生时调用listener。动作必须在触发器中列出该事件。vovo.show: 显示标有data-name="name"的模板,用e中的值以纯文本填入{fields}。vovo.emit: 告诉应用发生了某件事,例如动画结束:触发器中有name的动作会收到。显示该动作的两个页面在处理同一事件时只会发出一次;之后才进行的调用(动画结束时)用event指明它回应的事件,与vovo.chat.send相同;背后没有事件时,5 秒内相同名称和相同数据算作一个事件。vovo.say: 在直播中朗读text,使用配置文件的语音或voice指定的语音(其名称的一部分、语言如pt-BR,或 Piper 文件夹中的语音如piper:pt_BR-faber-medium)。这台电脑无法生成的语音(缺少 Piper 或其语音、没有 OpenAI 密钥)会改用配置文件的语音,应用的控制台会说明。pitch(0.5 到 2)在时长不变时让声音更高或更低,ring(0 到 1)加上金属感,small去掉胸腔共鸣:用任何语音都能做出角色的声音。对于在处理同一事件时提出请求的各个页面,应用只生成一次语音,每个页面播放同一个文件;event与vovo.chat.send相同;背后没有事件时,5 秒内相同文本、相同语音只生成一次。说完时完成。vovo.draw: 从entries中抽取一个,每个概率相同。由应用来抽,所以抽奖公平,操作记录会记下中奖者。显示该动作的两个页面(OBS 和预览窗口)在处理同一事件时抽奖,会得到同样的结果:一个中奖者,操作记录中一次抽奖。event同vovo.chat.send。vovo.chat.send: 通过应用在直播聊天中写入text:一行,最多 500 个字符,以主播的身份,或者用as: "persona"通过角色自己的 Twitch 账号(集成,Twitch 下方)。该账号未连接时,这样的行会被拒绝,也不会改用主播的身份写入。需要chat.send权限,应用会控制节奏(30 秒内 20 行,每个动作每秒一行,无论由哪个账号写入);超出的行或紧急期间的行会被略过,promise 被拒绝。显示该动作的两个页面在处理同一事件时请求的内容只写一次;在监听器返回后(await之后、定时器中)发起的调用要用event指明它所回应的事件,即监听器收到的那个对象本身,否则应用无法把它与第二次调用区分开。编辑器预览中不会写入任何内容:编辑器会显示这一行。vovo.pad.play: 按标签(不区分大小写)按下控制板上的某个声音或视频按钮,效果与真的按下一样:奖励或聊天命令可以播放主播放在控制板上的声音,监听sound.played的动作也会收到。仅限声音和视频按钮。需要pad.play权限;紧急时会拒绝,操作记录会写明是动作按下的,处理同一事件的两个页面只按一次。没有该按钮时 promise 被拒绝。event同vovo.chat.send。编辑器预览中不会播放:编辑器会说明本来会播放什么。vovo.pad.busy: 在控制板上把此动作自己的某个按钮(动作按钮或控件按钮,按标签,不区分大小写)显示为进行中,持续seconds:按钮底部随时间流逝而减少,电脑和手机上都会显示,让操控直播的人知道它仍在进行,就像声音按钮在播放时一样。使用lock: true时,在此之前按下它不起作用,控制台会说明原因。0立即结束。仅在有页面显示该动作时显示,紧急时结束,最长 15 分钟;无需权限,因为它只影响动作自己的按钮。编辑器预览中控制板不会变化:编辑器会说明本来会有什么变化。vovo.pad.lock: 锁定此动作自己的某个按钮(按标签,与vovo.pad.busy相同):在控制板和手机上变暗,按下只会在控制台中提示,直到动作用false解除。用于动作的某种状态,而不是正在进行的事(例如场景中对应部分隐藏时没有意义的按钮),所以不会有进度减少:持续一段时间的事请用vovo.pad.busy。仅在有页面显示该动作时锁定,紧急时解除;动作重新开始时需再次声明。编辑器预览中控制板不会变化:编辑器会说明本来会有什么变化。vovo.obs.source: 按 OBS 中的名称(不区分大小写和重音)在 OBS 场景中显示(true)或隐藏(false)一个来源;不提供on时则切换当前状态。需要obs.toggle权限;紧急时会拒绝,操作记录会记下,处理同一事件的两个页面只请求一次。请求一发给 OBS,promise 即完成;OBS 中没有的名称会在控制台中说明,并给出可能想要的名称。event同vovo.chat.send,省略on时放在它的位置。编辑器预览中不会有变化:编辑器会说明本来会有什么变化。vovo.obs.filter: 按 OBS 中的名称开启(true)或关闭(false)OBS 来源的滤镜;不提供on时切换当前状态。权限和规则与vovo.obs.source相同。vovo.chat.parts: 把聊天事件的消息变成可放入页面的节点:文字作为文本,绝不作为标记;表情作为<img class="vovo-emote">,表情名称放在alt中。没有分段的消息就是它的文本。vovo.webhook.send: 请应用把data以 JSON(最大 16 KB)发送到配置文件中名为name的 webhook(在“设置 > Webhook”中设置)。动作永远看不到地址,也永远不会联网。需要webhook权限;应用会控制节奏(每分钟 30 次,每个动作每秒一次),两个页面同时请求的内容只发送一次,紧急期间不调用任何 webhook。webhook 返回 2xx 时 promise 完成,否则被拒绝。event同vovo.chat.send。编辑器预览中不会发送:编辑器会显示本来要发送的内容。vovo.screen.place: 在element所在的位置显示共享屏幕,位于动作自身绘制内容的下方(因此元素及其后方在那里必须是透明的),并随元素移动;null移除它。fit为contain(完整显示,默认)或cover(填满该位置);radius以像素为单位设置圆角;background是一种颜色(#000000),用于填充contain在形状不同的画面周围留下的空白,否则那里是透明的,会露出场景后面的内容。需要screen.show权限。vovo.camera.place: 在element所在的位置显示主播在动作的某个摄像头设置中选择的摄像头(camera为该设置的键;不给时为第一个),位于动作自身绘制内容的下方(因此那部分必须是透明的),并随元素移动;null移除它。fit为cover(填满该位置,默认)或contain(完整显示);radius和background与vovo.screen.place相同;mirror像镜子一样显示。只有在有页面显示它、主播的摄像头已打开且紧急关闭时才会打开摄像头;camera事件会告知它何时显示。动作永远看不到它的画面,也不知道是哪个摄像头。需要camera.show权限。vovo.media.play: 根据链接在官方播放器中播放 Twitch 剪辑、Twitch 视频或 YouTube 视频,位置在vovo.media.place放置的地方(否则占满整个舞台),带声音;更新的会取代它。只有操控直播的人能触发的动作会立即播放;其他动作要等有人批准(在这里或在获准的手机上),因为可能是观众要求的。播出时 promise 完成;被拒绝、舍弃或在紧急期间请求时被拒绝。seconds会在该时间后移除它:播放器无法知道剪辑何时结束;event同vovo.chat.send。编辑器预览中会在那里静音播放。需要media.play权限。vovo.media.place: 剪辑或视频播放的位置:在element所在处,位于动作自身绘制内容的下方(因此元素及其后方在那里必须是透明的),并随元素移动;null恢复为整个舞台。播放器在该位置内保持视频比例;radius以像素为单位设置圆角。vovo.media.stop: 在所有显示该动作的页面上,把它的剪辑或视频从舞台上移除。vovo.call.start: 在直播中发起与 AI 模型的语音通话:操控直播的人对着麦克风说话,模型出声回答,直播能听到双方。应用用主播的 OpenAI 密钥开启并维持通话;页面只负责播放声音。instructions说明模型是谁、怎么说话;voice是模型的某个语音;seconds是通话上限(最多 300,也是默认值);backoffice是模型转交“给系统”的问题的回答;phone让声音听起来像电话线路。通话开启时 promise 完成,此时模型听到的是静音,声音尚未播放(call.started);用vovo.call.answer接听。被拒绝时 promise 被拒绝。需要call权限,且只能由操控直播的人亲手操作发起(控制板按钮、快捷键、控件、动作的面板),或在只属于他的动作中发起:通话按秒计费,会把麦克风的声音传给模型,并把模型说的话未经审阅直接播出。同一时间只能有一个通话;紧急会挂断并拒绝;编辑器预览不会发起通话。event同vovo.chat.send。vovo.call.answer: 接听通话:从此麦克风的声音传给模型,模型的声音在直播中播放。模型会等待来电方先说话;要让它先说,instruction告诉它如何接听,opening是它的开场白,context是它应知道但不说出的内容,按此顺序发送。只要有一个页面接听就算已接听:再次接听不起作用。vovo.call.tell: 在通话中用一行话告诉模型一些内容:context(默认)是要知道但不说出的内容,instruction是要遵循的指示,aloud是要说出来的话。处理同一事件的两个页面只说一次;event同vovo.chat.send。vovo.call.end: 挂断通话:所有页面上的语音立即停止,随后收到call.ended。vovo.state: 一个在叠加层重新加载和应用重启后仍然保留的对象。它的顶层键在你设置时就会保存。vovo.settings: 对动作声明的设置(action.json中的settings)所做的选择,按键排列,未选择的保持动作原样:颜色为#RRGGBB、数字、true 或 false、一个选项、一行文字、文件地址(没有时为 null)、字体族名,摄像头则为 true 或 false,表示是否选择了摄像头,但绝不说明是哪个。在电脑上的“自定义”中选择,绝不由动作自己选择;settings事件会在变化时通知。
模板
模板中的 {field} 会以纯文本填入事件的该字段。
data-on: 在<template>上:显示它的事件,并用该事件的字段填充。data-name: 在<template>上:vovo.show从 JavaScript 显示它时使用的名称。data-seconds: 在<template>上:移除前停留多久。不设置则一直保留。data-vovo-<key>: 位于文档根元素上,用于每个开关、选择或摄像头类设置:on或off(是否选择了摄像头),或所选选项,可用于类似html[data-vovo-side="右侧"] .chat的选择器。
CSS
--vovo-accent: 在 Vovó 中选择的强调色。--vovo-<key>: 动作的每个设置都以 CSS 形式提供:颜色、带单位的数字(34px)、开关或是否选择了摄像头为 1 或 0、带引号的选项、文字或字体族名、文件为url(...)或none。font-family: var(--vovo-font), sans-serif;
权限
动作在清单中请求这些权限,安装它的人予以批准。
chat.send: 通过应用在频道聊天中发言:以主播的身份,或通过角色自己的账号。media.play: 在直播中用官方播放器播放剪辑和视频;不是操控直播的人请求的内容需要等待批准。call: 在直播中与 AI 模型语音通话:只能由操控直播的人发起,用主播的 OpenAI 密钥按秒计费;麦克风的声音传给模型,模型说的话未经审阅直接播出。screen.show: 在直播中显示主播通过 Vovó 共享页面共享的内容。camera.show: 在直播中显示主播在“自定义”中为这个动作选择的本机摄像头,但绝不把它的画面交给动作。pad.play: 按标签播放控制板上的声音和视频按钮。obs.toggle: 在 OBS 中显示或隐藏来源,开启或关闭滤镜。webhook: 请应用调用配置文件的某个出站 webhook。