魔方吧·中文魔方俱乐部

标题: PK群打乱机器人[更新打乱开发接口] [打印本页]

作者: 铯_猪哥恐鸣    时间: 2011-6-9 22:07:47     标题: PK群打乱机器人[更新打乱开发接口]

之前发的那个帖子似乎早就不见了。所以干脆重新发一个帖子,把所有功能都整理一下,顺便“答疑”吧。 一、什么是PK群打乱机器人
它就是一个QQ帐号(现在是793049104),当它加入某一个群并处于工作状态时,它会监听群里的聊天信息,当它收到特定的信息(就是指令)时,会通过聊天窗口发送指令对应的信息,比如一个打乱公式等等。(最新版加入了私聊的功能,魔友对着机器人发送消息也会被认为是有效指令) 下面会给出指令与功能的对应表,意思就是,你在群里发一条特定的字符串,或者对机器人发送同样的字符串,机器人就会给出相应的反应。 注意所有指令是以一个英文的句号开始,这样比较不容易和正常的聊天内容冲突。
二、当前机器人有哪些功能
打乱功能:以下所有打乱完全遵循WCA打乱要求,除三阶打乱以外的所有WCA项目的打乱均根据WCA官方软件改编成。
N阶魔方的打乱(N从2到7)。
指令:“.n”。比如2阶打乱就是“.2”,三阶打乱就是".3",依次类推。
金字塔打乱(最短步数版本)。
指令:“.py”
SQ1打乱(根据WCA要求,随机步数)
指令:“.sq”
五魔方打乱(WCA形式)
指令:“.mx”
训练功能:下面两个打乱不是官方的项目,只是方便魔友平时训练而使用的。
三阶顶层打乱。给出的是一条三阶打乱公式,保证打乱完成以后魔方的前两层已经完成,方便魔友对顶层作针对性的训练或练习。
指令:“.ll”
ZBLL打乱。与三阶顶层打乱类似,但保证打乱完成以后顶层十字已经完成(略懂zbf2l或vhf2l的魔友应该知道使用这两个方法f2l后顶层十字已经完成)。
指令:“.zb”
信息检索功能
WCA信息检索功能。根据给定的姓名部分或者WCAid,在WCA的数据库中查找该人。如果找到多个,则返回WCAID最靠前的5位,如果只找到一个,返回这个人出了多盲以外所有项目的成绩(包括平均和单次,但暂时不显示排名)
指令:“.wca XXX”,XXX为人名或WCAID
三、如何在我的群中添加打乱机器人
方法一:
发送群号到:qq280833822@163.com,我会定期查收邮件(其实一般每天都会查收好几次),看到的话我会主动去加群
方法二:
趁我在的时候,在别的群找我,或者直接加我为好友(现在是不需要验证全通过),然后告诉我群号。。。
方法三:
如果某天你运气特别好,看到我处于“请勿打扰”的状态,那么恭喜你,你可以选择直接在群中邀请我就行了。如果我处于在线、离开或者除了“请勿打扰”之外的状态,邀请我入群的请求我是收不到的。
四、机器人什么时候工作、工作原理
事实上,只有当机器人处于“在线”的时候,它才是正常工作的,如果大家看到机器人的状态是“离线”,“请勿打扰”等状态,说明机器人并不在工作,为什么下面解释
机器人工作原理
当大家在聊天的时候,我这里(我的电脑,就是我现在用的笔记本电脑,发帖子的这台电脑,操作系统 == ubuntu 11.04 != windows)开着一个后台程序,它会自动监听聊天内容,并根据聊天内容提取指令,然后作出相应的响应。所以如果我的电脑关着,那机器人自然是不会工作的。
五、机器人打乱开发接口
打乱机器人的响应部分本身使用python语言写的,在底层通过调用一个个独立的打乱模块(.py文件)等实现提供相应的功能。 由于我个人能力有限,另外对各种魔方打乱公式的描述也不是很明白,所以这里开放这一接口,使得魔友们可以一起来完善机器人的功能。 底层的模块分为两类,打乱类(如三阶魔方打乱),和功能类(如WCA信息检索),它们的区别在于,打乱类仅接受命令作为函数调用,功能类除了命令以外还接受一个可选的参数。 两类模块均需要实现这个函数: def commands() 该函数返回一个元组,包含所有该模块需要监听的字符串。 由于考虑到某一些模块可能会对多种字符串作出响应(例如高阶打乱需要同时监听4567阶的命令),所以设计的时候要求返回的是元组,而非字符串。 例如当模块返回('4', '5', '6', '7')时,如果聊天内容为'.4', '.5', '.6', '.7',则机器人会调用该模块。 除此之外,打乱类需要实现: def get(cmds) 功能类需要实现: def get(cmds, args) 其中,cmds为该模块监听的元组之一,args为功能模块的输入参数。该函数返回相应的打乱或功能。 更精确的,cmds和args分别为下述python正则表达式的group(1)和group(2)
  1. r"^\.(.+?)(?: (.+?))??[\s]*$"
