2023-11-14更新:已失效,现在官方会用错误码400拒绝请求。2023-10-10更新:修改发图方法,原来的方法发的图只能存活1小时。2023-10-7更新:新增通过伪装分享视频的封面形式发送图片。2023-9-27更新:原来按照本教程设定但是失效的,把规则那里的equals改为contains就可以了。如果不明白,请参考下面的截图,已经更新过了。
做法发送文字私信在chrome/firefox/edge浏览器,搜索插件“requestly”下载,这里我教程中用的是chrome,其他浏览器可能有略微区别。
进入插件主界面,左边选择HTTP Rules,第一次安装可能需要点击中间的Create your first rule,选择Modify Request Body,如下图。
点击右上角的Create Rule,填写一条如下图所示的规则,两段需要填充的文本可以从下面复制,注意下面Request Body下面的选项选第二个。
https://api.vc.bilibili.com/web_im/v1/web_im/send_msgfunction modifyRequestBody(args) {
const { method, url, body, bodyAsJson } = args;
// 改字段以突破限制
let formData = new URLSearchParams(body);
formData.set('from_firework', 1);
// 伪装分享
let shareContent = {
id: 0,
title: '发送图片',
source: 5,
thumb: '',
author: '我',
author_id: '1'
};
const content = JSON.parse(formData.get('msg[content]'));
const regex = /!\[\.*]\((https?:\/\/[^)]+?)(?:@[^)]+)?\)/; // 消息为的形式
const matches = regex.exec(content.content);
const imgUrl = (matches && matches.length > 1) ? matches[1] : null;
if (imgUrl) {
shareContent.thumb = imgUrl;
formData.set('msg[msg_type]', 7);
formData.set('msg[content]', JSON.stringify(shareContent));
}
return formData.toString();
}结束,打开发私信的网页,保证这条规则是启用的,就可以正常发私信了。
发送图片私信需要配合github的xlzy520/bilibili-img-uploader图床工具使用。下载链接如下:
chrome/edge浏览器:
B站图床
B站图床、转短链插件
chrome.google.com
firefox浏览器:
https://addons.mozilla.org/addon/%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9%E5%9B%BE%E5%BA%8A/
以chrome为例,安装完成后打开插件,如果你在浏览器中登陆了b站,插件会自动识别SESSDATA(相当于登录状态)如果没有自动识别,请参考它的文档。通过点击或者拖拽上传图片:
上传完成后,找到已传图片-复制-markdown。
将复制的文本粘贴到私信,发送即可。
效果如下:
注意:
由于是视频封面,发送的图片长宽比会被裁剪为16:9,所以发送之前最好自己先处理一下
这里显示的“发送图片”和“我”是在上面的代码中定义的,可以自己改成你想要的文字
原理网页端发私信调用的是https://api.vc.bilibili.com/web_im/v1/web_im/send_msg这个api,请求体的形式为form data。具体如下:
from_firework字段值默认为0,此时对没回过你私信的用户发私信有只能发一条的限制,把这个值改成1就可以正常发了。发送图片的原理为,先将图片上传到b站图床中,通过正则表达式匹配你文字私信(msg_type为1)中的markdown表示图片的语法,将你在私信中发送的图片链接修改为分享视频的请求(msg_type为7),将你想要发送的图片设为分享视频的封面。bilibili-img-uploader是开源的,它将图片上传到b站图床的过程调用的是https://api.bilibili.com/x/article/creative/article/upcover这个api,通过伪装专栏图片的方式上传不会过期的图片。然而实际上你并没有专栏图片指向它,所以上传的图片是不会在你的b站空间中显示的,也就是说不会被别人看见。
问题与解决填写规则时插件可能会崩溃,把浏览器语言改成英文试试。