barbruh.22.01.23

一大早发现github actions崩了,原因是空间不足🤔而且更蛋疼的是,貌似github的ip段被rosefile拉黑了(悲🤔

所以我只能用自己的vps搞了🤔某种程度上事情变得更加方便,因为现在我可以随时停掉脚本并修改和重新运行🤔

我发现那个rosefile脚本还是有些问题的,比如它原来用aria2c的返回信息来决定文件名,从而将文件名传递给discord drive脚本🤔那么问题来了,如果它没有获取到文件名呢?discord drive脚本就不会执行,而那个文件也不会删除,只会越堆越多,直到塞满空间(悲🤔

所以我改成了老样子,在一个新的目录里下载文件,然后将里面所有下载下来的文件(其实每次就只有一个)用for循环上传并删除🤔

接下来我发现它一小时掉了好几百个文件,打开log看了一眼,完全没有获取到链接(悲🤔这说明它掉登录了🤔看来,这狗逼玩意的确需要每执行一次就login一次🤔

另外discord完全无法搜索链接里面的文件名,既然这样的话,恐怕只有一种办法能完成检索了,那就是用discord备份脚本来dump下来频道里所有消息,然后去grep了(悲🤔而对于那些文件名没有在rosefile链接里出现的玩意,恐怕只能想别的办法获取文件名了(悲🤔

thonk

话说回来我既然选择每次在rosefile下文件时都登录一遍的话,是不是可以考虑把整个rosefile相关的脚本都便乘申必脚本呢?🤔这样的话,github actions只需要两个参数,一个是申必脚本的位置,一个是list文件的位置🤔list文件也许可以整个自适应处理,如果是文本的话直接用,如果是rar的话走那套流程🤔当然那个rar的密码也是申必玩意,所以只能写进申必脚本里🤔

至于discord drive的申必脚本,我其实可以用rosefile的申必脚本来下(确信🤔

bruhfei

跑了一下午,感觉这个脚本问题真たま多🤔外加上我的那个vps又开始限流了,而且github actions又可以用了,我又准备把下载搬到github actions上去🤔

我的申必脚本在一番迫真改造后,已经既可以在我自己的机子上用,也可以在github的机子上用了🤔它们的区别无非是某些程序的位置不同而已,我的机子上是绝对路径,它的机子上是相对路径(确信🤔

通过观察114514个日志文件,我发现下载失败最有可能的原因是rosefile的那么多链接可用性不同,有的文件二号链接好使一号不好使,有的文件相反🤔再说了以它出现在grep结果的位置来选择也不是什么明智的选法,所以我准备一次性把这两个问题都解决了(确信🤔

首先,它获取下载链接后应该直接保存成文件,然后我就可以多次分析了🤔实测这些链接需要的aria2c参数是完全一样的,这样我就可以用grep直接将某个域名开头的链接送进aria2c🤔而如果这个链接不好使的话,比如报错403或者514或者114514,它就执行failsafe方案,也就是一号链接,从rosefile的服务器直接下🤔这个链接肯定比什么白嫖onedrive慢,但至少保证可用🤔

这么折腾一番后,下载再也没有出错过,而且我们现在貌似只剩两千多个文件了(确信🤔不错,我应该能赶在rosefile共享会员过期之前搞定这事(确信🤔

diff

现在还遗留下来一个问题,那些没有下下来的文件怎么从discord频道里找出来?或者更广泛地说,我有可能会往list里面添加新的文件,哪些文件还没有出现在discord频道里?🤔

为了得到这个问题的答案,可能的做法之一是:先从discord所有消息里面筛选出那些下载完成的文件(比如后缀是metadata.rar而且不是currentprogress.metadata.rar),然后对其中的每一项,在list文件里面grep🤔这样至少绝大多数的list文件里的项就能被排除了(确信🤔

每grep match一次,就将这个文件同时从list和discord消息里删除🤔剩下的list就是没有下载的、由于链接里完全就没有文件名从而不知道有没有下载下来的(悲🤔

example:

tac discord.backups.json | grep -Po 'https://cdn.discordapp.com/attachments/.*?(?=")' > thonkeqing.txt
cat thonkeqing.txt | grep -Po '(?<=[0-9]/).*?(?=.rar)' | grep -Po '(?<=[0-9]/).*?(?=.metadata)' | grep -v "currentprogress" > ryzathonk.txt
for line in `cat ryzathonk.txt`
do
    lineno=`grep -rn "/line\." list | cut -f1 -d: | head -1`
    if [ "lineno" ]
    then
        echo "lineno"
        sed -i "lineno d" list
    fi
    done

在删除list里记录方面,最后我选择了删掉grep匹配到的第一行🤔考虑到discord消息和list从上到下都是时间从旧到新,那么当一个discord消息中的文件在list中匹配到多个记录(尤其是那些以纯数字命名的rar/zip)时,list中最先出现的记录被下载完成而且就是这个文件的概率最大(确信🤔

thonkeqing

已经跑了可能三个小时,没有出任何事故(确信🤔

发表评论