复制代码
打乱类功能举例 scramblell.py
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. import re, random;
  4. print "Load 3x3x3 Last Layer Scrambles"
  5. sfile = open ('ll-scramble.txt', 'r');
  6. slist = [];
  7. while 1 :
  8. msg = sfile.readline();
  9. if msg != "":
  10. slist.append(re.subn("[\s]*$", "", msg)[0]);
  11. else:
  12. break
  13. sfile.close();
  14. print len(slist), "Load";
  15. def get(cmds):
  16. index = random.randint(0, len(slist)-1);
  17. return "{333LL} %s"%(slist[index]);
  18. def commands():
  19. return ('ll',);
复制代码
如果有热心魔友参照上文写了其他魔方的打乱模块,或者有写的意向的,欢迎通过站内信,电子邮件(qq280833822@163.com)的方式直接与我联系。 更新中,不占楼。 ====================答疑==================== TO 7# 我并没有修改QQ,也不可能修改QQ,我能做的只是发送信息。确实有的时候一个人玩的话在群里会有类似“刷屏”的作用,所以希望魔友们在自己练习时,通过对机器人私聊的方式给出指令即可。 至于临时窗口,我现在收不到临时聊天信息,估计没办法了。 TO 10# 是三阶的打乱编号,最初设计的时候为了方便之后交流。。。所以一直都保留着这个东西。。。 [ 本帖最后由 铯_猪哥恐鸣 于 2011-6-11 18:43 编辑 ]
作者: 没有特殊字符    时间: 2011-6-9 22:09:31

SF 辛苦了啊   不扣分吧
作者: 宇枫 幽蓝    时间: 2011-6-9 22:13:24

关于pkg的的帖子怎么能少了我过来围观呢?哈哈!前排!
作者: 42752277    时间: 2011-6-9 22:17:04

从没试过七阶打乱
作者: Ipomoea゛Nil    时间: 2011-6-9 22:22:57

高手。。。。。。。。。。。。。
作者: Jersey    时间: 2011-6-9 22:25:08

之前奇遇有弄了个机器人,但现在不能用了!
很可惜!
作者: lsj0811    时间: 2011-6-9 22:32:48

前排围观,还有,能不能建立一个临时窗口专门供打乱用???要不PK就跟刷屏差不多了,影响群聊天
作者: feifucong    时间: 2011-6-9 22:42:22

貌似已经用了一段时间了哈~~~挺好用的~~
作者: 博水三千    时间: 2011-6-9 23:03:49

哦,酱紫啊!太神奇了
作者: 博水三千    时间: 2011-6-9 23:15:42     标题: 还有个问题

[水ψ禅] {81402} D U B2 D2 U R2 F' D L' D' U2 B2 R2 D2 U L' F U'  (18f*)   {}里面的81402是随机码还是像{square1}一样有特定含义啊?
作者: woyujnss    时间: 2011-6-9 23:47:13

Ubuntu11.4……
就是因为这个新版本搞得我的系统崩溃了N次……
作者: 铯_猪哥恐鸣    时间: 2011-6-9 23:50:21     标题: 回复 11# 的帖子

默哀。。你当小白鼠了?。。
作者: sBitterTea    时间: 2011-6-10 00:08:45

谢谢楼主发了这么好用的东西...的确在群里PK方便了很多...
作者: 1900    时间: 2011-6-10 01:28:53

的确很好用啊!真的感谢lz啊!
作者: 夜雨听风    时间: 2011-6-10 08:34:26

问下,指令前面的符号是 点 还是-
作者: yanzi7816    时间: 2011-6-10 08:49:19

最近看到过了...开始还真不知道
作者: 玉逸风    时间: 2011-6-10 10:18:18

我有时间给我的二阶群加上!!!
作者: Zeon.C    时间: 2011-7-6 02:52:43

学习中。。。
字数补丁




欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) Powered by Discuz! X2