N次犯错后,我痛下决心解决活动脚本的问题,然鹅......

中文区的小伙伴都知道我设置了一个专门的账户用来搞活动,很多时候都会有神秘大佬点赞支持参与活动的小伙伴。

image.png
(图源 :pixabay)

那么神秘大佬是如何判断是否点赞呢?其实这幕后都是一个脚本再处理,简单来讲是如下逻辑:

  • 脚本监控链上的最新点赞操作
  • 判断是否是活动账户发起的点赞
  • 如是,则神秘大佬计算点赞金额后跟赞

懂行的小伙伴一看就明白了,这不就是一个跟赞机器人嘛,哦对了,计算点赞金额这块稍微复杂了一丢丢,但是其实也没麻烦到哪去。

以前我在家里的Linux服务器上运行这个脚本,搞活动的时候开启一下,活动结束也不去管它,一切都如我意料的那般工作。

但后来为了方便编辑,我把这个脚本放到我当前工作的Windows电脑上来跑,嗯,也如我预想的那般工作——直到某天。

我还记得那天,突然发现神秘大佬的账户在点赞中文社区,且点赞比重不是整数,我就纳闷了,是谁在用神秘大佬账户点赞呢?

于是我找到我写过的一个神器,通过tx签名分析账户的幕后操作者(计算出公钥),结果你猜咋着,计算出来的操作者竟然是我自己!

什么?小丑竟是我自己!我百思不得其解,难道是我的POSTING KEY泄露了?又或者被以某种奇怪的方式黑了?

结果查来查去,发现竟然是我忘记了在Windows窗口中及时关掉活动脚本,导致它判断失误,一直在给小伙伴们点赞。

这导致了这甚至导致了某大佬去找神秘大佬抱怨,说神秘大佬账户的VP都要被我消耗干啦!呜呜呜,这也并非我本意呀!

造成这个“事故”有两方面原因:

  • Windows窗口里运行的脚本在电脑休眠再唤醒后依然后继续运行
  • 活动脚本中缺乏相应的判断

之前在Linux电脑上运行脚本,是因为我Putty会话一段时间不动或者电脑休眠它自己就断卡了,绝无脚本继续运行的道理(我也并不需要它继续运行)。没想到Windows窗口下运行的脚本竟然这么稳定——而这稳定反而给我带来了麻烦。

另外就是我应该在脚本中判断一下点赞的是否是活动帖,还是我日常的点赞。区别就是日常点赞都点主贴,活动参与贴都是回复。

所以,原则上我判断一下点赞的对象是否是回复就好。于是我写了如下判断,来进行检查:

        post = client.exec('condenser_api', 'get_content', [author,permlink])
        pprint(post)
        depth = post['depth']
        if (depth == 0) :
                print(f'{author}/{author} does not meet the participation requirements for the event.')
                return

看着是不是很简单?

结果我试着测试了一下,竟然反复报错:对depth = post['depth']TypeError: 'NoneType' object is not subscriptable

我特意用工具调用相应函数测试了一下,能正常返回POST的内容以及一些属性呀(包括depth),为啥放在脚本里就不好用了呢?

直到我后来注意到一条错误提示:'Assert Exception:false: Supported by hivemind'

这时我才想起来,我脚本测试用的是本地节点,而工具测试用的是api.hive.blog

两者的差异就是本地节点不支持hivemind,也就不包含文章数据,当然就获取不到了,当然就出错喽,没想到我竟然会犯这样蠢的错误。

所以若想加上这个判断,我就必须用支持hivemind的节点,我就必须在VPS上运行脚本(原因嘛,懂得都懂)。又或者采取其它判断方法(我还没想到更好的办法,比如起个新号专门用来点活动贴?)。

又或者回到老路上,自己每次注意一些就好啦(比如活动过后及时关掉脚本)——咦,貌似这个可行性最高呀,哈哈。所以,我是折腾了个寂寞呀!

Sort:  

寂寞让欧哥如此美丽

额。。。。

一直在点赞……这bug 参与活动的应该都很喜欢哈哈哈哈哈
O哥V5