This commit is contained in:
Azide 2022-03-16 13:48:28 +08:00
parent 2ef122ae98
commit c2257c9689
31 changed files with 1 additions and 1240 deletions

1
.gitignore vendored
View File

@ -132,6 +132,7 @@ ENV/
env.bak/
venv.bak/
pythonenv*
venv_test/
# Spyder project settings
.spyderproject

View File

@ -1,11 +0,0 @@
import clientAppEnhance0 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-external-link-icon/lib/client/clientAppEnhance.js'
import clientAppEnhance1 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-medium-zoom/lib/client/clientAppEnhance.js'
import clientAppEnhance2 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-theme-data/lib/client/clientAppEnhance.js'
import clientAppEnhance3 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/theme-default/lib/client/clientAppEnhance.js'
export const clientAppEnhances = [
clientAppEnhance0,
clientAppEnhance1,
clientAppEnhance2,
clientAppEnhance3,
]

View File

@ -1,5 +0,0 @@
import clientAppRootComponent0 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-back-to-top/lib/client/components/BackToTop.js'
export const clientAppRootComponents = [
clientAppRootComponent0,
]

View File

@ -1,9 +0,0 @@
import clientAppSetup0 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-active-header-links/lib/client/clientAppSetup.js'
import clientAppSetup1 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/plugin-nprogress/lib/client/clientAppSetup.js'
import clientAppSetup2 from 'E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/theme-default/lib/client/clientAppSetup.js'
export const clientAppSetups = [
clientAppSetup0,
clientAppSetup1,
clientAppSetup2,
]

View File

@ -1,6 +0,0 @@
import { defineAsyncComponent } from 'vue'
export const layoutComponents = {
"404": defineAsyncComponent(() => import("E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/theme-default/lib/client/layouts/404.vue")),
"Layout": defineAsyncComponent(() => import("E:/Azide/nonebot/nonebot-bison/node_modules/@vuepress/theme-default/lib/client/layouts/Layout.vue")),
}

View File

@ -1,12 +0,0 @@
import { defineAsyncComponent } from 'vue'
export const pagesComponents = {
// path: /
"v-8daa1a0e": defineAsyncComponent(() => import(/* webpackChunkName: "v-8daa1a0e" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/index.html.vue")),
// path: /dev/
"v-7445cd33": defineAsyncComponent(() => import(/* webpackChunkName: "v-7445cd33" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/dev/index.html.vue")),
// path: /usage/
"v-d0736a32": defineAsyncComponent(() => import(/* webpackChunkName: "v-d0736a32" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/usage/index.html.vue")),
// path: /404.html
"v-3706649a": defineAsyncComponent(() => import(/* webpackChunkName: "v-3706649a" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/404.html.vue")),
}

View File

@ -1,10 +0,0 @@
export const pagesData = {
// path: /
"v-8daa1a0e": () => import(/* webpackChunkName: "v-8daa1a0e" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/index.html.js").then(({ data }) => data),
// path: /dev/
"v-7445cd33": () => import(/* webpackChunkName: "v-7445cd33" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/dev/index.html.js").then(({ data }) => data),
// path: /usage/
"v-d0736a32": () => import(/* webpackChunkName: "v-d0736a32" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/usage/index.html.js").then(({ data }) => data),
// path: /404.html
"v-3706649a": () => import(/* webpackChunkName: "v-3706649a" */"E:/Azide/nonebot/nonebot-bison/docs/.vuepress/.temp/pages/404.html.js").then(({ data }) => data),
}

View File

@ -1,33 +0,0 @@
import { Vuepress } from '@vuepress/client/lib/components/Vuepress'
const routeItems = [
["v-8daa1a0e","/",{"title":""},["/index.html","/README.md"]],
["v-7445cd33","/dev/",{"title":"开发指南"},["/dev/index.html","/dev/README.md"]],
["v-d0736a32","/usage/",{"title":""},["/usage/index.html","/usage/README.md"]],
["v-3706649a","/404.html",{"title":""},["/404"]],
]
export const pagesRoutes = routeItems.reduce(
(result, [name, path, meta, redirects]) => {
result.push(
{
name,
path,
component: Vuepress,
meta,
},
...redirects.map((item) => ({
path: item,
redirect: path,
}))
)
return result
},
[
{
name: "404",
path: "/:catchAll(.*)",
component: Vuepress,
}
]
)

View File

@ -1,21 +0,0 @@
export const siteData = {
"base": "/",
"lang": "en-US",
"title": "Nonebot Bison",
"description": "Docs for Nonebot Bison",
"head": [],
"locales": {}
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updateSiteData) {
__VUE_HMR_RUNTIME__.updateSiteData(siteData)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ siteData }) => {
__VUE_HMR_RUNTIME__.updateSiteData(siteData)
})
}

View File

@ -1,61 +0,0 @@
export const themeData = {
"navbar": [
{
"text": "主页",
"link": "/"
},
{
"text": "部署与使用",
"link": "/usage/"
},
{
"text": "开发",
"link": "/dev/"
},
{
"text": "Github",
"link": "https://github.com/felinae98/nonebot-bison"
}
],
"locales": {
"/": {
"selectLanguageName": "English"
}
},
"logo": null,
"darkMode": true,
"repo": null,
"selectLanguageText": "Languages",
"selectLanguageAriaLabel": "Select language",
"sidebar": "auto",
"sidebarDepth": 2,
"editLink": true,
"editLinkText": "Edit this page",
"lastUpdated": true,
"lastUpdatedText": "Last Updated",
"contributors": true,
"contributorsText": "Contributors",
"notFound": [
"There's nothing here.",
"How did we get here?",
"That's a Four-Oh-Four.",
"Looks like we've got some broken links."
],
"backToHome": "Take me home",
"openInNewWindow": "open in new window",
"toggleDarkMode": "toggle dark mode",
"toggleSidebar": "toggle sidebar"
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updateThemeData) {
__VUE_HMR_RUNTIME__.updateThemeData(themeData)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ themeData }) => {
__VUE_HMR_RUNTIME__.updateThemeData(themeData)
})
}

View File

