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

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

警告:小心智械危机(

前言

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

一、准备工作

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

1.快速上手go-cqhttp

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

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

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

  2. 文件配置
    我们先双击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: 5middlewares:<<: *default # 引用默认中间件# 反向HTTP POST地址列表post:- url: '127.0.0.1:8000' # 这个url用来发送信息,可自己设置其它地址secret: ''           # 密钥不要写,就这样空着
    

    go-cqhttp 的安装和配置到此为止,你的机器人已经呼之欲出了

2.编程环境配置

本环节不做展开,你可以选择任何一种你喜欢的编程语言,只要能做到监听端口和发送post/get请求即可

二、HalloWorld(

下面来试着让机器人运作起来
监听端口使用Python 作为编程语言,其他语言原理差不多,可根据自己的需求来调整代码。

首先我们来看一下机器人的运作原理
先双击运行 go-cqhttp.exe(其实更好的方法是通过命令行运行 go-cqhttp,如下图,强烈建议这么做),出现下图的情景就说明机器人运行成功了
在这里插入图片描述
当有人对机器人发信息,或者在机器人所在的群里发信息的时候,机器人就会捕获信息和对应数据,我们来看看机器人传给我们的数据格式

本段是群聊信息的格式
{'anonymous': None,'font': 0,'group_id': , 这里显示群号'message': 'setu', 这里显示信息,本条信息为“setu”'message_id': -1345471362, 信息id,可用来撤回对应信息'message_seq': 474313, 'message_type': 'group', 信息类型,这里显示是群聊信息'post_type': 'message','raw_message': 'setu',这里显示原始信息,本条信息为“setu”,以后分析数据的时候直接分析这里就行'self_id': 3161879130,'sender': {'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 apiapp = 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 jsonimport 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=' + namemenu = 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要去申请,请参考官方文档,以下为可能遇到的问题:

  1. 初次添加@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机器人开发者参与进来,也希望本教程能为你的机器人开发尽一份绵薄之力。如遇问题可在下方评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/68331.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用NoneBot2可视化平台搭建QQ聊天机器人:本地和云部署教程

NoneBot是一个基于Python 3.8的异步、开源和可扩展的框架&#xff0c;用于构建和运行聊天机器人&#xff0c;支持各种聊天平台&#xff0c;如Telegram&#xff0c;Discord和WeChat。它是基于nonebot库构建的&#xff0c;提供了一个易于使用的界面&#xff0c;用于创建聊天机器人…

教你使用python搭建QQ机器人

注&#xff1a;本文中Linux系统指令均为Ubuntu使用&#xff0c;centos等请根据指令按系统情况改动。 目录 一、环境配置 二、配置go-cqhttp 三、安装nonebot 四、运行机器人 五、插件 六、最后 一、环境配置 1、python版本>3.8.0。如果版本不对请更新版本&#xff0c…

中级 PHP 程序员应该掌握的面试题

PHP 不仅是世界上最好的语言&#xff0c;还是世界上最奇特的语言&#xff0c;奇特之处是很多难以理解的语法&#xff0c;还有一眼看不出运行结果的程序。下面我整理了几道中级水平的面试题&#xff0c;大家可以看看&#xff1a; 请选择以下代码运行的结果&#xff1a; 程序解释…

“二向箔”其实并不存在丨《三体》里的数学问题

《三体》电视剧的播出&#xff0c;还原了很多原著小说中的“名场面”&#xff0c;引发了公众和书迷的广泛关注和讨论。对于等不及电视剧更新去翻书的人&#xff0c;亦或是“原著党”的脑海里&#xff0c;“名场面”一定少不了《三体3&#xff1a;死神永生》中&#xff0c;“歌者…

疫情期间再读三体(2)——程心为啥这么讨人厌

最近疫情期间看完我的三体这部三体改编的神级动画后&#xff0c;又把三体的小说找出来读了一遍&#xff0c;最近把第三部看完了&#xff0c;其中程心是这一部的主要角色&#xff0c;其中很多的剧情都是靠这个人物进行推动的。这个剧情人物也展开大家大量的讨论&#xff0c;下面…

最近爆火的“元宇宙”概念,是在“割韭菜”吗?

来源&#xff1a;物联网智库好像一夜之间&#xff0c;元宇宙火出了圈。其概念不仅引发投资界和科技圈的关注&#xff0c;就连近日上映的科幻电影《失控玩家》也贴上了“元宇宙”的标签&#xff0c;为这一概念推波助澜。 科技巨头们都争先恐后地想往自己身上贴上“元宇宙”的标签…

元宇宙作为风口究竟是时代的进步还是割韭菜之王

元宇宙这个词应该是当下最火爆的话题了吧&#xff0c;每个资本家都在虎视眈眈的盯着这块儿蛋糕 &#xff0c;那么作为我们电商或者中小型企业家能否分到这一杯羹呢&#xff0c;我想最近的元宇宙NFG会带给你答案。 那么首先我们一起来看看NFG是什么&#xff0c;它指的是非同质化…

万物皆可元宇宙?警惕资本炒作,识破韭菜骗局

要说近两年来最热门的科技话题&#xff0c;其中必然有“元宇宙”一词&#xff0c;从国外的微软打造企业元宇宙、脸书改名为Meta&#xff0c;到国内腾讯、字节、百度、阿里等多家头部企业争先涌入&#xff0c; 2021年被业内戏称为“元宇宙元年”。 尽管“元宇宙”一词炒得火热&…

警惕元宇宙

10月28日&#xff0c;Facebook的创始人马克扎克伯格宣布将公司名字由“FACEBOOK”更改为“META”&#xff0c;随后&#xff0c;便引发了“元宇宙”热。元宇宙概念从科技圈迅速“出圈“&#xff0c;一度占据各大平台的热搜榜和头条榜&#xff0c;引发热议。有人说&#xff0c;这…

一个简单的登录注册界面流程介绍

登录页面实现 其他页面的实现可以到github上克隆下来 login_interface login_server 一、用户登录 1、密码登录 流程&#xff1a; 用户输入密码&#xff1b;表单使用正则验证用户名和密码格式&#xff1b;点击登录&#xff0c;对密码进行加密&#xff0c;并发送登录验证请求…

Netflix 团队解决了 Linux 内核中的 FUSE 死锁

Laf 公众号已接入了 AI 绘画工具 Midjourney&#xff0c;可以让你轻松画出很多“大师”级的作品。同时还接入了 AI 聊天机器人&#xff0c;支持 GPT、Claude 以及 Laf 专有模型&#xff0c;可通过指令来随意切换模型。欢迎前来调戏&#x1f447; <<< 左右滑动见更多 &…

独家 | 我们都是AI免费的数据劳动力(附链接)

作者&#xff1a;Melissa Heikkil 翻译&#xff1a;李洪君 校对&#xff1a;王晓颖本文约1700字&#xff0c;建议阅读5分钟AI聊天机器人的回答听起来聪明、少涌现些有害又无意义的言论的秘诀&#xff0c;在于使用一种从人类反馈的强化学习技术。 ANNA SOROKINA 让AI聊天机器人的…

编程语言中,循环变量通常都用 i?你知道为什么吗?

01 前天&#xff0c;我在朋友圈发了一个问题&#xff1a; 为什么编程中&#xff0c;循环变量通常都是用 i ? 没想到&#xff0c;回复的人这么多&#xff01;要连翻好几页。 这个问题&#xff0c;有 2/3 的人回答正确&#xff0c;有少部分人知道&#xff0c;但是不太确定。 习惯…

我的ChatGPT学习笔记003

大家好啊&#xff0c;我是了不起&#xff01; 前一段时间ChatGPT突然火爆&#xff0c;大佬们纷纷下场。我也跟着努力学习&#xff0c;做了一些笔记。 下面将陆续放出笔记&#xff0c;共享给小伙伴们&#xff01;这是放出的第二篇&#xff0c;和小伙伴们与时俱进哈~~ 笔记三&…

【超详细】R语言实现各种数据可视化

文章目录 1 主成分分析可视化结果1.1 查看莺尾花数据集(前五行&#xff0c;前四列)1.2 使用莺尾花数据集进行主成分分析后可视化展示 2 圆环图绘制3 马赛克图绘制3.1 构造数据3.2 ggplot2包的geom_rect()函数绘制马赛克图3.3 vcd包的mosaic()函数绘制马赛克图3.4 graphics包的m…

☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》

☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》 目录 &#x1f3f3;️‍&#x1f308;开讲啦&#xff01;&#xff01;&#xff01;&#xff01;&#x1f3f3;️‍&#x1f308;苏州程序大白&#x1f3f3;️‍&#x1f308;&#x1f31f;博主介绍&#x…

老徐讲解小程序与微信第三方平台及微信官方的关系。

小程序服务器关系分析 小程序是微信官方根据前后端完全分离的思想创建的一套自己的前端框架。 后端部分&#xff0c;则一部分交给微信官方提供授权和鉴别身份的官方接口&#xff0c;而主要的业务逻辑接口则交给第三方开发平台完成。 也就是微信提供了单独的一个微信小程序服务…

微信小程序扫码报工案例分享

使用微信小程序结合PC端ERP完成工序扫码报工扫码出入库&#xff0c;可以实现生产管理全流程自动化作业&#xff0c;使生产效率比之前手工操作有了质的飞跃。 本案例背景介绍 这是一家生产二极管的电子生产企业&#xff0c;车间自动化生产设备多&#xff0c;生产连续性强。产品…

小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

llama.cpp Mac版本llama

骆驼.cpp 路线图/宣言/ ggml 纯C/C中LLaMA模型的推理 热点话题&#xff1a; 简单的网络聊天示例&#xff1a;#1998k-quants 现在支持 64 的超级块大小 super-block size of 64:&#xff1a;#2001新路线图&#xff1a; https: //github.com/users/ggerganov/projects/7Azure …