使用腾讯云服务器+Nonebot2+go-cqhttp搭建QQ聊天机器人【保姆级教程 2023最新版】

一、查看conda版本

请添加图片描述

二、查看系统版本

uname -a
arch
getconf LONG_BIT

请添加图片描述

三、配置go-cqhttp

下载go-cqhttp

这里有不同版本的cqhttp,并且对每个版本都有介绍。但是大家可以看到有arm与adm不同的版本,这两个啥关系呢?

严格来说,AMD和ARM没有任何关系。AMD是桌面级处理器和桌面级GPU的生产厂商,而ARM是移动级处理器的生产厂商。AMD是目前业内唯一一个可以提供高性能CPU、高性能独立显卡GPU芯片、主板芯片组三大组件的半导体公司,AMD提出3A平台的新标志,在笔记本领域有“AMD VISION”标志的就表示该电脑采用3A构建方案(CPU、GPU、主板芯片组均由AMD制造提供)。ARM 主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。ARM向合作伙伴网络(包括世界领先的半导体公司和系统公司)授予 IP 许可证。这些合作伙伴可利用 ARM 的 IP 设计创造和生产片上系统设计,但需要向 ARM 支付原始 IP 的许可费用并为每块生产的芯片或晶片交纳版税。

请添加图片描述

这里我在官网上下载了俩(一个用在linux上一个用在windows上)
请添加图片描述

1.请切换至同一网络下扫码

在云端服务器进行上号的时候,会出现扫码登录,如果手机扫码登录之后出现这种情况有两种快速解决方案(1.将收集ip切至云服务器ip所在地 2.利用windows系统生成的device.json和session.token覆盖云端的这两个文件,因为这两个文件是QQ密钥信息)然后就可以登录成功了。

请添加图片描述
请添加图片描述

2.打包Docker镜像

到此为止咱的linux系统上就可以跑起来一个cqhttp了,那么为啥咱要将其打包进Docker镜像中呢?众所周知Docker随着近几年云原生的火爆也展露了头角

我们将程序打包进Docker容器内更加便于维护,更加便于迁移,当然打包需要同学有一定的Docker基础,感兴趣的小伙伴继续往下看。

第一步:将上述文件整理好之后,做到在本级目录能够运行go-cqhttp可执行文件,安装配置好Docker,我这里是买的腾讯云的服务器,自带了Docker,大家自己装一个,网上应该有教程。

第二步:编写Dockerfile镜像打包文件,这里的文件如下:

按步就班的做就好了,这里的意思就是将本级目录下用到的文件拷贝到小主机alpine内。

FROM alpine:latest
RUN mkdir "/app"
WORKDIR "/app"
COPY go-cqhttp  /app/go-cqhttp
COPY device.json /app/device.json
COPY config.yml /app/config.yml
COPY session.token /app/session.token
COPY LICENSE /app/LICENSE
#ENTRYPOINT ["/user-srv"]
CMD  ["/app/go-cqhttp"]

第三步:打包镜像

我这里起的镜像名字为cqhttps,如果最后结果像截图中展示的那样,就是打包成功了。

docker build -t cqhttps .

请添加图片描述

第四步:起一个Docker容器:

如图可以看到成功将go-cqhttp运行了起来。

docker run cqhttps

请添加图片描述
请添加图片描述

四、创建NoneBot环境

安装脚手架

pip install nb-cli
nb

请添加图片描述
接下来的步骤就与windows上搭建Nonebot2环境没太大差异了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大工告成!成功创建项目后项目应包含以下文件
在这里插入图片描述
进入项目,创建一个插件

cd twoPyBot
from nonebot.adapters import Bot, Event
from nonebot.plugin import on_message

#自定义回复词典
reply_dic = {
    
    
    '您吃了吗': '没吃呢~'
    ,'早上好'  : '早上好~'
    ,'晚安'    : '做个好梦'
    ,"你是谁":"我叫小Q"
    ,"你的主人是谁":"秘密不告诉你。"
    ,"你多大了":"秘密哦"
    ,"介绍一下自己吧":"我叫小Q"
}

#回复部分
# 检测到用户信息
reply = on_message(priority=100)
@reply.handle()
async def reply_handle(bot: Bot, event: Event):
    # 获取用户发送的信息
    user_msg = str(event.get_message()).strip()
    # 在字典内找键值对,找不到的话就回复后面那句话。
    reply_msg=reply_dic.get(user_msg,"")
    # 符合条件回复
    if reply_msg!="":
        await reply.finish(reply_msg)   #进行回复并结束该事件

运行项目

nb run

在这里插入图片描述
在这里插入图片描述

至此大工告成!

猜你喜欢

转载自blog.csdn.net/apple_51931783/article/details/128423278