docker安装并跑通QQ机器人实践(3)-bs-nonebot搭建

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大量的开发者为其开发插件,用户无需编写任何代码,仅需完成环境配置及插件安装,就可以正常使用 NoneBot。

下面将演示如何在Docker 里安装 Nonebot 框架

1 关于 bs-nonebot 的镜像配置

需要注意的是,NoneBot 仅支持 Python 3.8 以上版本

下面是 Dockerfile 的内容:

# 使用官方的轻量级基础镜像
FROM alpine:3.10# 定义作者信息
LABEL MAINTAINER="tanbushi@qq.com"# 设置环境变量
ENV WORK_DIR /app/bs-nonebot# 设置工作目录
WORKDIR $WORK_DIR# 更新系统
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.13/main" > /etc/apk/repositories \&& echo "https://mirrors.ustc.edu.cn/alpine/v3.13/community" >> /etc/apk/repositories \&& apk update && apk upgrade \&& apk add --no-cache \bash \python3=3.8.15-r0 \py3-pip \&& pip3 install nonebot

上面的 Dockerfile 中,配置了清华的源,安装了 bash、python3(为了版本统一,指定了 3.8.15-r0)、pip、nonebot。

2 配置文件 config.sh

此模块配置文件内容和上一篇的 qsign 模块的内容差不多。此模块少了一个环境变量定义(-e),多了一个目录映射定义(-v)。内容如下:

#!/bin/bash# 基本参数
appName="bs-nonebot" # 应用名称
appVersion="0.0.1" # 应用版本号
imageName="$appName:$appVersion" # 镜像名称
containerName="$appName" # 容器名称# docker run 相关配置(可选项,如为空,可不填)# 挂载目录配置,形式为:宿主机目录:容器目录
# 下面的路径用到了 pwd 命令,默认要求当前脚本文件和 volumes 目录同在项目目录下(本例项目目录为 bs-nonebot 目录)
volumes=( \"`pwd`/volumes/source:/app/bs-nonebot/source" \
)# 端口映射配置,形式为:宿主机端口:容器端口
ports=( \"15703:5703" \
)# 环境变量配置
# envs=( \
#     "ENV1=value1" \
#     "ENV2=value2" \
# )configured=true # 标记变量——此脚本已经被执行过

注意:
上面文件里volumes数组里用到了 pwd,这里要求 .sh 脚本文件和 volumes 目录同在 项目目录 bs-nonebot 下,如下图红框内所示:
图1  脚本文件和 volumes 目录在同一目录下

图1 脚本文件和 volumes 目录在同一目录下

3 运行 build.sh 生成 Docker 镜像

#!/bin/bashset -e # 遇到错误时退出脚本# 判断是否运行过配置文件 config.sh,如果未运行过,则运行配置文件
if [ -z "$configured" ]; then. ./config.sh
#   configured=true # 设置一个标志,表示已经运行过配置文件
fi# 检查Docker命令是否可用
if ! command -v docker &> /dev/null; thenecho "Docker 命令不可用,请确保已经安装并启动了Docker。"exit 1
fi# 检查 Docker 是否在运行
if ! docker info > /dev/null 2>&1; thenecho "Docker 没用运行。请启动 Docker 再试!"exit 2
fi# 判断 Dockerfile 文件是否存在
if [ ! -f "Dockerfile" ]; thenecho "Dockerfile 文件不存在。请检查!"exit 3
fi# 构建镜像,注意此处用到了
docker build -t $imageName .
echo ""
echo "*********************************************************"
echo "成功生成 Docker 镜像:【 $imageName 】!"
echo "*********************************************************"
echo ""

4 运行 run.sh 创建容器

脚本 run.sh 内容为:

#!/bin/bash# 运行初始化脚本
. ../../shell-scripts/run_init.sh# 创建并执行临时文件——实现 docker run 命令(临时文件不是在容器里哦!)
. ../../shell-scripts/run_in_tmp.shecho ""
echo "*********************************************************"
echo "成功创建容器:【 $containerName 】!"
echo "*********************************************************"
echo ""

运行后,即可创建容器。
注意:在创建 -v 映射时,在 windows 环境下的 git bash 里执行脚本,目录前必须是双斜杠,即 //xxx,在 run_in_tmp.sh 文件里已经做了相应处理。请参见上一篇docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建里的相关代码。

5 编写 bs-nonebot 最简测试代码

做了 -v 目录映射后,宿主机项目目录 bs-nonebot 下的 volumes/source 目录和 /app/bs-nonebot/source 建立了映射关系,在宿主机 source 目录下的修改,会直接映射到容器里。在宿主机 source 目录下创建 bot.py 测试文件,内容如下:

import nonebot# 主程序入口
if __name__ == '__main__':# 初始化nonebotnonebot.init()# 加载内置插件nonebot.load_builtin_plugins()# 启动nonebot,监听0.0.0.0:5703nonebot.run(host='0.0.0.0', port=5703)

进入 bs-nonebot 容器,可以看到新创建的 bot.py 文件。如下图:
图2  映射的 source 目录下的文件 bot.py

图2 映射的 source 目录下的文件 bot.py

这段Python代码是nonebot框架的主程序入口。

首先导入nonebot模块。
使用if name == ‘main’:来作为程序的入口。
调用nonebot的init()方法来初始化nonebot。
调用nonebot的load_builtin_plugins()方法来加载内置插件。
调用nonebot的run()方法来启动nonebot,并监听0.0.0.0:5703端口,并且在宿主机的15703上访问到该端口。

6 运行 bot.py

python3 bot.py

运行成功!见下图:
图3 运行成功

图3 运行成功

上一篇:docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建

下一篇:敬请期待…


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

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

相关文章

