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 项目&…

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…

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…

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

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

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

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

Ansible组件说明

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

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

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

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

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

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

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

python语言零基础入门——注释、print()函数、input()函数

目录 一、注释 1.块注释 2.行内注释 3.多行注释 二、打印变量 1.print()函数:输出/打印指定内容 2.input()函数:输入指定内容 三、编程题:个人名片 一、注释 1.块注释 以#开始,直到本行结束都是注释为了保证代码的可读性…

科技的崛起:国内机器视觉蓬勃发展

文 | BFT机器人 在工业4.0的浪潮下,随着科技的蓬勃发展,机器视觉逐渐走入大众视野,机器视觉产品的普及范围也越来越广。 大家知道机器视觉的由来吗? 机器视觉的由来可以追溯到20世纪70年代,美国麻省理工学院&#xff…

机器学习鸢尾花各种模型准确率对比

流程 获取数据集导入需要的包读取数据划分训练集和测试集调用各种模型比较准确率 获取数据集 链接:https://pan.baidu.com/s/1RzZyXsaiJB3e611itF466Q?pwdj484 提取码:j484 --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd impo…

华为机考入门python3--(17)牛客17- 坐标移动

分类:字符串 知识点: 正则匹配 re.match(pattern, move) 格式字符串,可以在字符串中直接引用变量 f"{x},{y}" 题目来自【牛客】 import re def is_valid_coordinate(move): # 使用正则表达式验证移动是否合法 # ^: …

施耐德 PLC 及模块 ModbusTCP 通信配置方法

1. 通过【I/O扫描器】服务进行读写 相关文档:各模块说明书仅 NOE 网卡模块、部分 CPU 自带的网口支持 优点:不需要额外编程,系统自动周期型读写数据缺点:扫描周期不定,程序无法控制数据刷新的时序 2. 通过内部程序…

java扩展jmeter依赖

前置条件 创建一个maven项目&#xff0c; 引入依赖 <dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>3.2</version> </dependency> <dependency><groupId&g…

NIO学习

文章目录 前言一、主要模块二、使用步骤1.服务器端2.客户端 三、NIO零拷贝(推荐)四、NIO另一种copy总结 前言 NIO是JDK1.4版本带来的功能,区别于以往的BIO编程,同步非阻塞极大的节省资源开销&#xff0c;避免了线程切换和上下文切换带来的资源浪费。 一、主要模块 Selector&a…