浅尝:Django与go-cphttp搭建QQ机器人

浅尝:Djangogo-cqhttp搭建QQ机器人

所谓QQ机器人就是对QQ事件产生响应。如戳一戳、加好友申请,文字甚至语音消息等等事件,当你机器人收到这些事件时在服务端产生操作,如回复、发邮件、新建文件夹等等。炉火纯青者可以试试用QQ机器人来配置服务器等等。

首先我们先来认识一下工具:

go-cqhttp:一个通过简单配置就能获取你QQ事件的工具,它可以监听你QQ几乎所有事件,然后将事件信息反馈给你的服务器。
Django:一个Python的web框架,我们主要利用它来接收go-cqhttp发来的信息来进行操作。

下载配置go-cphttp:

我们先在人家的仓库查找对应版本的程序并下载,如 win10且为amd架构的下载go-cqhttp_windows_amd64.exe,下载后在CMD里面cd进入文件目录,将程序在CMD中执行,由于咱们使用Django作为接收端,所以在初始化生成配置文件config.yml时我们选择0. http
然后在配置文件中进行相关配置,配置的大框架看这里

需要注意:

一般情况只配置开头的QQ号和末尾的HTTP post即可,QQ号是监听哪个QQ,post是go-cphttp将信息反馈到哪里,当你收到请求时处理复杂、费时的操作时推荐将重连延迟和间隔设置大一点,否则go-cphttp会以为你的服务器没有收到请求而一直重发。

(go-cqhttp在收到服务器的响应时,状态码不是500时就算发送请求成功,所以一般情况return HttpResponse('ok')就够用,但是当你在收到请求时做一些比如下载大视频等等操作时,Django来不及返回响应,导致go-cqhttp重发指令)
在这里插入图片描述

config.yml中末尾的HTTP post配置中只将 -url 写了即可(地址填自己的服务器地址,平时在本机跑的话就Django默认的- url: http://127.0.0.1:8000/就行)在这里插入图片描述

默认情况下,go-cqhttp在遇到事件或心跳时都会反馈信息给服务器,这个时候就需要配置过滤器,将不需要的信息过滤掉,过滤配置还是在config.yml中操作。

我们在同目录下创建一个名称随意的json文件,我的是filter.json,里面写一些配置信息,别忘记在config.yml配置你的json目录哦~
在这里插入图片描述

配置过滤器

官方的教程或许看的你一头雾水,但是当你Django接收事件后,打印出请求体后一切就明白了,,,

# 在urls.py
urlpatterns = [
    path('', views.test),
]

# 在views.py
# 下面这个装饰器是免除Django csrf_token验证的一种手段
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def test(request):
    print(json.loads(request.body))
    return HttpResponse('ok')

举个例子:
当你收到消息时,Django打印出的消息体是:
在这里插入图片描述
然后对比官方的说明,过滤对应的属性即可。比如只上报昵称为emm的人的信息:

{
	"sender.nickname": "emm"
}

就跟爬虫一样,关键字是观察格式

发送消息

当Django接受到消息,你便可以采取得到该消息后的各种操作了:
比如:回复消息:
官方的接口文档里面有详细的接口介绍,比如发消息就向/send_private_msg这个接口发对应格式的数据:

import requests as rq
data = {"user_id": QQ号, "message": "阿弥陀佛善哉善哉!"}
interface = "/send_private_msg"
# get/post请求都可以哦,由于参数长度原因,推荐post
rq.post("http://127.0.0.1:5700"+interface, data=data)
# 因为5700是go-cphttp默认监听的端口,当然可以在配置文件中设置

另外,如果你将go-cqhttp放入服务器出现登录异常(QQ检测出你的ip地址异常会怀疑你QQ被盗了,所以阻止你登录的情况)时,尝试本地登录后直接将生成的session.token文件打包到服务器上即可解决

点击查看原文

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lfan ke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值