如何在 Netlify 上手动部署 React 和 TypeScript 项目

在本教程中,我将教你如何使用 Vite 在 Netlify 上手动部署 React 和 TypeScript 项目。我将向你展示一些快速简单的步骤,让你的项目能够立即运行。 要跟着本教程操作,有几个先决条件: 一个现有的 React 和 TypeScript 项目&…

Https 中的CA证书

先理清整体的流程,再去看ca证书,对称加密,非对称加密 HTTPS的工作原理涉及非对称加密技术,其中根证书起着至关重要的作用。以下是其工作流程: 数字证书:服务器必须首先向认证机构(CA&#xff…

常见经典目标检测算法

目标检测是计算机视觉中的一个关键任务,它的目的是识别图像中的对象,并给出它们的类别和位置。以下是一些常见的经典目标检测算法: 1. **R-CNN (Region-based Convolutional Neural Network)**: - R-CNN是目标检测领域的开创性工作&#…

bug(警告):[vue-router] Duplicate named routes definition: …

查看警告:[vue-router] Duplicate named routes definition——翻译[vue-router]重复命名路由定义 小编劝诫:当我们在开发过程中警告也一定不要忽略,虽然你在本地跑代码时这些警告影响项目的正常运行,但是会让你产生误区&#xff…

OSPGF高级实验综合

1.实验拓扑 二.实验要求 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回&#x…

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

java CMS,G1垃圾收集器工作流程原理浅析 JVM内存空间基础知识点(基于JDk1.8) 1.方法区:逻辑概念,元空间,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分&#xf…

数据结构-动态规划策略

动态规划 1.理解动态规划思想 基本概念 重叠子问题:原问题可以分解为若干个子问题,且这些子问题之间存在重复部分。也就是说,为了解决一个子问题,我们需要多次求解相同的子子问题。例如,在计算斐波那契数列时,计算第n项…

java实现chatGPT SDK

搭建一个 ChatGPT-SDK 组件工程,专门用于封装对 OpenAI 接口的使用。由于 OpenAI 接口本身较多,并有各类配置的设置,所以开发一个共用的 SDK 组件,更合适我们在各类工程中扩展使用 整个流程为:以会话模型为出口&#x…

C++笔试强训day3

目录 1.简写单词 2.dd爱框框 3.除2! 1.简写单词 链接 我的思路超级简单,就是将输入的每个string存入vector,然后遍历每个string的第一个元素,如果为小写字母,就-32存入,若为大写,则直接存入。…

Docker in Docker的原理与实战

Docker in Docker(简称DinD)是一种在Docker容器内部运行另一个Docker实例的技术。这种技术允许用户在一个隔离的Docker容器中创建、管理和运行其他Docker容器,从而提供了更灵活和可控的部署选项。以下是DinD的主要特点: 隔离性&am…

react 封装请求axios,直接调用即可

概要 我们在开发项目的时候,常常会遇到接口请求的问题的,若我们不进行接口的统一管理,代码开发不仅多而且很麻烦容易出错,也不利于项目的维护。下面我们一下学习下react项目中将如何封装请求,也从另一个方面中少写一些…

Maven实战—搭建微服务 Maven 工程架构

需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。 项目架构: 用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。订单服务:负责处理订单相关的逻辑…

mac 使用nvm配置nodejs

您可以按照以下步骤在Mac上安装指定版本的Node.js: 首先,请确保您已经安装了Homebrew。如果没有,请在终端中运行以下命令来安装Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…

Swift网络编程

Swift网络编程涉及到一些重要的方面,包括URLSession的使用、数据解析(JSON/XML)以及网络请求的封装与管理。下面将详细介绍这三个方面的内容。 1.URLSession的使用: URLSession是Swift中用于网络请求的核心类。它提供了一系列方法来创建和管…

使用示例解释.NET中的Mocking是什么?

让我们踏上探索.NET软件开发中Mocking概念的旅程,让我们深入了解Mocking是多么简单易懂、易于访问。请与我一起穿越这个主题,我将涵盖以下内容: 理解Mocking:为何它对于构建强大的测试策略至关重要。探索一些最常见的Mocking库&a…

Ansible组件说明

1.Ansible Inventory 工作当中有不同的业务主机,我们需要在把这些机器信息存放在inventory里面,ansible默认的inventory的文件是/etc/ansible/hosts,也可以通过ANSIBLE_HOSTS环境变量来指定或者运行ansible和ansible-playbook的时候用-i参数临…

Spring Boot 学习(6)——组件注册

也是学得头晕眼花,终于知道学有多么难了,更知道教有多么难了…… 各位大神们出的教程终归和正规出版社还是差距的,我觉得是没有“审定”,这对于大多数做教程的人来说这应该通病:自己做(讲)的东西…

视频教程下载:用ChatGPT玩转海外抖音TikTok

CHATGPT for TikTok是一门前沿课程,旨在帮助您充分发挥TikTok广告活动的全部潜力。随着数字营销的爆炸性增长,企业需要使用先进的工具来保持竞争优势。在这门课程中,您将学习如何利用CHATGPT——一种先进的人工智能工具——来创建与目标受众产…

有没有手机上使用的库存软件

库存软件是一种仓库的信息管理系统,它主要针对出库与入库这些数据进行管理,传统的库存管理都是在电脑上安装一个专门的数据库管理系统进行管理,这也是一种比较成熟的管理方式,那么有没有手机上使用的库存软件。 手机上使用的库存软…

k8s配置configmap指定到容器的指定文件

我们需要将名称为walletkey.properties的文件做成configmap,然后将walletkey.properties文件单独挂载出来到/data/walletkey.properties,且不能覆盖/data目录,具体如下 1、创建configmap configmap文件内容 其中walletkey.properties: >-引…