调用接口
一、 概述
1、 简介
在我们实现了权限控制功能后,那么我们就在也不用担心机器人话太多,同时,平时又没时间,电脑又不在身边,而无法控制机器人了。那么,我们实现了权限的管理就好说了。然后,又出现一个问题了,我们应该如何利用这个权限系统,来帮助我们管理机器人呢?
这个大家马上就会知晓了,我会从如何控制智能聊天,以及控制戳一戳,再接入一些功能接口。来讲述,如何使用这个权限功能。
2、 接口
其次,我们还需要了解一下,什么是接口呢?
应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。
举一个例子:想想您的房子、公寓或其他住宅的供电方式,如果您想在您的房子里用电,只要把电器的插头插入插座就可以,而不是直接把它连接到电线上——这样做非常低效,而且对于不是电工的人会是困难和危险的。
同时,可以根据这张图来理解API的功能,其就是可以给客户端来提供数据的。
我们访问一些特定的API就可以得到我们想要的数据,这有一些较为好用的API提供方:
下面,我将来告诉大家,API的使用方法
二、 接入权限系统
在调用API之前,我们先来学习一下,如何给戳一戳和智能聊天接入我们的权限管理系统,私聊的权限这里就不做展示了。大家可以根据这几次的文章,开发一个私聊的权限。
1、 智能聊天
我是这样设置的,为了防止机器人回的消息过多,只有艾特机器人的消息,它才会回,当然这是基于权限的基础上了,那么,如何接入呢?
请大家看代码:
if _.get("message_type") == "group" and "[CQ:at,qq=2786631176]" in _["raw_message"]: # 即使用in来判断其是否为艾特机器人的消息
# 制作群聊消息
db = current_app.config["db"]
session = db.session
group = session.query(Group).filter(db.and_(Group.qqId == _["group_id"], Group.isDetect)).first() # 同时这个群要支持机器人聊天,才会进入下一步
if group and group.group2auth.chat: # 如果允许聊天的话,就在群内开启聊天功能,这个是基于if的权限管理系统
asyncio.run(GroupChatMes.handle_group(_))
# GroupChatMes.handle_group的内容
async def handle_group(resp):
message = resp["raw_message"].replace("[CQ:at,qq=2786631176]", "") # 获取发送过来的消息
gid = resp["group_id"] # 获取发送消息的群号
# 处理群聊信息
if message.strip() == "":
await send(gid, "艾特我干啥?又不发消息,一巴掌呼死你![CQ:face,id=86][CQ:face,id=12]", "group")
else:
# 调用接口,来获取回复,同时这里使用了异步请求
async with httpx.AsyncClient() as client:
params = {
"key": "free",
"appid": 0,
"msg": message,
}
resp = await client.get("http://api.qingyunke.com/api.php", params=params)
_ = resp.json()
ret = _.get("content", "获取回复失败")
await send(gid, ret, "group") # 发送群组消息
2、 戳一戳
戳一戳,就回复,这个功能是有点烦人的,如果是讨厌这个机器人的话,那当然就需要进行权限的控制啦!废话不多说,直接上代码
if _.get("sub_type") == "poke":
# 如果事件类型为戳一戳
asyncio.run(GroupAndPri.click_event(_))
# GroupAndPri.click_event的内容
async def click_event(resp):
uid = resp["user_id"]
tid = resp["target_id"]
if