菜鸡开烂坑
可参考范例:sb-child/myqqbot
首先
条件
- 创建一个QQ账户(最好),用自己的QQ账户也可以
- 服务器(就是一台可以不关机能联网的电脑)
- 肝(滑稽
下载与配置
先打开一遍以生成config.yml
,通信方式建议选择HTTP通信
和正向 Websocket 通信
,毕竟可以直接复制粘贴代码。
然后配置config.yml
。
第一次登录应该是需要验证的,一般就是拖滑条或者QQ扫码。
拖滑条相对简单一点,不过家用宽带不知为何会收不到Ticket
,但服务器却可以。
拖滑条只需把链接复制到浏览器里,然后验证即可。
不过没关系,可以使用QQ扫码,得登录手机QQ
一切准备就绪以后,就可以编写代码了。
代码
pip uninstall -y websocket
pip install rel requests websocket-client
以下是一个复读机的例子:
import websocket
import json
import rel
import requests
def getMessage(ws,message):
m = dict(json.loads(message))
if m["post_type"] == "message":
requests.get("http://127.0.0.1:5700/send_msg?user_id=&dmessage=%s" % (m["user_id"],m["message"]))
if name == "main":
#websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:5701/",on_message=getMessage)
ws.run_forever(dispatcher=rel) # Set dispatcher to automatic reconnection
rel.signal(2, rel.abort) # Keyboard Interrupt
rel.dispatch()
开发时可加入websocket.enableTrace(True)
,不过控制台会十分凌乱。
复读机的http
端口为5700
,Web Socket
端口为5701
,可在config.yml
配置。
原理
Web Socket
会收到从go-cqhttp
获取到的json
信息,接着调用在websocket.WebSocketApp
中on_message
定义的函数,建议加入websocket.enableTrace(True)
以查看json
。
使用if
是因为要过滤掉心跳功能产生的json
。
不过此复读机只适用于在与bot
私聊时,在裙里就会报错了。
签到
有了这一些,一个能收消息和发消息的QQ机器人就已经成功一半了,接下来就是签到功能。
命令
通过Web Socket
来获取json
,接着再提取json
中用户发来的信息,如果等于命令的话,那么就执行签到代码。
数据的存储
json
比较方便用于存储数据,不过不大稳定,数据比较大的情况下建议使用SQLite,一种轻量的数据库,不过比较难。
读:
readJson = open(jsonPath, "r")
jsonDict = json.load(readJson)
写:
createJson = {"user": userList, "name": nameList,"count": countList, "day": dayList}
newJson = json.dumps(createJson)
openJson = open(jsonPath, "w")
openJson.write(newJson)
openJson.close()
数据的读取
如createJson
所示,我是把一个List
保存到json
中去的。
保存用户的name
是因为我要做签到板功能,就是输出所有的签到人数与签到天数。
如果只需做签到功能,那么可以不保存name
,使用json
中的nickname
即可。
读取时我只需要使用json
模块,把json
转换为Dict
,然后再用四个变量分别保存user
、name
、count
、day
所对应的列表即可。
对了,同一个用户在四个列表里的index
都是一样的。
Comments 12 条评论
背景太花了,字都看不清
@火喵 马上解决
@火喵 开了个模糊,这回应该彳亍了
@泠风寒声 整挺好
没服务器怎么办
@Koileo Azure不知道彳亍不彳亍我貌似不会用(没用过
12岁就这么强??!!
(°∀°)ノ
@Jdeal 一点点Python而已.jpg
websocket那一段还是复制别人的
看见了Python,我瞬间感觉
手机+termux好像也可以
(=・ω・=)
@Toserk 还有,想抓我的IP是不可能的
这辈子都不可能的(
@Toserk 真坏
@Toserk 是可以的,但你得保证那Python程序一直运行着