警告
通过表单获取配置已上线,本文档已存档,不再更新新内容。
警告
通过表单获取配置已上线,本文档已存档,不再更新新内容。
警告
通过表单获取配置已上线,本文档已存档,不再更新新内容。
功能配置
[function]
注意:
- 只有将这些值设置为
true
才会生效,如果设置为false
,具体的配置再怎么样也不会去执行,下表为了明了,默认值false
直接省略。 - 表中排列顺序即为功能的调用顺序,内部设置顺序,与配置无关。
- 带删除线的表示已经弃用或其它原因不使用,如果有替代的功能,查看说明。
- 替代功能的相关配置开启时会自动关闭原废弃功能,防止重复运行,但是任然建议将废弃功能删除。
Key | 默认值 | 说明 | 配置 |
---|---|---|---|
loginTask | true | 获取个人信息(一般会自动调用,且无法关闭) | 不可配置 |
exchangeBigPoint | 大积分兑换 ( | 点击 | |
exchangeCoupon | 兑换漫读券 ( | 点击 | |
liveSignTask | true | 直播间签到 | 无 |
addCoins | true | 投币 | 点击 |
bigPoint | 大会员领取大积分 | 点击 | |
shareAndWatch | true | 观看和分享视频 | 无 |
silver2Coin | true | 银瓜子兑换硬币(配合直播签到用) | 无 |
mangaTask | 漫画任务(包含签到,分享,阅读,小游戏) | 点击 | |
supGroupSign | 应援团签到 (目前也无意义了啊) | 无 | |
getVipPrivilege | 获取大会员权益 | 无 | |
useCouponBp | 使用 b 币券(充电/兑换电池) | 点击 | |
matchGame | 赛事竞猜(人人都是硬币慈善家) | 点击 | |
giveGift | 赠送过期礼物 | 点击 | |
liveIntimacy | 牌子亲密度 (非云函数为异步运行) | 点击 | |
liveDm | 直播弹幕 | 点击 | |
watchLink | 直播心跳/直播间监听 | 点击 | |
batchUnfollow | 取消关注 | 点击 | |
点击 | |||
liveRedPack | 直播天选红包 | 点击 | |
dailyBattery | 每日电池任务 | 点击 | |
addExp | true | 大会员领取经验 | |
activityLottery | 转盘抽奖 | 点击 | |
judgement | 风纪委员 | 点击 | |
直播周任务 | |||
直播 |
投币
[coin]
默认配置逻辑:没有达到 6 级时,每日投币 5 颗,不保留硬币。达到 6 级停止投币。
PS:达到 6 级后想要投币,或者投币数想大于 5 ,请参考解除限制的配置 limit。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
targetLevel | 数值 | 6 | 目标等级,达到或大于将不投币、分享、观看视频 |
stayCoins | 数值 | 0 | 账号至少保留的硬币数目,低于或等于将不投币 |
targetCoins | 数值 | 5 | 每日投币目标(超过将不投币) |
customizeUp | 数值数组 | [] | 自定义投币 UP 的 uid, 在所填中随机选取 |
src | 字符串数组 | ['自定义UP', '特别关注', '关注', '首页推荐', '分区排行'] | 获取稿件的来源(排序),留空则来自首页推荐 |
upperAccMatch | 布尔 | false | 合作视频精准匹配上传者 |
参考写法
{
function: {
addCoins: true,
},
coin: {
targetLevel: 6,
stayCoins: 0,
targetCoins: 5,
customizeUp: [],
// 获取稿件的来源(排序),留空则来自 首页推荐
src: ['自定义UP', '特别关注', '关注', '首页推荐', '分区排行'],
// 合作视频精准匹配上传者
upperAccMatch: false,
},
}
使用 b 币券
[couponBalance]
默认配置逻辑:每月 10,20 和最后一天使用 b 币券为自己充电。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
use | 字符串 | 充电 | 使用的方式,可以是 充电 /charge 电池 /battery |
mid | 数值 | 自己的 mid | 使用充电时有效,目标的 mid(默认自己)获取方式 |
presetTime | 数值数组 | [10, 20] | 使用 b 币券的日期,每月最后一天必定运行。空数组表示每一天 |
参考写法
{
function: {
useCouponBp: true,
},
couponBalance: {
// 空数组表示每一天
presetTime: [10, 20],
use: '充电',
},
}
竞猜
[match]
PS:涉及到硬币安全,建议开启后修改默认配置到适合自己的值。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
coins | 数值 | 2 | 每次竞猜的数量,区间 1-10 |
selection | 数值 | 1 | 压赔率低的(正压)大于 0 的数,反之等于 0 |
diff | 数值(可以是小数) | 7.0 | 赔率需要达到的差距 |
参考写法
{
function: {
matchGame: true,
},
match: {
coins: 2,
selection: 1,
diff: 7.0,
},
}
天选时刻
[lottery]
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
excludeAward | 字符串数组 | ["舰","船","航海","代金券","优惠券","自拍","照","写真","图","提督","车车一局","再来一局","游戏道具"] | 奖品描述不能包含,比如“自拍一张”将被跳过 |
includeAward | 字符串数组 | ["谢"] | 奖品描述包含,如果满足则跳过 excludeAward |
blackUid | 数值数组 | [65566781, 1277481241, 1643654862, 603676925] | up 黑名单(up 的 id,不是房间号)获取方式 |
moveTag | 字符串 | 天选时刻 | 关注的用户统一移动到此 |
actFollowMsg | read 或者 del | 'read' | 关注时产生的回复的处理方式 |
scanFollow | 任意值或者'only' | 无 | 扫描关注的用户,任意值则扫描,如果为 only 则只扫描关注用户,不会扫描直播分区。默认无值(不扫描) |
skipNeedFollow | 布尔值 | false | 跳过条件为关注的天选时刻 |
mayBeWinMsg | 布尔值 | true | 打印可能中奖的消息(48 小时内) |
参考写法
{
function: {
liveLottery: true,
},
lottery: {
excludeAward: [
'舰',
'船',
'航海',
'代金券',
'优惠券',
'自拍',
'照',
'写真',
'图',
'提督',
'车车一局',
'再来一局',
'游戏道具',
],
includeAward: ['谢'],
blackUid: [65566781, 1277481241, 1643654862, 603676925],
moveTag: '天选时刻',
actFollowMsg: 'read',
scanFollow: '',
skipNeedFollow: false,
mayBeWinMsg: true,
},
}
天选红包
[redPack]
doing...
找寻目标直播间的方式目前有两种,第一种为官方活动的链接(官方的红包),第二种为扫描推荐直播间,查看是否存在红包。
由于活动拥有不同的赛季,赛季的接口不一样,可能更新不及时,因此可以自定义配置。
intervalActive
当活动接口的红包全部过期后,会再次请求活动接口获取新的。中间等待 intervalActive
用于降低风控概率。
红包会一直运行,直到获得 20 次奖励为止。但这并不实现,为了避免因为无法获得奖励而一直不结束。通过 totalNum
、noWinNum
和 riskNum
避免这种致命问题。
restTime
符合条件后,restTime
和 riskTime
都会重置为 0。避免中场休息后又触发风控休息。
restTime
符合条件后,restTime
和 riskTime
都会重置为 0。避免中场休息后又触发风控休息。
声明: 表示次数时,小于等于 0 的数表示不限制次数 表示休息时间时,小于等于 0 的数表示直接停止
{
function: {
liveRedPack: true,
},
redPack: {
// 直播间来源方式 1 活动(活动链接可能更新不及时),2 扫描。其它值 所有方式依次尝试。
source: 0,
// 活动链接
uri: '',
// 【仅使用活动时有效】 每轮抢红包的间隔时间(秒)
intervalActive: 60,
// 中场休息时间,当每参加了几个直播间的时候,休息一下 [参加个数,休息时间(分,小于1为直接结束)]
restTime: [-1, -1],
// 疑似触发风控时休眠时间,[连续出现次数,休眠时间(分,小于1为直接结束)]
riskTime: [-1, -1], // 与 riskNum 不同,该参数会与 restTime 互相影响重置次数
// 同时参与的直播间数量
linkRoomNum: 1,
// 参与直播时发送的弹幕数量(与内置数量比,min(10,剩余时间/5,配置))
// [固定值],[最少,最多]
dmNum: [10],
// 是否在等待时处理关注用户(读取消息,移动)
moveUpInWait: true,
/** 天选时刻关注 UP 移动到分组 */
moveTag: 'rp关注',
/** 关注回复处理方式 */
actFollowMsg: 'read',
// 总参与次数,达到后不管结果如何,直接结束
totalNum: -1,
// 连续超过多少次没有中,直接结束,小于1为不限制
noWinNum: 10, // 避免一直运行
// 连续疑似触发风控多少次,直接结束,小于1为不限制
riskNum: 5, // 避免一直运行
},
}
取关分组
[unFollow]
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
delay | 数值 | 3 | 单个取消的时间间隔(秒) |
restTime | [数值, 数值] | [20, -1] | 中场休息,[取消数量, 休息时间(分)] 取消数量和休息时间都应该为正数(非 0),否则无效 |
totalNum | 数值 | -1 | 总数 -1 无限制 |
tags | 字符串数组 | ['天选时刻', 'rp关注'] | 取消关注的 tag |
{
function: {
batchUnfollow: true,
},
unFollow: {
// 单个取消的时间间隔(秒)
delay: 3,
// 中场休息,[取消数量, 休息时间(分)] 取消数量和休息时间都应该为正数(非0),否则无效
restTime: [20, -1],
// 总数 -1 无限制
totalNum: -1,
// 取消关注的 tag
tags: ['天选时刻', 'rp关注'],
},
}
直播间礼物
[gift]
PS:正常运行的前提时配置了目标用户 mids
,否则不会运行。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
mids | 数值数组 | coin.customizeUp | 自定义投喂礼物 UP, 在所填中随机选取,获取方式 |
all | 布尔值 | false | 配置为 true 无视其它礼物配置,投喂所有即将过期礼物 |
id | 数值数组 | (见下面参考写法) | 自定义投喂礼物投喂礼物的 id |
name | 字符串数组 | [] | 自定义投喂礼物的名字,如果不知道怎么获取 id,那就填写名字 |
all | 布尔值 | false | 无视其它礼物配置,投喂所有即将过期礼物 |
参考写法
{
function: {
giveGift: true,
},
gift: {
/** 自定义投喂礼物用户列表 */
mids: [],
// 投喂礼物 id
// 辣条 小心心 能量石头 PK票 小海浪
id: [1, 30607, 30426, 31531, 31674],
// 投喂礼物 name
name: ['辣条', '能量石头'],
// 无视其它礼物配置,投喂所有即将过期礼物
all: false,
},
}
粉丝亲密度
[intimacy]
PS:如果想要观看直播间获取亲密度,请手动开启 liveHeart
。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
liveSendMessage | 布尔 | true | 直播弹幕(+100,点亮灰牌子) |
liveLike | 布尔 | true | 点赞直播间 (+100) |
liveHeart | 布尔 | false | 观看直播 (+100 * n) |
limitFeed | 数值 | 1500 | 每日亲密度上限 (系统为 1500),越小则 liveHeart 执行时间越少,反之越长,可以超过 1500,多做点可能更稳妥 |
whiteList | 用户 id 数组 | [] | 只操作此列表中的(优先级高于 blackList) |
blackList | 用户 id 数组 | [] | 操作全部,但排除其中的 |
skipNum | 数值 | 10 | 同时有多少个直播间已获取亲密度超过 200 时,强制跳过弹幕和点赞。小于 0 不跳过 |
isRetryHeart | 布尔 | [] | 完成直播心跳后是否再检查一次,可能因为数据延迟而重复操作,不建议云函数开启 |
- 布尔值,
true
表示开启,false
表示关闭 - 用户 id(主站的 id) 并非主播直播间 ID,获取方式
参考写法
{
function: {
liveIntimacy: true,
},
// 亲密度
intimacy: {
// 直播弹幕
liveSendMessage: true,
// 点赞直播间
liveLike: true,
// 每日亲密度上限 (系统 1500)
limitFeed: 1500,
// 耗时很长的直播心跳(默认关闭)
liveHeart: false,
// 白名单
whiteList: [],
// 黑名单
blackList: [],
// 同时有多少个直播间已获取亲密度超过200时,强制跳过弹幕和点赞。小于 0 不跳过
skipNum: 10,
// 完成直播心跳后是否再检查一次,可能因为数据延迟而重复操作,不建议云函数开启
isRetryHeart: false,
},
}
漫画任务
[manga]
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
sign | 布尔 | true | 漫画签到任务 |
buy | 布尔 | false | 是否使用即将过期的漫读券 |
read | 布尔 | false | 是否使用阅读漫画 |
mc | 数组数组 | [] | 购买漫画 id(优先级高) |
name | 字符串数组 | [] | 购买漫画名称(优先级中) |
love | 布尔 | true | 购买追漫(优先级低) |
- 布尔值,
true
表示开启,false
表示关闭 - mc 获取:https://manga.bilibili.com/detail/mc29195 这篇漫画的 mcId 就是
29195
。获取方式
参考写法
{
function: {
mangaTask: true,
},
// 漫画
manga: {
// 签到
sign: true,
// 购买漫画
buy: false,
// 是否阅读漫画
read: false,
// 购买漫画 id(优先级高)
mc: [29195],
// 购买漫画名称(优先级中)
name: ['两不疑'],
// 购买追漫(优先级低)
love: true,
},
}
兑换漫读券
[exchangeCoupon]
注意:请使用自定义任务运行(别问怎么自定义任务,自己看文档)
建议在 23:59:58 左右开启,这样会在 0 点前获取到积分数据。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
num | 数值 | 1 | 兑换漫读券数量,小于 1 的数为根据积分确定 |
delay | 数值 | 2000 | 间隔时间,单位 ms,随机误差 -50 ~ 150 |
keepAmount | 数值 | 0 | 保留积分数 |
startHour | 0 10 12 | 0 | 兑换时间 |
- 注意:积分减去保留积分后得到可兑换数量,如果 num 大于可兑换数量或 num 小于 1,则兑换可兑换数量的漫读券,其余情况兑换 num。
参考写法
{
// 兑换漫读券
exchangeCoupon: {
// 兑换漫读券数量
num: 1,
// 间隔时间,单位 ms,随机误差 -50 ~ 150
delay: 2000,
// 保留积分数
keepAmount: 0,
// 兑换开始时间,0、10、12
startHour: 0,
},
}
大积分兑换
[exchangeBigPoint]
注意:请使用自定义任务运行(别问怎么自定义任务,自己看文档)
建议在 11:59:54 左右开启,这样会在 12 点前获取到积分数据。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
delay | 数值 | 200 | 多次尝试间隔时间,单位 ms |
retry | 数值 | 3 | 重试次数 |
startDelay | 数值 | 30 | 启动延时 ms,在 12 点之后相加 30 ms |
name | 字符串数组 | [] | 兑换商品名称,与 token 二选一 |
token | 字符串数组 | [] | 兑换商品 token,与 name 二选一 |
访问链接获取 name 或 token :https://api.bilibili.com/x/vip_point/sku/list?in_review=0&pn=1&ps=20
参考写法
{
// 大积分兑换
exchangeBigPoint: {
// 多次尝试间隔时间,单位 ms
delay: 200,
// 重试次数
retry: 3,
// 启动延时 ms
startDelay: 30,
// 兑换商品名称,与 token 二选一
name: [],
// 兑换商品 token
token: [],
},
}
风纪委员
[jury]
默认配置逻辑:获取案件后有观点就参考观点(仅能参考发表了评论的人的观点,且排除无法判断选项),没有就投默认(好或者普通)。
PS:任务风纪委员可能会因为审核期间漏掉一天的审核,所以建议运行时间为每天的晚上 10 点左右,当然一天多次更好。
- 布尔值,
true
表示开启,false
表示关闭
{
function: {
judgement: true,
},
// 风纪委员
jury: {
// 默认投票,0 为好,1 为普通,2 为差,3 为无法判断,填多个为随机投票,填一个为固定投票,可以填写多个增加概率,例如 `[0, 0, 1]` 投好是普通的两倍概率
vote: [0, 0, 1],
// 是否采用参考投票,不采用就使用默认投票
opinion: true,
// 参考获取到其他用户观点后,如果最多项数量小于该值,则当成参考不足改为默认投票(避免只有一个人投差就直接跟着投差)。
opinionMin: 3,
// 计算 opinionMin 值时,选择【会观看】的值时是 1,选择了【不会观看】,则参考价值为该值。由于参考数据较小,所以实际意义不大。
insiderWeight: 0.8,
// 排除投票 0-3 好-无法判断,用于配合参考投票,不影响【默认投票】配置
notOpinion: [3],
// true 为审满案件后退出,false 为获取不到新案件后退
once: true,
// 没有案件后的等待时间(分),当 once 为 false 时会直接退出,这个配置也就无效。
waitTime: 20,
// 是否观看视频 0 不观看,1 观看,从中随机
insiders: [0, 1],
// 是否匿名 0 不匿名,1 匿名,从中随机
anonymous: [0, 1],
// 云函数下使用新的触发器进行休眠
newTrigger: true,
// 异步,非云函数下使用。不支持推送结果
async: false,
},
}
大积分
[bigPoint]
默认配置逻辑:领取所有任务,完成能够自动完成的任务,并等待 5s 后重新执行一次。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
isRetry | 布尔/数值 | 20 | 是否在完成后等待 20s 再检查一次,也可直接填写等待时间(单位秒) |
isWatch | 布尔 | true | 是否完成观看视频的任务(模拟,不需要 30 分钟) ,会产生历史记录 |
watchDelay | 数值 | 40 | 领取任务后的观看延时(秒),尝试用更长的时间解决观看视频没加积分的问题 |
注意:
- 视频是正片,非 up 投稿,例如动画、纪录片、电影、电视剧、综艺等。
- 请尽量不要在凌晨执行该任务,未知原因经常会出现无法完成的情况,同时建议每天执行两次以上。
- 接口经常出现延迟,脚本无法判断出是否完成(无法判断时在日志进行了说明),可以加大等待重试的时间。
参考写法
{
function: {
bigPoint: true,
},
// 大积分
bigPoint: {
// 是否在完成后等待 20s 再检查一次,也可直接填写等待时间(单位秒)
isRetry: 20,
// 是否完成观看视频的任务
isWatch: true,
// 领取任务后的观看延时(秒)
watchDelay: 40,
},
}
转盘抽奖
[activityLottery]
默认配置逻辑:请求由爬虫提供的活动列表,尝试分享增加次数,然后参与抽奖。
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
list | 对象数组 | [] | (非云函数不推荐在此配置,详见 PS)。自定义活动列表(如需使用,有效性请自行维护,不会删除过期配置),格式见 PS |
isRequest | 布尔 | true | 是否从网络请求活动列表 |
delay | [最低, 最高] | [1.8, 3.2] | 随机抽奖延时(秒),只用于单个活动中多次机会的间隔 |
bangumi | 布尔 | false | 与 isRequest 配合,是否通过追番增加次数(如果有番剧/影视,追番然后取消,当然不一定能增加次数),云函数不建议开启(因为追番只能生效一次,但是云函数每次都会运行) |
布尔 | false | 同上,不过情况复杂,暂时没有完成预留在这里,可以先配置为 true 等更新 | |
proxyPrefix | 字符串 | https://ghproxy.com/ | 请求 GitHub 使用的代理前缀,例如 https://ghproxy.com/ |
customUrl | 字符串 | 自定义活动列表链接。有自己的在线列表或者有使用前缀无法处理的链接都可以直接在此配置完整的。 |
PS:
list
写法(以下只是格式参考,不保证内容有效)
[
{
"sid": "newLottery_c02888c9-0354-11ed-9251-a4ae12675bc2",
"title": "美味之旅,由柠开启"
},
{
"sid": "newLottery_8b3e37a8-e30f-11ec-9251-a4ae12675bc2",
"title": "正义的算法"
}
]
为了保证活动的有效性,也可以把列表配置到单独的文件中,程序会将此与请求的列表一并管理。同时该文件是全局的,使用多账号时不必为所有账号单独配置。
在 config
配置文件的同级目录下创建一个 bt_activityLottery.json
的文件,写入如下内容:
{
"activity_list": [
{
"sid": "newLottery_c02888c9-0354-11ed-9251-a4ae12675bc2",
"title": "美味之旅,由柠开启"
}
]
}
参考写法
{
function: {
activityLottery: true,
},
// 转盘抽奖
activityLottery: {
// 活动列表
list: [],
// 是否从网络请求活动列表
isRequest: true,
// 抽奖延时(秒)
delay: [1.8, 3.2],
// 与 isRequest 配合,是否通过追番增加次数(如果有番剧/影视,追番然后取消,当然不一定能增加次数),云函数不建议开启
bangumi: false,
// 同上,不过是关注,(未完成,配置了也没用)
follow: false,
// 请求 GitHub 使用的代理前缀,例如 https://ghproxy.com/
proxyPrefix: 'https://ghproxy.com/',
// 自定义活动列表链接
customUrl: '',
},
}
每日电池
[dailyBattery]
施工中...
由于任务不唯一,没有开发条件,故停滞。(主要还是没人用
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
tasks | 数组 | ['5弹幕', '20弹幕', '20弹幕30秒观看'] | 任务并不唯一,遇到了才会执行 |
参考写法
{
function: {
dailyBattery: true,
},
// 每日电池
dailyBattery: {
// 任务并不唯一,遇到了才会执行
tasks: ['5弹幕', '20弹幕', '20弹幕30秒观看'],
},
}
直播心跳
[watchLink]
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
uid | 数组 | [] | 用户 uid,非直播间 id |
roomid | 数组 | [] | 直播间 id,会覆盖 uid |
heart | 布尔 | true | 直播心跳 |
time | 数字 | 30 | 运行时间,单位分钟 |
ws | 布尔 | false | 直播弹幕监听 |
area | 二维数组 | [[3, 321]] | 直播分区,例如 3,321 为手游-原神 |
参考写法
{
function: {
watchLink: true,
},
// 直播心跳
watchLink: {
// 用户 uid,非直播间 id
uid: [],
// 直播间 id,会覆盖 uid
roomid: [],
// 直播心跳
heart: true,
// 运行时间,单位分钟
time: 30,
// 直播弹幕监听
ws: false,
// 直播分区,例如 3,321 为手游-原神
area: [
[3, 321],
// [6, 666],
],
},
}
直播弹幕
[liveDm]
Key | 值类型 | 默认值 | 说明 |
---|---|---|---|
roomid | 数组 | [] | 直播间 id |
delay | 数组 | [] | 延时,单位秒,例如 [8, 13] 为 8-13s 之间随机 |
num | 数字 | 0 | 次数 |
custom | 数组 | [] | 自定义弹幕 (见下面参考写法) |
注意当 custom 有值时,roomid 、num 会被忽略。
自定义数组中的每项可以是数组,也可以是对象,(注意是也可以,不是都需要),例如
参考写法
{
// 直播弹幕
liveDm: {
// 直播间 id
roomid: [],
// 延时 s
delay: [8, 13],
// 次数
num: 0,
// 自定义(以下并非默认值,仅用于文档参考,请勿直接复制)
custom: [
[666, 1, ['打卡', '签到']], // 依次为 roomid, num, msg,roomid 为必填,num 和 msg 为选填
{
// id 为必填,num(默认1) 和 msg 为选填
id: 777,
num: 6,
msg: ['haha'],
},
],
},
}
参数说明
用户 ID
https://space.bilibili.com/668380 的用户 ID 就是 668380
直播间 ID
https://live.bilibili.com/910884 的直播间 ID 就是 910884
但是部分直播间有短 ID,比如上面的直播间有下面的短 ID:
https://live.bilibili.com/54 的直播间简短 ID 就是 54
在浏览器中看到的基本是短 ID,但是很多 API 都需要用到长 ID,所以配置中尽量要求的是用户 ID,再从用户 ID 去获取直播间 ID,避免查找信息时出现问题。
漫画 ID
https://manga.bilibili.com/detail/mc29195 这篇漫画的 mcId 就是 29195