@ -1,26 +0,0 @@
export const data = {
"key": "v-3706649a",
"path": "/404.html",
"title": "",
"lang": "en-US",
"frontmatter": {
"layout": "404"
},
"excerpt": "",
"headers": [],
"git": {},
"filePathRelative": null
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updatePageData) {
__VUE_HMR_RUNTIME__.updatePageData(data)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ data }) => {
__VUE_HMR_RUNTIME__.updatePageData(data)
})
}

View File

@ -1 +0,0 @@
<template></template>

View File

@ -1,65 +0,0 @@
export const data = {
"key": "v-7445cd33",
"path": "/dev/",
"title": "开发指南",
"lang": "en-US",
"frontmatter": {
"sidebar": "auto"
},
"excerpt": "",
"headers": [
{
"level": 2,
"title": "基本概念",
"slug": "基本概念",
"children": []
},
{
"level": 2,
"title": "快速上手",
"slug": "快速上手",
"children": []
},
{
"level": 2,
"title": "类的方法与成员变量",
"slug": "类的方法与成员变量",
"children": []
},
{
"level": 2,
"title": "方法与变量的定义",
"slug": "方法与变量的定义",
"children": []
}
],
"git": {
"updatedTime": 1645018969000,
"contributors": [
{
"name": "felinae98",
"email": "731499577@qq.com",
"commits": 4
},
{
"name": "hemengyang",
"email": "hmy0119@gmail.com",
"commits": 1
}
]
},
"filePathRelative": "dev/README.md"
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updatePageData) {
__VUE_HMR_RUNTIME__.updatePageData(data)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ data }) => {
__VUE_HMR_RUNTIME__.updatePageData(data)
})
}

View File

@ -1,78 +0,0 @@
<template><h1 id="开发指南" tabindex="-1"><a class="header-anchor" href="#开发指南" aria-hidden="true">#</a> 开发指南</h1>
<p>本插件需要你的帮助只需要会写简单的爬虫就能给本插件适配新的网站</p>
<h2 id="基本概念" tabindex="-1"><a class="header-anchor" href="#基本概念" aria-hidden="true">#</a> 基本概念</h2>
<ul>
<li><code>nonebot_bison.post.Post</code>: 可以理解为推送内容其中包含需要发送的文字图片链接平台信息等</li>
<li><code>nonebot_bison.types.RawPost</code>: 从站点/平台中爬到的单条信息</li>
<li><code>nonebot_bison.types.Target</code>: 目标账号Bilibili微博等社交媒体中的账号</li>
<li><code>nonebot_bison.types.Category</code>: 信息分类例如视频动态图文文章等</li>
<li><code>nonebot_bison.types.Tag</code>: 信息标签例如微博中的超话或者 hashtag</li>
</ul>
<h2 id="快速上手" tabindex="-1"><a class="header-anchor" href="#快速上手" aria-hidden="true">#</a> 快速上手</h2>
<p>上车我们走</p>
<p>先明确需要适配的站点类型先明确两个问题</p>
<h4 id="我要发送什么样的推送" tabindex="-1"><a class="header-anchor" href="#我要发送什么样的推送" aria-hidden="true">#</a> 我要发送什么样的推送</h4>
<ul>
<li><code>nonebot_bison.platform.platform.NewMessage</code> 最常见的类型每次爬虫向特定接口爬取一个消息列表
与之前爬取的信息对比过滤出新的消息再根据用户自定义的分类和标签进行过滤最后处理消息
处理过后的消息发送给用户<br>
例如微博Bilibili</li>
<li><code>nonebot_bison.platform.platform.StatusChange</code> 每次爬虫获取一个状态在状态改变时发布推送<br>
例如游戏开服提醒主播上播提醒</li>
<li><code>nonebot_bison.platform.platform.SimplePost</code> <code>NewMessage</code>相似但是不过滤新的消息
每次发送全部消息<br>
例如每日榜单定时发送</li>
</ul>
<h4 id="这个平台是否有账号的概念" tabindex="-1"><a class="header-anchor" href="#这个平台是否有账号的概念" aria-hidden="true">#</a> 这个平台是否有账号的概念</h4>
<ul>
<li>有账号的概念<br>
例如B 站用户动态微博用户动态网易云电台更新</li>
<li>没有账号的概念<br>
例如游戏公告教务处公告</li>
</ul>
<p>现在你需要在<code>src/plugins/nonebot_bison/platform</code>下新建一个 py 文件
在里面新建一个类继承推送类型的基类重载一些关键的函数然后就完成了不需要修改别的东西了</p>
<p>任何一种订阅类型需要实现的方法/字段如下</p>
<ul>
<li><code>schedule_type</code>, <code>schedule_kw</code> 调度的参数本质是使用 apscheduler <a href="https://apscheduler.readthedocs.io/en/3.x/userguide.html?highlight=trigger#choosing-the-right-scheduler-job-store-s-executor-s-and-trigger-s" target="_blank" rel="noopener noreferrer">trigger 参数<ExternalLinkIcon/></a><code>schedule_type</code>可以是<code>date</code>,<code>interval</code><code>cron</code>
<code>schedule_kw</code>是对应的参数一个常见的配置是<code>schedule_type=interval</code>, <code>schedule_kw={'seconds':30}</code></li>
<li><code>is_common</code> 是否常用如果被标记为常用那么和机器人交互式对话添加订阅时会直接出现在选择列表中否则
需要输入<code>全部</code>才会出现</li>
<li><code>enabled</code> 是否启用</li>
<li><code>name</code> 平台的正式名称例如<code>微博</code></li>
<li><code>has_target</code> 平台是否有帐号</li>
<li><code>category</code> 平台的发布内容分类例如 B 站包括专栏视频图文动态普通动态等如果不包含分类功能则设为<code>{}</code></li>
<li><code>enable_tag</code> 平台发布内容是否带 Tag例如微博</li>
<li><code>platform_name</code> 唯一的英文的识别标识比如<code>weibo</code></li>
<li><code>async get_target_name(Target) -&gt; Optional[str]</code> 通常用于获取帐号的名称如果平台没有帐号概念可以直接返回平台的<code>name</code></li>
<li><code>async parse(RawPost) -&gt; Post</code>将获取到的 RawPost 处理成 Post</li>
<li><code>get_tags(RawPost) -&gt; Optional[Collection[Tag]]</code> 可选 RawPost 中提取 Tag</li>
<li><code>get_category(RawPos) -&gt; Optional[Category]</code> 可选 RawPost 中提取 Category</li>
</ul>
<p>例如要适配微博我希望 bot 搬运新的消息所以微博的类应该这样定义</p>
<div class="language-python ext-py line-numbers-mode"><pre v-pre class="language-python"><code><span class="token keyword">class</span> <span class="token class-name">Weibo</span><span class="token punctuation">(</span>NewMessage<span class="token punctuation">)</span><span class="token punctuation">:</span>
categories <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token number">1</span><span class="token punctuation">:</span> <span class="token string">"转发"</span><span class="token punctuation">,</span>
<span class="token number">2</span><span class="token punctuation">:</span> <span class="token string">"视频"</span><span class="token punctuation">,</span>
<span class="token number">3</span><span class="token punctuation">:</span> <span class="token string">"图文"</span><span class="token punctuation">,</span>
<span class="token number">4</span><span class="token punctuation">:</span> <span class="token string">"文字"</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
enable_tag <span class="token operator">=</span> <span class="token boolean">True</span>
platform_name <span class="token operator">=</span> <span class="token string">"weibo"</span>
name <span class="token operator">=</span> <span class="token string">"新浪微博"</span>
enabled <span class="token operator">=</span> <span class="token boolean">True</span>
is_common <span class="token operator">=</span> <span class="token boolean">True</span>
schedule_type <span class="token operator">=</span> <span class="token string">"interval"</span>
schedule_kw <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"seconds"</span><span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">}</span>
has_target <span class="token operator">=</span> <span class="token boolean">True</span>
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div><p>当然我们非常希望你对自己适配的平台写一些单元测试你可以模仿<code>tests/platforms/test_*.py</code>中的内容写
一些单元测试为保证多次运行测试的一致性可以 mock http 的响应测试的内容包括获取 RawPost处理成 Post
测试分类以及提取 tag 当然最好和 rsshub 做一个交叉验证</p>
<div class="custom-container danger"><p class="custom-container-title">DANGER</p>
<p>Nonebot 项目使用了全异步的处理方式所以你需要对异步Python asyncio 的机制有一定了解当然
依葫芦画瓢也是足够的</p>
</div>
<h2 id="类的方法与成员变量" tabindex="-1"><a class="header-anchor" href="#类的方法与成员变量" aria-hidden="true">#</a> 类的方法与成员变量</h2>
<h2 id="方法与变量的定义" tabindex="-1"><a class="header-anchor" href="#方法与变量的定义" aria-hidden="true">#</a> 方法与变量的定义</h2>
</template>

