作为班长,每天催打卡痛苦不堪。上学期用了来自 @TechCiel 的JLU-Health-Reporter 之后,我倒是轻松多了。假期临结束,导员催打卡痛苦不堪,所以让我推广自动打卡。我推广打卡还是痛苦不堪,因为各班交上来的信息参差不齐,有的不能正常打卡。也正当我想要做一个 QQ 机器人的时候。干脆结合一下,用 QQ 机器人每天汇报未能成功打卡以及爬取管理员查询到的未打卡情况。
1. Go-CQHTTP 下载与配置
在 Mrs4s/go-cqhttp 下载 Release(Linux_AMD64)
wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-beta6/go-cqhttp_linux_amd64.tar.gz
tar -xzf go-cqhttp_linux_amd64.tar.gz
rm -f go-cqhttp_linux_amd64.tar.gz
file go-cqhttp
> go-cqhttp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
# 直接就是一个ELF,执行一下
# 会帮助生成配置文件,我选择的是HTTP协议,推荐可以直接使用HTTP
# 填写好QQ号和密码
这里提供一下我暂时使用的配置文件
account: # 账号相关
uin: qqNum # QQ账号
password: 'passwd' # 密码为空时使用扫码登录
encrypt: false # 是否开启密码加密
status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
relogin: # 重连设置
delay: 3 # 首次重连延迟, 单位秒
interval: 3 # 重连间隔
max-times: 0 # 最大重连次数, 0为无限制
use-sso-address: true
heartbeat:
interval: 10
# heartbeat不一定要开,默认是5有点影响调试,我开到10
message:
post-format: string
ignore-invalid-cqcode: false
force-fragment: false
fix-url: false
proxy-rewrite: ''
report-self-message: false
remove-reply-at: false
extra-reply-data: false
skip-mime-scan: false
output:
log-level: warn
log-aging: 15
log-force-new: true
debug: false # 开启调试模式
default-middlewares: &default
access-token: 'passwd'
# 事件过滤器文件目录
filter: ''
rate-limit:
enabled: false # 是否启用限速
frequency: 1 # 令牌回复频率, 单位秒
bucket: 1 # 令牌桶大小
database: # 数据库相关设置
leveldb:
enable: true
servers:
- http:
host: 127.0.0.1
port: 5700
timeout: 5
long-polling:
enabled: false
max-queue-size: 2000
middlewares:
<<: *default # 引用默认中间件
post:
- url: 127.0.0.1:5701 # 地址
secret: 'passwd' # 密钥
screen -R cqhttp
# 用screen把cqhttp和即将要写的机器人放后台
./go-cqhttp
curl 127.0.0.1:5700
> {"data":null,"msg":"API_NOT_FOUND","retcode":404,"status":"failed","wording":"API不存在"}
# 已经成功部署, API可用
再测试一下事件上报
import json
import socket
HOST = "localhost"
PORT = 5701
ADDR = (HOST, PORT)
Server = socket.socket()
Server.bind(ADDR)
Server.listen(10)
server, addr = Server.accept()
print(server.recv(1024))
server.close()
好用,包是一个 HTTP POST,Body 是一段 json
至此,Go-CQHTTP 配置完毕
2. QQ机器人编写
讲道理,写这个其实还担法律风险,之前好多 QQ 机器人都被腾讯告了,本文只供研究技术使用,下载本文代码请于 24 小时内删除
关于群内应用的 QQ 机器人,会在下一篇文章中进行描述。本文主要实现了调用 /send_group_msg API 来定时把自动打卡不成功的信息发到固定的QQ群里
from time import time
import requests
file_path = "/home/Autosign/AutoSign/logs/"
if (int(time()%86400/3600)+8)%24 == 10 :
file_path += "Morning.log"
else :
file_path += "Night.log"
# file_path = "tt.log"
with open(file_path, "r") as log :
for line in log :
if "failed" in line :
lcur = line.find("B")+8
rcur = line.rfind(":")
message = line[lcur:rcur]
print(message)
data = {
'group_id' : foo,
'message' : message,
'auto_escape' : False
}
url = "http://127.0.0.1:5700/send_group_msg"
rev = requests.post(url, data=data)
喜欢POST可以,API也同样支持GET
评论