Colter23 / bilibili-dynamic-mirai-plugin

低延迟检测B站动态/直播的mirai-console插件
GNU Affero General Public License v3.0
225 stars 16 forks source link

在启动Mirai超过一段时间(通常是几天)后,偶尔会出现停止检测的现象 #13

Closed byx2020 closed 2 years ago

byx2020 commented 3 years ago

最近出现过几次这种情况,启动Mirai,可以正常运行、检测、推送,但是有几次放了一两天后,就再没看到过下图的绿色检测提示,同时订阅的UP更新也没在群内推送,不过重启Mirai就又恢复正常了。 image 以下为插件运行环境信息(需要更多可以问我): 操作系统:Windows Server 2012 R2 Mirai版本:2.2.2 插件版本:1.0.4 问题相关配置项:

dynamic: 
  enable: true
  interval: 20
  lowSpeed: '000-000'
  videoMode: false
  saveDynamicImage: true
Colter23 commented 3 years ago

你的mirai版本为啥那么低(试试新版的mirai? 停止检测的话有可能是插件运行出bug,且没有推送提示,或者插件卡死,或是mirai不稳定?

byx2020 commented 3 years ago

你的mirai版本为啥那么低(试试新版的mirai?

mirai版本低主要是因为下面两个原因 (其实我感觉我这个版本也不是很低,因为我见过很多比我更低的)

  1. 我同时也在使用MiraiNative运行一些从酷Q移植过来的插件,担心升级后会出现插件不兼容的问题。
  2. 目前我用的这个版本其实用了有几个月了,用着挺稳定的没出啥问题,就没什么动力也懒得更新了。

之后有时间了我会尝试升级mirai版本的。

停止检测的话有可能是插件运行出bug,且没有推送提示,或者插件卡死,或是mirai不稳定?

明显的报错我还从来没有见过,看起来应该只是停止检测和推送了而已,marai运行还是比较稳定的,只是我注意到mirai每隔一段时间都会重新登录一次(我使用的登录协议为ANDROID_PAD),这应该是正常现象,但我不确定会不会对此插件造成影响,另外,停止检测和推送这个问题,基本只在mirai运行了较长的一段时间后,才有一定的概率发生,mirai刚启动的时候一切都是正常的,因此我怀疑也可能与数据缓存有关。

Colter23 commented 3 years ago

我这运行了也好长时间了(之前最长运行了近1个月吧),并没有出现无法推送的情况 我这个插件在1.x.x的时候就已经有了,那个时候mirai是真的有很多bug,运行不了几天就要重启 在mirai不断迭代的过程中我也没有碰到兼容性的问题,原来的代码一直都是可以正常运行的(当然我的插件也在迭代) 新版的mirai确实比之前稳定了不少,像你说的每过一段时间就会重新登陆一次在2.6.0中也被修复了 所以推荐试一下新版,有兴趣的话可以看一下mirai的更新日志releases 不过确实存在插件卡死不检测的情况(之前挺常见的,最近好点了)

你的推送模式是什么(配置中的pushMode)

数据缓存的话 你目前有多少订阅?
我在插件里的全局缓存变量只有这两句

// 动态历史记录
val historyDynamic : MutableList<String> = mutableListOf()
// b站表情
val emojiMap = mutableMapOf<String,java.awt.Image>()

历史记录只会记录每个动态的id(动态id是串18位的数字字符串)我觉的这个也占不了多少内存吧 b站表情是记录动态所用到的b站表情(如果你是文字推送模式这里不会有记录),每个表情只会记录一次,下一次用到就不用再从网络上下载 最大的表情是那些专属表情(一些套装表情)大概一张是50kb左右 日常最常用的小黄脸系列大概是3-10kb 小电视1-5kb

实在不行可以试一下文字推送模式,如果之前是用的图片推送模式的话 文字推送模式会少简单很多 如果还不行的话我再调试调试优化一下

SekiBetu commented 3 years ago

mirai2.6.4 版本中我也出现了停止运行的情况,卡在"开始检测......",前天刚出现的,我继续看看情况

byx2020 commented 3 years ago

我这运行了也好长时间了(之前最长运行了近1个月吧),并没有出现无法推送的情况 我这个插件在1.x.x的时候就已经有了,那个时候mirai是真的有很多bug,运行不了几天就要重启 在mirai不断迭代的过程中我也没有碰到兼容性的问题,原来的代码一直都是可以正常运行的(当然我的插件也在迭代) 新版的mirai确实比之前稳定了不少,像你说的每过一段时间就会重新登陆一次在2.6.0中也被修复了 所以推荐试一下新版,有兴趣的话可以看一下mirai的更新日志releases 不过确实存在插件卡死不检测的情况(之前挺常见的,最近好点了)

你的推送模式是什么(配置中的pushMode)

数据缓存的话 你目前有多少订阅? 我在插件里的全局缓存变量只有这两句

// 动态历史记录
val historyDynamic : MutableList<String> = mutableListOf()
// b站表情
val emojiMap = mutableMapOf<String,java.awt.Image>()

历史记录只会记录每个动态的id(动态id是串18位的数字字符串)我觉的这个也占不了多少内存吧 b站表情是记录动态所用到的b站表情(如果你是文字推送模式这里不会有记录),每个表情只会记录一次,下一次用到就不用再从网络上下载 最大的表情是那些专属表情(一些套装表情)大概一张是50kb左右 日常最常用的小黄脸系列大概是3-10kb 小电视1-5kb

实在不行可以试一下文字推送模式,如果之前是用的图片推送模式的话 文字推送模式会少简单很多 如果还不行的话我再调试调试优化一下

我这运行了也好长时间了(之前最长运行了近1个月吧),并没有出现无法推送的情况 我这个插件在1.x.x的时候就已经有了,那个时候mirai是真的有很多bug,运行不了几天就要重启 在mirai不断迭代的过程中我也没有碰到兼容性的问题,原来的代码一直都是可以正常运行的(当然我的插件也在迭代) 新版的mirai确实比之前稳定了不少,像你说的每过一段时间就会重新登陆一次在2.6.0中也被修复了 所以推荐试一下新版,有兴趣的话可以看一下mirai的更新日志releases 不过确实存在插件卡死不检测的情况(之前挺常见的,最近好点了)

你的推送模式是什么(配置中的pushMode)

数据缓存的话 你目前有多少订阅? 我在插件里的全局缓存变量只有这两句

// 动态历史记录
val historyDynamic : MutableList<String> = mutableListOf()
// b站表情
val emojiMap = mutableMapOf<String,java.awt.Image>()

历史记录只会记录每个动态的id(动态id是串18位的数字字符串)我觉的这个也占不了多少内存吧 b站表情是记录动态所用到的b站表情(如果你是文字推送模式这里不会有记录),每个表情只会记录一次,下一次用到就不用再从网络上下载 最大的表情是那些专属表情(一些套装表情)大概一张是50kb左右 日常最常用的小黄脸系列大概是3-10kb 小电视1-5kb

实在不行可以试一下文字推送模式,如果之前是用的图片推送模式的话 文字推送模式会少简单很多 如果还不行的话我再调试调试优化一下

非常抱歉,最近略忙,今天才看到你的回复

关于升级mirai,我在刚才已经安装好mirai2.6.4并可以正常启动了,只是在迁移MiraiNative数据时出了一点小问题,因此暂时还没有开始正式使用。

目前的推送模式是图片推送(配置pushMode: 0)

目前共有10个订阅,应该占不了多少缓存

关于文字推送模式,我会在解决掉MiraiNative的迁移问题并把mirai升级到2.6.4运行此插件一段时间后,若此问题仍然存在,我再进行尝试,到时候不论问题是否解决,我都会给你一个结果。

byx2020 commented 3 years ago

目前我已经成功把mirai升级到了2.6.4,并解决了MiraiNative的迁移问题,不过mirai2.6.4在加载此插件时出现了一个报错,我不太确定是否与此问题有没有关系,总之先把报错截图放上来 image

SekiBetu commented 3 years ago

目前我已经成功把mirai升级到了2.6.4,并解决了MiraiNative的迁移问题,不过mirai2.6.4在加载此插件时出现了一个报错,我不太确定是否与此问题有没有关系,总之先把报错截图放上来 image

无关,这是C盘不允许读取造成的

Colter23 commented 3 years ago

如果是图片推送模式的话,有可能是动态中的图片太多太大(长图片),导致最后合成的图片太大,卡死了插件。之后会再修一下

byx2020 commented 3 years ago

如果是图片推送模式的话,有可能是动态中的图片太多太大(长图片),导致最后合成的图片太大,卡死了插件。之后会再修一下

从我升级到mirai2.6.4后,运行几天的情况来来看,停止检测的问题仍然存在, 我怀疑可以是之前此插件的数据文件有问题影响到了现在, 下一步的计划是删除此插件所有的数据文件,然后再重新安装插件并重新订阅一遍,以观察问题是否得到解决。

——更新——

刚刚我在备份需要清理的数据文件时发现,在配置文件config.yml里面,我之前填写的cookie配置项被删除了,这应该就是(更新到mirai2.6.4后)最近两天没有检测推送的原因,另外,我注意到,mirai似乎每隔一段时间就会修改一下配置文件config.yml,经常把我填写的双引号改成单引号,偶尔还会自己删除引号里面的内容,这问题其实我在之前用mirai2.2.2时就已经注意到了,我当时以为是mirai的问题,就通过把配置文件config.yml的权限修改成了只读的方法解决了此问题,但升级到2.6.4以后,我就以为此问题不会再出现了,大意了既没有改权限也没再去看配置文件,导致现在才发现cookie没了…… image

Colter23 commented 3 years ago

这个应该是你在开着mirai的情况下修改配置文件。
mirai运行时会把配置文件加载到内存中进行使用,之后会不定时的更新磁盘中的配置文件,你图片中的这个情况就是你修改了本地文件后,mirai也把内存中的配置更新到本地文件,所以冲突了。
请完全关闭mirai后,再修改配置文件,确认保存后再启动mirai。
至于停止检测,最近我会排查一下,有必要的话会进行重构,之前写的确实太烂了

byx2020 commented 3 years ago

这个应该是你在开着mirai的情况下修改配置文件。 mirai运行时会把配置文件加载到内存中进行使用,之后会不定时的更新磁盘中的配置文件,你图片中的这个情况就是你修改了本地文件后,mirai也把内存中的配置更新到本地文件,所以冲突了。 请完全关闭mirai后,再修改配置文件,确认保存后再启动mirai。

@Colter23 关于这一点,我可以确定是在完全关闭mirai后再修改的配置文件(刚刚测试过几次),但是在每次修改保存好配置文件再启动mirai之后,我修改的配置文件中的COOKIE配置项内容都会被删除只留下两个单引号,而且我尝试订阅也会出现错误。(怎么感觉我越折腾问题反而越多了:anger:) 订阅

Colter23 commented 3 years ago

不是越来越多,订阅需要cookie的,没有肯定会报错
如果操作没有问题的应该不会出现这个问题,你看上面那些内容mirai就没删过
去确认一下,是否是格式的问题,yml对格式要求很高,多个空格少个空格都不行
再确定一下cookie是否正确,或者重新获取一下,确保cookie完整以及被双引号完全包括

byx2020 commented 3 years ago

不是越来越多,订阅需要cookie的,没有肯定会报错 如果操作没有问题的应该不会出现这个问题,你看上面那些内容mirai就没删过 去确认一下,是否是格式的问题,yml对格式要求很高,多个空格少个空格都不行 再确定一下cookie是否正确,或者重新获取一下,确保cookie完整以及被双引号完全包括

@Colter23 我再去检查了一下,格式应该没有问题,空格之类的也没少,之前就是这样的也能运行,等会我直接把配置文件的内容贴在下面吧,cookie我已经重新获取了好几次,复制时都是右键直接复制cookie值的,应该也不存在缺漏的情况,这个我以前也是这么做的没有问题。

admin: 756445875
exception: true
pushMode: 0
botState: true
basePath: '/DynamicPlugin'
font: 微软雅黑
friend: 
  enable: true
  agreeNewFriendRequest: false
  welcomeMessage: 
group: 
  enable: false
  welcomeMemberJoin: false
  welcomeMessage: 
dynamic: 
  enable: true
  interval: 15
  lowSpeed: '200-800'
  videoMode: false
  saveDynamicImage: true
live: 
  enable: false
  indeApi: false
baiduTranslate: 
  enable: false
  APP_ID: ''
  SECURITY_KEY: ''
BPI: 
  dynamic: 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?visitor_uid=1111111111&offset_dynamic_id=0&need_top=0&host_uid='
  followNum: 'https://api.bilibili.com/x/relation/stat?vmid='
  liveStatus: 'https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id='
  liveRoom: 'https://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid='
  guard: 'https://api.live.bilibili.com/xlive/app-room/v2/guardTab/topList?page=1&page_size=1&'
  COOKIE: "fingerprint=bbdd7632jhdsj0a42ee5dhjsd6734hsd; SESSDATA=78456579,16456557,7785*61; bili_jct=7ba7c067dsiu90e4296e23592; DedeUserID=14554504; DedeUserID__ckMd5=6aee47s98f40; sid=65erf3es3"
Colter23 commented 3 years ago

等一等吧,等着看看能不能改成不需要cookie的,我再去找找api
(其实目前需要cookie的地方主要是直播检测,应该有不需要cookie的api)

byx2020 commented 3 years ago

等一等吧,等着看看能不能改成不需要cookie的,我再去找找api (其实目前需要cookie的地方主要是直播检测,应该有不需要cookie的api)

其实需不需要cookie对我来说影响并不是太大,毕竟获取cookie也不是多麻烦的事情,而且通常只需要获取一次就可以用很久了(我之前就是这样),我奇怪的是,基本和以前一样的操作流程,我之前就可以正常加载cookie并检测推送,为什么现在就不行了,如果找不到原因的话,以后还有可能会出现类似的问题:pill:

Colter23 commented 3 years ago

我用你这个cookie可以正常运行,那这应该不是我插件的问题。可能是系统或者mirai的问题?

byx2020 commented 3 years ago

我用你这个cookie可以正常运行,那这应该不是我插件的问题。可能是系统或者mirai的问题?

啊这,怎会如此,上面那个cookie我在发出来之前随便改了几个数字(格式没改),应该是一个错误的cookie,怎么还能用的…… 另外,关于系统和mirai,系统我用的腾讯云服务器(见下图),mirai版本是2.6.4,通过mcl-installer-72b890d-windows-amd64.exe安装的,应该也没什么问题吧,因为运行其他插件都是正常的,你还需要看什么数据我都可以给你。 image

Colter23 commented 3 years ago

这个应该是你在开着mirai的情况下修改配置文件。 mirai运行时会把配置文件加载到内存中进行使用,之后会不定时的更新磁盘中的配置文件,你图片中的这个情况就是你修改了本地文件后,mirai也把内存中的配置更新到本地文件,所以冲突了。 请完全关闭mirai后,再修改配置文件,确认保存后再启动mirai。

@Colter23 关于这一点,我可以确定是在完全关闭mirai后再修改的配置文件(刚刚测试过几次),但是在每次修改保存好配置文件再启动mirai之后,我修改的配置文件中的COOKIE配置项内容都会被删除只留下两个单引号,而且我尝试订阅也会出现错误。(怎么感觉我越折腾问题反而越多了💢) 订阅

啊这,你这么一说我去试了试。。好像这个报错的那个api只要cookie不为空就可以。。。

至于为啥会清空,可能跟这个map有关?map内的键值对没法探测,你启动时都运行了初始化程序。不过也说不通,我这边是只要配置文件中有这个变量,他就不会进行初始化,不过为啥你那每此都初始化了。。 算了不用管了,等会我改一改,把cookie去掉

image

SekiBetu commented 3 years ago

不能弃用cookie啊,弃用了会频率限制,很快就412了

Colter23 commented 3 years ago

啊,真的吗。我刚才运行了一段时间没有问题。10秒左右的访问间隔应该问题不大吧

SekiBetu commented 3 years ago

要么你默认不填就不用cookie,填了就用这样子,让用户自己选择

SekiBetu commented 3 years ago

运行一段时间而已,频率限制不会因为你用了一段时间就限制的,是你长时间这个频率在请求,久了就给你黑号了

Colter23 commented 3 years ago

行吧,我先运行一晚上试试。我觉得这个查看动态应该问题不大。

Colter23 commented 3 years ago

运行一段时间而已,频率限制不会因为你用了一段时间就限制的,是你长时间这个频率在请求,久了就给你黑号了

目前开了一天了(全默认配置,订阅数7),没有问题,如果明天也没事的话,我就发布了。

Colter23 commented 3 years ago

有大佬做了b站的动态推送插件,如果觉得我这个不好用可以试试那个 BiliBili Helper

byx2020 commented 3 years ago

有大佬做了b站的动态推送插件,如果觉得我这个不好用可以试试那个 BiliBili Helper

问题不大, 其实我最开始用你这个插件是看中了可以自动同意好友的功能(毕竟mirai有这功能的插件我当时就看到了这一个),这从我提的第一个issues可以看出来,后来才注意到这个加好友插件还有B站订阅的功能(买椟还珠.jpg), B站订阅的功能目前主要是其他群友在用,总之感谢大佬的开发和分享:bouquet:

SekiBetu commented 3 years ago

image 如图,最近几天一直不正常,一会能正常发,一会又不能

byx2020 commented 3 years ago

@Colter23 经过最近一周的对照实验,我现在基本可以确定此问题出现的原因了,与cookie无关,与推送模式有关。 在文字推送模式下,可以保证稳定定时检测,基本不会出现停止检测的现象。 在图片推送模式下,大概每1-3天就会出现停止检测的现象,初步推测原因为插件在制图过程中出现了问题,进而导致影响到了定时检测。