View File

@ -1,59 +0,0 @@
export const data = {
"key": "v-8daa1a0e",
"path": "/",
"title": "",
"lang": "en-US",
"frontmatter": {
"home": true,
"heroText": "Nonebot Bison",
"tagline": "本bot励志做全泰拉骑车最快的信使",
"actionText": "快速部署",
"actionLink": "/usage/",
"features": [
{
"title": "拓展性强",
"details": "没有自己想要的网站?只要简单的爬虫知识就可以给它适配一个新的网站"
},
{
"title": "通用,强大",
"details": "社交媒体?网站更新?游戏开服?只要能爬就都能推,还支持自定义过滤"
},
{
"title": "后台管理",
"details": "提供后台管理页面,简单快捷修改配置"
}
],
"footer": "MIT Licensed"
},
"excerpt": "",
"headers": [],
"git": {
"updatedTime": 1644411914000,
"contributors": [
{
"name": "felinae98",
"email": "731499577@qq.com",
"commits": 7
},
{
"name": "hemengyang",
"email": "hmy0119@gmail.com",
"commits": 1
}
]
},
"filePathRelative": "README.md"
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updatePageData) {
__VUE_HMR_RUNTIME__.updatePageData(data)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ data }) => {
__VUE_HMR_RUNTIME__.updatePageData(data)
})
}

View File

@ -1 +0,0 @@
<template></template>

View File

@ -1,101 +0,0 @@
export const data = {
"key": "v-d0736a32",
"path": "/usage/",
"title": "部署和使用",
"lang": "en-US",
"frontmatter": {
"sidebar": "auto"
},
"excerpt": "",
"headers": [
{
"level": 2,
"title": "部署",
"slug": "部署",
"children": [
{
"level": 3,
"title": "作为 Bot 使用",
"slug": "作为-bot-使用",
"children": []
},
{
"level": 3,
"title": "作为插件使用",
"slug": "作为插件使用",
"children": []
},
{
"level": 3,
"title": "自动安装",
"slug": "自动安装",
"children": []
}
]
},
{
"level": 2,
"title": "配置",
"slug": "配置",
"children": []
},
{
"level": 2,
"title": "使用",
"slug": "使用",
"children": [
{
"level": 3,
"title": "命令",
"slug": "命令",
"children": []
},
{
"level": 3,
"title": "所支持平台的 uid",
"slug": "所支持平台的-uid",
"children": []
}
]
}
],
"git": {
"updatedTime": 1646929699000,
"contributors": [
{
"name": "felinae98",
"email": "731499577@qq.com",
"commits": 12
},
{
"name": "Azide",
"email": "rukuy@qq.com",
"commits": 2
},
{
"name": "pre-commit-ci[bot]",
"email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
"commits": 2
},
{
"name": "hemengyang",
"email": "hmy0119@gmail.com",
"commits": 1
}
]
},
"filePathRelative": "usage/README.md"
}
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
if (__VUE_HMR_RUNTIME__.updatePageData) {
__VUE_HMR_RUNTIME__.updatePageData(data)
}
}
if (import.meta.hot) {
import.meta.hot.accept(({ data }) => {
__VUE_HMR_RUNTIME__.updatePageData(data)
})
}

View File

