【Re:从零开始的QQ机器人搭建】 您所在的位置:网站首页 如何在qq上踢人 【Re:从零开始的QQ机器人搭建】

【Re:从零开始的QQ机器人搭建】

2023-08-20 19:00| 来源: 网络整理| 查看: 265

【Re:从零开始的QQ机器人搭建】—— 基于go-cqhttp

警告:小心智械危机(

前言

之前酷Q用的好好的,谁知道刚打完工会战不到2天tx就封了大部分机器人。所幸小部分有生力量保留了下来,必可活用于下次机器人搭建。

一、准备工作

你需要准备的只有两样东西:go-cqhttp 和 Python 环境 实际上不止python,任何语言都可搭建后台,本文仅使用python举例子

1.快速上手go-cqhttp

官方文档 https://docs.go-cqhttp.org

如果能自己看懂官方文档是最好,不过鉴于笔者在搭建的时候看的有点云里雾里,还是详细写下来吧。

文件安装 点击 " 快速开始 " 在这里插入图片描述 来到这里,点击release跳到下载地址 在这里插入图片描述 在下面找到适合自己系统的文件,下载zip文件解压 在这里插入图片描述 解压完应该会有如下的文件 在这里插入图片描述

文件配置 我们先双击exe文件,打开,它会自动生成一个 config.yml 文件(两张图分别为运行exe文件时的图和运行完生成文件的图) 在这里插入图片描述 在这里插入图片描述 然后我们第二次双击运行exe文件,这时候会正常运行并加载出二维码,以及自动生成一些文件 到加载出二维码这里,你可以直接扫码登录,本教程后续在配置文件里输入账号密码,现在我们先不管这个二维码,直接关掉窗口 在这里插入图片描述 红框内为新生成的文件,png是二维码,可以直接删掉,data和logs是本地记录,device.json是自动生成的设备信息,都不用管 在这里插入图片描述 来到了最重要的一步,我们来配置 config.yml 这个文件,这是官方配置文档,可以自行看文档配置,文档看不懂也可以直接看下文傻瓜式教程

双击 config.yml 用记事本打开

打开之后显示如图,建议输入小号的账号密码来当机器人,注意密码要输入到两个单引号之间 在这里插入图片描述 下列代码是心跳事件,大概原理是每隔xx秒向tx的服务器发送一条空信息,证明这个Q号还活着防止tx把我踢下线,不过如果是长时间使用的小号tx一般不会踢下线,可以关掉心跳事件(因为心跳会刷屏,有点烦)

heartbeat: disabled: false # 是否开启心跳事件上报 # 心跳频率, 单位秒 # -1 为关闭心跳 interval: 5

下面是最重要的服务器配置 ,配置方法在注释中,理论上只需要改host,port和post就可以了(host和port可以不改,文件默认为127.0.0.1:5700,post一定要改,不然只能收到信息,无法发送信息)

注意!改post的url和secret时一定要把前面的 # 号改成 两个空格 !以下代码可直接复制替换原文件中的对应部分

servers: # HTTP 通信设置 - http: # 是否关闭正向HTTP服务器 disabled: false # 服务端监听地址,用来收QQ信息,可自己设置其它地址 host: 127.0.0.1 # 服务端监听端口,用来收QQ信息,可自己设置其它端口 port: 5700 # 反向HTTP超时时间, 单位秒 # 最小值为5,小于5将会忽略本项设置 timeout: 5 middlewares: 'age': 0, 'area': '', 'card': '', 信息发送者的群名片 'level': '', 'nickname': '', 信息发送者的QQ昵称 'role': 'admin', 'sex': 'unknown', 'title': '', 信息发送者的群头衔 'user_id': 信息发送者的QQ号码 }, 'sub_type': 'normal', 'time': 1619686099, 'user_id': 信息发送者的QQ号码 } 本段是私聊信息的格式 { 'font': 0, 'message': 'setu',这里显示信息,本条信息为“setu” 'message_id': -1964103618,信息id,可用来撤回对应信息 'message_type': 'private',信息类型,这里显示是私聊信息 'post_type': 'message', 'raw_message': 'setu',这里显示原始信息,以后分析数据的时候直接分析这里就行 'self_id': 3161879130, 'sender': { 'age': 0, 'nickname': '',信息发送者的QQ昵称 'sex': 'unknown', 'user_id': 信息发送者的QQ号码 }, 'sub_type': 'friend',信息发送者的分组,这里显示在“朋友”分组 'target_id': , 目标QQ号码,就是你机器人的Q号 'time': 1619687022,时间戳,不用管 'user_id': 信息发送者的QQ号码 }

接着我们来创建两个py文件 第一个py文件(随便取什么名字),搭建一个微型服务器,用来监听和分析收到的信息

from flask import Flask, request '''注意,这里的import api是另一个py文件,下文会提及''' import api app = Flask(__name__) '''监听端口,获取QQ信息''' @app.route('/', methods=["POST"]) def post_data(): '下面的request.get_json().get......是用来获取关键字的值用的,关键字参考上面代码段的数据格式' if request.get_json().get('message_type')=='private':# 如果是私聊信息 uid = request.get_json().get('sender').get('user_id') # 获取信息发送者的 QQ号码 message = request.get_json().get('raw_message') # 获取原始信息 api.keyword(message, uid) # 将 Q号和原始信息传到我们的后台 if request.get_json().get('message_type')=='group':# 如果是群聊信息 gid = request.get_json().get('group_id') # 获取群号 uid = request.get_json().get('sender').get('user_id') # 获取信息发送者的 QQ号码 message = request.get_json().get('raw_message') # 获取原始信息 api.keyword(message, uid, gid) # 将 Q号和原始信息传到我们的后台 return 'OK' if __name__ == '__main__': app.run(debug=True, host='127.0.0.1', port=8000)# 此处的 host和 port对应上面 yml文件的设置

第二个py文件用来实现 api 功能,可根据自己的需求手动编写api,我们把它命名为api.py 本api文档包含300英雄团分查询和随机涩图 发送信息的原理简单来说就是向对应网址发送请求 我尽可能注释详细,希望读者看完能理解原理

import json import requests import re import random '下面这个函数用来判断信息开头的几个字是否为关键词' '如果是关键词则触发对应功能,群号默认为空' def keyword(message, uid, gid = None): if message[0:3] == '300': # 300查团分, 格式为300+游戏名称,如 “300yaq” return zhanji(uid, gid, message[3:len(message)]) if message[0:4] == 'setu': # 你们懂的 setu() def zhanji(uid, gid, name): '本功能参考300英雄官方api文档写成' '有不理解的地方可以看看https://300report.jumpw.com/static/doc/openapi.txt' url = 'https://300report.jumpw.com/api/getrole?name=' + name menu = requests.get(url) for i in menu.json()['Rank']: if i['RankName'] == '团队实力排行': tuanfen = i['Value'] if gid != None: # 如果是群聊信息 requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id={0}&message={1}团分{2}'.format(gid, name, tuanfen)) else: # 如果是私聊信息 requests.get(url='http://127.0.0.1:5700/send_private_msg?user_id={0}&message={1}团分{2}'.format(uid, name, tuanfen)) '' def setu(): '本功能放在下面讲,这里的功能默认只有群聊,没考虑私聊,请把机器人拉进群再发消息' '如果想实现私聊功能可以参考上面查战绩的代码' key = '' url = 'https://api.lolicon.app/setu?apikey=' + key + r'&size1200=true' menu = requests.get(url) setu_url = menu.json()['data'][0]['url'] # 对传回来的涩图网址进行数据提取 requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id={0}&message={1}'.format(gid, r'[CQ:image,' r'file=' + str(setu_url) + r']'))

我们来着重讲一下setu功能的实现,顺带来理解一下怎么使用所谓的cq码 setu的官方api文档 https://api.lolicon.app/#/setu

key = ''

这里的key要去申请,请参考官方文档,以下为可能遇到的问题:

初次添加@loliconApiBot会让你点击/start,点完之后你会发现没啥反应,这时你需要再输入一个/,就能申请apikey了。把申请到的apikey放到上面python代码中的key = ''里面就OK了

至于下面这行代码

requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id={0}&message={1}'.format(gid, r'[CQ:image,' r'file=' + str(setu_url) + r']'))

message=后面的信息就是所谓的cq码了 官方cq码api文档https://docs.go-cqhttp.org/cqcode/ 简单来说,cq码是一种规范化的qq功能指令字符串,它能让你在机器人中实现@某人、发送图片、撤回信息、踢人出群等等一系列功能,我们只需要在message=后面输入cq码就能调用功能了 比如setu功能一定要用到 发送图片 的功能,我们的cq码格式就是

[CQ:image,file=] file=后面跟的是图片的url地址,上面代码块的r'[CQ:image,' r'file=' + str(setu_url) + r']'作用就是把我们获取到的涩图地址填充进去

下面是演示 在这里插入图片描述 至此,基本功能原理大概都讲清楚了,读者可根据自己的喜好后续添加各种喜欢的api(比如祖安宝典,查天气,抽卡等等),希望有更多的QQ机器人开发者参与进来,也希望本教程能为你的机器人开发尽一份绵薄之力。如遇问题可在下方评论区留言。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有