[开发/笔记]利用 Go-CQHTTP 实现对打卡情况的自动化汇报
侧边栏壁纸
  • 累计撰写 65 篇文章
  • 累计收到 3 条评论

[开发/笔记]利用 Go-CQHTTP 实现对打卡情况的自动化汇报

x1n
x1n
2021-09-01 / 0 评论 / 22 阅读 / 正在检测是否收录...

0201.png
  作为班长,每天催打卡痛苦不堪。上学期用了来自 @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可用

0202.png

再测试一下事件上报

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()

0203.png

好用,包是一个 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

1

评论

博主关闭了当前页面的评论