@ -1,181 +0,0 @@
<template><h1 id="部署和使用" tabindex="-1"><a class="header-anchor" href="#部署和使用" aria-hidden="true">#</a> 部署和使用</h1>
<p>本节将教你快速部署和使用一个 nonebot-bison如果你不知道要选择哪种部署方式推荐使用<a href="#docker-compose%E9%83%A8%E7%BD%B2-%E6%8E%A8%E8%8D%90">docker-compose</a></p>
<h2 id="部署" tabindex="-1"><a class="header-anchor" href="#部署" aria-hidden="true">#</a> 部署</h2>
<p>本项目可以作为单独的 Bot 使用可以作为 nonebot2 的插件使用</p>
<h3 id="作为-bot-使用" tabindex="-1"><a class="header-anchor" href="#作为-bot-使用" aria-hidden="true">#</a> 作为 Bot 使用</h3>
<p>额外提供自动同意超级用户的好友申请和同意超级用户的加群邀请的功能</p>
<h4 id="docker-compose-部署-推荐" tabindex="-1"><a class="header-anchor" href="#docker-compose-部署-推荐" aria-hidden="true">#</a> docker-compose 部署推荐</h4>
<ol>
<li>
<p>在一个新的目录中下载<a href="https://raw.githubusercontent.com/felinae98/nonebot-bison/main/docker-compose.yml" target="_blank" rel="noopener noreferrer">docker-compose.yml<ExternalLinkIcon/></a><br>
将其中的<code>&lt;your QQ&gt;</code>改成自己的 QQ </p>
<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code><span class="token function">wget</span> https://raw.githubusercontent.com/felinae98/nonebot-bison/main/docker-compose.yml
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
<li>
<p>运行配置 go-cqhttp</p>
<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code><span class="token function">docker-compose</span> run go-cqhttp
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>通信方式选择<code>3: 反向 Websocket 通信</code><br>
编辑<code>bot-data/config.yml</code>更改下面字段</p>
<div class="language-text ext-text line-numbers-mode"><pre v-pre class="language-text"><code>account: # 账号相关
uin: &lt;QQ号> # QQ账号
password: "&lt;QQ密码>" # 密码为空时使用扫码登录
message:
post-format: array
............
servers:
- ws-reverse:
universal: ws://nonebot:8080/onebot/v11/ws/ #
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div></li>
<li>
<p>登录 go-cqhttp
再次</p>
<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code><span class="token function">docker-compose</span> run go-cqhttp
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>参考<a href="https://docs.go-cqhttp.org/faq/slider.html#%E6%96%B9%E6%A1%88a-%E8%87%AA%E8%A1%8C%E6%8A%93%E5%8C%85" target="_blank" rel="noopener noreferrer">go-cqhttp 文档<ExternalLinkIcon/></a>
完成登录</p>
</li>
<li>
<p>确定完成登录后启动 bot</p>
<div class="language-bash ext-sh line-numbers-mode"><pre v-pre class="language-bash"><code><span class="token function">docker-compose</span> up -d
</code></pre><div class="line-numbers" aria-hidden="true"><span class="line-number">1</span><br></div></div></li>
</ol>
<h4 id="docker-部署" tabindex="-1"><a class="header-anchor" href="#docker-部署" aria-hidden="true">#</a> docker 部署</h4>
<p>本项目的 docker 镜像为<code>felinae98/nonebot-bison</code>可以直接 pull run 进行使用
相关配置参数可以使用<code>-e</code>作为环境变量传入</p>
<h4 id="直接运行-不推荐" tabindex="-1"><a class="header-anchor" href="#直接运行-不推荐" aria-hidden="true">#</a> 直接运行不推荐</h4>
<p>可以参考<a href="https://v2.nonebot.dev/guide/getting-started.html" target="_blank" rel="noopener noreferrer">nonebot 的运行方法<ExternalLinkIcon/></a></p>
<div class="custom-container danger"><p class="custom-container-title">DANGER</p>
<p>直接克隆源代码需要自行编译前端否则会出现无法使用管理后台等情况</p>
</div>
<div class="custom-container danger"><p class="custom-container-title">DANGER</p>
<p>本项目中使用了 Python 3.9 的语法如果出现问题请检查 Python 版本</p>
</div>
<ol>
<li>首先安装 poetry<a href="https://python-poetry.org/docs/#installation" target="_blank" rel="noopener noreferrer">安装方法<ExternalLinkIcon/></a></li>
<li>clone 本项目在项目中<code>poetry install</code>安装依赖</li>
<li>安装 yarn配置 yarn 推荐</li>
<li><code>admin-fronted</code>中运行<code>yarn &amp;&amp; yarn build</code>编译前端</li>
<li>编辑<code>.env.prod</code>配置各种环境变量<a href="https://v2.nonebot.dev/guide/basic-configuration.html" target="_blank" rel="noopener noreferrer">Nonebot2 配置<ExternalLinkIcon/></a></li>
<li>运行<code>poetry run python bot.py</code>启动机器人</li>
</ol>
<h3 id="作为插件使用" tabindex="-1"><a class="header-anchor" href="#作为插件使用" aria-hidden="true">#</a> 作为插件使用</h3>
<p>本部分假设大家会部署 nonebot2</p>
<h4 id="手动安装" tabindex="-1"><a class="header-anchor" href="#手动安装" aria-hidden="true">#</a> 手动安装</h4>
<ol>
<li>安装 pip <code>nonebot-bison</code></li>
<li><code>bot.py</code>中导入插件<code>nonebot_bison</code></li>
</ol>
<h3 id="自动安装" tabindex="-1"><a class="header-anchor" href="#自动安装" aria-hidden="true">#</a> 自动安装</h3>
<p>使用<code>nb-cli</code>执行<code>nb plugin install nonebot_bison</code></p>
<h2 id="配置" tabindex="-1"><a class="header-anchor" href="#配置" aria-hidden="true">#</a> 配置</h2>
<p>可参考<a href="https://github.com/felinae98/nonebot-bison/blob/main/src/plugins/nonebot_bison/plugin_config.py" target="_blank" rel="noopener noreferrer">源文件<ExternalLinkIcon/></a></p>
<ul>
<li>
<p><code>BISON_CONFIG_PATH</code>: 插件存放配置文件的位置如果不设定默认为项目目录下的<code>data</code>目录</p>
</li>
<li>
<p><code>BISON_USE_PIC</code>: 将文字渲染成图片后进行发送多用于规避风控</p>
</li>
<li>
<p><code>BISON_BROWSER</code>: 本插件使用 Chrome 来渲染图片</p>
<ul>
<li>使用 browserless 提供的 Chrome 管理服务设置为<code>ws://xxxxxxxx</code> Chrome Endpoint</li>
<li>使用 cdp 连接相关服务设置为<code>wsc://xxxxxxxxx</code></li>
<li>使用本地安装的 Chrome设置为<code>local:&lt;chrome path&gt;</code>例如<code>local:/usr/bin/google-chrome-stable</code></li>
<li>如果不进行配置那么会在启动时候自动进行安装在官方的 docker 镜像中已经安装了浏览器<div class="custom-container warning"><p class="custom-container-title">WARNING</p>
<p>截止发布时本项目尚不能完全与 browserless 兼容目前建议使用镜像内自带的浏览器
不要配置这个变量</p>
</div>
</li>
</ul>
</li>
<li>
<p><code>BISON_SKIP_BROWSER_CHECK</code>: 是否在启动时自动下载浏览器如果选择<code>False</code>会在用到浏览器时自动下载
默认<code>True</code></p>
</li>
<li>
<p><code>BISON_OUTER_URL</code>: 从外部访问服务器的地址默认为<code>http://localhost:8080/bison</code>
在服务器上建议配置为<code>http://&lt;ip&gt;:8080/bison</code></p>
</li>
<li>
<p><code>BISON_FILTER_LOG</code>: 是否过滤来自<code>nonebot</code> warning 级以下的 log如果你的 bot 只运行了这个插件可以考虑
开启默认关</p>
</li>
<li>
<p><code>BISON_USE_QUEUE</code>: 是否用队列的方式发送消息降低发送频率默认开</p>
</li>
<li>
<p><code>BISON_RESEND_TIMES</code>: 最大重发次数默认 0</p>
</li>
<li>
<p><code>BISON_USE_PIC_MERGE</code>: 是否启用多图片时合并转发仅限群</p>
<ul>
<li><code>0</code>: 不启用(默认)</li>
<li><code>1</code>: 首条消息单独发送剩余图片合并转发</li>
<li><code>2</code>: 所有消息全部合并转发</li>
</ul>
<details class="custom-container details"><summary>配置项示例</summary>
<ul>
<li><code>BISON_USE_PIC_MERGE=1</code>:
<img src="@source/usage/pic/forward-msg-simple1.png" alt="simple1"></li>
<li><code>BISON_USE_PIC_MERGE=2</code>:
<img src="@source/usage/pic/forward-msg-simple2.png" alt="simple1"></li>
</ul>
</details>
<div class="custom-container warning"><p class="custom-container-title">WARNING</p>
<p>启用此功能时可能会因为待推送图片过大/过多而导致文字消息与合并转发图片消息推送间隔过大(选择模式<code>1</code>)请谨慎考虑开启或者选择模式<code>2</code>使图文消息一同合并转发(可能会使消息推送延迟过长)</p>
</div>
</li>
</ul>
<h2 id="使用" tabindex="-1"><a class="header-anchor" href="#使用" aria-hidden="true">#</a> 使用</h2>
<div class="custom-container warning"><p class="custom-container-title">WARNING</p>
<p>本节假设<code>COMMAND_START</code>设置中包含<code>''</code></p>
<ul>
<li>如果出现 bot 不响应的问题请先排查这个设置</li>
<li>尝试在命令前添加设置的命令前缀<code>COMMAND_START=['/']</code>则尝试使用<code>/添加订阅</code></li>
</ul>
</div>
<h3 id="命令" tabindex="-1"><a class="header-anchor" href="#命令" aria-hidden="true">#</a> 命令</h3>
<h4 id="在本群中进行配置" tabindex="-1"><a class="header-anchor" href="#在本群中进行配置" aria-hidden="true">#</a> 在本群中进行配置</h4>
<p>所有命令都需要@bot 触发</p>
<ul>
<li>添加订阅仅管理员和群主和 SUPERUSER<code>添加订阅</code></li>
<li>查询订阅<code>查询订阅</code></li>
<li>删除订阅仅管理员和群主和 SUPERUSER<code>删除订阅</code></li>
</ul>
<h4 id="私聊机器人获取后台地址" tabindex="-1"><a class="header-anchor" href="#私聊机器人获取后台地址" aria-hidden="true">#</a> 私聊机器人获取后台地址</h4>
<p><code>后台管理</code>之后点击返回的链接<br>
如果你是 superuser那么你可以管理所有群的订阅如果你是 bot 所在的群的其中部分群的管理
你可以管理你管理的群里的订阅如果你不是任意一个群的管理那么 bot 将会报错</p>
<div class="custom-container tip"><p class="custom-container-title">TIP</p>
<p>可以和 bot 通过临时聊天触发</p>
</div>
<div class="custom-container warning"><p class="custom-container-title">WARNING</p>
<p>网页的身份鉴别机制全部由 bot 返回的链接确定所以这个链接并不能透露给别人
并且链接会过期所以一段时间后需要重新私聊 bot 获取新的链接</p>
</div>
<h4 id="私聊机器人进行配置-需要-superuer-权限" tabindex="-1"><a class="header-anchor" href="#私聊机器人进行配置-需要-superuer-权限" aria-hidden="true">#</a> 私聊机器人进行配置需要 SUPERUER 权限</h4>
<ul>
<li>添加订阅<code>管理-添加订阅</code></li>
<li>查询订阅<code>管理-查询订阅</code></li>
<li>删除订阅<code>管理-删除订阅</code></li>
</ul>
<h3 id="所支持平台的-uid" tabindex="-1"><a class="header-anchor" href="#所支持平台的-uid" aria-hidden="true">#</a> 所支持平台的 uid</h3>
<h4 id="weibo" tabindex="-1"><a class="header-anchor" href="#weibo" aria-hidden="true">#</a> Weibo</h4>
<ul>
<li>对于一般用户主页<code>https://weibo.com/u/6441489862?xxxxxxxxxxxxxxx</code><code>/u/</code> uid</li>
<li>对于有个性域名的用户如<code>https://weibo.com/arknights</code><code>https://weibo.com/6279793937/about</code> uid</li>
</ul>
<h4 id="bilibili" tabindex="-1"><a class="header-anchor" href="#bilibili" aria-hidden="true">#</a> Bilibili</h4>
<p>主页链接一般为<code>https://space.bilibili.com/161775300?xxxxxxxxxx</code> uid</p>
<h4 id="rss" tabindex="-1"><a class="header-anchor" href="#rss" aria-hidden="true">#</a> RSS</h4>
<p>RSS 链接即为 uid</p>
<h4 id="网易云音乐-歌手" tabindex="-1"><a class="header-anchor" href="#网易云音乐-歌手" aria-hidden="true">#</a> 网易云音乐-歌手</h4>
<p>在网易云网页上歌手的链接一般为<code>https://music.163.com/#/artist?id=32540734</code><code>id=</code>
后面的数字即为 uid</p>
<h4 id="网易云音乐-电台" tabindex="-1"><a class="header-anchor" href="#网易云音乐-电台" aria-hidden="true">#</a> 网易云音乐-电台</h4>
<p>在网易云网页上电台的链接一般为<code>https://music.163.com/#/djradio?id=793745436</code><code>id=</code>
后面的数字即为 uid</p>
</template>

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
<div id="app"></div>
<script type="module">
import '@vuepress/client/lib/app.js'
</script>
</body>
</html>

