简单的SMTH-BBS刷版面积分小程序

水木社区自商业化以来,搞出了什么积分制度,一堆技术版面被无情的关闭,倒是灌水用的八卦闲聊版面得到了充分的发展。近日我常上的某技术版面积分也从10万多扣至2万多,按照每周约5000分的扣分力度,估计撑不过一个月。有感于此,决定写一个小程序,专门用来给指定版面刷分。

水木社区的《版面积分实施细则》规定,每周考核将根据版面的访问人次、访问时间、在线人数、文章数、文章质量等数据来考核。这里最容易刷的无疑是访问人次和访问时间。因此决定专门用一个账号反复进行“进版”、“出版”的操作,既能提升人次,也能增加访问时间。

这种小活用脚本语言来干最合适不过了,正好 Ruby 中有专门的 Telnet 库,台湾某哥们还写过一篇《用 Ruby 玩 PTT》值得参考。最后完成的脚本如下:

require 'net/telnet'
require 'logger'

USER = 'user' # user id
PASSWORD = 'password' # password
BOARD_NAME = 'board' # board name
LOG_FILE = 'newsmth.log'

enter_count = 0
stay_time = 0

logger = Logger.new(LOG_FILE)
logger.level = Logger::INFO
logger.info 'Logfile opened.'

# Connect to bbs.newsmth.net
# The prompt string could be '输入', '>', '(菱形方块)', ']'
smth = Net::Telnet::new('Host' => 'bbs.newsmth.net', 'Timeout' => 10,
                        'Telnetmode' => false,
                        'Prompt' => /(\xA1\xF4)|(\xBC\xCC\xD0\xF8)|:|\]|>/n)
smth.cmd(USER) {|c| print c }
smth.cmd(PASSWORD) {|c| print c }
# Ignore the info screens by pressing enter
smth.cmd("\n\n\n\n\n") {|c| print c }
logger.info 'Connected to newsmth.net'

loop do
  begin
    system 'cls' # Clear screen, use 'clear' in Linux/Unix
    # Exit to main menu, then select "F) Favorites"
    smth.cmd('qqqqqf') {|c| print c }
    logger.info 'Exit board'
    sleep 0.5
    system 'cls'
    # Enter specified board by "s" command in bbs
    smth.cmd("s#{BOARD_NAME}") {|c| print c }
    logger.info "Enter board #{BOARD_NAME}"
    enter_count += 1
    sleep 5
    stay_time += 5
  rescue Interrupt  # Ctrl-C signal
    # Exit to main menu, then select "G) Exit bbs"
    smth.cmd("qqqqqg\n\n") {|c| print c }
    logger.info 'Exit bbs'
    logger.info "Entrance count: #{enter_count}"
    logger.info "Total stay time: #{stay_time} seconds"
    logger.info 'Logfile closed'
    logger.close
    exit
  rescue IOError => e
    logger.error(e.message)
  rescue TimeoutError => e
    logger.error(e.message)
  end
end

目前脚本正在稳定运行中,实际效果有待一周后观察版面积分的变化。

Update@2015-05-01: 经过断断续续两周时间的试运行,发现程序对版面积分的贡献并不大,版面一周无水且访问人数低下时,扣分依然很严重。据此推测,进版人次在版面积分考核的权重中并不是很高,所以用程序来刷进版次数是不太管用的。

Update-2@2015-8-28: 水木现在已经不考核版面积分了,全看站务心情。此文已经木有价值罗。