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

(图源 :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上运行脚本(原因嘛,懂得都懂)。又或者采取其它判断方法(我还没想到更好的办法,比如起个新号专门用来点活动贴?)。
又或者回到老路上,自己每次注意一些就好啦(比如活动过后及时关掉脚本)——咦,貌似这个可行性最高呀,哈哈。所以,我是折腾了个寂寞呀!
寂寞让欧哥如此美丽
额。。。。
一直在点赞……这bug 参与活动的应该都很喜欢哈哈哈哈哈
O哥V5