View File

@ -1,419 +0,0 @@
<#
.Synopsis
Activate a Python virtual environment for the current PowerShell session.
.Description
Pushes the python executable for a virtual environment to the front of the
$Env:PATH environment variable and sets the prompt to signify that you are
in a Python virtual environment. Makes use of the command line switches as
well as the `pyvenv.cfg` file values present in the virtual environment.
.Parameter VenvDir
Path to the directory that contains the virtual environment to activate. The
default value for this is the parent of the directory that the Activate.ps1
script is located within.
.Parameter Prompt
The prompt prefix to display when this virtual environment is activated. By
default, this prompt is the name of the virtual environment folder (VenvDir)
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
.Example
Activate.ps1
Activates the Python virtual environment that contains the Activate.ps1 script.
.Example
Activate.ps1 -Verbose
Activates the Python virtual environment that contains the Activate.ps1 script,
and shows extra information about the activation as it executes.
.Example
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
Activates the Python virtual environment located in the specified location.
.Example
Activate.ps1 -Prompt "MyPython"
Activates the Python virtual environment that contains the Activate.ps1 script,
and prefixes the current prompt with the specified string (surrounded in
parentheses) while the virtual environment is active.
.Notes
On Windows, it may be required to enable this Activate.ps1 script by setting the
execution policy for the user. You can do this by issuing the following PowerShell
command:
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
For more information on Execution Policies:
https://go.microsoft.com/fwlink/?LinkID=135170
#>
Param(
[Parameter(Mandatory = $false)]
[String]
$VenvDir,
[Parameter(Mandatory = $false)]
[String]
$Prompt
)
<# Function declarations --------------------------------------------------- #>
<#
.Synopsis
Remove all shell session elements added by the Activate script, including the
addition of the virtual environment's Python executable from the beginning of
the PATH variable.
.Parameter NonDestructive
If present, do not remove this function from the global namespace for the
session.
#>
function global:deactivate ([switch]$NonDestructive) {
# Revert to original values
# The prior prompt:
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
}
# The prior PYTHONHOME:
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
}
# The prior PATH:
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
}
# Just remove the VIRTUAL_ENV altogether:
if (Test-Path -Path Env:VIRTUAL_ENV) {
Remove-Item -Path env:VIRTUAL_ENV
}
# Just remove VIRTUAL_ENV_PROMPT altogether.
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
}
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
}
# Leave deactivate function in the global namespace if requested:
if (-not $NonDestructive) {
Remove-Item -Path function:deactivate
}
}
<#
.Description
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
given folder, and returns them in a map.
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
two strings separated by `=` (with any amount of whitespace surrounding the =)
then it is considered a `key = value` line. The left hand string is the key,
the right hand is the value.
If the value starts with a `'` or a `"` then the first and last character is
stripped from the value before being captured.
.Parameter ConfigDir
Path to the directory that contains the `pyvenv.cfg` file.
#>
function Get-PyVenvConfig(
[String]
$ConfigDir
) {
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
# An empty map will be returned if no config file is found.
$pyvenvConfig = @{ }
if ($pyvenvConfigPath) {
Write-Verbose "File exists, parse `key = value` lines"
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
$pyvenvConfigContent | ForEach-Object {
$keyval = $PSItem -split "\s*=\s*", 2
if ($keyval[0] -and $keyval[1]) {
$val = $keyval[1]
# Remove extraneous quotations around a string value.
if ("'""".Contains($val.Substring(0, 1))) {
$val = $val.Substring(1, $val.Length - 2)
}
$pyvenvConfig[$keyval[0]] = $val
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
}
}
}
return $pyvenvConfig
}
<# Begin Activate script --------------------------------------------------- #>
# Determine the containing directory of this script
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$VenvExecDir = Get-Item -Path $VenvExecPath
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
# Set values required in priority: CmdLine, ConfigFile, Default
# First, get the location of the virtual environment, it might not be
# VenvExecDir if specified on the command line.
if ($VenvDir) {
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
}
else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
Write-Verbose "VenvDir=$VenvDir"
}
# Next, read the `pyvenv.cfg` file to determine any required value such
# as `prompt`.
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
# Next, set the prompt from the command line, or the config file, or
# just use the name of the virtual environment folder.
if ($Prompt) {
Write-Verbose "Prompt specified as argument, using '$Prompt'"
}
else {
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
$Prompt = $pyvenvCfg['prompt'];
}
else {
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
$Prompt = Split-Path -Path $venvDir -Leaf
}
}
Write-Verbose "Prompt = '$Prompt'"
Write-Verbose "VenvDir='$VenvDir'"
# Deactivate any currently active virtual environment, but leave the
# deactivate function in place.
deactivate -nondestructive
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
# that there is an activated venv.
$env:VIRTUAL_ENV = $VenvDir
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
Write-Verbose "Setting prompt to '$Prompt'"
# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT { "" }
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
function global:prompt {
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
_OLD_VIRTUAL_PROMPT
}
$env:VIRTUAL_ENV_PROMPT = $Prompt
}
# Clear PYTHONHOME
if (Test-Path -Path Env:PYTHONHOME) {
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
Remove-Item -Path Env:PYTHONHOME
}
# Add the venv to the PATH
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
# SIG # Begin signature block
# MIIfnwYJKoZIhvcNAQcCoIIfkDCCH4wCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk
# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc
# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
# yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G
# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1
# MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH
# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u
# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI
# hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS
# YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi
# 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1
# 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu
# ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35
# 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0
# ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE
# RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ
# I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x
# ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP
# Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z
# Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI
# ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD
# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0
# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu
# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k
# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT
# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF
# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH
# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB
# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB
# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW
# TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+
# VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL
# IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW
# OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86
# WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+
# W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5
# 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf
# ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw
# /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3
# r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH
# xaZg2unjHY3rMYIQxjCCEMICAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k
# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM
# 0NHdMA0GCWCGSAFlAwQCAQUAoIGaMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC4GCisGAQQBgjcCAQwxIDAe
# oByAGgBQAHkAdABoAG8AbgAgADMALgAxADAALgAyMC8GCSqGSIb3DQEJBDEiBCBn
# AZ6P7YvTwq0fbF62o7E75R0LxsW5OtyYiFESQckLhjANBgkqhkiG9w0BAQEFAASC
# AgBRSzqP2zE+V5lLXFXjuLbAOkLxcM4pOIu1euvetZOkJ2cmVtnvcbVftMjtsUwY
# GZWOdQn92wCvT6P5BsoSldIld0KfiVpKMZLmpJUJJjsUQDxNJhyh2iWDPZFQywCu
# n8fPx/suU+CTAnV6t3EKdjfPixRPXR5zCpIIZ6RkCO4LOoofOyfOkIoUlvIzf0cq
# fvtvcsWaj2KQYlAHRSXPDEe2w3gTiSuVatuI8wAL+U7taS9H3vcBUxPq0yjimlMs
# /QrZEgKPf0BOoXdxmEHKbTuqJds3DrcT5JUw3NLRf/jD3gFKFN31JEx8J8WhXLrm
# oTTi9Agvli2JhF86o+mQiN0tvKVsBBXURUUoRhlMjJF5sRKGdSQLphHU7wyfPChf
# KENKHwb5kntoyl+oL0acd6YDqc9GJSijZwUYeOvF8rGt4V1lOrV0l+kiU+lXG0t6
# YPIHO7517eO2Em/B8e2tBKHJaFFedq+aPhZk0zLTZaysoOQqos18+xkhhAzasO+q
# KW2PnUhTRWxEmlJXARAxeq9sS8KudI1X37TVzQ9AuOl8xFYijNF/NEekh20tvGIa
# /cqnaBCmOl2J/lh2QepBNTz+wG3l0nfY8aOMDCdyS3Y3nik/UR3GVPCxw24pRH4l
# JUtPvgi/cqZRaY5lHX3g2YX1pyIbZ6WV+sMysdzzpMYWTKGCDX0wgg15BgorBgEE
# AYI3AwMBMYINaTCCDWUGCSqGSIb3DQEHAqCCDVYwgg1SAgEDMQ8wDQYJYIZIAWUD
# BAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG/WwHATAxMA0GCWCG
# SAFlAwQCAQUABCApRtPryrdnZj1Bfg21et7CJhqeTOLk5FJicFsRkh+S5AIQNATJ
# OYkoR2jzQSVFTSnc2RgPMjAyMjAxMTcxNDI0MjdaoIIKNzCCBP4wggPmoAMCAQIC
# EA1CSuC+Ooj/YEAhzhQA8N0wDQYJKoZIhvcNAQELBQAwcjELMAkGA1UEBhMCVVMx
# FTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNv
# bTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFtcGlu
# ZyBDQTAeFw0yMTAxMDEwMDAwMDBaFw0zMTAxMDYwMDAwMDBaMEgxCzAJBgNVBAYT
# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQg
# VGltZXN0YW1wIDIwMjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC
# 5mGEZ8WK9Q0IpEXKY2tR1zoRQr0KdXVNlLQMULUmEP4dyG+RawyW5xpcSO9E5b+b
# Yc0VkWJauP9nC5xj/TZqgfop+N0rcIXeAhjzeG28ffnHbQk9vmp2h+mKvfiEXR52
# yeTGdnY6U9HR01o2j8aj4S8bOrdh1nPsTm0zinxdRS1LsVDmQTo3VobckyON91Al
# 6GTm3dOPL1e1hyDrDo4s1SPa9E14RuMDgzEpSlwMMYpKjIjF9zBa+RSvFV9sQ0kJ
# /SYjU/aNY+gaq1uxHTDCm2mCtNv8VlS8H6GHq756WwogL0sJyZWnjbL61mOLTqVy
# HO6fegFz+BnW/g1JhL0BAgMBAAGjggG4MIIBtDAOBgNVHQ8BAf8EBAMCB4AwDAYD
# VR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBBBgNVHSAEOjA4MDYG
# CWCGSAGG/WwHATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNv
# bS9DUFMwHwYDVR0jBBgwFoAU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHQYDVR0OBBYE
# FDZEho6kurBmvrwoLR1ENt3janq8MHEGA1UdHwRqMGgwMqAwoC6GLGh0dHA6Ly9j
# cmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtdHMuY3JsMDKgMKAuhixodHRw
# Oi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRzLmNybDCBhQYIKwYB
# BQUHAQEEeTB3MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20w
# TwYIKwYBBQUHMAKGQ2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy
# dFNIQTJBc3N1cmVkSURUaW1lc3RhbXBpbmdDQS5jcnQwDQYJKoZIhvcNAQELBQAD
# ggEBAEgc3LXpmiO85xrnIA6OZ0b9QnJRdAojR6OrktIlxHBZvhSg5SeBpU0UFRkH
# efDRBMOG2Tu9/kQCZk3taaQP9rhwz2Lo9VFKeHk2eie38+dSn5On7UOee+e03UEi
# ifuHokYDTvz0/rdkd2NfI1Jpg4L6GlPtkMyNoRdzDfTzZTlwS/Oc1np72gy8PTLQ
# G8v1Yfx1CAB2vIEO+MDhXM/EEXLnG2RJ2CKadRVC9S0yOIHa9GCiurRS+1zgYSQl
# T7LfySmoc0NR2r1j1h9bm/cuG08THfdKDXF+l7f0P4TrweOjSaH6zqe/Vs+6WXZh
# iV9+p7SOZ3j5NpjhyyjaW4emii8wggUxMIIEGaADAgECAhAKoSXW1jIbfkHkBdo2
# l8IVMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdp
# Q2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0Rp
# Z2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xNjAxMDcxMjAwMDBaFw0zMTAx
# MDcxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNI
# QTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
# A4IBDwAwggEKAoIBAQC90DLuS82Pf92puoKZxTlUKFe2I0rEDgdFM1EQfdD5fU1o
# fue2oPSNs4jkl79jIZCYvxO8V9PD4X4I1moUADj3Lh477sym9jJZ/l9lP+Cb6+NG
# RwYaVX4LJ37AovWg4N4iPw7/fpX786O6Ij4YrBHk8JkDbTuFfAnT7l3ImgtU46gJ
# cWvgzyIQD3XPcXJOCq3fQDpct1HhoXkUxk0kIzBdvOw8YGqsLwfM/fDqR9mIUF79
# Zm5WYScpiYRR5oLnRlD9lCosp+R1PrqYD4R/nzEU1q3V8mTLex4F0IQZchfxFwbv
# Pc3WTe8GQv2iUypPhR3EHTyvz9qsEPXdrKzpVv+TAgMBAAGjggHOMIIByjAdBgNV
# HQ4EFgQU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHwYDVR0jBBgwFoAUReuir/SSy4Ix
# LVGLp6chnfNtyA8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYw
# EwYDVR0lBAwwCgYIKwYBBQUHAwgweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzAB
# hhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9j
# YWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQw
# gYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdp
# Q2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2lj
# ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwUAYDVR0gBEkwRzA4
# BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0
# LmNvbS9DUFMwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUAA4IBAQBxlRLpUYdW
# ac3v3dp8qmN6s3jPBjdAhO9LhL/KzwMC/cWnww4gQiyvd/MrHwwhWiq3BTQdaq6Z
# +CeiZr8JqmDfdqQ6kw/4stHYfBli6F6CJR7Euhx7LCHi1lssFDVDBGiy23UC4HLH
# mNY8ZOUfSBAYX4k4YU1iRiSHY4yRUiyvKYnleB/WCxSlgNcSR3CzddWThZN+tpJn
# +1Nhiaj1a5bA9FhpDXzIAbG5KHW3mWOFIoxhynmUfln8jA/jb7UBJrZspe6HUSHk
# WGCbugwtK22ixH67xCUrRwIIfEmuE7bhfEJCKMYYVs9BNLZmXbZ0e/VWMyIvIjay
# S6JKldj1po5SMYIChjCCAoICAQEwgYYwcjELMAkGA1UEBhMCVVMxFTATBgNVBAoT
# DERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UE
# AxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFtcGluZyBDQQIQDUJK
# 4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEFAKCB0TAaBgkqhkiG9w0BCQMxDQYL
# KoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMDExNzE0MjQyN1owKwYLKoZI
# hvcNAQkQAgwxHDAaMBgwFgQU4deCqOGRvu9ryhaRtaq0lKYkm/MwLwYJKoZIhvcN
# AQkEMSIEIEisVoLYacgzAIEwW38XeItPgmJxlcpLtbpVrvF4nQLgMDcGCyqGSIb3
# DQEJEAIvMSgwJjAkMCIEILMQkAa8CtmDB5FXKeBEA0Fcg+MpK2FPJpZMjTVx7PWp
# MA0GCSqGSIb3DQEBAQUABIIBAETHhyD4SMqK76a6HhqOY7FJzkFOhj2f3q+bsWnJ
# l0/m++gC94THTdZe+PoW3PIR+46C1uBPwBgfcoo3guZDzK79g3xNPIO8VlRihEQN
# KFIXn1qx+Lzs98mqd2JdXfnr1kFoZkseiBnRpG0H1tVIeiL0S5R+sUzZS/lvQtfl
# aqh75Yc4vZQJ3q7Vsd01Flkrvi+BCoPZxo7szKlCkVlT+nZsc2n6MeTDYVdxT3dO
# PLaWrEqkLLK4FDpG5+yiCqSOQ4fhLljtUMP9CCiISTjg92O3a9vYulm6tdt25JHj
# yob3QE/n711GqaiGHOuEGuCZoJGn7sTxjwHk5CEzugadWhU=
# SIG # End signature block

View File

@ -1,69 +0,0 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r 2> /dev/null
fi
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
unset VIRTUAL_ENV_PROMPT
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV="E:\Azide\nonebot\nonebot-bison\venv_test"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
PS1="(venv_test) ${PS1:-}"
export PS1
VIRTUAL_ENV_PROMPT="(venv_test) "
export VIRTUAL_ENV_PROMPT
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r 2> /dev/null
fi

View File

@ -1,34 +0,0 @@
@echo off
rem This file is UTF-8 encoded, so we need to update the current code page while executing it
for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
set _OLD_CODEPAGE=%%a
)
if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" 65001 > nul
)
set VIRTUAL_ENV=E:\Azide\nonebot\nonebot-bison\venv_test
if not defined PROMPT set PROMPT=$P$G
if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
set _OLD_VIRTUAL_PROMPT=%PROMPT%
set PROMPT=(venv_test) %PROMPT%
if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
set PYTHONHOME=
if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
set PATH=%VIRTUAL_ENV%\Scripts;%PATH%
set VIRTUAL_ENV_PROMPT=(venv_test)
:END
if defined _OLD_CODEPAGE (
"%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
set _OLD_CODEPAGE=
)

View File

@ -1,22 +0,0 @@
@echo off
if defined _OLD_VIRTUAL_PROMPT (
set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
)
set _OLD_VIRTUAL_PROMPT=
if defined _OLD_VIRTUAL_PYTHONHOME (
set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
set _OLD_VIRTUAL_PYTHONHOME=
)
if defined _OLD_VIRTUAL_PATH (
set "PATH=%_OLD_VIRTUAL_PATH%"
)
set _OLD_VIRTUAL_PATH=
set VIRTUAL_ENV=
set VIRTUAL_ENV_PROMPT=
:END

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +0,0 @@
home = C:\Python310
include-system-site-packages = false
version = 3.10.2