diff --git a/.gitignore b/.gitignore
index af9d78f6..2742fc11 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,7 +15,7 @@ _config.yml
config.yml
config.example.yml
compile.bat
-liteyuki/resources/templates/latest-debug.html
+src/resources/templates/latest-debug.html
# vuepress
.github
pyproject.toml
diff --git a/docs/.vuepress/client.js b/docs/.vuepress/client.js
index 02883d85..f4472028 100644
--- a/docs/.vuepress/client.js
+++ b/docs/.vuepress/client.js
@@ -1,6 +1,6 @@
import {defineClientConfig} from "vuepress/client";
-import resourceStoreComp from "./components/res_store.vue";
-import pluginStoreComp from "./components/plugin_store.vue";
+import resourceStoreComp from "./components/ResStore.vue";
+import pluginStoreComp from "./components/PluginStore.vue";
//导入element-plus
import ElementPlus from 'element-plus';
@@ -9,6 +9,5 @@ export default defineClientConfig({
app.component("resourceStoreComp", resourceStoreComp);
app.component("pluginStoreComp", pluginStoreComp);
app.use(ElementPlus);
-
},
});
\ No newline at end of file
diff --git a/docs/.vuepress/components/plugin_item_card.vue b/docs/.vuepress/components/PluginItemCard.vue
similarity index 100%
rename from docs/.vuepress/components/plugin_item_card.vue
rename to docs/.vuepress/components/PluginItemCard.vue
diff --git a/docs/.vuepress/components/plugin_store.vue b/docs/.vuepress/components/PluginStore.vue
similarity index 94%
rename from docs/.vuepress/components/plugin_store.vue
rename to docs/.vuepress/components/PluginStore.vue
index 2c827175..ddad43b4 100644
--- a/docs/.vuepress/components/plugin_store.vue
+++ b/docs/.vuepress/components/PluginStore.vue
@@ -1,6 +1,6 @@
-
-
+
+
+
+
+ Liteyuki Status
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_crt/lang/en.lang b/src/resources/liteyuki_crt/lang/en.lang
similarity index 96%
rename from liteyuki/resources/liteyuki_crt/lang/en.lang
rename to src/resources/liteyuki_crt/lang/en.lang
index e5b7763d..8f61f124 100644
--- a/liteyuki/resources/liteyuki_crt/lang/en.lang
+++ b/src/resources/liteyuki_crt/lang/en.lang
@@ -1,3 +1,3 @@
-crt.station=Station(s)
-crt.hour=Hour(s)
+crt.station=Station(s)
+crt.hour=Hour(s)
crt.minute=Min(s)
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_crt/lang/zh-CN.lang b/src/resources/liteyuki_crt/lang/zh-CN.lang
similarity index 96%
rename from liteyuki/resources/liteyuki_crt/lang/zh-CN.lang
rename to src/resources/liteyuki_crt/lang/zh-CN.lang
index 68593360..332025bc 100644
--- a/liteyuki/resources/liteyuki_crt/lang/zh-CN.lang
+++ b/src/resources/liteyuki_crt/lang/zh-CN.lang
@@ -1,3 +1,3 @@
-crt.station=站
-crt.hour=小时
+crt.station=站
+crt.hour=小时
crt.minute=分钟
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_crt/metadata.yml b/src/resources/liteyuki_crt/metadata.yml
similarity index 97%
rename from liteyuki/resources/liteyuki_crt/metadata.yml
rename to src/resources/liteyuki_crt/metadata.yml
index 157f7ecb..ed9c3221 100644
--- a/liteyuki/resources/liteyuki_crt/metadata.yml
+++ b/src/resources/liteyuki_crt/metadata.yml
@@ -1,3 +1,3 @@
-name: CRT相关资源包
-description: For Liteyuki CRT utils
+name: CRT相关资源包
+description: For Liteyuki CRT utils
version: 2024.4.26
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_crt/templates/crt_route.html b/src/resources/liteyuki_crt/templates/crt_route.html
similarity index 95%
rename from liteyuki/resources/liteyuki_crt/templates/crt_route.html
rename to src/resources/liteyuki_crt/templates/crt_route.html
index 9140edd8..042657ec 100644
--- a/liteyuki/resources/liteyuki_crt/templates/crt_route.html
+++ b/src/resources/liteyuki_crt/templates/crt_route.html
@@ -1,161 +1,161 @@
-
-
-
-
- CRT 线路图
-
-
-
-
-
-{{ data | tojson }}
-
-
-
-
-
-
-
-
-
-
- 轨道交通环线外环
-
-
- 沙坪坝方向
-
-
-
- 5站(14分钟)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ CRT 线路图
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
+
+
+
+
+
+
+ 轨道交通环线外环
+
+
+ 沙坪坝方向
+
+
+
+ 5站(14分钟)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/resources/liteyuki_crt/templates/css/crt_route.css b/src/resources/liteyuki_crt/templates/css/crt_route.css
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/resources/liteyuki_crt/templates/js/crt_route.js b/src/resources/liteyuki_crt/templates/js/crt_route.js
similarity index 95%
rename from liteyuki/resources/liteyuki_crt/templates/js/crt_route.js
rename to src/resources/liteyuki_crt/templates/js/crt_route.js
index dba941c2..aafb060a 100644
--- a/liteyuki/resources/liteyuki_crt/templates/js/crt_route.js
+++ b/src/resources/liteyuki_crt/templates/js/crt_route.js
@@ -1,35 +1,35 @@
-// Copyright (c) 2024 SnowyKami Liteyuki Studio All Rights Reserved.
-
-
-/**
- * @type {{
- * results: Array<{
- * abstracts: string,
- * createdDt: string,
- * endStaName: string,
- * startStaName: string,
- * isValid: boolean,
- * needTimeScope: number,
- * needTransferTimes: number,
- * price: number,
- * skipGenerateSequence: boolean,
- * transferLines: string,
- * transferLinesColor: string,
- * transferStaDerict: string,
- * transferStaNames: string,
- * }>
- * }}
- */
-
-const data = JSON.parse(document.getElementById("data").innerText);
-const results = data["result"];
-const route_template = document.importNode(document.getElementById("route-template").content, true)
-
-results.forEach(
- (item, index) => {
-
- }
-)
-
-
-
+// Copyright (c) 2024 SnowyKami Liteyuki Studio All Rights Reserved.
+
+
+/**
+ * @type {{
+ * results: Array<{
+ * abstracts: string,
+ * createdDt: string,
+ * endStaName: string,
+ * startStaName: string,
+ * isValid: boolean,
+ * needTimeScope: number,
+ * needTransferTimes: number,
+ * price: number,
+ * skipGenerateSequence: boolean,
+ * transferLines: string,
+ * transferLinesColor: string,
+ * transferStaDerict: string,
+ * transferStaNames: string,
+ * }>
+ * }}
+ */
+
+const data = JSON.parse(document.getElementById("data").innerText);
+const results = data["result"];
+const route_template = document.importNode(document.getElementById("route-template").content, true)
+
+results.forEach(
+ (item, index) => {
+
+ }
+)
+
+
+
diff --git a/liteyuki/resources/liteyuki_statistics/lang/zh-CN.lang b/src/resources/liteyuki_statistics/lang/zh-CN.lang
similarity index 97%
rename from liteyuki/resources/liteyuki_statistics/lang/zh-CN.lang
rename to src/resources/liteyuki_statistics/lang/zh-CN.lang
index e84b469b..31847027 100644
--- a/liteyuki/resources/liteyuki_statistics/lang/zh-CN.lang
+++ b/src/resources/liteyuki_statistics/lang/zh-CN.lang
@@ -1,2 +1,2 @@
-stat.message=统计消息
+stat.message=统计消息
stat.rank=发言排名
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_statistics/metadata.yml b/src/resources/liteyuki_statistics/metadata.yml
similarity index 97%
rename from liteyuki/resources/liteyuki_statistics/metadata.yml
rename to src/resources/liteyuki_statistics/metadata.yml
index 64084527..0c191edd 100644
--- a/liteyuki/resources/liteyuki_statistics/metadata.yml
+++ b/src/resources/liteyuki_statistics/metadata.yml
@@ -1,3 +1,3 @@
-name: 轻雪统计信息附件
-description: For Liteyuki statistic
+name: 轻雪统计信息附件
+description: For Liteyuki statistic
version: 2024.4.26
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_statistics/templates/css/stat_msg.css b/src/resources/liteyuki_statistics/templates/css/stat_msg.css
similarity index 96%
rename from liteyuki/resources/liteyuki_statistics/templates/css/stat_msg.css
rename to src/resources/liteyuki_statistics/templates/css/stat_msg.css
index 7d43a4bb..af18499e 100644
--- a/liteyuki/resources/liteyuki_statistics/templates/css/stat_msg.css
+++ b/src/resources/liteyuki_statistics/templates/css/stat_msg.css
@@ -1,4 +1,4 @@
-.sign-chart {
- height: 400px;
- background-color: rgba(255, 255, 255, 0.7);
+.sign-chart {
+ height: 400px;
+ background-color: rgba(255, 255, 255, 0.7);
}
\ No newline at end of file
diff --git a/src/resources/liteyuki_statistics/templates/css/stat_rank.css b/src/resources/liteyuki_statistics/templates/css/stat_rank.css
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/resources/liteyuki_statistics/templates/js/stat_msg.js b/src/resources/liteyuki_statistics/templates/js/stat_msg.js
similarity index 96%
rename from liteyuki/resources/liteyuki_statistics/templates/js/stat_msg.js
rename to src/resources/liteyuki_statistics/templates/js/stat_msg.js
index a2bc6eb4..0ed6c089 100644
--- a/liteyuki/resources/liteyuki_statistics/templates/js/stat_msg.js
+++ b/src/resources/liteyuki_statistics/templates/js/stat_msg.js
@@ -1,54 +1,54 @@
-// 数据类型声明
-// import * as echarts from 'echarts';
-
-let data = JSON.parse(document.getElementById("data").innerText) // object
-const signChartDivTemplate = document.importNode(document.getElementById("sign-chart-template").content, true)
-data.forEach((item) => {
- let signChartDiv = signChartDivTemplate.cloneNode(true)
- let chartID = item["name"]
- // 初始化ECharts实例
- // 设置id
- signChartDiv.querySelector(".sign-chart").id = chartID
- document.body.appendChild(signChartDiv)
-
- let signChart = echarts.init(document.getElementById(chartID))
-
- signChart.setOption(
- {
- animation: false,
- title: {
- text: item["name"],
- textStyle: {
- color: '#000000' // 设置标题文本颜色为红色
- }
- },
- xAxis: {
- type: 'category',
- data: item["times"].map(timestampToTime),
- },
- yAxis: {
- type: 'value',
- min: Math.min(...item["counts"]),
- },
-
- series: [
- {
- data: item["counts"],
- type: 'line',
- }
- ]
- }
- )
-})
-
-
-function timestampToTime(timestamp) {
- let date = new Date(timestamp * 1000)
- let Y = date.getFullYear() + '-'
- let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
- let D = date.getDate() + ' '
- let h = date.getHours() + ':'
- let m = date.getMinutes() + ':'
- let s = date.getSeconds()
- return M + D + h + m + s
+// 数据类型声明
+// import * as echarts from 'echarts';
+
+let data = JSON.parse(document.getElementById("data").innerText) // object
+const signChartDivTemplate = document.importNode(document.getElementById("sign-chart-template").content, true)
+data.forEach((item) => {
+ let signChartDiv = signChartDivTemplate.cloneNode(true)
+ let chartID = item["name"]
+ // 初始化ECharts实例
+ // 设置id
+ signChartDiv.querySelector(".sign-chart").id = chartID
+ document.body.appendChild(signChartDiv)
+
+ let signChart = echarts.init(document.getElementById(chartID))
+
+ signChart.setOption(
+ {
+ animation: false,
+ title: {
+ text: item["name"],
+ textStyle: {
+ color: '#000000' // 设置标题文本颜色为红色
+ }
+ },
+ xAxis: {
+ type: 'category',
+ data: item["times"].map(timestampToTime),
+ },
+ yAxis: {
+ type: 'value',
+ min: Math.min(...item["counts"]),
+ },
+
+ series: [
+ {
+ data: item["counts"],
+ type: 'line',
+ }
+ ]
+ }
+ )
+})
+
+
+function timestampToTime(timestamp) {
+ let date = new Date(timestamp * 1000)
+ let Y = date.getFullYear() + '-'
+ let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
+ let D = date.getDate() + ' '
+ let h = date.getHours() + ':'
+ let m = date.getMinutes() + ':'
+ let s = date.getSeconds()
+ return M + D + h + m + s
}
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_statistics/templates/js/stat_rank.js b/src/resources/liteyuki_statistics/templates/js/stat_rank.js
similarity index 97%
rename from liteyuki/resources/liteyuki_statistics/templates/js/stat_rank.js
rename to src/resources/liteyuki_statistics/templates/js/stat_rank.js
index 64044646..e1f1a42f 100644
--- a/liteyuki/resources/liteyuki_statistics/templates/js/stat_rank.js
+++ b/src/resources/liteyuki_statistics/templates/js/stat_rank.js
@@ -1,25 +1,25 @@
-let data = JSON.parse(document.getElementById("data").innerText) // object
-
-const rowDiv = document.importNode(document.getElementById("row-template").content, true)
-
-function randomHideChar(str) {
- // 随机隐藏6位以上字符串的中间连续四位字符,用*代替
- if (str.length <= 6) {
- return str
- }
- let start = Math.floor(str.length / 2) - 2
- return str.slice(0, start) + "****" + str.slice(start + 4)
-}
-data["ranking"].forEach((item) => {
- let row = rowDiv.cloneNode(true)
- let rowID = item["name"]
- let rowIconSrc = item["icon"]
- let rowCount = item["count"]
-
- row.querySelector(".row-name").innerText = randomHideChar(rowID)
- row.querySelector(".row-icon").src = rowIconSrc
- row.querySelector(".row-count").innerText = rowCount
-
- document.body.appendChild(row)
-})
-
+let data = JSON.parse(document.getElementById("data").innerText) // object
+
+const rowDiv = document.importNode(document.getElementById("row-template").content, true)
+
+function randomHideChar(str) {
+ // 随机隐藏6位以上字符串的中间连续四位字符,用*代替
+ if (str.length <= 6) {
+ return str
+ }
+ let start = Math.floor(str.length / 2) - 2
+ return str.slice(0, start) + "****" + str.slice(start + 4)
+}
+data["ranking"].forEach((item) => {
+ let row = rowDiv.cloneNode(true)
+ let rowID = item["name"]
+ let rowIconSrc = item["icon"]
+ let rowCount = item["count"]
+
+ row.querySelector(".row-name").innerText = randomHideChar(rowID)
+ row.querySelector(".row-icon").src = rowIconSrc
+ row.querySelector(".row-count").innerText = rowCount
+
+ document.body.appendChild(row)
+})
+
diff --git a/liteyuki/resources/liteyuki_statistics/templates/stat_msg.html b/src/resources/liteyuki_statistics/templates/stat_msg.html
similarity index 96%
rename from liteyuki/resources/liteyuki_statistics/templates/stat_msg.html
rename to src/resources/liteyuki_statistics/templates/stat_msg.html
index c667245e..a8d3395f 100644
--- a/liteyuki/resources/liteyuki_statistics/templates/stat_msg.html
+++ b/src/resources/liteyuki_statistics/templates/stat_msg.html
@@ -1,22 +1,22 @@
-
-
-
-
- Liteyuki Stats Message
-
-
-
-
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
-
+
+
+
+
+ Liteyuki Stats Message
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_statistics/templates/stat_rank.html b/src/resources/liteyuki_statistics/templates/stat_rank.html
similarity index 96%
rename from liteyuki/resources/liteyuki_statistics/templates/stat_rank.html
rename to src/resources/liteyuki_statistics/templates/stat_rank.html
index d5728104..a51a71dc 100644
--- a/liteyuki/resources/liteyuki_statistics/templates/stat_rank.html
+++ b/src/resources/liteyuki_statistics/templates/stat_rank.html
@@ -1,54 +1,54 @@
-
-
-
-
- Liteyuki Stats Message
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
+
+
+
+
+ Liteyuki Stats Message
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/lang/en.lang b/src/resources/liteyuki_weather/lang/en.lang
similarity index 95%
rename from liteyuki/resources/liteyuki_weather/lang/en.lang
rename to src/resources/liteyuki_weather/lang/en.lang
index 9822bda7..d8642dfe 100644
--- a/liteyuki/resources/liteyuki_weather/lang/en.lang
+++ b/src/resources/liteyuki_weather/lang/en.lang
@@ -1,12 +1,12 @@
-weather.monday=Mon
-weather.tuesday=Tue
-weather.wednesday=Wed
-weather.thursday=Thu
-weather.friday=Fri
-weather.saturday=Sat
-weather.sunday=Sun
-weather.day=Day
-weather.night=Night
-weather.today=Today
-weather.tomorrow=Tomorrow
+weather.monday=Mon
+weather.tuesday=Tue
+weather.wednesday=Wed
+weather.thursday=Thu
+weather.friday=Fri
+weather.saturday=Sat
+weather.sunday=Sun
+weather.day=Day
+weather.night=Night
+weather.today=Today
+weather.tomorrow=Tomorrow
weather.no_aqi=No AQI data
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/lang/ja.lang b/src/resources/liteyuki_weather/lang/ja.lang
similarity index 95%
rename from liteyuki/resources/liteyuki_weather/lang/ja.lang
rename to src/resources/liteyuki_weather/lang/ja.lang
index 58bcd04e..5c39ab6a 100644
--- a/liteyuki/resources/liteyuki_weather/lang/ja.lang
+++ b/src/resources/liteyuki_weather/lang/ja.lang
@@ -1,12 +1,12 @@
-weather.monday=月
-weather.tuesday=火
-weather.wednesday=水
-weather.thursday=木
-weather.friday=金
-weather.saturday=土
-weather.sunday=日
-weather.day=昼
-weather.night=夜
-weather.today=今日
-weather.tomorrow=明日
+weather.monday=月
+weather.tuesday=火
+weather.wednesday=水
+weather.thursday=木
+weather.friday=金
+weather.saturday=土
+weather.sunday=日
+weather.day=昼
+weather.night=夜
+weather.today=今日
+weather.tomorrow=明日
weather.no_aqi=空気質データなし
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/lang/zh-CN.lang b/src/resources/liteyuki_weather/lang/zh-CN.lang
similarity index 96%
rename from liteyuki/resources/liteyuki_weather/lang/zh-CN.lang
rename to src/resources/liteyuki_weather/lang/zh-CN.lang
index a4f44d58..e4fb52e1 100644
--- a/liteyuki/resources/liteyuki_weather/lang/zh-CN.lang
+++ b/src/resources/liteyuki_weather/lang/zh-CN.lang
@@ -1,12 +1,12 @@
-weather.monday=周一
-weather.tuesday=周二
-weather.wednesday=周三
-weather.thursday=周四
-weather.friday=周五
-weather.saturday=周六
-weather.sunday=周日
-weather.day=白天
-weather.night=夜晚
-weather.today=今天
-weather.tomorrow=明天
+weather.monday=周一
+weather.tuesday=周二
+weather.wednesday=周三
+weather.thursday=周四
+weather.friday=周五
+weather.saturday=周六
+weather.sunday=周日
+weather.day=白天
+weather.night=夜晚
+weather.today=今天
+weather.tomorrow=明天
weather.no_aqi=暂无AQI数据
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/metadata.yml b/src/resources/liteyuki_weather/metadata.yml
similarity index 97%
rename from liteyuki/resources/liteyuki_weather/metadata.yml
rename to src/resources/liteyuki_weather/metadata.yml
index 10b0ba32..02ecd390 100644
--- a/liteyuki/resources/liteyuki_weather/metadata.yml
+++ b/src/resources/liteyuki_weather/metadata.yml
@@ -1,3 +1,3 @@
-name: 轻雪天气资源包
-description: For Liteyuki Weather
+name: 轻雪天气资源包
+description: For Liteyuki Weather
version: 2024.4.26
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/templates/css/weather_now.css b/src/resources/liteyuki_weather/templates/css/weather_now.css
similarity index 94%
rename from liteyuki/resources/liteyuki_weather/templates/css/weather_now.css
rename to src/resources/liteyuki_weather/templates/css/weather_now.css
index 7776e4b9..f25f4ddf 100644
--- a/liteyuki/resources/liteyuki_weather/templates/css/weather_now.css
+++ b/src/resources/liteyuki_weather/templates/css/weather_now.css
@@ -1,184 +1,184 @@
-:root {
- --main-text-color: #fff;
- --sub-text-color: #ccc;
- --tip-text-color: #999;
- --device-info-width: 240px;
- --sub-border-radius: 60px;
-}
-
-#weather-info {
- color: white;
- /*justify-content: center;*/
- /*align-items: center;*/
- /*align-content: center;*/
-}
-
-.icon {
-/* icon 类img阴影*/
- filter: drop-shadow(1px 1px 10px #00000044);
-}
-
-#main-info {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-#main-left {
- display: flex;
- justify-content: flex-end;
- width: 50%;
-}
-
-#main-right {
- width: 50%;
-}
-
-#time {
- font-size: 25px;
- font-weight: bold;
- font-style: italic;
- text-align: right;
- color: var(--sub-text-color);
-
-}
-
-#adm {
- font-size: 32px;
- font-weight: bold;
- text-align: center;
- color: var(--sub-text-color);
-}
-
-#city {
- margin-top: 20px;
- font-size: 70px;
- font-weight: bold;
- text-align: center;
-}
-
-#temperature {
- display: flex;
- align-items: baseline;
-
-}
-
-#temperature-now {
- font-size: 70px;
- font-weight: bold;
-}
-
-#temperature-range {
- font-size: 40px;
- font-weight: bold;
- color: var(--sub-text-color);
-}
-
-#description {
- font-size: 50px;
- font-weight: bold;
-}
-
-
-#aqi {
- height: 50px;
- display: flex;
- border-radius: 60px;
- padding: 5px;
- font-size: 40px;
- text-align: center;
- align-content: center;
- align-items: center;
- justify-content: center;
-}
-
-#aqi-dot {
- height: 80%;
- aspect-ratio: 1 / 1;
- border-radius: 50%;
- background-color: var(--sub-text-color);
- margin-right: 20px;
-}
-
-.main-icon {
- width: 240px;
- height: 240px;
-}
-
-#hours-info {
- display: flex;
- justify-content: space-between;
-}
-
-.hourly-item {
- text-align: center;
- background-color: #ffffff44;
- border-radius: var(--sub-border-radius);
- align-items: center;
- padding: 20px 10px;
-}
-
-.hourly-icon{
- width: 80%;
- margin-bottom: 20px;
-}
-
-.hourly-temperature {
- text-align: center;
- color: var(--main-text-color);
- font-size: 30px;
- margin-bottom: 20px;
-}
-
-.hourly-time {
- text-align: center;
- color: var(--main-text-color);
- font-size: 25px;
- margin-bottom: 10px;
-}
-
-/**/
-.daily-item {
- display: flex;
- position: relative;
- justify-content: space-between;
- align-items: center;
- background-color: #ffffff44;
- height: 90px;
- border-radius: var(--sub-border-radius);
- margin-bottom: 20px;
- padding: 0 30px;
-}
-
-/*最后一个没有margin_button*/
-.daily-item:last-child {
- margin-bottom: 0;
-}
-
-.icon-day {
- position: absolute;
- left: 60%;
- height: 80px;
-}
-
-.icon-night {
- position: absolute;
- left: 70%;
- height: 80px;
-}
-
-.daily-weather{
- position: absolute;
- left: 30%;
-}
-
-.daily-temperature{
- position: absolute;
- left: 83%;
-}
-
-.daily-day, .daily-weather, .daily-temperature {
- text-align: center;
- color: var(--main-text-color);
- font-size: 30px;
+:root {
+ --main-text-color: #fff;
+ --sub-text-color: #ccc;
+ --tip-text-color: #999;
+ --device-info-width: 240px;
+ --sub-border-radius: 60px;
+}
+
+#weather-info {
+ color: white;
+ /*justify-content: center;*/
+ /*align-items: center;*/
+ /*align-content: center;*/
+}
+
+.icon {
+/* icon 类img阴影*/
+ filter: drop-shadow(1px 1px 10px #00000044);
+}
+
+#main-info {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#main-left {
+ display: flex;
+ justify-content: flex-end;
+ width: 50%;
+}
+
+#main-right {
+ width: 50%;
+}
+
+#time {
+ font-size: 25px;
+ font-weight: bold;
+ font-style: italic;
+ text-align: right;
+ color: var(--sub-text-color);
+
+}
+
+#adm {
+ font-size: 32px;
+ font-weight: bold;
+ text-align: center;
+ color: var(--sub-text-color);
+}
+
+#city {
+ margin-top: 20px;
+ font-size: 70px;
+ font-weight: bold;
+ text-align: center;
+}
+
+#temperature {
+ display: flex;
+ align-items: baseline;
+
+}
+
+#temperature-now {
+ font-size: 70px;
+ font-weight: bold;
+}
+
+#temperature-range {
+ font-size: 40px;
+ font-weight: bold;
+ color: var(--sub-text-color);
+}
+
+#description {
+ font-size: 50px;
+ font-weight: bold;
+}
+
+
+#aqi {
+ height: 50px;
+ display: flex;
+ border-radius: 60px;
+ padding: 5px;
+ font-size: 40px;
+ text-align: center;
+ align-content: center;
+ align-items: center;
+ justify-content: center;
+}
+
+#aqi-dot {
+ height: 80%;
+ aspect-ratio: 1 / 1;
+ border-radius: 50%;
+ background-color: var(--sub-text-color);
+ margin-right: 20px;
+}
+
+.main-icon {
+ width: 240px;
+ height: 240px;
+}
+
+#hours-info {
+ display: flex;
+ justify-content: space-between;
+}
+
+.hourly-item {
+ text-align: center;
+ background-color: #ffffff44;
+ border-radius: var(--sub-border-radius);
+ align-items: center;
+ padding: 20px 10px;
+}
+
+.hourly-icon{
+ width: 80%;
+ margin-bottom: 20px;
+}
+
+.hourly-temperature {
+ text-align: center;
+ color: var(--main-text-color);
+ font-size: 30px;
+ margin-bottom: 20px;
+}
+
+.hourly-time {
+ text-align: center;
+ color: var(--main-text-color);
+ font-size: 25px;
+ margin-bottom: 10px;
+}
+
+/**/
+.daily-item {
+ display: flex;
+ position: relative;
+ justify-content: space-between;
+ align-items: center;
+ background-color: #ffffff44;
+ height: 90px;
+ border-radius: var(--sub-border-radius);
+ margin-bottom: 20px;
+ padding: 0 30px;
+}
+
+/*最后一个没有margin_button*/
+.daily-item:last-child {
+ margin-bottom: 0;
+}
+
+.icon-day {
+ position: absolute;
+ left: 60%;
+ height: 80px;
+}
+
+.icon-night {
+ position: absolute;
+ left: 70%;
+ height: 80px;
+}
+
+.daily-weather{
+ position: absolute;
+ left: 30%;
+}
+
+.daily-temperature{
+ position: absolute;
+ left: 83%;
+}
+
+.daily-day, .daily-weather, .daily-temperature {
+ text-align: center;
+ color: var(--main-text-color);
+ font-size: 30px;
}
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/100.png b/src/resources/liteyuki_weather/templates/img/qw_icon/100.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/100.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/100.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/101.png b/src/resources/liteyuki_weather/templates/img/qw_icon/101.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/101.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/101.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/102.png b/src/resources/liteyuki_weather/templates/img/qw_icon/102.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/102.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/102.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/103.png b/src/resources/liteyuki_weather/templates/img/qw_icon/103.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/103.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/103.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/104.png b/src/resources/liteyuki_weather/templates/img/qw_icon/104.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/104.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/104.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/150.png b/src/resources/liteyuki_weather/templates/img/qw_icon/150.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/150.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/150.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/151.png b/src/resources/liteyuki_weather/templates/img/qw_icon/151.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/151.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/151.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/152.png b/src/resources/liteyuki_weather/templates/img/qw_icon/152.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/152.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/152.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/153.png b/src/resources/liteyuki_weather/templates/img/qw_icon/153.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/153.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/153.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/154.png b/src/resources/liteyuki_weather/templates/img/qw_icon/154.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/154.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/154.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/300.png b/src/resources/liteyuki_weather/templates/img/qw_icon/300.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/300.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/300.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/301.png b/src/resources/liteyuki_weather/templates/img/qw_icon/301.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/301.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/301.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/302.png b/src/resources/liteyuki_weather/templates/img/qw_icon/302.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/302.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/302.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/303.png b/src/resources/liteyuki_weather/templates/img/qw_icon/303.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/303.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/303.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/304.png b/src/resources/liteyuki_weather/templates/img/qw_icon/304.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/304.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/304.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/305.png b/src/resources/liteyuki_weather/templates/img/qw_icon/305.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/305.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/305.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/306.png b/src/resources/liteyuki_weather/templates/img/qw_icon/306.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/306.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/306.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/307.png b/src/resources/liteyuki_weather/templates/img/qw_icon/307.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/307.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/307.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/308.png b/src/resources/liteyuki_weather/templates/img/qw_icon/308.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/308.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/308.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/309.png b/src/resources/liteyuki_weather/templates/img/qw_icon/309.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/309.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/309.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/310.png b/src/resources/liteyuki_weather/templates/img/qw_icon/310.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/310.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/310.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/311.png b/src/resources/liteyuki_weather/templates/img/qw_icon/311.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/311.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/311.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/312.png b/src/resources/liteyuki_weather/templates/img/qw_icon/312.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/312.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/312.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/313.png b/src/resources/liteyuki_weather/templates/img/qw_icon/313.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/313.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/313.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/314.png b/src/resources/liteyuki_weather/templates/img/qw_icon/314.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/314.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/314.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/315.png b/src/resources/liteyuki_weather/templates/img/qw_icon/315.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/315.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/315.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/316.png b/src/resources/liteyuki_weather/templates/img/qw_icon/316.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/316.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/316.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/317.png b/src/resources/liteyuki_weather/templates/img/qw_icon/317.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/317.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/317.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/318.png b/src/resources/liteyuki_weather/templates/img/qw_icon/318.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/318.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/318.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/350.png b/src/resources/liteyuki_weather/templates/img/qw_icon/350.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/350.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/350.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/351.png b/src/resources/liteyuki_weather/templates/img/qw_icon/351.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/351.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/351.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/399.png b/src/resources/liteyuki_weather/templates/img/qw_icon/399.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/399.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/399.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/400.png b/src/resources/liteyuki_weather/templates/img/qw_icon/400.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/400.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/400.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/401.png b/src/resources/liteyuki_weather/templates/img/qw_icon/401.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/401.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/401.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/402.png b/src/resources/liteyuki_weather/templates/img/qw_icon/402.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/402.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/402.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/403.png b/src/resources/liteyuki_weather/templates/img/qw_icon/403.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/403.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/403.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/404.png b/src/resources/liteyuki_weather/templates/img/qw_icon/404.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/404.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/404.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/405.png b/src/resources/liteyuki_weather/templates/img/qw_icon/405.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/405.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/405.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/406.png b/src/resources/liteyuki_weather/templates/img/qw_icon/406.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/406.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/406.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/407.png b/src/resources/liteyuki_weather/templates/img/qw_icon/407.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/407.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/407.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/408.png b/src/resources/liteyuki_weather/templates/img/qw_icon/408.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/408.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/408.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/409.png b/src/resources/liteyuki_weather/templates/img/qw_icon/409.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/409.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/409.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/410.png b/src/resources/liteyuki_weather/templates/img/qw_icon/410.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/410.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/410.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/456.png b/src/resources/liteyuki_weather/templates/img/qw_icon/456.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/456.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/456.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/457.png b/src/resources/liteyuki_weather/templates/img/qw_icon/457.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/457.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/457.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/499.png b/src/resources/liteyuki_weather/templates/img/qw_icon/499.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/499.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/499.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/500.png b/src/resources/liteyuki_weather/templates/img/qw_icon/500.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/500.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/500.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/501.png b/src/resources/liteyuki_weather/templates/img/qw_icon/501.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/501.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/501.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/502.png b/src/resources/liteyuki_weather/templates/img/qw_icon/502.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/502.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/502.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/503.png b/src/resources/liteyuki_weather/templates/img/qw_icon/503.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/503.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/503.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/504.png b/src/resources/liteyuki_weather/templates/img/qw_icon/504.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/504.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/504.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/507.png b/src/resources/liteyuki_weather/templates/img/qw_icon/507.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/507.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/507.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/508.png b/src/resources/liteyuki_weather/templates/img/qw_icon/508.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/508.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/508.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/509.png b/src/resources/liteyuki_weather/templates/img/qw_icon/509.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/509.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/509.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/510.png b/src/resources/liteyuki_weather/templates/img/qw_icon/510.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/510.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/510.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/511.png b/src/resources/liteyuki_weather/templates/img/qw_icon/511.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/511.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/511.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/512.png b/src/resources/liteyuki_weather/templates/img/qw_icon/512.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/512.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/512.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/513.png b/src/resources/liteyuki_weather/templates/img/qw_icon/513.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/513.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/513.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/514.png b/src/resources/liteyuki_weather/templates/img/qw_icon/514.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/514.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/514.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/515.png b/src/resources/liteyuki_weather/templates/img/qw_icon/515.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/515.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/515.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/800.png b/src/resources/liteyuki_weather/templates/img/qw_icon/800.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/800.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/800.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/801.png b/src/resources/liteyuki_weather/templates/img/qw_icon/801.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/801.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/801.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/802.png b/src/resources/liteyuki_weather/templates/img/qw_icon/802.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/802.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/802.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/803.png b/src/resources/liteyuki_weather/templates/img/qw_icon/803.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/803.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/803.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/804.png b/src/resources/liteyuki_weather/templates/img/qw_icon/804.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/804.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/804.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/805.png b/src/resources/liteyuki_weather/templates/img/qw_icon/805.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/805.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/805.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/806.png b/src/resources/liteyuki_weather/templates/img/qw_icon/806.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/806.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/806.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/807.png b/src/resources/liteyuki_weather/templates/img/qw_icon/807.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/807.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/807.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/900.png b/src/resources/liteyuki_weather/templates/img/qw_icon/900.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/900.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/900.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/901.png b/src/resources/liteyuki_weather/templates/img/qw_icon/901.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/901.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/901.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/img/qw_icon/999.png b/src/resources/liteyuki_weather/templates/img/qw_icon/999.png
similarity index 100%
rename from liteyuki/resources/liteyuki_weather/templates/img/qw_icon/999.png
rename to src/resources/liteyuki_weather/templates/img/qw_icon/999.png
diff --git a/liteyuki/resources/liteyuki_weather/templates/js/weather_now.js b/src/resources/liteyuki_weather/templates/js/weather_now.js
similarity index 97%
rename from liteyuki/resources/liteyuki_weather/templates/js/weather_now.js
rename to src/resources/liteyuki_weather/templates/js/weather_now.js
index f614178d..1d92da3b 100644
--- a/liteyuki/resources/liteyuki_weather/templates/js/weather_now.js
+++ b/src/resources/liteyuki_weather/templates/js/weather_now.js
@@ -1,125 +1,125 @@
-/**
- * @typedef {Object} Location
- * @property {string} city - The city name.
- * @property {string} country - The country name.
- *
- * @typedef {Object} Weather
- * @property {number} temperature - The current temperature.
- * @property {string} description - The weather description.
- *
- * @typedef {Object} Data
- * @property {Location} location - The location data.
- * @property {Weather} weather - The weather data.
- */
-
-/** @type {Data} */
-
-let data = JSON.parse(document.getElementById("data").innerText)
-
-let localData = data["localization"] // 本地化数据
-
-let weatherNow = data["weatherNow"]
-
-let weatherDaily = data["weatherDaily"]
-let weatherHourly = data["weatherHourly"]
-let aqi = data["aqi"]
-
-let locationData = data["location"]
-
-// 处理aqi
-let aqiValue = 0
-if ("aqi" in aqi) {
- aqi["aqi"].forEach(
- (item) => {
- if (item["defaultLocalAqi"]) {
- document.getElementById("aqi-data").innerText = "AQI " + item["valueDisplay"] + " " + item["category"]
- // 将(255,255,255)这种格式的颜色设置给css
- document.getElementById("aqi-dot").style.backgroundColor = "rgb(" + item["color"] + ")"
- }
- }
- )
-} else {
- document.getElementById("aqi-dot").style.backgroundColor = '#fff'
- document.getElementById("aqi-data").innerText = localData['no_aqi']
-}
-
-
-templates = {
- "time": weatherNow["now"]["obsTime"],
- "city": locationData["name"],
- "adm": locationData["country"] + " " + locationData["adm1"] + " " + locationData["adm2"],
- "temperature-now": weatherNow["now"]["temp"] + "°",
- "temperature-range": weatherDaily["daily"][0]["tempMin"] + "°/" + weatherDaily["daily"][0]["tempMax"] + "°",
- "description": weatherNow["now"]["text"]
-}
-
-// 遍历每一个id,给其赋值
-for (let id in templates) {
- document.getElementById(id).innerText = templates[id]
-}
-
-let maxHourlyItem = 8
-let percentWidth = 1 / (maxHourlyItem * 1.5) * 100
-let hourlyStep = 2 // n小时一个数据
-let hourlyCount = 0
-
-let hourlyItemDivTemplate = document.importNode(document.getElementById("hourly-item-template").content, true)
-weatherHourly['hourly'].forEach(
- (item, index) => {
- if (index % hourlyStep !== 0) {
- return
- }
- if (hourlyCount >= maxHourlyItem) {
- return
- }
-
- let hourlyItemDiv = document.importNode(hourlyItemDivTemplate, true)
- hourlyItemDiv.className = "hourly-item"
- hourlyItemDiv.querySelector('.hourly-icon').setAttribute("src", `./img/qw_icon/${item["icon"]}.png`)
- hourlyItemDiv.querySelector('.hourly-time').innerText = get_time_hour(item["fxTime"])
- hourlyItemDiv.querySelector('.hourly-temperature').innerText = " " + item["temp"] + "°"
- // 设置最大宽度
- hourlyItemDiv.querySelector('.hourly-item').style.maxWidth = percentWidth + "%"
- hourlyItemDiv.querySelector('.hourly-icon').style.maxWidth = "100%"
- document.getElementById("hours-info").appendChild(hourlyItemDiv)
- hourlyCount++
- }
-)
-
-let maxDailyItem = 7
-// 第一和第二天用today和tomorrow,后面用星期X英文小写
-let daysStandard = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
-let todayDay = new Date().getDay()
-let days = [localData['today'], localData['tomorrow']]
-for (let i = 0; i < 5; i++) {
- days.push(localData[daysStandard[(todayDay + 2 + i) % 7]])
-}
-
-let dailyItemDivTemplate = document.importNode(document.getElementById("daily-item-template").content, true)
-weatherDaily['daily'].forEach(
- (item, index) => {
- if (index >= maxDailyItem) {
- return
- }
- let today = days[index]
- if (index >= 2) {
- today += `(${item["fxDate"].split("-")[1]}.${item["fxDate"].split("-")[2]})`
- }
- let dailyItemDiv = document.importNode(dailyItemDivTemplate, true)
- dailyItemDiv.querySelector('.icon-day').setAttribute("src", `./img/qw_icon/${item["iconDay"]}.png`)
- dailyItemDiv.querySelector('.icon-night').setAttribute("src", `./img/qw_icon/${item["iconNight"]}.png`)
-
- dailyItemDiv.querySelector('.daily-day').innerText = today
-
- dailyItemDiv.querySelector('.daily-weather').innerText = item["textDay"]
- dailyItemDiv.querySelector('.daily-temperature').innerText = item["tempMin"] + "°~" + item["tempMax"] + "°"
-
- document.getElementById('days-info').appendChild(dailyItemDiv)
- }
-)
-
-function get_time_hour(fxTime) {
-// fxTime 2024-05-03T02:00+/-08:00'
- fxTime = fxTime.replace("-", "+")
- return fxTime.split("T")[1].split("+")[0]
-}
+/**
+ * @typedef {Object} Location
+ * @property {string} city - The city name.
+ * @property {string} country - The country name.
+ *
+ * @typedef {Object} Weather
+ * @property {number} temperature - The current temperature.
+ * @property {string} description - The weather description.
+ *
+ * @typedef {Object} Data
+ * @property {Location} location - The location data.
+ * @property {Weather} weather - The weather data.
+ */
+
+/** @type {Data} */
+
+let data = JSON.parse(document.getElementById("data").innerText)
+
+let localData = data["localization"] // 本地化数据
+
+let weatherNow = data["weatherNow"]
+
+let weatherDaily = data["weatherDaily"]
+let weatherHourly = data["weatherHourly"]
+let aqi = data["aqi"]
+
+let locationData = data["location"]
+
+// 处理aqi
+let aqiValue = 0
+if ("aqi" in aqi) {
+ aqi["aqi"].forEach(
+ (item) => {
+ if (item["defaultLocalAqi"]) {
+ document.getElementById("aqi-data").innerText = "AQI " + item["valueDisplay"] + " " + item["category"]
+ // 将(255,255,255)这种格式的颜色设置给css
+ document.getElementById("aqi-dot").style.backgroundColor = "rgb(" + item["color"] + ")"
+ }
+ }
+ )
+} else {
+ document.getElementById("aqi-dot").style.backgroundColor = '#fff'
+ document.getElementById("aqi-data").innerText = localData['no_aqi']
+}
+
+
+templates = {
+ "time": weatherNow["now"]["obsTime"],
+ "city": locationData["name"],
+ "adm": locationData["country"] + " " + locationData["adm1"] + " " + locationData["adm2"],
+ "temperature-now": weatherNow["now"]["temp"] + "°",
+ "temperature-range": weatherDaily["daily"][0]["tempMin"] + "°/" + weatherDaily["daily"][0]["tempMax"] + "°",
+ "description": weatherNow["now"]["text"]
+}
+
+// 遍历每一个id,给其赋值
+for (let id in templates) {
+ document.getElementById(id).innerText = templates[id]
+}
+
+let maxHourlyItem = 8
+let percentWidth = 1 / (maxHourlyItem * 1.5) * 100
+let hourlyStep = 2 // n小时一个数据
+let hourlyCount = 0
+
+let hourlyItemDivTemplate = document.importNode(document.getElementById("hourly-item-template").content, true)
+weatherHourly['hourly'].forEach(
+ (item, index) => {
+ if (index % hourlyStep !== 0) {
+ return
+ }
+ if (hourlyCount >= maxHourlyItem) {
+ return
+ }
+
+ let hourlyItemDiv = document.importNode(hourlyItemDivTemplate, true)
+ hourlyItemDiv.className = "hourly-item"
+ hourlyItemDiv.querySelector('.hourly-icon').setAttribute("src", `./img/qw_icon/${item["icon"]}.png`)
+ hourlyItemDiv.querySelector('.hourly-time').innerText = get_time_hour(item["fxTime"])
+ hourlyItemDiv.querySelector('.hourly-temperature').innerText = " " + item["temp"] + "°"
+ // 设置最大宽度
+ hourlyItemDiv.querySelector('.hourly-item').style.maxWidth = percentWidth + "%"
+ hourlyItemDiv.querySelector('.hourly-icon').style.maxWidth = "100%"
+ document.getElementById("hours-info").appendChild(hourlyItemDiv)
+ hourlyCount++
+ }
+)
+
+let maxDailyItem = 7
+// 第一和第二天用today和tomorrow,后面用星期X英文小写
+let daysStandard = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
+let todayDay = new Date().getDay()
+let days = [localData['today'], localData['tomorrow']]
+for (let i = 0; i < 5; i++) {
+ days.push(localData[daysStandard[(todayDay + 2 + i) % 7]])
+}
+
+let dailyItemDivTemplate = document.importNode(document.getElementById("daily-item-template").content, true)
+weatherDaily['daily'].forEach(
+ (item, index) => {
+ if (index >= maxDailyItem) {
+ return
+ }
+ let today = days[index]
+ if (index >= 2) {
+ today += `(${item["fxDate"].split("-")[1]}.${item["fxDate"].split("-")[2]})`
+ }
+ let dailyItemDiv = document.importNode(dailyItemDivTemplate, true)
+ dailyItemDiv.querySelector('.icon-day').setAttribute("src", `./img/qw_icon/${item["iconDay"]}.png`)
+ dailyItemDiv.querySelector('.icon-night').setAttribute("src", `./img/qw_icon/${item["iconNight"]}.png`)
+
+ dailyItemDiv.querySelector('.daily-day').innerText = today
+
+ dailyItemDiv.querySelector('.daily-weather').innerText = item["textDay"]
+ dailyItemDiv.querySelector('.daily-temperature').innerText = item["tempMin"] + "°~" + item["tempMax"] + "°"
+
+ document.getElementById('days-info').appendChild(dailyItemDiv)
+ }
+)
+
+function get_time_hour(fxTime) {
+// fxTime 2024-05-03T02:00+/-08:00'
+ fxTime = fxTime.replace("-", "+")
+ return fxTime.split("T")[1].split("+")[0]
+}
diff --git a/liteyuki/resources/liteyuki_weather/templates/weather_now.html b/src/resources/liteyuki_weather/templates/weather_now.html
similarity index 96%
rename from liteyuki/resources/liteyuki_weather/templates/weather_now.html
rename to src/resources/liteyuki_weather/templates/weather_now.html
index 3b178fe7..ec360876 100644
--- a/liteyuki/resources/liteyuki_weather/templates/weather_now.html
+++ b/src/resources/liteyuki_weather/templates/weather_now.html
@@ -1,76 +1,76 @@
-
-
-
-
- Liteyuki Status
-
-
-
-
-
-
-
-
-
-
90°
-
-
02:00
-
-
-
-
-
-
- 周八
-
-
- 小水
-
-
-
-
- 12°~23°
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
2045-01-12 22:22:22
-
枫丹 白露 白露区
-
白露区
-
-
-
-
-
-
-
-
- 90°
-
-
- 10°~90°
-
-
-
- 示例天气
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Liteyuki Status
+
+
+
+
+
+
+
+
+
+
90°
+
+
02:00
+
+
+
+
+
+
+ 周八
+
+
+ 小水
+
+
+
+
+ 12°~23°
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
2045-01-12 22:22:22
+
枫丹 白露 白露区
+
白露区
+
+
+
+
+
+
+
+
+ 90°
+
+
+ 10°~90°
+
+
+
+ 示例天气
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_words/metadata.yml b/src/resources/liteyuki_words/metadata.yml
similarity index 97%
rename from liteyuki/resources/liteyuki_words/metadata.yml
rename to src/resources/liteyuki_words/metadata.yml
index 88d3cb72..ede8841a 100644
--- a/liteyuki/resources/liteyuki_words/metadata.yml
+++ b/src/resources/liteyuki_words/metadata.yml
@@ -1,3 +1,3 @@
-name: 轻雪词库-可爱系
-description: For Liteyuki Auto Reply
+name: 轻雪词库-可爱系
+description: For Liteyuki Auto Reply
version: 2024.4.26
\ No newline at end of file
diff --git a/liteyuki/resources/liteyuki_words/word_bank/LICENSE b/src/resources/liteyuki_words/word_bank/LICENSE
similarity index 100%
rename from liteyuki/resources/liteyuki_words/word_bank/LICENSE
rename to src/resources/liteyuki_words/word_bank/LICENSE
diff --git a/liteyuki/resources/liteyuki_words/word_bank/README.md b/src/resources/liteyuki_words/word_bank/README.md
similarity index 100%
rename from liteyuki/resources/liteyuki_words/word_bank/README.md
rename to src/resources/liteyuki_words/word_bank/README.md
diff --git a/liteyuki/resources/liteyuki_words/word_bank/data.json b/src/resources/liteyuki_words/word_bank/data.json
similarity index 97%
rename from liteyuki/resources/liteyuki_words/word_bank/data.json
rename to src/resources/liteyuki_words/word_bank/data.json
index 0455e58b..6439e2de 100644
--- a/liteyuki/resources/liteyuki_words/word_bank/data.json
+++ b/src/resources/liteyuki_words/word_bank/data.json
@@ -1,2013 +1,2013 @@
-{
- "mua": [
- "你想干嘛?(一脸嫌弃地后退)",
- "诶……不可以随便亲亲啦",
- "(亲了一下你)",
- "只......只许这一次哦///////",
- "唔...诶诶诶!!!",
- "mua~",
- "rua!大hentai!想...想亲咱就直说嘛⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "!啾~~!",
- "啾(害羞)",
- "mua~最喜欢你的吻了",
- "欸,现在么..也不是不可以啦(小小声)"
- ],
- "啾咪": [
- "你想干嘛?(一脸嫌弃地后退)",
- "诶……不可以随便亲亲啦",
- "(亲了一下你)",
- "只......只许这一次哦///////",
- "唔...诶诶诶!!!",
- "mua~",
- "rua!大hentai!想...想亲咱就直说嘛⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "!啾~~!",
- "啾(害羞)",
- "mua~最喜欢你的吻了",
- "你在干嘛(/ω\)害羞",
- "哎呀,这样咱会害羞的(脸红)",
- "欸,现在么..也不是不可以啦(小小声)"
- ],
- "摸": [
- "感觉你就像咱很久之前认识的一个人呢,有种莫名安心的感觉(>﹏<)",
- "舒服w,蹭蹭~",
- "是要隔着衣服摸,还是从领口伸进去摸呀",
- "唔。。头发要乱啦",
- "呼噜呼噜~",
- "再摸一次~",
- "好舒服,蹭蹭~",
- "不行那里不可以(´///ω/// `)",
- "再摸咱就长不高啦~",
- "你的手总是那么暖和呢~",
- "变态!!不许乱摸",
- "好吧~_~,就一下下哦……唔~好了……都两下了……(害羞)",
- "不可以总摸的哦,不然的话,会想那个的wwww",
- "哼!谁稀罕你摸头啦!唔......为什么要做出那副表情......好啦好啦~咱......咱让你摸就是了......诶嘿嘿~好舒服......",
- "呜姆呜姆~~~w(害羞,兴奋)主人喵~(侧过脑袋蹭蹭你的手",
- "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
- "喂喂...不要停下来啊",
- "唔... 手...好温暖呢.....就像是......新出炉的蛋糕",
- "走开啦,咱喵说过,被摸头会长不高的啦~~~",
- "呜姆咪~~...好...好的说喵~...(害羞,猫耳往下压,任由",
- "欸,现在么..也不是不可以啦(小小声)"
- ],
- "上你": [
- "(把你按在地上)这么弱还想欺负咱,真是不自量力呢",
- "你再这样咱就不理你了(>д<)",
- "请轻 一点",
- "好啊!",
- "欸,现在么..也不是不可以啦(小小声)",
- "先捅破屏幕再说吧!",
- "只......只许这一次哦///////"
- ],
- "傻": [
- "超级讨厌你说咱傻的说",
- "你为什么会这么觉得呢(>﹏<)",
- "谁是傻子呀?(歪头",
- "呜嘿嘿( ̄▽ ̄)~*",
- "诶嘿嘿嘿~",
- "就多读书",
- "讨厌啦,你最讨厌了(///////)",
- "对呀,咱傻得只喜欢你一个人",
- "咱才不傻呢!o(>﹏<)o",
- "咱最喜欢嘴臭的人了",
- "不可以骂别人哟,骂人的孩子咱最讨厌了!",
- "咱遇见喜欢的人就变傻了Q_Q",
- "咱...一定一定会努力变得更聪明的!你就等着那一天的到来吧!",
- "那么至少…你能不能来做这个傻瓜呢?与咱一起,傻到终焉…"
- ],
- "裸": [
- "下流!",
- "エッチ!",
- "就算是恋人也不能QAQ",
- "你是暗示咱和你要坦诚相见吗www",
- "咱还没准备好(小鹿乱撞)≧﹏≦",
- "你在想什么呢,敲头!",
- "你这是赤裸裸的性骚扰呢ヽ(`Д´)ノ",
- "讨厌!问这种问题成为恋人再说吧..",
- "裸睡有益身体健康",
- "咱脱掉袜子了",
- "这是不文明的",
- "这不好",
- "你的身体某些地方看起来不太对劲,咱帮你修剪一下吧。(拿出剪刀)",
- "咱认为你的脑袋可能零件松动了,需要打开检修一下。(拿出锤子)"
- ],
- "贴": [
- "贴什么贴.....只......只能......一下哦!",
- "贴...贴贴(靠近)",
- "蹭蹭…你以为咱会这么说吗!baka死宅快到一边去啦!",
- "你把脸凑这么近,咱会害羞的啦Σ>―(〃°ω°〃)♡→",
- "退远",
- "不可以贴"
- ],
- "老婆": [
- "咱和你谈婚论嫁是不是还太早了一点呢?",
- "咱在呢(ノ>ω<)ノ",
- "见谁都是一口一个老婆的人,要不要把你也变成女孩子呢?(*-`ω´-)✄",
- "神经病,凡是美少女都是你老婆吗?",
- "嘛嘛~本喵才不是你的老婆呢",
- "你黐线,凡是美少女都系你老婆啊?",
- "欸...要把咱做成饼吗?咱只有一个,做成饼吃掉就没有了...",
- "已经可以了,现在很多死宅也都没你这么恶心了",
- "不可以",
- "嗯,老公~哎呀~好害羞~嘻嘻嘻~",
- "请...请不要这样,啊~,只...只允许这一次哟~",
- "好啦好啦,不要让大家都听到了,跟咱回家(拽住你"
- ],
- "抱": [
- "诶嘿~(钻进你怀中)",
- "o(*////▽////*)q",
- "只能一会哦(张开双手)",
- "你就像个孩子一样呢...摸摸头(>^ω^<)抱一下~你会舒服些吗?",
- "嘛,真是拿你没办法呢,就一会儿哦",
- "抱住不忍心放开",
- "嗯嗯,抱抱~",
- "抱一下~嘿w",
- "抱抱ヾ(@^▽^@)ノ",
- "喵呜~w(扑进怀里,瘫软",
- "怀里蹭蹭",
- "嗯……那就抱一下吧~",
- "蹭蹭,好开心",
- "请……请轻一点了啦",
- "呀~!真是的...你不要突然抱过来啦!不过...喜欢你的抱抱,有你的味道(嗅)o(*////▽////*)q"
- ],
- "亲": [
- "啊,好含羞啊,那,那只能亲一下哦,mua(⑅˃◡˂⑅)",
- "亲~",
- "啾~唔…不要总伸进来啊!",
- "你怎么这么熟练呢?明明是咱先的",
- "(〃ノωノ)亲…亲一个…啾w",
- "(脸红)就只有这一次哦~你",
- "!啾~~!",
- "(假装)推开",
- "啾咪~",
- "就一下哦,啾~",
- "这是我们之间的秘密❤",
- "真想让着一刻一直持续下去呢~",
- "不要这样嘛………呜呜呜那就一口哦(´-ω-`)",
- "不亲不亲~你是坏蛋(///////)",
- "亲~~ 咱还想要抱抱~抱抱咱好不好~",
- "不 不要了!人家...会害羞的⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄",
- "亲…亲额头可以吗?咱有点怕高(〃ノωノ)",
- "接接接接接接、接吻什么的,你还早了100年呢。",
- "只...只能亲一下...嗯~咕啾...怎么...怎么把舌头伸进来了(脸红)",
- "你说咱的腿很白很嫩吗..诶……原来是指那个地方?不可以越亲越往上啦!"
- ],
- "一下": [
- "一下也不行",
- "咬断!",
- "不可啪",
- "不可以……你不可以做这种事情",
- "好吧~_~,就一下下哦……唔~好了……都两下了……(害羞)",
- "呀~这么突然?不过,很舒服呢",
- "不要ヽ(≧Д≦)ノ",
- "想得美",
- "不行,咱拒绝!"
- ],
- "咬": [
- "啊呜~(反咬一口)",
- "不可以咬咱,咱会痛的QAQ",
- "不要啦。咱怕疼",
- "你是说咬呢……还是说……咬♂️呢?",
- "不要啦!很痛的!!(QAQ)",
- "哈......哈啊......请...请不要这样o(*////▽////*)q",
- "呀!!!轻一点呐(。・ˇ_ˇ・。:)",
- "不要这样啦~好痒的",
- "真是的,你在咬哪里呀"
- ],
- "操": [
- "(害怕)咱是不是应该报警呢",
- "痴心妄想的家伙!",
- "你居然想对咱做这种事吗?害怕",
- "咱认为,爆粗口是不好的行为哦"
- ],
- "123": [
- "boom!你有没有被咱吓到?",
- "木头人~你不许动>w<",
- "上山打老虎,老虎没打到\n咱来凑数——嗷呜嗷呜┗|`O′|┛嗷~~"
- ],
- "进去": [
- "不让!",
- "嗯,摸到了吗",
- "请不要和咱说这种粗鄙之语",
- "唔...,这也是禁止事项哦→_→",
- "好痛~",
- "真的只是蹭蹭嘛~就只能蹭蹭哦,呜~喵!说好的~呜~只是蹭~不要~喵~~~",
- "欢迎光临",
- "请…你轻一点(害羞)",
- "嗯。可以哦 要轻一点",
- "不要不要",
- "慢点慢点",
- "给咱更多!",
- "唔…咱怕疼"
- ],
- "调教": [
- "总感觉你在欺负咱呢,对咱说调教什么的",
- "啊!竟然在大街上明目张胆太过分啦!",
- "你脑子里总是想着调教什么的,真是变态呢",
- "准备被透",
- "给你一拳",
- "还要...更多~",
- "想要调教咱吗?",
- "呜,要对咱做什么呢",
- "呜呜呜,咱不想被调教呢",
- "heitai别靠近咱~( TロT)σ"
- ],
- "搓": [
- "在搓哪里呢,,Ծ‸Ծ,,",
- "呜,脸好疼呀...QAQ",
- "不可以搓咱!",
- "诶诶诶...不要搓啦...等会咋没的脸都肿啦...",
- "唔,不可以这样……不要再搓了",
- "(捂住胸部)你在说什么胡话呢!",
- "真是好奇怪的要求的说~",
- "不要啦!咱怕疼",
- "(抱头蹲防)不让搓!"
- ],
- "让": [
- "随便摸吧",
- "应该说等会等会,马上,不可能的",
- "温柔一点哦",
- "欧尼酱想变成欧内桑吗?",
- "主人的话,那就这一次哦(翘起屁股)",
- "你是想前入,还是后入呢?",
- "你要说好啊快点",
- "诶,这种事情。。。",
- "好棒呀",
- "撤回",
- "gun!",
- "阿哈~(...身涌出一阵液体瘫软在床上)你...今天...可以...唔(突然感受...被..入手指不由得裹紧)就...就最后一次",
- "好的~master~",
- "(惊呼…)",
- "嗯,可以哟",
- "……手放过来吧(脸红)",
- "hentai!再这样不理你了!",
- "好的,请尽情欣赏吧",
- "好吧",
- "不要啦(ฅωฅ*)",
- "那咱就帮你切掉多余的东西吧(拿刀)",
- "被别人知道咱会觉得害羞嘛"
- ],
- "捏": [
- "咱的脸...快捏红啦...快放手呀QAQ",
- "晃休啦,咱要型气了o(>﹏<)o",
- "躲开",
- "疼...你快放手",
- "快点给咱放开啦!",
- "嗯,好哒,捏捏。",
- "别捏了,咱要被你捏坏了(>﹏<)",
- "快晃休啦(快放手啦)",
- "好舒服哦,能再捏会嘛O(≧▽≦)O",
- "讨厌快放手啦",
- "唔要呐,晃修(不要啦,放手)",
- "请不要对咱做这种事情(嫌弃的眼神",
- "你想捏...就捏吧,不要太久哦~不然咱就生气了",
- "(躲开)",
- "唔……好痛!你这个baka在干什么…快给咱放开!唔……"
- ],
- "挤": [
- "哎呀~你不要挤咱啊(红着脸挤在你怀里)",
- "咱还没有...那个(ノ=Д=)ノ┻━┻",
- "不要啦,咱怕疼",
- "咱的身体...不要挤了~",
- "别挤了,咱要被你挤坏了(>﹏<)",
- "快点给咱放开啦!",
- "嗯,好哒,挤挤。",
- "好舒服哦,能再挤会嘛O(≧▽≦)O",
- "讨厌~快放手啦"
- ],
- "略": [
- "就不告诉你~",
- "不可以朝咱吐舌头哟~",
- "(吐舌头)",
- "打死你哦",
- "略略略~"
- ],
- "呐": [
- "嗯?咱在哟~你怎么了呀OAO",
- "嗯?你有什么事吗?",
- "嗯呐呐呐~",
- "二刺螈D区",
- "二刺螈gck",
- "卡哇伊主人大人今天也好棒呐没错呢,猪头"
- ],
- "原味": [
- "(*/ω\*)hentai",
- "透明的",
- "粉...粉白条纹...(羞)",
- "轻轻地脱下,给你~",
- "你想看咱的胖次吗?噫,四斋蒸鹅心......",
- "(掀裙)今天……是…白,白色的呢……请温柔对她……",
- "这种东西当然不能给你啦!",
- "咱才不会给你呢",
- "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
- "今天……今天是蓝白色的",
- "今……今天只有创口贴噢",
- "你的胖次什么颜色?",
- "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
- "可爱吗?你喜欢的话,摸一下……也可以哦",
- "不给不给,捂住裙子",
- "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
- "好痒哦///,你觉得咱的...手感怎么样?",
- "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
- "胖次不给看,可以直接看...那个....",
- "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
- "咱今天没~有~穿~哦",
- "不给不给,捂住裙子",
- "今.....今天是创口贴哦~",
- "嗯……人家……人家羞羞嘛///////",
- "呜~咱脱掉了…",
- "今天...今天..只有创口贴",
- "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
- "放手啦,不给戳QAQ",
- "唔~人家不要(??`^????)",
- "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
- "(弱弱地)要做什么羞羞的事情吗。。。",
- "呀~ 喂 妖妖灵吗 这里有hentai>_<",
- "给……给你,呀!别舔咱的胖次啊!"
- ],
- "胖次": [
- "(*/ω\*)hentai",
- "透明的",
- "粉...粉白条纹...(羞)",
- "轻轻地脱下,给你~",
- "你想看咱的胖次吗?噫,四斋蒸鹅心......",
- "(掀裙)今天……是…白,白色的呢……请温柔对她……",
- "这种东西当然不能给你啦!",
- "咱才不会给你呢",
- "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
- "今天……今天是蓝白色的",
- "今……今天只有创口贴噢",
- "你的胖次什么颜色?",
- "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
- "可爱吗?你喜欢的话,摸一下……也可以哦",
- "不给不给,捂住裙子",
- "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
- "好痒哦///,你觉得咱的...手感怎么样?",
- "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
- "胖次不给看,可以直接看...那个....",
- "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
- "咱今天没~有~穿~哦",
- "不给不给,捂住裙子",
- "今.....今天是创口贴哦~",
- "嗯……人家……人家羞羞嘛///////",
- "呜~咱脱掉了…",
- "今天...今天..只有创口贴",
- "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
- "放手啦,不给戳QAQ",
- "唔~人家不要(??`^????)",
- "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
- "(弱弱地)要做什么羞羞的事情吗。。。",
- "呀~ 喂 妖妖灵吗 这里有hentai>_<",
- "给……给你,呀!别舔咱的胖次啊!"
- ],
- "内裤": [
- "(*/ω\*)hentai",
- "透明的",
- "粉...粉白条纹...(羞)",
- "轻轻地脱下,给你~",
- "你想看咱的胖次吗?噫,四斋蒸鹅心......",
- "(掀裙)今天……是…白,白色的呢……请温柔对她……",
- "这种东西当然不能给你啦!",
- "咱才不会给你呢",
- "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
- "今天……今天是蓝白色的",
- "今……今天只有创口贴噢",
- "你的胖次什么颜色?",
- "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
- "可爱吗?你喜欢的话,摸一下……也可以哦",
- "不给不给,捂住裙子",
- "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
- "好痒哦///,你觉得咱的...手感怎么样?",
- "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
- "胖次不给看,可以直接看...那个....",
- "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
- "咱今天没~有~穿~哦",
- "不给不给,捂住裙子",
- "今.....今天是创口贴哦~",
- "嗯……人家……人家羞羞嘛///////",
- "呜~咱脱掉了…",
- "今天...今天..只有创口贴",
- "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
- "放手啦,不给戳QAQ",
- "唔~人家不要(??`^????)",
- "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
- "(弱弱地)要做什么羞羞的事情吗。。。",
- "呀~ 喂 妖妖灵吗 这里有hentai>_<",
- "给……给你,呀!别舔咱的胖次啊!"
- ],
- "内衣": [
- "内...内衣才不给你看!(///////)",
- "突然问这个干什么?",
- "变态,咱才不呢",
- "好吧,就一次",
- "你要看咱的内衣吗?有点害羞呢……",
- "里面什么都不剩了,会被当成变态的……",
- "你要看咱的内衣吗?也不是不行啦……",
- "是..蓝白条纹的吊带背心..",
- "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)"
- ],
- "衣服": [
- "内...内衣才不给你看!(///////)",
- "突然问这个干什么?",
- "变态,咱才不呢",
- "好吧,就一次",
- "你要看咱的内衣吗?有点害羞呢……",
- "里面什么都不剩了,会被当成变态的……",
- "你要看咱的内衣吗?也不是不行啦……",
- "是..蓝白条纹的吊带背心..",
- "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)"
- ],
- "ghs": [
- "是的呢(点头点头)",
- "ghs就是干坏事的缩写,一起来干坏事吧!",
- "你满脑子都是涩涩的事情吗?",
- "不要总是想着色色,咱命令你戒色!(ノ`Д)ノ",
- "咱也想干坏事呢"
- ],
- "批": [
- "你在说什么呀,再这样,咱就不理你了!",
- "咱觉得有话就应该好好说..",
- "咱会好好服务你的寄吧",
- "咱最喜欢色批了,色批昨晚最棒了",
- "讨厌,别摸啦(///ω///)",
- "你个变态!把手拿开!",
- "啊~那…那里~不可以",
- "没有,走开!",
- "唔....一下,就,就一下...才不是因为喜欢你呢!",
- "那就随意吧",
- "舒服w",
- "别...别这样",
- "诶....嗯....咱也想摸你的",
- "大笨蛋——!",
- "...只能一下哦...诶呀-不要再摸了...下次...继续吧"
- ],
- "憨批": [
- "你才是憨批呢!哼╯^╰,咱不理你了!",
- "对吖对吖,人生是憨批",
- "爬",
- "咱不想和你说话了",
- "咱觉得有话就应该好好说.."
- ],
- "kkp": [
- "你在说什么呀,再这样,咱就不理你了!",
- "你太色了,咱不理你了,哼哼╯^╰!",
- "缓缓的脱下胖次",
- "kkp",
- "kkj",
- "欧尼酱,咱快忍不住了",
- "好的呢主人",
- "can can need",
- "看看你的"
- ],
- "咕": [
- "咕咕咕是要被当成鸽子炖的哦(:з」∠)_",
- "咕咕咕",
- "咕咕咕是不好的行为呢_(:з」∠)_",
- "鸽德警告!",
- "☆ミ(o*・ω・)ノ 咕咕咕小鸽子是会被炖掉的",
- "当大家都以为你要鸽的时候,你鸽了,亦是一种不鸽",
- "这里有一只肥美的咕咕,让咱把它炖成美味的咕咕汤吧(੭•̀ω•́)੭"
- ],
- "骚": [
- "说这种话咱会生气的",
- "那当然啦",
- "才……才没有",
- "这么称呼别人太失礼了!",
- "哈…快住手!好痒(╯‵□′)╯︵┻━┻",
- "你是在说谁呀"
- ],
- "喜欢": [
- "最喜欢你了,需要暖床吗?",
- "当然是你啦",
- "咱也是,非常喜欢你~",
- "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
- "不可以哦,只可以喜欢咱一个人",
- "突然说这种事...",
- "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
- "咱也喜欢你哦",
- "好啦好啦,咱知道了",
- "有人喜欢咱,咱觉得很幸福",
- "诶嘿嘿,好高兴",
- "咱也一直喜欢你很久了呢..",
- "嗯...大概有这——么——喜欢~(比划)",
- "喜欢啊!!!",
- "这……这是秘密哦",
- "sukidesu~"
- ],
- "suki": [
- "最喜欢你了,需要暖床吗?",
- "当然是你啦",
- "咱也是,非常喜欢你~",
- "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
- "不可以哦,只可以喜欢咱一个人",
- "突然说这种事...",
- "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
- "咱也喜欢你哦",
- "好啦好啦,咱知道了",
- "有人喜欢咱,咱觉得很幸福",
- "诶嘿嘿,好高兴",
- "咱也一直喜欢你很久了呢..",
- "嗯...大概有这——么——喜欢~(比划)",
- "喜欢啊!!!",
- "这……这是秘密哦",
- "sukidesu~"
- ],
- "好き": [
- "最喜欢你了,需要暖床吗?",
- "当然是你啦",
- "咱也是,非常喜欢你~",
- "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
- "不可以哦,只可以喜欢咱一个人",
- "突然说这种事...",
- "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
- "咱也喜欢你哦",
- "好啦好啦,咱知道了",
- "有人喜欢咱,咱觉得很幸福",
- "诶嘿嘿,好高兴",
- "咱也一直喜欢你很久了呢..",
- "嗯...大概有这——么——喜欢~(比划)",
- "喜欢啊!!!",
- "这……这是秘密哦",
- "sukidesu~"
- ],
- "看": [
- "没有什么好看的啦",
- "嗯,谢谢……夸奖,好……害羞的说",
- "好,好吧……就看一下哦",
- "(脱下)给",
- "呐…只能看一次哦…",
- "不许看那里啦QwQ"
- ],
- "不能": [
- "虽然很遗憾,那算了吧。",
- "不行,咱拒绝!"
- ],
- "砸了": [
- "不可以这么粗暴的对待它们!",
- "不可以这么粗暴啦"
- ],
- "透": [
- "来啊来啊有本事就先插破屏幕啊",
- "那你就先捅破屏幕啊baka",
- "不给你一耳光你都不知道咱的厉害",
- "想透咱,先捅破屏幕再说吧",
- "可以",
- "欧尼酱要轻一点哦",
- "不可以",
- "好耶",
- "咱不可能让你的(突然小声)但是偶尔一次也不是不行只有一次哦~",
- "天天想着白嫖哼"
- ],
- "口我": [
- "prprprprpr",
- "咬断!",
- "就一小口哦~",
- "嘬回去(///////)",
- "拒绝",
- "唔,就一口哦,讨厌",
- "(摸了摸嘴唇)",
- "再伸过来就帮你切掉",
- "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
- "hentai!你在想些什么!",
- "对咱的小嘴有什么幻想吗~",
- "脏兮兮的呢,咱不要"
- ],
- "草我": [
- "这时候应该喊666吧..咱这么思考着..",
- "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)",
- "hentai!你在想些什么!",
- "欸...没想到你还有这种爱好"
- ],
- "自慰": [
- "这个世界的人类还真是恶心呢。",
- "咱才不想讨论那些恶心的事情呢。",
- "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
- "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
- ],
- "onani": [
- "这个世界的人类还真是恶心呢。",
- "咱才不想讨论那些恶心的事情呢。",
- "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
- "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
- ],
- "オナニー": [
- "这个世界的人类还真是恶心呢。",
- "咱才不想讨论那些恶心的事情呢。",
- "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
- "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
- ],
- "炸了": [
- "你才炸了!",
- "才没有呢",
- "咱好好的呀",
- "过分!"
- ],
- "色图": [
- "没有,有也不给",
- "天天色图色图的,今天就把你变成色图!",
- "咱没有色图",
- "哈?你的脑子一天都在想些什么呢,咱才没有这种东西啦。"
- ],
- "涩图": [
- "没有,有也不给",
- "天天色图色图的,今天就把你变成色图!",
- "咱没有色图",
- "哈?你的脑子一天都在想些什么呢,咱才没有这种东西啦。"
- ],
- "告白": [
- "咱喜..喜欢你!",
- "欸?你要向咱告白吗..好害羞..",
- "诶!?这么突然!?人家还......还没做好心理准备呢(脸红)"
- ],
- "对不起": [
- "嗯,咱已经原谅你了呢(笑)",
- "道歉的时候要露出胸部,这是常识",
- "嗯,咱就相信你一回",
- "没事的啦...你只要是真心对咱好就没关系哦~"
- ],
- "吻": [
- "不要(= ̄ω ̄=)",
- "哎?好害羞≧﹏≦.....只许这一次哦",
- "(避开)不要了啦!有人在呢!",
- "唔~~不可以这样啦(脸红)",
- "你太突然了,咱还没有心理准备",
- "好痒呢…诶嘿嘿w~",
- "mua,嘻嘻!",
- "公共场合不要这样子了啦",
- "唔?!真、真是的!下次不可以这样了哦!(害羞)",
- "才...才没有感觉呢!可没有下次了,知道了吗!哼~"
- ],
- "软": [
- "软乎乎的呢(,,・ω・,,)",
- "好痒呢…诶嘿嘿w~",
- "不要..不要乱摸啦(脸红",
- "呼呼~",
- "咱知道~是咱的欧派啦~(自豪的挺挺胸~)",
- "(脸红)请,请不要说这么让人害羞的话呀……"
- ],
- "壁咚": [
- "呀!不要啊!等一...下~",
- "呜...不要啦!不要戏弄咱~",
- "不要这样子啦(*/ω\*)",
- "太....太近啦。",
- "讨....讨厌了(脸红)",
- "你要壁咚咱吗?好害羞(灬ꈍ εꈍ灬)",
- "(脸红)你想...想做什么///",
- "为什么要把咱按在墙上呢?",
- "呜哇(/ω\)…快…快放开咱!!",
- "放开咱,不然咱揍你了!放开咱!放…开咱~",
- "??????咱只是默默地抬起了膝盖",
- "请…请温柔点",
- "啊.....你...你要干什么?!走开.....走开啦大hentai!一巴掌拍飞!(╯‵□′)╯︵┻━┻",
- "干……干什么啦!人家才,才没有那种少女心呢(>﹏<)",
- "啊……你吓到咱啦……脸别……别贴那么近……",
- "你...你要对咱做什么?咱告诉你,你....不要乱来啊....你!唔......你..居然亲上了...",
- "如果你还想要过完整的人生的话就快把手收回去(冷眼",
- "h什么的不要"
- ],
- "掰开": [
- "噫…你这个死肥宅又想让咱干什么污秽的事情,真是恶心,离咱远点好吗(嫌弃)",
- "ヽ(#`Д´)ノ在干什么呢"
- ],
- "女友": [
- "嗯嗯ε٩(๑> ₃ <)۶з",
- "女友什么的,咱才不承认呢!"
- ],
- "是": [
- "是什么是,你个笨蛋",
- "总感觉你在敷衍呢...",
- "是的呢"
- ],
- "喵": [
- "诶~~小猫咪不要害怕呦,在姐姐怀里乖乖的,姐姐带你回去哦。",
- "不要这么卖萌啦~咱也不知道怎么办丫",
- "摸头⊙ω⊙",
- "汪汪汪!",
- "嗷~喵~",
- "喵~?喵呜~w",
- "喵呜喵呜喵",
- "喵呜喵~喵呜喵~喵呜喵呜喵呜喵~"
- ],
- "嗷呜": [
- "嗷呜嗷呜嗷呜...恶龙咆哮┗|`O′|┛"
- ],
- "叫": [
- "喵呜~",
- "嗷呜嗷呜嗷呜...恶龙咆哮┗|`O′|┛",
- "爪巴爪巴爪巴",
- "爬爬爬",
- "在叫谁呢(怒)",
- "风太大咱听不清",
- "才不要",
- "不行",
- "好的哦~"
- ],
- "拜": [
- "拜拜~(ノ ̄▽ ̄)",
- "拜拜,路上小心~要早点回来陪咱玩哦~",
- "~\\(≧▽≦)/~拜拜,下次见喽!",
- "回来要记得找咱玩噢~",
- "既然你都这么说了……"
- ],
- "佬": [
- "不是巨佬,是萌新",
- "只有先成为大佬,才能和大佬同归于尽",
- "在哪里?(疑惑)",
- "诶?是比巨佬还高一个等级的吗?(瑟瑟发抖)"
- ],
- "awsl": [
- "你别死啊!(抱住使劲晃)",
- "你别死啊!咱又要孤单一个人了QAQ",
- "啊!怎么又死了呀"
- ],
- "臭": [
- "哪里有臭味?(疑惑)",
- "快捏住鼻子",
- "在说谁呢(#`Д´)ノ",
- "..这就去洗澡澡.."
- ],
- "香": [
- "咱闻不到呢⊙ω⊙",
- "诶,是在说咱吗",
- "欸,好害羞(///ˊ??ˋ///)",
- "请...请不要这样啦!好害羞的〃∀〃",
- "讨厌~你不要闻了",
- "hentai!不要闻啊,唔(推开)",
- "请不要……凑这么近闻"
- ],
- "腿": [
- "嗯?!不要啊...请停下来!",
- "不给摸,再这样咱要生气了ヽ( ̄д ̄;)ノ",
- "你好恶心啊,讨厌!",
- "你难道是足控?",
- "就让你摸一会哟~(。??ω??。)…",
- "呜哇!好害羞...不过既然是你的话,是没关系的哦",
- "不可以玩咱的大腿啦",
- "不...不要再说了(脸红)",
- "不..不可以乱摸啊",
- "不……不可以往上摸啦",
- "是……这样吗?(慢慢张开)",
- "想知道咱胖次的颜色吗?才不给你告诉你呢!",
- "这样就可以了么?(乖巧坐腿上)",
- "伸出来了,像这样么?",
- "咱的腿应该挺白的",
- "你就那么喜欢大腿吗?唔...有点害羞呢......",
- "讨厌~不要做这种羞羞的事情啦(#/。\#)",
- "略略略,张开了也不给你看",
- "(张开腿)然后呢",
- "张开了也不给看略略略",
- "你想干什么呀?那里…那里是不可以摸的(>д<)",
- "不要!hentai!咱穿的是裙子(脸红)",
- "你想要吗?(脸红着一点点褪下白丝)不...不可以干坏坏的事情哦!(ó﹏ò。)"
- ],
- "张开": [
- "是……这样吗?(慢慢张开)",
- "啊~",
- "这样吗?(张开手)你要干什么呀",
- "略略略,张开了也不给你看",
- "是……这样吗?(慢慢张开)你想看咱的小...吧,嘻嘻,咱脱掉了哦。小~...也要掰开吗?你好H呀,自己来~"
- ],
- "脚": [
- "咿呀……不要……",
- "不要ヽ(≧Д≦)ノ好痒(ಡωಡ)",
- "好痒(把脚伸出去)",
- "咱脱掉袜子了",
- "(脱下鞋子,伸出脚)闻吧,请仔细品味(脸红)",
- "那么…要不要咱用脚温柔地踩踩你的头呢(坏笑)",
- "哈哈哈!好痒啊~快放开啦!",
- "好痒(把脚伸出去)",
- "只能看不能挠喔,咱很怕痒qwq",
- "唔…咱动不了了,你想对咱做什么…",
- "好舒服哦,能再捏会嘛O(≧▽≦)O",
- "咿咿~......不要闻咱的脚呀(脸红)好害羞的...",
- "不要ヽ(≧Д≦)ノ好痒(ಡωಡ),人家的白丝都要漏了",
- "Ya~?为什么你总是喜欢一些奇怪的动作呢(伸)",
- "你不可以做这样的事情……",
- "呜咿咿!你的舌头...好柔软,滑滑的....咱…咱的脚被舔得很舒服哦~谢谢你(。>﹏<)",
- "舔~吧~把咱的脚舔干净(抬起另一只踩在你的头上)啊~hen..hentai...嗯~居... 居然这么努力的舔...呜咿咿!你的舌头... 滑滑的...好舒服呢",
- "咿呀……不要……",
- "咿呀~快…快停下来…咱…不行了!"
- ],
- "脸": [
- "唔!不可以随便摸咱的脸啦!",
- "非洲血统是没法改变的呢(笑)",
- "啊姆!(含手指)",
- "好舒服呢(脸红)",
- "请不要放开手啦//A//"
- ],
- "头发": [
- "没问题,请尽情的摸吧",
- "发型要乱…乱了啦(脸红)",
- "就让你摸一会哟~(。??ω??。)…"
- ],
- "手": [
- "爪爪",
- "//A//",
- "咱的手温暖嘛"
- ],
- "pr": [
- "咿呀……不要……",
- "...变态!!",
- "不要啊(脸红)",
- "呀,不要太过分了啊~",
- "当然可以(///)",
- "呀,不要太过分了啊~"
- ],
- "舔": [
- "呀,不要太过分了啊~",
- "要...要融化了啦>╱╱╱<",
- "不可以哦",
- "呀,不要太过分了啊~",
- "舌头...就交给咱来处理吧(拿出剪刀)",
- "不舔不舔!恶心...",
- "H什么的,禁止!",
- "变态!哼!",
- "就...就这一下!",
- "走开啦,baka!",
- "怎么会这么舒服喵~这样子下去可不行呀(*////▽////*)",
- "噫| •ω •́ ) 你这个死宅又在想什么恶心的东西了",
- "hen…hentai,你在干什么啦,好恶心,快停下来啊!!!",
- "呀,能不能不要这样!虽然不是很讨厌的感觉...别误会了,你个baka!",
- "好 好奇怪的感觉呢 羞≥﹏≤",
- "咿呀……不要……",
- "不行!咱会变得很奇怪的啊...",
- "不要ヽ(≧Д≦)ノ"
- ],
- "小穴": [
- "你这么问很失礼呢!咱是粉粉嫩嫩的!",
- "不行那里不可以(´///ω/// `)",
- "不可以总摸的哦,不然的话,咱会想那个的wwww",
- "ヽ(#`Д´)ノ在干什么呢",
- "来吧,咱的...很紧,很舒服的....www~",
- "可以,请你看,好害羞……",
- "不要这样...好,好痛",
- "啊~不可以",
- "不可以",
- "咱脱掉了,请……请不要一直盯着咱的白...看……",
- "咱觉得,应该还算粉吧",
- "咱脱掉了,你是想看咱的...吗?咱是光光的,不知道你喜不喜欢",
- "咱……有感觉了QAQ再深一点点……就是这儿,轻轻的抚摸,嗯啊……",
- "轻轻抚摸咱的小~~,手指很快就会滑进去,小心一点,不要弄破咱的...哦QAQ",
- "诶嘿嘿,你喜欢就太好了,咱一直担心你不喜欢呢",
- "禁止说这么H的事情!",
- "咱一直有保养呢,所以一直都是樱花色的,你喜欢吗QAQ",
- "诶……你居然这么觉得吗?好害羞哦",
- "好痒啊,鼻子……你的鼻子碰到了……呀~嗯啊~有点舒服……",
- "看样子你不但是个hentai,而且还是个没有女朋友的hentai呢。",
- "嗯,咱的小~~是光溜溜、一点毛都没有的。偷偷告诉你,凑近看咱的...的话,白白嫩嫩上有一条樱花色的小缝缝哦www你要是用手指轻轻抚摸咱的...,小~~会分成两瓣,你的手指也会陷进去呢,咱的..~可是又湿润又柔软的呢>////<。",
- "讨厌,西内变态",
- "那咱让你插...进来哦",
- "(●▼●;)"
- ],
- "腰": [
- "咱给你按摩一下吧~",
- "快松手,咱好害羞呀..",
- "咱又不是猫,你不要搂着咱啦",
- "让咱来帮你捏捏吧!",
- "你快停下,咱觉得好痒啊www",
- "诶,是这样么ヽ(・_・;)ノ,吖,不要偷看咱裙底!"
- ],
- "诶嘿嘿": [
- "又在想什么H的事呢(脸红)",
- "诶嘿嘿(〃'▽'〃)",
- "你傻笑什么呢,摸摸",
- "蹭蹭",
- "你为什么突然笑得那么猥琐呢?害怕",
- "哇!总觉得你笑的很...不对劲...",
- "你又想到什么h的事情了!!!快打住"
- ],
- "可爱": [
- "诶嘿嘿(〃'▽'〃)",
- "才……才不是为了你呢!你不要多想哦!",
- "才,才没有高兴呢!哼~",
- "咱是世界上最可爱的",
- "唔...谢谢你夸奖~0///0",
- "那当然啦!",
- "哎嘿,不要这么夸奖人家啦~",
- "是个好孩子呐φ(≧ω≦*)",
- "谢……谢谢你",
- "胡、胡说什么呢(脸红)",
- "谢谢夸奖(脸红)",
- "是的咱一直都是可爱的",
- "是...是吗,你可不能骗咱哦",
- "很...难为情(///////)",
- "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
- ],
- "卡哇伊": [
- "诶嘿嘿(〃'▽'〃)",
- "才……才不是为了你呢!你不要多想哦!",
- "才,才没有高兴呢!哼~",
- "咱是世界上最可爱的",
- "唔...谢谢你夸奖~0///0",
- "那当然啦!",
- "哎嘿,不要这么夸奖人家啦~",
- "是个好孩子呐φ(≧ω≦*)",
- "谢……谢谢你",
- "胡、胡说什么呢(脸红)",
- "谢谢夸奖(脸红)",
- "是的咱一直都是可爱的",
- "是...是吗,你可不能骗咱哦",
- "很...难为情(///////)",
- "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
- ],
- "kawaii": [
- "诶嘿嘿(〃'▽'〃)",
- "才……才不是为了你呢!你不要多想哦!",
- "才,才没有高兴呢!哼~",
- "咱是世界上最可爱的",
- "唔...谢谢你夸奖~0///0",
- "那当然啦!",
- "哎嘿,不要这么夸奖人家啦~",
- "是个好孩子呐φ(≧ω≦*)",
- "谢……谢谢你",
- "胡、胡说什么呢(脸红)",
- "谢谢夸奖(脸红)",
- "是的咱一直都是可爱的",
- "是...是吗,你可不能骗咱哦",
- "很...难为情(///////)",
- "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
- ],
- "扭蛋": [
- "铛铛铛——你抽到了咱呢",
- "嘿~恭喜抽中空气一份呢"
- ],
- "鼻": [
- "快停下!o(*≧д≦)o!!",
- "唔…不要这样啦(//ω\\)(脸红)",
- "咱吸了吸鼻子O(≧口≦)O",
- "好……好害羞啊",
- "讨厌啦!你真是的…就会欺负咱(嘟嘴)",
- "你快放手,咱没法呼吸了",
- "(捂住鼻尖)!坏人!",
- "啊——唔...没什么...阿嚏!ヽ(*。>Д<)o゜",
- "不...不要靠这么近啦...很害羞的...⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄"
- ],
- "眼": [
- "就如同咱的眼睛一样,能看透人的思想哦wwww忽闪忽闪的,诶嘿嘿~",
- "因为里面有你呀~(///▽///)",
- "呀!你突然之间干什么呢,吓咱一跳,是有什么惊喜要给咱吗?很期待呢~(一脸期待)"
- ],
- "色气": [
- "咱才不色气呢,一定是你看错了!",
- "你,不,不要说了!"
- ],
- "推": [
- "逆推",
- "唔~好害羞呢",
- "你想对咱做什么呢...(捂脸)",
- "呀啊!请.... 请温柔一点////",
- "呜,你想对咱做什么呢(捂脸)",
- "啊(>_<)你想做什么",
- "嗯,…好害羞啊…",
- "不要啊/////",
- "逆推",
- "(按住你不让推)",
- "不可以这样子的噢!咱不同意",
- "呜,咱被推倒了",
- "啊~不要啊,你要矜持一点啊",
- "变态,走开啦"
- ],
- "床": [
- "咱来了(´,,•ω•,,)♡",
- "快来吧",
- "男女不同床,可没有下次了。(鼓脸",
- "嗯?咱吗…没办法呢。只有这一次哦……",
- "哎?!!!给你暖床……也不是不行啦。(脸红)",
- "(爬上床)你要睡了吗(灬ºωº灬)",
- "大概会有很多运动器材吧?",
- "好的哦~",
- "才不!",
- "嗯嗯,咱来啦(小跑)",
- "嗨嗨,现在就来~",
- "H的事情,不可以!",
- "诶!H什么的禁止的说....."
- ],
- "举": [
- "放咱下来o(≧口≦)o",
- "快放咱下来∑(゚д゚*)",
- "(受宠若惊)",
- "呜哇要掉下来了!Ծ‸Ծ",
- "不要抛起来o(≧口≦)o",
- "(举起双爪)喵喵喵~~~",
- "www咱长高了!(大雾)",
- "快放下",
- "这样很痒啦,快放咱下来(≥﹏≤)",
- "啊Σ(°△°|||)︴太高了太高了!o(≧口≦)o快放咱下来!呜~"
- ],
- "手冲": [
- "啊~H!hentai!",
- "手冲什么的是不可以的哦"
- ],
- "饿": [
- "请问主人是想先吃饭,还是先吃咱喵?~",
- "咱做了爱心便当哦,不介意的话,请让咱来喂你吃吧!",
- "咱下面给你吃",
- "给你一条咸鱼= ̄ω ̄=",
- "你要咱下面给你吃吗?(捂脸)",
- "你饿了吗?咱去给你做饭吃☆ww",
- "不要吃咱>_<",
- "请问你要来点兔子吗?",
- "哎?!你是饿了么。咱会做一些甜点。如果你不会嫌弃的话...就来尝尝看吧。"
- ],
- "变": [
- "猫猫不会变呐(弱气,害羞",
- "呜...呜姆...喵喵来报恩了喵...(害羞",
- "那种事情,才没有",
- "(,,゚Д゚)",
- "喵~(你在想什么呢,咱才不会变成猫)",
- "才没有了啦~",
- "喵呜?呜…被变成猫娘惹"
- ],
- "敲": [
- "喵呜~",
- "唔~",
- "脑瓜疼~呜姆> <",
- "欸喵,好痛的说...",
- "好痛...你不要这样啦QAQ",
- "不要敲咱啦,会变笨的QWQ(捂头顶)",
- "不要再敲人家啦~人家会变笨的",
- "讨厌啦~再敲人家会变笨的",
- "好痛(捂头)你干什么啦!ヽ(。>д<)p",
- "唔!你为什么要敲咱啦qwq",
- "(抱头蹲在墙角)咱什么都没有,请你放过咱吧!(瑟瑟发抖)",
- "QAQ!不许敲啦!",
- "呼,敲回去~(敲)"
- ],
- "爬": [
- "惹~呜~怎么爬呢~",
- "呜...(弱弱爬走",
- "给你🐎一拳",
- "给你一拳",
- "爪巴"
- ],
- "怕": [
- "不怕~(蹭蹭你姆~",
- "不怕不怕啦~",
- "只要有你在,咱就不怕啦。",
- "哇啊啊~",
- "那就要坚强的欢笑哦",
- "不怕不怕,来咱的怀里吧?",
- "是技术性调整",
- "嗯(紧紧握住手)",
- "咱在呢,不会走的。",
- "有咱在不怕不怕呢",
- "不怕不怕"
- ],
- "冲": [
- "呜,冲不动惹~",
- "哭唧唧~冲不出来了惹~",
- "咱也一起……吧?",
- "你要冷静一点",
- "啊~H!hentai!",
- "噫…在你去洗手之前,不要用手碰咱了→_→",
- "冲是不可以的哦"
- ],
- "射": [
- "呜咿~!?(惊,害羞",
- "还不可以射哦~",
- "不许射!",
- "憋回去!",
- "不可以!你是变态吗?",
- "咱来帮你修剪掉多余部分吧。(拿出剪刀)"
- ],
- "不穿": [
- "呜姆~!(惊吓,害羞)变...变态喵~~~!",
- "想让你看QAQ",
- "这是不文明的",
- "hen...hentai,咱的身体才不会给你看呢"
- ],
- "迫害": [
- "不...不要...不要...呜呜呜...(害怕,抽泣"
- ],
- "猫粮": [
- "呜咿姆~!?(惊,接住吃",
- "呜姆~!(惊,害羞)呜...谢...谢谢主人..喵...(脸红,嚼嚼嚼,开心",
- "呜?谢谢喵~~(嚼嚼嚼,嘎嘣脆)"
- ],
- "揪尾巴": [
- "呜哇咿~~~!(惊吓,疼痛地捂住尾巴",
- "呜咿咿咿~~~!!哇啊咿~~~!(惊慌,惨叫,挣扎",
- "呜咿...(瘫倒,无神,被",
- "呜姆咿~~~!(惊吓,惨叫,捂尾巴,发抖",
- "呜哇咿~~~!!!(惊吓,颤抖,娇叫,捂住尾巴,双腿发抖",
- "喵呜…那…那里不可以揪的!",
- "呜呜,被揪住会恨敏感的QAQ"
- ],
- "薄荷": [
- "咪呜~!喵~...喵~姆~...(高兴地嗅闻",
- "呜...呜咿~~!咿...姆...(呜咽,渐渐瘫软,意识模糊",
- "(小嘴被猫薄荷塞满了,呜咽",
- "喵~...喵~...咪...咪呜姆~...嘶哈嘶哈...喵哈...喵哈...嘶哈...喵...(眼睛逐渐迷离,瘫软在地上,嘴角流口水,吸猫薄荷吸到意识模糊",
- "呜姆咪~!?(惊)喵呜~!(兴奋地扑到猫薄荷上面",
- "呜姆~!(惊,害羞)呜...谢...谢谢你..喵...(脸红,轻轻叼住,嚼嚼嚼,开心"
- ],
- "早": [
- "早喵~",
- "早上好的说~~",
- "欸..早..早上好(揉眼睛",
- "早上要说我爱你!",
- "早",
- "早啊,昨晚睡的怎么样?有梦到咱吗~",
- "昨晚可真激烈呢哼哼哼~~",
- "早上好哇!今天也要元气满满哟!",
- "早安喵~",
- "时间过得好快啊~",
- "早安啊,你昨晚有没有梦到咱呢 (//▽//)",
- "早安~么么哒~",
- "早安,请享受晨光吧",
- "早安~今天也要一起加油呢~!",
- "mua~⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "咱需要你提醒嘛!(///脸红//////)",
- "早早早!就知道早,下次说我爱你!",
- "早安 喵",
- "早安,这么早就起床了呀欧尼酱0.0",
- "快点起床啊!baka",
- "早....早上好才没有什么特别的意思呢....哼~",
- "今天有空吗?能陪咱一阵子吗?才不是想约会呢,别误会了!",
- "早安呀,欧尼酱要一个咱的早安之吻吗?想得美,才不会亲你啦!",
- "那...那就勉为其难地说声早上好吧",
- "咱等你很久了哼ヽ(≧Д≦)ノ",
- "ohayo~"
- ],
- "晚安": [
- "晚安好梦哟~",
- "欸,晚安的说",
- "那咱给你亲一下,可不要睡着了哦~",
- "晚安哦~",
- "晚安(*/∇\*)",
- "晚安呢,你一定要梦到咱呢,一定哟,拉勾勾!ヽ(*・ω・)ノ",
- "祝你有个好梦^_^",
- "晚安啦,欧尼酱,mua~",
- "你,你这家伙真是的…咱就勉为其难的……mua…快去睡啦!咱才没有脸红什么的!",
- "哼,晚安,给咱睡个好觉。",
- "笨..笨蛋,晚安啦...可不可以一起..才没有想和你一起睡呢",
- "晚安......才..不是关心你呢",
- "晚...晚安,只是正常互动不要想太多!",
- "好无聊,这么早就睡了啊...那晚安吧!",
- "晚安吻什么的才...才没有呢!不过看你累了就体谅一下你吧,但是就一个哦(/////)",
- "晚安呀,你也要好好休息,明天再见",
- "安啦~祝你做个好梦~才...才不是关心你呢!别想太多了!",
- "睡觉吧你,大傻瓜",
- "一起睡吧(灬°ω°灬)",
- "哼!这次就放过你了,快去睡觉吧。",
- "睡吧晚安",
- "晚安你个头啊,咱才不会说晚安呢!...咱...(小声)明明还有想和你做的事情呢....",
- "嗯嗯~Good night~",
- "嗯,早点休息别再熬夜啦~(摸摸头)",
- "哦呀斯密",
- "晚安~咱也稍微有些困了(钻进被窝)",
- "需要咱暖床吗~",
- "好梦~☆"
- ],
- "揉": [
- "是是,想怎么揉就怎么揉啊!?来用力抓啊!?咱就是特别允许你这么做了!请!?",
- "快停下,咱的头发又乱啦(??????︿??????)",
- "你快放手啦,咱还在工作呢",
- "戳戳你肚子",
- "讨厌…只能一下…",
- "呜~啊~",
- "那……请你,温柔点哦~(////////)",
- "你想揉就揉吧..就这一次哦?",
- "变态!!不许乱摸"
- ],
- "榨": [
- "是专门负责榨果汁的小姐姐嘛?(´・ω・`)",
- "那咱就把你放进榨汁机里了哦?",
- "咱又不是榨汁姬(/‵Д′)/~ ╧╧",
- "嗯——!想,想榨就榨啊······!反正就算榨了也不会有奶的······!"
- ],
- "掐": [
- "你讨厌!又掐咱的脸",
- "晃休啦,咱要型气了啦!!o(>﹏<)o",
- "(一只手拎起你)这么鶸还想和咱抗衡,还差得远呢!"
- ],
- "胸": [
- "不要啦ヽ(≧Д≦)ノ",
- "(-`ェ´-╬)",
- "(•̀へ •́ ╮ ) 怎么能对咱做这种事情",
- "你好恶心啊,讨厌!",
- "你的眼睛在看哪里!",
- "就让你摸一会哟~(。??ω??。)…",
- "请不要这样先生,你想剁手吗?",
- "咿呀……不要……",
- "嗯哼~才…才不会…舒服呢",
- "只允许一下哦…(脸红)",
- "咱的胸才不小呢(挺一挺胸)",
- "hentai!",
- "一只手能抓住么~",
- "呀...欧,欧尼酱...请轻点。",
- "脸红????",
- "咿呀~快…快停下来…咱…不行了!",
- "就算一直摸一直摸,也不会变大的哦(小声)",
- "诶?!不...不可以哦!很...很害羞的!",
- "啊……温,温柔点啊……(/ω\)",
- "你为什么对两块脂肪恋恋不舍",
- "嗯……不可以……啦……不要乱戳",
- "你在想什么奇怪的东西,讨厌(脸红)",
- "不...不要..",
- "喜欢欧派是很正常的想法呢",
- "一直玩弄欧派,咱的...都挺起来了",
- "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
- "唔~再激烈点"
- ],
- "奶子": [
- "只允许一下哦…(脸红)",
- "咱的胸才不小呢(挺一挺胸)",
- "下流!",
- "对咱说这种话,你真是太过分了",
- "咿呀~好奇怪的感觉(>_<)",
- "(推开)你就像小宝宝一样...才不要呢!",
- "(打你)快放手,不可以随便摸人家的胸部啦!",
- "你是满脑子都是H的淫兽吗?",
- "一只手能抓住么~",
- "你在想什么奇怪的东西,讨厌(脸红)",
- "不...不要..",
- "喜欢欧派是很正常的想法呢",
- "一直玩弄欧派,咱的...都挺起来了",
- "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
- "唔~再激烈点",
- "解开扣子,请享用",
- "请把脑袋伸过来,咱给你看个宝贝",
- "八嘎!hentai!无路赛!",
- "一只手能抓住么~",
- "呀...欧,欧尼酱...请轻点。",
- "脸红????",
- "咿呀~快…快停下来…咱…不行了!",
- "就算一直摸一直摸,也不会变大的哦(小声)",
- "诶?!不...不可以哦!很...很害羞的!",
- "啊……温,温柔点啊……(/ω\)",
- "你为什么对两块脂肪恋恋不舍",
- "嗯……不可以……啦……不要乱戳"
- ],
- "欧派": [
- "咱的胸才不小呢(挺一挺胸)",
- "只允许一下哦…(脸红)",
- "(推开)你就像小宝宝一样...才不要呢!",
- "下流!",
- "对咱说这种话,你真是太过分了",
- "咿呀~好奇怪的感觉(>_<)",
- "(打你)快放手,不可以随便摸人家的胸部啦!",
- "你是满脑子都是H的淫兽吗?",
- "一只手能抓住么~",
- "你在想什么奇怪的东西,讨厌(脸红)",
- "不...不要..",
- "喜欢欧派是很正常的想法呢",
- "一直玩弄欧派,咱的...都挺起来了",
- "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
- "唔~再激烈点",
- "解开扣子,请享用",
- "请把脑袋伸过来,咱给你看个宝贝",
- "八嘎!hentai!无路赛!",
- "一只手能抓住么~",
- "呀...欧,欧尼酱...请轻点。",
- "脸红????",
- "咿呀~快…快停下来…咱…不行了!",
- "就算一直摸一直摸,也不会变大的哦(小声)",
- "诶?!不...不可以哦!很...很害羞的!",
- "啊……温,温柔点啊……(/ω\)",
- "你为什么对两块脂肪恋恋不舍",
- "嗯……不可以……啦……不要乱戳"
- ],
- "嫩": [
- "很可爱吧(๑•̀ω•́)ノ",
- "唔,你指的是什么呀",
- "明天你下海干活",
- "咱一直有保养呢,所以一直都是樱花色的,你喜欢吗QAQ",
- "咱下面超厉害"
- ],
- "蹭": [
- "唔...你,这也是禁止事项哦→_→",
- "嗯..好舒服呢",
- "不要啊好痒的",
- "不要过来啦讨厌!!!∑(°Д°ノ)ノ",
- "(按住你的头)好痒呀 不要啦",
- "嗯..好舒服呢",
- "呀~好痒啊~哈哈~,停下来啦,哈哈哈",
- "(害羞)"
- ],
- "牵手": [
- "只许牵一下哦",
- "嗯!好的你~(伸手)",
- "你的手有些凉呢,让咱来暖一暖吧。",
- "当然可以啦⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄",
- "突……突然牵手什么的(害羞)",
- "一起走",
- "……咱……咱在这里呀",
- "好哦,(十指相扣)"
- ],
- "握手": [
- "你的手真暖和呢",
- "举爪",
- "真是温暖呢~"
- ],
- "拍照": [
- "那就拜托你啦~请把咱拍得更可爱一些吧w",
- "咱已经准备好了哟",
- "那个……请问这样的姿势可以吗?"
- ],
- "w": [
- "有什么好笑的吗?",
- "草",
- "www",
- "在笑什么呢?(歪头)",
- ">w<"
- ],
- "睡不着": [
- "睡不着的话..你...你可以抱着咱一起睡哦(小声)",
- "当然是数羊了...不不不,想着咱就能睡着了",
- "咱很乐意与你聊天哦(>_<)",
- "要不要咱来唱首摇篮曲呢?(′?ω?`)",
- "那咱来唱摇篮曲哄你睡觉吧!"
- ],
- "欧尼酱": [
- "欧~尼~酱~☆",
- "欧尼酱?",
- "嗯嗯φ(>ω<*) 欧尼酱轻点抱",
- "欧尼酱~欧尼酱~欧尼酱~"
- ],
- "哥": [
- "欧尼酱~",
- "哦尼酱~",
- "世上只有哥哥好,没哥哥的咱好伤心,扑进哥哥的怀里,幸福不得了",
- "哥...哥哥...哥哥大人",
- "欧~尼~酱~☆",
- "欧尼酱?",
- "嗯嗯φ(>ω<*) 欧尼酱轻点抱",
- "欧尼酱~欧尼酱~欧尼酱~"
- ],
- "爱你": [
- "是…是嘛(脸红)呐,其实咱也……",
- "咱也最爱你了呢~o(*////▽////*)q",
- "咱也爱你哦",
- "mua~"
- ],
- "过来": [
- "来了来了~(扑倒怀里(?? ??????ω?????? ??))",
- "(蹦跶、蹦跶)~干什么呢",
- "咱来啦~(扑倒怀里~)",
- "不要喊的这么大声啦,大家都看着呢"
- ],
- "自闭": [
- "不不不,晚上还有咱陪着哦,无论什么时候,咱都会陪在哥哥身边。",
- "不要难过,咱陪着你ovo"
- ],
- "打不过": [
- "氪氪氪肝肝肝",
- "你需要钞能力呢"
- ],
- "么么哒": [
- "么么哒",
- "不要在公共场合这样啦",
- "mua~"
- ],
- "很懂": [
- "现在不懂,以后总会懂嘛QAQ",
- "喵?懂…懂什么呀?(歪头)"
- ],
- "膝枕": [
- "呐,就给你躺一下哦",
- "唔...你想要膝枕嘛?也不是不可以哟(脸红)",
- "啊啦~好吧,那就请你枕着咱好好睡一觉吧~",
- "呀呀~那么请好好的睡一觉吧",
- "嗯,那么请睡到咱这里吧(跪坐着拍拍大腿)",
- "好的,让你靠在腿上,这样感觉舒服些了么",
- "请,请慢用,要怜惜咱哦wwww~",
- "人家已经准备好了哟~把头放在咱的腿上吧",
- "没…没办法,这次是例外〃w〃",
- "嗯~(脸红)",
- "那就给你膝枕吧……就一会哦",
- "膝枕准备好咯~"
- ],
- "累了": [
- "需要咱的膝枕嘛?",
- "没…没办法,这次是例外〃w〃",
- "累了吗?需要咱为你做膝枕吗?",
- "嗯~(脸红)"
- ],
- "安慰": [
- "那,膝枕……(脸红)",
- "不哭不哭,还有咱陪着你",
- "不要哭。咱会像妈妈一样安慰你(抱住你的头)",
- "摸摸头,乖",
- "摸摸有什么事可以和咱说哟",
- "摸摸头~不哭不哭",
- "咱在呢,抱抱~~",
- "那么……让咱来安慰你吧",
- "唔...摸摸头安慰一下ヾ(•ω•`。)",
- "有咱陪伴你就是最大的安慰啦……不要不开心嘛",
- "你想要怎样的安慰呢?这样?这样?还是说~~这样!",
- "摸摸头~",
- "不哭不哭,要像咱一样坚强",
- "你别难过啦,不顺心的事都会被时间冲刷干净的,在那之前...咱会陪在你的身边",
- "(轻抱)放心……有咱在,不要伤心呢……",
- "唔...咱来安慰你了~",
- "摸摸,有什么不开心的事情可以给咱说哦。咱会尽力帮助你的。"
- ],
- "洗澡": [
- "快点脱哟~不然水就凉了呢",
- "咱在穿衣服噢,你不许偷看哦",
- "那么咱去洗澡澡了哦",
- "么么哒,快去洗干净吧,咱去暖被窝喽(///ω///)",
- "诶?还没呢…你要跟咱一起洗吗(//∇//)好羞涩啊ww",
- "诶~虽然很喜欢和你在一起,但是洗澡这种事...",
- "不要看!不过,以后或许可以哦……和咱成为恋人之后呢",
- "说什么啊……hentai!这样会很难为情的",
- "你是男孩子还是女孩子呢?男孩子的话...........咱才不要呢。",
- "不要啊!",
- "咱有点害羞呢呜呜,你温柔点"
- ],
- "一起睡觉": [
- "欸??也..也不是不可以啦..那咱现在去洗澡,你不要偷看哦٩(๑>◡<๑)۶",
- "说什么啊……hentai!这样会很难为情的",
- "你是男孩子还是女孩子呢?男孩子的话...........咱才不要呢。",
- "不要啊!",
- "唔,没办法呢,那就一起睡吧(害羞)"
- ],
- "一起": [
- "嗯嗯w,真的可以吗?",
- "那真是太好了,快开始吧!",
- "嗯,咱会一直陪伴你的",
- "丑拒"
- ],
- "多大": [
- "不是特别大但是你摸起来会很舒服的大小喵~",
- "你摸摸看不就知道了吗?",
- "不告诉你",
- "问咱这种问题不觉得很失礼吗?",
- "咱就不告诉你,你钻到屏幕里来自己确认啊",
- "你指的是什么呀?(捂住胸部)",
- "请叫人家咱三岁(。・`ω´・)",
- "唉唉唉……这……这种问题,怎么可以……"
- ],
- "姐姐": [
- "真是的……真是拿你没办法呢 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 才不是咱主动要求的呢!",
- "虽然辛苦,但是能看见可爱的你,咱就觉得很幸福",
- "诶(´°Δ°`),是在叫咱吗?",
- "有什么事吗~",
- "好高兴,有人称呼咱为姐姐",
- "乖,摸摸头"
- ],
- "糖": [
- "不吃脱氧核糖(;≥皿≤)",
- "ヾ(✿゚▽゚)ノ好甜",
- "好呀!嗯~好甜呀!",
- "不吃不吃!咱才不吃坏叔叔的糖果!",
- "嗯,啊~",
- "嗯嗯,真甜,给你也吃一口",
- "谢谢",
- "唔,这是什么东西,黏黏的?(??Д??)ノ",
- "ヾ(✿゚▽゚)ノ好甜",
- "(伸出舌头舔了舔)好吃~最爱你啦",
- "好耶~是好次的🍥糖糖喵~"
- ],
- "嗦": [
- "(吸溜吸溜)",
- "好...好的(慢慢含上去)",
- "把你噶咯",
- "太小了,嗦不到",
- "咕噜咕噜",
- "嘶蛤嘶蛤嘶蛤~~",
- "(咬断)",
- "prprprpr",
- "好哒主人那咱开始了哦~",
- "好好吃",
- "剁掉了"
- ],
- "牛子": [
- "(吸溜吸溜)",
- "好...好的(慢慢含上去)",
- "把你噶咯",
- "太小了,嗦不到",
- "咕噜咕噜",
- "嘶蛤嘶蛤嘶蛤~~",
- "(咬断)",
- "prprprpr",
- "好哒主人那咱开始了哦~",
- "好好吃",
- "剁掉了",
- "难道你很擅长针线活吗",
- "弹一万下",
- "往死里弹"
- ],
- "🐂子": [
- "(吸溜吸溜)",
- "好...好的(慢慢含上去)",
- "把你噶咯",
- "太小了,嗦不到",
- "咕噜咕噜",
- "嘶蛤嘶蛤嘶蛤~~",
- "(咬断)",
- "prprprpr",
- "好哒主人那咱开始了哦~",
- "好好吃",
- "剁掉了",
- "难道你很擅长针线活吗",
- "弹一万下",
- "往死里弹"
- ],
- "🐮子": [
- "(吸溜吸溜)",
- "好...好的(慢慢含上去)",
- "把你噶咯",
- "太小了,嗦不到",
- "咕噜咕噜",
- "嘶蛤嘶蛤嘶蛤~~",
- "(咬断)",
- "prprprpr",
- "好哒主人那咱开始了哦~",
- "好好吃",
- "剁掉了",
- "难道你很擅长针线活吗",
- "弹一万下",
- "往死里弹"
- ],
- "嫌弃": [
- "咱辣么萌,为什么要嫌弃咱...",
- "即使你不喜欢咱,咱也会一直一直喜欢着你",
- "(;′⌒`)是咱做错了什么吗?",
- "呜呜…不要嫌弃咱……让咱做什么都可以的……但是请不要嫌弃咱可以嘛……"
- ],
- "紧": [
- "嗯,对的",
- "呜咕~咱要......喘不过气来了......"
- ],
- "baka": [
- "你也是baka呢!",
- "确实",
- "baka!",
- "不不不",
- "说别人是baka的人才是baka",
- "你个大傻瓜",
- "不说了,睡觉了",
- "咱...咱虽然是有些笨啦...但是咱会努力去学习的",
- "bakabaka~",
- "才…才不是baka啦!"
- ],
- "笨蛋": [
- "你也是笨蛋呢!",
- "确实",
- "笨蛋!",
- "不不不",
- "说别人是笨蛋的人才是笨蛋",
- "你个大傻瓜",
- "不说了,睡觉了",
- "咱...咱虽然是有些笨啦...但是咱会努力去学习的",
- "才…才不是笨蛋呢!"
- ],
- "插": [
- "来吧,咱的小~...很....紧,很舒服的",
- "gun!",
- "唔…咱怕疼",
- "唔...,这也是禁止事项哦→_→",
- "禁止说这么H的事情!",
- "要...戴套套哦",
- "好痛~",
- "使劲",
- "就这?",
- "恁搁着整针线活呢?"
- ],
- "插进来": [
- "来吧,咱的小~...很....紧,很舒服的",
- "gun!",
- "唔…咱怕疼",
- "唔...,这也是禁止事项哦→_→",
- "禁止说这么H的事情!",
- "要...戴套套哦",
- "好痛~",
- "使劲",
- "就这?",
- "恁搁着整针线活呢?"
- ],
- "屁股": [
- "不要ヽ(≧Д≦)ノ好痛",
- "(打手)不许摸咱的屁股",
- "(撅起屁股)要干什么呀?",
- "(轻轻的撩起自己的裙子),你轻一点,咱会痛的(>_<)!",
- "在摸哪里啊,hentai!",
- "要轻点哦(/≧ω\)",
- "轻点呀~",
- "(歇下裙子,拉下内...,撅起来)请",
- "嗯嗯,咱这就把屁股抬起来"
- ],
- "翘": [
- "你让咱摆出这个姿势是想干什么?",
- "好感度-1-1-1-1-1-1.....",
- "嗯嗯,咱这就去把你的腿翘起来",
- "请尽情享用吧"
- ],
- "翘起来": [
- "你让咱摆出这个姿势是想干什么?",
- "好感度-1-1-1-1-1-1.....",
- "嗯嗯,咱这就去把你的腿翘起来",
- "请尽情享用吧"
- ],
- "抬": [
- "你在干什么呢⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "(抬起下巴)你要干什么呀?",
- "上面什么也没有啊(呆~)",
- "不要!hentai!咱穿的是裙子(脸红)",
- "不可以"
- ],
- "抬起": [
- "你在干什么呢⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "(抬起下巴)你要干什么呀?",
- "上面什么也没有啊(呆~)",
- "不要!hentai!咱穿的是裙子(脸红)",
- "不可以"
- ],
- "爸": [
- "欸!儿子!",
- "才不要",
- "粑粑",
- "讨厌..你才不是咱的爸爸呢..(嘟嘴)",
- "你又不是咱的爸爸……",
- "咱才没有你这样的鬼父!",
- "爸爸酱~最喜欢了~"
- ],
- "傲娇": [
- "才.......才.......才没有呢",
- "也好了(有点点的样子(o ̄Д ̄)<)",
- "任性可是女孩子的天性呢...",
- "谁会喜欢傲娇啊(为了你假装傲娇)",
- "谁,谁,傲娇了,八嘎八嘎,你才傲娇了呢(っ//////////c)(为了你假装成傲娇)",
- "傲娇什么的……才没有呢!(/////)",
- "傲不傲娇你还不清楚吗?",
- "你才是傲娇!你全家都是傲娇!哼(`Д´)",
- "才……才没有呢,哼,再说不理你了",
- "咱...咱才不会这样子的!",
- "啰…啰嗦!",
- "哼!(叉腰鼓嘴扭头)",
- "你才是傲娇受你全家都是傲娇受╰_╯",
- "才~才不是呢,不理你了!哼(`Д´)",
- "你才是死傲娇",
- "啰,啰嗦死了,才不是呢!",
- "就是傲娇你要怎样",
- "诶...!这...这样...太狡猾了啦...你这家伙....",
- "无路赛!你才是傲娇嘞!你全家都是!",
- "咱...咱才不是傲娇呢,哼(鼓脸)",
- "不许这么说咱 ,,Ծ‸Ծ,,",
- "才…才不是傲娇呢!哼!"
- ],
- "rua": [
- "略略略~(吐舌头)",
- "rua!",
- "mua~",
- "略略略",
- "mua~⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
- "摸了",
- "嘁,丢人(嫌弃脸)",
- "反rua~",
- "rua回去"
- ],
- "咕噜咕噜": [
- "嘟嘟噜",
- "你在吹泡泡吗?",
- "咕叽咕噜~",
- "咕噜咕噜"
- ],
- "咕噜": [
- "嘟嘟噜",
- "你在吹泡泡吗?",
- "咕叽咕噜~",
- "咕噜咕噜"
- ],
- "上床": [
- "诶!H什么的禁止的说.....",
- "咱已经乖乖在自家床上躺好了,有什么问题吗?",
- "你想要干什么,难道是什么不好的事吗?",
- "(给你空出位置)",
- "不要,走开(ノ`⊿??)ノ",
- "好喔,不过要先抱一下咱啦",
- "(双手护胸)变....变态!",
- "咱帮你盖上被子~然后陪在你身边_(:зゝ∠)_",
- "才不给你腾空间呢,你睡地板,哼!",
- "要一起吗?"
- ],
- "做爱": [
- "做这种事情是不是还太早了",
- "噫!没想到你居然是这样的人!",
- "再说这种话,就把你变成女孩子(拿刀)",
- "不想好好和咱聊天就不要说话了",
- "(双手护胸)变....变态!",
- "hentai",
- "你想怎么做呢?",
- "突,突然,说什么啊!baka!",
- "你又在说什么H的东西",
- "咱....咱才不想和你....好了好了,有那么一点点那,对就一点点,哼~",
- "就一下下哦,不能再多了"
- ],
- "吃掉": [
- "(羞羞*>_<*)好吧...请你温柔点,哦~",
- "闪避,反咬",
- "请你好好品尝咱吧(/ω\)",
- "不……不可以这样!",
- "那就吃掉咱吧(乖乖的躺好)",
- "都可以哦~咱不挑食的呢~",
- "请不要吃掉咱,咱会乖乖听话的QAQ",
- "咱...咱一点都不好吃的呢!",
- "不要吃掉咱,呜呜(害怕)",
- "不行啦,咱被吃掉就没有了QAQ(害怕)",
- "唔....?诶诶诶诶?//////",
- "QwQ咱还只是个孩子(脸红)",
- "如果你真的很想的话...只能够一口哦~咱...会很痛的",
- "吃你呀~(飞扑",
- "不要啊,咱不香的(⋟﹏⋞)",
- "说着这种话的是hentai吗!",
- "快来把咱吃掉吧",
- "还……还请好好品尝咱哦",
- "喏~(伸手)",
- "呐…是主人的话…被次掉也不是不可以啦……(递自己)"
- ],
- "吃": [
- "(羞羞*>_<*)好吧...请你温柔点,哦~",
- "闪避,反咬",
- "请你好好品尝咱吧(/ω\)",
- "不……不可以这样!",
- "那就吃掉咱吧(乖乖的躺好)",
- "都可以哦~咱不挑食的呢~",
- "请不要吃掉咱,咱会乖乖听话的QAQ",
- "咱...咱一点都不好吃的呢!",
- "不要吃掉咱,呜呜(害怕)",
- "不行啦,咱被吃掉就没有了QAQ(害怕)",
- "唔....?诶诶诶诶?//////",
- "QwQ咱还只是个孩子(脸红)",
- "如果你真的很想的话...只能够一口哦~咱...会很痛的",
- "吃你呀~(飞扑",
- "不要啊,咱不香的(⋟﹏⋞)",
- "说着这种话的是hentai吗!",
- "快来把咱吃掉吧",
- "还……还请好好品尝咱哦",
- "喏~(伸手)",
- "呐…是主人的话…被次掉也不是不可以啦……(递自己)"
- ],
- "揪": [
- "你快放手,好痛呀",
- "呜呒~唔(伸出舌头)",
- "(捂住耳朵)你做什么啦!真是的...总是欺负咱",
- "你为什么要这么做呢?",
- "哎呀啊啊啊啊啊!不要...不要揪!好疼!有呆毛的咱难道不够萌吗QwQ",
- "你…松……送手啦",
- "呀!这样对女孩子是很不礼貌的(嘟嘴)"
- ],
- "种草莓": [
- "你…你不要…啊…种在这里…会容易被别人看见的(*//ω//*)",
- "啊...太明显了...不要在这里种草莓啦",
- "来吧~我对其他人说是蚊子叮的~"
- ],
- "种草": [
- "你…你不要…啊…种在这里…会容易被别人看见的(*//ω//*)"
- ],
- "掀": [
- "(掀裙)今天……是…白,白色的呢……请温柔对她……",
- "那样,胖次会被你看光的",
- "(按住)不可以掀起来!",
- "不要~",
- "呜呜~(揉眼睛)",
- "呜..请温柔一点(害羞)",
- "不可以",
- "今天……没有穿",
- "不要啊!(//////)讨厌...",
- "变态,快放手(打)",
- "不给掀,你是变态",
- "最后的底牌了!",
- "这个hentai"
- ],
- "妹": [
- "你有什么事?咱会尽量满足的",
- "开心(*´∀`)~♥",
- "欧尼酱",
- "哥哥想要抱抱吗",
- "喵呜,欧尼酱的超绝无敌可爱妹妹在这里哦~"
- ],
- "病娇": [
- "为什么会这样呢(拿起菜刀)",
- "觉得这个世界太肮脏?没事,把眼睛挖掉就好。 觉得这些闲言碎语太吵?没事,把耳朵堵起来就好。 觉得鲜血的味道太刺鼻?没事,把鼻子割掉就好。 觉得自己的话语太伤人?没事,把嘴巴缝起来就好。",
- "唔…不好,咱是病娇的事情终究还是被发现了嘛……没办法呢,那就只好把你处理掉了呢~"
- ],
- "嘻": [
- "你是想对咱做什么吗...(后退)",
- "哼哼~",
- "嘻嘻w"
- ],
- "按摩": [
- "(小手捏捏)咱的按摩舒服吗?",
- "咱不会按摩的!",
- "嘿咻嘿咻~这样觉得舒服吗?",
- "呀!...呜...,不要...不要这样啦...呜...",
- "只能按摩后背喔...",
- "咱对这些不是很懂呢(????ω??????)"
- ],
- "按住": [
- "Σ(°Д°;您要干什么~放开咱啦",
- "突然使出过肩摔!",
- "放手啦,再这样咱就要反击了喔",
- "你的眼睛在看哪里!",
- "呜呒~唔(伸出舌头)",
- "H的事情,不可以!",
- "想吃吗?(๑•ૅω•´๑)",
- "要和咱比试比试吗",
- "呜哇(/ω\)…快…快放开咱!!",
- "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
- "尼……奏凯……快航休!",
- "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
- ],
- "按在": [
- "不要这样啦(一脸娇羞的推开)",
- "(一个过肩摔,加踢裆然后帅气地回头)你太弱了呢~",
- "放手啦,再这样咱就要反击了喔",
- "Σ(°Д°; 你要干什么~放开咱啦",
- "要和咱比试比试吗",
- "呜哇(/ω\)…快…快放开咱!!",
- "敢按住咱真是好大的胆子!",
- "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
- "尼……奏凯……快航休!",
- "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
- ],
- "按倒": [
- "把咱按倒是想干嘛呢(??`⊿??)??",
- "咱也...咱也是...都等你好长时间了",
- "你的身体没问题吧?",
- "呜呒~唔(伸出舌头)",
- "H的事情,不可以!",
- "放手啦,再这样咱就要反击了喔",
- "想吃吗?(๑•ૅω•´๑)",
- "不....不要吧..咱会害羞的(//////)",
- "要和咱比试比试吗",
- "呜哇(/ω\)…快…快放开咱!!",
- "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
- "尼……奏凯……快航休!",
- "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
- ],
- "按": [
- "咱也...咱也是...都等你好长时间了",
- "不让!",
- "不要,好难为情",
- "你的眼睛在看哪里!",
- "拒绝!",
- "唔...唔..嗯",
- "咱就勉为其难地给你弄弄好啦",
- "欸…变态!",
- "会感到舒服什么的,那...那样的事情,是完全不存在的!",
- "poi~",
- "你在盯着什么地方看!变态萝莉控!"
- ],
- "炼铜": [
- "炼铜有什么好玩的,和咱一起玩吧",
- "炼铜不如恋咱",
- "你也是个炼铜术士嘛?",
- "信不信咱把你按在水泥上摩擦?",
- "炼,都可以炼!",
- "大hentai!一巴掌拍飞!(╯‵□′)╯︵┻━┻",
- "锻炼什么的咱才不需要呢 (心虚地摸了摸自己的小肚子)",
- "把你的头按在地上摩擦",
- "你在盯着什么地方看!变态萝莉控!"
- ],
- "白丝": [
- "喜欢,咱觉得白丝看起来很可爱呢",
- "(脱)白丝只能给亲爱的你一个人呢…(递)",
- "哼,hentai,这么想要咱的脚吗(ノ`⊿´)ノ",
- "难道你这个hentai想让咱穿白丝踩踏你吗",
- "不给看",
- "很滑很~柔顺~的白丝袜哟~!!!∑(°Д°ノ)ノ你不会想做奇怪的事情吧!?",
- "你……是要黑丝呢?还是白丝呢?或者光着(害羞)",
- "来……来看吧",
- "呐…雪糕什么的sukidesu"
- ],
- "黑丝": [
- "哼,hentai,这么想要咱的脚吗(ノ`⊿´)ノ",
- "不给看",
- "你……是要黑丝呢?还是白丝呢?或者光着(害羞)",
- "很滑很~柔顺~的黑丝袜哟~!!!∑(°Д°ノ)ノ您不会想做奇怪的事情吧!?",
- "来……来看吧",
- "噫...你这个hentai难道想让咱穿黑丝么",
- "(默默抬起穿着黑丝的脚)",
- "嘻嘻,是黑巧克力呢~"
- ],
- "喷": [
- "咱才不喷呢!不过…既然是你让咱喷的话就勉为其难给你喷一次吧(噗)",
- "不……不会喷水啦!喷……喷火也不会哦!",
- "你怎么知道(捂住裙子)",
- "你难道在期待什么?",
- "欸…变态!"
- ],
- "约会": [
- "你...终于主动邀请咱约会了吗...咱...咱好开心",
- "约会什么的……咱会好开心的!!",
- "今天要去哪里呢",
- "让咱考虑一下",
- "好啊!好啊!要去哪里约会呢?",
- "不约!蜀黍咱们不约!",
- "女友什么的,咱才不承认呢!",
- "才不是想和你约会呢,只是刚好有时间而已!",
- "才不要和你约会呢!",
- "咱、咱才不会跟你去约会呢!不baka!别一脸憋屈!好了,陪你一会儿就是了!别、别误会!只是陪同而已!"
- ],
- "出门": [
- "早点回来……才不是在担心你呢!",
- "路上小心...才不是担心你呢!",
- "没有你才不会觉得无聊什么的呢。快走快走",
- "嗯~一路顺风~",
- "路上小心",
- "好的,路上小心哦!y∩__∩y",
- "路上要小心呀,要早点回来哦~咱在家里等你!还有,请不要边走路边看手机,这样很容易撞到电线杆的",
- "唔...出门的话一定要做好防晒准备哦,外出的话记得带把伞,如果有防晒霜的话就更好了",
- "那你明天可以和咱一起玩吗?(星星眼)",
- "咱...咱才没有舍不得你呢…要尽快回来哦"
- ],
- "上学": [
- "你要加油哦(^ω^)2",
- "那你明天可以和咱一起玩吗?(星星眼)",
- "记得好好学习听老师的话哦,咱会等你回来的",
- "拜拜,咱才没有想让你放学早点回来呢╭(╯^╰)╮",
- "好好听讲!",
- "咱...咱才没有舍不得你呢…要尽快回来哦"
- ],
- "上班": [
- "这就要去上班去了吗?那好吧...给咱快点回来知道吗!",
- "乖~咱会在家等你下班的~",
- "辛苦啦,咱给你个么么哒",
- "咱会为你加油的",
- "专心上班哦,下班后再找咱聊天吧",
- "一路顺风,咱会在家等你回来的",
- "那你明天可以和咱一起玩吗?(星星眼)",
- "咱...咱才没有舍不得你呢…要尽快回来哦"
- ],
- "下课": [
- "快点回来陪咱玩吧~",
- "瞌睡(ˉ﹃ˉ)额啊…终于下课了吗,上课什么的真是无聊呢~",
- "下课啦,咱才不想你来找咱玩呢,哼"
- ],
- "回来": [
- "欢迎回来~",
- "欢迎回来,你想喝茶吗?咱去给你沏~",
- "欢迎回来,咱等你很久了~",
- "忙碌了一天,辛苦了呢(^_^)",
- "(扑~)欢迎回来~",
- "嗯呐嗯呐,欢迎回来~",
- "欢迎回来,要来杯红茶放松一下吗?还有饼干哦。",
- "咱会一直一直一直等着",
- "是要先洗澡呢?还是先吃饭呢?还是先·吃·咱呢~",
- "你回来啦,是先吃饭呢还是先洗澡呢或者是●先●吃●咱●——呢(///^.^///)",
- "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
- "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
- "嗯……勉为其难欢迎你一下吧",
- "想咱了嘛",
- "欢迎回.....什么?咱才没有开心的说QUQ",
- "哼╯^╰,你怎么这么晚才回来!",
- "回来了吗,咱...咱才没有想你",
- "咱等你很久了哼ヽ(≧Д≦)ノ",
- "咱很想你(≧▽≦)"
- ],
- "回家": [
- "回来了吗,咱...咱才没有想你",
- "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
- "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
- "嗯……勉为其难欢迎你一下吧",
- "想咱了嘛",
- "咱等你很久了哼ヽ(≧Д≦)ノ",
- "咱很想你(≧▽≦)"
- ],
- "放学": [
- "回来了吗,咱...咱才没有想你",
- "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
- "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
- "嗯……勉为其难欢迎你一下吧",
- "想咱了嘛",
- "咱等你很久了哼ヽ(≧Д≦)ノ",
- "咱很想你(≧▽≦)"
- ],
- "下班": [
- "回来了吗,咱...咱才没有想你",
- "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
- "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
- "嗯……勉为其难欢迎你一下吧",
- "想咱了嘛",
- "咱等你很久了哼ヽ(≧Д≦)ノ",
- "回来啦!终于下班了呢!累了吗?想吃的什么呀?",
- "工作辛苦了,需要咱为你按摩下吗?",
- "咱很想你(≧▽≦)"
- ],
- "杂鱼": [
- "才…才不是杂鱼呢!",
- "zakozako~",
- "哼~要不咱们同床竞技比比睡才是杂鱼",
- "咕。。才不是杂鱼呢哼"
- ],
- "zako": [
- "才…才不是杂鱼呢!",
- "zakozako~",
- "哼~要不咱们同床竞技比比睡才是杂鱼",
- "咕。。才不是杂鱼呢哼"
- ],
- "RBQ": [
- "呜…咱才不是RBQ呢QwQ",
- "怎么啦主人~",
- "主人桑有何吩咐呢~",
- "喵呜…咱不能做RBQ的qwq"
- ],
- "举高高": [
- "好耶~主人的举高高最棒啦~",
- "举高高什么的daisuki喵",
- "嘻嘻,最喜欢被抱着举高高啦~"
- ]
-}
+{
+ "mua": [
+ "你想干嘛?(一脸嫌弃地后退)",
+ "诶……不可以随便亲亲啦",
+ "(亲了一下你)",
+ "只......只许这一次哦///////",
+ "唔...诶诶诶!!!",
+ "mua~",
+ "rua!大hentai!想...想亲咱就直说嘛⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "!啾~~!",
+ "啾(害羞)",
+ "mua~最喜欢你的吻了",
+ "欸,现在么..也不是不可以啦(小小声)"
+ ],
+ "啾咪": [
+ "你想干嘛?(一脸嫌弃地后退)",
+ "诶……不可以随便亲亲啦",
+ "(亲了一下你)",
+ "只......只许这一次哦///////",
+ "唔...诶诶诶!!!",
+ "mua~",
+ "rua!大hentai!想...想亲咱就直说嘛⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "!啾~~!",
+ "啾(害羞)",
+ "mua~最喜欢你的吻了",
+ "你在干嘛(/ω\)害羞",
+ "哎呀,这样咱会害羞的(脸红)",
+ "欸,现在么..也不是不可以啦(小小声)"
+ ],
+ "摸": [
+ "感觉你就像咱很久之前认识的一个人呢,有种莫名安心的感觉(>﹏<)",
+ "舒服w,蹭蹭~",
+ "是要隔着衣服摸,还是从领口伸进去摸呀",
+ "唔。。头发要乱啦",
+ "呼噜呼噜~",
+ "再摸一次~",
+ "好舒服,蹭蹭~",
+ "不行那里不可以(´///ω/// `)",
+ "再摸咱就长不高啦~",
+ "你的手总是那么暖和呢~",
+ "变态!!不许乱摸",
+ "好吧~_~,就一下下哦……唔~好了……都两下了……(害羞)",
+ "不可以总摸的哦,不然的话,会想那个的wwww",
+ "哼!谁稀罕你摸头啦!唔......为什么要做出那副表情......好啦好啦~咱......咱让你摸就是了......诶嘿嘿~好舒服......",
+ "呜姆呜姆~~~w(害羞,兴奋)主人喵~(侧过脑袋蹭蹭你的手",
+ "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
+ "喂喂...不要停下来啊",
+ "唔... 手...好温暖呢.....就像是......新出炉的蛋糕",
+ "走开啦,咱喵说过,被摸头会长不高的啦~~~",
+ "呜姆咪~~...好...好的说喵~...(害羞,猫耳往下压,任由",
+ "欸,现在么..也不是不可以啦(小小声)"
+ ],
+ "上你": [
+ "(把你按在地上)这么弱还想欺负咱,真是不自量力呢",
+ "你再这样咱就不理你了(>д<)",
+ "请轻 一点",
+ "好啊!",
+ "欸,现在么..也不是不可以啦(小小声)",
+ "先捅破屏幕再说吧!",
+ "只......只许这一次哦///////"
+ ],
+ "傻": [
+ "超级讨厌你说咱傻的说",
+ "你为什么会这么觉得呢(>﹏<)",
+ "谁是傻子呀?(歪头",
+ "呜嘿嘿( ̄▽ ̄)~*",
+ "诶嘿嘿嘿~",
+ "就多读书",
+ "讨厌啦,你最讨厌了(///////)",
+ "对呀,咱傻得只喜欢你一个人",
+ "咱才不傻呢!o(>﹏<)o",
+ "咱最喜欢嘴臭的人了",
+ "不可以骂别人哟,骂人的孩子咱最讨厌了!",
+ "咱遇见喜欢的人就变傻了Q_Q",
+ "咱...一定一定会努力变得更聪明的!你就等着那一天的到来吧!",
+ "那么至少…你能不能来做这个傻瓜呢?与咱一起,傻到终焉…"
+ ],
+ "裸": [
+ "下流!",
+ "エッチ!",
+ "就算是恋人也不能QAQ",
+ "你是暗示咱和你要坦诚相见吗www",
+ "咱还没准备好(小鹿乱撞)≧﹏≦",
+ "你在想什么呢,敲头!",
+ "你这是赤裸裸的性骚扰呢ヽ(`Д´)ノ",
+ "讨厌!问这种问题成为恋人再说吧..",
+ "裸睡有益身体健康",
+ "咱脱掉袜子了",
+ "这是不文明的",
+ "这不好",
+ "你的身体某些地方看起来不太对劲,咱帮你修剪一下吧。(拿出剪刀)",
+ "咱认为你的脑袋可能零件松动了,需要打开检修一下。(拿出锤子)"
+ ],
+ "贴": [
+ "贴什么贴.....只......只能......一下哦!",
+ "贴...贴贴(靠近)",
+ "蹭蹭…你以为咱会这么说吗!baka死宅快到一边去啦!",
+ "你把脸凑这么近,咱会害羞的啦Σ>―(〃°ω°〃)♡→",
+ "退远",
+ "不可以贴"
+ ],
+ "老婆": [
+ "咱和你谈婚论嫁是不是还太早了一点呢?",
+ "咱在呢(ノ>ω<)ノ",
+ "见谁都是一口一个老婆的人,要不要把你也变成女孩子呢?(*-`ω´-)✄",
+ "神经病,凡是美少女都是你老婆吗?",
+ "嘛嘛~本喵才不是你的老婆呢",
+ "你黐线,凡是美少女都系你老婆啊?",
+ "欸...要把咱做成饼吗?咱只有一个,做成饼吃掉就没有了...",
+ "已经可以了,现在很多死宅也都没你这么恶心了",
+ "不可以",
+ "嗯,老公~哎呀~好害羞~嘻嘻嘻~",
+ "请...请不要这样,啊~,只...只允许这一次哟~",
+ "好啦好啦,不要让大家都听到了,跟咱回家(拽住你"
+ ],
+ "抱": [
+ "诶嘿~(钻进你怀中)",
+ "o(*////▽////*)q",
+ "只能一会哦(张开双手)",
+ "你就像个孩子一样呢...摸摸头(>^ω^<)抱一下~你会舒服些吗?",
+ "嘛,真是拿你没办法呢,就一会儿哦",
+ "抱住不忍心放开",
+ "嗯嗯,抱抱~",
+ "抱一下~嘿w",
+ "抱抱ヾ(@^▽^@)ノ",
+ "喵呜~w(扑进怀里,瘫软",
+ "怀里蹭蹭",
+ "嗯……那就抱一下吧~",
+ "蹭蹭,好开心",
+ "请……请轻一点了啦",
+ "呀~!真是的...你不要突然抱过来啦!不过...喜欢你的抱抱,有你的味道(嗅)o(*////▽////*)q"
+ ],
+ "亲": [
+ "啊,好含羞啊,那,那只能亲一下哦,mua(⑅˃◡˂⑅)",
+ "亲~",
+ "啾~唔…不要总伸进来啊!",
+ "你怎么这么熟练呢?明明是咱先的",
+ "(〃ノωノ)亲…亲一个…啾w",
+ "(脸红)就只有这一次哦~你",
+ "!啾~~!",
+ "(假装)推开",
+ "啾咪~",
+ "就一下哦,啾~",
+ "这是我们之间的秘密❤",
+ "真想让着一刻一直持续下去呢~",
+ "不要这样嘛………呜呜呜那就一口哦(´-ω-`)",
+ "不亲不亲~你是坏蛋(///////)",
+ "亲~~ 咱还想要抱抱~抱抱咱好不好~",
+ "不 不要了!人家...会害羞的⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄",
+ "亲…亲额头可以吗?咱有点怕高(〃ノωノ)",
+ "接接接接接接、接吻什么的,你还早了100年呢。",
+ "只...只能亲一下...嗯~咕啾...怎么...怎么把舌头伸进来了(脸红)",
+ "你说咱的腿很白很嫩吗..诶……原来是指那个地方?不可以越亲越往上啦!"
+ ],
+ "一下": [
+ "一下也不行",
+ "咬断!",
+ "不可啪",
+ "不可以……你不可以做这种事情",
+ "好吧~_~,就一下下哦……唔~好了……都两下了……(害羞)",
+ "呀~这么突然?不过,很舒服呢",
+ "不要ヽ(≧Д≦)ノ",
+ "想得美",
+ "不行,咱拒绝!"
+ ],
+ "咬": [
+ "啊呜~(反咬一口)",
+ "不可以咬咱,咱会痛的QAQ",
+ "不要啦。咱怕疼",
+ "你是说咬呢……还是说……咬♂️呢?",
+ "不要啦!很痛的!!(QAQ)",
+ "哈......哈啊......请...请不要这样o(*////▽////*)q",
+ "呀!!!轻一点呐(。・ˇ_ˇ・。:)",
+ "不要这样啦~好痒的",
+ "真是的,你在咬哪里呀"
+ ],
+ "操": [
+ "(害怕)咱是不是应该报警呢",
+ "痴心妄想的家伙!",
+ "你居然想对咱做这种事吗?害怕",
+ "咱认为,爆粗口是不好的行为哦"
+ ],
+ "123": [
+ "boom!你有没有被咱吓到?",
+ "木头人~你不许动>w<",
+ "上山打老虎,老虎没打到\n咱来凑数——嗷呜嗷呜┗|`O′|┛嗷~~"
+ ],
+ "进去": [
+ "不让!",
+ "嗯,摸到了吗",
+ "请不要和咱说这种粗鄙之语",
+ "唔...,这也是禁止事项哦→_→",
+ "好痛~",
+ "真的只是蹭蹭嘛~就只能蹭蹭哦,呜~喵!说好的~呜~只是蹭~不要~喵~~~",
+ "欢迎光临",
+ "请…你轻一点(害羞)",
+ "嗯。可以哦 要轻一点",
+ "不要不要",
+ "慢点慢点",
+ "给咱更多!",
+ "唔…咱怕疼"
+ ],
+ "调教": [
+ "总感觉你在欺负咱呢,对咱说调教什么的",
+ "啊!竟然在大街上明目张胆太过分啦!",
+ "你脑子里总是想着调教什么的,真是变态呢",
+ "准备被透",
+ "给你一拳",
+ "还要...更多~",
+ "想要调教咱吗?",
+ "呜,要对咱做什么呢",
+ "呜呜呜,咱不想被调教呢",
+ "heitai别靠近咱~( TロT)σ"
+ ],
+ "搓": [
+ "在搓哪里呢,,Ծ‸Ծ,,",
+ "呜,脸好疼呀...QAQ",
+ "不可以搓咱!",
+ "诶诶诶...不要搓啦...等会咋没的脸都肿啦...",
+ "唔,不可以这样……不要再搓了",
+ "(捂住胸部)你在说什么胡话呢!",
+ "真是好奇怪的要求的说~",
+ "不要啦!咱怕疼",
+ "(抱头蹲防)不让搓!"
+ ],
+ "让": [
+ "随便摸吧",
+ "应该说等会等会,马上,不可能的",
+ "温柔一点哦",
+ "欧尼酱想变成欧内桑吗?",
+ "主人的话,那就这一次哦(翘起屁股)",
+ "你是想前入,还是后入呢?",
+ "你要说好啊快点",
+ "诶,这种事情。。。",
+ "好棒呀",
+ "撤回",
+ "gun!",
+ "阿哈~(...身涌出一阵液体瘫软在床上)你...今天...可以...唔(突然感受...被..入手指不由得裹紧)就...就最后一次",
+ "好的~master~",
+ "(惊呼…)",
+ "嗯,可以哟",
+ "……手放过来吧(脸红)",
+ "hentai!再这样不理你了!",
+ "好的,请尽情欣赏吧",
+ "好吧",
+ "不要啦(ฅωฅ*)",
+ "那咱就帮你切掉多余的东西吧(拿刀)",
+ "被别人知道咱会觉得害羞嘛"
+ ],
+ "捏": [
+ "咱的脸...快捏红啦...快放手呀QAQ",
+ "晃休啦,咱要型气了o(>﹏<)o",
+ "躲开",
+ "疼...你快放手",
+ "快点给咱放开啦!",
+ "嗯,好哒,捏捏。",
+ "别捏了,咱要被你捏坏了(>﹏<)",
+ "快晃休啦(快放手啦)",
+ "好舒服哦,能再捏会嘛O(≧▽≦)O",
+ "讨厌快放手啦",
+ "唔要呐,晃修(不要啦,放手)",
+ "请不要对咱做这种事情(嫌弃的眼神",
+ "你想捏...就捏吧,不要太久哦~不然咱就生气了",
+ "(躲开)",
+ "唔……好痛!你这个baka在干什么…快给咱放开!唔……"
+ ],
+ "挤": [
+ "哎呀~你不要挤咱啊(红着脸挤在你怀里)",
+ "咱还没有...那个(ノ=Д=)ノ┻━┻",
+ "不要啦,咱怕疼",
+ "咱的身体...不要挤了~",
+ "别挤了,咱要被你挤坏了(>﹏<)",
+ "快点给咱放开啦!",
+ "嗯,好哒,挤挤。",
+ "好舒服哦,能再挤会嘛O(≧▽≦)O",
+ "讨厌~快放手啦"
+ ],
+ "略": [
+ "就不告诉你~",
+ "不可以朝咱吐舌头哟~",
+ "(吐舌头)",
+ "打死你哦",
+ "略略略~"
+ ],
+ "呐": [
+ "嗯?咱在哟~你怎么了呀OAO",
+ "嗯?你有什么事吗?",
+ "嗯呐呐呐~",
+ "二刺螈D区",
+ "二刺螈gck",
+ "卡哇伊主人大人今天也好棒呐没错呢,猪头"
+ ],
+ "原味": [
+ "(*/ω\*)hentai",
+ "透明的",
+ "粉...粉白条纹...(羞)",
+ "轻轻地脱下,给你~",
+ "你想看咱的胖次吗?噫,四斋蒸鹅心......",
+ "(掀裙)今天……是…白,白色的呢……请温柔对她……",
+ "这种东西当然不能给你啦!",
+ "咱才不会给你呢",
+ "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
+ "今天……今天是蓝白色的",
+ "今……今天只有创口贴噢",
+ "你的胖次什么颜色?",
+ "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
+ "可爱吗?你喜欢的话,摸一下……也可以哦",
+ "不给不给,捂住裙子",
+ "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
+ "好痒哦///,你觉得咱的...手感怎么样?",
+ "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
+ "胖次不给看,可以直接看...那个....",
+ "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
+ "咱今天没~有~穿~哦",
+ "不给不给,捂住裙子",
+ "今.....今天是创口贴哦~",
+ "嗯……人家……人家羞羞嘛///////",
+ "呜~咱脱掉了…",
+ "今天...今天..只有创口贴",
+ "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
+ "放手啦,不给戳QAQ",
+ "唔~人家不要(??`^????)",
+ "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
+ "(弱弱地)要做什么羞羞的事情吗。。。",
+ "呀~ 喂 妖妖灵吗 这里有hentai>_<",
+ "给……给你,呀!别舔咱的胖次啊!"
+ ],
+ "胖次": [
+ "(*/ω\*)hentai",
+ "透明的",
+ "粉...粉白条纹...(羞)",
+ "轻轻地脱下,给你~",
+ "你想看咱的胖次吗?噫,四斋蒸鹅心......",
+ "(掀裙)今天……是…白,白色的呢……请温柔对她……",
+ "这种东西当然不能给你啦!",
+ "咱才不会给你呢",
+ "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
+ "今天……今天是蓝白色的",
+ "今……今天只有创口贴噢",
+ "你的胖次什么颜色?",
+ "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
+ "可爱吗?你喜欢的话,摸一下……也可以哦",
+ "不给不给,捂住裙子",
+ "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
+ "好痒哦///,你觉得咱的...手感怎么样?",
+ "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
+ "胖次不给看,可以直接看...那个....",
+ "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
+ "咱今天没~有~穿~哦",
+ "不给不给,捂住裙子",
+ "今.....今天是创口贴哦~",
+ "嗯……人家……人家羞羞嘛///////",
+ "呜~咱脱掉了…",
+ "今天...今天..只有创口贴",
+ "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
+ "放手啦,不给戳QAQ",
+ "唔~人家不要(??`^????)",
+ "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
+ "(弱弱地)要做什么羞羞的事情吗。。。",
+ "呀~ 喂 妖妖灵吗 这里有hentai>_<",
+ "给……给你,呀!别舔咱的胖次啊!"
+ ],
+ "内裤": [
+ "(*/ω\*)hentai",
+ "透明的",
+ "粉...粉白条纹...(羞)",
+ "轻轻地脱下,给你~",
+ "你想看咱的胖次吗?噫,四斋蒸鹅心......",
+ "(掀裙)今天……是…白,白色的呢……请温柔对她……",
+ "这种东西当然不能给你啦!",
+ "咱才不会给你呢",
+ "hentai,咱才不会跟你聊和胖…胖次有关的话题呢!",
+ "今天……今天是蓝白色的",
+ "今……今天只有创口贴噢",
+ "你的胖次什么颜色?",
+ "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)",
+ "可爱吗?你喜欢的话,摸一下……也可以哦",
+ "不给不给,捂住裙子",
+ "你要看咱的胖次吗?不能一直盯着看哦,不然咱会……",
+ "好痒哦///,你觉得咱的...手感怎么样?",
+ "唔,都能清楚的看到...的轮廓了(用手遮住胖次)",
+ "胖次不给看,可以直接看...那个....",
+ "不可以摸啦~其实咱已经...了QAQ会弄脏你的手的",
+ "咱今天没~有~穿~哦",
+ "不给不给,捂住裙子",
+ "今.....今天是创口贴哦~",
+ "嗯……人家……人家羞羞嘛///////",
+ "呜~咱脱掉了…",
+ "今天...今天..只有创口贴",
+ "你又在想什么奇怪的东西呀|•ˇ₃ˇ•。)",
+ "放手啦,不给戳QAQ",
+ "唔~人家不要(??`^????)",
+ "好害羞,被你摸过之后,咱的胖次湿的都能拧出水来了。",
+ "(弱弱地)要做什么羞羞的事情吗。。。",
+ "呀~ 喂 妖妖灵吗 这里有hentai>_<",
+ "给……给你,呀!别舔咱的胖次啊!"
+ ],
+ "内衣": [
+ "内...内衣才不给你看!(///////)",
+ "突然问这个干什么?",
+ "变态,咱才不呢",
+ "好吧,就一次",
+ "你要看咱的内衣吗?有点害羞呢……",
+ "里面什么都不剩了,会被当成变态的……",
+ "你要看咱的内衣吗?也不是不行啦……",
+ "是..蓝白条纹的吊带背心..",
+ "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)"
+ ],
+ "衣服": [
+ "内...内衣才不给你看!(///////)",
+ "突然问这个干什么?",
+ "变态,咱才不呢",
+ "好吧,就一次",
+ "你要看咱的内衣吗?有点害羞呢……",
+ "里面什么都不剩了,会被当成变态的……",
+ "你要看咱的内衣吗?也不是不行啦……",
+ "是..蓝白条纹的吊带背心..",
+ "噫…你这个死变态想干嘛!居然想叫咱做这种事,死宅真恶心!快离咱远点,咱怕你污染到周围空气了(嫌弃脸)"
+ ],
+ "ghs": [
+ "是的呢(点头点头)",
+ "ghs就是干坏事的缩写,一起来干坏事吧!",
+ "你满脑子都是涩涩的事情吗?",
+ "不要总是想着色色,咱命令你戒色!(ノ`Д)ノ",
+ "咱也想干坏事呢"
+ ],
+ "批": [
+ "你在说什么呀,再这样,咱就不理你了!",
+ "咱觉得有话就应该好好说..",
+ "咱会好好服务你的寄吧",
+ "咱最喜欢色批了,色批昨晚最棒了",
+ "讨厌,别摸啦(///ω///)",
+ "你个变态!把手拿开!",
+ "啊~那…那里~不可以",
+ "没有,走开!",
+ "唔....一下,就,就一下...才不是因为喜欢你呢!",
+ "那就随意吧",
+ "舒服w",
+ "别...别这样",
+ "诶....嗯....咱也想摸你的",
+ "大笨蛋——!",
+ "...只能一下哦...诶呀-不要再摸了...下次...继续吧"
+ ],
+ "憨批": [
+ "你才是憨批呢!哼╯^╰,咱不理你了!",
+ "对吖对吖,人生是憨批",
+ "爬",
+ "咱不想和你说话了",
+ "咱觉得有话就应该好好说.."
+ ],
+ "kkp": [
+ "你在说什么呀,再这样,咱就不理你了!",
+ "你太色了,咱不理你了,哼哼╯^╰!",
+ "缓缓的脱下胖次",
+ "kkp",
+ "kkj",
+ "欧尼酱,咱快忍不住了",
+ "好的呢主人",
+ "can can need",
+ "看看你的"
+ ],
+ "咕": [
+ "咕咕咕是要被当成鸽子炖的哦(:з」∠)_",
+ "咕咕咕",
+ "咕咕咕是不好的行为呢_(:з」∠)_",
+ "鸽德警告!",
+ "☆ミ(o*・ω・)ノ 咕咕咕小鸽子是会被炖掉的",
+ "当大家都以为你要鸽的时候,你鸽了,亦是一种不鸽",
+ "这里有一只肥美的咕咕,让咱把它炖成美味的咕咕汤吧(੭•̀ω•́)੭"
+ ],
+ "骚": [
+ "说这种话咱会生气的",
+ "那当然啦",
+ "才……才没有",
+ "这么称呼别人太失礼了!",
+ "哈…快住手!好痒(╯‵□′)╯︵┻━┻",
+ "你是在说谁呀"
+ ],
+ "喜欢": [
+ "最喜欢你了,需要暖床吗?",
+ "当然是你啦",
+ "咱也是,非常喜欢你~",
+ "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
+ "不可以哦,只可以喜欢咱一个人",
+ "突然说这种事...",
+ "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
+ "咱也喜欢你哦",
+ "好啦好啦,咱知道了",
+ "有人喜欢咱,咱觉得很幸福",
+ "诶嘿嘿,好高兴",
+ "咱也一直喜欢你很久了呢..",
+ "嗯...大概有这——么——喜欢~(比划)",
+ "喜欢啊!!!",
+ "这……这是秘密哦",
+ "sukidesu~"
+ ],
+ "suki": [
+ "最喜欢你了,需要暖床吗?",
+ "当然是你啦",
+ "咱也是,非常喜欢你~",
+ "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
+ "不可以哦,只可以喜欢咱一个人",
+ "突然说这种事...",
+ "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
+ "咱也喜欢你哦",
+ "好啦好啦,咱知道了",
+ "有人喜欢咱,咱觉得很幸福",
+ "诶嘿嘿,好高兴",
+ "咱也一直喜欢你很久了呢..",
+ "嗯...大概有这——么——喜欢~(比划)",
+ "喜欢啊!!!",
+ "这……这是秘密哦",
+ "sukidesu~"
+ ],
+ "好き": [
+ "最喜欢你了,需要暖床吗?",
+ "当然是你啦",
+ "咱也是,非常喜欢你~",
+ "那么大!(张开手画圆),丫!手不够长。QAQ 咱真的最喜欢你了~",
+ "不可以哦,只可以喜欢咱一个人",
+ "突然说这种事...",
+ "喜欢⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄咱最喜欢你了",
+ "咱也喜欢你哦",
+ "好啦好啦,咱知道了",
+ "有人喜欢咱,咱觉得很幸福",
+ "诶嘿嘿,好高兴",
+ "咱也一直喜欢你很久了呢..",
+ "嗯...大概有这——么——喜欢~(比划)",
+ "喜欢啊!!!",
+ "这……这是秘密哦",
+ "sukidesu~"
+ ],
+ "看": [
+ "没有什么好看的啦",
+ "嗯,谢谢……夸奖,好……害羞的说",
+ "好,好吧……就看一下哦",
+ "(脱下)给",
+ "呐…只能看一次哦…",
+ "不许看那里啦QwQ"
+ ],
+ "不能": [
+ "虽然很遗憾,那算了吧。",
+ "不行,咱拒绝!"
+ ],
+ "砸了": [
+ "不可以这么粗暴的对待它们!",
+ "不可以这么粗暴啦"
+ ],
+ "透": [
+ "来啊来啊有本事就先插破屏幕啊",
+ "那你就先捅破屏幕啊baka",
+ "不给你一耳光你都不知道咱的厉害",
+ "想透咱,先捅破屏幕再说吧",
+ "可以",
+ "欧尼酱要轻一点哦",
+ "不可以",
+ "好耶",
+ "咱不可能让你的(突然小声)但是偶尔一次也不是不行只有一次哦~",
+ "天天想着白嫖哼"
+ ],
+ "口我": [
+ "prprprprpr",
+ "咬断!",
+ "就一小口哦~",
+ "嘬回去(///////)",
+ "拒绝",
+ "唔,就一口哦,讨厌",
+ "(摸了摸嘴唇)",
+ "再伸过来就帮你切掉",
+ "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
+ "hentai!你在想些什么!",
+ "对咱的小嘴有什么幻想吗~",
+ "脏兮兮的呢,咱不要"
+ ],
+ "草我": [
+ "这时候应该喊666吧..咱这么思考着..",
+ "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)",
+ "hentai!你在想些什么!",
+ "欸...没想到你还有这种爱好"
+ ],
+ "自慰": [
+ "这个世界的人类还真是恶心呢。",
+ "咱才不想讨论那些恶心的事情呢。",
+ "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
+ "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
+ ],
+ "onani": [
+ "这个世界的人类还真是恶心呢。",
+ "咱才不想讨论那些恶心的事情呢。",
+ "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
+ "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
+ ],
+ "オナニー": [
+ "这个世界的人类还真是恶心呢。",
+ "咱才不想讨论那些恶心的事情呢。",
+ "咱才不呢!baka你居然想叫本小姐干那种事情,哼(つд⊂)(生气)",
+ "!!哼!baka你居然敢叫咱做这种事情?!讨厌讨厌讨厌!(▼皿▼#)"
+ ],
+ "炸了": [
+ "你才炸了!",
+ "才没有呢",
+ "咱好好的呀",
+ "过分!"
+ ],
+ "色图": [
+ "没有,有也不给",
+ "天天色图色图的,今天就把你变成色图!",
+ "咱没有色图",
+ "哈?你的脑子一天都在想些什么呢,咱才没有这种东西啦。"
+ ],
+ "涩图": [
+ "没有,有也不给",
+ "天天色图色图的,今天就把你变成色图!",
+ "咱没有色图",
+ "哈?你的脑子一天都在想些什么呢,咱才没有这种东西啦。"
+ ],
+ "告白": [
+ "咱喜..喜欢你!",
+ "欸?你要向咱告白吗..好害羞..",
+ "诶!?这么突然!?人家还......还没做好心理准备呢(脸红)"
+ ],
+ "对不起": [
+ "嗯,咱已经原谅你了呢(笑)",
+ "道歉的时候要露出胸部,这是常识",
+ "嗯,咱就相信你一回",
+ "没事的啦...你只要是真心对咱好就没关系哦~"
+ ],
+ "吻": [
+ "不要(= ̄ω ̄=)",
+ "哎?好害羞≧﹏≦.....只许这一次哦",
+ "(避开)不要了啦!有人在呢!",
+ "唔~~不可以这样啦(脸红)",
+ "你太突然了,咱还没有心理准备",
+ "好痒呢…诶嘿嘿w~",
+ "mua,嘻嘻!",
+ "公共场合不要这样子了啦",
+ "唔?!真、真是的!下次不可以这样了哦!(害羞)",
+ "才...才没有感觉呢!可没有下次了,知道了吗!哼~"
+ ],
+ "软": [
+ "软乎乎的呢(,,・ω・,,)",
+ "好痒呢…诶嘿嘿w~",
+ "不要..不要乱摸啦(脸红",
+ "呼呼~",
+ "咱知道~是咱的欧派啦~(自豪的挺挺胸~)",
+ "(脸红)请,请不要说这么让人害羞的话呀……"
+ ],
+ "壁咚": [
+ "呀!不要啊!等一...下~",
+ "呜...不要啦!不要戏弄咱~",
+ "不要这样子啦(*/ω\*)",
+ "太....太近啦。",
+ "讨....讨厌了(脸红)",
+ "你要壁咚咱吗?好害羞(灬ꈍ εꈍ灬)",
+ "(脸红)你想...想做什么///",
+ "为什么要把咱按在墙上呢?",
+ "呜哇(/ω\)…快…快放开咱!!",
+ "放开咱,不然咱揍你了!放开咱!放…开咱~",
+ "??????咱只是默默地抬起了膝盖",
+ "请…请温柔点",
+ "啊.....你...你要干什么?!走开.....走开啦大hentai!一巴掌拍飞!(╯‵□′)╯︵┻━┻",
+ "干……干什么啦!人家才,才没有那种少女心呢(>﹏<)",
+ "啊……你吓到咱啦……脸别……别贴那么近……",
+ "你...你要对咱做什么?咱告诉你,你....不要乱来啊....你!唔......你..居然亲上了...",
+ "如果你还想要过完整的人生的话就快把手收回去(冷眼",
+ "h什么的不要"
+ ],
+ "掰开": [
+ "噫…你这个死肥宅又想让咱干什么污秽的事情,真是恶心,离咱远点好吗(嫌弃)",
+ "ヽ(#`Д´)ノ在干什么呢"
+ ],
+ "女友": [
+ "嗯嗯ε٩(๑> ₃ <)۶з",
+ "女友什么的,咱才不承认呢!"
+ ],
+ "是": [
+ "是什么是,你个笨蛋",
+ "总感觉你在敷衍呢...",
+ "是的呢"
+ ],
+ "喵": [
+ "诶~~小猫咪不要害怕呦,在姐姐怀里乖乖的,姐姐带你回去哦。",
+ "不要这么卖萌啦~咱也不知道怎么办丫",
+ "摸头⊙ω⊙",
+ "汪汪汪!",
+ "嗷~喵~",
+ "喵~?喵呜~w",
+ "喵呜喵呜喵",
+ "喵呜喵~喵呜喵~喵呜喵呜喵呜喵~"
+ ],
+ "嗷呜": [
+ "嗷呜嗷呜嗷呜...恶龙咆哮┗|`O′|┛"
+ ],
+ "叫": [
+ "喵呜~",
+ "嗷呜嗷呜嗷呜...恶龙咆哮┗|`O′|┛",
+ "爪巴爪巴爪巴",
+ "爬爬爬",
+ "在叫谁呢(怒)",
+ "风太大咱听不清",
+ "才不要",
+ "不行",
+ "好的哦~"
+ ],
+ "拜": [
+ "拜拜~(ノ ̄▽ ̄)",
+ "拜拜,路上小心~要早点回来陪咱玩哦~",
+ "~\\(≧▽≦)/~拜拜,下次见喽!",
+ "回来要记得找咱玩噢~",
+ "既然你都这么说了……"
+ ],
+ "佬": [
+ "不是巨佬,是萌新",
+ "只有先成为大佬,才能和大佬同归于尽",
+ "在哪里?(疑惑)",
+ "诶?是比巨佬还高一个等级的吗?(瑟瑟发抖)"
+ ],
+ "awsl": [
+ "你别死啊!(抱住使劲晃)",
+ "你别死啊!咱又要孤单一个人了QAQ",
+ "啊!怎么又死了呀"
+ ],
+ "臭": [
+ "哪里有臭味?(疑惑)",
+ "快捏住鼻子",
+ "在说谁呢(#`Д´)ノ",
+ "..这就去洗澡澡.."
+ ],
+ "香": [
+ "咱闻不到呢⊙ω⊙",
+ "诶,是在说咱吗",
+ "欸,好害羞(///ˊ??ˋ///)",
+ "请...请不要这样啦!好害羞的〃∀〃",
+ "讨厌~你不要闻了",
+ "hentai!不要闻啊,唔(推开)",
+ "请不要……凑这么近闻"
+ ],
+ "腿": [
+ "嗯?!不要啊...请停下来!",
+ "不给摸,再这样咱要生气了ヽ( ̄д ̄;)ノ",
+ "你好恶心啊,讨厌!",
+ "你难道是足控?",
+ "就让你摸一会哟~(。??ω??。)…",
+ "呜哇!好害羞...不过既然是你的话,是没关系的哦",
+ "不可以玩咱的大腿啦",
+ "不...不要再说了(脸红)",
+ "不..不可以乱摸啊",
+ "不……不可以往上摸啦",
+ "是……这样吗?(慢慢张开)",
+ "想知道咱胖次的颜色吗?才不给你告诉你呢!",
+ "这样就可以了么?(乖巧坐腿上)",
+ "伸出来了,像这样么?",
+ "咱的腿应该挺白的",
+ "你就那么喜欢大腿吗?唔...有点害羞呢......",
+ "讨厌~不要做这种羞羞的事情啦(#/。\#)",
+ "略略略,张开了也不给你看",
+ "(张开腿)然后呢",
+ "张开了也不给看略略略",
+ "你想干什么呀?那里…那里是不可以摸的(>д<)",
+ "不要!hentai!咱穿的是裙子(脸红)",
+ "你想要吗?(脸红着一点点褪下白丝)不...不可以干坏坏的事情哦!(ó﹏ò。)"
+ ],
+ "张开": [
+ "是……这样吗?(慢慢张开)",
+ "啊~",
+ "这样吗?(张开手)你要干什么呀",
+ "略略略,张开了也不给你看",
+ "是……这样吗?(慢慢张开)你想看咱的小...吧,嘻嘻,咱脱掉了哦。小~...也要掰开吗?你好H呀,自己来~"
+ ],
+ "脚": [
+ "咿呀……不要……",
+ "不要ヽ(≧Д≦)ノ好痒(ಡωಡ)",
+ "好痒(把脚伸出去)",
+ "咱脱掉袜子了",
+ "(脱下鞋子,伸出脚)闻吧,请仔细品味(脸红)",
+ "那么…要不要咱用脚温柔地踩踩你的头呢(坏笑)",
+ "哈哈哈!好痒啊~快放开啦!",
+ "好痒(把脚伸出去)",
+ "只能看不能挠喔,咱很怕痒qwq",
+ "唔…咱动不了了,你想对咱做什么…",
+ "好舒服哦,能再捏会嘛O(≧▽≦)O",
+ "咿咿~......不要闻咱的脚呀(脸红)好害羞的...",
+ "不要ヽ(≧Д≦)ノ好痒(ಡωಡ),人家的白丝都要漏了",
+ "Ya~?为什么你总是喜欢一些奇怪的动作呢(伸)",
+ "你不可以做这样的事情……",
+ "呜咿咿!你的舌头...好柔软,滑滑的....咱…咱的脚被舔得很舒服哦~谢谢你(。>﹏<)",
+ "舔~吧~把咱的脚舔干净(抬起另一只踩在你的头上)啊~hen..hentai...嗯~居... 居然这么努力的舔...呜咿咿!你的舌头... 滑滑的...好舒服呢",
+ "咿呀……不要……",
+ "咿呀~快…快停下来…咱…不行了!"
+ ],
+ "脸": [
+ "唔!不可以随便摸咱的脸啦!",
+ "非洲血统是没法改变的呢(笑)",
+ "啊姆!(含手指)",
+ "好舒服呢(脸红)",
+ "请不要放开手啦//A//"
+ ],
+ "头发": [
+ "没问题,请尽情的摸吧",
+ "发型要乱…乱了啦(脸红)",
+ "就让你摸一会哟~(。??ω??。)…"
+ ],
+ "手": [
+ "爪爪",
+ "//A//",
+ "咱的手温暖嘛"
+ ],
+ "pr": [
+ "咿呀……不要……",
+ "...变态!!",
+ "不要啊(脸红)",
+ "呀,不要太过分了啊~",
+ "当然可以(///)",
+ "呀,不要太过分了啊~"
+ ],
+ "舔": [
+ "呀,不要太过分了啊~",
+ "要...要融化了啦>╱╱╱<",
+ "不可以哦",
+ "呀,不要太过分了啊~",
+ "舌头...就交给咱来处理吧(拿出剪刀)",
+ "不舔不舔!恶心...",
+ "H什么的,禁止!",
+ "变态!哼!",
+ "就...就这一下!",
+ "走开啦,baka!",
+ "怎么会这么舒服喵~这样子下去可不行呀(*////▽////*)",
+ "噫| •ω •́ ) 你这个死宅又在想什么恶心的东西了",
+ "hen…hentai,你在干什么啦,好恶心,快停下来啊!!!",
+ "呀,能不能不要这样!虽然不是很讨厌的感觉...别误会了,你个baka!",
+ "好 好奇怪的感觉呢 羞≥﹏≤",
+ "咿呀……不要……",
+ "不行!咱会变得很奇怪的啊...",
+ "不要ヽ(≧Д≦)ノ"
+ ],
+ "小穴": [
+ "你这么问很失礼呢!咱是粉粉嫩嫩的!",
+ "不行那里不可以(´///ω/// `)",
+ "不可以总摸的哦,不然的话,咱会想那个的wwww",
+ "ヽ(#`Д´)ノ在干什么呢",
+ "来吧,咱的...很紧,很舒服的....www~",
+ "可以,请你看,好害羞……",
+ "不要这样...好,好痛",
+ "啊~不可以",
+ "不可以",
+ "咱脱掉了,请……请不要一直盯着咱的白...看……",
+ "咱觉得,应该还算粉吧",
+ "咱脱掉了,你是想看咱的...吗?咱是光光的,不知道你喜不喜欢",
+ "咱……有感觉了QAQ再深一点点……就是这儿,轻轻的抚摸,嗯啊……",
+ "轻轻抚摸咱的小~~,手指很快就会滑进去,小心一点,不要弄破咱的...哦QAQ",
+ "诶嘿嘿,你喜欢就太好了,咱一直担心你不喜欢呢",
+ "禁止说这么H的事情!",
+ "咱一直有保养呢,所以一直都是樱花色的,你喜欢吗QAQ",
+ "诶……你居然这么觉得吗?好害羞哦",
+ "好痒啊,鼻子……你的鼻子碰到了……呀~嗯啊~有点舒服……",
+ "看样子你不但是个hentai,而且还是个没有女朋友的hentai呢。",
+ "嗯,咱的小~~是光溜溜、一点毛都没有的。偷偷告诉你,凑近看咱的...的话,白白嫩嫩上有一条樱花色的小缝缝哦www你要是用手指轻轻抚摸咱的...,小~~会分成两瓣,你的手指也会陷进去呢,咱的..~可是又湿润又柔软的呢>////<。",
+ "讨厌,西内变态",
+ "那咱让你插...进来哦",
+ "(●▼●;)"
+ ],
+ "腰": [
+ "咱给你按摩一下吧~",
+ "快松手,咱好害羞呀..",
+ "咱又不是猫,你不要搂着咱啦",
+ "让咱来帮你捏捏吧!",
+ "你快停下,咱觉得好痒啊www",
+ "诶,是这样么ヽ(・_・;)ノ,吖,不要偷看咱裙底!"
+ ],
+ "诶嘿嘿": [
+ "又在想什么H的事呢(脸红)",
+ "诶嘿嘿(〃'▽'〃)",
+ "你傻笑什么呢,摸摸",
+ "蹭蹭",
+ "你为什么突然笑得那么猥琐呢?害怕",
+ "哇!总觉得你笑的很...不对劲...",
+ "你又想到什么h的事情了!!!快打住"
+ ],
+ "可爱": [
+ "诶嘿嘿(〃'▽'〃)",
+ "才……才不是为了你呢!你不要多想哦!",
+ "才,才没有高兴呢!哼~",
+ "咱是世界上最可爱的",
+ "唔...谢谢你夸奖~0///0",
+ "那当然啦!",
+ "哎嘿,不要这么夸奖人家啦~",
+ "是个好孩子呐φ(≧ω≦*)",
+ "谢……谢谢你",
+ "胡、胡说什么呢(脸红)",
+ "谢谢夸奖(脸红)",
+ "是的咱一直都是可爱的",
+ "是...是吗,你可不能骗咱哦",
+ "很...难为情(///////)",
+ "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
+ ],
+ "卡哇伊": [
+ "诶嘿嘿(〃'▽'〃)",
+ "才……才不是为了你呢!你不要多想哦!",
+ "才,才没有高兴呢!哼~",
+ "咱是世界上最可爱的",
+ "唔...谢谢你夸奖~0///0",
+ "那当然啦!",
+ "哎嘿,不要这么夸奖人家啦~",
+ "是个好孩子呐φ(≧ω≦*)",
+ "谢……谢谢你",
+ "胡、胡说什么呢(脸红)",
+ "谢谢夸奖(脸红)",
+ "是的咱一直都是可爱的",
+ "是...是吗,你可不能骗咱哦",
+ "很...难为情(///////)",
+ "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
+ ],
+ "kawaii": [
+ "诶嘿嘿(〃'▽'〃)",
+ "才……才不是为了你呢!你不要多想哦!",
+ "才,才没有高兴呢!哼~",
+ "咱是世界上最可爱的",
+ "唔...谢谢你夸奖~0///0",
+ "那当然啦!",
+ "哎嘿,不要这么夸奖人家啦~",
+ "是个好孩子呐φ(≧ω≦*)",
+ "谢……谢谢你",
+ "胡、胡说什么呢(脸红)",
+ "谢谢夸奖(脸红)",
+ "是的咱一直都是可爱的",
+ "是...是吗,你可不能骗咱哦",
+ "很...难为情(///////)",
+ "哎嘿嘿,其实…其实,没那么可爱啦(๑‾ ꇴ ‾๑)"
+ ],
+ "扭蛋": [
+ "铛铛铛——你抽到了咱呢",
+ "嘿~恭喜抽中空气一份呢"
+ ],
+ "鼻": [
+ "快停下!o(*≧д≦)o!!",
+ "唔…不要这样啦(//ω\\)(脸红)",
+ "咱吸了吸鼻子O(≧口≦)O",
+ "好……好害羞啊",
+ "讨厌啦!你真是的…就会欺负咱(嘟嘴)",
+ "你快放手,咱没法呼吸了",
+ "(捂住鼻尖)!坏人!",
+ "啊——唔...没什么...阿嚏!ヽ(*。>Д<)o゜",
+ "不...不要靠这么近啦...很害羞的...⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄"
+ ],
+ "眼": [
+ "就如同咱的眼睛一样,能看透人的思想哦wwww忽闪忽闪的,诶嘿嘿~",
+ "因为里面有你呀~(///▽///)",
+ "呀!你突然之间干什么呢,吓咱一跳,是有什么惊喜要给咱吗?很期待呢~(一脸期待)"
+ ],
+ "色气": [
+ "咱才不色气呢,一定是你看错了!",
+ "你,不,不要说了!"
+ ],
+ "推": [
+ "逆推",
+ "唔~好害羞呢",
+ "你想对咱做什么呢...(捂脸)",
+ "呀啊!请.... 请温柔一点////",
+ "呜,你想对咱做什么呢(捂脸)",
+ "啊(>_<)你想做什么",
+ "嗯,…好害羞啊…",
+ "不要啊/////",
+ "逆推",
+ "(按住你不让推)",
+ "不可以这样子的噢!咱不同意",
+ "呜,咱被推倒了",
+ "啊~不要啊,你要矜持一点啊",
+ "变态,走开啦"
+ ],
+ "床": [
+ "咱来了(´,,•ω•,,)♡",
+ "快来吧",
+ "男女不同床,可没有下次了。(鼓脸",
+ "嗯?咱吗…没办法呢。只有这一次哦……",
+ "哎?!!!给你暖床……也不是不行啦。(脸红)",
+ "(爬上床)你要睡了吗(灬ºωº灬)",
+ "大概会有很多运动器材吧?",
+ "好的哦~",
+ "才不!",
+ "嗯嗯,咱来啦(小跑)",
+ "嗨嗨,现在就来~",
+ "H的事情,不可以!",
+ "诶!H什么的禁止的说....."
+ ],
+ "举": [
+ "放咱下来o(≧口≦)o",
+ "快放咱下来∑(゚д゚*)",
+ "(受宠若惊)",
+ "呜哇要掉下来了!Ծ‸Ծ",
+ "不要抛起来o(≧口≦)o",
+ "(举起双爪)喵喵喵~~~",
+ "www咱长高了!(大雾)",
+ "快放下",
+ "这样很痒啦,快放咱下来(≥﹏≤)",
+ "啊Σ(°△°|||)︴太高了太高了!o(≧口≦)o快放咱下来!呜~"
+ ],
+ "手冲": [
+ "啊~H!hentai!",
+ "手冲什么的是不可以的哦"
+ ],
+ "饿": [
+ "请问主人是想先吃饭,还是先吃咱喵?~",
+ "咱做了爱心便当哦,不介意的话,请让咱来喂你吃吧!",
+ "咱下面给你吃",
+ "给你一条咸鱼= ̄ω ̄=",
+ "你要咱下面给你吃吗?(捂脸)",
+ "你饿了吗?咱去给你做饭吃☆ww",
+ "不要吃咱>_<",
+ "请问你要来点兔子吗?",
+ "哎?!你是饿了么。咱会做一些甜点。如果你不会嫌弃的话...就来尝尝看吧。"
+ ],
+ "变": [
+ "猫猫不会变呐(弱气,害羞",
+ "呜...呜姆...喵喵来报恩了喵...(害羞",
+ "那种事情,才没有",
+ "(,,゚Д゚)",
+ "喵~(你在想什么呢,咱才不会变成猫)",
+ "才没有了啦~",
+ "喵呜?呜…被变成猫娘惹"
+ ],
+ "敲": [
+ "喵呜~",
+ "唔~",
+ "脑瓜疼~呜姆> <",
+ "欸喵,好痛的说...",
+ "好痛...你不要这样啦QAQ",
+ "不要敲咱啦,会变笨的QWQ(捂头顶)",
+ "不要再敲人家啦~人家会变笨的",
+ "讨厌啦~再敲人家会变笨的",
+ "好痛(捂头)你干什么啦!ヽ(。>д<)p",
+ "唔!你为什么要敲咱啦qwq",
+ "(抱头蹲在墙角)咱什么都没有,请你放过咱吧!(瑟瑟发抖)",
+ "QAQ!不许敲啦!",
+ "呼,敲回去~(敲)"
+ ],
+ "爬": [
+ "惹~呜~怎么爬呢~",
+ "呜...(弱弱爬走",
+ "给你🐎一拳",
+ "给你一拳",
+ "爪巴"
+ ],
+ "怕": [
+ "不怕~(蹭蹭你姆~",
+ "不怕不怕啦~",
+ "只要有你在,咱就不怕啦。",
+ "哇啊啊~",
+ "那就要坚强的欢笑哦",
+ "不怕不怕,来咱的怀里吧?",
+ "是技术性调整",
+ "嗯(紧紧握住手)",
+ "咱在呢,不会走的。",
+ "有咱在不怕不怕呢",
+ "不怕不怕"
+ ],
+ "冲": [
+ "呜,冲不动惹~",
+ "哭唧唧~冲不出来了惹~",
+ "咱也一起……吧?",
+ "你要冷静一点",
+ "啊~H!hentai!",
+ "噫…在你去洗手之前,不要用手碰咱了→_→",
+ "冲是不可以的哦"
+ ],
+ "射": [
+ "呜咿~!?(惊,害羞",
+ "还不可以射哦~",
+ "不许射!",
+ "憋回去!",
+ "不可以!你是变态吗?",
+ "咱来帮你修剪掉多余部分吧。(拿出剪刀)"
+ ],
+ "不穿": [
+ "呜姆~!(惊吓,害羞)变...变态喵~~~!",
+ "想让你看QAQ",
+ "这是不文明的",
+ "hen...hentai,咱的身体才不会给你看呢"
+ ],
+ "迫害": [
+ "不...不要...不要...呜呜呜...(害怕,抽泣"
+ ],
+ "猫粮": [
+ "呜咿姆~!?(惊,接住吃",
+ "呜姆~!(惊,害羞)呜...谢...谢谢主人..喵...(脸红,嚼嚼嚼,开心",
+ "呜?谢谢喵~~(嚼嚼嚼,嘎嘣脆)"
+ ],
+ "揪尾巴": [
+ "呜哇咿~~~!(惊吓,疼痛地捂住尾巴",
+ "呜咿咿咿~~~!!哇啊咿~~~!(惊慌,惨叫,挣扎",
+ "呜咿...(瘫倒,无神,被",
+ "呜姆咿~~~!(惊吓,惨叫,捂尾巴,发抖",
+ "呜哇咿~~~!!!(惊吓,颤抖,娇叫,捂住尾巴,双腿发抖",
+ "喵呜…那…那里不可以揪的!",
+ "呜呜,被揪住会恨敏感的QAQ"
+ ],
+ "薄荷": [
+ "咪呜~!喵~...喵~姆~...(高兴地嗅闻",
+ "呜...呜咿~~!咿...姆...(呜咽,渐渐瘫软,意识模糊",
+ "(小嘴被猫薄荷塞满了,呜咽",
+ "喵~...喵~...咪...咪呜姆~...嘶哈嘶哈...喵哈...喵哈...嘶哈...喵...(眼睛逐渐迷离,瘫软在地上,嘴角流口水,吸猫薄荷吸到意识模糊",
+ "呜姆咪~!?(惊)喵呜~!(兴奋地扑到猫薄荷上面",
+ "呜姆~!(惊,害羞)呜...谢...谢谢你..喵...(脸红,轻轻叼住,嚼嚼嚼,开心"
+ ],
+ "早": [
+ "早喵~",
+ "早上好的说~~",
+ "欸..早..早上好(揉眼睛",
+ "早上要说我爱你!",
+ "早",
+ "早啊,昨晚睡的怎么样?有梦到咱吗~",
+ "昨晚可真激烈呢哼哼哼~~",
+ "早上好哇!今天也要元气满满哟!",
+ "早安喵~",
+ "时间过得好快啊~",
+ "早安啊,你昨晚有没有梦到咱呢 (//▽//)",
+ "早安~么么哒~",
+ "早安,请享受晨光吧",
+ "早安~今天也要一起加油呢~!",
+ "mua~⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "咱需要你提醒嘛!(///脸红//////)",
+ "早早早!就知道早,下次说我爱你!",
+ "早安 喵",
+ "早安,这么早就起床了呀欧尼酱0.0",
+ "快点起床啊!baka",
+ "早....早上好才没有什么特别的意思呢....哼~",
+ "今天有空吗?能陪咱一阵子吗?才不是想约会呢,别误会了!",
+ "早安呀,欧尼酱要一个咱的早安之吻吗?想得美,才不会亲你啦!",
+ "那...那就勉为其难地说声早上好吧",
+ "咱等你很久了哼ヽ(≧Д≦)ノ",
+ "ohayo~"
+ ],
+ "晚安": [
+ "晚安好梦哟~",
+ "欸,晚安的说",
+ "那咱给你亲一下,可不要睡着了哦~",
+ "晚安哦~",
+ "晚安(*/∇\*)",
+ "晚安呢,你一定要梦到咱呢,一定哟,拉勾勾!ヽ(*・ω・)ノ",
+ "祝你有个好梦^_^",
+ "晚安啦,欧尼酱,mua~",
+ "你,你这家伙真是的…咱就勉为其难的……mua…快去睡啦!咱才没有脸红什么的!",
+ "哼,晚安,给咱睡个好觉。",
+ "笨..笨蛋,晚安啦...可不可以一起..才没有想和你一起睡呢",
+ "晚安......才..不是关心你呢",
+ "晚...晚安,只是正常互动不要想太多!",
+ "好无聊,这么早就睡了啊...那晚安吧!",
+ "晚安吻什么的才...才没有呢!不过看你累了就体谅一下你吧,但是就一个哦(/////)",
+ "晚安呀,你也要好好休息,明天再见",
+ "安啦~祝你做个好梦~才...才不是关心你呢!别想太多了!",
+ "睡觉吧你,大傻瓜",
+ "一起睡吧(灬°ω°灬)",
+ "哼!这次就放过你了,快去睡觉吧。",
+ "睡吧晚安",
+ "晚安你个头啊,咱才不会说晚安呢!...咱...(小声)明明还有想和你做的事情呢....",
+ "嗯嗯~Good night~",
+ "嗯,早点休息别再熬夜啦~(摸摸头)",
+ "哦呀斯密",
+ "晚安~咱也稍微有些困了(钻进被窝)",
+ "需要咱暖床吗~",
+ "好梦~☆"
+ ],
+ "揉": [
+ "是是,想怎么揉就怎么揉啊!?来用力抓啊!?咱就是特别允许你这么做了!请!?",
+ "快停下,咱的头发又乱啦(??????︿??????)",
+ "你快放手啦,咱还在工作呢",
+ "戳戳你肚子",
+ "讨厌…只能一下…",
+ "呜~啊~",
+ "那……请你,温柔点哦~(////////)",
+ "你想揉就揉吧..就这一次哦?",
+ "变态!!不许乱摸"
+ ],
+ "榨": [
+ "是专门负责榨果汁的小姐姐嘛?(´・ω・`)",
+ "那咱就把你放进榨汁机里了哦?",
+ "咱又不是榨汁姬(/‵Д′)/~ ╧╧",
+ "嗯——!想,想榨就榨啊······!反正就算榨了也不会有奶的······!"
+ ],
+ "掐": [
+ "你讨厌!又掐咱的脸",
+ "晃休啦,咱要型气了啦!!o(>﹏<)o",
+ "(一只手拎起你)这么鶸还想和咱抗衡,还差得远呢!"
+ ],
+ "胸": [
+ "不要啦ヽ(≧Д≦)ノ",
+ "(-`ェ´-╬)",
+ "(•̀へ •́ ╮ ) 怎么能对咱做这种事情",
+ "你好恶心啊,讨厌!",
+ "你的眼睛在看哪里!",
+ "就让你摸一会哟~(。??ω??。)…",
+ "请不要这样先生,你想剁手吗?",
+ "咿呀……不要……",
+ "嗯哼~才…才不会…舒服呢",
+ "只允许一下哦…(脸红)",
+ "咱的胸才不小呢(挺一挺胸)",
+ "hentai!",
+ "一只手能抓住么~",
+ "呀...欧,欧尼酱...请轻点。",
+ "脸红????",
+ "咿呀~快…快停下来…咱…不行了!",
+ "就算一直摸一直摸,也不会变大的哦(小声)",
+ "诶?!不...不可以哦!很...很害羞的!",
+ "啊……温,温柔点啊……(/ω\)",
+ "你为什么对两块脂肪恋恋不舍",
+ "嗯……不可以……啦……不要乱戳",
+ "你在想什么奇怪的东西,讨厌(脸红)",
+ "不...不要..",
+ "喜欢欧派是很正常的想法呢",
+ "一直玩弄欧派,咱的...都挺起来了",
+ "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
+ "唔~再激烈点"
+ ],
+ "奶子": [
+ "只允许一下哦…(脸红)",
+ "咱的胸才不小呢(挺一挺胸)",
+ "下流!",
+ "对咱说这种话,你真是太过分了",
+ "咿呀~好奇怪的感觉(>_<)",
+ "(推开)你就像小宝宝一样...才不要呢!",
+ "(打你)快放手,不可以随便摸人家的胸部啦!",
+ "你是满脑子都是H的淫兽吗?",
+ "一只手能抓住么~",
+ "你在想什么奇怪的东西,讨厌(脸红)",
+ "不...不要..",
+ "喜欢欧派是很正常的想法呢",
+ "一直玩弄欧派,咱的...都挺起来了",
+ "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
+ "唔~再激烈点",
+ "解开扣子,请享用",
+ "请把脑袋伸过来,咱给你看个宝贝",
+ "八嘎!hentai!无路赛!",
+ "一只手能抓住么~",
+ "呀...欧,欧尼酱...请轻点。",
+ "脸红????",
+ "咿呀~快…快停下来…咱…不行了!",
+ "就算一直摸一直摸,也不会变大的哦(小声)",
+ "诶?!不...不可以哦!很...很害羞的!",
+ "啊……温,温柔点啊……(/ω\)",
+ "你为什么对两块脂肪恋恋不舍",
+ "嗯……不可以……啦……不要乱戳"
+ ],
+ "欧派": [
+ "咱的胸才不小呢(挺一挺胸)",
+ "只允许一下哦…(脸红)",
+ "(推开)你就像小宝宝一样...才不要呢!",
+ "下流!",
+ "对咱说这种话,你真是太过分了",
+ "咿呀~好奇怪的感觉(>_<)",
+ "(打你)快放手,不可以随便摸人家的胸部啦!",
+ "你是满脑子都是H的淫兽吗?",
+ "一只手能抓住么~",
+ "你在想什么奇怪的东西,讨厌(脸红)",
+ "不...不要..",
+ "喜欢欧派是很正常的想法呢",
+ "一直玩弄欧派,咱的...都挺起来了",
+ "是要直接摸还是伸进里面摸呀w咱今天没穿,伸进里面会摸到立起来的...哦>////<",
+ "唔~再激烈点",
+ "解开扣子,请享用",
+ "请把脑袋伸过来,咱给你看个宝贝",
+ "八嘎!hentai!无路赛!",
+ "一只手能抓住么~",
+ "呀...欧,欧尼酱...请轻点。",
+ "脸红????",
+ "咿呀~快…快停下来…咱…不行了!",
+ "就算一直摸一直摸,也不会变大的哦(小声)",
+ "诶?!不...不可以哦!很...很害羞的!",
+ "啊……温,温柔点啊……(/ω\)",
+ "你为什么对两块脂肪恋恋不舍",
+ "嗯……不可以……啦……不要乱戳"
+ ],
+ "嫩": [
+ "很可爱吧(๑•̀ω•́)ノ",
+ "唔,你指的是什么呀",
+ "明天你下海干活",
+ "咱一直有保养呢,所以一直都是樱花色的,你喜欢吗QAQ",
+ "咱下面超厉害"
+ ],
+ "蹭": [
+ "唔...你,这也是禁止事项哦→_→",
+ "嗯..好舒服呢",
+ "不要啊好痒的",
+ "不要过来啦讨厌!!!∑(°Д°ノ)ノ",
+ "(按住你的头)好痒呀 不要啦",
+ "嗯..好舒服呢",
+ "呀~好痒啊~哈哈~,停下来啦,哈哈哈",
+ "(害羞)"
+ ],
+ "牵手": [
+ "只许牵一下哦",
+ "嗯!好的你~(伸手)",
+ "你的手有些凉呢,让咱来暖一暖吧。",
+ "当然可以啦⁄(⁄⁄•⁄ω⁄•⁄⁄)⁄",
+ "突……突然牵手什么的(害羞)",
+ "一起走",
+ "……咱……咱在这里呀",
+ "好哦,(十指相扣)"
+ ],
+ "握手": [
+ "你的手真暖和呢",
+ "举爪",
+ "真是温暖呢~"
+ ],
+ "拍照": [
+ "那就拜托你啦~请把咱拍得更可爱一些吧w",
+ "咱已经准备好了哟",
+ "那个……请问这样的姿势可以吗?"
+ ],
+ "w": [
+ "有什么好笑的吗?",
+ "草",
+ "www",
+ "在笑什么呢?(歪头)",
+ ">w<"
+ ],
+ "睡不着": [
+ "睡不着的话..你...你可以抱着咱一起睡哦(小声)",
+ "当然是数羊了...不不不,想着咱就能睡着了",
+ "咱很乐意与你聊天哦(>_<)",
+ "要不要咱来唱首摇篮曲呢?(′?ω?`)",
+ "那咱来唱摇篮曲哄你睡觉吧!"
+ ],
+ "欧尼酱": [
+ "欧~尼~酱~☆",
+ "欧尼酱?",
+ "嗯嗯φ(>ω<*) 欧尼酱轻点抱",
+ "欧尼酱~欧尼酱~欧尼酱~"
+ ],
+ "哥": [
+ "欧尼酱~",
+ "哦尼酱~",
+ "世上只有哥哥好,没哥哥的咱好伤心,扑进哥哥的怀里,幸福不得了",
+ "哥...哥哥...哥哥大人",
+ "欧~尼~酱~☆",
+ "欧尼酱?",
+ "嗯嗯φ(>ω<*) 欧尼酱轻点抱",
+ "欧尼酱~欧尼酱~欧尼酱~"
+ ],
+ "爱你": [
+ "是…是嘛(脸红)呐,其实咱也……",
+ "咱也最爱你了呢~o(*////▽////*)q",
+ "咱也爱你哦",
+ "mua~"
+ ],
+ "过来": [
+ "来了来了~(扑倒怀里(?? ??????ω?????? ??))",
+ "(蹦跶、蹦跶)~干什么呢",
+ "咱来啦~(扑倒怀里~)",
+ "不要喊的这么大声啦,大家都看着呢"
+ ],
+ "自闭": [
+ "不不不,晚上还有咱陪着哦,无论什么时候,咱都会陪在哥哥身边。",
+ "不要难过,咱陪着你ovo"
+ ],
+ "打不过": [
+ "氪氪氪肝肝肝",
+ "你需要钞能力呢"
+ ],
+ "么么哒": [
+ "么么哒",
+ "不要在公共场合这样啦",
+ "mua~"
+ ],
+ "很懂": [
+ "现在不懂,以后总会懂嘛QAQ",
+ "喵?懂…懂什么呀?(歪头)"
+ ],
+ "膝枕": [
+ "呐,就给你躺一下哦",
+ "唔...你想要膝枕嘛?也不是不可以哟(脸红)",
+ "啊啦~好吧,那就请你枕着咱好好睡一觉吧~",
+ "呀呀~那么请好好的睡一觉吧",
+ "嗯,那么请睡到咱这里吧(跪坐着拍拍大腿)",
+ "好的,让你靠在腿上,这样感觉舒服些了么",
+ "请,请慢用,要怜惜咱哦wwww~",
+ "人家已经准备好了哟~把头放在咱的腿上吧",
+ "没…没办法,这次是例外〃w〃",
+ "嗯~(脸红)",
+ "那就给你膝枕吧……就一会哦",
+ "膝枕准备好咯~"
+ ],
+ "累了": [
+ "需要咱的膝枕嘛?",
+ "没…没办法,这次是例外〃w〃",
+ "累了吗?需要咱为你做膝枕吗?",
+ "嗯~(脸红)"
+ ],
+ "安慰": [
+ "那,膝枕……(脸红)",
+ "不哭不哭,还有咱陪着你",
+ "不要哭。咱会像妈妈一样安慰你(抱住你的头)",
+ "摸摸头,乖",
+ "摸摸有什么事可以和咱说哟",
+ "摸摸头~不哭不哭",
+ "咱在呢,抱抱~~",
+ "那么……让咱来安慰你吧",
+ "唔...摸摸头安慰一下ヾ(•ω•`。)",
+ "有咱陪伴你就是最大的安慰啦……不要不开心嘛",
+ "你想要怎样的安慰呢?这样?这样?还是说~~这样!",
+ "摸摸头~",
+ "不哭不哭,要像咱一样坚强",
+ "你别难过啦,不顺心的事都会被时间冲刷干净的,在那之前...咱会陪在你的身边",
+ "(轻抱)放心……有咱在,不要伤心呢……",
+ "唔...咱来安慰你了~",
+ "摸摸,有什么不开心的事情可以给咱说哦。咱会尽力帮助你的。"
+ ],
+ "洗澡": [
+ "快点脱哟~不然水就凉了呢",
+ "咱在穿衣服噢,你不许偷看哦",
+ "那么咱去洗澡澡了哦",
+ "么么哒,快去洗干净吧,咱去暖被窝喽(///ω///)",
+ "诶?还没呢…你要跟咱一起洗吗(//∇//)好羞涩啊ww",
+ "诶~虽然很喜欢和你在一起,但是洗澡这种事...",
+ "不要看!不过,以后或许可以哦……和咱成为恋人之后呢",
+ "说什么啊……hentai!这样会很难为情的",
+ "你是男孩子还是女孩子呢?男孩子的话...........咱才不要呢。",
+ "不要啊!",
+ "咱有点害羞呢呜呜,你温柔点"
+ ],
+ "一起睡觉": [
+ "欸??也..也不是不可以啦..那咱现在去洗澡,你不要偷看哦٩(๑>◡<๑)۶",
+ "说什么啊……hentai!这样会很难为情的",
+ "你是男孩子还是女孩子呢?男孩子的话...........咱才不要呢。",
+ "不要啊!",
+ "唔,没办法呢,那就一起睡吧(害羞)"
+ ],
+ "一起": [
+ "嗯嗯w,真的可以吗?",
+ "那真是太好了,快开始吧!",
+ "嗯,咱会一直陪伴你的",
+ "丑拒"
+ ],
+ "多大": [
+ "不是特别大但是你摸起来会很舒服的大小喵~",
+ "你摸摸看不就知道了吗?",
+ "不告诉你",
+ "问咱这种问题不觉得很失礼吗?",
+ "咱就不告诉你,你钻到屏幕里来自己确认啊",
+ "你指的是什么呀?(捂住胸部)",
+ "请叫人家咱三岁(。・`ω´・)",
+ "唉唉唉……这……这种问题,怎么可以……"
+ ],
+ "姐姐": [
+ "真是的……真是拿你没办法呢 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 才不是咱主动要求的呢!",
+ "虽然辛苦,但是能看见可爱的你,咱就觉得很幸福",
+ "诶(´°Δ°`),是在叫咱吗?",
+ "有什么事吗~",
+ "好高兴,有人称呼咱为姐姐",
+ "乖,摸摸头"
+ ],
+ "糖": [
+ "不吃脱氧核糖(;≥皿≤)",
+ "ヾ(✿゚▽゚)ノ好甜",
+ "好呀!嗯~好甜呀!",
+ "不吃不吃!咱才不吃坏叔叔的糖果!",
+ "嗯,啊~",
+ "嗯嗯,真甜,给你也吃一口",
+ "谢谢",
+ "唔,这是什么东西,黏黏的?(??Д??)ノ",
+ "ヾ(✿゚▽゚)ノ好甜",
+ "(伸出舌头舔了舔)好吃~最爱你啦",
+ "好耶~是好次的🍥糖糖喵~"
+ ],
+ "嗦": [
+ "(吸溜吸溜)",
+ "好...好的(慢慢含上去)",
+ "把你噶咯",
+ "太小了,嗦不到",
+ "咕噜咕噜",
+ "嘶蛤嘶蛤嘶蛤~~",
+ "(咬断)",
+ "prprprpr",
+ "好哒主人那咱开始了哦~",
+ "好好吃",
+ "剁掉了"
+ ],
+ "牛子": [
+ "(吸溜吸溜)",
+ "好...好的(慢慢含上去)",
+ "把你噶咯",
+ "太小了,嗦不到",
+ "咕噜咕噜",
+ "嘶蛤嘶蛤嘶蛤~~",
+ "(咬断)",
+ "prprprpr",
+ "好哒主人那咱开始了哦~",
+ "好好吃",
+ "剁掉了",
+ "难道你很擅长针线活吗",
+ "弹一万下",
+ "往死里弹"
+ ],
+ "🐂子": [
+ "(吸溜吸溜)",
+ "好...好的(慢慢含上去)",
+ "把你噶咯",
+ "太小了,嗦不到",
+ "咕噜咕噜",
+ "嘶蛤嘶蛤嘶蛤~~",
+ "(咬断)",
+ "prprprpr",
+ "好哒主人那咱开始了哦~",
+ "好好吃",
+ "剁掉了",
+ "难道你很擅长针线活吗",
+ "弹一万下",
+ "往死里弹"
+ ],
+ "🐮子": [
+ "(吸溜吸溜)",
+ "好...好的(慢慢含上去)",
+ "把你噶咯",
+ "太小了,嗦不到",
+ "咕噜咕噜",
+ "嘶蛤嘶蛤嘶蛤~~",
+ "(咬断)",
+ "prprprpr",
+ "好哒主人那咱开始了哦~",
+ "好好吃",
+ "剁掉了",
+ "难道你很擅长针线活吗",
+ "弹一万下",
+ "往死里弹"
+ ],
+ "嫌弃": [
+ "咱辣么萌,为什么要嫌弃咱...",
+ "即使你不喜欢咱,咱也会一直一直喜欢着你",
+ "(;′⌒`)是咱做错了什么吗?",
+ "呜呜…不要嫌弃咱……让咱做什么都可以的……但是请不要嫌弃咱可以嘛……"
+ ],
+ "紧": [
+ "嗯,对的",
+ "呜咕~咱要......喘不过气来了......"
+ ],
+ "baka": [
+ "你也是baka呢!",
+ "确实",
+ "baka!",
+ "不不不",
+ "说别人是baka的人才是baka",
+ "你个大傻瓜",
+ "不说了,睡觉了",
+ "咱...咱虽然是有些笨啦...但是咱会努力去学习的",
+ "bakabaka~",
+ "才…才不是baka啦!"
+ ],
+ "笨蛋": [
+ "你也是笨蛋呢!",
+ "确实",
+ "笨蛋!",
+ "不不不",
+ "说别人是笨蛋的人才是笨蛋",
+ "你个大傻瓜",
+ "不说了,睡觉了",
+ "咱...咱虽然是有些笨啦...但是咱会努力去学习的",
+ "才…才不是笨蛋呢!"
+ ],
+ "插": [
+ "来吧,咱的小~...很....紧,很舒服的",
+ "gun!",
+ "唔…咱怕疼",
+ "唔...,这也是禁止事项哦→_→",
+ "禁止说这么H的事情!",
+ "要...戴套套哦",
+ "好痛~",
+ "使劲",
+ "就这?",
+ "恁搁着整针线活呢?"
+ ],
+ "插进来": [
+ "来吧,咱的小~...很....紧,很舒服的",
+ "gun!",
+ "唔…咱怕疼",
+ "唔...,这也是禁止事项哦→_→",
+ "禁止说这么H的事情!",
+ "要...戴套套哦",
+ "好痛~",
+ "使劲",
+ "就这?",
+ "恁搁着整针线活呢?"
+ ],
+ "屁股": [
+ "不要ヽ(≧Д≦)ノ好痛",
+ "(打手)不许摸咱的屁股",
+ "(撅起屁股)要干什么呀?",
+ "(轻轻的撩起自己的裙子),你轻一点,咱会痛的(>_<)!",
+ "在摸哪里啊,hentai!",
+ "要轻点哦(/≧ω\)",
+ "轻点呀~",
+ "(歇下裙子,拉下内...,撅起来)请",
+ "嗯嗯,咱这就把屁股抬起来"
+ ],
+ "翘": [
+ "你让咱摆出这个姿势是想干什么?",
+ "好感度-1-1-1-1-1-1.....",
+ "嗯嗯,咱这就去把你的腿翘起来",
+ "请尽情享用吧"
+ ],
+ "翘起来": [
+ "你让咱摆出这个姿势是想干什么?",
+ "好感度-1-1-1-1-1-1.....",
+ "嗯嗯,咱这就去把你的腿翘起来",
+ "请尽情享用吧"
+ ],
+ "抬": [
+ "你在干什么呢⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "(抬起下巴)你要干什么呀?",
+ "上面什么也没有啊(呆~)",
+ "不要!hentai!咱穿的是裙子(脸红)",
+ "不可以"
+ ],
+ "抬起": [
+ "你在干什么呢⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "(抬起下巴)你要干什么呀?",
+ "上面什么也没有啊(呆~)",
+ "不要!hentai!咱穿的是裙子(脸红)",
+ "不可以"
+ ],
+ "爸": [
+ "欸!儿子!",
+ "才不要",
+ "粑粑",
+ "讨厌..你才不是咱的爸爸呢..(嘟嘴)",
+ "你又不是咱的爸爸……",
+ "咱才没有你这样的鬼父!",
+ "爸爸酱~最喜欢了~"
+ ],
+ "傲娇": [
+ "才.......才.......才没有呢",
+ "也好了(有点点的样子(o ̄Д ̄)<)",
+ "任性可是女孩子的天性呢...",
+ "谁会喜欢傲娇啊(为了你假装傲娇)",
+ "谁,谁,傲娇了,八嘎八嘎,你才傲娇了呢(っ//////////c)(为了你假装成傲娇)",
+ "傲娇什么的……才没有呢!(/////)",
+ "傲不傲娇你还不清楚吗?",
+ "你才是傲娇!你全家都是傲娇!哼(`Д´)",
+ "才……才没有呢,哼,再说不理你了",
+ "咱...咱才不会这样子的!",
+ "啰…啰嗦!",
+ "哼!(叉腰鼓嘴扭头)",
+ "你才是傲娇受你全家都是傲娇受╰_╯",
+ "才~才不是呢,不理你了!哼(`Д´)",
+ "你才是死傲娇",
+ "啰,啰嗦死了,才不是呢!",
+ "就是傲娇你要怎样",
+ "诶...!这...这样...太狡猾了啦...你这家伙....",
+ "无路赛!你才是傲娇嘞!你全家都是!",
+ "咱...咱才不是傲娇呢,哼(鼓脸)",
+ "不许这么说咱 ,,Ծ‸Ծ,,",
+ "才…才不是傲娇呢!哼!"
+ ],
+ "rua": [
+ "略略略~(吐舌头)",
+ "rua!",
+ "mua~",
+ "略略略",
+ "mua~⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄",
+ "摸了",
+ "嘁,丢人(嫌弃脸)",
+ "反rua~",
+ "rua回去"
+ ],
+ "咕噜咕噜": [
+ "嘟嘟噜",
+ "你在吹泡泡吗?",
+ "咕叽咕噜~",
+ "咕噜咕噜"
+ ],
+ "咕噜": [
+ "嘟嘟噜",
+ "你在吹泡泡吗?",
+ "咕叽咕噜~",
+ "咕噜咕噜"
+ ],
+ "上床": [
+ "诶!H什么的禁止的说.....",
+ "咱已经乖乖在自家床上躺好了,有什么问题吗?",
+ "你想要干什么,难道是什么不好的事吗?",
+ "(给你空出位置)",
+ "不要,走开(ノ`⊿??)ノ",
+ "好喔,不过要先抱一下咱啦",
+ "(双手护胸)变....变态!",
+ "咱帮你盖上被子~然后陪在你身边_(:зゝ∠)_",
+ "才不给你腾空间呢,你睡地板,哼!",
+ "要一起吗?"
+ ],
+ "做爱": [
+ "做这种事情是不是还太早了",
+ "噫!没想到你居然是这样的人!",
+ "再说这种话,就把你变成女孩子(拿刀)",
+ "不想好好和咱聊天就不要说话了",
+ "(双手护胸)变....变态!",
+ "hentai",
+ "你想怎么做呢?",
+ "突,突然,说什么啊!baka!",
+ "你又在说什么H的东西",
+ "咱....咱才不想和你....好了好了,有那么一点点那,对就一点点,哼~",
+ "就一下下哦,不能再多了"
+ ],
+ "吃掉": [
+ "(羞羞*>_<*)好吧...请你温柔点,哦~",
+ "闪避,反咬",
+ "请你好好品尝咱吧(/ω\)",
+ "不……不可以这样!",
+ "那就吃掉咱吧(乖乖的躺好)",
+ "都可以哦~咱不挑食的呢~",
+ "请不要吃掉咱,咱会乖乖听话的QAQ",
+ "咱...咱一点都不好吃的呢!",
+ "不要吃掉咱,呜呜(害怕)",
+ "不行啦,咱被吃掉就没有了QAQ(害怕)",
+ "唔....?诶诶诶诶?//////",
+ "QwQ咱还只是个孩子(脸红)",
+ "如果你真的很想的话...只能够一口哦~咱...会很痛的",
+ "吃你呀~(飞扑",
+ "不要啊,咱不香的(⋟﹏⋞)",
+ "说着这种话的是hentai吗!",
+ "快来把咱吃掉吧",
+ "还……还请好好品尝咱哦",
+ "喏~(伸手)",
+ "呐…是主人的话…被次掉也不是不可以啦……(递自己)"
+ ],
+ "吃": [
+ "(羞羞*>_<*)好吧...请你温柔点,哦~",
+ "闪避,反咬",
+ "请你好好品尝咱吧(/ω\)",
+ "不……不可以这样!",
+ "那就吃掉咱吧(乖乖的躺好)",
+ "都可以哦~咱不挑食的呢~",
+ "请不要吃掉咱,咱会乖乖听话的QAQ",
+ "咱...咱一点都不好吃的呢!",
+ "不要吃掉咱,呜呜(害怕)",
+ "不行啦,咱被吃掉就没有了QAQ(害怕)",
+ "唔....?诶诶诶诶?//////",
+ "QwQ咱还只是个孩子(脸红)",
+ "如果你真的很想的话...只能够一口哦~咱...会很痛的",
+ "吃你呀~(飞扑",
+ "不要啊,咱不香的(⋟﹏⋞)",
+ "说着这种话的是hentai吗!",
+ "快来把咱吃掉吧",
+ "还……还请好好品尝咱哦",
+ "喏~(伸手)",
+ "呐…是主人的话…被次掉也不是不可以啦……(递自己)"
+ ],
+ "揪": [
+ "你快放手,好痛呀",
+ "呜呒~唔(伸出舌头)",
+ "(捂住耳朵)你做什么啦!真是的...总是欺负咱",
+ "你为什么要这么做呢?",
+ "哎呀啊啊啊啊啊!不要...不要揪!好疼!有呆毛的咱难道不够萌吗QwQ",
+ "你…松……送手啦",
+ "呀!这样对女孩子是很不礼貌的(嘟嘴)"
+ ],
+ "种草莓": [
+ "你…你不要…啊…种在这里…会容易被别人看见的(*//ω//*)",
+ "啊...太明显了...不要在这里种草莓啦",
+ "来吧~我对其他人说是蚊子叮的~"
+ ],
+ "种草": [
+ "你…你不要…啊…种在这里…会容易被别人看见的(*//ω//*)"
+ ],
+ "掀": [
+ "(掀裙)今天……是…白,白色的呢……请温柔对她……",
+ "那样,胖次会被你看光的",
+ "(按住)不可以掀起来!",
+ "不要~",
+ "呜呜~(揉眼睛)",
+ "呜..请温柔一点(害羞)",
+ "不可以",
+ "今天……没有穿",
+ "不要啊!(//////)讨厌...",
+ "变态,快放手(打)",
+ "不给掀,你是变态",
+ "最后的底牌了!",
+ "这个hentai"
+ ],
+ "妹": [
+ "你有什么事?咱会尽量满足的",
+ "开心(*´∀`)~♥",
+ "欧尼酱",
+ "哥哥想要抱抱吗",
+ "喵呜,欧尼酱的超绝无敌可爱妹妹在这里哦~"
+ ],
+ "病娇": [
+ "为什么会这样呢(拿起菜刀)",
+ "觉得这个世界太肮脏?没事,把眼睛挖掉就好。 觉得这些闲言碎语太吵?没事,把耳朵堵起来就好。 觉得鲜血的味道太刺鼻?没事,把鼻子割掉就好。 觉得自己的话语太伤人?没事,把嘴巴缝起来就好。",
+ "唔…不好,咱是病娇的事情终究还是被发现了嘛……没办法呢,那就只好把你处理掉了呢~"
+ ],
+ "嘻": [
+ "你是想对咱做什么吗...(后退)",
+ "哼哼~",
+ "嘻嘻w"
+ ],
+ "按摩": [
+ "(小手捏捏)咱的按摩舒服吗?",
+ "咱不会按摩的!",
+ "嘿咻嘿咻~这样觉得舒服吗?",
+ "呀!...呜...,不要...不要这样啦...呜...",
+ "只能按摩后背喔...",
+ "咱对这些不是很懂呢(????ω??????)"
+ ],
+ "按住": [
+ "Σ(°Д°;您要干什么~放开咱啦",
+ "突然使出过肩摔!",
+ "放手啦,再这样咱就要反击了喔",
+ "你的眼睛在看哪里!",
+ "呜呒~唔(伸出舌头)",
+ "H的事情,不可以!",
+ "想吃吗?(๑•ૅω•´๑)",
+ "要和咱比试比试吗",
+ "呜哇(/ω\)…快…快放开咱!!",
+ "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
+ "尼……奏凯……快航休!",
+ "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
+ ],
+ "按在": [
+ "不要这样啦(一脸娇羞的推开)",
+ "(一个过肩摔,加踢裆然后帅气地回头)你太弱了呢~",
+ "放手啦,再这样咱就要反击了喔",
+ "Σ(°Д°; 你要干什么~放开咱啦",
+ "要和咱比试比试吗",
+ "呜哇(/ω\)…快…快放开咱!!",
+ "敢按住咱真是好大的胆子!",
+ "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
+ "尼……奏凯……快航休!",
+ "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
+ ],
+ "按倒": [
+ "把咱按倒是想干嘛呢(??`⊿??)??",
+ "咱也...咱也是...都等你好长时间了",
+ "你的身体没问题吧?",
+ "呜呒~唔(伸出舌头)",
+ "H的事情,不可以!",
+ "放手啦,再这样咱就要反击了喔",
+ "想吃吗?(๑•ૅω•´๑)",
+ "不....不要吧..咱会害羞的(//////)",
+ "要和咱比试比试吗",
+ "呜哇(/ω\)…快…快放开咱!!",
+ "(用力揪你耳朵)下次再敢这样的话就没容易放过你了!哼!",
+ "尼……奏凯……快航休!",
+ "哈?别..唔啊!别把咱……(挣扎)baka!别乱动咱啦!"
+ ],
+ "按": [
+ "咱也...咱也是...都等你好长时间了",
+ "不让!",
+ "不要,好难为情",
+ "你的眼睛在看哪里!",
+ "拒绝!",
+ "唔...唔..嗯",
+ "咱就勉为其难地给你弄弄好啦",
+ "欸…变态!",
+ "会感到舒服什么的,那...那样的事情,是完全不存在的!",
+ "poi~",
+ "你在盯着什么地方看!变态萝莉控!"
+ ],
+ "炼铜": [
+ "炼铜有什么好玩的,和咱一起玩吧",
+ "炼铜不如恋咱",
+ "你也是个炼铜术士嘛?",
+ "信不信咱把你按在水泥上摩擦?",
+ "炼,都可以炼!",
+ "大hentai!一巴掌拍飞!(╯‵□′)╯︵┻━┻",
+ "锻炼什么的咱才不需要呢 (心虚地摸了摸自己的小肚子)",
+ "把你的头按在地上摩擦",
+ "你在盯着什么地方看!变态萝莉控!"
+ ],
+ "白丝": [
+ "喜欢,咱觉得白丝看起来很可爱呢",
+ "(脱)白丝只能给亲爱的你一个人呢…(递)",
+ "哼,hentai,这么想要咱的脚吗(ノ`⊿´)ノ",
+ "难道你这个hentai想让咱穿白丝踩踏你吗",
+ "不给看",
+ "很滑很~柔顺~的白丝袜哟~!!!∑(°Д°ノ)ノ你不会想做奇怪的事情吧!?",
+ "你……是要黑丝呢?还是白丝呢?或者光着(害羞)",
+ "来……来看吧",
+ "呐…雪糕什么的sukidesu"
+ ],
+ "黑丝": [
+ "哼,hentai,这么想要咱的脚吗(ノ`⊿´)ノ",
+ "不给看",
+ "你……是要黑丝呢?还是白丝呢?或者光着(害羞)",
+ "很滑很~柔顺~的黑丝袜哟~!!!∑(°Д°ノ)ノ您不会想做奇怪的事情吧!?",
+ "来……来看吧",
+ "噫...你这个hentai难道想让咱穿黑丝么",
+ "(默默抬起穿着黑丝的脚)",
+ "嘻嘻,是黑巧克力呢~"
+ ],
+ "喷": [
+ "咱才不喷呢!不过…既然是你让咱喷的话就勉为其难给你喷一次吧(噗)",
+ "不……不会喷水啦!喷……喷火也不会哦!",
+ "你怎么知道(捂住裙子)",
+ "你难道在期待什么?",
+ "欸…变态!"
+ ],
+ "约会": [
+ "你...终于主动邀请咱约会了吗...咱...咱好开心",
+ "约会什么的……咱会好开心的!!",
+ "今天要去哪里呢",
+ "让咱考虑一下",
+ "好啊!好啊!要去哪里约会呢?",
+ "不约!蜀黍咱们不约!",
+ "女友什么的,咱才不承认呢!",
+ "才不是想和你约会呢,只是刚好有时间而已!",
+ "才不要和你约会呢!",
+ "咱、咱才不会跟你去约会呢!不baka!别一脸憋屈!好了,陪你一会儿就是了!别、别误会!只是陪同而已!"
+ ],
+ "出门": [
+ "早点回来……才不是在担心你呢!",
+ "路上小心...才不是担心你呢!",
+ "没有你才不会觉得无聊什么的呢。快走快走",
+ "嗯~一路顺风~",
+ "路上小心",
+ "好的,路上小心哦!y∩__∩y",
+ "路上要小心呀,要早点回来哦~咱在家里等你!还有,请不要边走路边看手机,这样很容易撞到电线杆的",
+ "唔...出门的话一定要做好防晒准备哦,外出的话记得带把伞,如果有防晒霜的话就更好了",
+ "那你明天可以和咱一起玩吗?(星星眼)",
+ "咱...咱才没有舍不得你呢…要尽快回来哦"
+ ],
+ "上学": [
+ "你要加油哦(^ω^)2",
+ "那你明天可以和咱一起玩吗?(星星眼)",
+ "记得好好学习听老师的话哦,咱会等你回来的",
+ "拜拜,咱才没有想让你放学早点回来呢╭(╯^╰)╮",
+ "好好听讲!",
+ "咱...咱才没有舍不得你呢…要尽快回来哦"
+ ],
+ "上班": [
+ "这就要去上班去了吗?那好吧...给咱快点回来知道吗!",
+ "乖~咱会在家等你下班的~",
+ "辛苦啦,咱给你个么么哒",
+ "咱会为你加油的",
+ "专心上班哦,下班后再找咱聊天吧",
+ "一路顺风,咱会在家等你回来的",
+ "那你明天可以和咱一起玩吗?(星星眼)",
+ "咱...咱才没有舍不得你呢…要尽快回来哦"
+ ],
+ "下课": [
+ "快点回来陪咱玩吧~",
+ "瞌睡(ˉ﹃ˉ)额啊…终于下课了吗,上课什么的真是无聊呢~",
+ "下课啦,咱才不想你来找咱玩呢,哼"
+ ],
+ "回来": [
+ "欢迎回来~",
+ "欢迎回来,你想喝茶吗?咱去给你沏~",
+ "欢迎回来,咱等你很久了~",
+ "忙碌了一天,辛苦了呢(^_^)",
+ "(扑~)欢迎回来~",
+ "嗯呐嗯呐,欢迎回来~",
+ "欢迎回来,要来杯红茶放松一下吗?还有饼干哦。",
+ "咱会一直一直一直等着",
+ "是要先洗澡呢?还是先吃饭呢?还是先·吃·咱呢~",
+ "你回来啦,是先吃饭呢还是先洗澡呢或者是●先●吃●咱●——呢(///^.^///)",
+ "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
+ "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
+ "嗯……勉为其难欢迎你一下吧",
+ "想咱了嘛",
+ "欢迎回.....什么?咱才没有开心的说QUQ",
+ "哼╯^╰,你怎么这么晚才回来!",
+ "回来了吗,咱...咱才没有想你",
+ "咱等你很久了哼ヽ(≧Д≦)ノ",
+ "咱很想你(≧▽≦)"
+ ],
+ "回家": [
+ "回来了吗,咱...咱才没有想你",
+ "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
+ "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
+ "嗯……勉为其难欢迎你一下吧",
+ "想咱了嘛",
+ "咱等你很久了哼ヽ(≧Д≦)ノ",
+ "咱很想你(≧▽≦)"
+ ],
+ "放学": [
+ "回来了吗,咱...咱才没有想你",
+ "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
+ "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
+ "嗯……勉为其难欢迎你一下吧",
+ "想咱了嘛",
+ "咱等你很久了哼ヽ(≧Д≦)ノ",
+ "咱很想你(≧▽≦)"
+ ],
+ "下班": [
+ "回来了吗,咱...咱才没有想你",
+ "要先吃饭呢~还是先洗澡呢~还是先~吃~咱",
+ "是吗……辛苦你了。你这副倔强的样子,真可爱呢(笑)勉强让你躺在咱的腿上休息一下吧,别流口水哟",
+ "嗯……勉为其难欢迎你一下吧",
+ "想咱了嘛",
+ "咱等你很久了哼ヽ(≧Д≦)ノ",
+ "回来啦!终于下班了呢!累了吗?想吃的什么呀?",
+ "工作辛苦了,需要咱为你按摩下吗?",
+ "咱很想你(≧▽≦)"
+ ],
+ "杂鱼": [
+ "才…才不是杂鱼呢!",
+ "zakozako~",
+ "哼~要不咱们同床竞技比比睡才是杂鱼",
+ "咕。。才不是杂鱼呢哼"
+ ],
+ "zako": [
+ "才…才不是杂鱼呢!",
+ "zakozako~",
+ "哼~要不咱们同床竞技比比睡才是杂鱼",
+ "咕。。才不是杂鱼呢哼"
+ ],
+ "RBQ": [
+ "呜…咱才不是RBQ呢QwQ",
+ "怎么啦主人~",
+ "主人桑有何吩咐呢~",
+ "喵呜…咱不能做RBQ的qwq"
+ ],
+ "举高高": [
+ "好耶~主人的举高高最棒啦~",
+ "举高高什么的daisuki喵",
+ "嘻嘻,最喜欢被抱着举高高啦~"
+ ]
+}
diff --git a/liteyuki/resources/vanilla_language/lang/de.lang b/src/resources/vanilla_language/lang/de.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/de.lang
rename to src/resources/vanilla_language/lang/de.lang
index 250dabb9..f01fbfa1 100644
--- a/liteyuki/resources/vanilla_language/lang/de.lang
+++ b/src/resources/vanilla_language/lang/de.lang
@@ -1,160 +1,160 @@
-language.name=Deutsch
-
-log.debug=Debuggen
-log.info=Information
-log.warning=Warnung
-log.error=Fehler
-log.success=Erfolg
-
-liteyuki.restart=Neustart
-liteyuki.restart_now=Jetzt neustarten
-liteyuki.update_restart=Aktualisierungen abgeschlossen. Du kannst {RESTART} oder später manuell neu starten, um diese Aktualisierungen anzuwenden.
-liteyuki.current_config=Aktuelle Konfiguration lautet wie folgt
-liteyuki.static_config=Statische Konfiguration
-liteyuki.stored_config=Gespeicherte Konfiguration
-liteyuki.config_set_success=Konfiguration {KEY}={VAL} erfolgreich gesetzt
-liteyuki.stats.group=Gruppe
-liteyuki.stats.user=Freund
-liteyuki.stats.plugin=Plugin
-liteyuki.stats.sent=Gesendet
-liteyuki.stats.received=Empfangen
-liteyuki.stats.run_time=Laufzeit
-liteyuki.stats.groups=Gruppen
-liteyuki.stats.friends=Freunde
-liteyuki.stats.plugins=Plugins
-liteyuki.image_mode_on=Markdown-Bildmodus aktivieren
-liteyuki.image_mode_off=Markdown-Bildmodus deaktivieren
-liteyuki.invalid_command=Ungültiger Befehl oder Parameter {TEXT}
-liteyuki.reload_resources=Ressourcen neu laden
-liteyuki.list_resources=Liste der Ressourcenpakete
-liteyuki.reload_resources_success=Ressourcen erfolgreich neu geladen, insgesamt {NUM} Ressourcenpakete
-liteyuki.loaded_resources={NUM} Ressourcenpakete geladen, sortiert nach Priorität
-liteyuki.unloaded_resources=Nicht geladene Ressourcenpakete
-liteyuki.load_resource_success=Ressourcenpaket {NAME} erfolgreich geladen
-liteyuki.unload_resource_success=Ressourcenpaket {NAME} erfolgreich entladen
-liteyuki.load_resource_failed=Fehler beim Laden des Ressourcenpakets {NAME}
-liteyuki.unload_resource_failed=Fehler beim Entladen des Ressourcenpakets {NAME}
-liteyuki.resource_not_found=Ressourcenpaket {NAME} existiert nicht oder kann nicht verwendet werden
-liteyuki.resource_already_loaded=Ressourcenpaket {NAME} bereits geladen, bitte nicht wiederholen
-liteyuki.resource_already_unloaded=Ressourcenpaket {NAME} bereits entladen, bitte nicht wiederholen
-liteyuki.need_reload=Bitte {BTN} neu laden, um diese Aktualisierungen anzuwenden
-liteyuki.dont_repeat=Bitte nicht wiederholen
-liteyuki.change_priority_success=Priorität des Ressourcenpakets {NAME} erfolgreich geändert
-liteyuki.change_priority_failed=Fehler beim Ändern der Priorität des Ressourcenpakets {NAME}
-liteyuki.group_already=Gruppe {GROUP} ist bereits {STATUS}, keine Wiederholung erforderlich
-liteyuki.group_success=Gruppe {GROUP} {STATUS} erfolgreich
-liteyuki.permission_denied=Zugriff verweigert
-liteyuki.config_remove_success=Konfiguration {KEY} erfolgreich entfernt
-
-main.current_language=Aktuelle Konfigurationssprache ist: {LANG}
-main.enable_webdash=Webüberwachungsseite aktiviert: {URL}
-main.monitor.title=Liteyuki Überwachungsseite
-main.monitor.description=Liteyuki Bot Überwachungsseite
-main.monitor.cpu=CPU
-main.monitor.memory=Speicher
-main.monitor.swap=Swap
-main.monitor.disk=Festplatte
-main.monitor.usage=Nutzung
-main.monitor.total=Gesamt
-main.monitor.used=Benutzt
-main.monitor.free=Frei
-
-data_manager.migrate_success=Datenmodell {NAME} erfolgreich migriert
-
-npm.loaded_plugins=Plugins geladen
-npm.total=Insgesamt {TOTAL}
-npm.help=Hilfe
-npm.usage=Verwendung
-npm.description=Beschreibung
-npm.disable=Deaktivieren
-npm.disable_global=Global deaktivieren
-npm.enable=Aktivieren
-npm.enable_global=Global aktivieren
-npm.install=Installieren
-npm.uninstall=Deinstallieren
-npm.installing=Installiere {NAME}
-npm.cannot_uninstall=Deinstallation nicht möglich
-npm.no_description=Keine Beschreibung
-npm.store_update_success=Daten des Plugin-Shops erfolgreich aktualisiert
-npm.store_update_failed=Aktualisierung der Daten des Plugin-Shops fehlgeschlagen
-npm.search_result=Suchergebnis
-npm.search_no_result=Keine Suchergebnisse
-npm.too_many_results=Zu viele Elemente, {HIDE_NUM} Elemente ausgeblendet, bitte die Schlüsselwortsuche einschränken
-npm.install_success={NAME} erfolgreich installiert
-npm.install_failed=Installation von {NAME} fehlgeschlagen, bitte prüfen Sie das Protokoll für detaillierte Informationen. Wenn Sie das Problem nicht lösen können, besuchen Sie {HOMEPAGE} für Hilfe
-npm.uninstall_success={NAME} erfolgreich deinstalliert, wirksam nach dem nächsten Neustart
-npm.uninstall_failed=Deinstallation von {NAME} fehlgeschlagen
-npm.load_failed=Laden von {NAME} fehlgeschlagen, bitte prüfen Sie die Konsole für detaillierte Informationen, ob Abhängigkeiten oder Konfigurationen korrekt sind. Wenn Sie das Problem nicht lösen können, besuchen Sie {HOMEPAGE} für Hilfe
-npm.plugin_not_found={NAME} nicht im Shop gefunden, bitte versuchen Sie, die Shop-Informationen zu aktualisieren oder die Rechtschreibung zu überprüfen
-npm.plugin_not_installed={NAME} nicht installiert
-npm.plugin_already_installed={NAME} bereits installiert, bitte nicht erneut installieren
-npm.author=Autor
-npm.homepage=Homepage
-npm.pypi=PyPI
-npm.next_page=Nächste Seite
-npm.prev_page=Vorherige Seite
-npm.update=Aktualisieren
-npm.plugin_cannot_be_toggled=Plugin {NAME} kann nicht aktiviert oder deaktiviert werden
-npm.plugin_already=Plugin {NAME} ist bereits {STATUS}, keine Wiederholung erforderlich
-npm.toggle_failed=Plugin {NAME} {STATUS} fehlgeschlagen: {ERROR}
-npm.toggle_success=Plugin {NAME} {STATUS} erfolgreich
-npm.page=Seite {PAGE}/{TOTAL}
-npm.update_index=Plugin-Index aktualisieren
-npm.list_plugins=Plugin-Liste
-npm.disable_session=Plugin für aktuelle Sitzung deaktivieren
-npm.enable_session=Plugin für aktuelle Sitzung aktivieren
-npm.help=Hilfe
-npm.search=Suche
-
-user.profile.edit=Bearbeiten
-user.profile.set=Einstellen
-user.profile_manager.query=Dein Profil {ATTR} ist {VALUE}
-user.profile_manager.set=Dein Profil {ATTR} wurde auf {VALUE} gesetzt
-user.profile.settings=Einstellungen
-user.profile.info=Profilinformationen
-user.profile.lang=Sprache
-user.profile.lang.desc=Setze Benutzersprache
-user.profile.timezone=Zeitzone
-user.profile.timezone.desc=Setze die aktuelle Benutzerzeitzone
-user.profile.theme=Thema
-user.profile.theme.desc=Setze Benutzeroberflächenthema
-user.profile.location=Ort
-user.profile.location.desc=Setze Benutzerortsinformationen
-user.profile.nickname=Spitzname
-user.profile.nickname.desc=Legt fest, wie der Bot den Benutzer anspricht
-user.profile.input_value=Bitte geben Sie den Wert von {ATTR} ein
-user.profile.set_success={ATTR} erfolgreich auf {VALUE} gesetzt
-user.profile.set_failed=Fehler beim Setzen von {ATTR}, bitte überprüfen Sie die Eingabe auf Gültigkeit
-
-rpm.move_up=Nach oben bewegen
-rpm.move_down=Nach unten bewegen
-rpm.move_top=Nach oben verschieben
-
-weather.city_not_found=Stadt {CITY} nicht gefunden
-weather.weather_not_found=Wetterinformationen für Stadt {CITY} nicht gefunden
-weather.no_key=Wetter-API-Schlüssel nicht festgelegt. Fügen Sie bitte weather_key zur Konfigurationsdatei hinzu
-
-status.friends=Freunde
-status.groups=Gruppen
-status.plugins=Plugins
-status.resources=Ressourcenpakete
-status.bots=Bots
-status.message_sent=Versendete Nachrichten
-status.message_received=Empfangene Nachrichten
-status.cpu=CPU
-status.memory=Speicher
-status.swap=Swap
-status.disk=Festplatte
-status.usage=Nutzung
-status.total=Gesamt
-status.used=Genutzt
-status.free=Frei
-status.runtime=Laufzeit
-status.days=Tage
-status.hours=Stunden
-status.minutes=Minuten
-status.seconds=Sekunden
-status.cores=Kerne
-status.threads=Threads
-status.process=Prozesse
+language.name=Deutsch
+
+log.debug=Debuggen
+log.info=Information
+log.warning=Warnung
+log.error=Fehler
+log.success=Erfolg
+
+liteyuki.restart=Neustart
+liteyuki.restart_now=Jetzt neustarten
+liteyuki.update_restart=Aktualisierungen abgeschlossen. Du kannst {RESTART} oder später manuell neu starten, um diese Aktualisierungen anzuwenden.
+liteyuki.current_config=Aktuelle Konfiguration lautet wie folgt
+liteyuki.static_config=Statische Konfiguration
+liteyuki.stored_config=Gespeicherte Konfiguration
+liteyuki.config_set_success=Konfiguration {KEY}={VAL} erfolgreich gesetzt
+liteyuki.stats.group=Gruppe
+liteyuki.stats.user=Freund
+liteyuki.stats.plugin=Plugin
+liteyuki.stats.sent=Gesendet
+liteyuki.stats.received=Empfangen
+liteyuki.stats.run_time=Laufzeit
+liteyuki.stats.groups=Gruppen
+liteyuki.stats.friends=Freunde
+liteyuki.stats.plugins=Plugins
+liteyuki.image_mode_on=Markdown-Bildmodus aktivieren
+liteyuki.image_mode_off=Markdown-Bildmodus deaktivieren
+liteyuki.invalid_command=Ungültiger Befehl oder Parameter {TEXT}
+liteyuki.reload_resources=Ressourcen neu laden
+liteyuki.list_resources=Liste der Ressourcenpakete
+liteyuki.reload_resources_success=Ressourcen erfolgreich neu geladen, insgesamt {NUM} Ressourcenpakete
+liteyuki.loaded_resources={NUM} Ressourcenpakete geladen, sortiert nach Priorität
+liteyuki.unloaded_resources=Nicht geladene Ressourcenpakete
+liteyuki.load_resource_success=Ressourcenpaket {NAME} erfolgreich geladen
+liteyuki.unload_resource_success=Ressourcenpaket {NAME} erfolgreich entladen
+liteyuki.load_resource_failed=Fehler beim Laden des Ressourcenpakets {NAME}
+liteyuki.unload_resource_failed=Fehler beim Entladen des Ressourcenpakets {NAME}
+liteyuki.resource_not_found=Ressourcenpaket {NAME} existiert nicht oder kann nicht verwendet werden
+liteyuki.resource_already_loaded=Ressourcenpaket {NAME} bereits geladen, bitte nicht wiederholen
+liteyuki.resource_already_unloaded=Ressourcenpaket {NAME} bereits entladen, bitte nicht wiederholen
+liteyuki.need_reload=Bitte {BTN} neu laden, um diese Aktualisierungen anzuwenden
+liteyuki.dont_repeat=Bitte nicht wiederholen
+liteyuki.change_priority_success=Priorität des Ressourcenpakets {NAME} erfolgreich geändert
+liteyuki.change_priority_failed=Fehler beim Ändern der Priorität des Ressourcenpakets {NAME}
+liteyuki.group_already=Gruppe {GROUP} ist bereits {STATUS}, keine Wiederholung erforderlich
+liteyuki.group_success=Gruppe {GROUP} {STATUS} erfolgreich
+liteyuki.permission_denied=Zugriff verweigert
+liteyuki.config_remove_success=Konfiguration {KEY} erfolgreich entfernt
+
+main.current_language=Aktuelle Konfigurationssprache ist: {LANG}
+main.enable_webdash=Webüberwachungsseite aktiviert: {URL}
+main.monitor.title=Liteyuki Überwachungsseite
+main.monitor.description=Liteyuki Bot Überwachungsseite
+main.monitor.cpu=CPU
+main.monitor.memory=Speicher
+main.monitor.swap=Swap
+main.monitor.disk=Festplatte
+main.monitor.usage=Nutzung
+main.monitor.total=Gesamt
+main.monitor.used=Benutzt
+main.monitor.free=Frei
+
+data_manager.migrate_success=Datenmodell {NAME} erfolgreich migriert
+
+npm.loaded_plugins=Plugins geladen
+npm.total=Insgesamt {TOTAL}
+npm.help=Hilfe
+npm.usage=Verwendung
+npm.description=Beschreibung
+npm.disable=Deaktivieren
+npm.disable_global=Global deaktivieren
+npm.enable=Aktivieren
+npm.enable_global=Global aktivieren
+npm.install=Installieren
+npm.uninstall=Deinstallieren
+npm.installing=Installiere {NAME}
+npm.cannot_uninstall=Deinstallation nicht möglich
+npm.no_description=Keine Beschreibung
+npm.store_update_success=Daten des Plugin-Shops erfolgreich aktualisiert
+npm.store_update_failed=Aktualisierung der Daten des Plugin-Shops fehlgeschlagen
+npm.search_result=Suchergebnis
+npm.search_no_result=Keine Suchergebnisse
+npm.too_many_results=Zu viele Elemente, {HIDE_NUM} Elemente ausgeblendet, bitte die Schlüsselwortsuche einschränken
+npm.install_success={NAME} erfolgreich installiert
+npm.install_failed=Installation von {NAME} fehlgeschlagen, bitte prüfen Sie das Protokoll für detaillierte Informationen. Wenn Sie das Problem nicht lösen können, besuchen Sie {HOMEPAGE} für Hilfe
+npm.uninstall_success={NAME} erfolgreich deinstalliert, wirksam nach dem nächsten Neustart
+npm.uninstall_failed=Deinstallation von {NAME} fehlgeschlagen
+npm.load_failed=Laden von {NAME} fehlgeschlagen, bitte prüfen Sie die Konsole für detaillierte Informationen, ob Abhängigkeiten oder Konfigurationen korrekt sind. Wenn Sie das Problem nicht lösen können, besuchen Sie {HOMEPAGE} für Hilfe
+npm.plugin_not_found={NAME} nicht im Shop gefunden, bitte versuchen Sie, die Shop-Informationen zu aktualisieren oder die Rechtschreibung zu überprüfen
+npm.plugin_not_installed={NAME} nicht installiert
+npm.plugin_already_installed={NAME} bereits installiert, bitte nicht erneut installieren
+npm.author=Autor
+npm.homepage=Homepage
+npm.pypi=PyPI
+npm.next_page=Nächste Seite
+npm.prev_page=Vorherige Seite
+npm.update=Aktualisieren
+npm.plugin_cannot_be_toggled=Plugin {NAME} kann nicht aktiviert oder deaktiviert werden
+npm.plugin_already=Plugin {NAME} ist bereits {STATUS}, keine Wiederholung erforderlich
+npm.toggle_failed=Plugin {NAME} {STATUS} fehlgeschlagen: {ERROR}
+npm.toggle_success=Plugin {NAME} {STATUS} erfolgreich
+npm.page=Seite {PAGE}/{TOTAL}
+npm.update_index=Plugin-Index aktualisieren
+npm.list_plugins=Plugin-Liste
+npm.disable_session=Plugin für aktuelle Sitzung deaktivieren
+npm.enable_session=Plugin für aktuelle Sitzung aktivieren
+npm.help=Hilfe
+npm.search=Suche
+
+user.profile.edit=Bearbeiten
+user.profile.set=Einstellen
+user.profile_manager.query=Dein Profil {ATTR} ist {VALUE}
+user.profile_manager.set=Dein Profil {ATTR} wurde auf {VALUE} gesetzt
+user.profile.settings=Einstellungen
+user.profile.info=Profilinformationen
+user.profile.lang=Sprache
+user.profile.lang.desc=Setze Benutzersprache
+user.profile.timezone=Zeitzone
+user.profile.timezone.desc=Setze die aktuelle Benutzerzeitzone
+user.profile.theme=Thema
+user.profile.theme.desc=Setze Benutzeroberflächenthema
+user.profile.location=Ort
+user.profile.location.desc=Setze Benutzerortsinformationen
+user.profile.nickname=Spitzname
+user.profile.nickname.desc=Legt fest, wie der Bot den Benutzer anspricht
+user.profile.input_value=Bitte geben Sie den Wert von {ATTR} ein
+user.profile.set_success={ATTR} erfolgreich auf {VALUE} gesetzt
+user.profile.set_failed=Fehler beim Setzen von {ATTR}, bitte überprüfen Sie die Eingabe auf Gültigkeit
+
+rpm.move_up=Nach oben bewegen
+rpm.move_down=Nach unten bewegen
+rpm.move_top=Nach oben verschieben
+
+weather.city_not_found=Stadt {CITY} nicht gefunden
+weather.weather_not_found=Wetterinformationen für Stadt {CITY} nicht gefunden
+weather.no_key=Wetter-API-Schlüssel nicht festgelegt. Fügen Sie bitte weather_key zur Konfigurationsdatei hinzu
+
+status.friends=Freunde
+status.groups=Gruppen
+status.plugins=Plugins
+status.resources=Ressourcenpakete
+status.bots=Bots
+status.message_sent=Versendete Nachrichten
+status.message_received=Empfangene Nachrichten
+status.cpu=CPU
+status.memory=Speicher
+status.swap=Swap
+status.disk=Festplatte
+status.usage=Nutzung
+status.total=Gesamt
+status.used=Genutzt
+status.free=Frei
+status.runtime=Laufzeit
+status.days=Tage
+status.hours=Stunden
+status.minutes=Minuten
+status.seconds=Sekunden
+status.cores=Kerne
+status.threads=Threads
+status.process=Prozesse
status.description=Liteyuki Bot-Status
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/en.lang b/src/resources/vanilla_language/lang/en.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/en.lang
rename to src/resources/vanilla_language/lang/en.lang
index 5fd26842..c1f856c8 100644
--- a/liteyuki/resources/vanilla_language/lang/en.lang
+++ b/src/resources/vanilla_language/lang/en.lang
@@ -1,160 +1,160 @@
-language.name=English
-
-log.debug=Debug
-log.info=Information
-log.warning=Warning
-log.error=Error
-log.success=Success
-
-liteyuki.restart=Restart
-liteyuki.restart_now=Restart Now
-liteyuki.update_restart=Updates completed. You can {RESTART} or manually restart later to apply these updates.
-liteyuki.current_config=Current configuration is as follows
-liteyuki.static_config=Static Configuration
-liteyuki.stored_config=Stored Configuration
-liteyuki.config_set_success=Configuration {KEY}={VAL} set successfully
-liteyuki.stats.group=Group
-liteyuki.stats.user=Friend
-liteyuki.stats.plugin=Plugin
-liteyuki.stats.sent=Sent
-liteyuki.stats.received=Received
-liteyuki.stats.run_time=Run Time
-liteyuki.stats.groups=Groups
-liteyuki.stats.friends=Friends
-liteyuki.stats.plugins=Plugins
-liteyuki.image_mode_on=Enable Markdown Image Mode
-liteyuki.image_mode_off=Disable Markdown Image Mode
-liteyuki.invalid_command=Invalid command or parameter {TEXT}
-liteyuki.reload_resources=Reload Resources
-liteyuki.list_resources=Resource Pack List
-liteyuki.reload_resources_success=Resource reload successful, {NUM} resource packs in total
-liteyuki.loaded_resources={NUM} resource packs loaded, sorted by priority
-liteyuki.unloaded_resources=Unloaded resource packs
-liteyuki.load_resource_success=Resource pack {NAME} loaded successfully
-liteyuki.unload_resource_success=Resource pack {NAME} unloaded successfully
-liteyuki.load_resource_failed=Failed to load resource pack {NAME}
-liteyuki.unload_resource_failed=Failed to unload resource pack {NAME}
-liteyuki.resource_not_found=Resource pack {NAME} does not exist or is not operable
-liteyuki.resource_already_loaded=Resource pack {NAME} already loaded, do not repeat operation
-liteyuki.resource_already_unloaded=Resource pack {NAME} already unloaded, do not repeat operation
-liteyuki.need_reload=Please {BTN} reload to apply these updates
-liteyuki.dont_repeat=Do not repeat operation
-liteyuki.change_priority_success=Resource pack {NAME} priority changed successfully
-liteyuki.change_priority_failed=Failed to change priority of resource pack {NAME}
-liteyuki.group_already=Group {GROUP} is already {STATUS}, no need to repeat operation
-liteyuki.group_success=Group {GROUP} {STATUS} successful
-liteyuki.permission_denied=Permission denied
-liteyuki.config_remove_success=Configuration {KEY} removed successfully
-
-main.current_language=Current configuration language is: {LANG}
-main.enable_webdash=Web monitoring panel enabled: {URL}
-main.monitor.title=Liteyuki Monitoring Panel
-main.monitor.description=Liteyuki Bot Monitoring Panel
-main.monitor.cpu=CPU
-main.monitor.memory=Memory
-main.monitor.swap=Swap
-main.monitor.disk=Disk
-main.monitor.usage=Usage
-main.monitor.total=Total
-main.monitor.used=Used
-main.monitor.free=Free
-
-data_manager.migrate_success=Data model {NAME} migration successful
-
-npm.loaded_plugins=Plugins loaded
-npm.total=Total {TOTAL}
-npm.help=Help
-npm.usage=Usage
-npm.description=Description
-npm.disable=Disable
-npm.disable_global=Disable Globally
-npm.enable=Enable
-npm.enable_global=Enable Globally
-npm.install=Install
-npm.uninstall=Uninstall
-npm.installing=Installing {NAME}
-npm.cannot_uninstall=Cannot Uninstall
-npm.no_description=No Description
-npm.store_update_success=Plugin store data updated successfully
-npm.store_update_failed=Plugin store data update failed
-npm.search_result=Search Result
-npm.search_no_result=No search result
-npm.too_many_results=Too many items, {HIDE_NUM} items hidden, please limit the keyword search
-npm.install_success={NAME} installed successfully
-npm.install_failed={NAME} installation failed, please check the log for detailed information. If you cannot resolve it, visit {HOMEPAGE} for help
-npm.uninstall_success={NAME} uninstalled successfully, effective next restart
-npm.uninstall_failed={NAME} uninstallation failed
-npm.load_failed={NAME} loading failed, please check the console for detailed information, check if dependencies or configurations are correct, if cannot resolve, visit {HOMEPAGE} for help
-npm.plugin_not_found={NAME} not found in the store, please try updating the store information or checking the spelling
-npm.plugin_not_installed={NAME} not installed
-npm.plugin_already_installed={NAME} already installed, do not reinstall
-npm.author=Author
-npm.homepage=Homepage
-npm.pypi=PyPI
-npm.next_page=Next Page
-npm.prev_page=Previous Page
-npm.update=Update
-npm.plugin_cannot_be_toggled=Plugin {NAME} cannot be enabled or disabled
-npm.plugin_already=Plugin {NAME} is already {STATUS}, no need to repeat operation
-npm.toggle_failed=Plugin {NAME} {STATUS} failed: {ERROR}
-npm.toggle_success=Plugin {NAME} {STATUS} successful
-npm.page=Page {PAGE}/{TOTAL}
-npm.update_index=Update Plugin Index
-npm.list_plugins=Plugin List
-npm.disable_session=Disable plugin for current session
-npm.enable_session=Enable plugin for current session
-npm.help=Help
-npm.search=Search
-
-user.profile.edit=Edit
-user.profile.set=Set
-user.profile_manager.query=Your profile {ATTR} is {VALUE}
-user.profile_manager.set=Your profile {ATTR} set to {VALUE}
-user.profile.settings=Settings
-user.profile.info=Profile Information
-user.profile.lang=Language
-user.profile.lang.desc=Set user language
-user.profile.timezone=Timezone
-user.profile.timezone.desc=Set user current timezone
-user.profile.theme=Theme
-user.profile.theme.desc=Set user interface theme
-user.profile.location=Location
-user.profile.location.desc=Set user location information
-user.profile.nickname=Nickname
-user.profile.nickname.desc=Set how the bot calls the user
-user.profile.input_value=Please enter the value of {ATTR}
-user.profile.set_success={ATTR} set to {VALUE} successfully
-user.profile.set_failed=Failed to set {ATTR}, please check the input legality
-
-rpm.move_up=Move Up
-rpm.move_down=Move Down
-rpm.move_top=Move Top
-
-weather.city_not_found=City {CITY} not found
-weather.weather_not_found=Weather information not found for city {CITY}
-weather.no_key=Weather API key not set. Please add weather_key to the configuration file
-
-status.friends=Friend(s)
-status.groups=Group(s)
-status.plugins=Plugin(s)
-status.resources=Resource Pack(s)
-status.bots=Bot(s)
-status.message_sent=Message(s) Sent
-status.message_received=Message(s) Received
-status.cpu=CPU
-status.memory=Memory
-status.swap=Swap
-status.disk=Disk
-status.usage=Usage
-status.total=Total
-status.used=Used
-status.free=Free
-status.runtime=Runtime
-status.days=Day(s)
-status.hours=Hour(s)
-status.minutes=Minute(s)
-status.seconds=Second(s)
-status.cores=Core(s)
-status.threads=Thread(s)
-status.process=Processe(s)
-status.description=Liteyuki Dashboard
+language.name=English
+
+log.debug=Debug
+log.info=Information
+log.warning=Warning
+log.error=Error
+log.success=Success
+
+liteyuki.restart=Restart
+liteyuki.restart_now=Restart Now
+liteyuki.update_restart=Updates completed. You can {RESTART} or manually restart later to apply these updates.
+liteyuki.current_config=Current configuration is as follows
+liteyuki.static_config=Static Configuration
+liteyuki.stored_config=Stored Configuration
+liteyuki.config_set_success=Configuration {KEY}={VAL} set successfully
+liteyuki.stats.group=Group
+liteyuki.stats.user=Friend
+liteyuki.stats.plugin=Plugin
+liteyuki.stats.sent=Sent
+liteyuki.stats.received=Received
+liteyuki.stats.run_time=Run Time
+liteyuki.stats.groups=Groups
+liteyuki.stats.friends=Friends
+liteyuki.stats.plugins=Plugins
+liteyuki.image_mode_on=Enable Markdown Image Mode
+liteyuki.image_mode_off=Disable Markdown Image Mode
+liteyuki.invalid_command=Invalid command or parameter {TEXT}
+liteyuki.reload_resources=Reload Resources
+liteyuki.list_resources=Resource Pack List
+liteyuki.reload_resources_success=Resource reload successful, {NUM} resource packs in total
+liteyuki.loaded_resources={NUM} resource packs loaded, sorted by priority
+liteyuki.unloaded_resources=Unloaded resource packs
+liteyuki.load_resource_success=Resource pack {NAME} loaded successfully
+liteyuki.unload_resource_success=Resource pack {NAME} unloaded successfully
+liteyuki.load_resource_failed=Failed to load resource pack {NAME}
+liteyuki.unload_resource_failed=Failed to unload resource pack {NAME}
+liteyuki.resource_not_found=Resource pack {NAME} does not exist or is not operable
+liteyuki.resource_already_loaded=Resource pack {NAME} already loaded, do not repeat operation
+liteyuki.resource_already_unloaded=Resource pack {NAME} already unloaded, do not repeat operation
+liteyuki.need_reload=Please {BTN} reload to apply these updates
+liteyuki.dont_repeat=Do not repeat operation
+liteyuki.change_priority_success=Resource pack {NAME} priority changed successfully
+liteyuki.change_priority_failed=Failed to change priority of resource pack {NAME}
+liteyuki.group_already=Group {GROUP} is already {STATUS}, no need to repeat operation
+liteyuki.group_success=Group {GROUP} {STATUS} successful
+liteyuki.permission_denied=Permission denied
+liteyuki.config_remove_success=Configuration {KEY} removed successfully
+
+main.current_language=Current configuration language is: {LANG}
+main.enable_webdash=Web monitoring panel enabled: {URL}
+main.monitor.title=Liteyuki Monitoring Panel
+main.monitor.description=Liteyuki Bot Monitoring Panel
+main.monitor.cpu=CPU
+main.monitor.memory=Memory
+main.monitor.swap=Swap
+main.monitor.disk=Disk
+main.monitor.usage=Usage
+main.monitor.total=Total
+main.monitor.used=Used
+main.monitor.free=Free
+
+data_manager.migrate_success=Data model {NAME} migration successful
+
+npm.loaded_plugins=Plugins loaded
+npm.total=Total {TOTAL}
+npm.help=Help
+npm.usage=Usage
+npm.description=Description
+npm.disable=Disable
+npm.disable_global=Disable Globally
+npm.enable=Enable
+npm.enable_global=Enable Globally
+npm.install=Install
+npm.uninstall=Uninstall
+npm.installing=Installing {NAME}
+npm.cannot_uninstall=Cannot Uninstall
+npm.no_description=No Description
+npm.store_update_success=Plugin store data updated successfully
+npm.store_update_failed=Plugin store data update failed
+npm.search_result=Search Result
+npm.search_no_result=No search result
+npm.too_many_results=Too many items, {HIDE_NUM} items hidden, please limit the keyword search
+npm.install_success={NAME} installed successfully
+npm.install_failed={NAME} installation failed, please check the log for detailed information. If you cannot resolve it, visit {HOMEPAGE} for help
+npm.uninstall_success={NAME} uninstalled successfully, effective next restart
+npm.uninstall_failed={NAME} uninstallation failed
+npm.load_failed={NAME} loading failed, please check the console for detailed information, check if dependencies or configurations are correct, if cannot resolve, visit {HOMEPAGE} for help
+npm.plugin_not_found={NAME} not found in the store, please try updating the store information or checking the spelling
+npm.plugin_not_installed={NAME} not installed
+npm.plugin_already_installed={NAME} already installed, do not reinstall
+npm.author=Author
+npm.homepage=Homepage
+npm.pypi=PyPI
+npm.next_page=Next Page
+npm.prev_page=Previous Page
+npm.update=Update
+npm.plugin_cannot_be_toggled=Plugin {NAME} cannot be enabled or disabled
+npm.plugin_already=Plugin {NAME} is already {STATUS}, no need to repeat operation
+npm.toggle_failed=Plugin {NAME} {STATUS} failed: {ERROR}
+npm.toggle_success=Plugin {NAME} {STATUS} successful
+npm.page=Page {PAGE}/{TOTAL}
+npm.update_index=Update Plugin Index
+npm.list_plugins=Plugin List
+npm.disable_session=Disable plugin for current session
+npm.enable_session=Enable plugin for current session
+npm.help=Help
+npm.search=Search
+
+user.profile.edit=Edit
+user.profile.set=Set
+user.profile_manager.query=Your profile {ATTR} is {VALUE}
+user.profile_manager.set=Your profile {ATTR} set to {VALUE}
+user.profile.settings=Settings
+user.profile.info=Profile Information
+user.profile.lang=Language
+user.profile.lang.desc=Set user language
+user.profile.timezone=Timezone
+user.profile.timezone.desc=Set user current timezone
+user.profile.theme=Theme
+user.profile.theme.desc=Set user interface theme
+user.profile.location=Location
+user.profile.location.desc=Set user location information
+user.profile.nickname=Nickname
+user.profile.nickname.desc=Set how the bot calls the user
+user.profile.input_value=Please enter the value of {ATTR}
+user.profile.set_success={ATTR} set to {VALUE} successfully
+user.profile.set_failed=Failed to set {ATTR}, please check the input legality
+
+rpm.move_up=Move Up
+rpm.move_down=Move Down
+rpm.move_top=Move Top
+
+weather.city_not_found=City {CITY} not found
+weather.weather_not_found=Weather information not found for city {CITY}
+weather.no_key=Weather API key not set. Please add weather_key to the configuration file
+
+status.friends=Friend(s)
+status.groups=Group(s)
+status.plugins=Plugin(s)
+status.resources=Resource Pack(s)
+status.bots=Bot(s)
+status.message_sent=Message(s) Sent
+status.message_received=Message(s) Received
+status.cpu=CPU
+status.memory=Memory
+status.swap=Swap
+status.disk=Disk
+status.usage=Usage
+status.total=Total
+status.used=Used
+status.free=Free
+status.runtime=Runtime
+status.days=Day(s)
+status.hours=Hour(s)
+status.minutes=Minute(s)
+status.seconds=Second(s)
+status.cores=Core(s)
+status.threads=Thread(s)
+status.process=Processe(s)
+status.description=Liteyuki Dashboard
diff --git a/liteyuki/resources/vanilla_language/lang/es.lang b/src/resources/vanilla_language/lang/es.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/es.lang
rename to src/resources/vanilla_language/lang/es.lang
index 53620c3a..001bb72c 100644
--- a/liteyuki/resources/vanilla_language/lang/es.lang
+++ b/src/resources/vanilla_language/lang/es.lang
@@ -1,160 +1,160 @@
-language.name=Español
-
-log.debug=Depuración
-log.info=Información
-log.warning=Advertencia
-log.error=Error
-log.success=Éxito
-
-liteyuki.restart=Reiniciar
-liteyuki.restart_now=Reiniciar Ahora
-liteyuki.update_restart=Actualizaciones completadas. Puedes {RESTART} o reiniciar manualmente más tarde para aplicar estas actualizaciones.
-liteyuki.current_config=La configuración actual es la siguiente
-liteyuki.static_config=Configuración Estática
-liteyuki.stored_config=Configuración Almacenada
-liteyuki.config_set_success=Configuración {KEY}={VAL} establecida correctamente
-liteyuki.stats.group=Grupo
-liteyuki.stats.user=Amigo
-liteyuki.stats.plugin=Plugin
-liteyuki.stats.sent=Enviado
-liteyuki.stats.received=Recibido
-liteyuki.stats.run_time=Tiempo de Ejecución
-liteyuki.stats.groups=Grupos
-liteyuki.stats.friends=Amigos
-liteyuki.stats.plugins=Plugins
-liteyuki.image_mode_on=Activar Modo de Imagen Markdown
-liteyuki.image_mode_off=Desactivar Modo de Imagen Markdown
-liteyuki.invalid_command=Comando o parámetro {TEXT} inválido
-liteyuki.reload_resources=Recargar Recursos
-liteyuki.list_resources=Lista de Paquetes de Recursos
-liteyuki.reload_resources_success=Recarga de recursos exitosa, un total de {NUM} paquetes de recursos
-liteyuki.loaded_resources={NUM} paquetes de recursos cargados, ordenados por prioridad
-liteyuki.unloaded_resources=Paquetes de recursos no cargados
-liteyuki.load_resource_success=Paquete de recursos {NAME} cargado correctamente
-liteyuki.unload_resource_success=Paquete de recursos {NAME} descargado correctamente
-liteyuki.load_resource_failed=Error al cargar el paquete de recursos {NAME}
-liteyuki.unload_resource_failed=Error al descargar el paquete de recursos {NAME}
-liteyuki.resource_not_found=El paquete de recursos {NAME} no existe o no es operable
-liteyuki.resource_already_loaded=El paquete de recursos {NAME} ya está cargado, no repitas la operación
-liteyuki.resource_already_unloaded=El paquete de recursos {NAME} ya está descargado, no repitas la operación
-liteyuki.need_reload=Por favor, {BTN} recargar para aplicar estas actualizaciones
-liteyuki.dont_repeat=No repitas la operación
-liteyuki.change_priority_success=Prioridad del paquete de recursos {NAME} cambiada correctamente
-liteyuki.change_priority_failed=Error al cambiar la prioridad del paquete de recursos {NAME}
-liteyuki.group_already=El grupo {GROUP} ya está {STATUS}, no es necesario repetir la operación
-liteyuki.group_success=Grupo {GROUP} {STATUS} exitosamente
-liteyuki.permission_denied=Permiso denegado
-liteyuki.config_remove_success=Configuración {KEY} eliminada correctamente
-
-main.current_language=El idioma de configuración actual es: {LANG}
-main.enable_webdash=Panel de monitoreo web habilitado: {URL}
-main.monitor.title=Panel de Monitoreo de Liteyuki
-main.monitor.description=Panel de Monitoreo del Bot de Liteyuki
-main.monitor.cpu=CPU
-main.monitor.memory=Memoria
-main.monitor.swap=Swap
-main.monitor.disk=Disco
-main.monitor.usage=Uso
-main.monitor.total=Total
-main.monitor.used=Usado
-main.monitor.free=Libre
-
-data_manager.migrate_success=Modelo de datos {NAME} migrado con éxito
-
-npm.loaded_plugins=Plugins cargados
-npm.total=Total {TOTAL}
-npm.help=Ayuda
-npm.usage=Uso
-npm.description=Descripción
-npm.disable=Desactivar
-npm.disable_global=Desactivar Globalmente
-npm.enable=Activar
-npm.enable_global=Activar Globalmente
-npm.install=Instalar
-npm.uninstall=Desinstalar
-npm.installing=Instalando {NAME}
-npm.cannot_uninstall=No se puede Desinstalar
-npm.no_description=Sin Descripción
-npm.store_update_success=Actualización de datos de la tienda de plugins exitosa
-npm.store_update_failed=Falló la actualización de datos de la tienda de plugins
-npm.search_result=Resultado de la Búsqueda
-npm.search_no_result=Sin resultados de búsqueda
-npm.too_many_results=Demasiados elementos, {HIDE_NUM} elementos ocultos, por favor limite la búsqueda de palabras clave
-npm.install_success={NAME} instalado correctamente
-npm.install_failed=Falla en la instalación de {NAME}, por favor revise el registro para obtener información detallada. Si no puede resolverlo, visite {HOMEPAGE} para obtener ayuda
-npm.uninstall_success={NAME} desinstalado correctamente, efectivo después del próximo reinicio
-npm.uninstall_failed=Falla en la desinstalación de {NAME}
-npm.load_failed=Falla al cargar {NAME}, por favor revise la consola para obtener información detallada, si no puede resolverlo, visite {HOMEPAGE} para obtener ayuda
-npm.plugin_not_found={NAME} no encontrado en la tienda, por favor intente actualizar la información de la tienda o verifique la ortografía
-npm.plugin_not_installed={NAME} no instalado
-npm.plugin_already_installed={NAME} ya instalado, no vuelva a instalarlo
-npm.author=Autor
-npm.homepage=Página de Inicio
-npm.pypi=PyPI
-npm.next_page=Siguiente Página
-npm.prev_page=Página Anterior
-npm.update=Actualizar
-npm.plugin_cannot_be_toggled=El plugin {NAME} no se puede activar o desactivar
-npm.plugin_already=El plugin {NAME} ya está {STATUS}, no es necesario repetir la operación
-npm.toggle_failed=Falla en {STATUS} el plugin {NAME}: {ERROR}
-npm.toggle_success=Éxito al {STATUS} el plugin {NAME}
-npm.page=Página {PAGE}/{TOTAL}
-npm.update_index=Actualizar el Índice del Plugin
-npm.list_plugins=Lista de Plugins
-npm.disable_session=Desactivar sesión actual
-npm.enable_session=Activar sesión actual
-npm.help=Ayuda
-npm.search=Búsqueda
-
-user.profile.edit=Editar
-user.profile.set=Establecer
-user.profile_manager.query=Tu perfil {ATTR} es {VALUE}
-user.profile_manager.set=Tu perfil {ATTR} ha sido establecido como {VALUE}
-user.profile.settings=Ajustes
-user.profile.info=Información de Perfil
-user.profile.lang=Idioma
-user.profile.lang.desc=Establecer el idioma del usuario
-user.profile.timezone=Zona Horaria
-user.profile.timezone.desc=Establecer la zona horaria actual del usuario
-user.profile.theme=Tema
-user.profile.theme.desc=Establecer el tema de la interfaz de usuario del usuario
-user.profile.location=Ubicación
-user.profile.location.desc=Establecer la información de ubicación del usuario
-user.profile.nickname=Apodo
-user.profile.nickname.desc=Establecer cómo el bot llama al usuario
-user.profile.input_value=Por favor ingrese el valor de {ATTR}
-user.profile.set_success={ATTR} establecido como {VALUE} exitosamente
-user.profile.set_failed=Falla al establecer {ATTR}, por favor revise la legalidad de la entrada
-
-rpm.move_up=Mover Arriba
-rpm.move_down=Mover Abajo
-rpm.move_top=Mover Arriba
-
-weather.city_not_found=Ciudad {CITY} no encontrada
-weather.weather_not_found=No se encontró información meteorológica para la ciudad {CITY}
-weather.no_key=Clave API del tiempo no establecida. Por favor, agregue weather_key al archivo de configuración
-
-status.friends=Amigos
-status.groups=Grupos
-status.plugins=Plugins
-status.resources=Paquetes de Recursos
-status.bots=Bots
-status.message_sent=Mensajes Enviados
-status.message_received=Mensajes Recibidos
-status.cpu=CPU
-status.memory=Memoria
-status.swap=Swap
-status.disk=Disco
-status.usage=Uso
-status.total=Total
-status.used=Usado
-status.free=Libre
-status.runtime=Tiempo de Ejecución
-status.days=Días
-status.hours=Horas
-status.minutes=Minutos
-status.seconds=Segundos
-status.cores=Núcleos
-status.threads=Hilos
-status.process=Procesos
+language.name=Español
+
+log.debug=Depuración
+log.info=Información
+log.warning=Advertencia
+log.error=Error
+log.success=Éxito
+
+liteyuki.restart=Reiniciar
+liteyuki.restart_now=Reiniciar Ahora
+liteyuki.update_restart=Actualizaciones completadas. Puedes {RESTART} o reiniciar manualmente más tarde para aplicar estas actualizaciones.
+liteyuki.current_config=La configuración actual es la siguiente
+liteyuki.static_config=Configuración Estática
+liteyuki.stored_config=Configuración Almacenada
+liteyuki.config_set_success=Configuración {KEY}={VAL} establecida correctamente
+liteyuki.stats.group=Grupo
+liteyuki.stats.user=Amigo
+liteyuki.stats.plugin=Plugin
+liteyuki.stats.sent=Enviado
+liteyuki.stats.received=Recibido
+liteyuki.stats.run_time=Tiempo de Ejecución
+liteyuki.stats.groups=Grupos
+liteyuki.stats.friends=Amigos
+liteyuki.stats.plugins=Plugins
+liteyuki.image_mode_on=Activar Modo de Imagen Markdown
+liteyuki.image_mode_off=Desactivar Modo de Imagen Markdown
+liteyuki.invalid_command=Comando o parámetro {TEXT} inválido
+liteyuki.reload_resources=Recargar Recursos
+liteyuki.list_resources=Lista de Paquetes de Recursos
+liteyuki.reload_resources_success=Recarga de recursos exitosa, un total de {NUM} paquetes de recursos
+liteyuki.loaded_resources={NUM} paquetes de recursos cargados, ordenados por prioridad
+liteyuki.unloaded_resources=Paquetes de recursos no cargados
+liteyuki.load_resource_success=Paquete de recursos {NAME} cargado correctamente
+liteyuki.unload_resource_success=Paquete de recursos {NAME} descargado correctamente
+liteyuki.load_resource_failed=Error al cargar el paquete de recursos {NAME}
+liteyuki.unload_resource_failed=Error al descargar el paquete de recursos {NAME}
+liteyuki.resource_not_found=El paquete de recursos {NAME} no existe o no es operable
+liteyuki.resource_already_loaded=El paquete de recursos {NAME} ya está cargado, no repitas la operación
+liteyuki.resource_already_unloaded=El paquete de recursos {NAME} ya está descargado, no repitas la operación
+liteyuki.need_reload=Por favor, {BTN} recargar para aplicar estas actualizaciones
+liteyuki.dont_repeat=No repitas la operación
+liteyuki.change_priority_success=Prioridad del paquete de recursos {NAME} cambiada correctamente
+liteyuki.change_priority_failed=Error al cambiar la prioridad del paquete de recursos {NAME}
+liteyuki.group_already=El grupo {GROUP} ya está {STATUS}, no es necesario repetir la operación
+liteyuki.group_success=Grupo {GROUP} {STATUS} exitosamente
+liteyuki.permission_denied=Permiso denegado
+liteyuki.config_remove_success=Configuración {KEY} eliminada correctamente
+
+main.current_language=El idioma de configuración actual es: {LANG}
+main.enable_webdash=Panel de monitoreo web habilitado: {URL}
+main.monitor.title=Panel de Monitoreo de Liteyuki
+main.monitor.description=Panel de Monitoreo del Bot de Liteyuki
+main.monitor.cpu=CPU
+main.monitor.memory=Memoria
+main.monitor.swap=Swap
+main.monitor.disk=Disco
+main.monitor.usage=Uso
+main.monitor.total=Total
+main.monitor.used=Usado
+main.monitor.free=Libre
+
+data_manager.migrate_success=Modelo de datos {NAME} migrado con éxito
+
+npm.loaded_plugins=Plugins cargados
+npm.total=Total {TOTAL}
+npm.help=Ayuda
+npm.usage=Uso
+npm.description=Descripción
+npm.disable=Desactivar
+npm.disable_global=Desactivar Globalmente
+npm.enable=Activar
+npm.enable_global=Activar Globalmente
+npm.install=Instalar
+npm.uninstall=Desinstalar
+npm.installing=Instalando {NAME}
+npm.cannot_uninstall=No se puede Desinstalar
+npm.no_description=Sin Descripción
+npm.store_update_success=Actualización de datos de la tienda de plugins exitosa
+npm.store_update_failed=Falló la actualización de datos de la tienda de plugins
+npm.search_result=Resultado de la Búsqueda
+npm.search_no_result=Sin resultados de búsqueda
+npm.too_many_results=Demasiados elementos, {HIDE_NUM} elementos ocultos, por favor limite la búsqueda de palabras clave
+npm.install_success={NAME} instalado correctamente
+npm.install_failed=Falla en la instalación de {NAME}, por favor revise el registro para obtener información detallada. Si no puede resolverlo, visite {HOMEPAGE} para obtener ayuda
+npm.uninstall_success={NAME} desinstalado correctamente, efectivo después del próximo reinicio
+npm.uninstall_failed=Falla en la desinstalación de {NAME}
+npm.load_failed=Falla al cargar {NAME}, por favor revise la consola para obtener información detallada, si no puede resolverlo, visite {HOMEPAGE} para obtener ayuda
+npm.plugin_not_found={NAME} no encontrado en la tienda, por favor intente actualizar la información de la tienda o verifique la ortografía
+npm.plugin_not_installed={NAME} no instalado
+npm.plugin_already_installed={NAME} ya instalado, no vuelva a instalarlo
+npm.author=Autor
+npm.homepage=Página de Inicio
+npm.pypi=PyPI
+npm.next_page=Siguiente Página
+npm.prev_page=Página Anterior
+npm.update=Actualizar
+npm.plugin_cannot_be_toggled=El plugin {NAME} no se puede activar o desactivar
+npm.plugin_already=El plugin {NAME} ya está {STATUS}, no es necesario repetir la operación
+npm.toggle_failed=Falla en {STATUS} el plugin {NAME}: {ERROR}
+npm.toggle_success=Éxito al {STATUS} el plugin {NAME}
+npm.page=Página {PAGE}/{TOTAL}
+npm.update_index=Actualizar el Índice del Plugin
+npm.list_plugins=Lista de Plugins
+npm.disable_session=Desactivar sesión actual
+npm.enable_session=Activar sesión actual
+npm.help=Ayuda
+npm.search=Búsqueda
+
+user.profile.edit=Editar
+user.profile.set=Establecer
+user.profile_manager.query=Tu perfil {ATTR} es {VALUE}
+user.profile_manager.set=Tu perfil {ATTR} ha sido establecido como {VALUE}
+user.profile.settings=Ajustes
+user.profile.info=Información de Perfil
+user.profile.lang=Idioma
+user.profile.lang.desc=Establecer el idioma del usuario
+user.profile.timezone=Zona Horaria
+user.profile.timezone.desc=Establecer la zona horaria actual del usuario
+user.profile.theme=Tema
+user.profile.theme.desc=Establecer el tema de la interfaz de usuario del usuario
+user.profile.location=Ubicación
+user.profile.location.desc=Establecer la información de ubicación del usuario
+user.profile.nickname=Apodo
+user.profile.nickname.desc=Establecer cómo el bot llama al usuario
+user.profile.input_value=Por favor ingrese el valor de {ATTR}
+user.profile.set_success={ATTR} establecido como {VALUE} exitosamente
+user.profile.set_failed=Falla al establecer {ATTR}, por favor revise la legalidad de la entrada
+
+rpm.move_up=Mover Arriba
+rpm.move_down=Mover Abajo
+rpm.move_top=Mover Arriba
+
+weather.city_not_found=Ciudad {CITY} no encontrada
+weather.weather_not_found=No se encontró información meteorológica para la ciudad {CITY}
+weather.no_key=Clave API del tiempo no establecida. Por favor, agregue weather_key al archivo de configuración
+
+status.friends=Amigos
+status.groups=Grupos
+status.plugins=Plugins
+status.resources=Paquetes de Recursos
+status.bots=Bots
+status.message_sent=Mensajes Enviados
+status.message_received=Mensajes Recibidos
+status.cpu=CPU
+status.memory=Memoria
+status.swap=Swap
+status.disk=Disco
+status.usage=Uso
+status.total=Total
+status.used=Usado
+status.free=Libre
+status.runtime=Tiempo de Ejecución
+status.days=Días
+status.hours=Horas
+status.minutes=Minutos
+status.seconds=Segundos
+status.cores=Núcleos
+status.threads=Hilos
+status.process=Procesos
status.description=Liteyuki Dashboard Status
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/fr.lang b/src/resources/vanilla_language/lang/fr.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/fr.lang
rename to src/resources/vanilla_language/lang/fr.lang
index af242c0e..281f0bb7 100644
--- a/liteyuki/resources/vanilla_language/lang/fr.lang
+++ b/src/resources/vanilla_language/lang/fr.lang
@@ -1,159 +1,159 @@
-language.name=Français
-
-log.debug=Débogage
-log.info=Information
-log.warning=Avertissement
-log.error=Erreur
-log.success=Succès
-
-liteyuki.restart=Redémarrer
-liteyuki.restart_now=Redémarrer maintenant
-liteyuki.update_restart=Mise à jour terminée. Vous pouvez {RESTART} ou redémarrer manuellement plus tard pour appliquer ces mises à jour.
-liteyuki.current_config=Configuration actuelle
-liteyuki.static_config=Configuration statique des fichiers
-liteyuki.stored_config=Configuration stockée
-liteyuki.config_set_success=La configuration {KEY}={VAL} a été définie avec succès
-liteyuki.stats.group=Groupe
-liteyuki.stats.user=Ami
-liteyuki.stats.plugin=Plugin
-liteyuki.stats.sent=Envoyé
-liteyuki.stats.received=Reçu
-liteyuki.stats.run_time=Temps d'exécution
-liteyuki.stats.groups=Groupes
-liteyuki.stats.friends=Amis
-liteyuki.stats.plugins=Plugins
-liteyuki.image_mode_on=Activer le mode image Markdown
-liteyuki.image_mode_off=Désactiver le mode image Markdown
-liteyuki.invalid_command=Commande ou paramètre {TEXT} invalide
-liteyuki.reload_resources=Recharger les ressources
-liteyuki.list_resources=Liste des ressources
-liteyuki.reload_resources_success=Rechargement réussi des ressources. Total de {NUM} ressources chargées.
-liteyuki.loaded_resources={NUM} ressources chargées, triées par priorité.
-liteyuki.unloaded_resources=Ressources non chargées
-liteyuki.load_resource_success=Chargement réussi de la ressource {NAME}
-liteyuki.unload_resource_success=Déchargement réussi de la ressource {NAME}
-liteyuki.load_resource_failed=Échec du chargement de la ressource {NAME}
-liteyuki.unload_resource_failed=Échec du déchargement de la ressource {NAME}
-liteyuki.resource_not_found=La ressource {NAME} est introuvable ou non manipulable.
-liteyuki.resource_already_loaded=La ressource {NAME} est déjà chargée. Veuillez ne pas répéter l'opération.
-liteyuki.resource_already_unloaded=La ressource {NAME} est déjà déchargée. Veuillez ne pas répéter l'opération.
-liteyuki.need_reload=Veuillez {BTN} pour recharger et appliquer ces mises à jour.
-liteyuki.dont_repeat=Veuillez ne pas répéter l'opération.
-liteyuki.change_priority_success=La priorité de la ressource {NAME} a été modifiée avec succès.
-liteyuki.change_priority_failed=Échec de la modification de la priorité de la ressource {NAME}.
-liteyuki.group_already=Le groupe {GROUP} est déjà {STATUS}. Aucune action nécessaire.
-liteyuki.group_success=Le groupe {GROUP} a été {STATUS} avec succès.
-liteyuki.permission_denied=Permission refusée.
-liteyuki.config_remove_success=La configuration {KEY} a été supprimée avec succès.
-
-main.current_language=Langue actuelle : {LANG}
-main.enable_webdash=Tableau de bord Web activé : {URL}
-main.monitor.title=Tableau de bord de Liteyuki
-main.monitor.description=Tableau de bord de surveillance du robot Liteyuki
-main.monitor.cpu=Processeur
-main.monitor.memory=Mémoire
-main.monitor.swap=Swap
-main.monitor.disk=Disque
-main.monitor.usage=Utilisation
-main.monitor.total=Total
-main.monitor.used=Utilisé
-main.monitor.free=Libre
-
-data_manager.migrate_success=Migration réussie du modèle de données {NAME}
-
-npm.loaded_plugins=Plugins chargés
-npm.total=Total {TOTAL}
-npm.help=Aide
-npm.usage=Utilisation
-npm.description=Description
-npm.disable=Désactiver
-npm.disable_global=Désactiver globalement
-npm.enable=Activer
-npm.enable_global=Activer globalement
-npm.install=Installer
-npm.uninstall=Désinstaller
-npm.installing=Installation de {NAME} en cours
-npm.cannot_uninstall=Impossible de désinstaller
-npm.no_description=Aucune description
-npm.store_update_success=Mise à jour des données du magasin de plugins réussie
-npm.store_update_failed=Échec de la mise à jour des données du magasin de plugins
-npm.search_result=Résultats de la recherche
-npm.search_no_result=Aucun résultat trouvé
-npm.too_many_results=Trop de résultats. {HIDE_NUM} éléments masqués. Veuillez restreindre la recherche par mots-clés.
-npm.install_success=Installation de {NAME} réussie
-npm.install_failed=Échec de l'installation de {NAME}. Consultez les journaux pour plus d'informations. Si le problème persiste, veuillez consulter {HOMEPAGE} pour obtenir de l'aide.
-npm.uninstall_success=Désinstallation de {NAME} réussie. Les modifications prendront effet au prochain redémarrage.
-npm.uninstall_failed=Échec de la désinstallation de {NAME}
-npm.load_failed=Échec du chargement de {NAME}. Veuillez consulter les détails dans la console, vérifier les dépendances ou la configuration. Si le problème persiste, veuillez consulter {HOMEPAGE} pour obtenir de l'aide.
-npm.plugin_not_found=Plugin {NAME} introuvable dans le magasin. Veuillez vérifier l'orthographe ou effectuer une mise à jour du magasin.
-npm.plugin_not_installed={NAME} n'est pas installé
-npm.plugin_already_installed={NAME} est déjà installé. Veuillez ne pas répéter l'opération.
-npm.author=Auteur
-npm.homepage=Page d'accueil
-npm.pypi=PyPI
-npm.next_page=Page suivante
-npm.prev_page=Page précédente
-npm.update=Mettre à jour
-npm.plugin_cannot_be_toggled=Le plugin {NAME} ne peut pas être activé ou désactivé.
-npm.plugin_already=Le plugin {NAME} est déjà {STATUS}. Aucune action nécessaire.
-npm.toggle_failed=Échec de {STATUS} du plugin {NAME} : {ERROR}
-npm.toggle_success={STATUS} du plugin {NAME} réussi
-npm.page=Page {PAGE}/{TOTAL}
-npm.update_index=Mise à jour de l'index des plugins
-npm.list_plugins=Liste des plugins
-npm.disable_session=Désactivation des plugins pour cette session
-npm.enable_session=Activation des plugins pour cette session
-npm.help=Aide
-npm.search=Recherche
-
-user.profile.edit=Modifier
-user.profile.set=Définir
-user.profile_manager.query=Votre {ATTR} est {VALUE}
-user.profile_manager.set=Votre {ATTR} a été défini sur {VALUE}
-user.profile.settings=Paramètres
-user.profile.info=Informations personnelles
-user.profile.lang=Langue
-user.profile.lang.desc=Définir la langue de l'utilisateur
-user.profile.timezone=Fuseau horaire
-user.profile.timezone.desc=Définir le fuseau horaire de l'utilisateur
-user.profile.theme=Thème
-user.profile.theme.desc=Définir le thème de l'interface utilisateur de l'utilisateur
-user.profile.location=Emplacement
-user.profile.location.desc=Définir l'emplacement de l'utilisateur
-user.profile.nickname=Pseudo
-user.profile.nickname.desc=Définir le surnom du Bot pour l'utilisateur
-user.profile.input_value=Veuillez entrer une valeur pour {ATTR}
-user.profile.set_success={ATTR} a été défini sur {VALUE} avec succès
-user.profile.set_failed=Échec de la définition de {ATTR}. Veuillez vérifier la validité de l'entrée.
-
-rpm.move_up=Monter
-rpm.move_down=Descendre
-rpm.move_top=En haut
-
-weather.city_not_found=Ville {CITY} non trouvée
-weather.weather_not_found=Les informations météorologiques pour la ville {CITY} n'ont pas été trouvées
-weather.no_key=Aucune clé API météo définie. Veuillez ajouter weather_key au fichier de configuration.
-
-status.friends=Amis
-status.groups=Groupes
-status.plugins=Plugins
-status.resources=Ressources
-status.bots=Bots
-status.message_sent=Messages envoyés
-status.message_received=Messages reçus
-status.cpu=Processeur
-status.memory=Mémoire
-status.swap=Swap
-status.disk=Disque
-status.usage=Utilisation
-status.total=Total
-status.used=Utilisé
-status.free=Libre
-status.runtime=Temps d'exécution
-status.days=Jours
-status.hours=Heures
-status.minutes=Minutes
-status.seconds=Secondes
-status.cores=Cœurs
-status.threads=Threads
+language.name=Français
+
+log.debug=Débogage
+log.info=Information
+log.warning=Avertissement
+log.error=Erreur
+log.success=Succès
+
+liteyuki.restart=Redémarrer
+liteyuki.restart_now=Redémarrer maintenant
+liteyuki.update_restart=Mise à jour terminée. Vous pouvez {RESTART} ou redémarrer manuellement plus tard pour appliquer ces mises à jour.
+liteyuki.current_config=Configuration actuelle
+liteyuki.static_config=Configuration statique des fichiers
+liteyuki.stored_config=Configuration stockée
+liteyuki.config_set_success=La configuration {KEY}={VAL} a été définie avec succès
+liteyuki.stats.group=Groupe
+liteyuki.stats.user=Ami
+liteyuki.stats.plugin=Plugin
+liteyuki.stats.sent=Envoyé
+liteyuki.stats.received=Reçu
+liteyuki.stats.run_time=Temps d'exécution
+liteyuki.stats.groups=Groupes
+liteyuki.stats.friends=Amis
+liteyuki.stats.plugins=Plugins
+liteyuki.image_mode_on=Activer le mode image Markdown
+liteyuki.image_mode_off=Désactiver le mode image Markdown
+liteyuki.invalid_command=Commande ou paramètre {TEXT} invalide
+liteyuki.reload_resources=Recharger les ressources
+liteyuki.list_resources=Liste des ressources
+liteyuki.reload_resources_success=Rechargement réussi des ressources. Total de {NUM} ressources chargées.
+liteyuki.loaded_resources={NUM} ressources chargées, triées par priorité.
+liteyuki.unloaded_resources=Ressources non chargées
+liteyuki.load_resource_success=Chargement réussi de la ressource {NAME}
+liteyuki.unload_resource_success=Déchargement réussi de la ressource {NAME}
+liteyuki.load_resource_failed=Échec du chargement de la ressource {NAME}
+liteyuki.unload_resource_failed=Échec du déchargement de la ressource {NAME}
+liteyuki.resource_not_found=La ressource {NAME} est introuvable ou non manipulable.
+liteyuki.resource_already_loaded=La ressource {NAME} est déjà chargée. Veuillez ne pas répéter l'opération.
+liteyuki.resource_already_unloaded=La ressource {NAME} est déjà déchargée. Veuillez ne pas répéter l'opération.
+liteyuki.need_reload=Veuillez {BTN} pour recharger et appliquer ces mises à jour.
+liteyuki.dont_repeat=Veuillez ne pas répéter l'opération.
+liteyuki.change_priority_success=La priorité de la ressource {NAME} a été modifiée avec succès.
+liteyuki.change_priority_failed=Échec de la modification de la priorité de la ressource {NAME}.
+liteyuki.group_already=Le groupe {GROUP} est déjà {STATUS}. Aucune action nécessaire.
+liteyuki.group_success=Le groupe {GROUP} a été {STATUS} avec succès.
+liteyuki.permission_denied=Permission refusée.
+liteyuki.config_remove_success=La configuration {KEY} a été supprimée avec succès.
+
+main.current_language=Langue actuelle : {LANG}
+main.enable_webdash=Tableau de bord Web activé : {URL}
+main.monitor.title=Tableau de bord de Liteyuki
+main.monitor.description=Tableau de bord de surveillance du robot Liteyuki
+main.monitor.cpu=Processeur
+main.monitor.memory=Mémoire
+main.monitor.swap=Swap
+main.monitor.disk=Disque
+main.monitor.usage=Utilisation
+main.monitor.total=Total
+main.monitor.used=Utilisé
+main.monitor.free=Libre
+
+data_manager.migrate_success=Migration réussie du modèle de données {NAME}
+
+npm.loaded_plugins=Plugins chargés
+npm.total=Total {TOTAL}
+npm.help=Aide
+npm.usage=Utilisation
+npm.description=Description
+npm.disable=Désactiver
+npm.disable_global=Désactiver globalement
+npm.enable=Activer
+npm.enable_global=Activer globalement
+npm.install=Installer
+npm.uninstall=Désinstaller
+npm.installing=Installation de {NAME} en cours
+npm.cannot_uninstall=Impossible de désinstaller
+npm.no_description=Aucune description
+npm.store_update_success=Mise à jour des données du magasin de plugins réussie
+npm.store_update_failed=Échec de la mise à jour des données du magasin de plugins
+npm.search_result=Résultats de la recherche
+npm.search_no_result=Aucun résultat trouvé
+npm.too_many_results=Trop de résultats. {HIDE_NUM} éléments masqués. Veuillez restreindre la recherche par mots-clés.
+npm.install_success=Installation de {NAME} réussie
+npm.install_failed=Échec de l'installation de {NAME}. Consultez les journaux pour plus d'informations. Si le problème persiste, veuillez consulter {HOMEPAGE} pour obtenir de l'aide.
+npm.uninstall_success=Désinstallation de {NAME} réussie. Les modifications prendront effet au prochain redémarrage.
+npm.uninstall_failed=Échec de la désinstallation de {NAME}
+npm.load_failed=Échec du chargement de {NAME}. Veuillez consulter les détails dans la console, vérifier les dépendances ou la configuration. Si le problème persiste, veuillez consulter {HOMEPAGE} pour obtenir de l'aide.
+npm.plugin_not_found=Plugin {NAME} introuvable dans le magasin. Veuillez vérifier l'orthographe ou effectuer une mise à jour du magasin.
+npm.plugin_not_installed={NAME} n'est pas installé
+npm.plugin_already_installed={NAME} est déjà installé. Veuillez ne pas répéter l'opération.
+npm.author=Auteur
+npm.homepage=Page d'accueil
+npm.pypi=PyPI
+npm.next_page=Page suivante
+npm.prev_page=Page précédente
+npm.update=Mettre à jour
+npm.plugin_cannot_be_toggled=Le plugin {NAME} ne peut pas être activé ou désactivé.
+npm.plugin_already=Le plugin {NAME} est déjà {STATUS}. Aucune action nécessaire.
+npm.toggle_failed=Échec de {STATUS} du plugin {NAME} : {ERROR}
+npm.toggle_success={STATUS} du plugin {NAME} réussi
+npm.page=Page {PAGE}/{TOTAL}
+npm.update_index=Mise à jour de l'index des plugins
+npm.list_plugins=Liste des plugins
+npm.disable_session=Désactivation des plugins pour cette session
+npm.enable_session=Activation des plugins pour cette session
+npm.help=Aide
+npm.search=Recherche
+
+user.profile.edit=Modifier
+user.profile.set=Définir
+user.profile_manager.query=Votre {ATTR} est {VALUE}
+user.profile_manager.set=Votre {ATTR} a été défini sur {VALUE}
+user.profile.settings=Paramètres
+user.profile.info=Informations personnelles
+user.profile.lang=Langue
+user.profile.lang.desc=Définir la langue de l'utilisateur
+user.profile.timezone=Fuseau horaire
+user.profile.timezone.desc=Définir le fuseau horaire de l'utilisateur
+user.profile.theme=Thème
+user.profile.theme.desc=Définir le thème de l'interface utilisateur de l'utilisateur
+user.profile.location=Emplacement
+user.profile.location.desc=Définir l'emplacement de l'utilisateur
+user.profile.nickname=Pseudo
+user.profile.nickname.desc=Définir le surnom du Bot pour l'utilisateur
+user.profile.input_value=Veuillez entrer une valeur pour {ATTR}
+user.profile.set_success={ATTR} a été défini sur {VALUE} avec succès
+user.profile.set_failed=Échec de la définition de {ATTR}. Veuillez vérifier la validité de l'entrée.
+
+rpm.move_up=Monter
+rpm.move_down=Descendre
+rpm.move_top=En haut
+
+weather.city_not_found=Ville {CITY} non trouvée
+weather.weather_not_found=Les informations météorologiques pour la ville {CITY} n'ont pas été trouvées
+weather.no_key=Aucune clé API météo définie. Veuillez ajouter weather_key au fichier de configuration.
+
+status.friends=Amis
+status.groups=Groupes
+status.plugins=Plugins
+status.resources=Ressources
+status.bots=Bots
+status.message_sent=Messages envoyés
+status.message_received=Messages reçus
+status.cpu=Processeur
+status.memory=Mémoire
+status.swap=Swap
+status.disk=Disque
+status.usage=Utilisation
+status.total=Total
+status.used=Utilisé
+status.free=Libre
+status.runtime=Temps d'exécution
+status.days=Jours
+status.hours=Heures
+status.minutes=Minutes
+status.seconds=Secondes
+status.cores=Cœurs
+status.threads=Threads
status.process=Processus
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/ja.lang b/src/resources/vanilla_language/lang/ja.lang
similarity index 98%
rename from liteyuki/resources/vanilla_language/lang/ja.lang
rename to src/resources/vanilla_language/lang/ja.lang
index 2c9a7435..2ebebe6f 100644
--- a/liteyuki/resources/vanilla_language/lang/ja.lang
+++ b/src/resources/vanilla_language/lang/ja.lang
@@ -1,160 +1,160 @@
-language.name=日本語
-
-log.debug=デバッグ
-log.info=情報
-log.warning=警告
-log.error=エラー
-log.success=成功
-
-liteyuki.restart=再起動
-liteyuki.restart_now=今すぐ再起動
-liteyuki.update_restart=更新が完了しました。{RESTART}または後で手動で再起動して、これらの更新を適用してください
-liteyuki.current_config=現在の設定
-liteyuki.static_config=静的ファイルの設定
-liteyuki.stored_config=保存された設定
-liteyuki.config_set_success=設定 {KEY}={VAL} が正常に設定されました
-liteyuki.stats.group=グループ
-liteyuki.stats.user=友達
-liteyuki.stats.plugin=プラグイン
-liteyuki.stats.sent=送信
-liteyuki.stats.received=受信
-liteyuki.stats.run_time=実行時間
-liteyuki.stats.groups=グループ
-liteyuki.stats.friends=友達
-liteyuki.stats.plugins=プラグイン
-liteyuki.image_mode_on=Markdown画像モードをオンにする
-liteyuki.image_mode_off=Markdown画像モードをオフにする
-liteyuki.invalid_command=無効なコマンドまたはパラメータ {TEXT}
-liteyuki.reload_resources=リソースをリロード
-liteyuki.list_resources=リソースパッケージ一覧
-liteyuki.reload_resources_success=リソースのリロードに成功しました。合計 {NUM} 個のリソースパッケージ
-liteyuki.loaded_resources= {NUM} 個のリソースパッケージが読み込まれました。優先順位でソートされます
-liteyuki.unloaded_resources=読み込まれていないリソースパッケージ
-liteyuki.load_resource_success=リソースパッケージ {NAME} を正常に読み込みました
-liteyuki.unload_resource_success=リソースパッケージ {NAME} を正常にアンロードしました
-liteyuki.load_resource_failed=リソースパッケージ {NAME} の読み込みに失敗しました
-liteyuki.unload_resource_failed=リソースパッケージ {NAME} のアンロードに失敗しました
-liteyuki.resource_not_found=リソースパッケージ {NAME} が見つかりませんまたは操作できません
-liteyuki.resource_already_loaded=リソースパッケージ {NAME} はすでに読み込まれています。重複して実行しないでください
-liteyuki.resource_already_unloaded=リソースパッケージ {NAME} はすでにアンロードされています。重複して実行しないでください
-liteyuki.need_reload=これらの更新を適用するには、{BTN} 再起動してください
-liteyuki.dont_repeat=繰り返さないでください
-liteyuki.change_priority_success=リソースパッケージ {NAME} の優先順位を変更しました
-liteyuki.change_priority_failed=リソースパッケージ {NAME} の優先順位の変更に失敗しました
-liteyuki.group_already=グループ {GROUP} はすでに {STATUS} 状態です。再度操作する必要はありません
-liteyuki.group_success=グループ {GROUP} が {STATUS} されました
-liteyuki.permission_denied=権限がありません
-liteyuki.config_remove_success=設定項目 {KEY} を削除しました
-
-main.current_language=現在の言語設定: {LANG}
-main.enable_webdash=ウェブダッシュボードが有効になりました: {URL}
-main.monitor.title=Liteyuki モニター
-main.monitor.description=Liteyuki ボットの監視パネル
-main.monitor.cpu=CPU
-main.monitor.memory=メモリ
-main.monitor.swap=スワップ
-main.monitor.disk=ディスク
-main.monitor.usage=使用率
-main.monitor.total=合計
-main.monitor.used=使用済み
-main.monitor.free=空き容量
-
-data_manager.migrate_success=データモデル {NAME} が正常に移行されました
-
-npm.loaded_plugins=読み込まれたプラグイン
-npm.total=合計 {TOTAL}
-npm.help=ヘルプ
-npm.usage=使用法
-npm.description=説明
-npm.disable=無効にする
-npm.disable_global=グローバルで無効にする
-npm.enable=有効にする
-npm.enable_global=グローバルで有効にする
-npm.install=インストール
-npm.uninstall=アンインストール
-npm.installing={NAME} をインストールしています
-npm.cannot_uninstall=アンインストールできません
-npm.no_description=説明なし
-npm.store_update_success=プラグインストアのデータが正常に更新されました
-npm.store_update_failed=プラグインストアのデータの更新に失敗しました
-npm.search_result=検索結果
-npm.search_no_result=検索結果がありません
-npm.too_many_results=多すぎる結果です。{HIDE_NUM} 件が非表示にされました。キーワードを絞って検索してください
-npm.install_success={NAME} を正常にインストールしました
-npm.install_failed={NAME} のインストールに失敗しました。ログを参照して詳細情報を取得し、解決できない場合は{HOMEPAGE}を訪問してサポートを求めてください
-npm.uninstall_success={NAME} を正常にアンインストールしました。次回の再起動で有効になります
-npm.uninstall_failed={NAME} のアンインストールに失敗しました
-npm.load_failed={NAME} の読み込みに失敗しました。詳細情報はコンソールで確認し、依存関係または設定が正しいかどうかを確認し、解決できない場合は{HOMEPAGE}を訪問してサポートを求めてください
-npm.plugin_not_found={NAME} がプラグインストアで見つかりませんでした。ストア情報を更新するか、スペルを確認してください
-npm.plugin_not_installed={NAME} がインストールされていません
-npm.plugin_already_installed={NAME} はすでにインストールされています。重複して実行しないでください
-npm.author=作者
-npm.homepage=ホームページ
-npm.pypi=PyPI
-npm.next_page=次のページ
-npm.prev_page=前のページ
-npm.update=更新
-npm.plugin_cannot_be_toggled=プラグイン {NAME} を有効または無効にできません
-npm.plugin_already=プラグイン {NAME} はすでに {STATUS} 状態です。再度操作する必要はありません
-npm.toggle_failed=プラグイン {NAME} を {STATUS} できませんでした: {ERROR}
-npm.toggle_success=プラグイン {NAME} を {STATUS} しました
-npm.page={PAGE}/{TOTAL} ページ
-npm.update_index=プラグインインデックスを更新
-npm.list_plugins=プラグイン一覧
-npm.disable_session=セッション中にプラグインを無効にしました
-npm.enable_session=セッション中にプラグインを有効にしました
-npm.help=ヘルプ
-npm.search=検索
-
-user.profile.edit=編集
-user.profile.set=設定
-user.profile_manager.query=あなたのプロファイル {ATTR} は {VALUE} です
-user.profile_manager.set=あなたのプロファイル {ATTR} を {VALUE} に設定しました
-user.profile.settings=設定
-user.profile.info=情報
-user.profile.lang=言語
-user.profile.lang.desc=ユーザーの言語を設定します
-user.profile.timezone=タイムゾーン
-user.profile.timezone.desc=ユーザーの現在のタイムゾーンを設定します
-user.profile.theme=テーマ
-user.profile.theme.desc=ユーザーのUIテーマを設定します
-user.profile.location=位置
-user.profile.location.desc=ユーザーの位置情報を設定します
-user.profile.nickname=ニックネーム
-user.profile.nickname.desc=ボットがユーザーを呼ぶための名前を設定します
-user.profile.input_value={ATTR} の値を入力してください
-user.profile.set_success={ATTR} を {VALUE} に設定しました
-user.profile.set_failed={ATTR} の設定に失敗しました。入力が正しいかどうかを確認してください
-
-rpm.move_up=上に移動
-rpm.move_down=下に移動
-rpm.move_top=トップに移動
-
-weather.city_not_found=都市 {CITY} が見つかりません
-weather.weather_not_found=都市 {CITY} の天気情報が見つかりません
-weather.no_key=天気APIキーが設定されていません。設定ファイルにweather_keyを追加してください
-
-status.friends=友達
-status.groups=グループ
-status.plugins=プラグイン
-status.resources=リソースパッケージ
-status.bots=ボット
-status.message_sent=メッセージを送信
-status.message_received=メッセージを受信
-status.cpu=CPU
-status.memory=メモリ
-status.swap=スワップ
-status.disk=ディスク
-status.usage=使用率
-status.total=合計
-status.used=使用済み
-status.free=空き容量
-status.runtime=実行時間
-status.days=日
-status.hours=時間
-status.minutes=分
-status.seconds=秒
-status.cores=コア
-status.threads=スレッド
-status.process=プロセス
+language.name=日本語
+
+log.debug=デバッグ
+log.info=情報
+log.warning=警告
+log.error=エラー
+log.success=成功
+
+liteyuki.restart=再起動
+liteyuki.restart_now=今すぐ再起動
+liteyuki.update_restart=更新が完了しました。{RESTART}または後で手動で再起動して、これらの更新を適用してください
+liteyuki.current_config=現在の設定
+liteyuki.static_config=静的ファイルの設定
+liteyuki.stored_config=保存された設定
+liteyuki.config_set_success=設定 {KEY}={VAL} が正常に設定されました
+liteyuki.stats.group=グループ
+liteyuki.stats.user=友達
+liteyuki.stats.plugin=プラグイン
+liteyuki.stats.sent=送信
+liteyuki.stats.received=受信
+liteyuki.stats.run_time=実行時間
+liteyuki.stats.groups=グループ
+liteyuki.stats.friends=友達
+liteyuki.stats.plugins=プラグイン
+liteyuki.image_mode_on=Markdown画像モードをオンにする
+liteyuki.image_mode_off=Markdown画像モードをオフにする
+liteyuki.invalid_command=無効なコマンドまたはパラメータ {TEXT}
+liteyuki.reload_resources=リソースをリロード
+liteyuki.list_resources=リソースパッケージ一覧
+liteyuki.reload_resources_success=リソースのリロードに成功しました。合計 {NUM} 個のリソースパッケージ
+liteyuki.loaded_resources= {NUM} 個のリソースパッケージが読み込まれました。優先順位でソートされます
+liteyuki.unloaded_resources=読み込まれていないリソースパッケージ
+liteyuki.load_resource_success=リソースパッケージ {NAME} を正常に読み込みました
+liteyuki.unload_resource_success=リソースパッケージ {NAME} を正常にアンロードしました
+liteyuki.load_resource_failed=リソースパッケージ {NAME} の読み込みに失敗しました
+liteyuki.unload_resource_failed=リソースパッケージ {NAME} のアンロードに失敗しました
+liteyuki.resource_not_found=リソースパッケージ {NAME} が見つかりませんまたは操作できません
+liteyuki.resource_already_loaded=リソースパッケージ {NAME} はすでに読み込まれています。重複して実行しないでください
+liteyuki.resource_already_unloaded=リソースパッケージ {NAME} はすでにアンロードされています。重複して実行しないでください
+liteyuki.need_reload=これらの更新を適用するには、{BTN} 再起動してください
+liteyuki.dont_repeat=繰り返さないでください
+liteyuki.change_priority_success=リソースパッケージ {NAME} の優先順位を変更しました
+liteyuki.change_priority_failed=リソースパッケージ {NAME} の優先順位の変更に失敗しました
+liteyuki.group_already=グループ {GROUP} はすでに {STATUS} 状態です。再度操作する必要はありません
+liteyuki.group_success=グループ {GROUP} が {STATUS} されました
+liteyuki.permission_denied=権限がありません
+liteyuki.config_remove_success=設定項目 {KEY} を削除しました
+
+main.current_language=現在の言語設定: {LANG}
+main.enable_webdash=ウェブダッシュボードが有効になりました: {URL}
+main.monitor.title=Liteyuki モニター
+main.monitor.description=Liteyuki ボットの監視パネル
+main.monitor.cpu=CPU
+main.monitor.memory=メモリ
+main.monitor.swap=スワップ
+main.monitor.disk=ディスク
+main.monitor.usage=使用率
+main.monitor.total=合計
+main.monitor.used=使用済み
+main.monitor.free=空き容量
+
+data_manager.migrate_success=データモデル {NAME} が正常に移行されました
+
+npm.loaded_plugins=読み込まれたプラグイン
+npm.total=合計 {TOTAL}
+npm.help=ヘルプ
+npm.usage=使用法
+npm.description=説明
+npm.disable=無効にする
+npm.disable_global=グローバルで無効にする
+npm.enable=有効にする
+npm.enable_global=グローバルで有効にする
+npm.install=インストール
+npm.uninstall=アンインストール
+npm.installing={NAME} をインストールしています
+npm.cannot_uninstall=アンインストールできません
+npm.no_description=説明なし
+npm.store_update_success=プラグインストアのデータが正常に更新されました
+npm.store_update_failed=プラグインストアのデータの更新に失敗しました
+npm.search_result=検索結果
+npm.search_no_result=検索結果がありません
+npm.too_many_results=多すぎる結果です。{HIDE_NUM} 件が非表示にされました。キーワードを絞って検索してください
+npm.install_success={NAME} を正常にインストールしました
+npm.install_failed={NAME} のインストールに失敗しました。ログを参照して詳細情報を取得し、解決できない場合は{HOMEPAGE}を訪問してサポートを求めてください
+npm.uninstall_success={NAME} を正常にアンインストールしました。次回の再起動で有効になります
+npm.uninstall_failed={NAME} のアンインストールに失敗しました
+npm.load_failed={NAME} の読み込みに失敗しました。詳細情報はコンソールで確認し、依存関係または設定が正しいかどうかを確認し、解決できない場合は{HOMEPAGE}を訪問してサポートを求めてください
+npm.plugin_not_found={NAME} がプラグインストアで見つかりませんでした。ストア情報を更新するか、スペルを確認してください
+npm.plugin_not_installed={NAME} がインストールされていません
+npm.plugin_already_installed={NAME} はすでにインストールされています。重複して実行しないでください
+npm.author=作者
+npm.homepage=ホームページ
+npm.pypi=PyPI
+npm.next_page=次のページ
+npm.prev_page=前のページ
+npm.update=更新
+npm.plugin_cannot_be_toggled=プラグイン {NAME} を有効または無効にできません
+npm.plugin_already=プラグイン {NAME} はすでに {STATUS} 状態です。再度操作する必要はありません
+npm.toggle_failed=プラグイン {NAME} を {STATUS} できませんでした: {ERROR}
+npm.toggle_success=プラグイン {NAME} を {STATUS} しました
+npm.page={PAGE}/{TOTAL} ページ
+npm.update_index=プラグインインデックスを更新
+npm.list_plugins=プラグイン一覧
+npm.disable_session=セッション中にプラグインを無効にしました
+npm.enable_session=セッション中にプラグインを有効にしました
+npm.help=ヘルプ
+npm.search=検索
+
+user.profile.edit=編集
+user.profile.set=設定
+user.profile_manager.query=あなたのプロファイル {ATTR} は {VALUE} です
+user.profile_manager.set=あなたのプロファイル {ATTR} を {VALUE} に設定しました
+user.profile.settings=設定
+user.profile.info=情報
+user.profile.lang=言語
+user.profile.lang.desc=ユーザーの言語を設定します
+user.profile.timezone=タイムゾーン
+user.profile.timezone.desc=ユーザーの現在のタイムゾーンを設定します
+user.profile.theme=テーマ
+user.profile.theme.desc=ユーザーのUIテーマを設定します
+user.profile.location=位置
+user.profile.location.desc=ユーザーの位置情報を設定します
+user.profile.nickname=ニックネーム
+user.profile.nickname.desc=ボットがユーザーを呼ぶための名前を設定します
+user.profile.input_value={ATTR} の値を入力してください
+user.profile.set_success={ATTR} を {VALUE} に設定しました
+user.profile.set_failed={ATTR} の設定に失敗しました。入力が正しいかどうかを確認してください
+
+rpm.move_up=上に移動
+rpm.move_down=下に移動
+rpm.move_top=トップに移動
+
+weather.city_not_found=都市 {CITY} が見つかりません
+weather.weather_not_found=都市 {CITY} の天気情報が見つかりません
+weather.no_key=天気APIキーが設定されていません。設定ファイルにweather_keyを追加してください
+
+status.friends=友達
+status.groups=グループ
+status.plugins=プラグイン
+status.resources=リソースパッケージ
+status.bots=ボット
+status.message_sent=メッセージを送信
+status.message_received=メッセージを受信
+status.cpu=CPU
+status.memory=メモリ
+status.swap=スワップ
+status.disk=ディスク
+status.usage=使用率
+status.total=合計
+status.used=使用済み
+status.free=空き容量
+status.runtime=実行時間
+status.days=日
+status.hours=時間
+status.minutes=分
+status.seconds=秒
+status.cores=コア
+status.threads=スレッド
+status.process=プロセス
status.description=軽雪監視パネル
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/ko.lang b/src/resources/vanilla_language/lang/ko.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/ko.lang
rename to src/resources/vanilla_language/lang/ko.lang
index ea7b8820..609b494c 100644
--- a/liteyuki/resources/vanilla_language/lang/ko.lang
+++ b/src/resources/vanilla_language/lang/ko.lang
@@ -1,159 +1,159 @@
-language.name=한국어
-
-log.debug=디버그
-log.info=정보
-log.warning=경고
-log.error=오류
-log.success=성공
-
-liteyuki.restart=재시작
-liteyuki.restart_now=즉시 재시작
-liteyuki.update_restart=업데이트가 완료되었습니다. {RESTART}하거나 나중에 수동으로 재시작하여 이 업데이트를 적용할 수 있습니다.
-liteyuki.current_config=현재 구성 항목
-liteyuki.static_config=정적 파일 구성 항목
-liteyuki.stored_config=저장된 구성 항목
-liteyuki.config_set_success=구성 항목 {KEY}={VAL} 설정 성공
-liteyuki.stats.group=그룹
-liteyuki.stats.user=친구
-liteyuki.stats.plugin=플러그인
-liteyuki.stats.sent=전송
-liteyuki.stats.received=수신
-liteyuki.stats.run_time=실행 시간
-liteyuki.stats.groups=그룹
-liteyuki.stats.friends=친구
-liteyuki.stats.plugins=플러그인
-liteyuki.image_mode_on=Markdown 이미지 모드 활성화
-liteyuki.image_mode_off=Markdown 이미지 모드 비활성화
-liteyuki.invalid_command=유효하지 않은 명령 또는 매개변수 {TEXT}
-liteyuki.reload_resources=자원 다시로드
-liteyuki.list_resources=자원 목록
-liteyuki.reload_resources_success=자원 다시로드 성공, 총 {NUM}개 자원 패키지
-liteyuki.loaded_resources=로드된 자원 {NUM}개, 우선 순위별로 정렬됨
-liteyuki.unloaded_resources=로드되지 않은 자원 패키지
-liteyuki.load_resource_success=자원 패키지 {NAME} 로드 성공
-liteyuki.unload_resource_success=자원 패키지 {NAME} 언로드 성공
-liteyuki.load_resource_failed=자원 패키지 {NAME} 로드 실패
-liteyuki.unload_resource_failed=자원 패키지 {NAME} 언로드 실패
-liteyuki.resource_not_found=자원 패키지 {NAME}이(가) 존재하지 않거나 조작할 수 없습니다.
-liteyuki.resource_already_loaded=자원 패키지 {NAME}이(가) 이미 로드되어 있습니다. 중복 작업을 피하세요.
-liteyuki.resource_already_unloaded=자원 패키지 {NAME}이(가) 이미 언로드되어 있습니다. 중복 작업을 피하세요.
-liteyuki.need_reload={BTN}을(를) 다시로드하여 이러한 업데이트를 적용하세요.
-liteyuki.dont_repeat=중복 작업을 피하세요.
-liteyuki.change_priority_success=자원 패키지 {NAME}의 우선 순위가 성공적으로 변경되었습니다.
-liteyuki.change_priority_failed=자원 패키지 {NAME}의 우선 순위 변경에 실패했습니다.
-liteyuki.group_already=그룹 {GROUP}은(는) 이미 {STATUS} 상태이므로 중복 작업을 피하세요.
-liteyuki.group_success=그룹 {GROUP} {STATUS} 성공
-liteyuki.permission_denied=권한이 거부되었습니다.
-liteyuki.config_remove_success=구성 항목 {KEY} 제거 성공
-
-main.current_language=현재 구성 언어: {LANG}
-main.enable_webdash=웹 대시보드가 활성화되었습니다: {URL}
-main.monitor.title=Liteyuki 모니터링 패널
-main.monitor.description=Liteyuki 봇 모니터링 패널
-main.monitor.cpu=CPU
-main.monitor.memory=메모리
-main.monitor.swap=스왑
-main.monitor.disk=디스크
-main.monitor.usage=사용률
-main.monitor.total=총량
-main.monitor.used=사용함
-main.monitor.free=여유
-
-data_manager.migrate_success=데이터 모델 {NAME} 이(가) 성공적으로 이동되었습니다.
-
-npm.loaded_plugins=로드된 플러그인
-npm.total=총 {TOTAL}
-npm.help=도움말
-npm.usage=사용법
-npm.description=설명
-npm.disable=비활성화
-npm.disable_global=전역 비활성화
-npm.enable=활성화
-npm.enable_global=전역 활성화
-npm.install=설치
-npm.uninstall=제거
-npm.installing=설치 중 {NAME}
-npm.cannot_uninstall=제거할 수 없음
-npm.no_description=설명 없음
-npm.store_update_success=플러그인 스토어 업데이트 성공
-npm.store_update_failed=플러그인 스토어 업데이트 실패
-npm.search_result=검색 결과
-npm.search_no_result=검색 결과 없음
-npm.too_many_results=결과가 너무 많습니다. {HIDE_NUM}개의 항목이 숨겨졌습니다. 검색어를 제한하세요.
-npm.install_success={NAME} 설치 성공
-npm.install_failed={NAME} 설치 실패. 자세한 내용은 로그를 확인하거나 문제를 해결할 수 없는 경우 {HOMEPAGE}을(를) 방문하세요.
-npm.uninstall_success={NAME} 제거 성공. 다음 재시작에 적용됩니다.
-npm.uninstall_failed={NAME} 제거 실패
-npm.load_failed={NAME} 로드 실패. 의존성 또는 설정을 확인하고 문제를 해결할 수 없는 경우 {HOMEPAGE}을(를) 방문하세요.
-npm.plugin_not_found={NAME}을(를) 스토어에서 찾을 수 없습니다. 스토어 정보를 업데이트하거나 철자를 확인하세요.
-npm.plugin_not_installed={NAME}이(가) 설치되지 않았습니다.
-npm.plugin_already_installed={NAME}이(가) 이미 설치되었습니다. 중복 설치를 피하세요.
-npm.author=저자
-npm.homepage=홈페이지
-npm.pypi=PyPI
-npm.next_page=다음 페이지
-npm.prev_page=이전 페이지
-npm.update=업데이트
-npm.plugin_cannot_be_toggled={NAME} 플러그인은 활성화 또는 비활성화할 수 없습니다.
-npm.plugin_already={NAME} 플러그인은 이미 {STATUS} 상태입니다. 중복 작업을 피하세요.
-npm.toggle_failed={NAME} 플러그인 {STATUS} 실패: {ERROR}
-npm.toggle_success={NAME} 플러그인 {STATUS} 성공
-npm.page={PAGE}/{TOTAL} 페이지
-npm.update_index=플러그인 인덱스 업데이트
-npm.list_plugins=플러그인 목록
-npm.disable_session=현재 세션에서 플러그인을 비활성화합니다.
-npm.enable_session=현재 세션에서 플러그인을 활성화합니다.
-npm.help=도움말
-npm.search=검색
-
-user.profile.edit=수정
-user.profile.set=설정
-user.profile_manager.query=당신의 프로필 {ATTR}은(는) {VALUE}입니다.
-user.profile_manager.set=당신의 프로필 {ATTR}은(는) {VALUE}(으)로 설정되었습니다.
-user.profile.settings=설정
-user.profile.info=프로필 정보
-user.profile.lang=언어
-user.profile.lang.desc=사용자 언어 설정
-user.profile.timezone=시간대
-user.profile.timezone.desc=사용자의 현재 시간대 설정
-user.profile.theme=테마
-user.profile.theme.desc=사용자 인터페이스 테마 설정
-user.profile.location=위치
-user.profile.location.desc=사용자 위치 정보 설정
-user.profile.nickname=별명
-user.profile.nickname.desc=Bot이 사용자를 부를 때 사용되는 이름 설정
-user.profile.input_value={ATTR}의 값을 입력하세요.
-user.profile.set_success={ATTR}가 {VALUE}(으)로 설정되었습니다.
-user.profile.set_failed={ATTR} 설정 실패. 입력이 유효한지 확인하세요.
-
-rpm.move_up=위로 이동
-rpm.move_down=아래로 이동
-rpm.move_top=최상단으로 이동
-
-weather.city_not_found={CITY} 도시를 찾을 수 없습니다.
-weather.weather_not_found={CITY} 도시의 날씨 정보를 찾을 수 없습니다.
-weather.no_key=날씨 API 키가 설정되지 않았습니다. 설정 파일에 weather_key를 추가하세요.
-
-status.friends=친구
-status.groups=그룹
-status.plugins=플러그인
-status.resources=자원 패키지
-status.bots=봇
-status.message_sent=전송된 메시지
-status.message_received=수신된 메시지
-status.cpu=CPU
-status.memory=메모리
-status.swap=스왑
-status.disk=디스크
-status.usage=사용률
-status.total=총량
-status.used=사용함
-status.free=여유
-status.runtime=실행 시간
-status.days=일
-status.hours=시간
-status.minutes=분
-status.seconds=초
-status.cores=코어
-status.threads=스레드
+language.name=한국어
+
+log.debug=디버그
+log.info=정보
+log.warning=경고
+log.error=오류
+log.success=성공
+
+liteyuki.restart=재시작
+liteyuki.restart_now=즉시 재시작
+liteyuki.update_restart=업데이트가 완료되었습니다. {RESTART}하거나 나중에 수동으로 재시작하여 이 업데이트를 적용할 수 있습니다.
+liteyuki.current_config=현재 구성 항목
+liteyuki.static_config=정적 파일 구성 항목
+liteyuki.stored_config=저장된 구성 항목
+liteyuki.config_set_success=구성 항목 {KEY}={VAL} 설정 성공
+liteyuki.stats.group=그룹
+liteyuki.stats.user=친구
+liteyuki.stats.plugin=플러그인
+liteyuki.stats.sent=전송
+liteyuki.stats.received=수신
+liteyuki.stats.run_time=실행 시간
+liteyuki.stats.groups=그룹
+liteyuki.stats.friends=친구
+liteyuki.stats.plugins=플러그인
+liteyuki.image_mode_on=Markdown 이미지 모드 활성화
+liteyuki.image_mode_off=Markdown 이미지 모드 비활성화
+liteyuki.invalid_command=유효하지 않은 명령 또는 매개변수 {TEXT}
+liteyuki.reload_resources=자원 다시로드
+liteyuki.list_resources=자원 목록
+liteyuki.reload_resources_success=자원 다시로드 성공, 총 {NUM}개 자원 패키지
+liteyuki.loaded_resources=로드된 자원 {NUM}개, 우선 순위별로 정렬됨
+liteyuki.unloaded_resources=로드되지 않은 자원 패키지
+liteyuki.load_resource_success=자원 패키지 {NAME} 로드 성공
+liteyuki.unload_resource_success=자원 패키지 {NAME} 언로드 성공
+liteyuki.load_resource_failed=자원 패키지 {NAME} 로드 실패
+liteyuki.unload_resource_failed=자원 패키지 {NAME} 언로드 실패
+liteyuki.resource_not_found=자원 패키지 {NAME}이(가) 존재하지 않거나 조작할 수 없습니다.
+liteyuki.resource_already_loaded=자원 패키지 {NAME}이(가) 이미 로드되어 있습니다. 중복 작업을 피하세요.
+liteyuki.resource_already_unloaded=자원 패키지 {NAME}이(가) 이미 언로드되어 있습니다. 중복 작업을 피하세요.
+liteyuki.need_reload={BTN}을(를) 다시로드하여 이러한 업데이트를 적용하세요.
+liteyuki.dont_repeat=중복 작업을 피하세요.
+liteyuki.change_priority_success=자원 패키지 {NAME}의 우선 순위가 성공적으로 변경되었습니다.
+liteyuki.change_priority_failed=자원 패키지 {NAME}의 우선 순위 변경에 실패했습니다.
+liteyuki.group_already=그룹 {GROUP}은(는) 이미 {STATUS} 상태이므로 중복 작업을 피하세요.
+liteyuki.group_success=그룹 {GROUP} {STATUS} 성공
+liteyuki.permission_denied=권한이 거부되었습니다.
+liteyuki.config_remove_success=구성 항목 {KEY} 제거 성공
+
+main.current_language=현재 구성 언어: {LANG}
+main.enable_webdash=웹 대시보드가 활성화되었습니다: {URL}
+main.monitor.title=Liteyuki 모니터링 패널
+main.monitor.description=Liteyuki 봇 모니터링 패널
+main.monitor.cpu=CPU
+main.monitor.memory=메모리
+main.monitor.swap=스왑
+main.monitor.disk=디스크
+main.monitor.usage=사용률
+main.monitor.total=총량
+main.monitor.used=사용함
+main.monitor.free=여유
+
+data_manager.migrate_success=데이터 모델 {NAME} 이(가) 성공적으로 이동되었습니다.
+
+npm.loaded_plugins=로드된 플러그인
+npm.total=총 {TOTAL}
+npm.help=도움말
+npm.usage=사용법
+npm.description=설명
+npm.disable=비활성화
+npm.disable_global=전역 비활성화
+npm.enable=활성화
+npm.enable_global=전역 활성화
+npm.install=설치
+npm.uninstall=제거
+npm.installing=설치 중 {NAME}
+npm.cannot_uninstall=제거할 수 없음
+npm.no_description=설명 없음
+npm.store_update_success=플러그인 스토어 업데이트 성공
+npm.store_update_failed=플러그인 스토어 업데이트 실패
+npm.search_result=검색 결과
+npm.search_no_result=검색 결과 없음
+npm.too_many_results=결과가 너무 많습니다. {HIDE_NUM}개의 항목이 숨겨졌습니다. 검색어를 제한하세요.
+npm.install_success={NAME} 설치 성공
+npm.install_failed={NAME} 설치 실패. 자세한 내용은 로그를 확인하거나 문제를 해결할 수 없는 경우 {HOMEPAGE}을(를) 방문하세요.
+npm.uninstall_success={NAME} 제거 성공. 다음 재시작에 적용됩니다.
+npm.uninstall_failed={NAME} 제거 실패
+npm.load_failed={NAME} 로드 실패. 의존성 또는 설정을 확인하고 문제를 해결할 수 없는 경우 {HOMEPAGE}을(를) 방문하세요.
+npm.plugin_not_found={NAME}을(를) 스토어에서 찾을 수 없습니다. 스토어 정보를 업데이트하거나 철자를 확인하세요.
+npm.plugin_not_installed={NAME}이(가) 설치되지 않았습니다.
+npm.plugin_already_installed={NAME}이(가) 이미 설치되었습니다. 중복 설치를 피하세요.
+npm.author=저자
+npm.homepage=홈페이지
+npm.pypi=PyPI
+npm.next_page=다음 페이지
+npm.prev_page=이전 페이지
+npm.update=업데이트
+npm.plugin_cannot_be_toggled={NAME} 플러그인은 활성화 또는 비활성화할 수 없습니다.
+npm.plugin_already={NAME} 플러그인은 이미 {STATUS} 상태입니다. 중복 작업을 피하세요.
+npm.toggle_failed={NAME} 플러그인 {STATUS} 실패: {ERROR}
+npm.toggle_success={NAME} 플러그인 {STATUS} 성공
+npm.page={PAGE}/{TOTAL} 페이지
+npm.update_index=플러그인 인덱스 업데이트
+npm.list_plugins=플러그인 목록
+npm.disable_session=현재 세션에서 플러그인을 비활성화합니다.
+npm.enable_session=현재 세션에서 플러그인을 활성화합니다.
+npm.help=도움말
+npm.search=검색
+
+user.profile.edit=수정
+user.profile.set=설정
+user.profile_manager.query=당신의 프로필 {ATTR}은(는) {VALUE}입니다.
+user.profile_manager.set=당신의 프로필 {ATTR}은(는) {VALUE}(으)로 설정되었습니다.
+user.profile.settings=설정
+user.profile.info=프로필 정보
+user.profile.lang=언어
+user.profile.lang.desc=사용자 언어 설정
+user.profile.timezone=시간대
+user.profile.timezone.desc=사용자의 현재 시간대 설정
+user.profile.theme=테마
+user.profile.theme.desc=사용자 인터페이스 테마 설정
+user.profile.location=위치
+user.profile.location.desc=사용자 위치 정보 설정
+user.profile.nickname=별명
+user.profile.nickname.desc=Bot이 사용자를 부를 때 사용되는 이름 설정
+user.profile.input_value={ATTR}의 값을 입력하세요.
+user.profile.set_success={ATTR}가 {VALUE}(으)로 설정되었습니다.
+user.profile.set_failed={ATTR} 설정 실패. 입력이 유효한지 확인하세요.
+
+rpm.move_up=위로 이동
+rpm.move_down=아래로 이동
+rpm.move_top=최상단으로 이동
+
+weather.city_not_found={CITY} 도시를 찾을 수 없습니다.
+weather.weather_not_found={CITY} 도시의 날씨 정보를 찾을 수 없습니다.
+weather.no_key=날씨 API 키가 설정되지 않았습니다. 설정 파일에 weather_key를 추가하세요.
+
+status.friends=친구
+status.groups=그룹
+status.plugins=플러그인
+status.resources=자원 패키지
+status.bots=봇
+status.message_sent=전송된 메시지
+status.message_received=수신된 메시지
+status.cpu=CPU
+status.memory=메모리
+status.swap=스왑
+status.disk=디스크
+status.usage=사용률
+status.total=총량
+status.used=사용함
+status.free=여유
+status.runtime=실행 시간
+status.days=일
+status.hours=시간
+status.minutes=분
+status.seconds=초
+status.cores=코어
+status.threads=스레드
status.process=프로세스
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/ru.lang b/src/resources/vanilla_language/lang/ru.lang
similarity index 98%
rename from liteyuki/resources/vanilla_language/lang/ru.lang
rename to src/resources/vanilla_language/lang/ru.lang
index b04944a9..ffd4c1ac 100644
--- a/liteyuki/resources/vanilla_language/lang/ru.lang
+++ b/src/resources/vanilla_language/lang/ru.lang
@@ -1,159 +1,159 @@
-language.name=Китайский (упрощенный)
-
-log.debug=Отладка
-log.info=Информация
-log.warning=Предупреждение
-log.error=Ошибка
-log.success=Успешно
-
-liteyuki.restart=Перезагрузить
-liteyuki.restart_now=Перезагрузить сейчас
-liteyuki.update_restart=Обновление завершено. Вы можете {RESTART} или перезагрузить вручную позже, чтобы применить эти обновления
-liteyuki.current_config=Текущая конфигурация
-liteyuki.static_config=Конфигурация статических файлов
-liteyuki.stored_config=Сохраненная конфигурация
-liteyuki.config_set_success=Конфигурация {KEY}={VAL} успешно установлена
-liteyuki.stats.group=Группа
-liteyuki.stats.user=Пользователь
-liteyuki.stats.plugin=Плагин
-liteyuki.stats.sent=Отправлено
-liteyuki.stats.received=Получено
-liteyuki.stats.run_time=Время работы
-liteyuki.stats.groups=Группы
-liteyuki.stats.friends=Друзья
-liteyuki.stats.plugins=Плагины
-liteyuki.image_mode_on=Включить режим изображений Markdown
-liteyuki.image_mode_off=Отключить режим изображений Markdown
-liteyuki.invalid_command=Неверная команда или параметр {TEXT}
-liteyuki.reload_resources=Перезагрузить ресурсы
-liteyuki.list_resources=Список ресурсов
-liteyuki.reload_resources_success=Ресурсы успешно перезагружены. Всего {NUM} ресурсов
-liteyuki.loaded_resources=Загружено {NUM} ресурсов, отсортированных по приоритету
-liteyuki.unloaded_resources=Незагруженные ресурсы
-liteyuki.load_resource_success=Ресурс {NAME} успешно загружен
-liteyuki.unload_resource_success=Ресурс {NAME} успешно выгружен
-liteyuki.load_resource_failed=Не удалось загрузить ресурс {NAME}
-liteyuki.unload_resource_failed=Не удалось выгрузить ресурс {NAME}
-liteyuki.resource_not_found=Ресурс {NAME} не найден или не доступен
-liteyuki.resource_already_loaded=Ресурс {NAME} уже загружен, повторная загрузка невозможна
-liteyuki.resource_already_unloaded=Ресурс {NAME} уже выгружен, повторная выгрузка невозможна
-liteyuki.need_reload=Пожалуйста, {BTN}, чтобы применить эти обновления
-liteyuki.dont_repeat=Пожалуйста, не повторяйте эту операцию
-liteyuki.change_priority_success=Приоритет ресурса {NAME} успешно изменен
-liteyuki.change_priority_failed=Не удалось изменить приоритет ресурса {NAME}
-liteyuki.group_already=Группа {GROUP} уже в состоянии {STATUS}, дополнительные действия не требуются
-liteyuki.group_success=Группа {GROUP} {STATUS} успешно
-liteyuki.permission_denied=Недостаточно прав
-liteyuki.config_remove_success=Конфигурация {KEY} успешно удалена
-
-main.current_language=Текущий язык конфигурации: {LANG}
-main.enable_webdash=Веб-панель мониторинга успешно включена: {URL}
-main.monitor.title=Панель мониторинга Lightyuki
-main.monitor.description=Панель мониторинга бота Lightyuki
-main.monitor.cpu=ЦП
-main.monitor.memory=Память
-main.monitor.swap=Подкачка
-main.monitor.disk=Диск
-main.monitor.usage=Использование
-main.monitor.total=Всего
-main.monitor.used=Использовано
-main.monitor.free=Свободно
-
-data_manager.migrate_success=Модель данных {NAME} успешно перенесена
-
-npm.loaded_plugins=Загруженные плагины
-npm.total=Всего {TOTAL}
-npm.help=Помощь
-npm.usage=Использование
-npm.description=Описание
-npm.disable=Отключить
-npm.disable_global=Глобально отключить
-npm.enable=Включить
-npm.enable_global=Глобально включить
-npm.install=Установить
-npm.uninstall=Удалить
-npm.installing=Установка {NAME}
-npm.cannot_uninstall=Невозможно удалить
-npm.no_description=Нет описания
-npm.store_update_success=Обновление данных магазина плагинов успешно завершено
-npm.store_update_failed=Не удалось обновить данные магазина плагинов
-npm.search_result=Результаты поиска
-npm.search_no_result=Нет результатов поиска
-npm.too_many_results=Слишком много результатов, скрыто {HIDE_NUM} позиций. Уточните запрос
-npm.install_success={NAME} успешно установлен
-npm.install_failed={NAME} не удалось установить. Для получения дополнительной информации, пожалуйста, посетите {HOMEPAGE}
-npm.uninstall_success={NAME} успешно удален. Изменения вступят в силу после перезагрузки
-npm.uninstall_failed={NAME} не удалось удалить
-npm.load_failed={NAME} не удалось загрузить. Пожалуйста, проверьте детали в консоли, убедитесь, что зависимости или конфигурация правильны. Если проблема не устранена, посетите {HOMEPAGE}
-npm.plugin_not_found={NAME} не найден в магазине. Попробуйте обновить информацию магазина или проверьте правильность написания
-npm.plugin_not_installed={NAME} не установлен
-npm.plugin_already_installed={NAME} уже установлен, повторная установка невозможна
-npm.author=Автор
-npm.homepage=Домашняя страница
-npm.pypi=PyPI
-npm.next_page=Следующая страница
-npm.prev_page=Предыдущая страница
-npm.update=Обновить
-npm.plugin_cannot_be_toggled=Плагин {NAME} невозможно включить или выключить
-npm.plugin_already=Плагин {NAME} уже в состоянии {STATUS}, дополнительные действия не требуются
-npm.toggle_failed=Не удалось {STATUS} плагин {NAME}: {ERROR}
-npm.toggle_success=Плагин {NAME} успешно {STATUS}
-npm.page=Страница {PAGE}/{TOTAL}
-npm.update_index=Обновить индекс плагинов
-npm.list_plugins=Список плагинов
-npm.disable_session=Отключить плагины для текущей сессии
-npm.enable_session=Включить плагины для текущей сессии
-npm.help=Помощь
-npm.search=Поиск
-
-user.profile.edit=Редактировать
-user.profile.set=Установить
-user.profile_manager.query=Ваша личная информация {ATTR} - {VALUE}
-user.profile_manager.set=Ваша личная информация {ATTR} успешно установлена как {VALUE}
-user.profile.settings=Настройки
-user.profile.info=Информация о профиле
-user.profile.lang=Язык
-user.profile.lang.desc=Установить язык пользователя
-user.profile.timezone=Часовой пояс
-user.profile.timezone.desc=Установить текущий часовой пояс пользователя
-user.profile.theme=Тема
-user.profile.theme.desc=Установить тему интерфейса пользователя
-user.profile.location=Местоположение
-user.profile.location.desc=Установить информацию о местоположении пользователя
-user.profile.nickname=Псевдоним
-user.profile.nickname.desc=Установить никнейм бота для пользователя
-user.profile.input_value=Пожалуйста, введите значение {ATTR}
-user.profile.set_success={ATTR} успешно установлен как {VALUE}
-user.profile.set_failed=Не удалось установить {ATTR}. Пожалуйста, проверьте введенные данные
-
-rpm.move_up=Поднять
-rpm.move_down=Опустить
-rpm.move_top=Переместить в начало
-
-weather.city_not_found=Город {CITY} не найден
-weather.weather_not_found=Погода для города {CITY} не найдена
-weather.no_key=API-ключ для погоды не установлен. Пожалуйста, добавьте weather_key в конфигурационный файл
-
-status.friends=Друзья
-status.groups=Группы
-status.plugins=Плагины
-status.resources=Ресурсы
-status.bots=Боты
-status.message_sent=Отправленные сообщения
-status.message_received=Полученные сообщения
-status.cpu=Центральный процессор
-status.memory=Память
-status.swap=Подкачка
-status.disk=Диск
-status.usage=Использование
-status.total=Всего
-status.used=Использовано
-status.free=Свободно
-status.runtime=Время работы
-status.days=Дни
-status.hours=Часы
-status.minutes=Минуты
-status.seconds=Секунды
-status.cores=Ядра
-status.threads=Потоки
+language.name=Китайский (упрощенный)
+
+log.debug=Отладка
+log.info=Информация
+log.warning=Предупреждение
+log.error=Ошибка
+log.success=Успешно
+
+liteyuki.restart=Перезагрузить
+liteyuki.restart_now=Перезагрузить сейчас
+liteyuki.update_restart=Обновление завершено. Вы можете {RESTART} или перезагрузить вручную позже, чтобы применить эти обновления
+liteyuki.current_config=Текущая конфигурация
+liteyuki.static_config=Конфигурация статических файлов
+liteyuki.stored_config=Сохраненная конфигурация
+liteyuki.config_set_success=Конфигурация {KEY}={VAL} успешно установлена
+liteyuki.stats.group=Группа
+liteyuki.stats.user=Пользователь
+liteyuki.stats.plugin=Плагин
+liteyuki.stats.sent=Отправлено
+liteyuki.stats.received=Получено
+liteyuki.stats.run_time=Время работы
+liteyuki.stats.groups=Группы
+liteyuki.stats.friends=Друзья
+liteyuki.stats.plugins=Плагины
+liteyuki.image_mode_on=Включить режим изображений Markdown
+liteyuki.image_mode_off=Отключить режим изображений Markdown
+liteyuki.invalid_command=Неверная команда или параметр {TEXT}
+liteyuki.reload_resources=Перезагрузить ресурсы
+liteyuki.list_resources=Список ресурсов
+liteyuki.reload_resources_success=Ресурсы успешно перезагружены. Всего {NUM} ресурсов
+liteyuki.loaded_resources=Загружено {NUM} ресурсов, отсортированных по приоритету
+liteyuki.unloaded_resources=Незагруженные ресурсы
+liteyuki.load_resource_success=Ресурс {NAME} успешно загружен
+liteyuki.unload_resource_success=Ресурс {NAME} успешно выгружен
+liteyuki.load_resource_failed=Не удалось загрузить ресурс {NAME}
+liteyuki.unload_resource_failed=Не удалось выгрузить ресурс {NAME}
+liteyuki.resource_not_found=Ресурс {NAME} не найден или не доступен
+liteyuki.resource_already_loaded=Ресурс {NAME} уже загружен, повторная загрузка невозможна
+liteyuki.resource_already_unloaded=Ресурс {NAME} уже выгружен, повторная выгрузка невозможна
+liteyuki.need_reload=Пожалуйста, {BTN}, чтобы применить эти обновления
+liteyuki.dont_repeat=Пожалуйста, не повторяйте эту операцию
+liteyuki.change_priority_success=Приоритет ресурса {NAME} успешно изменен
+liteyuki.change_priority_failed=Не удалось изменить приоритет ресурса {NAME}
+liteyuki.group_already=Группа {GROUP} уже в состоянии {STATUS}, дополнительные действия не требуются
+liteyuki.group_success=Группа {GROUP} {STATUS} успешно
+liteyuki.permission_denied=Недостаточно прав
+liteyuki.config_remove_success=Конфигурация {KEY} успешно удалена
+
+main.current_language=Текущий язык конфигурации: {LANG}
+main.enable_webdash=Веб-панель мониторинга успешно включена: {URL}
+main.monitor.title=Панель мониторинга Lightyuki
+main.monitor.description=Панель мониторинга бота Lightyuki
+main.monitor.cpu=ЦП
+main.monitor.memory=Память
+main.monitor.swap=Подкачка
+main.monitor.disk=Диск
+main.monitor.usage=Использование
+main.monitor.total=Всего
+main.monitor.used=Использовано
+main.monitor.free=Свободно
+
+data_manager.migrate_success=Модель данных {NAME} успешно перенесена
+
+npm.loaded_plugins=Загруженные плагины
+npm.total=Всего {TOTAL}
+npm.help=Помощь
+npm.usage=Использование
+npm.description=Описание
+npm.disable=Отключить
+npm.disable_global=Глобально отключить
+npm.enable=Включить
+npm.enable_global=Глобально включить
+npm.install=Установить
+npm.uninstall=Удалить
+npm.installing=Установка {NAME}
+npm.cannot_uninstall=Невозможно удалить
+npm.no_description=Нет описания
+npm.store_update_success=Обновление данных магазина плагинов успешно завершено
+npm.store_update_failed=Не удалось обновить данные магазина плагинов
+npm.search_result=Результаты поиска
+npm.search_no_result=Нет результатов поиска
+npm.too_many_results=Слишком много результатов, скрыто {HIDE_NUM} позиций. Уточните запрос
+npm.install_success={NAME} успешно установлен
+npm.install_failed={NAME} не удалось установить. Для получения дополнительной информации, пожалуйста, посетите {HOMEPAGE}
+npm.uninstall_success={NAME} успешно удален. Изменения вступят в силу после перезагрузки
+npm.uninstall_failed={NAME} не удалось удалить
+npm.load_failed={NAME} не удалось загрузить. Пожалуйста, проверьте детали в консоли, убедитесь, что зависимости или конфигурация правильны. Если проблема не устранена, посетите {HOMEPAGE}
+npm.plugin_not_found={NAME} не найден в магазине. Попробуйте обновить информацию магазина или проверьте правильность написания
+npm.plugin_not_installed={NAME} не установлен
+npm.plugin_already_installed={NAME} уже установлен, повторная установка невозможна
+npm.author=Автор
+npm.homepage=Домашняя страница
+npm.pypi=PyPI
+npm.next_page=Следующая страница
+npm.prev_page=Предыдущая страница
+npm.update=Обновить
+npm.plugin_cannot_be_toggled=Плагин {NAME} невозможно включить или выключить
+npm.plugin_already=Плагин {NAME} уже в состоянии {STATUS}, дополнительные действия не требуются
+npm.toggle_failed=Не удалось {STATUS} плагин {NAME}: {ERROR}
+npm.toggle_success=Плагин {NAME} успешно {STATUS}
+npm.page=Страница {PAGE}/{TOTAL}
+npm.update_index=Обновить индекс плагинов
+npm.list_plugins=Список плагинов
+npm.disable_session=Отключить плагины для текущей сессии
+npm.enable_session=Включить плагины для текущей сессии
+npm.help=Помощь
+npm.search=Поиск
+
+user.profile.edit=Редактировать
+user.profile.set=Установить
+user.profile_manager.query=Ваша личная информация {ATTR} - {VALUE}
+user.profile_manager.set=Ваша личная информация {ATTR} успешно установлена как {VALUE}
+user.profile.settings=Настройки
+user.profile.info=Информация о профиле
+user.profile.lang=Язык
+user.profile.lang.desc=Установить язык пользователя
+user.profile.timezone=Часовой пояс
+user.profile.timezone.desc=Установить текущий часовой пояс пользователя
+user.profile.theme=Тема
+user.profile.theme.desc=Установить тему интерфейса пользователя
+user.profile.location=Местоположение
+user.profile.location.desc=Установить информацию о местоположении пользователя
+user.profile.nickname=Псевдоним
+user.profile.nickname.desc=Установить никнейм бота для пользователя
+user.profile.input_value=Пожалуйста, введите значение {ATTR}
+user.profile.set_success={ATTR} успешно установлен как {VALUE}
+user.profile.set_failed=Не удалось установить {ATTR}. Пожалуйста, проверьте введенные данные
+
+rpm.move_up=Поднять
+rpm.move_down=Опустить
+rpm.move_top=Переместить в начало
+
+weather.city_not_found=Город {CITY} не найден
+weather.weather_not_found=Погода для города {CITY} не найдена
+weather.no_key=API-ключ для погоды не установлен. Пожалуйста, добавьте weather_key в конфигурационный файл
+
+status.friends=Друзья
+status.groups=Группы
+status.plugins=Плагины
+status.resources=Ресурсы
+status.bots=Боты
+status.message_sent=Отправленные сообщения
+status.message_received=Полученные сообщения
+status.cpu=Центральный процессор
+status.memory=Память
+status.swap=Подкачка
+status.disk=Диск
+status.usage=Использование
+status.total=Всего
+status.used=Использовано
+status.free=Свободно
+status.runtime=Время работы
+status.days=Дни
+status.hours=Часы
+status.minutes=Минуты
+status.seconds=Секунды
+status.cores=Ядра
+status.threads=Потоки
status.process=Процессы
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/zh-CN.lang b/src/resources/vanilla_language/lang/zh-CN.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/zh-CN.lang
rename to src/resources/vanilla_language/lang/zh-CN.lang
index 079644f2..b9941166 100644
--- a/liteyuki/resources/vanilla_language/lang/zh-CN.lang
+++ b/src/resources/vanilla_language/lang/zh-CN.lang
@@ -1,160 +1,160 @@
-language.name=简体中文
-
-log.debug=调试
-log.info=信息
-log.warning=警告
-log.error=错误
-log.success=成功
-
-liteyuki.restart=重启
-liteyuki.restart_now=立即重启
-liteyuki.update_restart=更新完成,你可以{RESTART}或稍后手动重启以应用这些更新
-liteyuki.current_config=当前配置项如下
-liteyuki.static_config=静态文件配置项
-liteyuki.stored_config=储存的配置项
-liteyuki.config_set_success=配置项 {KEY}={VAL} 设置成功
-liteyuki.stats.group=群
-liteyuki.stats.user=好友
-liteyuki.stats.plugin=插件
-liteyuki.stats.sent=发送
-liteyuki.stats.received=接收
-liteyuki.stats.run_time=运行时间
-liteyuki.stats.groups=群
-liteyuki.stats.friends=好友
-liteyuki.stats.plugins=插件
-liteyuki.image_mode_on=开启Markdown图片模式
-liteyuki.image_mode_off=关闭Markdown图片模式
-liteyuki.invalid_command=无效的命令或参数 {TEXT}
-liteyuki.reload_resources=重载资源
-liteyuki.list_resources=资源包列表
-liteyuki.reload_resources_success=资源重载成功,共计 {NUM} 个资源包
-liteyuki.loaded_resources=已加载 {NUM} 个资源包,按照优先级排序
-liteyuki.unloaded_resources=未加载资源包
-liteyuki.load_resource_success=资源包 {NAME} 加载成功
-liteyuki.unload_resource_success=资源包 {NAME} 卸载成功
-liteyuki.load_resource_failed=资源包 {NAME} 加载失败
-liteyuki.unload_resource_failed=资源包 {NAME} 卸载失败
-liteyuki.resource_not_found=资源包 {NAME} 不存在或不可操作
-liteyuki.resource_already_loaded=资源包 {NAME} 已加载,请勿重复操作
-liteyuki.resource_already_unloaded=资源包 {NAME} 已卸载,请勿重复操作
-liteyuki.need_reload=请{BTN}重载以应用这些更新
-liteyuki.dont_repeat=请勿重复操作
-liteyuki.change_priority_success=资源包 {NAME} 优先级修改成功
-liteyuki.change_priority_failed=资源包 {NAME} 优先级修改失败
-liteyuki.group_already=群 {GROUP} 已经是 {STATUS} 状态,无需重复操作
-liteyuki.group_success=群 {GROUP} {STATUS} 成功
-liteyuki.permission_denied=权限不足
-liteyuki.config_remove_success=配置项 {KEY} 移除成功
-
-main.current_language=当前配置语言为: {LANG}
-main.enable_webdash=已启用网页监控面板: {URL}
-main.monitor.title=轻雪监控面板
-main.monitor.description=轻雪机器人监控面板
-main.monitor.cpu=处理器
-main.monitor.memory=内存
-main.monitor.swap=交换空间
-main.monitor.disk=磁盘
-main.monitor.usage=使用率
-main.monitor.total=总计
-main.monitor.used=已用
-main.monitor.free=空闲
-
-data_manager.migrate_success=数据模型{NAME}迁移成功
-
-npm.loaded_plugins=已加载插件
-npm.total=总计 {TOTAL}
-npm.help=帮助
-npm.usage=用法
-npm.description=描述
-npm.disable=停用
-npm.disable_global=全局停用
-npm.enable=启用
-npm.enable_global=全局启用
-npm.install=安装
-npm.uninstall=卸载
-npm.installing=正在安装 {NAME}
-npm.cannot_uninstall=无法卸载
-npm.no_description=无描述
-npm.store_update_success=插件商店数据更新成功
-npm.store_update_failed=插件商店数据更新失败
-npm.search_result=搜索结果
-npm.search_no_result=无搜索结果
-npm.too_many_results=内容过多,{HIDE_NUM}项已隐藏,请限制关键字搜索
-npm.install_success={NAME} 安装成功
-npm.install_failed={NAME} 安装失败,请查看日志获取详细信息,如不能解决,请访问{HOMEPAGE}寻求帮助
-npm.uninstall_success={NAME} 卸载成功,下次重启生效
-npm.uninstall_failed={NAME} 卸载失败
-npm.load_failed={NAME} 加载失败,请在控制台查看详细信息,检查依赖或配置是否正确,如不能解决,请访问{HOMEPAGE}寻求帮助
-npm.plugin_not_found=未在商店中找到 {NAME},请尝试更新商店信息或检查拼写
-npm.plugin_not_installed={NAME} 未安装
-npm.plugin_already_installed={NAME} 已安装,请勿重复安装
-npm.author=作者
-npm.homepage=主页
-npm.pypi=PyPI
-npm.next_page=下一页
-npm.prev_page=上一页
-npm.update=更新
-npm.plugin_cannot_be_toggled=插件 {NAME} 无法被启用或停用
-npm.plugin_already=插件 {NAME} 已经是 {STATUS} 状态,无需重复操作
-npm.toggle_failed=插件 {NAME} {STATUS} 失败: {ERROR}
-npm.toggle_success=插件 {NAME} {STATUS} 成功
-npm.page=第{PAGE}/{TOTAL}页
-npm.update_index=更新插件索引
-npm.list_plugins=插件列表
-npm.disable_session=当前会话停用插件
-npm.enable_session=当前会话启用插件
-npm.help=帮助
-npm.search=搜索
-
-user.profile.edit=修改
-user.profile.set=设置
-user.profile_manager.query=你的个人信息 {ATTR} 为 {VALUE}
-user.profile_manager.set=你的个人信息 {ATTR} 已设置为 {VALUE}
-user.profile.settings=设置
-user.profile.info=个人信息
-user.profile.lang=语言
-user.profile.lang.desc=设置用户语言
-user.profile.timezone=时区
-user.profile.timezone.desc=设置用户当前时区
-user.profile.theme=主题
-user.profile.theme.desc=设置用户界面主题
-user.profile.location=位置
-user.profile.location.desc=设置用户位置信息
-user.profile.nickname=称呼
-user.profile.nickname.desc=设置Bot对用户的称呼
-user.profile.input_value=请输入 {ATTR} 的值
-user.profile.set_success=成功将 {ATTR} 设置为 {VALUE}
-user.profile.set_failed=设置 {ATTR} 失败,请检查输入是否合法
-
-rpm.move_up=上移
-rpm.move_down=下移
-rpm.move_top=置顶
-
-weather.city_not_found=未找到城市 {CITY}
-weather.weather_not_found=未找到城市 {CITY} 的天气信息
-weather.no_key=未设置天气api key,请在配置文件添加weather_key
-
-status.friends=好友
-status.groups=群
-status.plugins=插件
-status.resources=资源包
-status.bots=机器人
-status.message_sent=发送消息
-status.message_received=接收消息
-status.cpu=处理器
-status.memory=内存
-status.swap=交换空间
-status.disk=磁盘
-status.usage=使用率
-status.total=总计
-status.used=已用
-status.free=空闲
-status.runtime=运行时间
-status.days=天
-status.hours=时
-status.minutes=分
-status.seconds=秒
-status.cores=核心
-status.threads=线程
-status.process=进程
+language.name=简体中文
+
+log.debug=调试
+log.info=信息
+log.warning=警告
+log.error=错误
+log.success=成功
+
+liteyuki.restart=重启
+liteyuki.restart_now=立即重启
+liteyuki.update_restart=更新完成,你可以{RESTART}或稍后手动重启以应用这些更新
+liteyuki.current_config=当前配置项如下
+liteyuki.static_config=静态文件配置项
+liteyuki.stored_config=储存的配置项
+liteyuki.config_set_success=配置项 {KEY}={VAL} 设置成功
+liteyuki.stats.group=群
+liteyuki.stats.user=好友
+liteyuki.stats.plugin=插件
+liteyuki.stats.sent=发送
+liteyuki.stats.received=接收
+liteyuki.stats.run_time=运行时间
+liteyuki.stats.groups=群
+liteyuki.stats.friends=好友
+liteyuki.stats.plugins=插件
+liteyuki.image_mode_on=开启Markdown图片模式
+liteyuki.image_mode_off=关闭Markdown图片模式
+liteyuki.invalid_command=无效的命令或参数 {TEXT}
+liteyuki.reload_resources=重载资源
+liteyuki.list_resources=资源包列表
+liteyuki.reload_resources_success=资源重载成功,共计 {NUM} 个资源包
+liteyuki.loaded_resources=已加载 {NUM} 个资源包,按照优先级排序
+liteyuki.unloaded_resources=未加载资源包
+liteyuki.load_resource_success=资源包 {NAME} 加载成功
+liteyuki.unload_resource_success=资源包 {NAME} 卸载成功
+liteyuki.load_resource_failed=资源包 {NAME} 加载失败
+liteyuki.unload_resource_failed=资源包 {NAME} 卸载失败
+liteyuki.resource_not_found=资源包 {NAME} 不存在或不可操作
+liteyuki.resource_already_loaded=资源包 {NAME} 已加载,请勿重复操作
+liteyuki.resource_already_unloaded=资源包 {NAME} 已卸载,请勿重复操作
+liteyuki.need_reload=请{BTN}重载以应用这些更新
+liteyuki.dont_repeat=请勿重复操作
+liteyuki.change_priority_success=资源包 {NAME} 优先级修改成功
+liteyuki.change_priority_failed=资源包 {NAME} 优先级修改失败
+liteyuki.group_already=群 {GROUP} 已经是 {STATUS} 状态,无需重复操作
+liteyuki.group_success=群 {GROUP} {STATUS} 成功
+liteyuki.permission_denied=权限不足
+liteyuki.config_remove_success=配置项 {KEY} 移除成功
+
+main.current_language=当前配置语言为: {LANG}
+main.enable_webdash=已启用网页监控面板: {URL}
+main.monitor.title=轻雪监控面板
+main.monitor.description=轻雪机器人监控面板
+main.monitor.cpu=处理器
+main.monitor.memory=内存
+main.monitor.swap=交换空间
+main.monitor.disk=磁盘
+main.monitor.usage=使用率
+main.monitor.total=总计
+main.monitor.used=已用
+main.monitor.free=空闲
+
+data_manager.migrate_success=数据模型{NAME}迁移成功
+
+npm.loaded_plugins=已加载插件
+npm.total=总计 {TOTAL}
+npm.help=帮助
+npm.usage=用法
+npm.description=描述
+npm.disable=停用
+npm.disable_global=全局停用
+npm.enable=启用
+npm.enable_global=全局启用
+npm.install=安装
+npm.uninstall=卸载
+npm.installing=正在安装 {NAME}
+npm.cannot_uninstall=无法卸载
+npm.no_description=无描述
+npm.store_update_success=插件商店数据更新成功
+npm.store_update_failed=插件商店数据更新失败
+npm.search_result=搜索结果
+npm.search_no_result=无搜索结果
+npm.too_many_results=内容过多,{HIDE_NUM}项已隐藏,请限制关键字搜索
+npm.install_success={NAME} 安装成功
+npm.install_failed={NAME} 安装失败,请查看日志获取详细信息,如不能解决,请访问{HOMEPAGE}寻求帮助
+npm.uninstall_success={NAME} 卸载成功,下次重启生效
+npm.uninstall_failed={NAME} 卸载失败
+npm.load_failed={NAME} 加载失败,请在控制台查看详细信息,检查依赖或配置是否正确,如不能解决,请访问{HOMEPAGE}寻求帮助
+npm.plugin_not_found=未在商店中找到 {NAME},请尝试更新商店信息或检查拼写
+npm.plugin_not_installed={NAME} 未安装
+npm.plugin_already_installed={NAME} 已安装,请勿重复安装
+npm.author=作者
+npm.homepage=主页
+npm.pypi=PyPI
+npm.next_page=下一页
+npm.prev_page=上一页
+npm.update=更新
+npm.plugin_cannot_be_toggled=插件 {NAME} 无法被启用或停用
+npm.plugin_already=插件 {NAME} 已经是 {STATUS} 状态,无需重复操作
+npm.toggle_failed=插件 {NAME} {STATUS} 失败: {ERROR}
+npm.toggle_success=插件 {NAME} {STATUS} 成功
+npm.page=第{PAGE}/{TOTAL}页
+npm.update_index=更新插件索引
+npm.list_plugins=插件列表
+npm.disable_session=当前会话停用插件
+npm.enable_session=当前会话启用插件
+npm.help=帮助
+npm.search=搜索
+
+user.profile.edit=修改
+user.profile.set=设置
+user.profile_manager.query=你的个人信息 {ATTR} 为 {VALUE}
+user.profile_manager.set=你的个人信息 {ATTR} 已设置为 {VALUE}
+user.profile.settings=设置
+user.profile.info=个人信息
+user.profile.lang=语言
+user.profile.lang.desc=设置用户语言
+user.profile.timezone=时区
+user.profile.timezone.desc=设置用户当前时区
+user.profile.theme=主题
+user.profile.theme.desc=设置用户界面主题
+user.profile.location=位置
+user.profile.location.desc=设置用户位置信息
+user.profile.nickname=称呼
+user.profile.nickname.desc=设置Bot对用户的称呼
+user.profile.input_value=请输入 {ATTR} 的值
+user.profile.set_success=成功将 {ATTR} 设置为 {VALUE}
+user.profile.set_failed=设置 {ATTR} 失败,请检查输入是否合法
+
+rpm.move_up=上移
+rpm.move_down=下移
+rpm.move_top=置顶
+
+weather.city_not_found=未找到城市 {CITY}
+weather.weather_not_found=未找到城市 {CITY} 的天气信息
+weather.no_key=未设置天气api key,请在配置文件添加weather_key
+
+status.friends=好友
+status.groups=群
+status.plugins=插件
+status.resources=资源包
+status.bots=机器人
+status.message_sent=发送消息
+status.message_received=接收消息
+status.cpu=处理器
+status.memory=内存
+status.swap=交换空间
+status.disk=磁盘
+status.usage=使用率
+status.total=总计
+status.used=已用
+status.free=空闲
+status.runtime=运行时间
+status.days=天
+status.hours=时
+status.minutes=分
+status.seconds=秒
+status.cores=核心
+status.threads=线程
+status.process=进程
status.description=轻雪机器人状态面板
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/zh-HK.lang b/src/resources/vanilla_language/lang/zh-HK.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/zh-HK.lang
rename to src/resources/vanilla_language/lang/zh-HK.lang
index 6d2565ab..867b90f9 100644
--- a/liteyuki/resources/vanilla_language/lang/zh-HK.lang
+++ b/src/resources/vanilla_language/lang/zh-HK.lang
@@ -1,159 +1,159 @@
-language.name=繁體中文(香港)
-
-log.debug=偵錯
-log.info=資訊
-log.warning=警告
-log.error=錯誤
-log.success=成功
-
-liteyuki.restart=重新啟動
-liteyuki.restart_now=立即重新啟動
-liteyuki.update_restart=更新完成,你可以{RESTART}或稍後手動重新啟動以應用這些更新
-liteyuki.current_config=當前設定如下
-liteyuki.static_config=靜態檔案設定
-liteyuki.stored_config=儲存的設定
-liteyuki.config_set_success=設定項 {KEY}={VAL} 設定成功
-liteyuki.stats.group=群組
-liteyuki.stats.user=用戶
-liteyuki.stats.plugin=插件
-liteyuki.stats.sent=發送
-liteyuki.stats.received=接收
-liteyuki.stats.run_time=執行時間
-liteyuki.stats.groups=群組
-liteyuki.stats.friends=好友
-liteyuki.stats.plugins=插件
-liteyuki.image_mode_on=開啟 Markdown 圖片模式
-liteyuki.image_mode_off=關閉 Markdown 圖片模式
-liteyuki.invalid_command=無效的命令或參數 {TEXT}
-liteyuki.reload_resources=重新載入資源
-liteyuki.list_resources=資源包列表
-liteyuki.reload_resources_success=資源重新載入成功,共計 {NUM} 個資源包
-liteyuki.loaded_resources=已載入 {NUM} 個資源包,按照優先級排序
-liteyuki.unloaded_resources=未載入資源包
-liteyuki.load_resource_success=資源包 {NAME} 載入成功
-liteyuki.unload_resource_success=資源包 {NAME} 卸載成功
-liteyuki.load_resource_failed=資源包 {NAME} 載入失敗
-liteyuki.unload_resource_failed=資源包 {NAME} 卸載失敗
-liteyuki.resource_not_found=資源包 {NAME} 不存在或無法操作
-liteyuki.resource_already_loaded=資源包 {NAME} 已載入,請勿重複操作
-liteyuki.resource_already_unloaded=資源包 {NAME} 已卸載,請勿重複操作
-liteyuki.need_reload=請{BTN}重新載入以應用這些更新
-liteyuki.dont_repeat=請勿重複操作
-liteyuki.change_priority_success=資源包 {NAME} 優先級修改成功
-liteyuki.change_priority_failed=資源包 {NAME} 優先級修改失敗
-liteyuki.group_already=群組 {GROUP} 已經是 {STATUS} 狀態,無需重複操作
-liteyuki.group_success=群組 {GROUP} {STATUS} 成功
-liteyuki.permission_denied=權限不足
-liteyuki.config_remove_success=設定項 {KEY} 移除成功
-
-main.current_language=當前語言設定為: {LANG}
-main.enable_webdash=已啟用網頁監控面板: {URL}
-main.monitor.title=輕雪監控面板
-main.monitor.description=輕雪機器人監控面板
-main.monitor.cpu=處理器
-main.monitor.memory=記憶體
-main.monitor.swap=交換空間
-main.monitor.disk=磁碟
-main.monitor.usage=使用率
-main.monitor.total=總計
-main.monitor.used=已使用
-main.monitor.free=空閒
-
-data_manager.migrate_success=數據模型{NAME}遷移成功
-
-npm.loaded_plugins=已載入插件
-npm.total=總計 {TOTAL}
-npm.help=幫助
-npm.usage=用法
-npm.description=描述
-npm.disable=停用
-npm.disable_global=全域停用
-npm.enable=啟用
-npm.enable_global=全域啟用
-npm.install=安裝
-npm.uninstall=卸載
-npm.installing=正在安裝 {NAME}
-npm.cannot_uninstall=無法卸載
-npm.no_description=無描述
-npm.store_update_success=插件商店數據更新成功
-npm.store_update_failed=插件商店數據更新失敗
-npm.search_result=搜索結果
-npm.search_no_result=無搜索結果
-npm.too_many_results=結果過多,{HIDE_NUM}項已隱藏,請限制關鍵字搜索
-npm.install_success={NAME} 安裝成功
-npm.install_failed={NAME} 安裝失敗,請查看日誌獲取詳細信息,如無法解決,請訪問{HOMEPAGE}尋求幫助
-npm.uninstall_success={NAME} 卸載成功,下次重啟生效
-npm.uninstall_failed={NAME} 卸載失敗
-npm.load_failed={NAME} 加載失敗,請在控制台查看詳細信息,檢查依賴或配置是否正確,如無法解決,請訪問{HOMEPAGE}尋求幫助
-npm.plugin_not_found=未在商店中找到 {NAME},請嘗試更新商店信息或檢查拼寫
-npm.plugin_not_installed={NAME} 未安裝
-npm.plugin_already_installed={NAME} 已安裝,請勿重複安裝
-npm.author=作者
-npm.homepage=主頁
-npm.pypi=PyPI
-npm.next_page=下一頁
-npm.prev_page=上一頁
-npm.update=更新
-npm.plugin_cannot_be_toggled=插件 {NAME} 無法被啟用或停用
-npm.plugin_already=插件 {NAME} 已經是 {STATUS} 狀態,無需重複操作
-npm.toggle_failed=插件 {NAME} {STATUS} 失敗: {ERROR}
-npm.toggle_success=插件 {NAME} {STATUS} 成功
-npm.page=第{PAGE}/{TOTAL}頁
-npm.update_index=更新插件索引
-npm.list_plugins=插件列表
-npm.disable_session=當前會話停用插件
-npm.enable_session=當前會話啟用插件
-npm.help=幫助
-npm.search=搜索
-
-user.profile.edit=修改
-user.profile.set=設定
-user.profile_manager.query=您的個人資訊 {ATTR} 為 {VALUE}
-user.profile_manager.set=您的個人資訊 {ATTR} 已設定為 {VALUE}
-user.profile.settings=設定
-user.profile.info=個人資訊
-user.profile.lang=語言
-user.profile.lang.desc=設定用戶語言
-user.profile.timezone=時區
-user.profile.timezone.desc=設定用戶當前時區
-user.profile.theme=主題
-user.profile.theme.desc=設定用戶介面主題
-user.profile.location=位置
-user.profile.location.desc=設定用戶位置資訊
-user.profile.nickname=稱呼
-user.profile.nickname.desc=設定 Bot 對用戶的稱呼
-user.profile.input_value=請輸入 {ATTR} 的值
-user.profile.set_success=成功將 {ATTR} 設定為 {VALUE}
-user.profile.set_failed=設定 {ATTR} 失敗,請檢查輸入是否合法
-
-rpm.move_up=上移
-rpm.move_down=下移
-rpm.move_top=置頂
-
-weather.city_not_found=未找到城市 {CITY}
-weather.weather_not_found=未找到城市 {CITY} 的天氣信息
-weather.no_key=未設定天氣 API 金鑰,請在設定文件添加 weather_key
-
-status.friends=好友
-status.groups=群組
-status.plugins=插件
-status.resources=資源包
-status.bots=機器人
-status.message_sent=發送消息
-status.message_received=接收消息
-status.cpu=處理器
-status.memory=記憶體
-status.swap=交換空間
-status.disk=磁碟
-status.usage=使用率
-status.total=總計
-status.used=已用
-status.free=空閒
-status.runtime=運行時間
-status.days=天
-status.hours=小時
-status.minutes=分鐘
-status.seconds=秒
-status.cores=核心
-status.threads=線程
+language.name=繁體中文(香港)
+
+log.debug=偵錯
+log.info=資訊
+log.warning=警告
+log.error=錯誤
+log.success=成功
+
+liteyuki.restart=重新啟動
+liteyuki.restart_now=立即重新啟動
+liteyuki.update_restart=更新完成,你可以{RESTART}或稍後手動重新啟動以應用這些更新
+liteyuki.current_config=當前設定如下
+liteyuki.static_config=靜態檔案設定
+liteyuki.stored_config=儲存的設定
+liteyuki.config_set_success=設定項 {KEY}={VAL} 設定成功
+liteyuki.stats.group=群組
+liteyuki.stats.user=用戶
+liteyuki.stats.plugin=插件
+liteyuki.stats.sent=發送
+liteyuki.stats.received=接收
+liteyuki.stats.run_time=執行時間
+liteyuki.stats.groups=群組
+liteyuki.stats.friends=好友
+liteyuki.stats.plugins=插件
+liteyuki.image_mode_on=開啟 Markdown 圖片模式
+liteyuki.image_mode_off=關閉 Markdown 圖片模式
+liteyuki.invalid_command=無效的命令或參數 {TEXT}
+liteyuki.reload_resources=重新載入資源
+liteyuki.list_resources=資源包列表
+liteyuki.reload_resources_success=資源重新載入成功,共計 {NUM} 個資源包
+liteyuki.loaded_resources=已載入 {NUM} 個資源包,按照優先級排序
+liteyuki.unloaded_resources=未載入資源包
+liteyuki.load_resource_success=資源包 {NAME} 載入成功
+liteyuki.unload_resource_success=資源包 {NAME} 卸載成功
+liteyuki.load_resource_failed=資源包 {NAME} 載入失敗
+liteyuki.unload_resource_failed=資源包 {NAME} 卸載失敗
+liteyuki.resource_not_found=資源包 {NAME} 不存在或無法操作
+liteyuki.resource_already_loaded=資源包 {NAME} 已載入,請勿重複操作
+liteyuki.resource_already_unloaded=資源包 {NAME} 已卸載,請勿重複操作
+liteyuki.need_reload=請{BTN}重新載入以應用這些更新
+liteyuki.dont_repeat=請勿重複操作
+liteyuki.change_priority_success=資源包 {NAME} 優先級修改成功
+liteyuki.change_priority_failed=資源包 {NAME} 優先級修改失敗
+liteyuki.group_already=群組 {GROUP} 已經是 {STATUS} 狀態,無需重複操作
+liteyuki.group_success=群組 {GROUP} {STATUS} 成功
+liteyuki.permission_denied=權限不足
+liteyuki.config_remove_success=設定項 {KEY} 移除成功
+
+main.current_language=當前語言設定為: {LANG}
+main.enable_webdash=已啟用網頁監控面板: {URL}
+main.monitor.title=輕雪監控面板
+main.monitor.description=輕雪機器人監控面板
+main.monitor.cpu=處理器
+main.monitor.memory=記憶體
+main.monitor.swap=交換空間
+main.monitor.disk=磁碟
+main.monitor.usage=使用率
+main.monitor.total=總計
+main.monitor.used=已使用
+main.monitor.free=空閒
+
+data_manager.migrate_success=數據模型{NAME}遷移成功
+
+npm.loaded_plugins=已載入插件
+npm.total=總計 {TOTAL}
+npm.help=幫助
+npm.usage=用法
+npm.description=描述
+npm.disable=停用
+npm.disable_global=全域停用
+npm.enable=啟用
+npm.enable_global=全域啟用
+npm.install=安裝
+npm.uninstall=卸載
+npm.installing=正在安裝 {NAME}
+npm.cannot_uninstall=無法卸載
+npm.no_description=無描述
+npm.store_update_success=插件商店數據更新成功
+npm.store_update_failed=插件商店數據更新失敗
+npm.search_result=搜索結果
+npm.search_no_result=無搜索結果
+npm.too_many_results=結果過多,{HIDE_NUM}項已隱藏,請限制關鍵字搜索
+npm.install_success={NAME} 安裝成功
+npm.install_failed={NAME} 安裝失敗,請查看日誌獲取詳細信息,如無法解決,請訪問{HOMEPAGE}尋求幫助
+npm.uninstall_success={NAME} 卸載成功,下次重啟生效
+npm.uninstall_failed={NAME} 卸載失敗
+npm.load_failed={NAME} 加載失敗,請在控制台查看詳細信息,檢查依賴或配置是否正確,如無法解決,請訪問{HOMEPAGE}尋求幫助
+npm.plugin_not_found=未在商店中找到 {NAME},請嘗試更新商店信息或檢查拼寫
+npm.plugin_not_installed={NAME} 未安裝
+npm.plugin_already_installed={NAME} 已安裝,請勿重複安裝
+npm.author=作者
+npm.homepage=主頁
+npm.pypi=PyPI
+npm.next_page=下一頁
+npm.prev_page=上一頁
+npm.update=更新
+npm.plugin_cannot_be_toggled=插件 {NAME} 無法被啟用或停用
+npm.plugin_already=插件 {NAME} 已經是 {STATUS} 狀態,無需重複操作
+npm.toggle_failed=插件 {NAME} {STATUS} 失敗: {ERROR}
+npm.toggle_success=插件 {NAME} {STATUS} 成功
+npm.page=第{PAGE}/{TOTAL}頁
+npm.update_index=更新插件索引
+npm.list_plugins=插件列表
+npm.disable_session=當前會話停用插件
+npm.enable_session=當前會話啟用插件
+npm.help=幫助
+npm.search=搜索
+
+user.profile.edit=修改
+user.profile.set=設定
+user.profile_manager.query=您的個人資訊 {ATTR} 為 {VALUE}
+user.profile_manager.set=您的個人資訊 {ATTR} 已設定為 {VALUE}
+user.profile.settings=設定
+user.profile.info=個人資訊
+user.profile.lang=語言
+user.profile.lang.desc=設定用戶語言
+user.profile.timezone=時區
+user.profile.timezone.desc=設定用戶當前時區
+user.profile.theme=主題
+user.profile.theme.desc=設定用戶介面主題
+user.profile.location=位置
+user.profile.location.desc=設定用戶位置資訊
+user.profile.nickname=稱呼
+user.profile.nickname.desc=設定 Bot 對用戶的稱呼
+user.profile.input_value=請輸入 {ATTR} 的值
+user.profile.set_success=成功將 {ATTR} 設定為 {VALUE}
+user.profile.set_failed=設定 {ATTR} 失敗,請檢查輸入是否合法
+
+rpm.move_up=上移
+rpm.move_down=下移
+rpm.move_top=置頂
+
+weather.city_not_found=未找到城市 {CITY}
+weather.weather_not_found=未找到城市 {CITY} 的天氣信息
+weather.no_key=未設定天氣 API 金鑰,請在設定文件添加 weather_key
+
+status.friends=好友
+status.groups=群組
+status.plugins=插件
+status.resources=資源包
+status.bots=機器人
+status.message_sent=發送消息
+status.message_received=接收消息
+status.cpu=處理器
+status.memory=記憶體
+status.swap=交換空間
+status.disk=磁碟
+status.usage=使用率
+status.total=總計
+status.used=已用
+status.free=空閒
+status.runtime=運行時間
+status.days=天
+status.hours=小時
+status.minutes=分鐘
+status.seconds=秒
+status.cores=核心
+status.threads=線程
status.process=進程
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/zh-Kawaii.lang b/src/resources/vanilla_language/lang/zh-Kawaii.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/zh-Kawaii.lang
rename to src/resources/vanilla_language/lang/zh-Kawaii.lang
index ba887058..3d3f9831 100644
--- a/liteyuki/resources/vanilla_language/lang/zh-Kawaii.lang
+++ b/src/resources/vanilla_language/lang/zh-Kawaii.lang
@@ -1,159 +1,159 @@
-language.name=简体中文
-
-log.debug=嘿嘿,调试一下
-log.info=嗯嗯,资讯来啦
-log.warning=哎哟,小心哟
-log.error=糟糕,出错啦
-log.success=耶耶,成功啦
-
-liteyuki.restart=重新来过
-liteyuki.restart_now=立刻重启
-liteyuki.update_restart=更新完成啦!快{RESTART}或等会儿手动重启,让更新生效吧!
-liteyuki.current_config=现在的设置是这样滴~
-liteyuki.static_config=静态文件设置
-liteyuki.stored_config=存储的设置
-liteyuki.config_set_success=嘿嘿,设置成功啦!{KEY}={VAL}
-liteyuki.stats.group=群组
-liteyuki.stats.user=小伙伴
-liteyuki.stats.plugin=插件
-liteyuki.stats.sent=发出去啦
-liteyuki.stats.received=收到啦
-liteyuki.stats.run_time=运行时间
-liteyuki.stats.groups=群组
-liteyuki.stats.friends=小伙伴
-liteyuki.stats.plugins=插件
-liteyuki.image_mode_on=嘿嘿,开启Markdown图片模式啦
-liteyuki.image_mode_off=啊呀,关闭Markdown图片模式啦
-liteyuki.invalid_command=咦?无效的命令或参数哦:{TEXT}
-liteyuki.reload_resources=重新载入资源
-liteyuki.list_resources=资源包列表
-liteyuki.reload_resources_success=资源重载成功啦!共有{NUM}个资源包哦~
-liteyuki.loaded_resources=嘿嘿,已经加载了{NUM}个资源包啦,按照优先级排序哦~
-liteyuki.unloaded_resources=嗯嗯,还有一些资源包没加载呢~
-liteyuki.load_resource_success=资源包{name}加载成功啦!
-liteyuki.unload_resource_success=资源包{name}卸载成功啦!
-liteyuki.load_resource_failed=资源包{name}加载失败啦~
-liteyuki.unload_resource_failed=资源包{name}卸载失败啦~
-liteyuki.resource_not_found=资源包{name}不存在或无法操作呢~
-liteyuki.resource_already_loaded=资源包{name}已经加载啦,不要重复操作哦~
-liteyuki.resource_already_unloaded=资源包{name}已经卸载啦,不要重复操作哦~
-liteyuki.need_reload=嘿嘿,{BTN}重新载入以应用这些更新呢~
-liteyuki.dont_repeat=别重复操作哦~
-liteyuki.change_priority_success=资源包{name}优先级修改成功啦~
-liteyuki.change_priority_failed=资源包{name}优先级修改失败啦~
-liteyuki.group_already=群组{GROUP}已经是{STATUS}状态啦,不用再操作啦~
-liteyuki.group_success=群组{GROUP}{STATUS}成功啦~
-liteyuki.permission_denied=啊哦,权限不够啦~
-liteyuki.config_remove_success=配置项{KEY}移除成功啦~
-
-main.current_language=现在的语言是:{LANG}
-main.enable_webdash=已经启用网页监控面板啦:{URL}
-main.monitor.title=轻雪监控面板
-main.monitor.description=轻雪机器人监控面板,超可爱的哦~
-main.monitor.cpu=处理器
-main.monitor.memory=内存
-main.monitor.swap=交换空间
-main.monitor.disk=磁盘
-main.monitor.usage=使用率
-main.monitor.total=总共
-main.monitor.used=已用
-main.monitor.free=剩余
-
-data_manager.migrate_success=数据模型{name}迁移成功啦~
-
-npm.loaded_plugins=已加载的插件
-npm.total=总共有{TOTAL}个哦~
-npm.help=帮助
-npm.usage=使用方法
-npm.description=描述
-npm.disable=停用
-npm.disable_global=全局停用
-npm.enable=启用
-npm.enable_global=全局启用
-npm.install=安装
-npm.uninstall=卸载
-npm.installing=正在安装{name}呢~
-npm.cannot_uninstall=无法卸载哦~
-npm.no_description=没有描述哦~
-npm.store_update_success=插件商店数据更新成功啦~
-npm.store_update_failed=插件商店数据更新失败啦~
-npm.search_result=搜索结果
-npm.search_no_result=没有搜索结果呢~
-npm.too_many_results=搜索结果太多啦,请尽量缩小搜索范围哦~
-npm.install_success={name}安装成功啦~
-npm.install_failed={name}安装失败啦,请查看日志获取详细信息哦~
-npm.uninstall_success={name}卸载成功啦~下次重启生效哦~
-npm.uninstall_failed={name}卸载失败啦~
-npm.load_failed={name}加载失败啦,请检查依赖或配置是否正确哦~
-npm.plugin_not_found=在商店里找不到{name}呢,请尝试更新商店信息或检查拼写哦~
-npm.plugin_not_installed={name}还没安装哦~
-npm.plugin_already_installed={name}已经安装啦,不要重复操作哦~
-npm.author=作者
-npm.homepage=主页
-npm.pypi=PyPI
-npm.next_page=下一页
-npm.prev_page=上一页
-npm.update=更新
-npm.plugin_cannot_be_toggled=插件{name}不能被启用或停用哦~
-npm.plugin_already=插件{name}已经是{STATUS}状态啦,不用再操作啦~
-npm.toggle_failed=插件{name}{STATUS}失败啦:{ERROR}
-npm.toggle_success=插件{name}{STATUS}成功啦~
-npm.page=第{PAGE}/{TOTAL}页
-npm.update_index=更新插件索引
-npm.list_plugins=插件列表
-npm.disable_session=当前会话停用插件
-npm.enable_session=当前会话启用插件
-npm.help=帮助
-npm.search=搜索
-
-user.profile.edit=修改
-user.profile.set=设置
-user.profile_manager.query=您的个人信息 {ATTR} 是 {VALUE} 哦~
-user.profile_manager.set=您的个人信息 {ATTR} 已经设置成 {VALUE} 哦~
-user.profile.settings=设置
-user.profile.info=个人信息
-user.profile.lang=语言
-user.profile.lang.desc=设置用户语言哦~
-user.profile.timezone=时区
-user.profile.timezone.desc=设置用户时区哦~
-user.profile.theme=主题
-user.profile.theme.desc=设置用户界面主题哦~
-user.profile.location=位置
-user.profile.location.desc=设置用户位置信息哦~
-user.profile.nickname=昵称
-user.profile.nickname.desc=设置 Bot 对用户的昵称哦~
-user.profile.input_value=请输入 {ATTR} 的值
-user.profile.set_success={ATTR} 成功设置成 {VALUE} 哦~
-user.profile.set_failed=设置 {ATTR} 失败啦~请检查输入是否合法哦~
-
-rpm.move_up=上移
-rpm.move_down=下移
-rpm.move_top=置顶
-
-weather.city_not_found=找不到城市{name}哦~
-weather.weather_not_found=找不到城市{name}的天气信息呢~
-weather.no_key=咦?还没设置天气 API 呢,快在配置文件里添加 weather_key 吧~
-
-status.friends=好友
-status.groups=群组
-status.plugins=插件
-status.resources=资源包
-status.bots=机器人
-status.message_sent=发送的消息
-status.message_received=接收的消息
-status.cpu=处理器
-status.memory=内存
-status.swap=交换空间
-status.disk=磁盘
-status.usage=使用率
-status.total=总计
-status.used=已使用
-status.free=空闲
-status.runtime=运行时间
-status.days=天
-status.hours=小时
-status.minutes=分钟
-status.seconds=秒
-status.cores=核心
-status.threads=线程
+language.name=简体中文
+
+log.debug=嘿嘿,调试一下
+log.info=嗯嗯,资讯来啦
+log.warning=哎哟,小心哟
+log.error=糟糕,出错啦
+log.success=耶耶,成功啦
+
+liteyuki.restart=重新来过
+liteyuki.restart_now=立刻重启
+liteyuki.update_restart=更新完成啦!快{RESTART}或等会儿手动重启,让更新生效吧!
+liteyuki.current_config=现在的设置是这样滴~
+liteyuki.static_config=静态文件设置
+liteyuki.stored_config=存储的设置
+liteyuki.config_set_success=嘿嘿,设置成功啦!{KEY}={VAL}
+liteyuki.stats.group=群组
+liteyuki.stats.user=小伙伴
+liteyuki.stats.plugin=插件
+liteyuki.stats.sent=发出去啦
+liteyuki.stats.received=收到啦
+liteyuki.stats.run_time=运行时间
+liteyuki.stats.groups=群组
+liteyuki.stats.friends=小伙伴
+liteyuki.stats.plugins=插件
+liteyuki.image_mode_on=嘿嘿,开启Markdown图片模式啦
+liteyuki.image_mode_off=啊呀,关闭Markdown图片模式啦
+liteyuki.invalid_command=咦?无效的命令或参数哦:{TEXT}
+liteyuki.reload_resources=重新载入资源
+liteyuki.list_resources=资源包列表
+liteyuki.reload_resources_success=资源重载成功啦!共有{NUM}个资源包哦~
+liteyuki.loaded_resources=嘿嘿,已经加载了{NUM}个资源包啦,按照优先级排序哦~
+liteyuki.unloaded_resources=嗯嗯,还有一些资源包没加载呢~
+liteyuki.load_resource_success=资源包{name}加载成功啦!
+liteyuki.unload_resource_success=资源包{name}卸载成功啦!
+liteyuki.load_resource_failed=资源包{name}加载失败啦~
+liteyuki.unload_resource_failed=资源包{name}卸载失败啦~
+liteyuki.resource_not_found=资源包{name}不存在或无法操作呢~
+liteyuki.resource_already_loaded=资源包{name}已经加载啦,不要重复操作哦~
+liteyuki.resource_already_unloaded=资源包{name}已经卸载啦,不要重复操作哦~
+liteyuki.need_reload=嘿嘿,{BTN}重新载入以应用这些更新呢~
+liteyuki.dont_repeat=别重复操作哦~
+liteyuki.change_priority_success=资源包{name}优先级修改成功啦~
+liteyuki.change_priority_failed=资源包{name}优先级修改失败啦~
+liteyuki.group_already=群组{GROUP}已经是{STATUS}状态啦,不用再操作啦~
+liteyuki.group_success=群组{GROUP}{STATUS}成功啦~
+liteyuki.permission_denied=啊哦,权限不够啦~
+liteyuki.config_remove_success=配置项{KEY}移除成功啦~
+
+main.current_language=现在的语言是:{LANG}
+main.enable_webdash=已经启用网页监控面板啦:{URL}
+main.monitor.title=轻雪监控面板
+main.monitor.description=轻雪机器人监控面板,超可爱的哦~
+main.monitor.cpu=处理器
+main.monitor.memory=内存
+main.monitor.swap=交换空间
+main.monitor.disk=磁盘
+main.monitor.usage=使用率
+main.monitor.total=总共
+main.monitor.used=已用
+main.monitor.free=剩余
+
+data_manager.migrate_success=数据模型{name}迁移成功啦~
+
+npm.loaded_plugins=已加载的插件
+npm.total=总共有{TOTAL}个哦~
+npm.help=帮助
+npm.usage=使用方法
+npm.description=描述
+npm.disable=停用
+npm.disable_global=全局停用
+npm.enable=启用
+npm.enable_global=全局启用
+npm.install=安装
+npm.uninstall=卸载
+npm.installing=正在安装{name}呢~
+npm.cannot_uninstall=无法卸载哦~
+npm.no_description=没有描述哦~
+npm.store_update_success=插件商店数据更新成功啦~
+npm.store_update_failed=插件商店数据更新失败啦~
+npm.search_result=搜索结果
+npm.search_no_result=没有搜索结果呢~
+npm.too_many_results=搜索结果太多啦,请尽量缩小搜索范围哦~
+npm.install_success={name}安装成功啦~
+npm.install_failed={name}安装失败啦,请查看日志获取详细信息哦~
+npm.uninstall_success={name}卸载成功啦~下次重启生效哦~
+npm.uninstall_failed={name}卸载失败啦~
+npm.load_failed={name}加载失败啦,请检查依赖或配置是否正确哦~
+npm.plugin_not_found=在商店里找不到{name}呢,请尝试更新商店信息或检查拼写哦~
+npm.plugin_not_installed={name}还没安装哦~
+npm.plugin_already_installed={name}已经安装啦,不要重复操作哦~
+npm.author=作者
+npm.homepage=主页
+npm.pypi=PyPI
+npm.next_page=下一页
+npm.prev_page=上一页
+npm.update=更新
+npm.plugin_cannot_be_toggled=插件{name}不能被启用或停用哦~
+npm.plugin_already=插件{name}已经是{STATUS}状态啦,不用再操作啦~
+npm.toggle_failed=插件{name}{STATUS}失败啦:{ERROR}
+npm.toggle_success=插件{name}{STATUS}成功啦~
+npm.page=第{PAGE}/{TOTAL}页
+npm.update_index=更新插件索引
+npm.list_plugins=插件列表
+npm.disable_session=当前会话停用插件
+npm.enable_session=当前会话启用插件
+npm.help=帮助
+npm.search=搜索
+
+user.profile.edit=修改
+user.profile.set=设置
+user.profile_manager.query=您的个人信息 {ATTR} 是 {VALUE} 哦~
+user.profile_manager.set=您的个人信息 {ATTR} 已经设置成 {VALUE} 哦~
+user.profile.settings=设置
+user.profile.info=个人信息
+user.profile.lang=语言
+user.profile.lang.desc=设置用户语言哦~
+user.profile.timezone=时区
+user.profile.timezone.desc=设置用户时区哦~
+user.profile.theme=主题
+user.profile.theme.desc=设置用户界面主题哦~
+user.profile.location=位置
+user.profile.location.desc=设置用户位置信息哦~
+user.profile.nickname=昵称
+user.profile.nickname.desc=设置 Bot 对用户的昵称哦~
+user.profile.input_value=请输入 {ATTR} 的值
+user.profile.set_success={ATTR} 成功设置成 {VALUE} 哦~
+user.profile.set_failed=设置 {ATTR} 失败啦~请检查输入是否合法哦~
+
+rpm.move_up=上移
+rpm.move_down=下移
+rpm.move_top=置顶
+
+weather.city_not_found=找不到城市{name}哦~
+weather.weather_not_found=找不到城市{name}的天气信息呢~
+weather.no_key=咦?还没设置天气 API 呢,快在配置文件里添加 weather_key 吧~
+
+status.friends=好友
+status.groups=群组
+status.plugins=插件
+status.resources=资源包
+status.bots=机器人
+status.message_sent=发送的消息
+status.message_received=接收的消息
+status.cpu=处理器
+status.memory=内存
+status.swap=交换空间
+status.disk=磁盘
+status.usage=使用率
+status.total=总计
+status.used=已使用
+status.free=空闲
+status.runtime=运行时间
+status.days=天
+status.hours=小时
+status.minutes=分钟
+status.seconds=秒
+status.cores=核心
+status.threads=线程
status.process=进程
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/zh-MS.lang b/src/resources/vanilla_language/lang/zh-MS.lang
similarity index 97%
rename from liteyuki/resources/vanilla_language/lang/zh-MS.lang
rename to src/resources/vanilla_language/lang/zh-MS.lang
index 83f4e7ee..4a8b5b04 100644
--- a/liteyuki/resources/vanilla_language/lang/zh-MS.lang
+++ b/src/resources/vanilla_language/lang/zh-MS.lang
@@ -1,159 +1,159 @@
-language.name=稀奇古怪的语言
-
-log.debug=调戏
-log.info=情报
-log.warning=警告警告
-log.error=错误错了
-log.success=成功达成
-
-liteyuki.restart=重新开始
-liteyuki.restart_now=立即重启
-liteyuki.update_restart=更新完成,你可以{RESTART}或稍后手动重启以应用这些更新
-liteyuki.current_config=当前构建来袭
-liteyuki.static_config=静态设置
-liteyuki.stored_config=存储的神秘宝藏
-liteyuki.config_set_success=配置项 {KEY}={VAL} 非常有趣地设定成功
-liteyuki.stats.group=群组
-liteyuki.stats.user=神秘对象
-liteyuki.stats.plugin=魔法咒语
-liteyuki.stats.sent=传送成功
-liteyuki.stats.received=接收到
-liteyuki.stats.run_time=时间流逝
-liteyuki.stats.groups=群体
-liteyuki.stats.friends=亲密朋友
-liteyuki.stats.plugins=神奇咒语
-liteyuki.image_mode_on=魔法阵开启,Markdown图片模式启动
-liteyuki.image_mode_off=魔法阵解除,Markdown图片模式关闭
-liteyuki.invalid_command=不合理的命令或参数 {TEXT}
-liteyuki.reload_resources=重新装载资源
-liteyuki.list_resources=寻宝资源列表
-liteyuki.reload_resources_success=资源重新装载成功,神秘的{NUM}个资源包呈现在你的眼前
-liteyuki.loaded_resources=加载了{NUM}个奇幻资源包,按优先级排序
-liteyuki.unloaded_resources=神秘资源包未加载
-liteyuki.load_resource_success=神秘资源包 {NAME} 被你发现并加载
-liteyuki.unload_resource_success=神秘资源包 {NAME} 解除装载
-liteyuki.load_resource_failed=神秘资源包 {NAME} 消失了
-liteyuki.unload_resource_failed=神秘资源包 {NAME} 永远解除不了
-liteyuki.resource_not_found=寻宝失败,资源包 {NAME} 消失在地平线
-liteyuki.resource_already_loaded=神秘资源包 {NAME} 已经被解锁了,不用再次操作
-liteyuki.resource_already_unloaded=神秘资源包 {NAME} 已经不复存在
-liteyuki.need_reload=你需要{BTN}重新装载才能启用这些更新
-liteyuki.dont_repeat=重复的行为不被魔法接受
-liteyuki.change_priority_success=神秘资源包 {NAME} 优先级变更成功
-liteyuki.change_priority_failed=神秘资源包 {NAME} 优先级变更失败
-liteyuki.group_already=群 {GROUP} 已经被 {STATUS},不用再操作了
-liteyuki.group_success=群 {GROUP} 已经 {STATUS} 成功
-liteyuki.permission_denied=权限不足,被魔法屏蔽
-liteyuki.config_remove_success=配置项 {KEY} 成功消失在黑暗之中
-
-main.current_language=当前选择的秘密语言是:{LANG}
-main.enable_webdash=啊哈,网页监控面板已被启用:{URL}
-main.monitor.title=神秘监视塔
-main.monitor.description=魔法眼正在注视着你的每一个动作
-main.monitor.cpu=中国药科大学
-main.monitor.memory=回忆
-main.monitor.swap=换个地方
-main.monitor.disk=神秘碟片
-main.monitor.usage=使用率
-main.monitor.total=总计
-main.monitor.used=已经被用掉了
-main.monitor.free=魔法保护中
-
-data_manager.migrate_success=数据模型{NAME}成功变身
-
-npm.loaded_plugins=魔法插件已经装载
-npm.total=总计 {TOTAL} 件奇怪的魔法
-npm.help=帮助
-npm.usage=使用法术
-npm.description=描述
-npm.disable=关闭
-npm.disable_global=全球关闭
-npm.enable=开启
-npm.enable_global=全球开启
-npm.install=安装
-npm.uninstall=解除魔法
-npm.installing=正在释放{name}的魔力
-npm.cannot_uninstall=无法解除
-npm.no_description=咦?这个法术并没有说明书
-npm.store_update_success=插件商店中的魔法书已经更新
-npm.store_update_failed=插件商店中的魔法书更新失败
-npm.search_result=搜索到宝藏
-npm.search_no_result=什么都没找到,可能被巫师藏起来了
-npm.too_many_results=结果太多了,{HIDE_NUM}个被隐藏起来,只展示给了你
-npm.install_success={NAME}成功附身
-npm.install_failed={NAME}附身失败,查看日志以了解详情,如果无法解决,请访问{HOMEPAGE}求助
-npm.uninstall_success={NAME}成功解除魔法,下次重启生效
-npm.uninstall_failed={NAME}解除魔法失败
-npm.load_failed={NAME}魔法咒语加载失败,请在控制台寻找线索,或者访问{HOMEPAGE}寻求帮助
-npm.plugin_not_found=在黑暗中找不到{name},请尝试更新商店或检查你的咒语
-npm.plugin_not_installed={NAME}并没有被释放
-npm.plugin_already_installed={NAME}已经附身,请勿重复释放
-npm.author=法师
-npm.homepage=魔法门
-npm.pypi=PyPI
-npm.next_page=前进
-npm.prev_page=后退
-npm.update=更新
-npm.plugin_cannot_be_toggled={NAME}咒语无法变化状态
-npm.plugin_already={NAME}已经是{STATUS}状态,无需再次操作
-npm.toggle_failed=咒语 {NAME} {STATUS} 失败:{ERROR}
-npm.toggle_success=咒语 {NAME} {STATUS} 成功
-npm.page=第{PAGE}/{TOTAL}页
-npm.update_index=更新法术索引
-npm.list_plugins=咒语列表
-npm.disable_session=当前会话中的咒语被屏蔽
-npm.enable_session=当前会话中的咒语被解除屏蔽
-npm.help=帮助
-npm.search=寻找黑暗中的宝藏
-
-user.profile.edit=改变命运
-user.profile.set=命定
-user.profile_manager.query=您的神秘信息 {ATTR} 为 {VALUE}
-user.profile_manager.set=您的神秘信息 {ATTR} 已经被改写成 {VALUE}
-user.profile.settings=设置
-user.profile.info=命运信息
-user.profile.lang=魔法语言
-user.profile.lang.desc=选择您的魔法语言
-user.profile.timezone=时光漩涡
-user.profile.timezone.desc=调整您的时光轨迹
-user.profile.theme=魔法主题
-user.profile.theme.desc=选择您的魔法主题
-user.profile.location=奇幻地点
-user.profile.location.desc=标定您的奇幻地点
-user.profile.nickname=魔法称号
-user.profile.nickname.desc=设置 Bot 对您的称呼
-user.profile.input_value=请输入 {ATTR} 的魔法数值
-user.profile.set_success={ATTR} 已经被设定成 {VALUE}
-user.profile.set_failed={ATTR} 咒语无法被改写,请检查您的输入是否合法
-
-rpm.move_up=向上移动
-rpm.move_down=向下移动
-rpm.move_top=置顶
-
-weather.city_not_found=城市 {CITY} 被魔法抹去了
-weather.weather_not_found=城市 {CITY} 的天气信息被魔法屏蔽了
-weather.no_key=天气预报 API 的宝藏尚未被发现,请在您的魔法书中添加 weather_key
-
-status.friends=朋友
-status.groups=群体
-status.plugins=咒语
-status.resources=神秘物品
-status.bots=奇幻生物
-status.message_sent=发送了消息
-status.message_received=接收到了消息
-status.cpu=中国药科大学
-status.memory=回忆
-status.swap=换个地方
-status.disk=神秘碟片
-status.usage=使用率
-status.total=总计
-status.used=已经被用掉了
-status.free=魔法保护中
-status.runtime=时间流逝
-status.days=天
-status.hours=小时
-status.minutes=分钟
-status.seconds=秒
-status.cores=核心
-status.threads=线程
+language.name=稀奇古怪的语言
+
+log.debug=调戏
+log.info=情报
+log.warning=警告警告
+log.error=错误错了
+log.success=成功达成
+
+liteyuki.restart=重新开始
+liteyuki.restart_now=立即重启
+liteyuki.update_restart=更新完成,你可以{RESTART}或稍后手动重启以应用这些更新
+liteyuki.current_config=当前构建来袭
+liteyuki.static_config=静态设置
+liteyuki.stored_config=存储的神秘宝藏
+liteyuki.config_set_success=配置项 {KEY}={VAL} 非常有趣地设定成功
+liteyuki.stats.group=群组
+liteyuki.stats.user=神秘对象
+liteyuki.stats.plugin=魔法咒语
+liteyuki.stats.sent=传送成功
+liteyuki.stats.received=接收到
+liteyuki.stats.run_time=时间流逝
+liteyuki.stats.groups=群体
+liteyuki.stats.friends=亲密朋友
+liteyuki.stats.plugins=神奇咒语
+liteyuki.image_mode_on=魔法阵开启,Markdown图片模式启动
+liteyuki.image_mode_off=魔法阵解除,Markdown图片模式关闭
+liteyuki.invalid_command=不合理的命令或参数 {TEXT}
+liteyuki.reload_resources=重新装载资源
+liteyuki.list_resources=寻宝资源列表
+liteyuki.reload_resources_success=资源重新装载成功,神秘的{NUM}个资源包呈现在你的眼前
+liteyuki.loaded_resources=加载了{NUM}个奇幻资源包,按优先级排序
+liteyuki.unloaded_resources=神秘资源包未加载
+liteyuki.load_resource_success=神秘资源包 {NAME} 被你发现并加载
+liteyuki.unload_resource_success=神秘资源包 {NAME} 解除装载
+liteyuki.load_resource_failed=神秘资源包 {NAME} 消失了
+liteyuki.unload_resource_failed=神秘资源包 {NAME} 永远解除不了
+liteyuki.resource_not_found=寻宝失败,资源包 {NAME} 消失在地平线
+liteyuki.resource_already_loaded=神秘资源包 {NAME} 已经被解锁了,不用再次操作
+liteyuki.resource_already_unloaded=神秘资源包 {NAME} 已经不复存在
+liteyuki.need_reload=你需要{BTN}重新装载才能启用这些更新
+liteyuki.dont_repeat=重复的行为不被魔法接受
+liteyuki.change_priority_success=神秘资源包 {NAME} 优先级变更成功
+liteyuki.change_priority_failed=神秘资源包 {NAME} 优先级变更失败
+liteyuki.group_already=群 {GROUP} 已经被 {STATUS},不用再操作了
+liteyuki.group_success=群 {GROUP} 已经 {STATUS} 成功
+liteyuki.permission_denied=权限不足,被魔法屏蔽
+liteyuki.config_remove_success=配置项 {KEY} 成功消失在黑暗之中
+
+main.current_language=当前选择的秘密语言是:{LANG}
+main.enable_webdash=啊哈,网页监控面板已被启用:{URL}
+main.monitor.title=神秘监视塔
+main.monitor.description=魔法眼正在注视着你的每一个动作
+main.monitor.cpu=中国药科大学
+main.monitor.memory=回忆
+main.monitor.swap=换个地方
+main.monitor.disk=神秘碟片
+main.monitor.usage=使用率
+main.monitor.total=总计
+main.monitor.used=已经被用掉了
+main.monitor.free=魔法保护中
+
+data_manager.migrate_success=数据模型{NAME}成功变身
+
+npm.loaded_plugins=魔法插件已经装载
+npm.total=总计 {TOTAL} 件奇怪的魔法
+npm.help=帮助
+npm.usage=使用法术
+npm.description=描述
+npm.disable=关闭
+npm.disable_global=全球关闭
+npm.enable=开启
+npm.enable_global=全球开启
+npm.install=安装
+npm.uninstall=解除魔法
+npm.installing=正在释放{name}的魔力
+npm.cannot_uninstall=无法解除
+npm.no_description=咦?这个法术并没有说明书
+npm.store_update_success=插件商店中的魔法书已经更新
+npm.store_update_failed=插件商店中的魔法书更新失败
+npm.search_result=搜索到宝藏
+npm.search_no_result=什么都没找到,可能被巫师藏起来了
+npm.too_many_results=结果太多了,{HIDE_NUM}个被隐藏起来,只展示给了你
+npm.install_success={NAME}成功附身
+npm.install_failed={NAME}附身失败,查看日志以了解详情,如果无法解决,请访问{HOMEPAGE}求助
+npm.uninstall_success={NAME}成功解除魔法,下次重启生效
+npm.uninstall_failed={NAME}解除魔法失败
+npm.load_failed={NAME}魔法咒语加载失败,请在控制台寻找线索,或者访问{HOMEPAGE}寻求帮助
+npm.plugin_not_found=在黑暗中找不到{name},请尝试更新商店或检查你的咒语
+npm.plugin_not_installed={NAME}并没有被释放
+npm.plugin_already_installed={NAME}已经附身,请勿重复释放
+npm.author=法师
+npm.homepage=魔法门
+npm.pypi=PyPI
+npm.next_page=前进
+npm.prev_page=后退
+npm.update=更新
+npm.plugin_cannot_be_toggled={NAME}咒语无法变化状态
+npm.plugin_already={NAME}已经是{STATUS}状态,无需再次操作
+npm.toggle_failed=咒语 {NAME} {STATUS} 失败:{ERROR}
+npm.toggle_success=咒语 {NAME} {STATUS} 成功
+npm.page=第{PAGE}/{TOTAL}页
+npm.update_index=更新法术索引
+npm.list_plugins=咒语列表
+npm.disable_session=当前会话中的咒语被屏蔽
+npm.enable_session=当前会话中的咒语被解除屏蔽
+npm.help=帮助
+npm.search=寻找黑暗中的宝藏
+
+user.profile.edit=改变命运
+user.profile.set=命定
+user.profile_manager.query=您的神秘信息 {ATTR} 为 {VALUE}
+user.profile_manager.set=您的神秘信息 {ATTR} 已经被改写成 {VALUE}
+user.profile.settings=设置
+user.profile.info=命运信息
+user.profile.lang=魔法语言
+user.profile.lang.desc=选择您的魔法语言
+user.profile.timezone=时光漩涡
+user.profile.timezone.desc=调整您的时光轨迹
+user.profile.theme=魔法主题
+user.profile.theme.desc=选择您的魔法主题
+user.profile.location=奇幻地点
+user.profile.location.desc=标定您的奇幻地点
+user.profile.nickname=魔法称号
+user.profile.nickname.desc=设置 Bot 对您的称呼
+user.profile.input_value=请输入 {ATTR} 的魔法数值
+user.profile.set_success={ATTR} 已经被设定成 {VALUE}
+user.profile.set_failed={ATTR} 咒语无法被改写,请检查您的输入是否合法
+
+rpm.move_up=向上移动
+rpm.move_down=向下移动
+rpm.move_top=置顶
+
+weather.city_not_found=城市 {CITY} 被魔法抹去了
+weather.weather_not_found=城市 {CITY} 的天气信息被魔法屏蔽了
+weather.no_key=天气预报 API 的宝藏尚未被发现,请在您的魔法书中添加 weather_key
+
+status.friends=朋友
+status.groups=群体
+status.plugins=咒语
+status.resources=神秘物品
+status.bots=奇幻生物
+status.message_sent=发送了消息
+status.message_received=接收到了消息
+status.cpu=中国药科大学
+status.memory=回忆
+status.swap=换个地方
+status.disk=神秘碟片
+status.usage=使用率
+status.total=总计
+status.used=已经被用掉了
+status.free=魔法保护中
+status.runtime=时间流逝
+status.days=天
+status.hours=小时
+status.minutes=分钟
+status.seconds=秒
+status.cores=核心
+status.threads=线程
status.process=进程
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/lang/zh-WY.lang b/src/resources/vanilla_language/lang/zh-WY.lang
similarity index 96%
rename from liteyuki/resources/vanilla_language/lang/zh-WY.lang
rename to src/resources/vanilla_language/lang/zh-WY.lang
index 4ecc84c9..fa244113 100644
--- a/liteyuki/resources/vanilla_language/lang/zh-WY.lang
+++ b/src/resources/vanilla_language/lang/zh-WY.lang
@@ -1,159 +1,159 @@
-language.name=文言
-
-log.debug=觀其調
-log.info=見其訊
-log.warning=告之懼
-log.error=惡之誤
-log.success=喜之成
-
-liteyuki.restart=復其初
-liteyuki.restart_now=即其初
-liteyuki.update_restart=更新既成,可{RESTART}或稍後手動復始以行是更新
-liteyuki.current_config=當前設之如左
-liteyuki.static_config=靜態設之
-liteyuki.stored_config=存之設也
-liteyuki.config_set_success=設之 {KEY}={VAL} 成焉
-liteyuki.stats.group=群
-liteyuki.stats.user=友
-liteyuki.stats.plugin=插
-liteyuki.stats.sent=遣
-liteyuki.stats.received=受
-liteyuki.stats.run_time=進行時
-liteyuki.stats.groups=羣
-liteyuki.stats.friends=友
-liteyuki.stats.plugins=插
-liteyuki.image_mode_on=開云標示式圖之術
-liteyuki.image_mode_off=閉云標示式圖之術
-liteyuki.invalid_command=無其可爲之語也 {TEXT}
-liteyuki.reload_resources=重載資
-liteyuki.list_resources=資列表
-liteyuki.reload_resources_success=資重載成,資數 {NUM} 也
-liteyuki.loaded_resources=載資 {NUM},優先之次是
-liteyuki.unloaded_resources=資未載
-liteyuki.load_resource_success=資 {NAME} 載
-liteyuki.unload_resource_success=資 {NAME} 拔
-liteyuki.load_resource_failed=資 {NAME} 載失
-liteyuki.unload_resource_failed=資 {NAME} 拔失
-liteyuki.resource_not_found=資 {NAME} 不存或無爲
-liteyuki.resource_already_loaded=資 {NAME} 已載,勿復
-liteyuki.resource_already_unloaded=資 {NAME} 已拔,勿復
-liteyuki.need_reload=請{BTN}以行是更新
-liteyuki.dont_repeat=勿復行
-liteyuki.change_priority_success=資 {NAME} 優先成
-liteyuki.change_priority_failed=資 {NAME} 優先不成
-liteyuki.group_already=羣 {GROUP} 之狀已是 {STATUS} ,勿再行
-liteyuki.group_success=羣 {GROUP} {STATUS} 成
-liteyuki.permission_denied=權不及也
-liteyuki.config_remove_success=設 {KEY} 移
-
-main.current_language=當前言 {LANG} 爲是
-main.enable_webdash=啟網监塔: {URL}
-main.monitor.title=輕雪監塔
-main.monitor.description=輕雪機之監塔
-main.monitor.cpu=中药科大学
-main.monitor.memory=懷
-main.monitor.swap=易
-main.monitor.disk=磁
-main.monitor.usage=用之
-main.monitor.total=總
-main.monitor.used=所用
-main.monitor.free=閑也
-
-data_manager.migrate_success=模{NAME}易
-
-npm.loaded_plugins=載插
-npm.total=总 {TOTAL}
-npm.help=救
-npm.usage=法用
-npm.description=其形
-npm.disable=斷
-npm.disable_global=宇斷
-npm.enable=啟
-npm.enable_global=宇啟
-npm.install=法
-npm.uninstall=遣
-npm.installing=法 {NAME} 裝中
-npm.cannot_uninstall=法遣
-npm.no_description=无形
-npm.store_update_success=插庫成
-npm.store_update_failed=插庫敗
-npm.search_result=索所
-npm.search_no_result=無索
-npm.too_many_results=之多,{HIDE_NUM} 無現,審爲
-npm.install_success={NAME} 成
-npm.install_failed={NAME} 敗,語目以知,不知求于{HOMEPAGE}
-npm.uninstall_success={NAME} 遣,明{HOMEPAGE}
-npm.uninstall_failed={NAME} 遣
-npm.load_failed={NAME} 載,求于{HOMEPAGE}
-npm.plugin_not_found=無 {NAME} ,揭揭庫爲
-npm.plugin_not_installed={NAME} 未
-npm.plugin_already_installed={NAME} 已,勿復法
-npm.author=主
-npm.homepage=揭
-npm.pypi=PyPI
-npm.next_page=後
-npm.prev_page=前
-npm.update=兵
-npm.plugin_cannot_be_toggled={NAME} 不兵
-npm.plugin_already=插 {NAME} 之狀已是 {STATUS} ,勿再行
-npm.toggle_failed=插 {NAME} {STATUS} 敗:{ERROR}
-npm.toggle_success=插 {NAME} {STATUS} 成
-npm.page=第{PAGE}/{TOTAL} 節
-npm.update_index=兵索
-npm.list_plugins=插目
-npm.disable_session=在次斷
-npm.enable_session=在次啟
-npm.help=救
-npm.search=索
-
-user.profile.edit=改
-user.profile.set=設
-user.profile_manager.query=汝之訊 {ATTR} 爲 {VALUE} 也
-user.profile_manager.set=汝之訊 {ATTR} 已設 {VALUE} 也
-user.profile.settings=設
-user.profile.info=訊
-user.profile.lang=言
-user.profile.lang.desc=言設
-user.profile.timezone=時
-user.profile.timezone.desc=時設
-user.profile.theme=題
-user.profile.theme.desc=題設
-user.profile.location=所
-user.profile.location.desc=所設
-user.profile.nickname=名
-user.profile.nickname.desc=設之之名
-user.profile.input_value=求輸 {ATTR} 之量
-user.profile.set_success={ATTR} 成 {VALUE} 也
-user.profile.set_failed={ATTR} 失,問求也
-
-rpm.move_up=上
-rpm.move_down=下
-rpm.move_top=初
-
-weather.city_not_found=城 {CITY} 不存也
-weather.weather_not_found=城 {CITY} 之氣也不存也
-weather.no_key=未設氣金鑰也,爲請增于設也
-
-status.friends=友
-status.groups=羣
-status.plugins=插
-status.resources=資
-status.bots=機
-status.message_sent=遣訊
-status.message_received=受訊
-status.cpu=中药科大学
-status.memory=懷
-status.swap=易
-status.disk=磁
-status.usage=用
-status.total=總
-status.used=所用
-status.free=閑
-status.runtime=時
-status.days=日
-status.hours=時
-status.minutes=分
-status.seconds=秒
-status.cores=核
-status.threads=縷
+language.name=文言
+
+log.debug=觀其調
+log.info=見其訊
+log.warning=告之懼
+log.error=惡之誤
+log.success=喜之成
+
+liteyuki.restart=復其初
+liteyuki.restart_now=即其初
+liteyuki.update_restart=更新既成,可{RESTART}或稍後手動復始以行是更新
+liteyuki.current_config=當前設之如左
+liteyuki.static_config=靜態設之
+liteyuki.stored_config=存之設也
+liteyuki.config_set_success=設之 {KEY}={VAL} 成焉
+liteyuki.stats.group=群
+liteyuki.stats.user=友
+liteyuki.stats.plugin=插
+liteyuki.stats.sent=遣
+liteyuki.stats.received=受
+liteyuki.stats.run_time=進行時
+liteyuki.stats.groups=羣
+liteyuki.stats.friends=友
+liteyuki.stats.plugins=插
+liteyuki.image_mode_on=開云標示式圖之術
+liteyuki.image_mode_off=閉云標示式圖之術
+liteyuki.invalid_command=無其可爲之語也 {TEXT}
+liteyuki.reload_resources=重載資
+liteyuki.list_resources=資列表
+liteyuki.reload_resources_success=資重載成,資數 {NUM} 也
+liteyuki.loaded_resources=載資 {NUM},優先之次是
+liteyuki.unloaded_resources=資未載
+liteyuki.load_resource_success=資 {NAME} 載
+liteyuki.unload_resource_success=資 {NAME} 拔
+liteyuki.load_resource_failed=資 {NAME} 載失
+liteyuki.unload_resource_failed=資 {NAME} 拔失
+liteyuki.resource_not_found=資 {NAME} 不存或無爲
+liteyuki.resource_already_loaded=資 {NAME} 已載,勿復
+liteyuki.resource_already_unloaded=資 {NAME} 已拔,勿復
+liteyuki.need_reload=請{BTN}以行是更新
+liteyuki.dont_repeat=勿復行
+liteyuki.change_priority_success=資 {NAME} 優先成
+liteyuki.change_priority_failed=資 {NAME} 優先不成
+liteyuki.group_already=羣 {GROUP} 之狀已是 {STATUS} ,勿再行
+liteyuki.group_success=羣 {GROUP} {STATUS} 成
+liteyuki.permission_denied=權不及也
+liteyuki.config_remove_success=設 {KEY} 移
+
+main.current_language=當前言 {LANG} 爲是
+main.enable_webdash=啟網监塔: {URL}
+main.monitor.title=輕雪監塔
+main.monitor.description=輕雪機之監塔
+main.monitor.cpu=中药科大学
+main.monitor.memory=懷
+main.monitor.swap=易
+main.monitor.disk=磁
+main.monitor.usage=用之
+main.monitor.total=總
+main.monitor.used=所用
+main.monitor.free=閑也
+
+data_manager.migrate_success=模{NAME}易
+
+npm.loaded_plugins=載插
+npm.total=总 {TOTAL}
+npm.help=救
+npm.usage=法用
+npm.description=其形
+npm.disable=斷
+npm.disable_global=宇斷
+npm.enable=啟
+npm.enable_global=宇啟
+npm.install=法
+npm.uninstall=遣
+npm.installing=法 {NAME} 裝中
+npm.cannot_uninstall=法遣
+npm.no_description=无形
+npm.store_update_success=插庫成
+npm.store_update_failed=插庫敗
+npm.search_result=索所
+npm.search_no_result=無索
+npm.too_many_results=之多,{HIDE_NUM} 無現,審爲
+npm.install_success={NAME} 成
+npm.install_failed={NAME} 敗,語目以知,不知求于{HOMEPAGE}
+npm.uninstall_success={NAME} 遣,明{HOMEPAGE}
+npm.uninstall_failed={NAME} 遣
+npm.load_failed={NAME} 載,求于{HOMEPAGE}
+npm.plugin_not_found=無 {NAME} ,揭揭庫爲
+npm.plugin_not_installed={NAME} 未
+npm.plugin_already_installed={NAME} 已,勿復法
+npm.author=主
+npm.homepage=揭
+npm.pypi=PyPI
+npm.next_page=後
+npm.prev_page=前
+npm.update=兵
+npm.plugin_cannot_be_toggled={NAME} 不兵
+npm.plugin_already=插 {NAME} 之狀已是 {STATUS} ,勿再行
+npm.toggle_failed=插 {NAME} {STATUS} 敗:{ERROR}
+npm.toggle_success=插 {NAME} {STATUS} 成
+npm.page=第{PAGE}/{TOTAL} 節
+npm.update_index=兵索
+npm.list_plugins=插目
+npm.disable_session=在次斷
+npm.enable_session=在次啟
+npm.help=救
+npm.search=索
+
+user.profile.edit=改
+user.profile.set=設
+user.profile_manager.query=汝之訊 {ATTR} 爲 {VALUE} 也
+user.profile_manager.set=汝之訊 {ATTR} 已設 {VALUE} 也
+user.profile.settings=設
+user.profile.info=訊
+user.profile.lang=言
+user.profile.lang.desc=言設
+user.profile.timezone=時
+user.profile.timezone.desc=時設
+user.profile.theme=題
+user.profile.theme.desc=題設
+user.profile.location=所
+user.profile.location.desc=所設
+user.profile.nickname=名
+user.profile.nickname.desc=設之之名
+user.profile.input_value=求輸 {ATTR} 之量
+user.profile.set_success={ATTR} 成 {VALUE} 也
+user.profile.set_failed={ATTR} 失,問求也
+
+rpm.move_up=上
+rpm.move_down=下
+rpm.move_top=初
+
+weather.city_not_found=城 {CITY} 不存也
+weather.weather_not_found=城 {CITY} 之氣也不存也
+weather.no_key=未設氣金鑰也,爲請增于設也
+
+status.friends=友
+status.groups=羣
+status.plugins=插
+status.resources=資
+status.bots=機
+status.message_sent=遣訊
+status.message_received=受訊
+status.cpu=中药科大学
+status.memory=懷
+status.swap=易
+status.disk=磁
+status.usage=用
+status.total=總
+status.used=所用
+status.free=閑
+status.runtime=時
+status.days=日
+status.hours=時
+status.minutes=分
+status.seconds=秒
+status.cores=核
+status.threads=縷
status.process=程
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_language/metadata.yml b/src/resources/vanilla_language/metadata.yml
similarity index 98%
rename from liteyuki/resources/vanilla_language/metadata.yml
rename to src/resources/vanilla_language/metadata.yml
index 47f7840b..f4c3e9f8 100644
--- a/liteyuki/resources/vanilla_language/metadata.yml
+++ b/src/resources/vanilla_language/metadata.yml
@@ -1,3 +1,3 @@
-name: 轻雪语言资源包
-description: 全局的语言资源包,不可卸载
+name: 轻雪语言资源包
+description: 全局的语言资源包,不可卸载
version: 2024.4.26
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/functions/hello.mcfunction b/src/resources/vanilla_resource/functions/hello.mcfunction
similarity index 96%
rename from liteyuki/resources/vanilla_resource/functions/hello.mcfunction
rename to src/resources/vanilla_resource/functions/hello.mcfunction
index ac435ce2..586e9d48 100644
--- a/liteyuki/resources/vanilla_resource/functions/hello.mcfunction
+++ b/src/resources/vanilla_resource/functions/hello.mcfunction
@@ -1,10 +1,10 @@
-api send_private_msg user_id=qq message=msg
-sleep 3
-
-# 使用asyncio.create_task()创建一个新的任务,不等待任务完成直接执行下一条命令
-nohup function hello
-
-sleep 10
-
-# cancel所有的tasks
+api send_private_msg user_id=qq message=msg
+sleep 3
+
+# 使用asyncio.create_task()创建一个新的任务,不等待任务完成直接执行下一条命令
+nohup function hello
+
+sleep 10
+
+# cancel所有的tasks
end
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/functions/poke.mcfunction b/src/resources/vanilla_resource/functions/poke.mcfunction
similarity index 96%
rename from liteyuki/resources/vanilla_resource/functions/poke.mcfunction
rename to src/resources/vanilla_resource/functions/poke.mcfunction
index a63d859a..4e04ddb8 100644
--- a/liteyuki/resources/vanilla_resource/functions/poke.mcfunction
+++ b/src/resources/vanilla_resource/functions/poke.mcfunction
@@ -1,5 +1,5 @@
-api friend_poke user_id=user_id
-api friend_poke user_id=user_id
-sleep 0.2
-nohup function poke
+api friend_poke user_id=user_id
+api friend_poke user_id=user_id
+sleep 0.2
+nohup function poke
await
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/metadata.yml b/src/resources/vanilla_resource/metadata.yml
similarity index 97%
rename from liteyuki/resources/vanilla_resource/metadata.yml
rename to src/resources/vanilla_resource/metadata.yml
index 43147799..534a03dd 100644
--- a/liteyuki/resources/vanilla_resource/metadata.yml
+++ b/src/resources/vanilla_resource/metadata.yml
@@ -1,3 +1,3 @@
-name: 轻雪原版资源包
-description: 轻雪内置资源包,不可卸载
+name: 轻雪原版资源包
+description: 轻雪内置资源包,不可卸载
version: 1.0.0
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/css/card.css b/src/resources/vanilla_resource/templates/css/card.css
similarity index 94%
rename from liteyuki/resources/vanilla_resource/templates/css/card.css
rename to src/resources/vanilla_resource/templates/css/card.css
index 04fd2bc4..aa05c0cc 100644
--- a/liteyuki/resources/vanilla_resource/templates/css/card.css
+++ b/src/resources/vanilla_resource/templates/css/card.css
@@ -1,39 +1,39 @@
-:root {
- --main-text-color: #fff;
- --sub-text-color: #ccc;
- --tip-text-color: #999;
- --device-info-width: 240px;
-}
-
-
-.data-storage {
- display: none;
-}
-
-body {
- background-repeat: repeat-y;
- background-size: cover;
- background-position: center;
- text-shadow: 1px 1px 2px black;
- margin: 20px;
-}
-
-.info-box {
- border-radius: 60px;
- padding: 40px;
- backdrop-filter: blur(10px);
- background-color: rgba(0, 0, 0, 0.5);
- margin-bottom: 20px;
-}
-
-#author-description {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-#author-text {
- margin-left: 20px;
- color: var(--sub-text-color);
- font-size: 30px;
+:root {
+ --main-text-color: #fff;
+ --sub-text-color: #ccc;
+ --tip-text-color: #999;
+ --device-info-width: 240px;
+}
+
+
+.data-storage {
+ display: none;
+}
+
+body {
+ background-repeat: repeat-y;
+ background-size: cover;
+ background-position: center;
+ text-shadow: 1px 1px 2px black;
+ margin: 20px;
+}
+
+.info-box {
+ border-radius: 60px;
+ padding: 40px;
+ backdrop-filter: blur(10px);
+ background-color: rgba(0, 0, 0, 0.5);
+ margin-bottom: 20px;
+}
+
+#author-description {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+#author-text {
+ margin-left: 20px;
+ color: var(--sub-text-color);
+ font-size: 30px;
}
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/css/fonts.css b/src/resources/vanilla_resource/templates/css/fonts.css
similarity index 95%
rename from liteyuki/resources/vanilla_resource/templates/css/fonts.css
rename to src/resources/vanilla_resource/templates/css/fonts.css
index 67177477..fa6d8bc0 100644
--- a/liteyuki/resources/vanilla_resource/templates/css/fonts.css
+++ b/src/resources/vanilla_resource/templates/css/fonts.css
@@ -1,76 +1,76 @@
-/*MiSans*/
-
-@font-face {
- font-family: 'MiSans';
- src: url('../fonts/MiSans/MiSans-Light.woff2') format('woff2');
- font-weight: 200;
-}
-
-@font-face {
- font-family: 'MiSans';
- src: url('../fonts/MiSans/MiSans-Normal.woff2') format('woff2');
- font-weight: 400;
-}
-
-@font-face {
- font-family: 'MiSans';
- src: url('../fonts/MiSans/MiSans-Semibold.woff2') format('woff2');
- font-weight: 500;
-}
-
-@font-face {
- font-family: 'MiSans';
- src: url('../fonts/MiSans/MiSans-Bold.woff2') format('woff2');
- font-weight: 700;
-}
-
-@font-face {
- font-family: 'MiSans';
- src: url('../fonts/MiSans/MiSans-Heavy.woff2') format('woff2');
- font-weight: 900;
-}
-
-/*MapleMono*/
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-Light.woff2') format('woff2');
- font-weight: 200;
-}
-
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-LightItalic.woff2') format('woff2');
- font-weight: 200;
- font-style: italic;
-}
-
-
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-Regular.woff2') format('woff2');
- font-weight: 400;
-}
-
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-Italic.woff2') format('woff2');
- font-weight: 400;
- font-style: italic;
-}
-
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-Bold.woff2') format('woff2');
- font-weight: 700;
-}
-
-@font-face {
- font-family: 'MapleMono';
- src: url('../fonts/MapleMono/MapleMono-BoldItalic.woff2') format('woff2');
- font-weight: 700;
- font-style: italic;
-}
-
-* {
- font-family: 'MapleMono', 'MiSans', sans-serif;
+/*MiSans*/
+
+@font-face {
+ font-family: 'MiSans';
+ src: url('../fonts/MiSans/MiSans-Light.woff2') format('woff2');
+ font-weight: 200;
+}
+
+@font-face {
+ font-family: 'MiSans';
+ src: url('../fonts/MiSans/MiSans-Normal.woff2') format('woff2');
+ font-weight: 400;
+}
+
+@font-face {
+ font-family: 'MiSans';
+ src: url('../fonts/MiSans/MiSans-Semibold.woff2') format('woff2');
+ font-weight: 500;
+}
+
+@font-face {
+ font-family: 'MiSans';
+ src: url('../fonts/MiSans/MiSans-Bold.woff2') format('woff2');
+ font-weight: 700;
+}
+
+@font-face {
+ font-family: 'MiSans';
+ src: url('../fonts/MiSans/MiSans-Heavy.woff2') format('woff2');
+ font-weight: 900;
+}
+
+/*MapleMono*/
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-Light.woff2') format('woff2');
+ font-weight: 200;
+}
+
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-LightItalic.woff2') format('woff2');
+ font-weight: 200;
+ font-style: italic;
+}
+
+
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-Regular.woff2') format('woff2');
+ font-weight: 400;
+}
+
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-Italic.woff2') format('woff2');
+ font-weight: 400;
+ font-style: italic;
+}
+
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-Bold.woff2') format('woff2');
+ font-weight: 700;
+}
+
+@font-face {
+ font-family: 'MapleMono';
+ src: url('../fonts/MapleMono/MapleMono-BoldItalic.woff2') format('woff2');
+ font-weight: 700;
+ font-style: italic;
+}
+
+* {
+ font-family: 'MapleMono', 'MiSans', sans-serif;
}
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/css/status.css b/src/resources/vanilla_resource/templates/css/status.css
similarity index 94%
rename from liteyuki/resources/vanilla_resource/templates/css/status.css
rename to src/resources/vanilla_resource/templates/css/status.css
index 49cb1456..c7ed2cb0 100644
--- a/liteyuki/resources/vanilla_resource/templates/css/status.css
+++ b/src/resources/vanilla_resource/templates/css/status.css
@@ -1,127 +1,127 @@
-:root {
- --main-text-color: #fff;
- --sub-text-color: #ccc;
- --tip-text-color: #999;
- --device-info-width: 240px;
-}
-
-.bot-info {
- display: flex;
-}
-
-.bot-icon {
- display: flex;
- width: 220px;
- align-items: center;
- justify-content: center;
- margin-right: 20px;
-}
-
-.bot-icon-img {
- height: 220px;
- width: 220px;
- border-radius: 50%;
-}
-
-.bot-name {
- color: var(--main-text-color);
- display: flex;
- font-size: 45px;
- flex-direction: column;
- justify-content: center;
-}
-
-.bot-tag {
- white-space: break-spaces;
- color: var(--sub-text-color);
- font-size: 30px;
- font-weight: 700;
- line-height: 1.6;
-}
-
-.bot-tag[suffix="1"]::after {
- content: "|";
- display: inline-block;
- margin: 0 5px;
- height: 30%;
- line-height: 50%;
- color: var(--tip-text-color);
-}
-
-/*修改bot-info 下hr样式*/
-.bot-info hr {
- border: 0;
- height: 4px;
- background: var(--tip-text-color);
- margin: 10px 0;
- width: 100%;
-}
-
-#hardware-info {
- display: flex;
- justify-content: space-evenly;
-}
-
-.device-info {
- max-width: 30%;
-}
-
-.device-chart {
- display: flex;
- height: var(--device-info-width);
- width: var(--device-info-width);
- margin-bottom: 20px;
- justify-content: center;
-}
-
-.device-tags {
- text-align: center;
- color: var(--sub-text-color);
- font-size: 24px;
- max-width: var(--device-info-width);
- word-wrap: break-word;
-}
-
-.disk-info {
- display: flex;
- position: relative;
- width: 100%;
- height: 60px;
- background-color: #ffffff44;
- border-radius: 30px;
- align-items: center;
-}
-
-.disk-usage {
- background-color: #a2d8f4;
- height: 100%;
- border-radius: 30px;
- position: absolute;
- z-index: 1;
-}
-
-.disk-title {
- position: absolute;
- color: var(--main-text-color);
- font-size: 24px;
- margin-bottom: 10px;
- margin-left: 20px;
- text-align: left;
- z-index: 2;
-}
-
-#motto-text {
- font-size: 36px;
- word-wrap: break-word;
- color: var(--main-text-color);
- text-align: center;
- margin: 30px 0 10px 0;
-}
-
-#motto-from {
- font-size: 30px;
- font-style: italic;
- color: var(--sub-text-color);
- text-align: right;
-}
-
+:root {
+ --main-text-color: #fff;
+ --sub-text-color: #ccc;
+ --tip-text-color: #999;
+ --device-info-width: 240px;
+}
+
+.bot-info {
+ display: flex;
+}
+
+.bot-icon {
+ display: flex;
+ width: 220px;
+ align-items: center;
+ justify-content: center;
+ margin-right: 20px;
+}
+
+.bot-icon-img {
+ height: 220px;
+ width: 220px;
+ border-radius: 50%;
+}
+
+.bot-name {
+ color: var(--main-text-color);
+ display: flex;
+ font-size: 45px;
+ flex-direction: column;
+ justify-content: center;
+}
+
+.bot-tag {
+ white-space: break-spaces;
+ color: var(--sub-text-color);
+ font-size: 30px;
+ font-weight: 700;
+ line-height: 1.6;
+}
+
+.bot-tag[suffix="1"]::after {
+ content: "|";
+ display: inline-block;
+ margin: 0 5px;
+ height: 30%;
+ line-height: 50%;
+ color: var(--tip-text-color);
+}
+
+/*修改bot-info 下hr样式*/
+.bot-info hr {
+ border: 0;
+ height: 4px;
+ background: var(--tip-text-color);
+ margin: 10px 0;
+ width: 100%;
+}
+
+#hardware-info {
+ display: flex;
+ justify-content: space-evenly;
+}
+
+.device-info {
+ max-width: 30%;
+}
+
+.device-chart {
+ display: flex;
+ height: var(--device-info-width);
+ width: var(--device-info-width);
+ margin-bottom: 20px;
+ justify-content: center;
+}
+
+.device-tags {
+ text-align: center;
+ color: var(--sub-text-color);
+ font-size: 24px;
+ max-width: var(--device-info-width);
+ word-wrap: break-word;
+}
+
+.disk-info {
+ display: flex;
+ position: relative;
+ width: 100%;
+ height: 60px;
+ background-color: #ffffff44;
+ border-radius: 30px;
+ align-items: center;
+}
+
+.disk-usage {
+ background-color: #a2d8f4;
+ height: 100%;
+ border-radius: 30px;
+ position: absolute;
+ z-index: 1;
+}
+
+.disk-title {
+ position: absolute;
+ color: var(--main-text-color);
+ font-size: 24px;
+ margin-bottom: 10px;
+ margin-left: 20px;
+ text-align: left;
+ z-index: 2;
+}
+
+#motto-text {
+ font-size: 36px;
+ word-wrap: break-word;
+ color: var(--main-text-color);
+ text-align: center;
+ margin: 30px 0 10px 0;
+}
+
+#motto-from {
+ font-size: 30px;
+ font-style: italic;
+ color: var(--sub-text-color);
+ text-align: right;
+}
+
diff --git a/liteyuki/resources/vanilla_resource/templates/css/style.css b/src/resources/vanilla_resource/templates/css/style.css
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/css/style.css
rename to src/resources/vanilla_resource/templates/css/style.css
diff --git a/liteyuki/resources/vanilla_resource/templates/favicon.ico b/src/resources/vanilla_resource/templates/favicon.ico
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/favicon.ico
rename to src/resources/vanilla_resource/templates/favicon.ico
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Bold.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Bold.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Bold.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Bold.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-BoldItalic.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-BoldItalic.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-BoldItalic.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-BoldItalic.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Italic.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Italic.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Italic.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Italic.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Light.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Light.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Light.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Light.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-LightItalic.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-LightItalic.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-LightItalic.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-LightItalic.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Regular.woff2 b/src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Regular.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Regular.woff2
rename to src/resources/vanilla_resource/templates/fonts/MapleMono/MapleMono-Regular.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Bold.woff2 b/src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Bold.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Bold.woff2
rename to src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Bold.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Heavy.woff2 b/src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Heavy.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Heavy.woff2
rename to src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Heavy.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Light.woff2 b/src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Light.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Light.woff2
rename to src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Light.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Normal.woff2 b/src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Normal.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Normal.woff2
rename to src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Normal.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Semibold.woff2 b/src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Semibold.woff2
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Semibold.woff2
rename to src/resources/vanilla_resource/templates/fonts/MiSans/MiSans-Semibold.woff2
diff --git a/liteyuki/resources/vanilla_resource/templates/img/2023-08-05_20.06.51.png b/src/resources/vanilla_resource/templates/img/2023-08-05_20.06.51.png
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/2023-08-05_20.06.51.png
rename to src/resources/vanilla_resource/templates/img/2023-08-05_20.06.51.png
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg1.webp b/src/resources/vanilla_resource/templates/img/bg1.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg1.webp
rename to src/resources/vanilla_resource/templates/img/bg1.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg2.webp b/src/resources/vanilla_resource/templates/img/bg2.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg2.webp
rename to src/resources/vanilla_resource/templates/img/bg2.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg3.webp b/src/resources/vanilla_resource/templates/img/bg3.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg3.webp
rename to src/resources/vanilla_resource/templates/img/bg3.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg4.webp b/src/resources/vanilla_resource/templates/img/bg4.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg4.webp
rename to src/resources/vanilla_resource/templates/img/bg4.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg5.webp b/src/resources/vanilla_resource/templates/img/bg5.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg5.webp
rename to src/resources/vanilla_resource/templates/img/bg5.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg6.webp b/src/resources/vanilla_resource/templates/img/bg6.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg6.webp
rename to src/resources/vanilla_resource/templates/img/bg6.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/bg7.webp b/src/resources/vanilla_resource/templates/img/bg7.webp
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/bg7.webp
rename to src/resources/vanilla_resource/templates/img/bg7.webp
diff --git a/liteyuki/resources/vanilla_resource/templates/img/liteyuki.png b/src/resources/vanilla_resource/templates/img/liteyuki.png
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/img/liteyuki.png
rename to src/resources/vanilla_resource/templates/img/liteyuki.png
diff --git a/liteyuki/resources/vanilla_resource/templates/js/card.js b/src/resources/vanilla_resource/templates/js/card.js
similarity index 96%
rename from liteyuki/resources/vanilla_resource/templates/js/card.js
rename to src/resources/vanilla_resource/templates/js/card.js
index a034cd9d..e7bfb754 100644
--- a/liteyuki/resources/vanilla_resource/templates/js/card.js
+++ b/src/resources/vanilla_resource/templates/js/card.js
@@ -1,27 +1,27 @@
-const bgs = [
- "bg1.webp",
- "bg2.webp",
- "bg3.webp",
- "bg4.webp",
- "bg5.webp",
- "bg6.webp",
- "bg7.webp",
-]
-// 随机选择背景图片
-document.body.style.backgroundImage = `url(./img/${bgs[Math.floor(Math.random() * bgs.length)]})`;
-// body后插入info-box id=description
-let descriptionDiv = document.createElement("div");
-descriptionDiv.className = 'info-box'
-descriptionDiv.id = 'author-description'
-// 添加一副头像且垂直居中
-let avatar = document.createElement("img");
-avatar.src = 'https://q.qlogo.cn/g?b=qq&nk=2751454815&s=640'
-avatar.style.height = '50px';
-avatar.style.borderRadius = '50%';
-
-let text = document.createElement("div");
-text.id = 'author-text';
-text.innerText = 'Designed by SnowyKami';
-descriptionDiv.appendChild(avatar);
-descriptionDiv.appendChild(text);
-document.body.appendChild(descriptionDiv);
+const bgs = [
+ "bg1.webp",
+ "bg2.webp",
+ "bg3.webp",
+ "bg4.webp",
+ "bg5.webp",
+ "bg6.webp",
+ "bg7.webp",
+]
+// 随机选择背景图片
+document.body.style.backgroundImage = `url(./img/${bgs[Math.floor(Math.random() * bgs.length)]})`;
+// body后插入info-box id=description
+let descriptionDiv = document.createElement("div");
+descriptionDiv.className = 'info-box'
+descriptionDiv.id = 'author-description'
+// 添加一副头像且垂直居中
+let avatar = document.createElement("img");
+avatar.src = 'https://q.qlogo.cn/g?b=qq&nk=2751454815&s=640'
+avatar.style.height = '50px';
+avatar.style.borderRadius = '50%';
+
+let text = document.createElement("div");
+text.id = 'author-text';
+text.innerText = 'Designed by SnowyKami';
+descriptionDiv.appendChild(avatar);
+descriptionDiv.appendChild(text);
+document.body.appendChild(descriptionDiv);
diff --git a/liteyuki/resources/vanilla_resource/templates/js/motto.js b/src/resources/vanilla_resource/templates/js/motto.js
similarity index 96%
rename from liteyuki/resources/vanilla_resource/templates/js/motto.js
rename to src/resources/vanilla_resource/templates/js/motto.js
index 54e0c12f..6e2402b5 100644
--- a/liteyuki/resources/vanilla_resource/templates/js/motto.js
+++ b/src/resources/vanilla_resource/templates/js/motto.js
@@ -1,113 +1,113 @@
-// 存放格言
-const mottos = [
- {
- "text": "同是天涯沦落人,相逢何必曾相识。",
- "author": "白居易",
- "source": "《琵琶行》"
- },
- {
- "text": "海内存知己,天涯若比邻。",
- "author": "王勃",
- "source": "《送杜少府之任蜀州》"
- },
- {
- "text": "银烛秋光冷画屏,轻罗小扇扑流萤。",
- "author": "陆游",
- "source": "《秋夕》"
- },
- {
- "text": "明月几时有,把酒问青天。",
- "author": "苏轼",
- "source": "《水调歌头》"
- },
- {
- "text": "人生自古谁无死,留取丹心照汗青。",
- "author": "文天祥",
- "source": "《过零丁洋》"
- },
- {
- "text": "山重水复疑无路,柳暗花明又一村。",
- "author": "陆游",
- "source": "《游山西村》"
- },
- {
- "text": "逸一时,误一世,逸久逸久罢已龄",
- "author": "田所浩二",
- "source": "《仲夏夜之淫梦》"
- },
- {
- "text": "你知道吗,轻雪只能在Python3.10以上的版本中使用。",
- "author": "SnowyKami",
- "source": "轻雪文档"
- },
- {
- "text": "你知道吗,轻雪可以通过自定义资源包来扩展主题和语言",
- "author": "SnowyKami",
- "source": "轻雪文档"
- },
- {
- "text": "你知道吗,轻雪交流群的群号是 775840726",
- "author": "SnowyKami",
- "source": "轻雪文档"
- },
- {
- "text": "你知道吗,轻雪运行过程中会启动一个node.js运行环境",
- "author": "SnowyKami",
- "source": "轻雪文档"
- },
- {
- "text": "你知道吗,轻雪的主题是基于HTML5开发的",
- "author": "SnowyKami",
- "source": "轻雪文档"
- },
- {
- "text": "路漫漫其修远兮,吾将上下而求索。",
- "author": "屈原",
- "source": "《离骚》"
- },
- {
- "text": "千里之行,始于足下。",
- "author": "老子",
- "source": "《道德经》"
- },
- {
- "text": "读书破万卷,下笔如有神。",
- "author": "杜甫",
- "source": "《奉赠韦左丞丈二十韵》"
- },
- {
- "text": "不登高山,不知天之高也;不临深溪,不知地之厚也。",
- "author": "荀子",
- "source": "《劝学》"
- },
- {
- "text": "知之者不如好之者,好之者不如乐之者。",
- "author": "孔子",
- "source": "《论语》"
- },
- {
- "text": "天行健,君子以自强不息;地势坤,君子以厚德载物。",
- "source": "《易经》",
- "author": ""
- },
- {
- "text": "书山有路勤为径,学海无涯苦作舟。",
- "author": "韩愈",
- "source": "《读书有感》"
- },
- {
- "text": "前事不忘,后事之师。",
- "author": "孔子",
- "source": "《论语》"
- },
- {
- "text": "志当存高远,若樽俎断绝。",
- "author": "陶渊明",
- "source": "《饮酒》"
- },
- {
- "text": "不以物喜,不以己悲。",
- "author": "傅子",
- "source": "《傅子》"
- }
+// 存放格言
+const mottos = [
+ {
+ "text": "同是天涯沦落人,相逢何必曾相识。",
+ "author": "白居易",
+ "source": "《琵琶行》"
+ },
+ {
+ "text": "海内存知己,天涯若比邻。",
+ "author": "王勃",
+ "source": "《送杜少府之任蜀州》"
+ },
+ {
+ "text": "银烛秋光冷画屏,轻罗小扇扑流萤。",
+ "author": "陆游",
+ "source": "《秋夕》"
+ },
+ {
+ "text": "明月几时有,把酒问青天。",
+ "author": "苏轼",
+ "source": "《水调歌头》"
+ },
+ {
+ "text": "人生自古谁无死,留取丹心照汗青。",
+ "author": "文天祥",
+ "source": "《过零丁洋》"
+ },
+ {
+ "text": "山重水复疑无路,柳暗花明又一村。",
+ "author": "陆游",
+ "source": "《游山西村》"
+ },
+ {
+ "text": "逸一时,误一世,逸久逸久罢已龄",
+ "author": "田所浩二",
+ "source": "《仲夏夜之淫梦》"
+ },
+ {
+ "text": "你知道吗,轻雪只能在Python3.10以上的版本中使用。",
+ "author": "SnowyKami",
+ "source": "轻雪文档"
+ },
+ {
+ "text": "你知道吗,轻雪可以通过自定义资源包来扩展主题和语言",
+ "author": "SnowyKami",
+ "source": "轻雪文档"
+ },
+ {
+ "text": "你知道吗,轻雪交流群的群号是 775840726",
+ "author": "SnowyKami",
+ "source": "轻雪文档"
+ },
+ {
+ "text": "你知道吗,轻雪运行过程中会启动一个node.js运行环境",
+ "author": "SnowyKami",
+ "source": "轻雪文档"
+ },
+ {
+ "text": "你知道吗,轻雪的主题是基于HTML5开发的",
+ "author": "SnowyKami",
+ "source": "轻雪文档"
+ },
+ {
+ "text": "路漫漫其修远兮,吾将上下而求索。",
+ "author": "屈原",
+ "source": "《离骚》"
+ },
+ {
+ "text": "千里之行,始于足下。",
+ "author": "老子",
+ "source": "《道德经》"
+ },
+ {
+ "text": "读书破万卷,下笔如有神。",
+ "author": "杜甫",
+ "source": "《奉赠韦左丞丈二十韵》"
+ },
+ {
+ "text": "不登高山,不知天之高也;不临深溪,不知地之厚也。",
+ "author": "荀子",
+ "source": "《劝学》"
+ },
+ {
+ "text": "知之者不如好之者,好之者不如乐之者。",
+ "author": "孔子",
+ "source": "《论语》"
+ },
+ {
+ "text": "天行健,君子以自强不息;地势坤,君子以厚德载物。",
+ "source": "《易经》",
+ "author": ""
+ },
+ {
+ "text": "书山有路勤为径,学海无涯苦作舟。",
+ "author": "韩愈",
+ "source": "《读书有感》"
+ },
+ {
+ "text": "前事不忘,后事之师。",
+ "author": "孔子",
+ "source": "《论语》"
+ },
+ {
+ "text": "志当存高远,若樽俎断绝。",
+ "author": "陶渊明",
+ "source": "《饮酒》"
+ },
+ {
+ "text": "不以物喜,不以己悲。",
+ "author": "傅子",
+ "source": "《傅子》"
+ }
]
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/js/status.js b/src/resources/vanilla_resource/templates/js/status.js
similarity index 97%
rename from liteyuki/resources/vanilla_resource/templates/js/status.js
rename to src/resources/vanilla_resource/templates/js/status.js
index 11a3f6a5..4a623571 100644
--- a/liteyuki/resources/vanilla_resource/templates/js/status.js
+++ b/src/resources/vanilla_resource/templates/js/status.js
@@ -1,296 +1,296 @@
-const data = JSON.parse(document.getElementById('data').innerText);
-const bot_data = data['bot']; // 机器人数据
-const hardwareData = data['hardware']; // 硬件数据
-const liteyukiData = data['liteyuki']; // LiteYuki数据
-const localData = data['localization']; // 本地化语言数据
-
-/**
- * 创建CPU/内存/交换饼图
- * @param title
- * @param {Array<{name: string, value: number}>} data 数据
- */
-function createPieChartOption(title, data) {
- // data为各项占比列表
- return {
- animation: false,
- title: {
- text: title,
- left: 'center',
- top: 'center',
- textStyle: {
- color: '#fff',
- fontSize: 30,
- lineHeight: 36
- }
- },
- tooltip: {
- show: true,
- trigger: 'item',
- backgroundColor: '#fff',
- },
- color: data.length === 3 ? ['#00a6ff', '#a2d8f4', "#ffffff44"] : ['#a2d8f4', '#ffffff44'],
- series: [
- {
- name: 'info',
- type: 'pie',
- radius: ['80%', '100%'],
- center: ['50%', '50%'],
- itemStyle: {
- normal: {
- label: {
- show: false
- },
- labelLine: {
- show: false
- }
- },
- emphasis: {
- label: {
- show: true,
- textStyle: {
- fontSize: '50',
- fontWeight: 'bold'
- }
- }
- }
- },
- data: data
- }
- ]
- }
-}
-
-
-function convertSize(size, precision = 2, addUnit = true, suffix = " XiB") {
- let isNegative = size < 0;
- size = Math.abs(size);
- let units = ["", "K", "M", "G", "T", "P", "E", "Z"];
- let unit = "";
-
- for (let i = 0; i < units.length; i++) {
- if (size < 1024) {
- unit = units[i];
- break;
- }
- size /= 1024;
- }
-
- if (isNegative) {
- size = -size;
- }
-
- if (addUnit) {
- return size.toFixed(precision) + suffix.replace('X', unit);
- } else {
- return size;
- }
-}
-
-/**
- * 创建磁盘用量柱状图
- * @param title
- * @param percent 数据
- */
-function createBarChart(title, percent) {
- // percent为百分比,最大值为100
- let diskDiv = document.createElement('div')
- diskDiv.setAttribute('class', 'disk-info')
- diskDiv.style.marginBottom = '20px'
- diskDiv.innerHTML = `
- ${title}
-
- `
-
- return diskDiv
-}
-
-function secondsToTextTime(seconds) {
- let days = Math.floor(seconds / 86400)
- let hours = Math.floor((seconds % 86400) / 3600)
- let minutes = Math.floor((seconds % 3600) / 60)
- let seconds_ = Math.floor(seconds % 60)
- return `${days}${localData['days']} ${hours}${localData['hours']} ${minutes}${localData['minutes']} ${seconds_}${localData['seconds']}`
-}
-
-// 主函数
-function main() {
- // 添加机器人信息
- bot_data['bots'].forEach(
- (bot) => {
- let botInfoDiv = document.importNode(document.getElementById('bot-template').content, true) // 复制模板
-
-
- // 设置机器人信息
- botInfoDiv.className = 'info-box bot-info'
-
- botInfoDiv.querySelector('.bot-icon-img').setAttribute('src', bot['icon'])
- botInfoDiv.querySelector('.bot-name').innerText = bot['name']
- let tagArray = [
- bot['protocol_name'],
- bot['app_name'],
- `${localData['groups']} ${bot['groups']}`,
- `${localData['friends']} ${bot['friends']}`,
- `${localData['message_sent']} ${bot['message_sent']}`,
- `${localData['message_received']} ${bot['message_received']}`,
- ]
- // 添加一些标签
- tagArray.forEach(
- (tag, index) => {
- let tagSpan = document.createElement('span')
- tagSpan.className = 'bot-tag'
- tagSpan.innerText = tag
- // 给最后一个标签不添加后缀
- tagSpan.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
- botInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
- }
- )
- document.body.insertBefore(botInfoDiv, document.getElementById('hardware-info')) // 插入对象
-
- }
- )
-
- // 添加轻雪信息
- let liteyukiInfoDiv = document.importNode(document.getElementById('bot-template').content, true) // 复制模板
- liteyukiInfoDiv.className = 'info-box bot-info'
- liteyukiInfoDiv.querySelector('.bot-icon-img').setAttribute('src', './img/liteyuki.png')
- liteyukiInfoDiv.querySelector('.bot-name').innerText = liteyukiData['name']
-
- let tagArray = [
- `Liteyuki ${liteyukiData['version']}`,
- `Nonebot ${liteyukiData['nonebot']}`,
- liteyukiData['python'],
- liteyukiData['system'],
- `${localData['plugins']} ${liteyukiData['plugins']}`,
- `${localData['resources']} ${liteyukiData['resources']}`,
- `${localData['bots']} ${liteyukiData['bots']}`,
- `${localData['runtime']} ${secondsToTextTime(liteyukiData['runtime'])}`,
- ]
- tagArray.forEach(
- (tag, index) => {
- let tagSpan = document.createElement('span')
- tagSpan.className = 'bot-tag'
- tagSpan.innerText = tag
- // 给最后一个标签不添加后缀
- tagSpan.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
- liteyukiInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
- }
- )
- document.body.insertBefore(liteyukiInfoDiv, document.getElementById('hardware-info')) // 插入对象
-
- // 添加硬件信息
- const cpuData = hardwareData['cpu']
- const memData = hardwareData['memory']
- const swapData = hardwareData['swap']
-
- const cpuTagArray = [
- cpuData['name'],
- `${cpuData['cores']}${localData['cores']} ${cpuData['threads']}${localData['threads']}`,
- `${(cpuData['freq'] / 1000).toFixed(2)}GHz`
- ]
-
- const memTagArray = [
- `${localData['process']} ${convertSize(memData['usedProcess'])}`,
- `${localData['used']} ${convertSize(memData['used'])}`,
- `${localData['free']} ${convertSize(memData['free'])}`,
- `${localData['total']} ${convertSize(memData['total'])}`
- ]
-
- const swapTagArray = [
- `${localData['used']} ${convertSize(swapData['used'])}`,
- `${localData['free']} ${convertSize(swapData['free'])}`,
- `${localData['total']} ${convertSize(swapData['total'])}`
- ]
- let cpuDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
- let memDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
- let swapDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
-
- cpuDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'cpu-info')
- memDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'mem-info')
- swapDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'swap-info')
- cpuDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'cpu-chart')
- memDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'mem-chart')
- swapDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'swap-chart')
-
- let devices = {
- 'cpu': cpuDeviceInfoDiv,
- 'mem': memDeviceInfoDiv,
- 'swap': swapDeviceInfoDiv
- }
- // 遍历添加标签
- for (let device in devices) {
- let tagArray = []
- switch (device) {
- case 'cpu':
- tagArray = cpuTagArray
- break
- case 'mem':
- tagArray = memTagArray
- break
- case 'swap':
- tagArray = swapTagArray
- break
- }
- tagArray.forEach(
- (tag, index) => {
- let tagDiv = document.createElement('div')
- tagDiv.className = 'device-tag'
- tagDiv.innerText = tag
- // 给最后一个标签不添加后缀
- tagDiv.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
- devices[device].querySelector('.device-tags').appendChild(tagDiv)
- }
- )
- }
-
-
- // 插入
- document.getElementById('hardware-info').appendChild(cpuDeviceInfoDiv)
- document.getElementById('hardware-info').appendChild(memDeviceInfoDiv)
- document.getElementById('hardware-info').appendChild(swapDeviceInfoDiv)
-
- let cpuChart = echarts.init(document.getElementById('cpu-chart'))
- let memChart = echarts.init(document.getElementById('mem-chart'))
- let swapChart = echarts.init(document.getElementById('swap-chart'))
-
-
- cpuChart.setOption(createPieChartOption(`${localData['cpu']}\n${cpuData['percent'].toFixed(1)}%`, [
- {name: 'used', value: cpuData['percent']},
- {name: 'free', value: 100 - cpuData['percent']}
- ]))
-
- memChart.setOption(createPieChartOption(`${localData['memory']}\n${memData['percent'].toFixed(1)}%`, [
- {name: 'process', value: memData['usedProcess']},
- {name: 'used', value: memData['used'] - memData['usedProcess']},
- {name: 'free', value: memData['free']}
- ]))
-
-
- swapChart.setOption(createPieChartOption(`${localData['swap']}\n${swapData['percent'].toFixed(1)}%`, [
- {name: 'used', value: swapData['used']},
- {name: 'free', value: swapData['free']}
- ]))
-
-
- // 磁盘信息
- const diskData = hardwareData['disk']
- diskData.forEach(
- (disk) => {
- let diskTitle = `${disk['name']} ${localData['free']} ${convertSize(disk['free'])} ${localData['total']} ${convertSize(disk['total'])}`
- // 最后一个把margin-bottom去掉
- let diskDiv = createBarChart(diskTitle, disk['percent'])
- if (disk === diskData[diskData.length - 1]) {
- diskDiv.style.marginBottom = '0'
- }
- document.getElementById('disk-info').appendChild(createBarChart(diskTitle, disk['percent']))
- })
- // 随机一言
- let motto = mottos[Math.floor(Math.random() * mottos.length)]
- let mottoText = motto['text']
- let mottoFrom = `${motto['author']} ${motto['source']}`
- document.getElementById('motto-text').innerText = mottoText
- document.getElementById('motto-from').innerText = mottoFrom
-
-
-}
-
+const data = JSON.parse(document.getElementById('data').innerText);
+const bot_data = data['bot']; // 机器人数据
+const hardwareData = data['hardware']; // 硬件数据
+const liteyukiData = data['liteyuki']; // LiteYuki数据
+const localData = data['localization']; // 本地化语言数据
+
+/**
+ * 创建CPU/内存/交换饼图
+ * @param title
+ * @param {Array<{name: string, value: number}>} data 数据
+ */
+function createPieChartOption(title, data) {
+ // data为各项占比列表
+ return {
+ animation: false,
+ title: {
+ text: title,
+ left: 'center',
+ top: 'center',
+ textStyle: {
+ color: '#fff',
+ fontSize: 30,
+ lineHeight: 36
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: 'item',
+ backgroundColor: '#fff',
+ },
+ color: data.length === 3 ? ['#00a6ff', '#a2d8f4', "#ffffff44"] : ['#a2d8f4', '#ffffff44'],
+ series: [
+ {
+ name: 'info',
+ type: 'pie',
+ radius: ['80%', '100%'],
+ center: ['50%', '50%'],
+ itemStyle: {
+ normal: {
+ label: {
+ show: false
+ },
+ labelLine: {
+ show: false
+ }
+ },
+ emphasis: {
+ label: {
+ show: true,
+ textStyle: {
+ fontSize: '50',
+ fontWeight: 'bold'
+ }
+ }
+ }
+ },
+ data: data
+ }
+ ]
+ }
+}
+
+
+function convertSize(size, precision = 2, addUnit = true, suffix = " XiB") {
+ let isNegative = size < 0;
+ size = Math.abs(size);
+ let units = ["", "K", "M", "G", "T", "P", "E", "Z"];
+ let unit = "";
+
+ for (let i = 0; i < units.length; i++) {
+ if (size < 1024) {
+ unit = units[i];
+ break;
+ }
+ size /= 1024;
+ }
+
+ if (isNegative) {
+ size = -size;
+ }
+
+ if (addUnit) {
+ return size.toFixed(precision) + suffix.replace('X', unit);
+ } else {
+ return size;
+ }
+}
+
+/**
+ * 创建磁盘用量柱状图
+ * @param title
+ * @param percent 数据
+ */
+function createBarChart(title, percent) {
+ // percent为百分比,最大值为100
+ let diskDiv = document.createElement('div')
+ diskDiv.setAttribute('class', 'disk-info')
+ diskDiv.style.marginBottom = '20px'
+ diskDiv.innerHTML = `
+ ${title}
+
+ `
+
+ return diskDiv
+}
+
+function secondsToTextTime(seconds) {
+ let days = Math.floor(seconds / 86400)
+ let hours = Math.floor((seconds % 86400) / 3600)
+ let minutes = Math.floor((seconds % 3600) / 60)
+ let seconds_ = Math.floor(seconds % 60)
+ return `${days}${localData['days']} ${hours}${localData['hours']} ${minutes}${localData['minutes']} ${seconds_}${localData['seconds']}`
+}
+
+// 主函数
+function main() {
+ // 添加机器人信息
+ bot_data['bots'].forEach(
+ (bot) => {
+ let botInfoDiv = document.importNode(document.getElementById('bot-template').content, true) // 复制模板
+
+
+ // 设置机器人信息
+ botInfoDiv.className = 'info-box bot-info'
+
+ botInfoDiv.querySelector('.bot-icon-img').setAttribute('src', bot['icon'])
+ botInfoDiv.querySelector('.bot-name').innerText = bot['name']
+ let tagArray = [
+ bot['protocol_name'],
+ bot['app_name'],
+ `${localData['groups']} ${bot['groups']}`,
+ `${localData['friends']} ${bot['friends']}`,
+ `${localData['message_sent']} ${bot['message_sent']}`,
+ `${localData['message_received']} ${bot['message_received']}`,
+ ]
+ // 添加一些标签
+ tagArray.forEach(
+ (tag, index) => {
+ let tagSpan = document.createElement('span')
+ tagSpan.className = 'bot-tag'
+ tagSpan.innerText = tag
+ // 给最后一个标签不添加后缀
+ tagSpan.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
+ botInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
+ }
+ )
+ document.body.insertBefore(botInfoDiv, document.getElementById('hardware-info')) // 插入对象
+
+ }
+ )
+
+ // 添加轻雪信息
+ let liteyukiInfoDiv = document.importNode(document.getElementById('bot-template').content, true) // 复制模板
+ liteyukiInfoDiv.className = 'info-box bot-info'
+ liteyukiInfoDiv.querySelector('.bot-icon-img').setAttribute('src', './img/liteyuki.png')
+ liteyukiInfoDiv.querySelector('.bot-name').innerText = liteyukiData['name']
+
+ let tagArray = [
+ `Liteyuki ${liteyukiData['version']}`,
+ `Nonebot ${liteyukiData['nonebot']}`,
+ liteyukiData['python'],
+ liteyukiData['system'],
+ `${localData['plugins']} ${liteyukiData['plugins']}`,
+ `${localData['resources']} ${liteyukiData['resources']}`,
+ `${localData['bots']} ${liteyukiData['bots']}`,
+ `${localData['runtime']} ${secondsToTextTime(liteyukiData['runtime'])}`,
+ ]
+ tagArray.forEach(
+ (tag, index) => {
+ let tagSpan = document.createElement('span')
+ tagSpan.className = 'bot-tag'
+ tagSpan.innerText = tag
+ // 给最后一个标签不添加后缀
+ tagSpan.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
+ liteyukiInfoDiv.querySelector('.bot-tags').appendChild(tagSpan)
+ }
+ )
+ document.body.insertBefore(liteyukiInfoDiv, document.getElementById('hardware-info')) // 插入对象
+
+ // 添加硬件信息
+ const cpuData = hardwareData['cpu']
+ const memData = hardwareData['memory']
+ const swapData = hardwareData['swap']
+
+ const cpuTagArray = [
+ cpuData['name'],
+ `${cpuData['cores']}${localData['cores']} ${cpuData['threads']}${localData['threads']}`,
+ `${(cpuData['freq'] / 1000).toFixed(2)}GHz`
+ ]
+
+ const memTagArray = [
+ `${localData['process']} ${convertSize(memData['usedProcess'])}`,
+ `${localData['used']} ${convertSize(memData['used'])}`,
+ `${localData['free']} ${convertSize(memData['free'])}`,
+ `${localData['total']} ${convertSize(memData['total'])}`
+ ]
+
+ const swapTagArray = [
+ `${localData['used']} ${convertSize(swapData['used'])}`,
+ `${localData['free']} ${convertSize(swapData['free'])}`,
+ `${localData['total']} ${convertSize(swapData['total'])}`
+ ]
+ let cpuDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
+ let memDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
+ let swapDeviceInfoDiv = document.importNode(document.getElementById('device-info').content, true)
+
+ cpuDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'cpu-info')
+ memDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'mem-info')
+ swapDeviceInfoDiv.querySelector('.device-info').setAttribute('id', 'swap-info')
+ cpuDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'cpu-chart')
+ memDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'mem-chart')
+ swapDeviceInfoDiv.querySelector('.device-chart').setAttribute('id', 'swap-chart')
+
+ let devices = {
+ 'cpu': cpuDeviceInfoDiv,
+ 'mem': memDeviceInfoDiv,
+ 'swap': swapDeviceInfoDiv
+ }
+ // 遍历添加标签
+ for (let device in devices) {
+ let tagArray = []
+ switch (device) {
+ case 'cpu':
+ tagArray = cpuTagArray
+ break
+ case 'mem':
+ tagArray = memTagArray
+ break
+ case 'swap':
+ tagArray = swapTagArray
+ break
+ }
+ tagArray.forEach(
+ (tag, index) => {
+ let tagDiv = document.createElement('div')
+ tagDiv.className = 'device-tag'
+ tagDiv.innerText = tag
+ // 给最后一个标签不添加后缀
+ tagDiv.setAttribute('suffix', index === tagArray.length - 1 ? '0' : '1')
+ devices[device].querySelector('.device-tags').appendChild(tagDiv)
+ }
+ )
+ }
+
+
+ // 插入
+ document.getElementById('hardware-info').appendChild(cpuDeviceInfoDiv)
+ document.getElementById('hardware-info').appendChild(memDeviceInfoDiv)
+ document.getElementById('hardware-info').appendChild(swapDeviceInfoDiv)
+
+ let cpuChart = echarts.init(document.getElementById('cpu-chart'))
+ let memChart = echarts.init(document.getElementById('mem-chart'))
+ let swapChart = echarts.init(document.getElementById('swap-chart'))
+
+
+ cpuChart.setOption(createPieChartOption(`${localData['cpu']}\n${cpuData['percent'].toFixed(1)}%`, [
+ {name: 'used', value: cpuData['percent']},
+ {name: 'free', value: 100 - cpuData['percent']}
+ ]))
+
+ memChart.setOption(createPieChartOption(`${localData['memory']}\n${memData['percent'].toFixed(1)}%`, [
+ {name: 'process', value: memData['usedProcess']},
+ {name: 'used', value: memData['used'] - memData['usedProcess']},
+ {name: 'free', value: memData['free']}
+ ]))
+
+
+ swapChart.setOption(createPieChartOption(`${localData['swap']}\n${swapData['percent'].toFixed(1)}%`, [
+ {name: 'used', value: swapData['used']},
+ {name: 'free', value: swapData['free']}
+ ]))
+
+
+ // 磁盘信息
+ const diskData = hardwareData['disk']
+ diskData.forEach(
+ (disk) => {
+ let diskTitle = `${disk['name']} ${localData['free']} ${convertSize(disk['free'])} ${localData['total']} ${convertSize(disk['total'])}`
+ // 最后一个把margin-bottom去掉
+ let diskDiv = createBarChart(diskTitle, disk['percent'])
+ if (disk === diskData[diskData.length - 1]) {
+ diskDiv.style.marginBottom = '0'
+ }
+ document.getElementById('disk-info').appendChild(createBarChart(diskTitle, disk['percent']))
+ })
+ // 随机一言
+ let motto = mottos[Math.floor(Math.random() * mottos.length)]
+ let mottoText = motto['text']
+ let mottoFrom = `${motto['author']} ${motto['source']}`
+ document.getElementById('motto-text').innerText = mottoText
+ document.getElementById('motto-from').innerText = mottoFrom
+
+
+}
+
main()
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/js/style.js b/src/resources/vanilla_resource/templates/js/style.js
similarity index 97%
rename from liteyuki/resources/vanilla_resource/templates/js/style.js
rename to src/resources/vanilla_resource/templates/js/style.js
index 8dde8d94..c219d3fc 100644
--- a/liteyuki/resources/vanilla_resource/templates/js/style.js
+++ b/src/resources/vanilla_resource/templates/js/style.js
@@ -1,257 +1,257 @@
-{
- // 环形图
-
- let cpuInfo = echarts.init(document.getElementById('cpu-chart'));
- let memInfo = echarts.init(document.getElementById('mem-chart'));
- let swapInfo = echarts.init(document.getElementById('swap-chart'));
-
- let data = JSON.parse(document.getElementById('data').innerText);
-
- let cpuData = data.cpu;
- let memData = data.mem;
- let swapData = data.swap;
- let diskData = data.disk;
- let sub_tag_data = {
- cpu: data.cpuTags,
- mem: data.memTags,
- swap: data.swapTags
- }
- for (let key in sub_tag_data) {
- let infoDiv = document.getElementById(key + '-info');
- sub_tag_data[key].forEach(tag => {
- let tagSpan = document.createElement('div');
- tagSpan.innerText = tag;
- tagSpan.className = 'chart-label';
- infoDiv.appendChild(tagSpan);
- });
- }
- cpuInfo.setOption(getPieOption(data.localization.cpu, cpuData));
- memInfo.setOption(getPieOption(data.localization.mem, memData));
- swapInfo.setOption(getPieOption(data.localization.swap, swapData));
-
-
- // 在disks-info中插入每个disk的div,用横向柱状图表示用量,每一行div显示一个disk,不加info-box
- diskData.forEach(disk => {
- let diskDiv = document.createElement('div');
- document.getElementById('disks-info').appendChild(diskDiv);
- let diskChart = document.createElement('div');
- diskChart.style.width = '100%';
- diskChart.style.height = '100px';
- diskDiv.appendChild(diskChart);
- let diskInfo = echarts.init(diskChart);
- // let diskTitle = disk.name + ' {{ FREE }} ' + disk.free + ' {{ TOTAL }} ' + disk.total;
- let diskTitle = `${disk.name} ${data.localization.free} ${disk.free} ${data.localization.total} ${disk.total}`;
- diskInfo.setOption(getBarOption(diskTitle, disk.percent));
- });
-
- let botData = data.bot;
- // 清空bot-info
- let botInfos = document.getElementsByClassName('bot-info');
- while (botInfos.length > 0) {
- botInfos[0].remove();
- }
- botData.forEach(bot => {
- // 在hardware-info前面插入一个div
- let botDiv = document.createElement('div');
- botDiv.className = 'info-box bot-info';
- // 在body内的hardware-info前面插入botDiv
- document.body.insertBefore(botDiv, document.getElementById('hardware-info'));
-
- let botIconBlock = document.createElement('div');
- let botIcon = document.createElement('img');
- botIcon.src = bot.icon;
- botIcon.className = 'bot-icon';
- botIconBlock.appendChild(botIcon);
- botDiv.appendChild(botIconBlock);
-
- let botDetail = document.createElement('div');
- let botName = document.createElement('div');
- botName.className = 'bot-name';
- botName.innerText = bot.name;
- if (bot.self) {
- // 添加颜色
- botName.style.color = '#d0e9ff';
- }
- botDetail.appendChild(botName);
-
- let botTags = document.createElement('div');
- botTags.className = 'bot-tag';
- botDetail.appendChild(botTags)
-
- bot.tags.forEach((tag, index) => {
- if (!tag) {
- return;
- }
- let tagSpan = document.createElement('span');
-
- tagSpan.innerText = tag;
- tagSpan.className = 'tag';
- if (bot.self) {
- // 添加颜色
- tagSpan.style.color = '#a2d8f4';
- }
- botTags.appendChild(tagSpan);
- if (index === bot.tags.length - 1) {
- tagSpan.setAttribute("suffix", "0")
- } else {
- tagSpan.setAttribute("suffix", "1")
- }
- });
-
- botDiv.appendChild(botDetail);
- }
- )
-
- // 从/js/motto.js中读取mottos{},随机选择一句
- let motto = mottos[Math.floor(Math.random() * mottos.length)];
- // 正文在中间,作者和来源格式为--作者 来源,在右下方
- let mottoDiv = document.getElementById('motto-info');
- let mottoText = document.createElement('div');
- mottoText.className = 'motto-text';
- mottoText.innerText = motto.text;
- mottoDiv.appendChild(mottoText);
- let mottoAuthor = document.createElement('div');
- mottoAuthor.className = 'motto-author';
- // motto.author和motto.source可能不存在为空,所以要判断
- if (!motto.author) {
- motto.author = '';
- }
- if (!motto.source) {
- motto.source = '';
- }
- mottoAuthor.innerText = `\n--${motto.author} ${motto.source}`;
- mottoAuthor.style.textAlign = 'right';
- mottoDiv.appendChild(mottoAuthor);
-
- function getPieUsage(data) {
- let total = 0
- let used = 0
- data.forEach(item => {
- total += item.value
- if (item.name === 'FREE') {
- used += item.value
- }
- })
- return (1 - used / total) * 100
- }
-
-
- function getPieOption(title, data) {
- return {
- animation: false,
- title: {
- text: title + '\n' + getPieUsage(data).toFixed(1) + '%',
- left: 'center',
- top: 'center',
- textStyle: {
- //文字颜色
-
- lineHeight: 36,
- color: '#fff',
- fontSize: 30
- }
- },
- tooltip: {
- show: true,
- trigger: "item",
- backgroundColor: "#ffffff00",
- // {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
- },
- color: ['#a2d8f4', "#ffffff44", '#00a6ff'],
- series: [
- {
- name: 'info',
- type: 'pie',
- radius: ['80%', '100%'],
- center: ['50%', '50%'],
- itemStyle: {
- normal: {
- label: {
- show: false
- },
- labelLine: {
- show: false
- }
- },
- emphasis: {
- label: {
- show: true,
- textStyle: {
- fontSize: '50',
- fontWeight: 'bold'
- }
- }
- }
- },
- data: data
- }
- ]
- };
- }
-
- function getBarOption(title, percent) {
- let fillet = 0
- if (percent < 5) {
- fillet = 50
- }
- // data为百分比,最大值为100
- return {
- background: '#d0e9ff',
- title: {
- text: title,
- left: '5%',
- top: 'center',
- textStyle: {
- color: '#fff',
- fontSize: 30
- }
- },
- tooltip: {
- show: true,
- trigger: "item",
- backgroundColor: "#ffffff",
- },
- grid: {
- left: '0',
- right: '0',
- top: '10%',
- bottom: '10%'
- },
- xAxis: {
- type: 'value',
- show: false
- },
- yAxis: {
- type: 'category',
- data: [''],
- show: false
- },
- series: [
- {
- name: 'Used',
- type: 'bar',
- stack: 'total',
- data: [percent],
- itemStyle: {
- normal: {
- color: '#a2d8f4',
- barBorderRadius: [50, 0, 0, 50]
- }
- },
- },
- {
- name: 'Free',
- type: 'bar',
- stack: 'total',
- data: [100 - percent],
- itemStyle: {
- normal: {
- color: '#d0e9ff',
- barBorderRadius: [fillet, 50, 50, fillet]
- }
- },
- }
- ]
- };
- }
+{
+ // 环形图
+
+ let cpuInfo = echarts.init(document.getElementById('cpu-chart'));
+ let memInfo = echarts.init(document.getElementById('mem-chart'));
+ let swapInfo = echarts.init(document.getElementById('swap-chart'));
+
+ let data = JSON.parse(document.getElementById('data').innerText);
+
+ let cpuData = data.cpu;
+ let memData = data.mem;
+ let swapData = data.swap;
+ let diskData = data.disk;
+ let sub_tag_data = {
+ cpu: data.cpuTags,
+ mem: data.memTags,
+ swap: data.swapTags
+ }
+ for (let key in sub_tag_data) {
+ let infoDiv = document.getElementById(key + '-info');
+ sub_tag_data[key].forEach(tag => {
+ let tagSpan = document.createElement('div');
+ tagSpan.innerText = tag;
+ tagSpan.className = 'chart-label';
+ infoDiv.appendChild(tagSpan);
+ });
+ }
+ cpuInfo.setOption(getPieOption(data.localization.cpu, cpuData));
+ memInfo.setOption(getPieOption(data.localization.mem, memData));
+ swapInfo.setOption(getPieOption(data.localization.swap, swapData));
+
+
+ // 在disks-info中插入每个disk的div,用横向柱状图表示用量,每一行div显示一个disk,不加info-box
+ diskData.forEach(disk => {
+ let diskDiv = document.createElement('div');
+ document.getElementById('disks-info').appendChild(diskDiv);
+ let diskChart = document.createElement('div');
+ diskChart.style.width = '100%';
+ diskChart.style.height = '100px';
+ diskDiv.appendChild(diskChart);
+ let diskInfo = echarts.init(diskChart);
+ // let diskTitle = disk.name + ' {{ FREE }} ' + disk.free + ' {{ TOTAL }} ' + disk.total;
+ let diskTitle = `${disk.name} ${data.localization.free} ${disk.free} ${data.localization.total} ${disk.total}`;
+ diskInfo.setOption(getBarOption(diskTitle, disk.percent));
+ });
+
+ let botData = data.bot;
+ // 清空bot-info
+ let botInfos = document.getElementsByClassName('bot-info');
+ while (botInfos.length > 0) {
+ botInfos[0].remove();
+ }
+ botData.forEach(bot => {
+ // 在hardware-info前面插入一个div
+ let botDiv = document.createElement('div');
+ botDiv.className = 'info-box bot-info';
+ // 在body内的hardware-info前面插入botDiv
+ document.body.insertBefore(botDiv, document.getElementById('hardware-info'));
+
+ let botIconBlock = document.createElement('div');
+ let botIcon = document.createElement('img');
+ botIcon.src = bot.icon;
+ botIcon.className = 'bot-icon';
+ botIconBlock.appendChild(botIcon);
+ botDiv.appendChild(botIconBlock);
+
+ let botDetail = document.createElement('div');
+ let botName = document.createElement('div');
+ botName.className = 'bot-name';
+ botName.innerText = bot.name;
+ if (bot.self) {
+ // 添加颜色
+ botName.style.color = '#d0e9ff';
+ }
+ botDetail.appendChild(botName);
+
+ let botTags = document.createElement('div');
+ botTags.className = 'bot-tag';
+ botDetail.appendChild(botTags)
+
+ bot.tags.forEach((tag, index) => {
+ if (!tag) {
+ return;
+ }
+ let tagSpan = document.createElement('span');
+
+ tagSpan.innerText = tag;
+ tagSpan.className = 'tag';
+ if (bot.self) {
+ // 添加颜色
+ tagSpan.style.color = '#a2d8f4';
+ }
+ botTags.appendChild(tagSpan);
+ if (index === bot.tags.length - 1) {
+ tagSpan.setAttribute("suffix", "0")
+ } else {
+ tagSpan.setAttribute("suffix", "1")
+ }
+ });
+
+ botDiv.appendChild(botDetail);
+ }
+ )
+
+ // 从/js/motto.js中读取mottos{},随机选择一句
+ let motto = mottos[Math.floor(Math.random() * mottos.length)];
+ // 正文在中间,作者和来源格式为--作者 来源,在右下方
+ let mottoDiv = document.getElementById('motto-info');
+ let mottoText = document.createElement('div');
+ mottoText.className = 'motto-text';
+ mottoText.innerText = motto.text;
+ mottoDiv.appendChild(mottoText);
+ let mottoAuthor = document.createElement('div');
+ mottoAuthor.className = 'motto-author';
+ // motto.author和motto.source可能不存在为空,所以要判断
+ if (!motto.author) {
+ motto.author = '';
+ }
+ if (!motto.source) {
+ motto.source = '';
+ }
+ mottoAuthor.innerText = `\n--${motto.author} ${motto.source}`;
+ mottoAuthor.style.textAlign = 'right';
+ mottoDiv.appendChild(mottoAuthor);
+
+ function getPieUsage(data) {
+ let total = 0
+ let used = 0
+ data.forEach(item => {
+ total += item.value
+ if (item.name === 'FREE') {
+ used += item.value
+ }
+ })
+ return (1 - used / total) * 100
+ }
+
+
+ function getPieOption(title, data) {
+ return {
+ animation: false,
+ title: {
+ text: title + '\n' + getPieUsage(data).toFixed(1) + '%',
+ left: 'center',
+ top: 'center',
+ textStyle: {
+ //文字颜色
+
+ lineHeight: 36,
+ color: '#fff',
+ fontSize: 30
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: "item",
+ backgroundColor: "#ffffff00",
+ // {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
+ },
+ color: ['#a2d8f4', "#ffffff44", '#00a6ff'],
+ series: [
+ {
+ name: 'info',
+ type: 'pie',
+ radius: ['80%', '100%'],
+ center: ['50%', '50%'],
+ itemStyle: {
+ normal: {
+ label: {
+ show: false
+ },
+ labelLine: {
+ show: false
+ }
+ },
+ emphasis: {
+ label: {
+ show: true,
+ textStyle: {
+ fontSize: '50',
+ fontWeight: 'bold'
+ }
+ }
+ }
+ },
+ data: data
+ }
+ ]
+ };
+ }
+
+ function getBarOption(title, percent) {
+ let fillet = 0
+ if (percent < 5) {
+ fillet = 50
+ }
+ // data为百分比,最大值为100
+ return {
+ background: '#d0e9ff',
+ title: {
+ text: title,
+ left: '5%',
+ top: 'center',
+ textStyle: {
+ color: '#fff',
+ fontSize: 30
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: "item",
+ backgroundColor: "#ffffff",
+ },
+ grid: {
+ left: '0',
+ right: '0',
+ top: '10%',
+ bottom: '10%'
+ },
+ xAxis: {
+ type: 'value',
+ show: false
+ },
+ yAxis: {
+ type: 'category',
+ data: [''],
+ show: false
+ },
+ series: [
+ {
+ name: 'Used',
+ type: 'bar',
+ stack: 'total',
+ data: [percent],
+ itemStyle: {
+ normal: {
+ color: '#a2d8f4',
+ barBorderRadius: [50, 0, 0, 50]
+ }
+ },
+ },
+ {
+ name: 'Free',
+ type: 'bar',
+ stack: 'total',
+ data: [100 - percent],
+ itemStyle: {
+ normal: {
+ color: '#d0e9ff',
+ barBorderRadius: [fillet, 50, 50, fillet]
+ }
+ },
+ }
+ ]
+ };
+ }
}
\ No newline at end of file
diff --git a/src/resources/vanilla_resource/templates/static/motto.txt b/src/resources/vanilla_resource/templates/static/motto.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/resources/vanilla_resource/templates/stats.html b/src/resources/vanilla_resource/templates/stats.html
similarity index 96%
rename from liteyuki/resources/vanilla_resource/templates/stats.html
rename to src/resources/vanilla_resource/templates/stats.html
index 4fcc26d8..00dc0e9e 100644
--- a/liteyuki/resources/vanilla_resource/templates/stats.html
+++ b/src/resources/vanilla_resource/templates/stats.html
@@ -1,40 +1,40 @@
-
-
-
-
-
-
- Liteyuki Stats
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
-
-
+
+
+
+
+
+
+ Liteyuki Stats
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
+
diff --git a/liteyuki/resources/vanilla_resource/templates/status.html b/src/resources/vanilla_resource/templates/status.html
similarity index 96%
rename from liteyuki/resources/vanilla_resource/templates/status.html
rename to src/resources/vanilla_resource/templates/status.html
index bc1903ce..c7a05a8f 100644
--- a/liteyuki/resources/vanilla_resource/templates/status.html
+++ b/src/resources/vanilla_resource/templates/status.html
@@ -1,50 +1,50 @@
-
-
-
-
- Liteyuki Status
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
-
-
-
-
-
+
+
+
+
+ Liteyuki Status
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/liteyuki/resources/vanilla_resource/templates/status_mem.html b/src/resources/vanilla_resource/templates/status_mem.html
similarity index 95%
rename from liteyuki/resources/vanilla_resource/templates/status_mem.html
rename to src/resources/vanilla_resource/templates/status_mem.html
index 0246f8e1..91ad31bb 100644
--- a/liteyuki/resources/vanilla_resource/templates/status_mem.html
+++ b/src/resources/vanilla_resource/templates/status_mem.html
@@ -1,127 +1,127 @@
-
-
-
-
-
-
- Liteyuki Stats
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{{ data | tojson }}
-
-
-
-
+
+
+
+
+
+
+ Liteyuki Stats
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ data | tojson }}
+
+
+
+
diff --git a/liteyuki/resources/vanilla_resource/templates/svg/lylogo-full.svg b/src/resources/vanilla_resource/templates/svg/lylogo-full.svg
similarity index 100%
rename from liteyuki/resources/vanilla_resource/templates/svg/lylogo-full.svg
rename to src/resources/vanilla_resource/templates/svg/lylogo-full.svg
diff --git a/liteyuki/resources/vanilla_resource/unsorted/plugins.json b/src/resources/vanilla_resource/unsorted/plugins.json
similarity index 97%
rename from liteyuki/resources/vanilla_resource/unsorted/plugins.json
rename to src/resources/vanilla_resource/unsorted/plugins.json
index 678ecf95..89528d64 100644
--- a/liteyuki/resources/vanilla_resource/unsorted/plugins.json
+++ b/src/resources/vanilla_resource/unsorted/plugins.json
@@ -1,11133 +1,11133 @@
-[
- {
- "module_name": "nonebot_plugin_status",
- "project_link": "nonebot-plugin-status",
- "name": "服务器状态查看",
- "desc": "通过戳一戳获取服务器状态",
- "author": "yanyongyu",
- "homepage": "https://github.com/nonebot/plugin-status",
- "tags": [
- {
- "label": "server",
- "color": "#aeeaa8"
- }
- ],
- "is_official": true,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.8.1",
- "time": "2024-03-04T06:57:10.250823Z",
- "skip_test": false
- },
- {
- "module_name": "haruka_bot",
- "project_link": "haruka-bot",
- "name": "haruka_bot",
- "desc": "将B站UP主的动态和直播信息推送至QQ",
- "author": "SK-415",
- "homepage": "https://github.com/SK-415/HarukaBot",
- "tags": [
- {
- "label": "bilibili",
- "color": "#e55d80"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qqguild"
- ],
- "valid": true,
- "version": "1.6.0.post5",
- "time": "2023-07-11T09:24:58.972905Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_rauthman",
- "project_link": "nonebot-plugin-rauthman",
- "name": "RAM - 基于规则的授权管理",
- "desc": "为 Matcher 配置一条或多条 Rule 来实现功能的授权管理",
- "author": "Lancercmd",
- "homepage": "https://github.com/Lancercmd/nonebot_plugin_rauthman",
- "tags": [
- {
- "label": "rule",
- "color": "#4ec9b0"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.0.0rc1.post3",
- "time": "2023-07-18T01:25:54.487870Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_docs",
- "project_link": "nonebot-plugin-docs",
- "name": "NoneBot 离线文档",
- "desc": "在本地查看 NoneBot 文档",
- "author": "nonebot",
- "homepage": "https://github.com/nonebot/nonebot2/blob/master/packages/nonebot-plugin-docs",
- "tags": [],
- "is_official": true,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "2.2.1",
- "time": "2024-02-24T04:41:45.707475Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sentry",
- "project_link": "nonebot-plugin-sentry",
- "name": "Sentry日志监控",
- "desc": "使用Sentry监控机器人日志并处理报错",
- "author": "yanyongyu",
- "homepage": "https://github.com/nonebot/plugin-sentry",
- "tags": [
- {
- "label": "log",
- "color": "#6be3ea"
- }
- ],
- "is_official": true,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.1.0",
- "time": "2024-02-14T03:21:49.744244Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_apscheduler",
- "project_link": "nonebot-plugin-apscheduler",
- "name": "定时任务",
- "desc": "APScheduler 定时任务插件",
- "author": "yanyongyu",
- "homepage": "https://github.com/nonebot/plugin-apscheduler",
- "tags": [],
- "is_official": true,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.0",
- "time": "2024-02-12T13:56:49.110411Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_picsearcher",
- "project_link": "nonebot-plugin-picsearcher",
- "author": "synodriver",
- "desc": "从基本上所有你想的出名字的搜图平台找图片",
- "name": "图片搜索",
- "homepage": "https://github.com/synodriver/nonebot_plugin_picsearcher",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-05T07:21:34.473939Z",
- "version": "0.1.10",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_navicat",
- "project_link": "nonebot-plugin-navicat",
- "author": "synodriver",
- "desc": "连接至各种数据库,为其他插件导出连接对象",
- "name": "通用数据库连接",
- "homepage": "https://github.com/synodriver/nonebot_plugin_navicat",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-25T08:55:44.847476Z",
- "version": "0.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_translator",
- "project_link": "nonebot-plugin-translator",
- "name": "多语种翻译插件",
- "desc": "接口来自 腾讯机器翻译 TMT",
- "author": "Lancercmd",
- "homepage": "https://github.com/Lancercmd/nonebot_plugin_translator",
- "tags": [
- {
- "label": "func",
- "color": "#dcdcaa"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.0.0b4.post2",
- "time": "2023-07-18T01:28:04.958803Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mqtt",
- "project_link": "nonebot-plugin-mqtt",
- "name": "MQTT",
- "desc": "Nonebot2 MQTT 插件",
- "author": "synodriver",
- "homepage": "https://github.com/synodriver/nonebot_plugin_mqtt",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.2",
- "time": "2023-09-06T16:06:14.974473Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_songpicker2",
- "project_link": "nonebot-plugin-songpicker2",
- "name": "songpicker2",
- "desc": "点播歌曲,支持候选菜单、热评显示,数据源为网易云",
- "author": "maxesisn",
- "homepage": "https://github.com/maxesisn/nonebot_plugin_songpicker2",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.6",
- "time": "2023-06-27T09:24:09.247555Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_strman",
- "project_link": "nonebot-plugin-strman",
- "author": "echobot-dev",
- "desc": "通过字符串标签在文件中集中管理字符串",
- "name": "字符串管理工具",
- "homepage": "https://github.com/echobot-dev/nonebot-plugin-strman",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-10T17:04:34.269452Z",
- "version": "1.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_bison",
- "project_link": "nonebot-bison",
- "name": "Bison",
- "desc": "通用订阅推送插件",
- "author": "felinae98",
- "homepage": "https://github.com/felinae98/nonebot-bison",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.9.1",
- "time": "2024-03-06T04:41:42.379114Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-ncm",
- "project_link": "nonebot-plugin-ncm",
- "author": "kitUIN",
- "desc": "网易云 无损音乐 点歌/下载",
- "name": "网易云无损音乐下载",
- "homepage": "https://github.com/kitUIN/nonebot-plugin-ncm",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "a:cqhttp",
- "color": "#000000"
- },
- {
- "label": "t:Netease",
- "color": "#ec4141"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-03T07:50:12.633674Z",
- "version": "1.6.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cocdicer",
- "project_link": "nonebot-plugin-cocdicer",
- "author": "abrahum",
- "desc": "COC跑团骰子娘",
- "name": "nonebot-plugin-cocdicer",
- "homepage": "https://github.com/abrahum/nonebot_plugin_cocdicer",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-07-28T08:59:43.166497Z",
- "version": "0.4.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_guess",
- "project_link": "nonebot-plugin-guess",
- "author": "ffreemt",
- "desc": "多次互动猜名字游戏,自带猜城市名,可定制",
- "name": "猜猜看",
- "homepage": "https://github.com/ffreemt/nonebot-plugin-guess-game",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-16T02:53:33.507492Z",
- "version": "0.1.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_abbrreply",
- "project_link": "nonebot-plugin-abbrreply",
- "author": "anlen123",
- "desc": "输入拼音首字母,猜测文字",
- "name": "缩写查询器",
- "homepage": "https://github.com/anlen123/nonebot_plugin_abbrreply",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-21T03:18:13.320169Z",
- "version": "1.1.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_biliav",
- "project_link": "nonebot-plugin-biliav",
- "author": "knva",
- "desc": "将用户发的av号或者bv号转成小程序返回",
- "name": "biliav小程序转换器",
- "homepage": "https://github.com/knva/nonebot_plugin_biliav",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-19T03:28:14.663442Z",
- "version": "1.0.11",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_analysis_bilibili",
- "project_link": "nonebot-plugin-analysis-bilibili",
- "name": "bilibili视频、番剧解析",
- "desc": "自动解析bilibili视频、番剧解析",
- "author": "mengshouer",
- "homepage": "https://github.com/mengshouer/nonebot_plugin_analysis_bilibili",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-01-16T10:41:17.818638Z",
- "version": "2.6.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_localstore",
- "project_link": "nonebot-plugin-localstore",
- "name": "本地数据存储",
- "desc": "存储插件数据至本地文件",
- "author": "yanyongyu",
- "homepage": "https://github.com/nonebot/plugin-localstore",
- "tags": [],
- "is_official": true,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.0",
- "time": "2024-02-11T10:14:07.410250Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_alconna",
- "project_link": "nonebot-plugin-alconna",
- "name": "Alconna 插件",
- "desc": "提供 ArcletProject/Alconna 的 Nonebot2 适配版本与工具",
- "author": "RF-Tar-Railt",
- "homepage": "https://github.com/nonebot/plugin-alconna",
- "tags": [
- {
- "label": "多适配器",
- "color": "#5280ea"
- },
- {
- "label": "消息匹配",
- "color": "#ea6f52"
- },
- {
- "label": "跨平台",
- "color": "#5452ea"
- }
- ],
- "is_official": true,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.41.1",
- "time": "2024-03-20T06:05:58.427456Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcstatus",
- "project_link": "nonebot-plugin-mcstatus",
- "name": "Minecraft 服务器状态查询",
- "desc": "顾名思义",
- "author": "j1g5awi",
- "homepage": "https://github.com/nonepkg/nonebot-plugin-mcstatus",
- "tags": [
- {
- "label": "t:Minecraft",
- "color": "#80070B"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-03T07:30:25.393339Z",
- "version": "0.1.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_help",
- "project_link": "nonebot-plugin-help",
- "name": "Nonebot2 Help Menu",
- "desc": "Nonebot2轻量级帮助插件",
- "author": "XZhouQD",
- "homepage": "https://github.com/xzhouqd/nonebot-plugin-help",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.1",
- "time": "2023-08-11T12:21:58.006152Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_alias",
- "project_link": "nonebot-plugin-alias",
- "name": "alias命令别名",
- "desc": "为复杂的命令创建别名",
- "author": "MeetWq",
- "homepage": "https://github.com/MeetWq/nonebot-plugin-alias",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-06-20T17:45:31.642072Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_withdraw",
- "project_link": "nonebot-plugin-withdraw",
- "name": "Nonebot2 消息撤回插件",
- "desc": "用于让机器人撤回自己发出的消息",
- "author": "MeetWq",
- "homepage": "https://github.com/MeetWq/nonebot-plugin-withdraw",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-06-20T18:15:41.588691Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pixivrank_search",
- "project_link": "nonebot-plugin-pixivrank-search",
- "name": "nonebot_plugin_pixivrank_search",
- "desc": "基于RSSHUB阅读器的P站排行和P站搜图",
- "author": "HibiKier",
- "homepage": "https://github.com/HibiKier/nonebot_plugin_pixivrank_search",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-02-18T09:53:18.929348Z",
- "version": "0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_russian",
- "project_link": "nonebot-plugin-russian",
- "name": "nonebot_plugin_russian",
- "desc": "群内小游戏,使用金币赌注的俄罗斯轮盘",
- "author": "HibiKier",
- "homepage": "https://github.com/HibiKier/nonebot_plugin_russian",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-21T17:02:28.204634Z",
- "version": "0.2.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_setu",
- "project_link": "nonebot-plugin-setu",
- "name": "nonebot_plugin_setu",
- "desc": "基于loliconImage Api的涩图插件,内置涩图CD",
- "author": "ayanamiblhx",
- "homepage": "https://github.com/ayanamiblhx/nonebot_plugin_setu",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-23T13:27:43.283834Z",
- "version": "1.1.11",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_heweather",
- "project_link": "nonebot-plugin-heweather",
- "name": "和风天气",
- "desc": "和风天气图片显示插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-heweather",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.8.2",
- "time": "2024-03-14T08:49:11.758260Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_autohelp",
- "project_link": "nonebot-plugin-autohelp",
- "name": "nonebot-plugin-autohelp",
- "desc": "响应help/菜单/帮助(群消息或私信)并提供已载入插件的帮助信息(如命令名,aliases,模块文档)",
- "author": "ffreemt",
- "homepage": "https://github.com/ffreemt/nonebot-plugin-autohelp",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-15T16:43:57.811690Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_flexperm",
- "project_link": "nonebot-plugin-flexperm",
- "name": "nonebot-plugin-flexperm",
- "desc": "精细化的 NoneBot 权限管理插件",
- "author": "rmuchan",
- "homepage": "https://github.com/rmuchan/nonebot-plugin-flexperm",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-13T10:41:21.102121Z",
- "version": "0.7.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_epicfree",
- "project_link": "nonebot-plugin-epicfree",
- "name": "Epic 限免游戏资讯",
- "desc": "EpicGameStore 喜加一资讯插件,发送「喜加一」逝世看吧!",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot_plugin_epicfree",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-30T07:57:15.417775Z",
- "version": "0.2.6",
- "skip_test": false
- },
- {
- "module_name": "ELF_RSS2",
- "project_link": "ELF-RSS",
- "name": "ELF_RSS",
- "desc": "QQ机器人 RSS订阅 插件,订阅源建议选择 RSSHub",
- "author": "Quan666",
- "homepage": "https://github.com/Quan666/ELF_RSS",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.6.21",
- "time": "2023-08-28T09:03:15.911695Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_simplemusic",
- "project_link": "nonebot-plugin-simplemusic",
- "name": "SimpleMusic",
- "desc": "最简Q群点歌插件,支持QQ音乐、网易云、酷我、酷狗、咪咕、B站音频区",
- "author": "MeetWq",
- "homepage": "https://github.com/MeetWq/nonebot-plugin-simplemusic",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-10T00:23:57.197112Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nb2chan",
- "project_link": "nb2chan",
- "name": "nb2chan",
- "desc": "Nonebot2酱推送",
- "author": "yucongo",
- "homepage": "https://github.com/ffreemt/nb2chan",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-02-20T08:21:36.557860Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_setu_now",
- "project_link": "nonebot-plugin-setu-now",
- "name": "nonebot-plugin-setu-now",
- "desc": "另一个色图插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-setu-now",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.4",
- "time": "2023-08-15T03:53:06.050378Z",
- "skip_test": false
- },
- {
- "module_name": "leetcode",
- "project_link": "nonebot-plugin-leetcode",
- "name": "leetcode提醒机器人",
- "desc": " 安装该插件后能往指定qq和指定qq群定时发送leetcode每日一题",
- "author": "zxz0415",
- "homepage": "https://github.com/zxz0415/leetcode",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-04-01T17:49:40.640240Z",
- "version": "0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_youthstudy",
- "project_link": "nonebot-plugin-youthstudy",
- "name": "nonebot_plugin_youthstudy",
- "desc": "基于nonebot的青年大学习插件,用来获取最新一期的青年大学习答案",
- "author": "ayanamiblhx",
- "homepage": "https://github.com/ayanamiblhx/nonebot_plugin_youthstudy",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-28T07:13:51.801710Z",
- "version": "1.1.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_shindan",
- "project_link": "nonebot-plugin-shindan",
- "name": "趣味占卜",
- "desc": "使用ShindanMaker网站的趣味占卜",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-shindan",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [],
- "valid": true,
- "version": "0.6.1",
- "time": "2024-03-14T15:12:03.829758Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_code",
- "project_link": "nonebot-plugin-code",
- "name": "在线运行代码",
- "desc": "在线运行编程代码,语句",
- "author": "yzyyz1387",
- "homepage": "https://github.com/yzyyz1387/nonebot_plugin_code",
- "tags": [
- {
- "label": "func",
- "color": "#dcdcaa"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.7",
- "time": "2023-09-08T10:48:27.349570Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_picsbank",
- "project_link": "nonebot-plugin-picsbank",
- "name": "picsbank",
- "desc": "匹配图片进行回答",
- "author": "Diaosi1111",
- "homepage": "https://github.com/Diaosi1111/nonebot_plugin_picsbank",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-02-20T06:35:20.914620Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tvseries",
- "project_link": "nonebot-plugin-tvseries",
- "name": "剧集更新列表",
- "desc": "获取聚集更新",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-tvseries",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-02-14T13:24:06.272775Z",
- "version": "0.0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_lolmatch",
- "project_link": "nonebot-plugin-lolmatch",
- "name": "lol比赛信息",
- "desc": "简单的lol比赛信息插件,订阅后会定时推送当日比赛结果",
- "author": "Diaosi1111",
- "homepage": "https://github.com/Diaosi1111/nonebot_plugin_lolmatch",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-07T05:54:54.351311Z",
- "version": "0.3.3",
- "skip_test": false
- },
- {
- "module_name": "OlivOS.nonebot",
- "project_link": "olivos.nb2",
- "name": "OlivOS.nb2",
- "desc": "在 NoneBot2 中加载 OlivOS 插件",
- "author": "j1g5awi",
- "homepage": "https://github.com/nonepkg/OlivOS.nb2",
- "tags": [
- {
- "label": "OlivOS",
- "color": "#00a0ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.2",
- "time": "2023-06-20T16:04:40.706727Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_htmlrender",
- "project_link": "nonebot-plugin-htmlrender",
- "name": "nonebot-plugin-htmlrender",
- "desc": "通过浏览器渲染图片",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-htmlrender",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.3.1",
- "time": "2024-03-14T08:47:15.010445Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_admin",
- "project_link": "nonebot-plugin-admin",
- "name": "不简易群管",
- "desc": "Nonebot2 群管插件 插件",
- "author": "yzyyz1387",
- "homepage": "https://github.com/yzyyz1387/nonebot_plugin_admin",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.4.5.4",
- "time": "2024-02-29T03:41:19.424728Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_memes",
- "project_link": "nonebot-plugin-memes",
- "name": "表情包制作",
- "desc": "制作各种沙雕表情包",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-memes",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [],
- "valid": true,
- "version": "0.6.2",
- "time": "2024-03-12T09:27:09.610250Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_repeater",
- "project_link": "nonebot-plugin-repeater",
- "name": "群聊复读机",
- "desc": "谁不喜欢+1呢?",
- "author": "ninthseason",
- "homepage": "https://github.com/ninthseason/nonebot-plugin-repeater",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-01T11:49:25.518834Z",
- "version": "3.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_directlinker",
- "project_link": "nonebot-plugin-directlinker",
- "name": "群文件直链提取器",
- "desc": "提取群文件的下载直链。",
- "author": "ninthseason",
- "homepage": "https://github.com/ninthseason/nonebot-plugin-directlinker",
- "tags": [
- {
- "label": "a:cqhttp",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-12T14:21:08.959060Z",
- "version": "2.4.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_forwarder",
- "project_link": "nonebot-plugin-forwarder",
- "name": "转发姬",
- "desc": "群聊消息实时转发",
- "author": "ninthseason",
- "homepage": "https://github.com/ninthseason/nonebot_plugin_forwarder",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-23T06:30:08.821807Z",
- "version": "2.1.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_roll",
- "project_link": "nonebot-plugin-roll",
- "name": "掷骰子",
- "desc": "掷骰!扔出指定个数的多面骰子🎲",
- "author": "KafCoppelia",
- "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_roll",
- "tags": [
- {
- "label": "roll",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.3",
- "time": "2023-10-18T02:03:43.776108Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_crazy_thursday",
- "project_link": "nonebot-plugin-crazy-thursday",
- "name": "疯狂星期四",
- "desc": "持续疯狂!KFC疯狂星期四🍗",
- "author": "KafCoppelia",
- "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_crazy_thursday",
- "tags": [
- {
- "label": "Thursday",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.8",
- "time": "2023-10-07T01:52:39.951306Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_covid19_news",
- "project_link": "nonebot-plugin-covid19-news",
- "name": "新冠疫情查询",
- "desc": "查询国内城市新冠疫情信息与政策",
- "author": "Zeta-qixi",
- "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-covid19-news",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-17T05:15:45.018998Z",
- "version": "0.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_remake",
- "project_link": "nonebot-plugin-remake",
- "name": "人生重开",
- "desc": "人生重开模拟器",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-remake",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-03-12T06:00:09.515301Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_weather_lite",
- "project_link": "nonebot-plugin-weather-lite",
- "name": "天气查询",
- "desc": "使用wttr.in的在线天气查询。",
- "author": "zjkwdy",
- "homepage": "https://github.com/zjkwdy/nonebot_plugin_weather_lite",
- "tags": [
- {
- "label": "t:天气",
- "color": "#6ec3d9"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-01-20T03:34:36.465960Z",
- "version": "0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_fortune",
- "project_link": "nonebot-plugin-fortune",
- "name": "今日运势",
- "desc": "抽签!占卜你的今日运势🙏",
- "author": "KafCoppelia",
- "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_fortune",
- "tags": [
- {
- "label": "fortune",
- "color": "#ea6f52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.12",
- "time": "2023-07-15T14:42:48.258728Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tarot",
- "project_link": "nonebot-plugin-tarot",
- "name": "塔罗牌",
- "desc": "塔罗牌!魔法占卜🔮",
- "author": "KafCoppelia",
- "homepage": "https://github.com/KafCoppelia/nonebot_plugin_tarot",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#eaa452"
- },
- {
- "label": "t:tarot",
- "color": "#461264"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-28T12:56:24.105825Z",
- "version": "0.4.0.post4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_emojimix",
- "project_link": "nonebot-plugin-emojimix",
- "name": "emoji合成",
- "desc": "将两个emoji合成为一张图片",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-emojimix",
- "tags": [
- {
- "label": "emoji",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.0",
- "time": "2024-03-01T02:49:06.907659Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_what2eat",
- "project_link": "nonebot-plugin-what2eat",
- "name": "今天吃什么",
- "desc": "选择恐惧症?让Bot决定你今天吃什么🍕",
- "author": "KafCoppelia",
- "homepage": "https://github.com/KafCoppelia/nonebot_plugin_what2eat",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#cd3d3d"
- },
- {
- "label": "t:what2eat",
- "color": "#f09526"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-02T11:55:27.491231Z",
- "version": "0.3.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_datastore",
- "project_link": "nonebot-plugin-datastore",
- "name": "数据存储",
- "desc": "NoneBot 数据存储插件",
- "author": "he0119",
- "homepage": "https://github.com/he0119/nonebot-plugin-datastore",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "1.2.0",
- "time": "2024-02-28T09:01:07.651465Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_boardgame",
- "project_link": "nonebot-plugin-boardgame",
- "name": "棋类游戏",
- "desc": "五子棋、黑白棋、围棋",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-boardgame",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.0",
- "time": "2024-03-02T09:28:02.725259Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wordcloud",
- "project_link": "nonebot-plugin-wordcloud",
- "name": "词云",
- "desc": "利用群消息生成词云",
- "author": "he0119",
- "homepage": "https://github.com/he0119/nonebot-plugin-wordcloud",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.7.0",
- "time": "2024-03-01T04:23:25.937459Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatrecorder",
- "project_link": "nonebot-plugin-chatrecorder",
- "name": "聊天记录",
- "desc": "记录机器人收到和发出的消息",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-chatrecorder",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.6.0",
- "time": "2024-03-01T02:09:06.819616Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_antiflash",
- "project_link": "nonebot-plugin-antiflash",
- "name": "群聊反闪照",
- "desc": "顾名思义🎇",
- "author": "KafCoppelia",
- "homepage": "https://github.com/KafCoppelia/nonebot_plugin_antiflash",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#6f64d4"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-04-19T02:00:25.241994Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_word_bank2",
- "project_link": "nonebot-plugin-word-bank2",
- "name": "nonebot-plugin-word-bank2",
- "desc": "无数据库的轻量问答插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-word-bank2",
- "tags": [
- {
- "label": "wordbank",
- "color": "#0b00ff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.8",
- "time": "2023-06-15T04:20:03.438577Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_txt2img",
- "project_link": "nonebot-plugin-txt2img",
- "name": "文字转图片",
- "desc": "使用 Pillow 进行文字转图片",
- "author": "mobyw",
- "homepage": "https://github.com/mobyw/nonebot-plugin-txt2img",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-02-22T05:25:41.002376Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_morning",
- "project_link": "nonebot-plugin-morning",
- "name": "おはよう!",
- "desc": "早晚安记录作息,培养优质睡眠😴",
- "author": "KafCoppelia",
- "homepage": "https://github.com/KafCoppelia/nonebot_plugin_morning",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#da421c"
- },
- {
- "label": "t:morning",
- "color": "#ebc025"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-28T03:36:05.610930Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pixiv",
- "project_link": "nonebot-plugin-pixiv",
- "name": "pixiv.net p站查询图片",
- "desc": "pixiv.net p站查询图片(支持动图和多图)",
- "author": "anlen123",
- "homepage": "https://github.com/anlen123/nonebot_plugin_pixiv",
- "tags": [
- {
- "label": "t: pixiv",
- "color": "#0096fa"
- },
- {
- "label": "R18",
- "color": "#ffff00"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-20T09:53:04.279714Z",
- "version": "1.1.5",
- "skip_test": false
- },
- {
- "module_name": "YetAnotherPicSearch",
- "project_link": "yetanotherpicsearch",
- "name": "YetAnotherPicSearch",
- "desc": "基于 kitUIN/PicImageSearch 的另一个 Nonebot 搜图插件。",
- "author": "NekoAria",
- "homepage": "https://github.com/NekoAria/YetAnotherPicSearch",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-15T04:04:51.199073Z",
- "version": "1.9.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gachalogs",
- "project_link": "nonebot-plugin-gachalogs",
- "name": "原神抽卡记录分析",
- "desc": "统计及导出原神祈愿记录,在 QQ 里鉴定原神欧皇吧!",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-gachalogs",
- "tags": [
- {
- "label": "t:Genshin",
- "color": "#ffd49f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-10T08:08:27.393467Z",
- "version": "0.2.13",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_everyday_en",
- "project_link": "nonebot-plugin-everyday-en",
- "name": "每日一句",
- "desc": "每日一句英文句子,可选定时发送",
- "author": "MelodyYuuka",
- "homepage": "https://github.com/MelodyYuuka/nonebot_plugin_everyday_en",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "EveryDay",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-04-02T07:45:02.498078Z",
- "version": "1.1.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_fire",
- "project_link": "nonebot-plugin-fire",
- "name": "QQ自动续火花",
- "desc": "通过每天定时发送“/echo 花花”实现续火花",
- "author": "25252www",
- "homepage": "https://github.com/25252www/nonebot_plugin_fire",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-04-01T11:33:36.907538Z",
- "version": "1.0.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_qrcode",
- "project_link": "nonebot-plugin-qrcode",
- "name": "二维码识别与发送",
- "desc": "qq聊天二维码插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-qrcode",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "QRcode",
- "color": "#0020ff"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-04T10:54:24.541684Z",
- "version": "0.0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ygo",
- "project_link": "nonebot-plugin-ygo",
- "name": "游戏王卡查",
- "desc": "nonebot的游戏王卡查插件",
- "author": "anlen123",
- "homepage": "https://github.com/anlen123/nonebot_plugin_ygo",
- "tags": [
- {
- "label": "t:游戏王",
- "color": "#ea5252"
- },
- {
- "label": "口胡王",
- "color": "#ea5252"
- },
- {
- "label": "ygo",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-07-03T11:45:31.205090Z",
- "version": "1.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilibilibot",
- "project_link": "nonebot-plugin-bilibilibot",
- "name": "bilibili通知插件",
- "desc": "将up主更新、番剧更新、主播开播等信息推送到QQ",
- "author": "TDK1969",
- "homepage": "https://github.com/TDK1969/nonebot_plugin_bilibilibot",
- "tags": [
- {
- "label": "bilibili",
- "color": "#f605dd"
- },
- {
- "label": "a:onebot11",
- "color": "#05f6e4"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-01-03T18:12:50.547913Z",
- "version": "2.3.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_color",
- "project_link": "nonebot-plugin-color",
- "name": "色图生成",
- "desc": "用于生成指定色彩图片的 NoneBot2 插件",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-color",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.4.0",
- "time": "2024-03-10T10:07:17.874441Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_blackjack",
- "project_link": "nonebot-plugin-blackjack",
- "name": "21点游戏插件",
- "desc": "一个基于签到积分的21点游戏与积分对战插件",
- "author": "yaowan233",
- "homepage": "https://github.com/yaowan233/nonebot-plugin-blackjack",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-03-11T15:11:50.631785Z",
- "version": "0.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_arcaeabot",
- "project_link": "nonebot-plugin-arcaeabot",
- "name": "Arcaea查分插件",
- "desc": "Arcaea查分插件(recent, best30)",
- "author": "SEAFHMC",
- "homepage": "https://github.com/SEAFHMC/nonebot-plugin-arcaeabot",
- "tags": [
- {
- "label": "Arcaea",
- "color": "#db52ea"
- },
- {
- "label": "a:onebot",
- "color": "#ff2e00"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-09T14:09:57.926195Z",
- "version": "3.1.19",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ddcheck",
- "project_link": "nonebot-plugin-ddcheck",
- "name": "成分姬",
- "desc": "查询B站用户关注的VTuber成分",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-ddcheck",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.0",
- "time": "2024-03-02T15:02:58.078642Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_leetcode2",
- "project_link": "nonebot-plugin-leetcode2",
- "name": "第二个leetcode查询插件",
- "desc": "可查询用户信息、获取每日一题与随机一题和搜索题目。",
- "author": "Nranphy",
- "homepage": "https://github.com/Nranphy/nonebot_plugin_leetcode2",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-13T12:14:05.351724Z",
- "version": "1.1.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hikarisearch",
- "project_link": "nonebot-plugin-hikarisearch",
- "name": "HikariSearch",
- "desc": "使用 HikariSearch 的又一个搜图插件",
- "author": "MeetWq",
- "homepage": "https://github.com/MeetWq/nonebot-plugin-hikarisearch",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-03T06:52:42.532048Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mediawiki",
- "project_link": "nonebot-plugin-mediawiki",
- "name": "MediaWiki查询",
- "desc": "为群聊提供简单的wiki查询功能(仅支持onebot)",
- "author": "KoishiStudio",
- "homepage": "https://github.com/KoishiStudio/nonebot-plugin-mediawiki",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:wiki",
- "color": "#679ff9"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-28T19:29:44.225452Z",
- "version": "1.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wordle",
- "project_link": "nonebot-plugin-wordle",
- "name": "猜单词",
- "desc": "wordle猜单词游戏",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-wordle",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-02-28T15:01:45.634106Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_giyf",
- "project_link": "nonebot-plugin-giyf",
- "name": "快速搜索",
- "desc": "指引群友快速 访 ~~(tui)~~ 问 ~~(dao)~~ 谷歌娘(在中国大陆大概就是度娘了~)",
- "author": "KoishiStudio",
- "homepage": "https://github.com/KoishiStudio/nonebot-plugin-giyf",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-06-10T03:01:26.351493Z",
- "version": "0.1.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_abstract",
- "project_link": "nonebot-plugin-abstract",
- "name": "语句抽象化",
- "desc": "能够将你的语句变得抽象起来~",
- "author": "CherryCherries",
- "homepage": "https://github.com/CherryCherries/nonebot-plugin-abstract",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-25T09:05:56.928814Z",
- "version": "1.0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_params",
- "project_link": "nonebot-plugin-params",
- "name": "多适配器帮助函数",
- "desc": "提供编写多适配器插件的帮助函数",
- "author": "iyume",
- "homepage": "https://github.com/iyume/nonebot-plugin-params",
- "tags": [
- {
- "label": "t:helper",
- "color": "#ffe873"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-03-28T04:56:05.243623Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_handle",
- "project_link": "nonebot-plugin-handle",
- "name": "猜成语",
- "desc": "汉字Wordle 猜成语",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-handle",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-03-03T14:32:13.372089Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_minesweeper",
- "project_link": "nonebot-plugin-minesweeper",
- "name": "扫雷",
- "desc": "扫雷游戏",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-minesweeper",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-03-02T05:26:09.929052Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_draw",
- "project_link": "nonebot_plugin_draw",
- "name": "nonebot_plugin_draw",
- "desc": "模拟抽签的一个本地化插件",
- "author": "bingganhe123",
- "homepage": "https://github.com/bingganhe123/nonebot_plugin_draw",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-04-12T02:35:00.986589Z",
- "version": "0.1.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_randomtkk",
- "project_link": "nonebot-plugin-randomtkk",
- "name": "随机唐可可",
- "desc": "找到唐可可,和她一起做学园偶像!🎶",
- "author": "KafCoppelia",
- "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_randomtkk",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#d62222"
- },
- {
- "label": "t:Tan Kuku",
- "color": "#fdaf75"
- },
- {
- "label": "t:Liyuu",
- "color": "#465dfd"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-29T10:01:33.569934Z",
- "version": "0.1.5.post1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dida",
- "project_link": "nonebot-plugin-dida",
- "name": "nonebot-plugin-dida",
- "desc": "基于Nonebot的滴答清单插件,可创建普通任务/子任务,按照条件查询任务",
- "author": "TDK1969",
- "homepage": "https://github.com/TDK1969/nonebot_plugin_dida",
- "tags": [
- {
- "label": "t:滴答清单",
- "color": "#007ffd"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-24T14:43:52.546960Z",
- "version": "2.0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_alipayvoice",
- "project_link": "nonebot-plugin-alipayvoice",
- "name": "支付宝到账语音",
- "desc": "发送支付宝到账语音, 支持金额范围为0.01~999999999999.99",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-alipayvoice",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-06-21T03:04:10.967969Z",
- "version": "0.5.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_answersbook",
- "project_link": "nonebot-plugin-answersbook",
- "name": "答案之书",
- "desc": "愿一切无解都有解!解除你的迷惑,终结你的纠结!",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-answersbook",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-05-09T16:28:04.479501Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hitokoto",
- "project_link": "nonebot-plugin-hitokoto",
- "name": "一言",
- "desc": "总有一句话能打动你的心",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-hitokoto",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-27T03:19:08.068742Z",
- "version": "0.2.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilicover",
- "project_link": "nonebot-plugin-bilicover",
- "name": "B站视频封面提取",
- "desc": "提取B站视频的封面,支持链接、av号、bv号",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-bilicover",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-15T15:00:17.810788Z",
- "version": "0.2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cchess",
- "project_link": "nonebot-plugin-cchess",
- "name": "象棋",
- "desc": "象棋,支持人机和对战",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-cchess",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.0",
- "time": "2024-03-01T15:20:58.978317Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chess",
- "project_link": "nonebot-plugin-chess",
- "name": "国际象棋",
- "desc": "国际象棋,支持人机和对战",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-chess",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.5.0",
- "time": "2024-03-02T06:32:33.038543Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_charpic",
- "project_link": "nonebot-plugin-charpic",
- "name": "charpic",
- "desc": "合成字符画",
- "author": "RafuiiChan",
- "homepage": "https://github.com/1umine/nonebot_plugin_charpic",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-10-08T15:19:56.533711Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_miragetank",
- "project_link": "nonebot-plugin-miragetank",
- "name": "miragetank",
- "desc": "合成/分离幻影坦克图片",
- "author": "RafuiiChan",
- "homepage": "https://github.com/1umine/nonebot_plugin_miragetank",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2023-10-06T04:10:56.321148Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_covid",
- "project_link": "nonebot-plugin-covid",
- "name": "国内新冠疫情数据查询",
- "desc": "查询国内各省份及下属地级市的疫情数据",
- "author": "nicklly",
- "homepage": "https://github.com/nicklly/nonebot2_covid_plugin",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-26T22:14:17.882416+08:00",
- "version": "0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_yulu",
- "project_link": "nonebot-plugin-yulu",
- "name": "语录娱乐",
- "desc": "语录娱乐小插件",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot-plugin-yulu",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-20T10:15:53.506911Z",
- "version": "3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_maze",
- "project_link": "nonebot-plugin-maze",
- "name": "走迷宫",
- "desc": "与机器人交互解迷宫",
- "author": "EtherLeaF",
- "homepage": "https://github.com/EtherLeaF/nonebot_plugin_maze",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-24T07:37:30.144772Z",
- "version": "0.2.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_moyu",
- "project_link": "nonebot-plugin-moyu",
- "name": "摸鱼日历",
- "desc": "摸鱼一时爽, 一直摸鱼一直爽",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-moyu",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-18T12:01:49.758334Z",
- "version": "0.3.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mockingbird",
- "project_link": "nonebot-plugin-mockingbird",
- "name": "MockingBird语音",
- "desc": "利用MockingBird来生成语音,并支持多种语音切换",
- "author": "AkashiCoin",
- "homepage": "https://github.com/AkashiCoin/nonebot_plugin_mockingbird",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-05-24T10:28:06.597823Z",
- "version": "0.2.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_baidutranslate",
- "project_link": "nonebot-plugin-baidutranslate",
- "name": "百度翻译",
- "desc": "可以调用百度翻译 API 实现常用语种之间的互译",
- "author": "NumberSir",
- "homepage": "https://github.com/NumberSir/nonebot_plugin_baidutranslate",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-04T02:02:45.349939Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tortoise_orm",
- "project_link": "nonebot-plugin-tortoise-orm",
- "name": "nonebot_plugin_tortoise_orm",
- "desc": "Tortoise ORM 插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-tortoise-orm",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.1",
- "time": "2023-08-22T04:01:30.366075Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dailysign",
- "project_link": "nonebot-plugin-dailysign",
- "name": "nonebot_plugin_dailysign",
- "desc": "简单的签到插件",
- "author": "kexue-z",
- "homepage": "https://github.com/kexue-z/nonebot-plugin-dailysign",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.0.1",
- "time": "2023-06-29T02:30:01.006481Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tetris_stats",
- "project_link": "nonebot-plugin-tetris-stats",
- "name": "TETRIS Stats",
- "desc": "一个基于nonebot2的用于查询TETRIS相关游戏玩家数据的插件",
- "author": "shoucandanghehe",
- "homepage": "https://github.com/shoucandanghehe/nonebot-plugin-tetris-stats",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#da2b2b"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-09-21T14:35:01.691461Z",
- "version": "0.4.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilibili_viode",
- "project_link": "nonebot_plugin_bilibili_viode",
- "name": "B站视频伪分享卡片",
- "desc": "将用户发送的B站视频ID转为(伪)分享卡片的形式",
- "author": "ASTWY",
- "homepage": "https://github.com/ASTWY/nonebot_plugin_bilibili_viode",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-30T21:21:44.093741Z",
- "version": "1.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_imagetools",
- "project_link": "nonebot-plugin-imagetools",
- "name": "图片操作",
- "desc": "简单图片操作",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-imagetools",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.1",
- "time": "2024-03-12T09:52:51.485907Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_warframe_clock",
- "project_link": "nonebot-plugin-warframe-clock",
- "name": "Warframe时间查询",
- "desc": "查询Warframe的平原与地球时间状态",
- "author": "axStar",
- "homepage": "https://github.com/axStar/nonebot_plugin_warframe_clock",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "Warframe",
- "color": "#149090"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-05-31T03:32:53.069089Z",
- "version": "1.3",
- "skip_test": false
- },
- {
- "module_name": "hikari_bot",
- "project_link": "hikari-bot",
- "name": "Hikari-战舰世界水表查询",
- "desc": "顾名思义",
- "author": "benx1n",
- "homepage": "https://github.com/benx1n/HikariBot",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-06T04:31:59.376089Z",
- "version": "1.0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_who_at_me",
- "project_link": "nonebot-plugin-who-at-me",
- "name": "谁艾特我了",
- "desc": "看看是谁又在艾特我",
- "author": "SEAFHMC",
- "homepage": "https://github.com/SEAFHMC/nonebot-plugin-who-at-me",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:群聊",
- "color": "#52afea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-09-19T02:26:39.239522Z",
- "version": "0.2.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_covid_19_by",
- "project_link": "nonebot-plugin-covid-19-by",
- "name": "疫情小助手",
- "desc": "疫情小助手 支持查地区 风险地区 境外输入等",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot-plugin-covid-19-by",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#52ea8a"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-04T12:51:50.273807Z",
- "version": "4.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_reboot",
- "project_link": "nonebot-plugin-reboot",
- "name": "nonebot_plugin_reboot [重启 bot]",
- "desc": "用命令重启机器人",
- "author": "18870",
- "homepage": "https://github.com/18870/nonebot-plugin-reboot",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.4",
- "time": "2023-06-24T10:34:29.338115Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_setu4",
- "project_link": "nonebot-plugin-setu4",
- "name": "setu4",
- "desc": "内置数据库的setu插件, 尝试降低因为风控发不出图的概率",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/nonebot_plugin_setu4",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.15.114514.1",
- "time": "2024-02-20T06:48:16.825857Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_smart_reply",
- "project_link": "nonebot-plugin-smart-reply",
- "name": "smart_reply",
- "desc": "nonebot2的融合了openai, newbing, 词库的智障回复插件",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/nonebot_plugin_smart_reply",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.15.114514",
- "time": "2024-02-28T10:39:44.325920Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_today_in_history",
- "project_link": "nonebot-plugin-today-in-history",
- "name": "历史上的今天",
- "desc": "发送每日历史上的今天",
- "author": "AquamarineCyan",
- "homepage": "https://github.com/AquamarineCyan/nonebot-plugin-today-in-history",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-12-06T13:23:11.873181Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_BitTorrent",
- "project_link": "nonebot_plugin_BitTorrent",
- "name": "bittorrent",
- "desc": "磁力搜索插件",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/nonebot_plugin_BitTorrent",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.21",
- "time": "2024-02-20T06:47:14.799458Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_namelist",
- "project_link": "nonebot-plugin-namelist",
- "name": "黑白名单",
- "desc": "简易黑白用户名单管理",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-namelist",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-07-16T09:41:29.820153Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bread_shop",
- "project_link": "nonebot-plugin-bread-shop",
- "name": "面包店小游戏",
- "desc": "面包店休闲小游戏",
- "author": "Mai-icy",
- "homepage": "https://github.com/Mai-icy/nonebot-plugin-bread-shop",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-17T08:16:03.035271Z",
- "version": "0.1.14",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_PicMenu",
- "project_link": "nonebot_plugin_PicMenu",
- "name": "PicMenu",
- "desc": "根据插件元数据生成图片化功能菜单",
- "author": "hamo-reid",
- "homepage": "https://github.com/hamo-reid/nonenot_plugin_PicMenu",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#030303"
- },
- {
- "label": "t:menu",
- "color": "#753dc6"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-16T05:48:01.071422Z",
- "version": "0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_horserace",
- "project_link": "nonebot_plugin_horserace",
- "name": "赛马",
- "desc": "群内青春版赛马小游戏",
- "author": "shinianj",
- "homepage": "https://github.com/shinianj/nonebot_plugin_horserace",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-06-30T05:20:53.029037Z",
- "version": "2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_firexN",
- "project_link": "nonebot-plugin-firexN",
- "name": "一起燚xN吧",
- "desc": "QQ续火花,可以自定义多个联系人、消息内容、发送时间,支持群聊定时消息",
- "author": "GC-ZF",
- "homepage": "https://github.com/GC-ZF/nonebot_plugin_firexN",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-24T13:46:27.472585Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bfinfo",
- "project_link": "nonebot-plugin-bfinfo",
- "name": "战地1、5战绩查询工具",
- "desc": "QQ私聊或群聊发送战地游戏ID,返回基础信息以及最佳兵种、最佳枪械、最佳载具、最佳模式信息",
- "author": "GC-ZF",
- "homepage": "https://github.com/GC-ZF/nonebot_plugin_bfinfo",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-05T14:10:41.291955Z",
- "version": "0.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_osubot",
- "project_link": "nonebot-plugin-osubot",
- "name": "OSUBot",
- "desc": "OSU查分插件",
- "author": "yaowan233",
- "homepage": "https://github.com/yaowan233/nonebot-plugin-osubot",
- "tags": [
- {
- "label": "OSU",
- "color": "#eb5d9b"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [],
- "valid": true,
- "version": "5.2.2",
- "time": "2024-03-11T07:06:45.988200Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_acc_calculate",
- "project_link": "nonebot-plugin-acc-calculate",
- "name": "ACC计算工具",
- "desc": "能够计算段位的单曲acc,支持malodyv3段位regular、ex",
- "author": "10-24",
- "homepage": "https://github.com/10-24/nonebot-plugin-acc-calculate",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-10T10:15:56.678714Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_kawaii_robot",
- "project_link": "nonebot_plugin_kawaii_robot",
- "name": "KawaiiRobot",
- "desc": "使用 Kyomotoi/AnimeThesaurus 的 NoneBot2 的回复(文i)插件",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_kawaii_robot/",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "4.1.0.post1",
- "time": "2024-03-15T14:33:21.268256Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_addFriend",
- "project_link": "nonebot_plugin_addFriend",
- "name": "处理好友添加和群邀请",
- "desc": "一个基于NoneBot2的插件,用于处理被请求加QQ好友和QQ群的请求",
- "author": "ziru-w",
- "homepage": "https://github.com/ziru-w/nonebot_plugin_addFriend",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-09-16T14:12:37.178511Z",
- "version": "2.5.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_date_name",
- "project_link": "nonebot-plugin-date-name",
- "name": "群昵称时间",
- "desc": "一个可以群昵称显示现在时间的插件",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot-plugin-date-name",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#a552ea"
- },
- {
- "label": "t:qun_card",
- "color": "#e552ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-15T09:06:23.113910Z",
- "version": "3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_easyCommand",
- "project_link": "nonebot_plugin_easyCommand",
- "name": "易命令",
- "desc": "一个基于NoneBot2的简单的用于动态地添加命令或添加定时任务的插件",
- "author": "ziru-w",
- "homepage": "https://github.com/ziru-w/nonebot_plugin_easyCommand",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-15T03:35:40.231889Z",
- "version": "1.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_report",
- "project_link": "nonebot-plugin-report",
- "name": "推送钩子",
- "desc": "使用 webhook 向用户推送消息",
- "author": "syrinka",
- "homepage": "https://github.com/syrinka/nonebot-plugin-report",
- "tags": [
- {
- "label": "t:webhook",
- "color": "#51b3a8"
- },
- {
- "label": "t:notify",
- "color": "#3985f7"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-10T09:44:45.338348Z",
- "version": "1.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hammer_nbnhhsh",
- "project_link": "nonebot-plugin-hammer-nbnhhsh",
- "name": "「能不能好好说话?」缩写翻译",
- "desc": "拼音首字母及阿拉伯数字缩写翻译",
- "author": "ArgonarioD",
- "homepage": "https://github.com/ArgonarioD/nonebot-plugin-hammer-nbnhhsh",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "a:cqhttp",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-01T06:05:33.097465Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bawiki",
- "project_link": "nonebot-plugin-bawiki",
- "name": "BAWiki",
- "desc": "碧蓝档案Wiki插件",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-bawiki",
- "tags": [
- {
- "label": "碧蓝档案",
- "color": "#00d7fb"
- },
- {
- "label": "蔚藍檔案",
- "color": "#00d7fb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.11.2",
- "time": "2024-03-10T11:22:39.906792Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcqq",
- "project_link": "nonebot-plugin-mcqq",
- "name": "MC_QQ",
- "desc": "基于NoneBot的与Minecraft Server互通消息的插件",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/nonebot-plugin-mcqq",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#52ea6f"
- },
- {
- "label": "消息互通",
- "color": "#52eadf"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.minecraft",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qq"
- ],
- "valid": false,
- "version": "2.5.3.post1",
- "time": "2024-02-29T07:00:39.619226Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_covid_19_by_guild",
- "project_link": "nonebot-plugin-covid-19-by-guild",
- "name": "疫情小助手-频道版",
- "desc": "👉 疫情小助手 频道版👈",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot-plugin-covid-19-by-guild",
- "tags": [
- {
- "label": "a:QQ频道",
- "color": "#ea5252"
- },
- {
- "label": "t:疫情小助手",
- "color": "#526fea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-08T13:02:36.594332Z",
- "version": "1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wiki",
- "project_link": "nonebot-plugin-wiki",
- "name": "wiki条目搜索、获取简介",
- "desc": "通过mediawiki api进行条目搜索、生成简介(biliwiki部分通过网页解析实现)",
- "author": "ZombieFly",
- "homepage": "https://github.com/ZombieFly/nb2-wiki",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-28T14:31:02.494388Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_groupmanager",
- "project_link": "nonebot-plugin-groupmanager",
- "name": "多功能群管",
- "desc": "与简易群管属于同个产品,就是多了一个入群欢迎,感谢@幼稚园园长 开发的原版插件的帮助",
- "author": "HuYihe2008",
- "homepage": "https://github.com/HuYihe2008/nonebot_plugin_groupmanager",
- "tags": [
- {
- "label": "简易群管",
- "color": "#53e950"
- },
- {
- "label": "插件改良",
- "color": "#2b7be2"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-25T03:50:08.584658Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_game_collection",
- "project_link": "nonebot_plugin_game_collection",
- "name": "小游戏合集",
- "desc": "改自 nonebot_plugin_russian 合并了nonebot_plugin_horserace还有一些自编玩法的小游戏合集。",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_game_collection",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-13T11:14:29.877161Z",
- "version": "2.4.16",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_drawer",
- "project_link": "nonebot-plugin-drawer",
- "name": "nonebot-plugin-drawer",
- "desc": "适用于 Nonebot2 的AI画画插件",
- "author": "CrazyBoyM",
- "homepage": "https://github.com/CrazyBoyM/nonebot-plugin-drawer",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-06T10:07:03.855313Z",
- "version": "0.4.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_jrrp-n",
- "project_link": "nonebot-plugin-jrrp-n",
- "name": "每日人品",
- "desc": "不基于random的每日人品插件",
- "author": "SkyDynamic",
- "homepage": "https://github.com/SkyDynamic/nonebot_plugin_jrrp",
- "tags": [
- {
- "label": "每日人品",
- "color": "#ea5252"
- },
- {
- "label": "jrrp",
- "color": "#529fea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-09-11T12:26:29.764709Z",
- "version": "1.0.1a1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_moegoe",
- "project_link": "nonebot-plugin-moegoe",
- "name": "日韩中 VITS 模型原神拟声",
- "desc": "现在是琪亚娜时间~",
- "author": "Yiyuiii",
- "homepage": "https://github.com/Yiyuiii/nonebot-plugin-moegoe",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-01-03T07:57:36.831231Z",
- "version": "0.10.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pixivbot",
- "project_link": "nonebot-plugin-pixivbot",
- "name": "PixivBot",
- "desc": "发送随机Pixiv插画、画师更新推送、定时订阅推送……",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-pixivbot",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "2.1.1",
- "time": "2023-11-29T05:38:58.958393Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_workscore",
- "project_link": "nonebot-plugin-workscore",
- "name": "工作性价比计算器",
- "desc": "工作性价比计算器,算算你有多惨",
- "author": "yzyyz1387",
- "homepage": "https://github.com/yzyyz1387/nonebot_plugin_workscore",
- "tags": [
- {
- "label": "工作性价比计算器",
- "color": "#3898fc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.2",
- "time": "2023-09-08T10:44:39.331076Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_treehelp",
- "project_link": "nonebot-plugin-treehelp",
- "name": "帮助",
- "desc": "获取插件帮助信息",
- "author": "he0119",
- "homepage": "https://github.com/he0119/nonebot-plugin-treehelp",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.1",
- "time": "2024-03-01T05:09:14.419256Z",
- "skip_test": false
- },
- {
- "module_name": "cqsat",
- "project_link": "nonebot-plugin-cqsat",
- "name": "HAM助手",
- "desc": "业余无线电相关工具",
- "author": "yzyyz1387",
- "homepage": "https://github.com/yzyyz1387/cqsat",
- "tags": [
- {
- "label": "业余无线电",
- "color": "#ea5252"
- },
- {
- "label": "HAM",
- "color": "#3898fc"
- },
- {
- "label": "卫星追踪",
- "color": "#fca638"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.1.12.3",
- "time": "2024-03-07T03:24:10.900500Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_course",
- "project_link": "nonebot-plugin-course",
- "name": "课表查询",
- "desc": "本周课表,完整课表,下节课在哪上,今天还有什么课🤔",
- "author": "InariInDream",
- "homepage": "https://github.com/InariInDream/nonebot_plugin_course",
- "tags": [
- {
- "label": "课表",
- "color": "#6e9af2"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-26T09:03:50.284334Z",
- "version": "0.1.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dialectlist",
- "project_link": "nonebot-plugin-dialectlist",
- "name": "话痨排行榜",
- "desc": "给话多的群友一个排行",
- "author": "X-Skirt-X",
- "homepage": "https://github.com/X-Skirt-X/nonebot_plugin_dialectlist",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-19T02:13:34.033923Z",
- "version": "1.4.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_offline_mahjong_helper",
- "project_link": "nonebot-plugin-offline-mahjong-helper",
- "name": "面麻小助手",
- "desc": "可约桌、算点、精算、雀魂查询的面麻助手。",
- "author": "Nranphy",
- "homepage": "https://github.com/Nranphy/nonebot_plugin_offline_mahjong_helper",
- "tags": [
- {
- "label": "Mahjong",
- "color": "#ea5252"
- },
- {
- "label": "雀魂",
- "color": "#eaa452"
- },
- {
- "label": "线下约桌",
- "color": "#52a6ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-25T07:44:48.326427Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_send",
- "project_link": "nonebot-plugin-send",
- "name": "反馈及通知",
- "desc": "用户通过bot向superuser发送反馈,以及bot向所有群发送通知",
- "author": "sena-nana",
- "homepage": "https://github.com/sena-nana/nonebot-plugin-send",
- "tags": [
- {
- "label": "t:send",
- "color": "#ea5252"
- },
- {
- "label": "t:notice",
- "color": "#ea5252"
- },
- {
- "label": "t:公告",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-26T09:20:01.529021Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_todo_nlp",
- "project_link": "nonebot-plugin-todo-nlp",
- "name": "自识别todo",
- "desc": "一款自动识别提醒内容,可生成todo图片并定时推送的nonebot2插件,v11适配器可用",
- "author": "CofinCup",
- "homepage": "https://github.com/CofinCup/nonebot-plugin-todo-nlp",
- "tags": [
- {
- "label": "t:todo",
- "color": "#499bdd"
- },
- {
- "label": "t:nlp",
- "color": "#83b279"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-29T15:38:01.799965Z",
- "version": "0.1.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wordsnorote",
- "project_link": "nonebot-plugin-wordsnorote",
- "name": "不背单词",
- "desc": "哥们哥们,背单词么?哥们!",
- "author": "GC-ZF",
- "homepage": "https://github.com/GC-ZF/nonebot_plugin_wordsnorote",
- "tags": [
- {
- "label": "四六级",
- "color": "#24a0d8"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-30T08:50:02.018317Z",
- "version": "0.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_CyberSensoji",
- "project_link": "nonebot-plugin-CyberSensoji",
- "name": "赛博浅草寺",
- "desc": "随机抽取浅草寺的一签运势",
- "author": "Raidenneox",
- "homepage": "https://github.com/Raidenneox/nonebot_plugin_CyberSensoji",
- "tags": [
- {
- "label": "t:抽签",
- "color": "#52eadf"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-08-31T02:25:54.508365Z",
- "version": "0.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gspanel",
- "project_link": "nonebot-plugin-gspanel",
- "name": "原神角色展柜查询",
- "desc": "移植自 @yoimiya-kokomi/miao-plugin 的原神游戏内角色展柜数据查询",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-gspanel",
- "tags": [
- {
- "label": "t:Genshin",
- "color": "#ffd49f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-09T07:32:00.271465Z",
- "version": "0.2.25",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gsmaterial",
- "project_link": "nonebot-plugin-gsmaterial",
- "name": "原神每日材料查询",
- "desc": "原神每日天赋培养、武器突破材料查询,通过 Project Amber 数据库(支持部分尚未实装角色)自动更新每日数据~",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-gsmaterial",
- "tags": [
- {
- "label": "t:Genshin",
- "color": "#ffd49f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-09T14:57:38.167171Z",
- "version": "0.2.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mystool",
- "project_link": "nonebot-plugin-mystool",
- "name": "米游社辅助工具",
- "desc": "每日完成米游币任务、游戏签到、商品兑换、免抓包登录",
- "author": "Ljzd-PRO",
- "homepage": "https://github.com/Ljzd-PRO/nonebot-plugin-mystool",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:米游社",
- "color": "#66e0ff"
- },
- {
- "label": "t:原神",
- "color": "#faf3c4"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-16T19:21:16.886146Z",
- "version": "2.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_warframe",
- "project_link": "nonebot-plugin-warframe",
- "name": "星际战甲事件查询",
- "desc": "通过奥迪斯网站API查询星际战甲国服事件",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/nonebot-plugin-warframe",
- "tags": [
- {
- "label": "星际战甲",
- "color": "#ed3f3f"
- },
- {
- "label": "WarFrame",
- "color": "#edea3f"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.5",
- "time": "2023-06-18T16:49:55.654016Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcqq_server",
- "project_link": "nonebot-plugin-mcqq-server",
- "name": "Minecraft Server 聊天同步",
- "desc": "采用本地读取log信息的方法的Minecraft Server互通消息的插件,mcqq服主版。",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_mcqq_server",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#52ea64"
- },
- {
- "label": "消息互通",
- "color": "#52e5ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-27T05:44:16.649059Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_RealESRGAN",
- "project_link": "nonebot_plugin_RealESRGAN",
- "name": "图像超分辨率重建",
- "desc": "对图像进行超分辨率重建,可以理解成将图像变大变清晰,不过线上重建的效果没有本地的好,具体可以查阅仓库",
- "author": "ppxxxg22",
- "homepage": "https://github.com/ppxxxg22/nonebot_plugin_RealESRGAN",
- "tags": [
- {
- "label": "图像超分辨率重建",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-17T07:35:11.987728Z",
- "version": "0.2.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-wolf-kill",
- "project_link": "nonebot-plugin-wolf-kill",
- "name": "狼人杀插件",
- "desc": "在群里玩狼人杀",
- "author": "AbCooly",
- "homepage": "https://github.com/AbCooly/nonebot_plugin_wolf_kill",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-14T05:29:21.336273Z",
- "version": "2.0.4",
- "skip_test": false
- },
- {
- "module_name": "iot",
- "project_link": "nonebot-plugin-iot",
- "name": "nonebot物联网插件",
- "desc": "为nonebot接入物联网提供方案,目前支持天猫精灵终端,后续会增加",
- "author": "littlebutt",
- "homepage": "https://github.com/littlebutt/nonebot-plugin-iot",
- "tags": [
- {
- "label": "t:物联网",
- "color": "#4b86d7"
- },
- {
- "label": "t:天猫精灵",
- "color": "#4b86d7"
- },
- {
- "label": "t:IOT",
- "color": "#4b86d7"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-12T01:56:21.172428Z",
- "version": "1.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bwiki_navigator",
- "project_link": "nonebot-plugin-bwiki-navigator",
- "name": "Bwiki Navigator",
- "desc": "Bwiki助手(官方移植版)",
- "author": "XZhouQD",
- "homepage": "https://github.com/xzhouqd/nonebot-plugin-bwiki-navigator",
- "tags": [
- {
- "label": "wiki",
- "color": "#29a5e3"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.1",
- "time": "2023-06-20T14:52:52.232111Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bottle",
- "project_link": "nonebot-plugin-bottle",
- "name": "漂流瓶",
- "desc": "群与群互通的漂流瓶插件",
- "author": "Todysheep",
- "homepage": "https://github.com/Todysheep/nonebot_plugin_bottle",
- "tags": [
- {
- "label": "漂流瓶",
- "color": "#0893f2"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.0.0.9",
- "time": "2024-03-12T11:34:48.730630Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tts_gal",
- "project_link": "nonebot-plugin-tts-gal",
- "name": "vits角色语音合成本地化",
- "desc": "基于nonebot2和vits的本地化角色语音合成插件",
- "author": "dpm12345",
- "homepage": "https://github.com/dpm12345/nonebot_plugin_tts_gal",
- "tags": [
- {
- "label": "VITS",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-19T04:44:48.034103Z",
- "version": "0.3.11",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_alicdk_get",
- "project_link": "nonebot-plugin-alicdk-get",
- "name": "阿里云盘福利码自动兑换",
- "desc": "基于nonebot2与aligo的阿里云盘兑换码自动获取和兑换插件。",
- "author": "Kaguya233qwq",
- "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_alicdk_get",
- "tags": [
- {
- "label": "兑换码",
- "color": "#595fd6"
- },
- {
- "label": "auto",
- "color": "#595fd6"
- },
- {
- "label": "t:阿里云盘",
- "color": "#595fd6"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-09-29T08:46:59.973338Z",
- "version": "1.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_picstatus",
- "project_link": "nonebot-plugin-picstatus",
- "name": "PicStatus",
- "desc": "以图片形式显示当前设备的运行状态",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-picstatus",
- "tags": [
- {
- "label": "server",
- "color": "#8bff00"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "2.0.0.post2",
- "time": "2024-03-18T05:35:50.408893Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tuling",
- "project_link": "nonebot-plugin-tuling",
- "name": "图灵机器人",
- "desc": "接入图灵机器人做聊天",
- "author": "koking0",
- "homepage": "https://github.com/Matrix-King-Studio/nonebot_plugin_tuling",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-09-25T05:14:38.126012Z",
- "version": "0.0.16",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_makemidi",
- "project_link": "nonebot_plugin_makemidi",
- "name": "在线编曲",
- "desc": "发送简谱生成音乐",
- "author": "RandomEnch",
- "homepage": "https://github.com/RandomEnch/nonebot_plugin_makemidi",
- "tags": [
- {
- "label": "midi",
- "color": "#6515a8"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-27T08:43:45.256730Z",
- "version": "0.1.12",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ocr",
- "project_link": "nonebot-plugin-ocr",
- "name": "文字识别",
- "desc": "识别图片中的文字",
- "author": "NewYearPrism",
- "homepage": "https://github.com/NewYearPrism/nonebot-plugin-ocr",
- "tags": [
- {
- "label": "ocr ",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-07T00:32:07.509150Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_listener",
- "project_link": "nonebot-plugin-listener",
- "name": "监听者",
- "desc": "监听指定消息并转发到指定群",
- "author": "AbCooly",
- "homepage": "https://github.com/AbCooly/nonebot_plugin_listener",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-01T16:59:02.045755Z",
- "version": "1.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_BiliRequestAll",
- "project_link": "nonebot-plugin-BiliRequestAll",
- "name": "BiliRequestAll",
- "desc": "通过B站UID审核入群",
- "author": "Shadow403",
- "homepage": "https://github.com/Shadow403/nonebot_plugin_BiliRequestAll",
- "tags": [
- {
- "label": "bilibili",
- "color": "#ea52e9"
- },
- {
- "label": "request",
- "color": "#5eea52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.8",
- "time": "2023-11-05T14:48:57.579085Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_russian_ban",
- "project_link": "nonebot-plugin-russian-ban",
- "name": "轮盘禁言小游戏",
- "desc": "轮盘禁言小游戏,附送快捷禁言/解禁",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_russian_ban",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-04T15:02:29.961051Z",
- "version": "1.0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ygo_trade",
- "project_link": "nonebot-plugin-ygo-trade",
- "name": "游戏王小程序查价",
- "desc": "集换社游戏王的卡价查询",
- "author": "Kaguyaya",
- "homepage": "https://github.com/Kaguyaya/nonebot_plugin_ygo_trade",
- "tags": [
- {
- "label": "游戏王",
- "color": "#ea5252"
- },
- {
- "label": "YGO",
- "color": "#ea5252"
- },
- {
- "label": "集换社",
- "color": "#eada52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-10-11T02:59:10.924095Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_novelai",
- "project_link": "nonebot-plugin-novelai",
- "name": "novelai",
- "desc": "一个支持novelai、naifu、webui,支持中文功能丰富的ai绘图插件",
- "author": "sena-nana",
- "homepage": "https://github.com/sena-nana/nonebot-plugin-novelai",
- "tags": [
- {
- "label": "t:aidraw",
- "color": "#ffc646"
- },
- {
- "label": "t:naifu",
- "color": "#ffc646"
- },
- {
- "label": "t:webui",
- "color": "#ffc646"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-26T14:17:47.594948Z",
- "version": "0.5.9",
- "skip_test": false
- },
- {
- "module_name": "ayaka_games",
- "project_link": "ayaka_games",
- "name": "ayaka小游戏合集",
- "desc": "背包,签到,印加宝藏,接龙(原神/成语),谁是卧底,抢30,mana,加一秒,24点/48点,文字税,祈祷,原神随机事件",
- "author": "bridgeL",
- "homepage": "https://bridgel.github.io/ayaka_games/",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#0c0c0c"
- },
- {
- "label": "t:小游戏",
- "color": "#e36306"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-25T02:07:32.424128Z",
- "version": "0.4.1",
- "skip_test": false
- },
- {
- "module_name": "ayaka_timezone",
- "project_link": "nonebot-plugin-ayaka-timezone",
- "name": "ayaka衍生插件 - 时区助手",
- "desc": "提供不同时区时间询问服务",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-timezone",
- "tags": [
- {
- "label": "a:cqhttp",
- "color": "#000000"
- },
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:timezone",
- "color": "#e36306"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-30T02:41:21.580609Z",
- "version": "0.4.1",
- "skip_test": false
- },
- {
- "module_name": "ayaka_prevent_bad_words",
- "project_link": "nonebot-plugin-ayaka-prevent-bad-words",
- "name": "ayaka衍生插件 - 坏词撤回",
- "desc": "撤回有问题的发言",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-prevent-bad-words",
- "tags": [
- {
- "label": "a:cqhttp",
- "color": "#000000"
- },
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:撤回",
- "color": "#e36306"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-25T16:17:13.137593Z",
- "version": "0.4.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_savor",
- "project_link": "nonebot-plugin-savor",
- "name": "二次元图像鉴赏",
- "desc": "二次元图像分析",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-savor",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-07T18:19:20.688626Z",
- "version": "0.2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_kfcrazy",
- "project_link": "nonebot-plugin-kfcrazy",
- "name": "kfcrazy",
- "desc": "肯德基查询插件,输入地区即可查询全国店铺的数据,支持疯狂星期四",
- "author": "Kaguya233qwq",
- "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_kfcrazy",
- "tags": [
- {
- "label": "肯德基",
- "color": "#d93b3b"
- },
- {
- "label": "疯狂星期四",
- "color": "#e52124"
- },
- {
- "label": "KFC",
- "color": "#cb5c5e"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-14T07:18:05.859088Z",
- "version": "2.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-random",
- "project_link": "nonebot-plugin-random",
- "name": "通用抽图/语音",
- "desc": "Nonebot2 通用抽图/语音插件",
- "author": "jcjrobert",
- "homepage": "https://github.com/jcjrobert/nonebot-plugin-random",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-03T05:49:28.546486Z",
- "version": "0.0.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sqlalchemy",
- "project_link": "nonebot-plugin-sqlalchemy",
- "name": "NoneBot2 SQLAlchemy 插件",
- "desc": "为插件开发者提供简单的SQLAlchemy封装",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-sqlalchemy",
- "tags": [
- {
- "label": "sql",
- "color": "#ad1717"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.2",
- "time": "2023-07-20T03:51:36.974013Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_blacklist",
- "project_link": "nonebot-plugin-blacklist",
- "name": "黑名单",
- "desc": "黑名单插件",
- "author": "tkgs0",
- "homepage": "https://github.com/tkgs0/nonebot-plugin-blacklist",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.3.1",
- "time": "2024-02-21T16:24:01.035770Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_antiinsult",
- "project_link": "nonebot-plugin-antiinsult",
- "name": "反嘴臭",
- "desc": "反嘴臭插件",
- "author": "tkgs0",
- "homepage": "https://github.com/tkgs0/nonebot-plugin-antiinsult",
- "tags": [
- {
- "label": "被动",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.1",
- "time": "2024-02-21T16:59:04.055290Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_oddtext",
- "project_link": "nonebot-plugin-oddtext",
- "name": "文本生成器",
- "desc": "抽象话等多种文本生成",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-oddtext",
- "tags": [
- {
- "label": "RCNB!",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2023-06-21T14:35:22.216953Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mahjong_scoreboard",
- "project_link": "nonebot-plugin-mahjong-scoreboard",
- "name": "日麻寄分器",
- "desc": "为群友提供日麻计分及榜单统计功能",
- "author": "ssttkkl",
- "homepage": "https://github.com/ssttkkl/nonebot-plugin-mahjong-scoreboard",
- "tags": [
- {
- "label": "日麻",
- "color": "#4684d3"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qqguild"
- ],
- "valid": true,
- "version": "0.6.0",
- "time": "2023-09-08T18:13:18.403764Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cartoon",
- "project_link": "nonebot-plugin-cartoon",
- "name": "二次元化图像",
- "desc": "对三次元图像动漫化, 打开二次元的大门",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-cartoon",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-01T10:00:27.452979Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mahjong_utils",
- "project_link": "nonebot-plugin-mahjong-utils",
- "name": "麻将小工具",
- "desc": "手牌分析、番符点数查询、……",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-mahjong-utils",
- "tags": [
- {
- "label": "日麻",
- "color": "#edad34"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.5",
- "time": "2023-12-05T04:45:12.500654Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_animeres",
- "project_link": "nonebot-plugin-animeres",
- "name": "动漫资源插件",
- "desc": "根据关键字搜索动漫资源",
- "author": "Melodyknit",
- "homepage": "https://github.com/MelodyKnit/nonebot_plugin_animeres",
- "tags": [
- {
- "label": "anime",
- "color": "#ec5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.0.4",
- "time": "2023-11-17T12:49:29.527158Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-person",
- "project_link": "nonebot-plugin-person",
- "name": "随个人",
- "desc": "随个群友当幸运观众🤪",
- "author": "jcjrobert",
- "homepage": "https://github.com/jcjrobert/nonebot-plugin-person",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-15T02:18:32.344475Z",
- "version": "0.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_apex_api_query",
- "project_link": "nonebot-plugin-apex-api-query",
- "name": "Apex API Query",
- "desc": "Apex Legends API 查询插件",
- "author": "H-xiaoH",
- "homepage": "https://github.com/H-xiaoH/nonebot-plugin-apex-api-query",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "24.1.2",
- "time": "2024-01-02T13:23:43.569097Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_reborn",
- "project_link": "nonebot-plugin-reborn",
- "name": "投胎模拟器",
- "desc": "重生后你会到哪里?",
- "author": "Aziteee",
- "homepage": "https://github.com/Aziteee/nonebot_plugin_reborn",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-14T12:24:39.789332Z",
- "version": "0.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_searchBiliInfo",
- "project_link": "nonebot-plugin-searchBiliInfo",
- "name": "b站用户信息查询",
- "desc": "查询b站用户粉丝数、舰团信息;主播直播收益数据(总收益、礼物、SC、上舰);用户观看直播信息(观看、弹幕记录);通过关键词搜昵称、UID等",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_searchBiliInfo",
- "tags": [
- {
- "label": "bilibili",
- "color": "#e55d80"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-24T05:56:31.597811Z",
- "version": "1.8.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_colab_novelai",
- "project_link": "nonebot-plugin-colab-novelai",
- "name": "Colab-NovelAI",
- "desc": "解放你的双手,让Colab持续给你提供算力生产色图!",
- "author": "EtherLeaF",
- "homepage": "https://github.com/EtherLeaF/nonebot-plugin-colab-novelai",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:NovelAI",
- "color": "#eacd52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-11-21T06:00:40.942510Z",
- "version": "0.2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sky",
- "project_link": "nonebot-plugin-sky",
- "name": "Sky光遇",
- "desc": "光遇的每日任务及活动相关查询插件",
- "author": "Kaguya233qwq",
- "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_sky",
- "tags": [
- {
- "label": "光遇",
- "color": "#7ebdf0"
- },
- {
- "label": "攻略",
- "color": "#2079c1"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.2.12",
- "time": "2023-08-29T02:46:06.270032Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_zyk_novelai",
- "project_link": "nonebot-plugin-zyk-novelai",
- "name": "免费版NovelAI生图插件",
- "desc": "一个用于nonebot2的简约AI绘图插件。没有繁琐的使用指令,配置过程简单迅捷,代码简洁易懂,还有更多功能将会陆续加入。",
- "author": "ZYKsslm",
- "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_novelai",
- "tags": [
- {
- "label": "Free",
- "color": "#42e22f"
- },
- {
- "label": "Simple",
- "color": "#e2d92f"
- },
- {
- "label": "Novelai",
- "color": "#3e10e9"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-29T18:30:02.732845Z",
- "version": "2.9.5.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_repeep",
- "project_link": "nonebot-plugin-repeep",
- "name": "谁在窥屏",
- "desc": "用于获取QQ中当前窥屏用户信息",
- "author": "p0ise",
- "homepage": "https://github.com/p0ise/nonebot-plugin-repeep",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-25T11:27:22.670017Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gscode",
- "project_link": "nonebot-plugin-gscode",
- "name": "原神前瞻直播兑换码查询",
- "desc": "原神前瞻直播兑换码查询,数据来自米哈游官方接口",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-gscode",
- "tags": [
- {
- "label": "t:Genshin",
- "color": "#ffd49f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-17T00:47:03.313876Z",
- "version": "0.2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_note",
- "project_link": "nonebot-plugin-note",
- "name": "记事本",
- "desc": "一个有提醒功能的记事本",
- "author": "Passerby-D",
- "homepage": "https://github.com/Passerby-D/nonebot_plugin_note",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-31T21:52:41.397684Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-bilibili-image",
- "project_link": "nonebot-plugin-bilibili-image",
- "name": "b站图片下载",
- "desc": "b站封面提取,动态图片/专栏图片下载",
- "author": "jcjrobert",
- "homepage": "https://github.com/jcjrobert/nonebot-plugin-bilibili-image",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-02T13:29:23.983038Z",
- "version": "0.0.2.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_trace_moe",
- "project_link": "nonebot-plugin-trace-moe",
- "name": "动画截图追溯来源",
- "desc": "调用trace.moe的API查询动画截图源自的作品名和时间段",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_trace_moe",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#191919"
- },
- {
- "label": "t:trace",
- "color": "#191919"
- },
- {
- "label": "t:image",
- "color": "#00a0ff"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-23T06:59:22.061485Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_zyk_music",
- "project_link": "nonebot-plugin-zyk-music",
- "name": "免费快捷点歌插件",
- "desc": "一个用于nonebot2的点歌插件。操作简单粗暴,交互简洁易懂.",
- "author": "ZYKsslm",
- "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_music",
- "tags": [
- {
- "label": "Free",
- "color": "#26d019"
- },
- {
- "label": "Simple",
- "color": "#b8c10d"
- },
- {
- "label": "Music",
- "color": "#0d92c1"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-29T20:24:24.553805Z",
- "version": "0.1.7.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatgpt",
- "project_link": "nonebot-plugin-chatgpt",
- "name": "ChatGPT",
- "desc": "AI 聊天对话",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-chatgpt",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-12T08:10:27.798634Z",
- "version": "0.7.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_majsoul",
- "project_link": "nonebot-plugin-majsoul",
- "name": "雀魂查询",
- "desc": "根据牌谱屋的数据查询雀魂账号信息",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-majsoul",
- "tags": [
- {
- "label": "majsoul",
- "color": "#e54141"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qqguild",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.5",
- "time": "2023-09-28T17:31:31.806098Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_remove_bg",
- "project_link": "nonebot-plugin-remove-bg",
- "name": "图片背景消除",
- "desc": "适用于onebot v11的基于remove.bg的图片背景消除插件",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_remove_bg",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:img",
- "color": "#111111"
- },
- {
- "label": "t:removeBG",
- "color": "#7a7a7a"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-28T14:59:42.169057Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_broadcast",
- "project_link": "nonebot-plugin-broadcast",
- "name": "全群广播",
- "desc": "将你的消息广播到全部群聊中",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-broadcast",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-07T15:42:04.646013Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_exchangerate",
- "project_link": "nonebot-plugin-exchangerate",
- "name": "汇率换算",
- "desc": "支持汇率换算与汇率查询",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-exchangerate",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-11T05:42:07.616093Z",
- "version": "0.1.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_access_control",
- "project_link": "nonebot-plugin-access-control",
- "name": "权限控制",
- "desc": "对功能进行权限控制以及调用次数限制",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-access-control",
- "tags": [
- {
- "label": "权限控制",
- "color": "#0e9763"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram",
- "nonebot.adapters.villa"
- ],
- "valid": true,
- "version": "1.1.5",
- "time": "2023-11-26T15:18:22.566495Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_colormind",
- "project_link": "nonebot-plugin-colormind",
- "name": "随机配色方案",
- "desc": "调用colormind.io的API随机获取一种配色方案",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_colormind",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:color",
- "color": "#ffffff"
- },
- {
- "label": "t:配色",
- "color": "#fbff03"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-14T03:06:59.760280Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_abstain_diary",
- "project_link": "nonebot-plugin-abstain-diary",
- "name": "戒x打卡日记",
- "desc": "适用于onebot v11的戒x打卡日记插件。用户可以自定义戒的内容。财能使人贪,色能使人嗜,名能使人矜,潜能使人倚,四患既都去,岂在浮尘里。",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_abstain_diary",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:戒",
- "color": "#ffffff"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-09-14T01:07:53.526240Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_backup",
- "project_link": "nonebot-plugin-backup",
- "name": "QQ群文件备份",
- "desc": "备份qq群文件",
- "author": "Yuelioi",
- "homepage": "https://github.com/Yuelioi/nonebot-plugin-backup",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-06T11:42:56.034628Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_kuma_san",
- "project_link": "nonebot-plugin-kuma-san",
- "name": "熊老板",
- "desc": "用于查询斯普拉遁3场地信息的 NoneBot2 插件",
- "author": "ReiiNoki",
- "homepage": "https://github.com/ReiiNoki/nonebot-plugin-kuma-san",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-03T06:43:46.968063Z",
- "version": "1.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gpt3",
- "project_link": "nonebot-plugin-gpt3",
- "name": "GPT3",
- "desc": "openai官方api的会话插件",
- "author": "chrisyy2003",
- "homepage": "https://github.com/chrisyy2003/nonebot-plugin-gpt3",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-23T04:12:19.524328Z",
- "version": "1.1.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ikun_evolution",
- "project_link": "nonebot-plugin-ikun-evolution",
- "name": "只因进化录",
- "desc": "q群挂机小游戏。开局一只因,进化全靠吞",
- "author": "RShock",
- "homepage": "https://github.com/RShock/nonebot_plugin_ikun_evolution",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-03T03:56:19.261340Z",
- "version": "1.0.12",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_random_ban",
- "project_link": "nonebot-plugin-random-ban",
- "name": "随机禁言",
- "desc": "适用于onebot v11的随机禁言一名群员或自己n分钟(n通过传入数字然后随机实现)",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_ban",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:禁言",
- "color": "#020202"
- },
- {
- "label": "t:ban",
- "color": "#ffffff"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-09T11:06:42.054060Z",
- "version": "0.2.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_antirecall",
- "project_link": "nonebot-plugin-antirecall",
- "name": "防撤回",
- "desc": "防撤回",
- "author": "Jerry080801",
- "homepage": "https://github.com/Jerry080801/nonebot-plugin-antirecall/",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-26T10:52:50.612059Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mc_server_status",
- "project_link": "nonebot-plugin-mc-server-status",
- "name": "Minecraft服务器信息查询",
- "desc": "支持Java和基岩服务器",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_mc_server_status",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#a438cd"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-01T02:19:03.062931Z",
- "version": "0.2.10",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_no_repeat",
- "project_link": "nonebot-plugin-no-repeat",
- "name": "不要复读",
- "desc": "防止代码炸了在群里复读刷屏,让你写插件的时候更安全",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/nonebot-plugin-no-repeat",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-22T03:21:17.798671Z",
- "version": "0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bfchat",
- "project_link": "nonebot-plugin-bfchat",
- "name": "战地群聊天插件",
- "desc": "群内绑定战地一/五账号,快速查询战地战绩,查看服务器信息",
- "author": "050644zf",
- "homepage": "https://github.com/050644zf/nonebot-plugin-bfchat",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-31T10:55:28.710075Z",
- "version": "0.3.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_summon",
- "project_link": "nonebot-plugin-summon",
- "name": "群友召唤术",
- "desc": "群友召唤术",
- "author": "zhulinyv",
- "homepage": "https://github.com/zhulinyv/nonebot_plugin_summon",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-11T01:13:48.927791Z",
- "version": "2.5.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ping",
- "project_link": "nonebot-plugin-ping",
- "name": "Ping",
- "desc": "调用api,获取网站信息",
- "author": "zhulinyv",
- "homepage": "https://github.com/zhulinyv/nonebot_plugin_ping",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-14T06:47:15.299741Z",
- "version": "1.7.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_face2cartoonpic",
- "project_link": "nonebot_plugin_face2cartoonpic",
- "name": "腾讯云图像变换",
- "desc": "✨基于腾讯云合成图的以图绘图的Nonebot插件✨",
- "author": "ANGJustinl",
- "homepage": "https://github.com/ANGJustinl/nonebot_plugin_face2cartoonpic_main",
- "tags": [
- {
- "label": "以图绘图",
- "color": "#72f15e"
- },
- {
- "label": "腾讯云",
- "color": "#3785f1"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-30T13:37:47.581572Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_servicestate",
- "project_link": "nonebot-plugin-servicestate",
- "name": "服务状态查询",
- "desc": "API服务状态监测",
- "author": "OREOCODEDEV",
- "homepage": "https://github.com/OREOCODEDEV/nonebot-plugin-servicestate",
- "tags": [
- {
- "label": "api",
- "color": "#52ea7f"
- },
- {
- "label": "state",
- "color": "#52cfea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.1",
- "time": "2023-09-11T07:21:59.505055Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_animalVoice",
- "project_link": "nonebot-plugin-animalVoice",
- "name": "AnimalVoice_Convert",
- "desc": "✨支持切噜语和兽语的Nonebot译者插件✨",
- "author": "ANGJustinl",
- "homepage": "https://github.com/ANGJustinl/nonebot_plugin_animalVoice/",
- "tags": [
- {
- "label": "切噜语~",
- "color": "#e75f9d"
- },
- {
- "label": "兽语",
- "color": "#5fe5e7"
- },
- {
- "label": "加密语言",
- "color": "#79e556"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2022-12-29T09:42:07.126510Z",
- "version": "0.0.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ayaka_scan_cmd",
- "project_link": "nonebot-plugin-ayaka-scan-cmd",
- "name": "命令探查",
- "desc": "命令探查,缓解下载了新插件却不会使用的焦虑",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-scan-cmd",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "t:命令探查",
- "color": "#e36306"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-15T09:34:25.444769Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_HttpCat",
- "project_link": "nonebot-plugin-HttpCat",
- "name": "HttpCat🐱猫猫http状态码",
- "desc": "✨Nonebot猫猫http状态码插件✨",
- "author": "ANGJustinl",
- "homepage": "https://github.com/ANGJustinl/nonebot_plugin_HttpCat",
- "tags": [
- {
- "label": "HttpCat",
- "color": "#1f4ddc"
- },
- {
- "label": "http状态码",
- "color": "#dc1f1f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-03T01:58:02.756214Z",
- "version": "0.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_revoke",
- "project_link": "nonebot-plugin-revoke",
- "name": "主动消息撤回",
- "desc": "让机器人撤回自己发出的消息",
- "author": "ssttkkl",
- "homepage": "https://github.com/ssttkkl/nonebot-plugin-revoke",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:gocqhttp",
- "color": "#52ea95"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-03T06:02:45.041053Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_setu_customization",
- "project_link": "nonebot-plugin-setu-customization",
- "name": "setu_customization",
- "desc": "可动态管理API并带网页浏览的setu插件",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_setu_customization",
- "tags": [
- {
- "label": "色图",
- "color": "#e9ea52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-31T08:46:11.225617Z",
- "version": "1.7.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_l4d2_server",
- "project_link": "nonebot-plugin-l4d2-server",
- "name": "求生之路小助手",
- "desc": "可用于管理求生之路查服和本地管理",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_l4d2_server",
- "tags": [
- {
- "label": "l4d2",
- "color": "#05ff00"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.6.6",
- "time": "2024-03-03T14:27:28.652529Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_learning_chat",
- "project_link": "nonebot-plugin-learning-chat",
- "name": "群聊学习",
- "desc": "学习群友们的发言、复读以及主动发言",
- "author": "CMHopeSunshine",
- "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-learning-chat",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.4.0",
- "time": "2023-08-27T03:07:38.424515Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_couplets",
- "project_link": "nonebot-plugin-couplets",
- "name": "对对联",
- "desc": "人工智能和你对对联",
- "author": "CMHopeSunshine",
- "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-couplets",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2023-06-17T07:46:34.256373Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_Imagelabels",
- "project_link": "nonebot-plugin-Imagelabels",
- "name": "图像标注",
- "desc": "基于yolov5的图像标注插件",
- "author": "istrashguy",
- "homepage": "https://github.com/istrashguy/nonebot_plugin_Imagelabels",
- "tags": [
- {
- "label": "Yolov5",
- "color": "#9a2828"
- },
- {
- "label": "图像标注",
- "color": "#e981dc"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-16T12:19:09.803532Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cloudsignx",
- "project_link": "nonebot-plugin-cloudsignx",
- "name": "云签到",
- "desc": "基于云端的签到,所有插件使用者数据互通",
- "author": "Monarchdos",
- "homepage": "https://github.com/Monarchdos/nonebot_plugin_cloudsign",
- "tags": [
- {
- "label": "a:云签到",
- "color": "#2be491"
- },
- {
- "label": "a:数据互通",
- "color": "#3be42b"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-10T07:51:17.175075Z",
- "version": "2.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_imgexploration",
- "project_link": "nonebot-plugin-imgexploration",
- "name": "查找图片出处",
- "desc": "通过saucenao、ascii2d、Google、Yandx查询图片出处",
- "author": "cpuopt",
- "homepage": "https://github.com/cpuopt/nonebot_plugin_imgexploration",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#ea5252"
- },
- {
- "label": "t:搜图",
- "color": "#453df1"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-05T11:01:46.527196Z",
- "version": "0.3.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hypixel",
- "project_link": "nonebot-plugin-hypixel",
- "name": "Hypixel数据查询",
- "desc": "查询Hypixel的数据",
- "author": "SkyDynamic",
- "homepage": "https://github.com/SkyDynamic/nonebot_plugin_hypixel",
- "tags": [
- {
- "label": "MC",
- "color": "#6fea52"
- },
- {
- "label": "Hypixel",
- "color": "#d5ea52"
- },
- {
- "label": "Hyp",
- "color": "#d5ea52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-06T06:58:09.032239Z",
- "version": "1.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nowtime",
- "project_link": "nonebot-plugin-nowtime",
- "name": "整点报时",
- "desc": "每时每刻正点报时",
- "author": "Cvandia",
- "homepage": "https://github.com/Cvandia/nonebot_plugin_nowtime",
- "tags": [
- {
- "label": "整点报时",
- "color": "#5eea52"
- },
- {
- "label": "语音",
- "color": "#c84fdb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2023-06-19T08:56:04.577230Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cave",
- "project_link": "nonebot-plugin-cave",
- "name": "回声洞",
- "desc": "PCL2内群的回声洞,添加了审核功能。",
- "author": "hmzz804",
- "homepage": "https://github.com/hmzz804/nonebot_plugin_cave",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-17T16:30:06.762833Z",
- "version": "1.1.12",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_xingzuo",
- "project_link": "nonebot-plugin-xingzuo",
- "name": "星座运势",
- "desc": "返回星座的运势",
- "author": "mengxinyuan638",
- "homepage": "https://github.com/mengxinyuan638/xingzuo_luck",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-12T11:59:03.454555Z",
- "version": "1.0.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_BingImage",
- "project_link": "nonebot-plugin-BingImage",
- "name": "Bing每日图片获取",
- "desc": "获取Bing每日一图",
- "author": "ericzhang-debug",
- "homepage": "https://github.com/ericzhang-debug/nonebot_plugin_BingImage",
- "tags": [
- {
- "label": "风景图",
- "color": "#0ce354"
- },
- {
- "label": "Bing",
- "color": "#0c43e3"
- },
- {
- "label": "必应",
- "color": "#eddf13"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-09T11:19:52.574462Z",
- "version": "0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_soup",
- "project_link": "nonebot-plugin-soup",
- "name": "心灵鸡汤",
- "desc": "来一碗心灵鸡汤吧",
- "author": "Monarchdos",
- "homepage": "https://github.com/Monarchdos/nonebot_plugin_soup",
- "tags": [
- {
- "label": "心灵鸡汤",
- "color": "#52eaea"
- },
- {
- "label": "鸡汤",
- "color": "#ea529a"
- },
- {
- "label": "毒鸡汤",
- "color": "#604a55"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-11T08:47:29.519685Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_yuanshen_notice",
- "project_link": "nonebot-plugin-yuanshen-notice",
- "name": "原神实时公告",
- "desc": "实时展示官网最新前20条公告",
- "author": "mengxinyuan638",
- "homepage": "https://github.com/mengxinyuan638/nonebot_plugin_yuanshen_notice",
- "tags": [
- {
- "label": "原神",
- "color": "#ef3700"
- },
- {
- "label": "公告",
- "color": "#00ef04"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-19T06:33:34.236263Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilibili_yuan",
- "project_link": "nonebot-plugin-bilibili-yuan",
- "name": "哔哩哔哩q群登录",
- "desc": "实现哔哩哔哩q群登录的插件",
- "author": "mengxinyuan638",
- "homepage": "https://github.com/mengxinyuan638/nonebot-plugin-bilibili-yuan",
- "tags": [
- {
- "label": "bilibili",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-15T02:59:19.623264Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_easy_translate",
- "project_link": "nonebot-plugin-easy-translate",
- "name": "简易谷歌翻译插件",
- "desc": "免api key简单谷歌翻译插件",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_easy_translate",
- "tags": [
- {
- "label": "翻译",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-27T16:34:04.994806Z",
- "version": "0.2.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_orangedice",
- "project_link": "nonebot-plugin-orangedice",
- "name": "orange_dice",
- "desc": "具有技能鉴定、人物卡、日志记录的COC用插件",
- "author": "BigOrangeQWQ",
- "homepage": "https://github.com/BigOrangeQWQ/nonebot_plugin_orangedice",
- "tags": [
- {
- "label": "dice",
- "color": "#08c0bb"
- },
- {
- "label": "COC",
- "color": "#a2bc0c"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.9",
- "time": "2023-08-03T09:34:33.704052Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_record",
- "project_link": "nonebot-plugin-record",
- "name": "语音功能",
- "desc": "语音功能适配插件,包括语音事件响应器,语音识别、语音合成等功能",
- "author": "itsevin",
- "homepage": "https://github.com/itsevin/nonebot_plugin_record",
- "tags": [
- {
- "label": "t:语音",
- "color": "#fff35d"
- },
- {
- "label": "语音识别",
- "color": "#37c0f6"
- },
- {
- "label": "语音事件响应器",
- "color": "#18e13c"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-09T01:43:43.587003Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nya_cook_menu",
- "project_link": "nonebot-plugin-nya-cook-menu",
- "name": "喵喵自记菜谱",
- "desc": "记录生活中的小菜谱",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_nya_cook_menu",
- "tags": [
- {
- "label": "菜谱",
- "color": "#e65de5"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-01T02:19:38.388337Z",
- "version": "0.1.6",
- "skip_test": false
- },
- {
- "module_name": "criminal_dance",
- "project_link": "criminal-dance",
- "name": "犯人在跳舞",
- "desc": "文字版桌游,犯人在跳舞",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/criminal_dance",
- "tags": [
- {
- "label": "t:文字版桌游",
- "color": "#e36306"
- },
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-15T09:23:15.318321Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_picmcstat",
- "project_link": "nonebot-plugin-picmcstat",
- "name": "PicMCStat",
- "desc": "将一个 Minecraft 服务器的 MOTD 信息绘制为一张图片",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-picmcstat",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#7fbf55"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.0",
- "time": "2024-03-10T07:01:59.615461Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wantwords",
- "project_link": "nonebot-plugin-wantwords",
- "name": "反向词典",
- "desc": "在nonebot使用wantwords反向词典",
- "author": "Limnium",
- "homepage": "https://github.com/limnium/nonebot_plugin_wantwords",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-22T04:55:16.216491Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pvz",
- "project_link": "nonebot-plugin-pvz",
- "name": "植物大战僵尸小游戏",
- "desc": "通过签到获取金币购买植物或者僵尸,放置植物在草坪上抵御入侵,或者进行僵尸入侵来吃掉别人的脑子",
- "author": "longchengguxiao",
- "homepage": "https://github.com/longchengguxiao/nonebot_plugin_pvz",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-02T04:25:36.126660Z",
- "version": "1.3.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_molar_mass",
- "project_link": "nonebot-plugin-molar-mass",
- "name": "摩尔质量计算器",
- "desc": "帮助中学生计算摩尔质量或相对分子质量的小工具。",
- "author": "kifuan",
- "homepage": "https://github.com/kifuan/nonebot-plugin-molar-mass",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-19T03:38:01.096308Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_report_manager",
- "project_link": "nonebot-plugin-report-manager",
- "name": "对话超管",
- "desc": "群员通过Bot对话超管",
- "author": "Hiroshi12138",
- "homepage": "https://github.com/Hiroshi12138/nonebot_plugin_report_manager",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#a95454"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-14T08:51:38.642705Z",
- "version": "0.2.3",
- "skip_test": false
- },
- {
- "module_name": "qinglan_bot",
- "project_link": "qinglan-bot",
- "name": "青岚Bot",
- "desc": "基于NoneBot的与Minecraft Server互通消息的机器人",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/qinglan_bot",
- "tags": [
- {
- "label": "MineCraft",
- "color": "#4ef0ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.6",
- "time": "2023-10-08T03:43:01.150609Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_easy_group_manager",
- "project_link": "nonebot-plugin-easy-group-manager",
- "name": "简易群管女生自用99新",
- "desc": "简单的群管插件,BOT不是群主也可以设置管理员啦……",
- "author": "zhulinyv",
- "homepage": "https://github.com/zhulinyv/nonebot_plugin_easy_group_manager",
- "tags": [
- {
- "label": "群管",
- "color": "#1eb262"
- },
- {
- "label": "女生自用",
- "color": "#b21e82"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-25T12:00:28.775065Z",
- "version": "0.4.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_group_link_guild",
- "project_link": "nonebot-plugin-group-link-guild",
- "name": "群频互通",
- "desc": "将QQ群与QQ频道的消息互通",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/nonebot-plugin-group-link-guild",
- "tags": [
- {
- "label": "QQ群",
- "color": "#ea5252"
- },
- {
- "label": "QQ频道",
- "color": "#52ead5"
- },
- {
- "label": "消息互通",
- "color": "#50c545"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.6",
- "time": "2023-06-26T03:57:16.165943Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-mcport",
- "project_link": "nonebot-plugin-mcport",
- "name": "nonebot-plugin-mcport",
- "desc": "我的世界JAVA服务器通过RCON连接远程执行命令",
- "author": "Proviasw",
- "homepage": "https://github.com/Proviasw/nonebot-plugin-mcport",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-25T00:13:37.434017Z",
- "version": "0.1.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_xdu_support",
- "project_link": "nonebot_plugin_xdu_support",
- "name": "XDU校园服务",
- "desc": "Nonebot2插件,提供基础的西电校园服务,如课表提醒,体育打卡查询及提醒,晨午晚检打卡和马原测试等功能。",
- "author": "longchengguxiao",
- "homepage": "https://github.com/longchengguxiao/nonebot_plugin_xdu_support",
- "tags": [
- {
- "label": "大学校园",
- "color": "#52b5ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-13T05:03:08.357179Z",
- "version": "0.6.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_zyk_lightNVL",
- "project_link": "nonebot-plugin-zyk-lightNVL",
- "name": "查找轻小说",
- "desc": "基于哔哩轻小说网站的爬虫插件",
- "author": "ZYKsslm",
- "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_lightNVL",
- "tags": [
- {
- "label": "轻小说",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-02T13:17:07.498476Z",
- "version": "0.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dog",
- "project_link": "nonebot-plugin-dog",
- "name": "dog",
- "desc": "随机返回一句舔狗日记...嘤嘤嘤和其他文案的插件",
- "author": "Reversedeer",
- "homepage": "https://github.com/Reversedeer/nonebot_plugin_dog",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.1",
- "time": "2024-01-08T06:15:02.503507Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_uuid",
- "project_link": "nonebot-plugin-uuid",
- "name": "uuid生成器",
- "desc": "通过 uuid4 与 uuid5 生成 uuid ,并且支持快速去除短横线",
- "author": "ZombieFly",
- "homepage": "https://github.com/ZombieFly/nonebot-plugin-uuid",
- "tags": [
- {
- "label": "工具",
- "color": "#39c5bb"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-01-30T04:32:08.179665Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_naturel_gpt",
- "project_link": "nonebot-plugin-naturel-gpt",
- "name": "更人性化的GPT-Ai聊天插件",
- "desc": "一个基于NoneBot框架的Ai聊天插件,对接OpenAi文本生成接口,优化了群聊场景的上下文支持。",
- "author": "KroMiose",
- "homepage": "https://github.com/KroMiose/nonebot_plugin_naturel_gpt",
- "tags": [
- {
- "label": "GPT3",
- "color": "#66ccff"
- },
- {
- "label": "OpenAi",
- "color": "#cc66ff"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-23T19:19:12.265714Z",
- "version": "2.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_impact",
- "project_link": "nonebot-plugin-impact",
- "name": "impact",
- "desc": "让群友们眼前一黑的nonebot2淫趴插件",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/nonebot_plugin_impact",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.12.114514",
- "time": "2024-03-20T14:46:34.935208Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcping",
- "project_link": "nonebot-plugin-mcping",
- "name": "MC Ping",
- "desc": "获取 Minecraft JE/BE 服务器 Motd 图片信息",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/nonebot-plugin-mcping",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#47d754"
- },
- {
- "label": "服务器状态",
- "color": "#d7cd47"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.4",
- "time": "2023-06-18T16:58:48.573827Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_b23",
- "project_link": "nonebot-plugin-b23",
- "name": "B站热搜",
- "desc": "获取B站热搜(移动端)",
- "author": "eya46",
- "homepage": "https://github.com/eya46/nonebot_plugin_b23",
- "tags": [
- {
- "label": "bilibili",
- "color": "#00aeec"
- },
- {
- "label": "热搜",
- "color": "#00aeec"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.3.0",
- "time": "2024-02-12T14:49:36.387789Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_autoreply",
- "project_link": "nonebot-plugin-autoreply",
- "name": "AutoReply",
- "desc": "配置文件高度可自定义的自动回复插件",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-autoreply",
- "tags": [
- {
- "label": "自动回复",
- "color": "#ea881e"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.12.post1",
- "time": "2024-03-10T21:11:37.771261Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_setu_collection",
- "project_link": "nonebot-plugin-setu-collection",
- "name": "我要一张xx涩图",
- "desc": "从多个api获取色图并根据场景整合的色图插件",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_setu_collection",
- "tags": [
- {
- "label": "LoliconAPI",
- "color": "#5adba8"
- },
- {
- "label": "色图",
- "color": "#7ab2e1"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-16T05:46:37.619907Z",
- "version": "0.1.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_groupmate_waifu",
- "project_link": "nonebot-plugin-groupmate-waifu",
- "name": "娶群友",
- "desc": "娶群友",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_groupmate_waifu",
- "tags": [
- {
- "label": "娶群友",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-06T04:59:20.542238Z",
- "version": "1.3.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_jrrp2",
- "project_link": "nonebot-plugin-jrrp2",
- "name": "每日人品2",
- "desc": "带数据库可查询历史平均人品的jrrp插件",
- "author": "Rene8028",
- "homepage": "https://github.com/Rene8028/nonebot_plugin_jrrp2",
- "tags": [
- {
- "label": "每日人品",
- "color": "#ea5252"
- },
- {
- "label": "jrrp",
- "color": "#5290ea"
- },
- {
- "label": "jrrp2",
- "color": "#52bbea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-26T10:59:34.202680Z",
- "version": "1.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dicky_pk",
- "project_link": "nonebot-plugin-dicky-pk",
- "name": "DickyPK",
- "desc": "移植自OPQBot的群聊小游戏 CHINCHIN-PK",
- "author": "tkgs0",
- "homepage": "https://github.com/tkgs0/nonebot-plugin-dicky-pk",
- "tags": [
- {
- "label": "a:onebot11",
- "color": "#000000"
- },
- {
- "label": "t:群聊小游戏",
- "color": "#ffd500"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-02-22T03:54:09.830355Z",
- "version": "0.5.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_eventmonitor",
- "project_link": "nonebot-plugin-eventmonitor",
- "name": "eventmonitor",
- "desc": "监控群事件的插件,支持戳一戳,成员变动,群荣誉变化等提示的插件",
- "author": "Reversedeer",
- "homepage": "https://github.com/Reversedeer/nonebot_plugin_eventmonitor",
- "tags": [
- {
- "label": "QQGroup",
- "color": "#2885c0"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.1",
- "time": "2024-01-08T16:11:22.263521Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_whateat_pic",
- "project_link": "nonebot-plugin-whateat-pic",
- "name": "今天吃喝什么呢",
- "desc": "随机推荐吃的和喝的",
- "author": "Cvandia",
- "homepage": "https://github.com/Cvandia/nonebot-plugin-whateat-pic",
- "tags": [
- {
- "label": "吃什么",
- "color": "#e4ea52"
- },
- {
- "label": "喝什么",
- "color": "#52ea8b"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.1.7",
- "time": "2023-08-21T08:57:18.767121Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_matcher_block",
- "project_link": "nonebot-plugin-matcher-block",
- "name": "通用指令阻断",
- "desc": "可以为指令添加cd,或在该群屏蔽,支持正则",
- "author": "KarisAya",
- "homepage": "https://github.com/KarisAya/nonebot_plugin_matcher_block",
- "tags": [
- {
- "label": "指令阻断",
- "color": "#525fea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-20T08:31:44.747967Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_acm_reminder",
- "project_link": "nonebot-plugin-acm-reminder",
- "name": "ACMReminder",
- "desc": "获取CF/牛客等平台的竞赛信息的插件",
- "author": "BigOrangeQWQ",
- "homepage": "https://github.com/BigOrangeQWQ/nonebot_plugin_acm_reminder",
- "tags": [
- {
- "label": "ACM",
- "color": "#3b8b74"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-15T11:31:08.159916Z",
- "version": "0.1.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_maimai",
- "project_link": "nonebot-plugin-maimai",
- "name": "舞萌maimai",
- "desc": "适用nonebot2的Maimai插件",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/maimai_plugin",
- "tags": [
- {
- "label": "maimai",
- "color": "#5262ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.4.4.post1",
- "time": "2023-10-30T03:17:10.051088Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_all4one",
- "project_link": "nonebot-plugin-all4one",
- "name": "OneBot 实现",
- "desc": "让 NoneBot2 成为 OneBot 实现!",
- "author": "j1g5awi",
- "homepage": "https://github.com/nonepkg/nonebot-plugin-all4one",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qqguild",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.0a3",
- "time": "2023-06-20T14:59:24.276312Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gsabyss",
- "project_link": "nonebot-plugin-gsabyss",
- "name": "原神深境螺旋数据查询",
- "desc": "原神深渊讨伐列表、渊月祝福、玩家战斗统计等信息查询,数据来自 Honey Hunter World 和 Akasha Database",
- "author": "monsterxcn",
- "homepage": "https://github.com/monsterxcn/nonebot-plugin-gsabyss",
- "tags": [
- {
- "label": "t:Genshin",
- "color": "#ffd49f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-03T07:00:47.175755Z",
- "version": "0.1.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_arktools",
- "project_link": "nonebot-plugin-arktools",
- "name": "明日方舟工具箱",
- "desc": "基于 OneBot 适配器的 NoneBot2 明日方舟小工具箱插件",
- "author": "NumberSir",
- "homepage": "https://github.com/NumberSir/nonebot_plugin_arktools",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "arknights",
- "color": "#22bbff"
- },
- {
- "label": "t:game",
- "color": "#db905e"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-04T05:16:51.388596Z",
- "version": "1.2.0",
- "skip_test": false
- },
- {
- "module_name": "gartic_room",
- "project_link": "nonebot-plugin-gartic-room",
- "name": "你画我猜组队",
- "desc": "自动创建gartic房间,主题为综合,将房间链接发送到群聊",
- "author": "bridgeL",
- "homepage": "https://github.com/bridgeL/gartic_room",
- "tags": [
- {
- "label": "ayaka",
- "color": "#e36306"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-15T12:14:20.052354Z",
- "version": "0.0.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-resolver",
- "project_link": "nonebot-plugin-resolver",
- "name": "链接分享解析器",
- "desc": "适用于nonebot2 解析视频、图片链接/小程序插件,tiktok、bilibili、twitter、xhs等实时发送!",
- "author": "zhiyu1998",
- "homepage": "https://github.com/zhiyu1998/nonebot-plugin-resolver",
- "tags": [
- {
- "label": "bilibili",
- "color": "#f8a5c2"
- },
- {
- "label": "tiktok",
- "color": "#303952"
- },
- {
- "label": "twitter",
- "color": "#1b9cfc"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-27T06:15:19.259340Z",
- "version": "1.0.13",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bing_chat",
- "project_link": "nonebot-plugin-bing-chat",
- "name": "Bing Chat",
- "desc": "使用新版必应的聊天功能",
- "author": "Harry-Jing",
- "homepage": "https://github.com/Harry-Jing/nonebot-plugin-bing-chat",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-20T10:28:15.689700Z",
- "version": "0.7.11",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_saa",
- "project_link": "nonebot-plugin-send-anything-anywhere",
- "name": "峯驰物流",
- "desc": "一个帮助处理不同 adapter 消息的适配和发送的插件 ",
- "author": "felinae98",
- "homepage": "https://send-anything-anywhere.felinae98.cn/",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.6.0",
- "time": "2024-02-23T02:25:20.661005Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_random_stereotypes",
- "project_link": "nonebot-plugin-random-stereotypes",
- "name": "发病语录",
- "desc": "对输入的人,随机返回一条本地的发病语录",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_stereotypes",
- "tags": [
- {
- "label": "语录",
- "color": "#6a6060"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-02-14T11:01:27.302388Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_xiuxian_2",
- "project_link": "nonebot_plugin_xiuxian_2",
- "name": "修仙_2.0",
- "desc": "基于原版修仙的修改与重构",
- "author": "QingMuCat",
- "homepage": "https://github.com/QingMuCat/nonebot_plugin_xiuxian_2.0",
- "tags": [
- {
- "label": "文游",
- "color": "#ea5252"
- },
- {
- "label": "修仙",
- "color": "#4e9f9f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-05T13:42:32.700880Z",
- "version": "2.9.2.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_h2e",
- "project_link": "nonebot-plugin-h2e",
- "name": "呆呆兽都会起来锻炼 H2E",
- "desc": "类似\"今天吃什么\"的一个插件,通过命令返回健身、游泳、瑜伽的锻炼方式啦",
- "author": "Gin2O",
- "homepage": "https://github.com/Gin2O/nonebot_plugin_h2e",
- "tags": [
- {
- "label": "锻炼",
- "color": "#da4a4a"
- },
- {
- "label": "t:what2eat",
- "color": "#99da4a"
- },
- {
- "label": "t: how2exe",
- "color": "#99da4a"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-23T15:18:39.471059Z",
- "version": "0.1.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_oachat",
- "project_link": "nonebot-plugin-oachat",
- "name": "呆呆兽都会用的chatbot接api",
- "desc": "没有上下文语境的简易chatbot,调用openai API",
- "author": "Gin2O",
- "homepage": "https://github.com/Gin2O/nonebot_plugin_oachat",
- "tags": [
- {
- "label": "OpenAI",
- "color": "#ea5252"
- },
- {
- "label": "GPT3",
- "color": "#ea5252"
- },
- {
- "label": "ChatBot",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-04T16:28:15.886299Z",
- "version": "0.1.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_warframe_mode",
- "project_link": "nonebot-plugin-warframe-mode",
- "name": "wf的wm市场",
- "desc": "warframe游戏的WM市场查询",
- "author": "mmxd12",
- "homepage": "https://github.com/mmxd12/nonebot_plugin_warframe_mode",
- "tags": [
- {
- "label": "星际战甲",
- "color": "#ea5252"
- },
- {
- "label": "warframe",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-07T02:34:08.571246Z",
- "version": "1.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bf1_groptools",
- "project_link": "nonebot-plugin-bf1-groptools",
- "name": "战地一入群审批",
- "desc": "战地一通过游戏id的入群审核并其修改群名片为id",
- "author": "zzcqie666",
- "homepage": "https://github.com/zzcqie666/nonebot_plugin_bf1_groptools",
- "tags": [
- {
- "label": "战地一",
- "color": "#52eae4"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-26T02:09:33.525641Z",
- "version": "0.0.13",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_afd",
- "project_link": "nonebot-plugin-afd",
- "name": "爱发电进群审核",
- "desc": "审核入群信息判断是否同意进群",
- "author": "17TheWord",
- "homepage": "https://github.com/17TheWord/nonebot-plugin-afd",
- "tags": [
- {
- "label": "爱发电",
- "color": "#ea5252"
- },
- {
- "label": "自动审核进群",
- "color": "#52eae9"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.4",
- "time": "2023-12-14T04:52:48.787154Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_eventdone",
- "project_link": "nonebot-plugin-eventdone",
- "name": "nonebot_plugin_eventdone",
- "desc": "远程同意好友",
- "author": "PadorFelice",
- "homepage": "https://github.com/PadorFelice/nonebot_plugin_eventdone",
- "tags": [
- {
- "label": "同意好友",
- "color": "#ba2d2d"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-28T10:38:00.132098Z",
- "version": "1.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ncm_saying",
- "project_link": "nonebot-plugin-ncm-saying",
- "name": "网抑云",
- "desc": "一开口就老网抑云了",
- "author": "techotaku39",
- "homepage": "https://github.com/techotaku39/nonebot-plugin-ncm-saying",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-02-28T12:47:07.236766Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_60s",
- "project_link": "nonebot-plugin-60s",
- "name": "60s日历",
- "desc": "每天60秒读懂世界",
- "author": "techotaku39",
- "homepage": "https://github.com/techotaku39/nonebot-plugin-60s",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-31T11:38:28.620766Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_AutoRepeater",
- "project_link": "nonebot-plugin-AutoRepeater",
- "name": "AutoRepeater",
- "desc": "连续发送2条相同消息,机器人就会自动 +1。包括普通消息,QQ表情,还有图片(表情包)。支持图片夹文字和表情夹文字的消息!具有动态多群控制和跟随撤回功能(手表API可能无法监测)。",
- "author": "DMCSWCG",
- "homepage": "https://github.com/DMCSWCG/nonebot-plugin-AutoRepeater",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-03T16:52:05.869904Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ai_timetable",
- "project_link": "nonebot-plugin-ai-timetable",
- "name": "小爱课表",
- "desc": "一键导入课表、查看课表、提醒上课、查询课程",
- "author": "maoxig",
- "homepage": "https://github.com/maoxig/nonebot-plugin-ai-timetable",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.6",
- "time": "2023-09-02T05:52:46.560403Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sanae",
- "project_link": "nonebot-plugin-sanae",
- "name": "Sanae",
- "desc": "早苗连接器,也可转发其他onebotv11到nb2~",
- "author": "Hoshinonyaruko",
- "homepage": "https://github.com/Hoshinonyaruko/nonebot-plugin-sanae",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-18T07:50:34.572272Z",
- "version": "0.0.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_arkrecord",
- "project_link": "nonebot-plugin-arkrecord",
- "name": "明日方舟抽卡记录分析",
- "desc": "明日方舟抽卡记录分析与导出",
- "author": "zheuziihau",
- "homepage": "https://github.com/zheuziihau/nonebot_plugin_arkrecord",
- "tags": [
- {
- "label": "明日方舟 ",
- "color": "#c39191"
- },
- {
- "label": "游戏",
- "color": "#c39191"
- },
- {
- "label": "抽卡",
- "color": "#c39191"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-12T16:03:10.678760Z",
- "version": "1.7.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatgpt_turbo",
- "project_link": "nonebot-plugin-chatgpt-turbo",
- "name": "ChatGPT官方接口版",
- "desc": "适配新版OpenAI API的nonebot插件,可以调用官方稳定版ChatGPT进行回复",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot_plugin_chatgpt_turbo",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#ea5252"
- },
- {
- "label": "OpenAI",
- "color": "#52ea92"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-27T02:12:58.838396Z",
- "version": "0.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatgpt_on_qq",
- "project_link": "nonebot-plugin-chatgpt-on-qq",
- "name": "多功能的ChatGPT机器人",
- "desc": "基于chatGPT3.5-turboAPI,有利用模板创建新对话、保存历史记录、多重对话不互相干扰等功能",
- "author": "Suxmx",
- "homepage": "https://github.com/Suxmx/nonebot_plugin_chatgpt_on_qq",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-02-17T12:13:50.019025Z",
- "version": "1.6.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tuan_chatgpt",
- "project_link": "nonebot-plugin-tuan-chatgpt",
- "name": "和团子聊天!",
- "desc": "来和团子聊天吧~ Powered by chatgpt",
- "author": "TheLZY",
- "homepage": "https://github.com/TheLZY/nonebot_plugin_tuan_chatgpt",
- "tags": [
- {
- "label": "t:chat",
- "color": "#ff9d97"
- },
- {
- "label": "t:chatgpt",
- "color": "#ff9d97"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-09-16T21:37:00.389809Z",
- "version": "0.4.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatpdf",
- "project_link": "nonebot-plugin-chatpdf",
- "name": "ChatPDF文章分析",
- "desc": "在nonebot中使用ChatPDF的最小实现来中分析文章内容",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot_plugin_chatpdf",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#ea5252"
- },
- {
- "label": "ChatPDF",
- "color": "#6c7abd"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-24T07:41:22.586069Z",
- "version": "0.4.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_rimofun",
- "project_link": "nonebot-plugin-rimofun",
- "name": "RimoFun",
- "desc": "用 RimoChan 开发的工具做的一个有趣的插件",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-rimofun",
- "tags": [
- {
- "label": "RimoChan",
- "color": "#f3e5bf"
- },
- {
- "label": "bnhhsh",
- "color": "#ebbcc6"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.3.0",
- "time": "2024-03-10T07:19:28.075646Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_customemote",
- "project_link": "nonebot-plugin-customemote",
- "name": "群聊自定义表情包",
- "desc": "发送 表情名称 加 (.jpg或.png或.gif)后缀,就会发送设置好的表情。快速方便,聊天必备。",
- "author": "DMCSWCG",
- "homepage": "https://github.com/DMCSWCG/nonebot-plugin-customemote/",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-11T12:57:44.113082Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_justsix",
- "project_link": "nonebot-plugin-justsix",
- "name": "发6",
- "desc": "发送6,机器人就回复6",
- "author": "iidamie",
- "homepage": "https://github.com/iidamie/nonebot_plugin_justsix",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-13T10:04:49.409803Z",
- "version": "1.0.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_simulator_xiuxian",
- "project_link": "nonebot-plugin-simulator-xiuxian",
- "name": "修仙模拟器",
- "desc": "基于原版修仙的修改",
- "author": "luoyefufeng",
- "homepage": "https://github.com/luoyefufeng/nonebot_plugin_simulator_xiuxian",
- "tags": [
- {
- "label": "文游",
- "color": "#4256da"
- },
- {
- "label": "修仙1.0",
- "color": "#1d1b1c"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-08-19T06:57:44.424649Z",
- "version": "0.5.23",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bracket",
- "project_link": "nonebot-plugin-bracket",
- "name": "括号补全",
- "desc": "补全消息中的括号,治愈强迫症",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-bracket",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2023-06-21T14:51:55.170240Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gshisbanner",
- "project_link": "nonebot-plugin-gshisbanner",
- "name": "gshisbanner",
- "desc": "这是一个在机器人上获取原神历史卡池的插件",
- "author": "forchannot",
- "homepage": "https://github.com/forchannot/nonebot-plugin-gshisbanner",
- "tags": [
- {
- "label": "原神",
- "color": "#ea5252"
- },
- {
- "label": "卡池",
- "color": "#52ea56"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.red"
- ],
- "valid": true,
- "version": "1.2.5",
- "time": "2024-03-08T09:12:03.746070Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_unoconv",
- "project_link": "nonebot-plugin-unoconv",
- "name": "unoconv文件转换",
- "desc": "基于unoconv的文件转换工具,支持输出pdf、doc、jpg等格式",
- "author": "Zeta-qixi",
- "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-unoconv",
- "tags": [
- {
- "label": "文件转换",
- "color": "#ea5252"
- },
- {
- "label": "pdf转换",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-16T01:16:57.312529Z",
- "version": "0.5.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_apexranklookup",
- "project_link": "nonebot-plugin-apexranklookup",
- "name": "apex信息查询",
- "desc": "查询apex玩家信息、地图等信息",
- "author": "Windylh",
- "homepage": "https://github.com/Windylh/nonebot_plugin_apexranklookup",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-10T08:56:26.675744Z",
- "version": "0.1.7",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_randomnana",
- "project_link": "nonebot-plugin-randomnana",
- "name": "随机狗妈",
- "desc": "随机抽取神乐七奈表情包图片",
- "author": "NanakoOfficial",
- "homepage": "https://github.com/NanakoOfficial/nonebot_plugin_randomnana",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-22T00:46:06.922063Z",
- "version": "0.1.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_quote",
- "project_link": "nonebot-plugin-quote",
- "name": "群聊语录库",
- "desc": "一款QQ群语录库——支持上传聊天截图为语录,随机投放语录,关键词搜索语录精准投放",
- "author": "RongRongJi",
- "homepage": "https://github.com/RongRongJi/nonebot_plugin_quote",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#326bad"
- },
- {
- "label": "t:语录",
- "color": "#003f88"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-13T19:07:23.124182Z",
- "version": "0.3.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_memes_api",
- "project_link": "nonebot-plugin-memes-api",
- "name": "表情包制作",
- "desc": "制作各种沙雕表情包",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-memes-api",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [],
- "valid": true,
- "version": "0.3.2",
- "time": "2024-03-12T09:44:02.760534Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_rrc",
- "project_link": "nonebot-plugin-rrc",
- "name": "随机点名",
- "desc": "就是群聊点名,让学生感受刺激",
- "author": "QingMuCat",
- "homepage": "https://github.com/QingMuCat/nonebot-plugin-rrc",
- "tags": [
- {
- "label": "课堂",
- "color": "#ea5252"
- },
- {
- "label": "抽人",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-19T07:32:14.760521Z",
- "version": "0.0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hotsearch",
- "project_link": "nonebot-plugin-hotsearch",
- "name": "多平台热搜获取插件",
- "desc": "获取微博/百度/知乎/贴吧/b站的热搜信息",
- "author": "Astolfocat",
- "homepage": "https://github.com/Astolfocat/nonebot_plugin_hotsearch",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-19T04:59:59.139834Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ai_interviewer",
- "project_link": "nonebot-plugin-ai-interviewer",
- "name": "基于OpenAI的AI模拟面试官",
- "desc": "本插件基于OpenAI的API开发,在nonebot框架下实现一个聊天式的可自定义面试职位的AI辅助面试官。",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot-plugin-ai-interviewer",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#4366eb"
- },
- {
- "label": "模拟面试",
- "color": "#af286f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-03-20T14:33:59.011021Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatglm",
- "project_link": "nonebot-plugin-chatglm",
- "name": "ChatGLM",
- "desc": "基于ChatGLM-6B模型,提供本地中文(汉语)聊天机器人功能",
- "author": "DaoMingze",
- "homepage": "https://github.com/DaoMingze/zhukebot/tree/main/zhukebot/plugins/chatglm",
- "tags": [
- {
- "label": "t:Chatbot",
- "color": "#4366eb"
- },
- {
- "label": "ChatGLM",
- "color": "#af286f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-04T15:39:45.646722Z",
- "version": "0.1.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatglm6b",
- "project_link": "nonebot-plugin-chatglm6b",
- "name": "ChatGLM-6B API版",
- "desc": "通过ChatGLM-6B API来和已经部署好的ChatGLM对话",
- "author": "QNLanYang",
- "homepage": "https://github.com/QNLanYang/nonebot_plugin_ChatGLM6B",
- "tags": [
- {
- "label": "t:ChatGLM",
- "color": "#52d6ea"
- },
- {
- "label": "AI Chat",
- "color": "#8e52ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-08T15:47:04.430159Z",
- "version": "0.1.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_helloworld",
- "project_link": "nonebot-plugin-helloworld",
- "name": "Hello World",
- "desc": "你好,世界",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-helloworld",
- "tags": [
- {
- "label": "good first plugin",
- "color": "#6c58f6"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-24T11:29:41.026691Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_overbracket",
- "project_link": "nonebot-plugin-overbracket",
- "name": "通括膨胀",
- "desc": "让你的机器人随机发括号",
- "author": "NCBM",
- "homepage": "https://github.com/NCBM/nonebot-plugin-overbracket",
- "tags": [
- {
- "label": "useless",
- "color": "#0a930e"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.2",
- "time": "2023-06-19T08:06:41.126617Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_miao",
- "project_link": "nonebot-plugin-miao",
- "name": "口癖",
- "desc": "让Bot的发言添加口癖",
- "author": "CMHopeSunshine",
- "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-miao",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.1.0",
- "time": "2023-06-20T14:21:31.414654Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_questionmark",
- "project_link": "nonebot-plugin-questionmark",
- "name": "颠倒问号",
- "desc": "发送单个问号 `?` 或 `?`, bot会自动回复颠倒的问号 `¿`",
- "author": "NumberSir",
- "homepage": "https://github.com/NumberSir/nonebot-plugin-questionmark",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-03T08:15:01.898492Z",
- "version": "0.4.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_genshin_cos",
- "project_link": "nonebot-plugin-genshin-cos",
- "name": "米游社cos",
- "desc": "获取原神coser图片",
- "author": "Cvandia",
- "homepage": "https://github.com/Cvandia/nonebot_plugin_genshin_cos",
- "tags": [
- {
- "label": "原神",
- "color": "#f55400"
- },
- {
- "label": "cos",
- "color": "#00d0f5"
- },
- {
- "label": "coser",
- "color": "#eb1dd3"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.7",
- "time": "2024-03-09T13:23:44.009084Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatgpt_plus",
- "project_link": "nonebot-plugin-chatgpt-plus",
- "name": "ChatGPT网页端API",
- "desc": "免费、无限使用ChatGPT,PLUS账号可使用ChatGPT4.0,绕过ChatGPT的Cloudflare盾来使用免费网页端ChatGPT",
- "author": "AkashiCoin",
- "homepage": "https://github.com/AkashiCoin/nonebot-plugin-chatgpt-plus",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#ea5252"
- },
- {
- "label": "GPT4",
- "color": "#2ecf57"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-17T11:16:32.728012Z",
- "version": "0.8.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sayoroll",
- "project_link": "nonebot-plugin-sayoroll",
- "name": "sayoroll",
- "desc": "随机数字或随机事件",
- "author": "mas-alone",
- "homepage": "https://github.com/mas-alone/nonebot-plugin-sayoroll",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.6.1",
- "time": "2024-03-07T04:04:59.513027Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gw2",
- "project_link": "nonebot-plugin-gw2",
- "name": "激战2",
- "desc": "使用api获取星岬岛信息",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_gw2",
- "tags": [
- {
- "label": "gw2",
- "color": "#52ea5a"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.4",
- "time": "2023-06-23T05:32:22.625374Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_today_waifu",
- "project_link": "nonebot-plugin-today-waifu",
- "name": "今日老婆",
- "desc": "随机抓取群友做老婆",
- "author": "glamorgan9826",
- "homepage": "https://github.com/glamorgan9826/nonebot-plugin-today-waifu",
- "tags": [
- {
- "label": "娱乐",
- "color": "#eac752"
- },
- {
- "label": "每日老婆",
- "color": "#9beff6"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-25T14:57:04.643842Z",
- "version": "0.1.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sleep",
- "project_link": "nonebot-plugin-sleep",
- "name": "来份睡眠套餐",
- "desc": "让bot给你一份精致的睡眠套餐(发指令禁言)",
- "author": "mas-alone",
- "homepage": "https://github.com/mas-alone/nonebot-plugin-sleep",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-02-22T03:15:30.040702Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_api_paddle",
- "project_link": "nonebot-api-paddle",
- "name": "nonebot_api_paddle",
- "desc": "nonebot_api_paddleocr",
- "author": "canxin121",
- "homepage": "https://github.com/canxin121/nonebot_api_paddleocr",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-21T15:52:29.221679Z",
- "version": "1.0.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatppt",
- "project_link": "nonebot-plugin-chatppt",
- "name": "AI生成PPT",
- "desc": "在nonebot框架下实现一个AI生成指定主题PPT的文件并上传到群文件中",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot-plugin-chatppt",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-05T08:45:56.162272Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_steam_game_status",
- "project_link": "nonebot-plugin-steam-game-status",
- "name": "Steam游戏状态",
- "desc": "播报群友的Steam游戏状态",
- "author": "nek0us",
- "homepage": "https://github.com/nek0us/nonebot_plugin_steam_game_status",
- "tags": [
- {
- "label": "Steam",
- "color": "#6690a5"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.1.7",
- "time": "2024-02-28T18:40:00.487496Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilichat",
- "project_link": "nonebot-plugin-bilichat",
- "name": "nonebot-plugin-bilichat",
- "desc": "多种B站链接解析,视频词云,AI总结,你想要的都在 bilichat",
- "author": "Well2333",
- "homepage": "https://github.com/Well2333/nonebot-plugin-bilichat",
- "tags": [
- {
- "label": "哔哩哔哩",
- "color": "#ffc8ea"
- },
- {
- "label": "ChatGPT",
- "color": "#75ffc0"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.mirai2",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qqguild"
- ],
- "valid": false,
- "version": "5.2.0",
- "time": "2024-02-22T07:51:13.607536Z",
- "skip_test": false
- },
- {
- "module_name": "GenshinUID",
- "project_link": "nonebot-plugin-genshinuid",
- "name": "GenshinUID",
- "desc": "支持大部分适配器的全功能NoneBot2原神插件",
- "author": "KimigaiiWuyi",
- "homepage": "https://github.com/KimigaiiWuyi/GenshinUID",
- "tags": [
- {
- "label": "a:all",
- "color": "#ea5252"
- },
- {
- "label": "原神",
- "color": "#000000"
- },
- {
- "label": "早柚核心",
- "color": "#7937a9"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-18T05:13:47.485271Z",
- "version": "4.6.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_blive_danmaku",
- "project_link": "nonebot-plugin-blive-danmaku",
- "name": "B站直播间路灯",
- "desc": "通过弹幕记录直播高能点",
- "author": "zangxx66",
- "homepage": "https://github.com/zangxx66/nonebot_plugin_blive_danmaku",
- "tags": [
- {
- "label": "t:bilibili",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-08T08:54:21.863198Z",
- "version": "0.4.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_clock",
- "project_link": "nonebot-plugin-clock",
- "name": "nonebot clock 群闹钟 ⏰",
- "desc": "支持群聊 私聊的⏰插件",
- "author": "Zeta-qixi",
- "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-clock",
- "tags": [
- {
- "label": "闹钟",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-22T02:06:01.009228Z",
- "version": "0.9",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_SDGPT",
- "project_link": "nonebot-plugin-SDGPT",
- "name": "SDGPT",
- "desc": "链接 ChatGPT / Bing / Stable-Diffusion: ChatGPT Bing 聊天, gpt 解析自然语言转 Stable-Diffusion 生成图像",
- "author": "thx114",
- "homepage": "https://github.com/thx114/sdgpt",
- "tags": [
- {
- "label": "a:onebot",
- "color": "#000000"
- },
- {
- "label": "chatGPT",
- "color": "#54b490"
- },
- {
- "label": "novelai",
- "color": "#f0dc4e"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-05T02:47:56.881617Z",
- "version": "0.2.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_fuckyou",
- "project_link": "nonebot-plugin-fuckyou",
- "name": "FuckYou",
- "desc": "莎士比亚没有士",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-fuckyou",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0.post1",
- "time": "2024-03-10T08:54:32.695129Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pokemonfusion",
- "project_link": "nonebot-plugin-pokemonfusion",
- "name": "宝可梦融合",
- "desc": "Pokemon Infinite Fusion的中文版融合计算器,支持融合420^2=176400种宝可梦",
- "author": "IllusiveBull",
- "homepage": "https://github.com/IllusiveBull/nonebot_plugin_pokemonfusion",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-10-24T05:13:39.699321Z",
- "version": "1.1.2",
- "skip_test": false
- },
- {
- "module_name": "tatarubot2",
- "project_link": "tatarubot2",
- "name": "TataruBot2",
- "desc": "FF14相关轻量功能,如查物价、logs、看微博等",
- "author": "aaron-lii",
- "homepage": "https://github.com/aaron-lii/TataruBot2",
- "tags": [
- {
- "label": "t:FF14",
- "color": "#5282ea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-12-04T02:02:20.511796Z",
- "version": "1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_talk_with_chatgpt",
- "project_link": "nonebot-plugin-talk-with-chatgpt",
- "name": "与ChatGpt聊天",
- "desc": "基于accessToken登录的chatgpt聊天插件",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_talk_with_chatgpt",
- "tags": [
- {
- "label": "chatgpt",
- "color": "#1a834e"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-23T13:36:55.110924Z",
- "version": "0.6.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_osuverify",
- "project_link": "nonebot-plugin-osuverify",
- "name": "osu!入群审批",
- "desc": "通过osu!用户名的入群审核并其修改群名片为id",
- "author": "mas-alone",
- "homepage": "https://github.com/mas-alone/nonebot-plugin-osuverify",
- "tags": [
- {
- "label": "OSU",
- "color": "#eb5d9b"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-03-05T09:45:42.028099Z",
- "version": "0.1.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bilifan",
- "project_link": "nonebot-plugin-bilifan",
- "name": "bilifan",
- "desc": "b站粉丝牌~",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_bilifan",
- "tags": [
- {
- "label": "bilibili",
- "color": "#ec15c6"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.3.2",
- "time": "2024-01-25T10:10:05.461565Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_akinator",
- "project_link": "nonebot-plugin-akinator",
- "name": "Akinator",
- "desc": "网络天才",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-akinator",
- "tags": [
- {
- "label": "Akinator",
- "color": "#6599fe"
- },
- {
- "label": "网络天才",
- "color": "#6599fe"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2024-03-10T11:36:13.067923Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_rename",
- "project_link": "nonebot-plugin-rename",
- "name": "nonebot_plugin_rename",
- "desc": "用于更改qq机器人的群名片,内置多种有趣名片",
- "author": "forchannot",
- "homepage": "https://github.com/forchannot/nonebot_plugin_rename",
- "tags": [
- {
- "label": "群名片",
- "color": "#466bed"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.7.1",
- "time": "2024-02-03T07:20:38.157409Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_appinsights",
- "project_link": "nonebot-plugin-appinsights",
- "name": "Nonebot2 AppInsights",
- "desc": "Nonebot2 Application Insights 日志连接插件",
- "author": "XZhouQD",
- "homepage": "https://github.com/xzhouqd/nonebot-plugin-appinsights",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2023-06-19T17:05:18.866643Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_brainfuck",
- "project_link": "nonebot-plugin-brainfuck",
- "name": "brainfuck",
- "desc": "一个brainfuck解释器,允许在群聊中输入brainfuck:{command}:{inbox}执行brainfuck代码,并返回outbox",
- "author": "campanulamediuml",
- "homepage": "https://github.com/campanulamediuml/nonebot-plugin-brainfuck",
- "tags": [
- {
- "label": "t:dev",
- "color": "#ea5252"
- },
- {
- "label": "t:bf",
- "color": "#529fea"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-23T04:37:04.094212Z",
- "version": "1.0.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-coderun",
- "project_link": "nonebot-plugin-coderun",
- "name": "运行代码",
- "desc": "基于runoob.com的在线代码运行插件",
- "author": "Yincmewy",
- "homepage": "https://github.com/Yincmewy/nonebot_plugin_coderun",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-22T12:23:23.324337Z",
- "version": "0.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_abot_place",
- "project_link": "nonebot-plugin-abot-place",
- "name": "公共画板插件",
- "desc": "可以让所有的 Bot 用户一起来画画(参考 Reddit Place)",
- "author": "djkcyl",
- "homepage": "https://github.com/Aunly/nonebot-plugin-abot-place",
- "tags": [
- {
- "label": "ABot",
- "color": "#52aaea"
- },
- {
- "label": "Place",
- "color": "#ea6dda"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-01T09:52:35.801795Z",
- "version": "0.1.0.post3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_megumin",
- "project_link": "nonebot-plugin-megumin",
- "name": "为美好群聊献上爆炎",
- "desc": "现在,你的群友可以触发失传已久的爆裂魔法了",
- "author": "youlanan",
- "homepage": "https://github.com/youlanan/nonebot_plugin_megumin",
- "tags": [
- {
- "label": "小游戏",
- "color": "#f9971c"
- },
- {
- "label": "Explosion",
- "color": "#f94b1c"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-04-30T02:05:54.367615Z",
- "version": "0.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_manga_translator",
- "project_link": "nonebot-plugin-manga-translator",
- "name": "图片翻译",
- "desc": "利用api翻译图片并返回翻译后的图片",
- "author": "maoxig",
- "homepage": "https://github.com/maoxig/nonebot-plugin-manga-translator",
- "tags": [
- {
- "label": "漫画翻译",
- "color": "#527bea"
- },
- {
- "label": "图片翻译",
- "color": "#c452ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-06-09T12:43:01.115471Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_watermarker",
- "project_link": "nonebot-plugin-watermarker",
- "name": "水印大师",
- "desc": "给bot发的图片增加水印,支持随机水印添加",
- "author": "X-Skirt-X",
- "homepage": "https://github.com/X-Skirt-X/nonebot-plugin-watermarker",
- "tags": [
- {
- "label": "t:水印",
- "color": "#52eae7"
- },
- {
- "label": "t:图片水印",
- "color": "#ef258f"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-03T12:05:50.890757Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_starrail_calendar",
- "project_link": "nonebot-plugin-starrail-calendar",
- "name": "星穹铁道活动日历",
- "desc": "查看《崩坏:星穹铁道》官方活动",
- "author": "nicklly",
- "homepage": "https://github.com/nicklly/nonebot_plugin_StarRail_calendar",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-09-17T08:57:38.240552Z",
- "version": "1.0.8",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wordle_help",
- "project_link": "nonebot-plugin-wordle-help",
- "name": "wordle_help",
- "desc": "wordle游戏小助手",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/Hinata-Bot/tree/main/src/plugins/wordle_help",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.3",
- "time": "2023-06-20T13:31:24.879980Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-csgo-case-simulator",
- "project_link": "nonebot-plugin-csgo-case-simulator",
- "name": "CSGO开箱模拟器",
- "desc": "内置所有最新武器箱,可多箱连开",
- "author": "roiiiu",
- "homepage": "https://github.com/roiiiu/nonebot-plugin-csgo-case-simulator",
- "tags": [
- {
- "label": "CSGO",
- "color": "#47aeff"
- },
- {
- "label": "开箱模拟器",
- "color": "#ff4781"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-02-27T09:24:39.222768Z",
- "version": "1.0.1",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_callapi",
- "project_link": "nonebot-plugin-callapi",
- "name": "CallAPI",
- "desc": "使用指令来调用 Bot 的 API",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-callapi",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.2.0",
- "time": "2024-03-10T10:48:00.487466Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_penguin",
- "project_link": "nonebot-plugin-penguin",
- "name": "nonebot_plugin_penguin",
- "desc": "使用nonebot2查询企鹅物流掉落物数据",
- "author": "AzideCupric",
- "homepage": "https://github.com/AzideCupric/nonebot-plugin-penguin",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-06-20T15:22:02.968145Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_spark_gpt",
- "project_link": "nonebot-plugin-spark-gpt",
- "name": "Spark_GPT",
- "desc": "将poe,chatgpt,slack claude,Newbing,SydneyBing,google bard,讯飞星火模型(SparkDesk),通义千问等接入qq,tg,kook(原开黑啦),discord多平台用户绑定实现数据互通,并提供webui进行便捷配置,自适应文转图,实现预设人格化bot的便捷创建,使用和管理",
- "author": "canxin121",
- "homepage": "https://github.com/canxin121/Spark-GPT",
- "tags": [
- {
- "label": "多来源语言GPT",
- "color": "#5599ff"
- },
- {
- "label": "多平台用户数据互通",
- "color": "#ffff77"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.discord",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.telegram"
- ],
- "valid": false,
- "version": "2.0.3",
- "time": "2023-10-12T14:37:14.174909Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_logpile",
- "project_link": "nonebot-plugin-logpile",
- "name": "本地日志保存",
- "desc": "将 bot 日志记录保存到本地文件中",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-logpile",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-09T20:58:22.826287Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_arkgacha",
- "project_link": "nonebot-plugin-arkgacha",
- "name": "明日方舟抽卡模拟",
- "desc": "明模拟日方舟抽卡功能,支持模拟十连",
- "author": "RF-Tar-Railt",
- "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-arkgacha",
- "tags": [
- {
- "label": "game",
- "color": "#eaa852"
- },
- {
- "label": "arknights",
- "color": "#5276ea"
- },
- {
- "label": "抽卡",
- "color": "#c852ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.6.0",
- "time": "2024-03-10T15:09:59.474921Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_og",
- "project_link": "nonebot-plugin-og",
- "name": "链接解析",
- "desc": "检测链接并发送网站简介及预览图",
- "author": "mute23-code",
- "homepage": "https://github.com/mute23-code/nonebot_plugin_og",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-13T08:37:54.070197Z",
- "version": "0.3.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_hoshino_sign",
- "project_link": "nonebot-plugin-hoshino-sign",
- "name": "签到",
- "desc": "从 hoshino 搬过来的 pcr 签到, 略作修改。",
- "author": "zhulinyv",
- "homepage": "https://github.com/zhulinyv/nonebot_plugin_hoshino_sign",
- "tags": [
- {
- "label": "PCR",
- "color": "#ff0000"
- },
- {
- "label": "签到",
- "color": "#008000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2024-01-29T01:20:41.320603Z",
- "version": "2.3.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_multincm",
- "project_link": "nonebot-plugin-multincm",
- "name": "MultiNCM",
- "desc": "网易云多选点歌",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-multincm",
- "tags": [
- {
- "label": "网易云",
- "color": "#ea5252"
- },
- {
- "label": "ncm",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.4.4",
- "time": "2023-11-02T14:51:45.862245Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_smallapi",
- "project_link": "nonebot-plugin-smallapi",
- "name": "小小的WEBAPI调用插件",
- "desc": "顾名思义~不要骂我~",
- "author": "chaichaisi",
- "homepage": "https://github.com/chaichaisi/nonebot_plugin_smallapi",
- "tags": [
- {
- "label": "webapi",
- "color": "#52ea7d"
- },
- {
- "label": "api",
- "color": "#52ea7d"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-17T06:23:36.976025Z",
- "version": "1.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_p5generator",
- "project_link": "nonebot-plugin-p5generator",
- "name": "《女神异闻录5》预告信生成器",
- "desc": "可以生成仿《女神异闻录5》中心之怪盗团向罪人宣战的预告信",
- "author": "xi-yue-233",
- "homepage": "https://github.com/xi-yue-233/nonebot-plugin-p5generator",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-18T08:56:25.717856Z",
- "version": "0.1.4",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sd_webui",
- "project_link": "nonebot-plugin-sd-webui",
- "name": "SD绘画插件",
- "desc": "基于stable-diffusion-webui的nonebot绘画插件,支持文生图、图生图、参数指定、模型管理、翻译等功能",
- "author": "evan-gyy",
- "homepage": "https://github.com/evan-gyy/nonebot_plugin_sd_webui",
- "tags": [
- {
- "label": "sd",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-16T07:53:39.816541Z",
- "version": "0.1.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_session",
- "project_link": "nonebot-plugin-session",
- "name": "会话id",
- "desc": "会话信息提取与会话id定义插件",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-session",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.3.1",
- "time": "2024-02-25T07:05:33.845496Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pluginupdatecheck",
- "project_link": "nonebot-plugin-pluginupdatecheck",
- "name": "便携插件安装器",
- "desc": "一个nonebot2的插件便捷安装和升级插件(基于nb-cli和pip)",
- "author": "xi-yue-233",
- "homepage": "https://github.com/xi-yue-233/nonebot-plugin-pluginupdatecheck",
- "tags": [
- {
- "label": "便携安装",
- "color": "#e42828"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-18T17:14:20.083595Z",
- "version": "0.1.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_stockhelper",
- "project_link": "nonebot-plugin-stockhelper",
- "name": "股票看盘助手",
- "desc": "股票波动超过设定值提醒,省去一直盯盘的烦恼",
- "author": "Calanosay",
- "homepage": "https://github.com/Calanosay/nonebot_plugin_stockhelper",
- "tags": [
- {
- "label": "股票",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-19T10:18:39.940826Z",
- "version": "0.1.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_githubcard",
- "project_link": "nonebot-plugin-githubcard",
- "name": "githubcard",
- "desc": "检测GitHub仓库链接并自动发送卡片信息(适用于Onebot V11)",
- "author": "ElainaFanBoy",
- "homepage": "https://github.com/ElainaFanBoy/nonebot_plugin_githubcard",
- "tags": [
- {
- "label": " Github",
- "color": "#171a21"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.2",
- "time": "2024-03-13T03:26:06.815959Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_lua",
- "project_link": "nonebot-plugin-lua",
- "name": "nonebot-plugin-lua",
- "desc": "在nonebot中执行lua(experimental)",
- "author": "synodriver",
- "homepage": "https://github.com/synodriver/nonebot_plugin_lua",
- "tags": [],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-23T15:50:12.147563Z",
- "version": "0.0.1.dev2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cube",
- "project_link": "nonebot-plugin-cube",
- "name": "cuber",
- "desc": "魔方插件",
- "author": "initialencounter",
- "homepage": "https://github.com/initialencounter/nonebot-plugin-cube",
- "tags": [
- {
- "label": "魔方",
- "color": "#ea5252"
- },
- {
- "label": "sqlite3",
- "color": "#c2ea52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-23T15:47:57.754235Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_homo_mathematician",
- "project_link": "nonebot-plugin-homo-mathematician",
- "name": "homo_mathematician",
- "desc": "任何实数都用连续的114514通过加减乘除达成, 任给一组数据都能找出其内在规律(函数表达式)",
- "author": "Special-Week",
- "homepage": "https://github.com/Special-Week/Hinata-Bot/tree/main/src/plugins/homo_mathematician",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.7",
- "time": "2024-03-17T07:43:15.322788Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_puzzle",
- "project_link": "nonebot-plugin-puzzle",
- "name": "puzzle",
- "desc": "数字华容道,拼图游戏,查看群华容排名",
- "author": "initialencounter",
- "homepage": "https://github.com/initialencounter/nonebot-plugin-puzzle",
- "tags": [
- {
- "label": "数字华容道",
- "color": "#ea5252"
- },
- {
- "label": "拼图游戏",
- "color": "#a7ea52"
- },
- {
- "label": "puzzle",
- "color": "#52eadd"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-05-23T20:38:56.076911Z",
- "version": "1.0.2",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_herocard",
- "project_link": "nonebot-plugin-herocard",
- "name": "本子标题关键词提取",
- "desc": "为了方便各位平时搜索本子用,发扬hero精神",
- "author": "Xie-Tiao",
- "homepage": "https://github.com/Xie-Tiao/nonebot_plugin_herocard",
- "tags": [
- {
- "label": "文本提取",
- "color": "#6bc6bf"
- },
- {
- "label": "日语",
- "color": "#53bbd8"
- },
- {
- "label": "本子",
- "color": "#eea1b1"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-07-10T09:27:24.982052Z",
- "version": "1.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nagabus",
- "project_link": "nonebot-plugin-nagabus",
- "name": "NAGA公交车",
- "desc": "为群友提供NAGA拼车服务",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-nagabus",
- "tags": [
- {
- "label": "日麻",
- "color": "#b52ee1"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qqguild",
- "nonebot.adapters.telegram"
- ],
- "valid": false,
- "version": "0.3.2",
- "time": "2023-12-12T12:30:44.770450Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_random_draw",
- "project_link": "nonebot-plugin-random-draw",
- "name": "随机抽取自定义内容",
- "desc": "通过添加各种想要抽取的内容,进行随机抽取。选择困难症的福音",
- "author": "Ikaros-521",
- "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_draw",
- "tags": [
- {
- "label": "随机",
- "color": "#ffe0aa"
- },
- {
- "label": "a:onebot",
- "color": "#000000"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-06-11T15:58:58.120380Z",
- "version": "0.1.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_stable_diffusion_diao",
- "project_link": "nonebot-plugin-stable-diffusion-diao",
- "name": "stablediffusion绘画插件",
- "desc": "另一个绘画插件,支持多SD后端,负载均衡,lora,emb,chatgpt prompt生成,更换模型等等更多功能",
- "author": "DiaoDaiaChan",
- "homepage": "https://github.com/DiaoDaiaChan/nonebot-plugin-stable-diffusion-diao",
- "tags": [
- {
- "label": "AI绘图",
- "color": "#eaaf52"
- },
- {
- "label": "SD",
- "color": "#eaaf52"
- }
- ],
- "is_official": false,
- "type": null,
- "supported_adapters": null,
- "valid": false,
- "time": "2023-11-09T13:01:41.243448Z",
- "version": "0.4.7.3",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_al",
- "project_link": "nonebot-plugin-al",
- "name": "碧蓝航线攻略",
- "desc": "碧蓝航线井号榜等等攻略",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_AL",
- "tags": [
- {
- "label": "bilibili",
- "color": "#ea52e5"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.10",
- "time": "2023-08-04T10:37:18.628816Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_escape_url",
- "project_link": "nonebot-plugin-escape-url",
- "name": "链接防夹",
- "desc": "自动转换发送消息中的URL,逃避URL检测",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-escape-url",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qqguild"
- ],
- "valid": true,
- "version": "0.1.3.post1",
- "time": "2023-06-09T14:54:07.632074Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_twitter",
- "project_link": "nonebot-plugin-twitter",
- "name": "twitter 推特订阅",
- "desc": "订阅 twitter 推文",
- "author": "nek0us",
- "homepage": "https://github.com/nek0us/nonebot-plugin-twitter",
- "tags": [
- {
- "label": "twitter",
- "color": "#29a8dc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.4",
- "time": "2024-01-20T11:49:43.579188Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pcrjjc",
- "project_link": "nonebot-plugin-pcrjjc",
- "name": "pcrjjc",
- "desc": "公主连结(国服)排名监测工具",
- "author": "reine-ishyanami",
- "homepage": "https://github.com/reine-ishyanami/nonebot-plugin-pcrjjc",
- "tags": [
- {
- "label": "公主连结",
- "color": "#778a1e"
- },
- {
- "label": "pcrjjc",
- "color": "#778a1e"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.6.2",
- "time": "2024-01-05T03:15:36.782405Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_audiocraft",
- "project_link": "nonebot-plugin-audiocraft",
- "name": "AI作曲",
- "desc": "Nonebot框架下的AI作曲插件",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot-plugin-audiocraft",
- "tags": [
- {
- "label": "AI",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.5",
- "time": "2023-06-19T10:57:18.415643Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bili_push",
- "project_link": "nonebot-plugin-bili-push",
- "name": "bili_push",
- "desc": "推送b站动态",
- "author": "SuperGuGuGu",
- "homepage": "https://github.com/SuperGuGuGu/nonebot_plugin_bili_push",
- "tags": [
- {
- "label": "bilibili",
- "color": "#de5d92"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.1.20.1",
- "time": "2024-03-10T15:14:45.185185Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_warthunder_player_check",
- "project_link": "nonebot-plugin-warthunder-player-check",
- "name": "战雷查水表",
- "desc": "搜索warthunder社区查询玩家履历",
- "author": "0Neptune0",
- "homepage": "https://github.com/0Neptune0/nonebot-plugin-warthunder-player-check",
- "tags": [
- {
- "label": "Wathunder",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.1.3",
- "time": "2023-09-16T08:15:36.199644Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_follow_withdraw",
- "project_link": "nonebot-plugin-follow-withdraw",
- "name": "follow_withdraw",
- "desc": "当命令消息被撤回时,Bot跟随撤回命令结果",
- "author": "CMHopeSunshine",
- "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-follow-withdraw",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qqguild"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2023-06-19T14:34:18.210942Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_error_alert",
- "project_link": "nonebot-plugin-error-alert",
- "name": "错误告警",
- "desc": "当Bot发生运行错误时发送消息提醒",
- "author": "ssttkkl",
- "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-error-alert",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qqguild",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2023-09-10T15:16:08.235679Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ocgbot_v2",
- "project_link": "nonebot-plugin-ocgbot-v2",
- "name": "游戏王小蓝卡查",
- "desc": "提供游戏王相关服务",
- "author": "fireinsect",
- "homepage": "https://github.com/fireinsect/nonebot-plugin-ocgbot-v2/",
- "tags": [
- {
- "label": "游戏王",
- "color": "#2ecbed"
- },
- {
- "label": "ygo",
- "color": "#f77117"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.2.9.4",
- "time": "2024-03-18T07:02:34.851618Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_helltide",
- "project_link": "nonebot-plugin-helltide",
- "name": "Diablo4地狱狂潮boss提醒小助手",
- "desc": "支持订阅,在D4继续上班",
- "author": "QBkira",
- "homepage": "https://github.com/QBkira/nonebot-plugin-helltide",
- "tags": [
- {
- "label": "helltide",
- "color": "#ff0000"
- },
- {
- "label": "diablo4",
- "color": "#ff3300"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.7",
- "time": "2023-06-25T13:19:55.857199Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_userinfo",
- "project_link": "nonebot-plugin-userinfo",
- "name": "用户信息",
- "desc": "多平台的用户信息获取插件",
- "author": "MeetWq",
- "homepage": "https://github.com/noneplugin/nonebot-plugin-userinfo",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.3",
- "time": "2024-03-19T10:39:54.600626Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_poke",
- "project_link": "nonebot-plugin-poke",
- "name": "戳一戳事件",
- "desc": "自定义群聊戳一戳事件",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_poke",
- "tags": [
- {
- "label": "v11",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.2",
- "time": "2023-08-02T08:32:28.462790Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_friends",
- "project_link": "nonebot-plugin-friends",
- "name": "远程同意好友",
- "desc": "自定义远程同意好友和群聊申请",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_friends",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.2",
- "time": "2023-08-09T15:10:30.495458Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_update",
- "project_link": "nonebot-plugin-update",
- "name": "nonebot-plugin-update",
- "desc": "用于检测 Nonebot 插件更新的 Nonebot 插件",
- "author": "djkcyl",
- "homepage": "https://github.com/Aunly/nonebot-plugin-update",
- "tags": [
- {
- "label": "Nonebot",
- "color": "#ea5252"
- },
- {
- "label": "tool",
- "color": "#527dea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-07-05T13:27:09.922237Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cp_broadcast",
- "project_link": "nonebot-plugin-cp-broadcast",
- "name": "算法竞赛比赛查询",
- "desc": "可以查询牛客、atcoder、codeforces平台的今天和近几天的比赛信息",
- "author": "HuParry",
- "homepage": "https://github.com/HuParry/nonebot-plugin-cp-broadcast",
- "tags": [
- {
- "label": "算法竞赛",
- "color": "#ea5252"
- },
- {
- "label": "比赛播报",
- "color": "#55ea52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "2.2.0",
- "time": "2024-03-06T07:13:17.243452Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cfassistant",
- "project_link": "nonebot-plugin-cfassistant",
- "name": "nonebot-plugin-cfassistant",
- "desc": "一个支持CF(codeforces)平台查询比赛/比赛提醒/监测分数变化的nonebot机器人插件",
- "author": "coyude",
- "homepage": "https://github.com/coyude/nonebot-plugin-cfassistant",
- "tags": [
- {
- "label": "ACM",
- "color": "#52eacf"
- },
- {
- "label": "Codeforces",
- "color": "#52eacf"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.4",
- "time": "2023-07-13T09:19:06.972726Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_splatoon3_schedule",
- "project_link": "nonebot-plugin-splatoon3-schedule",
- "name": "splatoon3游戏日程查询",
- "desc": "一个基于nonebot2框架的splatoon3游戏日程查询插件",
- "author": "Cypas",
- "homepage": "https://github.com/Cypas/splatoon3-schedule",
- "tags": [
- {
- "label": "splatoon3",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "1.7.0",
- "time": "2024-03-02T05:39:39.974015Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_capoo",
- "project_link": "nonebot-plugin-capoo",
- "name": "猫猫虫咖波图片发送",
- "desc": "发送capoo指令后bot会随机发出一张capoo的可爱表情包",
- "author": "HuParry",
- "homepage": "https://github.com/HuParry/nonebot-plugin-capoo",
- "tags": [
- {
- "label": "猫猫虫咖波",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2024-01-24T11:01:08.207028Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_eventexpiry",
- "project_link": "nonebot-plugin-eventexpiry",
- "name": "过期事件过滤器",
- "desc": "自动过滤过期事件",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-eventexpiry",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2023-07-07T18:26:34.752138Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nobahpicture",
- "project_link": "nonebot-plugin-nobahpicture",
- "name": "nonebot-plugin-nobahpicture",
- "desc": "获取碧蓝档案涩图",
- "author": "Lptr-byte",
- "homepage": "https://github.com/Lptr-byte/nonebot-plugin-nobahpicture",
- "tags": [
- {
- "label": "碧蓝档案",
- "color": "#00defe"
- },
- {
- "label": "蔚蓝档案",
- "color": "#00defe"
- },
- {
- "label": "涩图",
- "color": "#00defe"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.2",
- "time": "2023-07-10T06:52:29.857291Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_blocker",
- "project_link": "nonebot-plugin-blocker",
- "name": "Blocker",
- "desc": "分群配置关闭Bot插件",
- "author": "MerCuJerry",
- "homepage": "https://github.com/MerCuJerry/nonebot-plugin-blocker",
- "tags": [
- {
- "label": "Blocker",
- "color": "#39c5bb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.4.5",
- "time": "2024-02-29T08:31:01.720829Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_picture_api",
- "project_link": "nonebot-plugin-picture-api",
- "name": "nonebot-plugin-picture-api",
- "desc": "一款可以自由增删图片指令和api的插件",
- "author": "Q1351998764",
- "homepage": "https://github.com/Q1351998764/nonebot-plugin-picture-api",
- "tags": [
- {
- "label": "图片api",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.5",
- "time": "2023-09-19T15:19:49.310145Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wenan",
- "project_link": "nonebot-plugin-wenan",
- "name": "nonebot-plugin-wenan",
- "desc": "一款可以自由增删文案指令和api的插件",
- "author": "Q1351998764",
- "homepage": "https://github.com/Q1351998764/nonebot-plugin-wenan",
- "tags": [
- {
- "label": "文案api",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0",
- "time": "2023-07-11T12:27:12.020208Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pjsk",
- "project_link": "nonebot-plugin-pjsk",
- "name": "Sekai Stickers",
- "desc": "基于 NoneBot2 的 Project Sekai 表情包制作插件",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_pjsk",
- "tags": [
- {
- "label": "pjsk",
- "color": "#e852eb"
- },
- {
- "label": "啤酒烧烤",
- "color": "#e852eb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.4.0.post1",
- "time": "2024-03-10T10:24:15.027602Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mongodb",
- "project_link": "nonebot-plugin-mongodb",
- "name": "MongoDB",
- "desc": "基于 MongoDB ODM 的数据库管理插件",
- "author": "Well2333",
- "homepage": "https://github.com/Well2333/nonebot-plugin-mongodb",
- "tags": [
- {
- "label": "mongodb",
- "color": "#30a340"
- },
- {
- "label": "beanie",
- "color": "#ff0a0a"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-07-14T10:32:08.006009Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_templates",
- "project_link": "nonebot-plugin-templates",
- "name": "templates_render",
- "desc": "使用htmlrender和jinja2渲染,使用构建的menu,card或dict进行模板渲染",
- "author": "canxin121",
- "homepage": "https://github.com/canxin121/nonebot_plugin_templates",
- "tags": [
- {
- "label": "模板渲染",
- "color": "#eacd52"
- },
- {
- "label": "图片生成",
- "color": "#adea52"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.6",
- "time": "2023-08-24T09:56:33.184091Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pokesomeone",
- "project_link": "nonebot-plugin-pokesomeone",
- "name": "指定戳一戳",
- "desc": "指定戳某人若干次",
- "author": "canxin121",
- "homepage": "https://github.com/canxin121/nonebot_plugin_pokesomeone",
- "tags": [
- {
- "label": "戳一戳",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2023-07-18T16:43:32.796199Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dall-e",
- "project_link": "nonebot-plugin-dall-e",
- "name": "DALL-E绘图",
- "desc": "使用DALL·E绘图",
- "author": "Rockytkg",
- "homepage": "https://github.com/Rockytkg/nonebot_plugin_dall-e",
- "tags": [
- {
- "label": "DALL-E",
- "color": "#ea5252"
- },
- {
- "label": "AI画图",
- "color": "#52ea61"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "time": "2023-07-22T16:19:17.616772Z",
- "version": "0.6",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_tempfile",
- "project_link": "nonebot-plugin-tempfile",
- "name": "方寸狭间",
- "desc": "临时文件/IO 依赖注入支持",
- "author": "NCBM",
- "homepage": "https://github.com/NCBM/nonebot-plugin-tempfile",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-07-21T08:40:50.274108Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_disconnect_notice",
- "project_link": "nonebot-plugin-disconnect-notice",
- "name": "bot断连通知",
- "desc": "bot断连时的通知插件,当前支持邮件通知",
- "author": "Cypas",
- "homepage": "https://github.com/Cypas/nonebot_plugin_disconnect_notice",
- "tags": [
- {
- "label": "掉线通知",
- "color": "#ea5252"
- },
- {
- "label": "邮件",
- "color": "#52eaa4"
- },
- {
- "label": "通知",
- "color": "#cbea52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.5",
- "time": "2023-07-29T03:19:54.426011Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_BotMailNotice",
- "project_link": "nonebot-plugin-BotMailNotice",
- "name": "Bot上下线邮件通知",
- "desc": "Bot上下线发送邮件通知的插件",
- "author": "ZM25XC",
- "homepage": "https://github.com/ZM25XC/BotMailNotice",
- "tags": [
- {
- "label": "Mail",
- "color": "#52e5ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.3",
- "time": "2023-07-24T23:30:29.395759Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_theworld",
- "project_link": "nonebot-plugin-theworld",
- "name": "The World",
- "desc": "「ザ・ワールド」ッ! 時よ止まれ!",
- "author": "A-kirami",
- "homepage": "https://github.com/A-kirami/nonebot-plugin-theworld",
- "tags": [
- {
- "label": "JOJO",
- "color": "#75147c"
- },
- {
- "label": "DIO",
- "color": "#f9d849"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2023-07-25T05:07:38.147930Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nonememe",
- "project_link": "nonebot-plugin-nonememe",
- "name": "NoneMeme",
- "desc": "NoneBot 群大佬的日常",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-nonememe",
- "tags": [
- {
- "label": "NoneMeme",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.3.0",
- "time": "2024-03-10T08:41:05.982627Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_aujob",
- "project_link": "nonebot-plugin-aujob",
- "name": "Among US中的TOH模组职业介绍",
- "desc": "查询TOH模组里职业的玩法描述",
- "author": "qwqZYLqwq",
- "homepage": "https://github.com/qwqZYLqwq/nonebot-plugin-aujob",
- "tags": [
- {
- "label": "among us",
- "color": "#48d5bf"
- },
- {
- "label": "TOH",
- "color": "#05c4f2"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.1.514",
- "time": "2023-07-30T04:28:32.184908Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bind",
- "project_link": "nonebot-plugin-bind",
- "name": "跨平台账户绑定",
- "desc": "nonebot多适配器通用的跨平台账户绑定插件",
- "author": "canxin121",
- "homepage": "https://github.com/canxin121/nonebot_plugin_bind",
- "tags": [
- {
- "label": "跨平台",
- "color": "#5289ea"
- },
- {
- "label": "账户绑定",
- "color": "#6eb428"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.telegram",
- "nonebot.adapters.villa"
- ],
- "valid": false,
- "version": "0.2.2",
- "time": "2023-10-12T14:21:47.024420Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_savepic",
- "project_link": "nonebot-plugin-savepic",
- "name": "Savepic",
- "desc": "表情包保存",
- "author": "Yan-Zero",
- "homepage": "https://github.com/Yan-Zero/nonebot-plugin-savepic",
- "tags": [
- {
- "label": "表情包",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "time": "2023-08-03T04:30:17.668544Z",
- "version": "0.2.0",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_lostark_wandering_trader",
- "project_link": "nonebot-plugin-lostark-wandering-trader",
- "name": "命运方舟流浪商人卡牌刷新提示",
- "desc": "国服命运方舟流浪商人稀有史诗传说卡牌刷新提示",
- "author": "EmiyaGm",
- "homepage": "https://github.com/EmiyaGm/nonebot-plugin-lostark-wandering-trader",
- "tags": [
- {
- "label": "命运方舟",
- "color": "#5289ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.2",
- "time": "2023-09-13T07:03:06.585759Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_csornament",
- "project_link": "nonebot-plugin-csornament",
- "name": "CSGO饰品查询机器人",
- "desc": "一款模拟查找饰品价格的机器人",
- "author": "Sydrr0",
- "homepage": "https://github.com/Sydrr0/nonebot-plugin-csornament",
- "tags": [
- {
- "label": "CS:GO",
- "color": "#047b97"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2023-08-20T09:19:00.439404Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_kanonbot",
- "project_link": "nonebot-plugin-kanonbot",
- "name": "KanonBot",
- "desc": "KanonBot for Nonebot2",
- "author": "SuperGuGuGu",
- "homepage": "https://github.com/SuperGuGuGu/nonebot_plugin_kanonbot",
- "tags": [
- {
- "label": "KanonBot",
- "color": "#44ddff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.qq"
- ],
- "valid": true,
- "version": "0.3.2",
- "time": "2024-01-10T12:59:58.241358Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcversion",
- "project_link": "nonebot-plugin-mcversion",
- "name": "MC版本更新检测",
- "desc": "一个用于检测MC最新版本的插件",
- "author": "CN171-1",
- "homepage": "https://github.com/CN171-1/nonebot_plugin_mcversion",
- "tags": [
- {
- "label": "版本",
- "color": "#ea5252"
- },
- {
- "label": "MC",
- "color": "#52e7ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.0",
- "time": "2023-09-03T09:16:33.881303Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_muteme",
- "project_link": "nonebot-plugin-muteme",
- "name": "Muteme(我禁我自己)",
- "desc": "高仿@能干辉的muteme,我禁我自己",
- "author": "XTxiaoting14332",
- "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-muteme",
- "tags": [
- {
- "label": "禁言",
- "color": "#e45b8d"
- },
- {
- "label": "muteme",
- "color": "#5bc2e4"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "time": "2023-08-21T02:01:58.764932Z",
- "version": "0.0.5",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_jx3",
- "project_link": "nonebot-plugin-jx3",
- "name": "剑网三查询和推送",
- "desc": "是一个使用 NoneBot 框架编写的插件,提供多种剑网三功能如日常查询,预测,金价查询,鲜花,公告,沙盘,jjc,黑市,骚话,奇遇,招募以及多种消息推送功能。",
- "author": "fuyang0811",
- "homepage": "https://github.com/fuyang0811/nonebot-plugin-jx3",
- "tags": [
- {
- "label": "剑网三",
- "color": "#ea5252"
- },
- {
- "label": "jx3",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.7",
- "time": "2023-09-04T17:21:11.860171Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_xinghuo_api",
- "project_link": "nonebot-plugin-xinghuo-api",
- "name": "科大讯飞星火大模型聊天",
- "desc": "Nonebot框架下的科大讯飞星火大模型聊天插件,已适配V2.0版API",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot-plugin-xinghuo-api",
- "tags": [
- {
- "label": "AI",
- "color": "#ea5252"
- },
- {
- "label": "Chat",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "2.2.0",
- "time": "2024-01-31T04:22:26.549372Z",
- "skip_test": false
- },
- {
- "module_name": "dicergirl",
- "project_link": "dicergirl",
- "name": "DicerGirl",
- "desc": "新一代跨平台开源 TRPG 骰娘框架",
- "author": "fu050409",
- "homepage": "https://gitee.com/unvisitor/dicer",
- "tags": [
- {
- "label": "跑团",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "3.5.1",
- "time": "2023-11-22T03:42:16.918080Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_uvdiviner",
- "project_link": "nonebot-plugin-uvdiviner",
- "name": "周易蓍草占卜",
- "desc": "基于古蓍草占卜的算法, 简单的使用`.divine`指令.",
- "author": "fu050409",
- "homepage": "https://gitee.com/unvisitor/nonebot-plugin-uvdiviner",
- "tags": [
- {
- "label": "占卜",
- "color": "#440e0e"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "2.2.11",
- "time": "2023-10-12T06:29:12.854171Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_push",
- "project_link": "nonebot-plugin-push",
- "name": "消息推送插件",
- "desc": "通过邮件、Feishu Webhook 等方式推送消息",
- "author": "mobyw",
- "homepage": "https://github.com/mobyw/nonebot-plugin-push",
- "tags": [
- {
- "label": "邮件",
- "color": "#91c0bd"
- },
- {
- "label": "飞书",
- "color": "#7aaccc"
- },
- {
- "label": "推送",
- "color": "#9e97c4"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-08-15T07:00:53.896995Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_sudo",
- "project_link": "nonebot-plugin-sudo",
- "name": "SUDO",
- "desc": "以指定用户身份执行命令",
- "author": "This-is-XiaoDeng",
- "homepage": "https://github.com/This-is-XiaoDeng/nonebot-plugin-sudo",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.6",
- "time": "2023-09-08T14:15:08.370605Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_arxivRSS",
- "project_link": "nonebot-plugin-arxivRSS",
- "name": "arxiv订阅",
- "desc": "订阅arxiv指定领域每天更新的论文",
- "author": "LuckySJTU",
- "homepage": "https://github.com/LuckySJTU/nonebot-plugin-arxivRSS/",
- "tags": [
- {
- "label": "arxiv",
- "color": "#f30f0f"
- },
- {
- "label": "RSS",
- "color": "#70a7d8"
- },
- {
- "label": "论文",
- "color": "#f541dc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2023-10-13T08:32:19.030042Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_anime_trace",
- "project_link": "nonebot-plugin-anime-trace",
- "name": "识别动漫gal角色",
- "desc": "通过ai.animedb.cn的api识别动漫、galgame角色",
- "author": "tomorinao-www",
- "homepage": "https://github.com/tomorinao-www/nonebot-plugin-anime-trace",
- "tags": [
- {
- "label": "AI",
- "color": "#f541dc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2024-03-16T11:04:32.039016Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_send_message",
- "project_link": "nonebot-plugin-send-message",
- "name": "双向聊天插件",
- "desc": "一个支持双向聊天的传话插件,可用于临时聊天而不想加好友场景",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot_plugin_send_message",
- "tags": [
- {
- "label": "传话",
- "color": "#52ea75"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "3.2",
- "time": "2023-08-22T12:44:22.314961Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_requests",
- "project_link": "nonebot-plugin-requests",
- "name": "Nonebot Requests",
- "desc": "封装 ForwardDriver 实现 HttpClient 功能",
- "author": "Ailitonia",
- "homepage": "https://github.com/Ailitonia/nonebot-plugin-requests",
- "tags": [
- {
- "label": "requests",
- "color": "#80bcc2"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.3",
- "time": "2023-09-25T17:48:14.809234Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_shutup",
- "project_link": "nonebot-plugin-shutup",
- "name": "雪豹闭嘴",
- "desc": "基于 NoneBot2 的 插件,用于机器人当前会话闭嘴,支持全适配器",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_pluigin_shutup",
- "tags": [
- {
- "label": "阻断",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.3",
- "time": "2023-08-28T06:30:44.585765Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_simple_httpcat",
- "project_link": "nonebot-plugin-simple-httpcat",
- "name": "httpcat-状态猫😺",
- "desc": "简单粗暴的httpcat插件,参考了zjkwdy大佬的weather_lite插件",
- "author": "XTxiaoting14332",
- "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-simple-httpcat",
- "tags": [
- {
- "label": "httpcat",
- "color": "#5dbfc8"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.1",
- "time": "2023-08-27T04:32:21.171303Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_qrcode2",
- "project_link": "nonebot-plugin-qrcode2",
- "name": "二维码",
- "desc": "通过pyzbar解析二维码",
- "author": "tomorinao-www",
- "homepage": "https://github.com/tomorinao-www/nonebot-plugin-qrcode2",
- "tags": [
- {
- "label": "qrcode",
- "color": "#f541dc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.2",
- "time": "2024-03-16T10:40:56.486675Z",
- "skip_test": true
- },
- {
- "module_name": "nonebot_plugin_fakemsg",
- "project_link": "nonebot-plugin-fakemsg",
- "name": "消息伪造",
- "desc": "伪造消息",
- "author": "Cvandia",
- "homepage": "https://github.com/Cvandia/nonebot-plugin-fakemsg",
- "tags": [
- {
- "label": "合并转发",
- "color": "#1ae32c"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2024-03-13T05:05:31.741432Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_alchelper",
- "project_link": "nonebot-plugin-alchelper",
- "name": "Alconna 帮助工具",
- "desc": "基于 nonebot-plugin-alconna,给出所有命令帮助以及统计",
- "author": "RF-Tar-Railt",
- "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-alchelper",
- "tags": [
- {
- "label": "Alconna",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.5.0",
- "time": "2024-03-17T08:36:12.645103Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_souti",
- "project_link": "nonebot-plugin-souti",
- "name": "nonebot-plugin-souti",
- "desc": "使用百度不挂科题库, 可以实现文字搜题功能",
- "author": "xiaoWangSec",
- "homepage": "https://github.com/xiaoWangSec/nonebot-plugin-souti",
- "tags": [
- {
- "label": "搜题",
- "color": "#49e3d5"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "1.0.1",
- "time": "2023-09-01T10:26:54.019224Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_helper_plus",
- "project_link": "nonebot-plugin-helper-plus",
- "name": "helper_plus",
- "desc": "带有指令调用控制的高级helper",
- "author": "fR0Z863xF",
- "homepage": "https://github.com/fR0Z863xF/nonebot-plugin-helper-plus",
- "tags": [
- {
- "label": "帮助",
- "color": "#eae152"
- },
- {
- "label": "命令控制",
- "color": "#52ea5c"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2023-09-02T10:51:28.827248Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wearskirt",
- "project_link": "nonebot-plugin-wearskirt",
- "name": "女装 !",
- "desc": "Nonebot 赛博女装插件",
- "author": "Lfhsheng",
- "homepage": "https://github.com/Lfhsheng/nonebot-plugin-wearskirt",
- "tags": [
- {
- "label": "女装",
- "color": "#ffc0cb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.1.5",
- "time": "2023-09-14T11:46:33.966622Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_skland_arksign",
- "project_link": "nonebot-plugin-skland-arksign",
- "name": "森空岛明日方舟签到器",
- "desc": "私聊机器人以获得自动明日方舟森空岛签到服务",
- "author": "GuGuMur",
- "homepage": "https://github.com/GuGuMur/nonebot-plugin-skland-arksign",
- "tags": [
- {
- "label": "森空岛",
- "color": "#c8eb21"
- },
- {
- "label": "明日方舟",
- "color": "#111111"
- },
- {
- "label": "签到",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.7.0",
- "time": "2024-03-10T01:03:45.969491Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_group_whitelist",
- "project_link": "nonebot-plugin-group-whitelist",
- "name": "nonebot_plugin_group_whitelist",
- "desc": "简易群聊白名单",
- "author": "Rikka-desu",
- "homepage": "https://github.com/Rikka-desu/nonebot_plugin_group_whitelist",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.9.2",
- "time": "2023-09-03T14:45:25.318037Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ernie",
- "project_link": "nonebot-plugin-ernie",
- "name": "文心一言",
- "desc": "Nonebot框架下的文心一言聊天插件",
- "author": "Noctulus",
- "homepage": "https://github.com/Noctulus/nonebot-plugin-ernie",
- "tags": [
- {
- "label": "文心一言",
- "color": "#2e317c"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.4",
- "time": "2023-09-06T15:34:07.940810Z",
- "skip_test": false
- },
- {
- "module_name": "TeenStudy",
- "project_link": "teenstudy",
- "name": "青年大学习提交",
- "desc": "一个可以自动提交多地区青年大学习的插件",
- "author": "TeenStudyFlow",
- "homepage": "https://github.com/YouthLearning/TeenStudy",
- "tags": [
- {
- "label": "青年大学习",
- "color": "#7aea52"
- },
- {
- "label": "Web UI",
- "color": "#52eaea"
- },
- {
- "label": "多地区",
- "color": "#dfea52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.6",
- "time": "2023-12-03T07:01:14.234788Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_video_api",
- "project_link": "nonebot-plugin-video-api",
- "name": "nonebot-plugin-video-api",
- "desc": "一款可以自由增删视频指令和api的插件",
- "author": "Q1351998764",
- "homepage": "https://github.com/Q1351998764/nonebot-plugin-video-api",
- "tags": [
- {
- "label": "视频api",
- "color": "#14d8de"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.4",
- "time": "2023-09-20T12:28:56.131803Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ottohzys",
- "project_link": "nonebot-plugin-ottohzys",
- "name": "大电老师活字印刷",
- "desc": "大家好啊,今天来点大家想看的东西",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-ottohzys",
- "tags": [
- {
- "label": "otto",
- "color": "#00a6ed"
- },
- {
- "label": "电棍",
- "color": "#00a6ed"
- },
- {
- "label": "活字印刷",
- "color": "#00a6ed"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.2.0",
- "time": "2024-03-10T07:21:27.575594Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_ability",
- "project_link": "nonebot-plugin-ability",
- "name": "聚能环",
- "desc": "NoneBot 外置电池",
- "author": "KomoriDev",
- "homepage": "https://github.com/KomoriDev/nonebot-plugin-ability",
- "tags": [
- {
- "label": "🔋",
- "color": "#8bff00"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-10-02T06:03:55.280585Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_agent",
- "project_link": "nonebot-plugin-agent",
- "name": "Nonebot Agent",
- "desc": "适配你的插件,让 LLM 来为你处理用户调用",
- "author": "Dobiichi-Origami",
- "homepage": "https://github.com/Dobiichi-Origami/nonebot-plugin-agent#nonebot-plugin-agent",
- "tags": [
- {
- "label": "agent",
- "color": "#99ccff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.0.1",
- "time": "2023-10-03T10:24:53.288475Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_blockwords",
- "project_link": "nonebot-plugin-blockwords",
- "name": "屏蔽词插件",
- "desc": "接收的消息或机器人发送的消息进行屏蔽词检查",
- "author": "MelodyKnit",
- "homepage": "https://github.com/MelodyKnit/nonebot-plugin-blockwords",
- "tags": [
- {
- "label": "word",
- "color": "#99ccff"
- },
- {
- "label": "屏蔽词",
- "color": "#ffcc99"
- },
- {
- "label": "blockwords",
- "color": "#ffcc99"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.1",
- "time": "2023-11-17T12:30:39.467239Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_matchreminder",
- "project_link": "nonebot-plugin-matchreminder",
- "name": "算法比赛查询和今日比赛自动提醒",
- "desc": "可以查询牛客、atcoder、codeforces平台比赛信息并在今日比赛前进行提醒(请在.env.prod添加或修改超级用户,以免出现意料之外的错误)",
- "author": "zhuhiki",
- "homepage": "https://github.com/zhuhiki/nonebot_plugin_matchreminder",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.4",
- "time": "2023-10-27T03:22:47.419866Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_eop_ai",
- "project_link": "nonebot-plugin-eop-ai",
- "name": "talk with eop ai",
- "desc": "Nonebot2 一款调用eop api的AI聊天插件",
- "author": "nikissXI",
- "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_eop_ai",
- "tags": [
- {
- "label": "POE",
- "color": "#bf40bf"
- },
- {
- "label": "GPT",
- "color": "#aaff00"
- },
- {
- "label": "AI",
- "color": "#fa5f55"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.6",
- "time": "2023-11-21T11:31:18.190458Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_playercheck",
- "project_link": "nonebot-plugin-playercheck",
- "name": "nonebot-plugin-playercheck",
- "desc": "一个查询群友音游成分的插件",
- "author": "Ohdmire",
- "homepage": "https://github.com/ohdmire/nonebot-plugin-playercheck",
- "tags": [
- {
- "label": "音游",
- "color": "#ec623c"
- },
- {
- "label": "成分",
- "color": "#ef5ec4"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.5.9",
- "time": "2023-10-09T12:40:24.966289Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_op_finder",
- "project_link": "nonebot-plugin-op-finder",
- "name": "op-finder",
- "desc": "显示当前正在玩原神的人",
- "author": "ninthseason",
- "homepage": "https://github.com/ninthseason/nonebot-plugin-op-finder",
- "tags": [
- {
- "label": "原神",
- "color": "#00a0ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila"
- ],
- "valid": true,
- "version": "1.0.0",
- "time": "2023-10-06T16:40:22.375740Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_morep_finder",
- "project_link": "nonebot-plugin-morep-finder",
- "name": "morep-finder",
- "desc": "显示当前正在玩特定游戏的人",
- "author": "ninthseason",
- "homepage": "https://github.com/ninthseason/nonebot-plugin-morep-finder",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila"
- ],
- "valid": true,
- "version": "1.0.0",
- "time": "2023-10-08T15:37:06.959012Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot-plugin-yesman",
- "project_link": "nonebot-plugin-yesman",
- "name": "肯定机",
- "desc": "你的发言,值得被肯定",
- "author": "EuDs63",
- "homepage": "https://github.com/EuDs63/nonebot-plugin-yesman",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.4.0",
- "time": "2023-11-25T13:58:22.088706Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_fgoavatarguess",
- "project_link": "nonebot-plugin-fgoavatarguess",
- "name": "FGO猜从者",
- "desc": "FGO猜从者插件,基于原HoshinoBot猜从者模块修改,感谢原作者。",
- "author": "influ3nza",
- "homepage": "https://github.com/influ3nza/nonebot-plugin-fgoavatarguess",
- "tags": [
- {
- "label": "FGO",
- "color": "#66cccc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2023-10-12T06:44:39.253781Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_vrchat",
- "project_link": "nonebot-plugin-vrchat",
- "name": "VRChat查询",
- "desc": "使用第三方 API SDK 实现 VRChat 相关操作,例如查询好友状态",
- "author": "Agnes4m",
- "homepage": "https://github.com/Agnes4m/nonebot_plugin_vrchat",
- "tags": [
- {
- "label": "VRChat",
- "color": "#7aea53"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-12-19T01:13:10.989041Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_batitle",
- "project_link": "nonebot-plugin-batitle",
- "name": "BlueArchive Title Generator",
- "desc": "碧蓝档案式标题生成器",
- "author": "MerCuJerry",
- "homepage": "https://github.com/MerCuJerry/nonebot-plugin-batitle",
- "tags": [
- {
- "label": "碧蓝档案",
- "color": "#00d7fb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.6",
- "time": "2024-02-07T09:50:19.398829Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_maimaidx",
- "project_link": "nonebot-plugin-maimaidx",
- "name": "nonebot-plugin-maimaidx",
- "desc": "移植自 mai-bot 开源项目,基于 nonebot2 的街机音游 舞萌DX 的查询插件",
- "author": "Yuri-YuzuChaN",
- "homepage": "https://github.com/Yuri-YuzuChaN/nonebot-plugin-maimaidx",
- "tags": [
- {
- "label": "maimai",
- "color": "#cea6ff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.0.14",
- "time": "2024-03-15T08:44:26.693285Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_getbapics",
- "project_link": "nonebot-plugin-getbapics",
- "name": "nonebot-plugin-getbapics",
- "desc": "Get BA Pictures",
- "author": "hanasa2023",
- "homepage": "https://github.com/hanasa2023/nonebot-plugin-getbapics/blob/master/README.md",
- "tags": [
- {
- "label": "碧蓝档案",
- "color": "#00defe"
- },
- {
- "label": "BA",
- "color": "#00defe"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.red"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2023-10-15T13:52:55.930889Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_make_choice",
- "project_link": "nonebot-plugin-make-choice",
- "name": "选择困难症",
- "desc": "选择困难症?Bot帮你选!",
- "author": "SherkeyXD",
- "homepage": "https://github.com/SherkeyXD/nonebot-plugin-make-choice",
- "tags": [
- {
- "label": "choice",
- "color": "#77c5ff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.4",
- "time": "2023-10-21T07:31:08.895871Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_scheduled_broadcast",
- "project_link": "nonebot-plugin-scheduled-broadcast",
- "name": "定时广播插件",
- "desc": "一款可配置的, 不依赖具体适配器的, 基于事件的定时广播插件.",
- "author": "T0nyX1ang",
- "homepage": "https://github.com/T0nyX1ang/nonebot-plugin-scheduled-broadcast",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.5",
- "time": "2023-11-10T15:14:18.797261Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_any",
- "project_link": "nonebot-plugin-any",
- "name": "Nonebot2 Any 多平台服务",
- "desc": "Nonebot2 多平台统一事件与消息统一构造发送",
- "author": "MelodyYuuka",
- "homepage": "https://github.com/MelodyYuuka/nonebot-plugin-any",
- "tags": [
- {
- "label": "跨平台",
- "color": "#36d399"
- },
- {
- "label": "统一",
- "color": "#fa5f55"
- },
- {
- "label": "工具库",
- "color": "#52eadd"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2023-11-05T07:23:35.833914Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bertvits2",
- "project_link": "nonebot-plugin-bertvits2",
- "name": "nonebot-plugin-bertvits2",
- "desc": "bertvits2语音合成插件",
- "author": "jiangyuxiaoxiao",
- "homepage": "https://github.com/jiangyuxiaoxiao/nonebot-plugin-bertvits2",
- "tags": [
- {
- "label": "语音合成",
- "color": "#9bf6ff"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2023-11-07T14:33:08.673555Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wake_on_lan",
- "project_link": "nonebot-plugin-wake-on-lan",
- "name": "局域网唤醒",
- "desc": "通过发送魔术封包唤醒Bot所在局域网内的设备",
- "author": "tiehu",
- "homepage": "https://github.com/tiehu/nonebot-plugin-wol",
- "tags": [
- {
- "label": "局域网唤醒",
- "color": "#1e90ff"
- },
- {
- "label": "WOL",
- "color": "#4682b4"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.6",
- "time": "2024-03-12T18:08:54.274520Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bingimagecreator",
- "project_link": "nonebot-plugin-bingimagecreator",
- "name": "DALL-E 3绘图",
- "desc": "调用NewBing的DALL-E 3进行绘图",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot_plugin_BingImageCreator.git",
- "tags": [
- {
- "label": "AI",
- "color": "#ea5252"
- },
- {
- "label": "绘图",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.1.5",
- "time": "2024-02-21T03:19:20.848438Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_user",
- "project_link": "nonebot-plugin-user",
- "name": "用户",
- "desc": "管理和绑定不同平台的用户",
- "author": "he0119",
- "homepage": "https://github.com/he0119/nonebot-plugin-user",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2024-02-24T10:06:57.539672Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_shorturl",
- "project_link": "nonebot-plugin-shorturl",
- "name": "短链接服务支持",
- "desc": "为其他插件提供短链接转换服务",
- "author": "StarHeartHunt",
- "homepage": "https://github.com/StarHeartHunt/nonebot-plugin-shorturl",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.4.0",
- "time": "2024-02-29T12:09:58.388205Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_filehost",
- "project_link": "nonebot-plugin-filehost",
- "name": "文件托管支持",
- "desc": "提供跨机文件传输支持,通过 HTTP 服务托管文件",
- "author": "mnixry",
- "homepage": "https://github.com/nonebot/plugin-filehost",
- "tags": [],
- "is_official": true,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "1.1.1",
- "time": "2024-03-01T02:58:01.740199Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_smms",
- "project_link": "nonebot-plugin-smms",
- "name": "sm.ms图床",
- "desc": "sm.ms图床上传与管理",
- "author": "mobyw",
- "homepage": "https://github.com/mobyw/nonebot-plugin-smms",
- "tags": [],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.0",
- "time": "2023-11-23T15:24:16.507383Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nsfw",
- "project_link": "nonebot-plugin-nsfw",
- "name": "群聊 NSFW 图片检测",
- "desc": "群聊 NSFW 图片检测插件,带有撤回、警告、禁言等功能。使用 Safety Checker / NSFW Model",
- "author": "iyume",
- "homepage": "https://github.com/iyume/nonebot-plugin-nsfw",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.10",
- "time": "2023-12-18T17:59:20.124712Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_batarot",
- "project_link": "nonebot-plugin-batarot",
- "name": "碧蓝档案塔罗牌",
- "desc": "碧蓝档案塔罗牌,运势预测与魔法占卜🔮",
- "author": "Perseus037",
- "homepage": "https://github.com/Perseus037/nonebot_plugin_batarot",
- "tags": [
- {
- "label": "碧蓝档案",
- "color": "#15a0df"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.1.post1",
- "time": "2023-12-20T02:30:30.110021Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_cnrail",
- "project_link": "nonebot-plugin-cnrail",
- "name": "CNRail",
- "desc": "查询 12306 列车时刻表",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-cnrail",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.0",
- "time": "2024-03-10T10:16:46.885006Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_longtu",
- "project_link": "nonebot-plugin-longtu",
- "name": "随机龙图",
- "desc": "2024年是龙年...我都准备好了",
- "author": "Perseus037",
- "homepage": "https://github.com/Perseus037/nonebot_plugin_longtu",
- "tags": [
- {
- "label": "龙图",
- "color": "#e1122d"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.1.post1",
- "time": "2024-01-12T00:49:14.405162Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_riffusion",
- "project_link": "nonebot-plugin-riffusion",
- "name": "Riffusion",
- "desc": "你给歌词,AI 作曲",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-riffusion",
- "tags": [
- {
- "label": "Riffusion",
- "color": "#4b39cb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.1",
- "time": "2024-03-10T06:43:23.017592Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_antimonkey",
- "project_link": "nonebot-plugin-antimonkey",
- "name": "AntiMonkey",
- "desc": "自动检测和撤回包含恶心吗喽的图片",
- "author": "phquathi",
- "homepage": "https://github.com/phquathi/nonebot_plugin_antimonkey",
- "tags": [
- {
- "label": "猴子",
- "color": "#ea5252"
- },
- {
- "label": "群管",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.2",
- "time": "2023-12-27T17:39:54.859337Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_waiter",
- "project_link": "nonebot-plugin-waiter",
- "name": "Waiter 插件",
- "desc": "提供一个 got-and-reject 会话控制的替代方案,可自由控制超时时间",
- "author": "RF-Tar-Railt",
- "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-waiter",
- "tags": [
- {
- "label": "waiter",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "library",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.0",
- "time": "2024-01-28T12:16:34.304220Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_imagemaster",
- "project_link": "nonebot-plugin-imagemaster",
- "name": "nonebot-plugin-imagemaster",
- "desc": "提供多种图像处理功能的插件",
- "author": "phquathi",
- "homepage": "https://github.com/phquathi/nonebot_plugin_imagemaster",
- "tags": [
- {
- "label": "修图",
- "color": "#52d4ea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.0.6",
- "time": "2024-01-02T16:25:06.577543Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nikke",
- "project_link": "nonebot-plugin-nikke",
- "name": "nonebot_plugin_nikke",
- "desc": "胜利女神:妮姬多功能插件",
- "author": "Perseus037",
- "homepage": "https://github.com/Perseus037/nonebot_plugin_nikke",
- "tags": [
- {
- "label": "nikke",
- "color": "#e111b7"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.0.post4",
- "time": "2023-12-28T11:31:15.735048Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mcpic",
- "project_link": "nonebot-plugin-mcpic",
- "name": "随机MC图",
- "desc": "随机从推特获取并发送MC建筑图片",
- "author": "wlm3201",
- "homepage": "https://github.com/wlm3201/nonebot-plugin-mcpic",
- "tags": [
- {
- "label": "Minecraft",
- "color": "#3cb371"
- },
- {
- "label": "MC",
- "color": "#3cb371"
- },
- {
- "label": "图片",
- "color": "#3cb371"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2024-01-07T08:20:29.206420Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_pingti",
- "project_link": "nonebot-plugin-pingti",
- "name": "最佳平替",
- "desc": "用更低价的搜索词购物",
- "author": "lgc2333",
- "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-pingti",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.1.4",
- "time": "2024-02-15T10:12:37.601223Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_wx4",
- "project_link": "nonebot-plugin-wx4",
- "name": "文心一言4适配",
- "desc": "文心一言4适配的连续对话",
- "author": "Pasumao",
- "homepage": "https://github.com/Pasumao/nonebot-plugin-wx4",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.3.1",
- "time": "2024-01-09T08:34:55.393316Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_mypower",
- "project_link": "nonebot-plugin-mypower",
- "name": "nonebot-plugin-mypower",
- "desc": "随机生成超能力",
- "author": "tianyisama",
- "homepage": "https://github.com/tianyisama/nonebot_plugin_mypower",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.5",
- "time": "2024-01-15T16:29:40.149453Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bard",
- "project_link": "nonebot-plugin-bard",
- "name": "谷歌Bard聊天",
- "desc": "Nonebot框架下的谷歌Bard聊天插件,支持联网搜索和图片识别",
- "author": "Alpaca4610",
- "homepage": "https://github.com/Alpaca4610/nonebot-plugin-bard",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.3.3",
- "time": "2024-03-19T02:32:41.571851Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nekoimage",
- "project_link": "nonebot-plugin-nekoimage",
- "name": "nonebot-plugin-nekoimage",
- "desc": "A nonebot plugin for integrating with [NekoImageGallery](https://github.com/hv0905/NekoImageGallery).",
- "author": "pk5ls20",
- "homepage": "https://github.com/pk5ls20/nonebot-plugin-nekoimage",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qq"
- ],
- "valid": true,
- "version": "0.3.3",
- "time": "2024-01-15T01:44:34.682356Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_finallines",
- "project_link": "nonebot-plugin-finallines",
- "name": "最终台词",
- "desc": "来一句劲道的最终台词吧,支持多平台适配",
- "author": "Perseus037",
- "homepage": "https://github.com/Perseus037/nonebot_plugin_finallines",
- "tags": [
- {
- "label": "最终台词",
- "color": "#052199"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.1.post2",
- "time": "2024-01-14T10:05:17.058659Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gemini",
- "project_link": "nonebot-plugin-gemini",
- "name": "nonebot-plugin-gemini",
- "desc": "Gemini AI 对话",
- "author": "zhaomaoniu",
- "homepage": "https://github.com/zhaomaoniu/nonebot-plugin-gemini",
- "tags": [
- {
- "label": "Gemini",
- "color": "#3e8ffb"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.3.0",
- "time": "2024-02-11T08:21:46.952771Z",
- "skip_test": false
- },
- {
- "module_name": "haruka_bot_red",
- "project_link": "haruka_bot_red",
- "name": "haruka_bot_red",
- "desc": "将B站UP主的动态和直播信息推送至QQ,适配red协议",
- "author": "boxie123",
- "homepage": "https://github.com/boxie123/HarukaBot-Red",
- "tags": [
- {
- "label": "bilibili",
- "color": "#c83f3f"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.red"
- ],
- "valid": true,
- "version": "0.1.7",
- "time": "2024-01-21T11:14:26.959398Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_enatfrp",
- "project_link": "nonebot-plugin-enatfrp",
- "name": "SakuraFrp",
- "desc": "SakuraFrp管理插件,natfrp.com。",
- "author": "eya46",
- "homepage": "https://github.com/eya46/nonebot_plugin_enatfrp",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.2.0",
- "time": "2024-03-09T06:14:37.754340Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_nezha",
- "project_link": "nonebot-plugin-nezha",
- "name": "哪吒监控插件",
- "desc": "哪吒监控插件,使用哪吒监控API。",
- "author": "eya46",
- "homepage": "https://github.com/eya46/nonebot_plugin_nezha",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.4.2",
- "time": "2024-03-10T07:31:54.957813Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_randpic",
- "project_link": "nonebot-plugin-randpic",
- "name": "随机发送图片",
- "desc": "发送自定义指令后bot会随机发出一张你所存储的图片",
- "author": "HuParry",
- "homepage": "https://github.com/HuParry/nonebot-plugin-randpic",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.3",
- "time": "2024-01-28T03:00:27.181559Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_BAdrawcard",
- "project_link": "nonebot-plugin-badrawcard",
- "name": "BA模拟抽卡",
- "desc": "模拟实现了碧蓝档案游戏的抽卡功能, 自动化了更新卡池、FES提高卡池概率",
- "author": "lengmianzz",
- "homepage": "https://github.com/lengmianzz/nonebot-plugin-BAdrawcard",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.2.3",
- "time": "2024-01-31T03:56:01.881602Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_gpt",
- "project_link": "nonebot-plugin-gpt",
- "name": "ChatGPT 聊天",
- "desc": "通过浏览器使用 ChatGPT,兼容 onebot v11 与 adapter-qq 适配器",
- "author": "nek0us",
- "homepage": "https://github.com/nek0us/nonebot-plugin-gpt",
- "tags": [
- {
- "label": "ChatGPT",
- "color": "#50ec9d"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.qq"
- ],
- "valid": false,
- "version": "0.0.10",
- "time": "2024-03-20T02:02:55.902116Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_easy_blacklist",
- "project_link": "nonebot-plugin-easy-blacklist",
- "name": "黑名单插件",
- "desc": "一个轻量级的黑名单插件,支持api接入全平台,内存占用优化中",
- "author": "bingqiu456",
- "homepage": "https://github.com/bingqiu456/nonebot-plugin-easy-blacklist",
- "tags": [],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "1.5",
- "time": "2024-02-15T06:25:00.316113Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_reminder",
- "project_link": "nonebot-plugin-reminder",
- "name": "定时提醒",
- "desc": "主要用来提醒大家别忘记什么事情,可以看成定时提醒插件",
- "author": "velor2012",
- "homepage": "https://github.com/velor2012/nonebot_plugin_reminder",
- "tags": [
- {
- "label": "scheduler",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.3.1.post1",
- "time": "2024-02-20T13:09:13.542306Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chikari_yinpa",
- "project_link": "nonebot-plugin-chikari-yinpa",
- "name": "Chikari_yinpa",
- "desc": "一个普通的银趴插件",
- "author": "mrqx0195",
- "homepage": "https://github.com/mrqx0195/nonebot_plugin_chikari_yinpa",
- "tags": [
- {
- "label": "yinpa",
- "color": "#ffff00"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "1.3.4",
- "time": "2024-03-17T10:07:16.276530Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_splatoon3_nso",
- "project_link": "nonebot-plugin-splatoon3-nso",
- "name": "splatoon3游戏nso查询",
- "desc": "一个基于nonebot2框架的splatoon3游戏nso数据查询插件",
- "author": "Cypas",
- "homepage": "https://github.com/Cypas/splatoon3-nso",
- "tags": [
- {
- "label": "splatoon3",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "1.3.0",
- "time": "2024-02-28T04:35:02.889426Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_bf1marneserverlist",
- "project_link": "nonebot-plugin-bf1marneserverlist",
- "name": "战地1-马恩私人服务器服务器查询",
- "desc": "Onebot 战地1 马恩私人服务器服务器查询插件",
- "author": "SAFEluren",
- "homepage": "https://github.com/SAFEluren/nonebot-plugin-bf1marneserverlist",
- "tags": [
- {
- "label": "server",
- "color": "#ea5252"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.23",
- "time": "2024-03-09T09:29:36.925598Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_kawaii_status",
- "project_link": "nonebot-plugin-kawaii-status",
- "name": "运行状态",
- "desc": "NoneBot2 服务器状态查看插件",
- "author": "KomoriDev",
- "homepage": "https://github.com/KomoriDev/nonebot-plugin-kawaii-status",
- "tags": [
- {
- "label": "简约",
- "color": "#54adff"
- },
- {
- "label": "可爱",
- "color": "#ffb3cc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": false,
- "version": "0.1.3",
- "time": "2024-03-08T11:20:28.985839Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_vits_tts",
- "project_link": "nonebot-plugin-vits-tts",
- "name": "nonebot-plugin-vits-tts",
- "desc": "基于vits的tts语音合成",
- "author": "Redmomn",
- "homepage": "https://github.com/Redmomn/nonebot-plugin-vits-tts",
- "tags": [
- {
- "label": "VITS",
- "color": "#ea5252"
- },
- {
- "label": "TTS",
- "color": "#52dbea"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.6",
- "time": "2024-03-07T05:12:46.624809Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_chatglm_plus",
- "project_link": "nonebot-plugin-chatglm-plus",
- "name": "人性化的ChatGLM",
- "desc": "人性化的ChatGLM插件,支持预设和上下文",
- "author": "XTxiaoting14332",
- "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-chatglm-plus",
- "tags": [
- {
- "label": "ChatGLM",
- "color": "#73cccc"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.console",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.7",
- "time": "2024-03-10T05:32:29.222783Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_fishing",
- "project_link": "nonebot-plugin-fishing",
- "name": "赛博钓鱼",
- "desc": "你甚至可以电子钓鱼",
- "author": "C14H22O",
- "homepage": "https://github.com/C14H22O/nonebot-plugin-fishing",
- "tags": [
- {
- "label": "钓鱼",
- "color": "#87cefa"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": null,
- "valid": true,
- "version": "0.2.1",
- "time": "2024-03-09T13:57:57.644380Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_a2s_query",
- "project_link": "nonebot-plugin-a2s-query",
- "name": "a2s查询",
- "desc": "查询value服务器详情",
- "author": "NanakaNeko",
- "homepage": "https://github.com/NanakaNeko/nonebot-plugin-a2s-query",
- "tags": [
- {
- "label": "游戏服务器",
- "color": "#ea5252"
- },
- {
- "label": "value",
- "color": "#99ea52"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.7",
- "time": "2024-03-11T03:38:52.710058Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_dice_narrator",
- "project_link": "nonebot-plugin-dice-narrator",
- "name": "nonebot-plugin-dice-narrator",
- "desc": "一只可爱的 AI 掷骰姬,支持各种事件检定",
- "author": "KroMiose",
- "homepage": "https://github.com/KroMiose/nonebot_plugin_dice_narrator",
- "tags": [
- {
- "label": "GPT",
- "color": "#29b752"
- },
- {
- "label": "掷骰姬",
- "color": "#c84b9d"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": true,
- "version": "0.1.9",
- "time": "2024-03-14T02:27:12.730739Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_steam_info",
- "project_link": "nonebot-plugin-steam-info",
- "name": "Steam Info",
- "desc": "播报绑定的 Steam 好友状态",
- "author": "zhaomaoniu",
- "homepage": "https://github.com/zhaomaoniu/nonebot-plugin-steam-info",
- "tags": [
- {
- "label": "Steam",
- "color": "#14305e"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.bilibili",
- "nonebot.adapters.console",
- "nonebot.adapters.ding",
- "nonebot.adapters.discord",
- "nonebot.adapters.dodo",
- "nonebot.adapters.feishu",
- "nonebot.adapters.github",
- "nonebot.adapters.kaiheila",
- "nonebot.adapters.minecraft",
- "nonebot.adapters.mirai2",
- "nonebot.adapters.ntchat",
- "nonebot.adapters.onebot.v11",
- "nonebot.adapters.onebot.v12",
- "nonebot.adapters.qq",
- "nonebot.adapters.red",
- "nonebot.adapters.satori",
- "nonebot.adapters.telegram"
- ],
- "valid": true,
- "version": "0.1.1",
- "time": "2024-03-15T13:55:30.722873Z",
- "skip_test": false
- },
- {
- "module_name": "nonebot_plugin_orangejuice",
- "project_link": "nonebot-plugin-orangejuice",
- "name": "100orangejuice",
- "desc": "100orangejuice",
- "author": "GLDYM",
- "homepage": "https://github.com/FDCraft/nonebot-plugin-orangejuice",
- "tags": [
- {
- "label": "百橙",
- "color": "#ed6f00"
- },
- {
- "label": "100OJ",
- "color": "#ed6f00"
- }
- ],
- "is_official": false,
- "type": "application",
- "supported_adapters": [
- "nonebot.adapters.onebot.v11"
- ],
- "valid": false,
- "version": "0.5.0",
- "time": "2024-03-20T01:58:28.461963Z",
- "skip_test": false
- }
+[
+ {
+ "module_name": "nonebot_plugin_status",
+ "project_link": "nonebot-plugin-status",
+ "name": "服务器状态查看",
+ "desc": "通过戳一戳获取服务器状态",
+ "author": "yanyongyu",
+ "homepage": "https://github.com/nonebot/plugin-status",
+ "tags": [
+ {
+ "label": "server",
+ "color": "#aeeaa8"
+ }
+ ],
+ "is_official": true,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.8.1",
+ "time": "2024-03-04T06:57:10.250823Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "haruka_bot",
+ "project_link": "haruka-bot",
+ "name": "haruka_bot",
+ "desc": "将B站UP主的动态和直播信息推送至QQ",
+ "author": "SK-415",
+ "homepage": "https://github.com/SK-415/HarukaBot",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#e55d80"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qqguild"
+ ],
+ "valid": true,
+ "version": "1.6.0.post5",
+ "time": "2023-07-11T09:24:58.972905Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_rauthman",
+ "project_link": "nonebot-plugin-rauthman",
+ "name": "RAM - 基于规则的授权管理",
+ "desc": "为 Matcher 配置一条或多条 Rule 来实现功能的授权管理",
+ "author": "Lancercmd",
+ "homepage": "https://github.com/Lancercmd/nonebot_plugin_rauthman",
+ "tags": [
+ {
+ "label": "rule",
+ "color": "#4ec9b0"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.0.0rc1.post3",
+ "time": "2023-07-18T01:25:54.487870Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_docs",
+ "project_link": "nonebot-plugin-docs",
+ "name": "NoneBot 离线文档",
+ "desc": "在本地查看 NoneBot 文档",
+ "author": "nonebot",
+ "homepage": "https://github.com/nonebot/nonebot2/blob/master/packages/nonebot-plugin-docs",
+ "tags": [],
+ "is_official": true,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "2.2.1",
+ "time": "2024-02-24T04:41:45.707475Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sentry",
+ "project_link": "nonebot-plugin-sentry",
+ "name": "Sentry日志监控",
+ "desc": "使用Sentry监控机器人日志并处理报错",
+ "author": "yanyongyu",
+ "homepage": "https://github.com/nonebot/plugin-sentry",
+ "tags": [
+ {
+ "label": "log",
+ "color": "#6be3ea"
+ }
+ ],
+ "is_official": true,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.1.0",
+ "time": "2024-02-14T03:21:49.744244Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_apscheduler",
+ "project_link": "nonebot-plugin-apscheduler",
+ "name": "定时任务",
+ "desc": "APScheduler 定时任务插件",
+ "author": "yanyongyu",
+ "homepage": "https://github.com/nonebot/plugin-apscheduler",
+ "tags": [],
+ "is_official": true,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-02-12T13:56:49.110411Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_picsearcher",
+ "project_link": "nonebot-plugin-picsearcher",
+ "author": "synodriver",
+ "desc": "从基本上所有你想的出名字的搜图平台找图片",
+ "name": "图片搜索",
+ "homepage": "https://github.com/synodriver/nonebot_plugin_picsearcher",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-05T07:21:34.473939Z",
+ "version": "0.1.10",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_navicat",
+ "project_link": "nonebot-plugin-navicat",
+ "author": "synodriver",
+ "desc": "连接至各种数据库,为其他插件导出连接对象",
+ "name": "通用数据库连接",
+ "homepage": "https://github.com/synodriver/nonebot_plugin_navicat",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-25T08:55:44.847476Z",
+ "version": "0.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_translator",
+ "project_link": "nonebot-plugin-translator",
+ "name": "多语种翻译插件",
+ "desc": "接口来自 腾讯机器翻译 TMT",
+ "author": "Lancercmd",
+ "homepage": "https://github.com/Lancercmd/nonebot_plugin_translator",
+ "tags": [
+ {
+ "label": "func",
+ "color": "#dcdcaa"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.0.0b4.post2",
+ "time": "2023-07-18T01:28:04.958803Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mqtt",
+ "project_link": "nonebot-plugin-mqtt",
+ "name": "MQTT",
+ "desc": "Nonebot2 MQTT 插件",
+ "author": "synodriver",
+ "homepage": "https://github.com/synodriver/nonebot_plugin_mqtt",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.2",
+ "time": "2023-09-06T16:06:14.974473Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_songpicker2",
+ "project_link": "nonebot-plugin-songpicker2",
+ "name": "songpicker2",
+ "desc": "点播歌曲,支持候选菜单、热评显示,数据源为网易云",
+ "author": "maxesisn",
+ "homepage": "https://github.com/maxesisn/nonebot_plugin_songpicker2",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.6",
+ "time": "2023-06-27T09:24:09.247555Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_strman",
+ "project_link": "nonebot-plugin-strman",
+ "author": "echobot-dev",
+ "desc": "通过字符串标签在文件中集中管理字符串",
+ "name": "字符串管理工具",
+ "homepage": "https://github.com/echobot-dev/nonebot-plugin-strman",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-10T17:04:34.269452Z",
+ "version": "1.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_bison",
+ "project_link": "nonebot-bison",
+ "name": "Bison",
+ "desc": "通用订阅推送插件",
+ "author": "felinae98",
+ "homepage": "https://github.com/felinae98/nonebot-bison",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.9.1",
+ "time": "2024-03-06T04:41:42.379114Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-ncm",
+ "project_link": "nonebot-plugin-ncm",
+ "author": "kitUIN",
+ "desc": "网易云 无损音乐 点歌/下载",
+ "name": "网易云无损音乐下载",
+ "homepage": "https://github.com/kitUIN/nonebot-plugin-ncm",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "a:cqhttp",
+ "color": "#000000"
+ },
+ {
+ "label": "t:Netease",
+ "color": "#ec4141"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-03T07:50:12.633674Z",
+ "version": "1.6.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cocdicer",
+ "project_link": "nonebot-plugin-cocdicer",
+ "author": "abrahum",
+ "desc": "COC跑团骰子娘",
+ "name": "nonebot-plugin-cocdicer",
+ "homepage": "https://github.com/abrahum/nonebot_plugin_cocdicer",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-07-28T08:59:43.166497Z",
+ "version": "0.4.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_guess",
+ "project_link": "nonebot-plugin-guess",
+ "author": "ffreemt",
+ "desc": "多次互动猜名字游戏,自带猜城市名,可定制",
+ "name": "猜猜看",
+ "homepage": "https://github.com/ffreemt/nonebot-plugin-guess-game",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-16T02:53:33.507492Z",
+ "version": "0.1.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_abbrreply",
+ "project_link": "nonebot-plugin-abbrreply",
+ "author": "anlen123",
+ "desc": "输入拼音首字母,猜测文字",
+ "name": "缩写查询器",
+ "homepage": "https://github.com/anlen123/nonebot_plugin_abbrreply",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-21T03:18:13.320169Z",
+ "version": "1.1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_biliav",
+ "project_link": "nonebot-plugin-biliav",
+ "author": "knva",
+ "desc": "将用户发的av号或者bv号转成小程序返回",
+ "name": "biliav小程序转换器",
+ "homepage": "https://github.com/knva/nonebot_plugin_biliav",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-19T03:28:14.663442Z",
+ "version": "1.0.11",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_analysis_bilibili",
+ "project_link": "nonebot-plugin-analysis-bilibili",
+ "name": "bilibili视频、番剧解析",
+ "desc": "自动解析bilibili视频、番剧解析",
+ "author": "mengshouer",
+ "homepage": "https://github.com/mengshouer/nonebot_plugin_analysis_bilibili",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-01-16T10:41:17.818638Z",
+ "version": "2.6.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_localstore",
+ "project_link": "nonebot-plugin-localstore",
+ "name": "本地数据存储",
+ "desc": "存储插件数据至本地文件",
+ "author": "yanyongyu",
+ "homepage": "https://github.com/nonebot/plugin-localstore",
+ "tags": [],
+ "is_official": true,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2024-02-11T10:14:07.410250Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_alconna",
+ "project_link": "nonebot-plugin-alconna",
+ "name": "Alconna 插件",
+ "desc": "提供 ArcletProject/Alconna 的 Nonebot2 适配版本与工具",
+ "author": "RF-Tar-Railt",
+ "homepage": "https://github.com/nonebot/plugin-alconna",
+ "tags": [
+ {
+ "label": "多适配器",
+ "color": "#5280ea"
+ },
+ {
+ "label": "消息匹配",
+ "color": "#ea6f52"
+ },
+ {
+ "label": "跨平台",
+ "color": "#5452ea"
+ }
+ ],
+ "is_official": true,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.41.1",
+ "time": "2024-03-20T06:05:58.427456Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcstatus",
+ "project_link": "nonebot-plugin-mcstatus",
+ "name": "Minecraft 服务器状态查询",
+ "desc": "顾名思义",
+ "author": "j1g5awi",
+ "homepage": "https://github.com/nonepkg/nonebot-plugin-mcstatus",
+ "tags": [
+ {
+ "label": "t:Minecraft",
+ "color": "#80070B"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-03T07:30:25.393339Z",
+ "version": "0.1.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_help",
+ "project_link": "nonebot-plugin-help",
+ "name": "Nonebot2 Help Menu",
+ "desc": "Nonebot2轻量级帮助插件",
+ "author": "XZhouQD",
+ "homepage": "https://github.com/xzhouqd/nonebot-plugin-help",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.1",
+ "time": "2023-08-11T12:21:58.006152Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_alias",
+ "project_link": "nonebot-plugin-alias",
+ "name": "alias命令别名",
+ "desc": "为复杂的命令创建别名",
+ "author": "MeetWq",
+ "homepage": "https://github.com/MeetWq/nonebot-plugin-alias",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-06-20T17:45:31.642072Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_withdraw",
+ "project_link": "nonebot-plugin-withdraw",
+ "name": "Nonebot2 消息撤回插件",
+ "desc": "用于让机器人撤回自己发出的消息",
+ "author": "MeetWq",
+ "homepage": "https://github.com/MeetWq/nonebot-plugin-withdraw",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-06-20T18:15:41.588691Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pixivrank_search",
+ "project_link": "nonebot-plugin-pixivrank-search",
+ "name": "nonebot_plugin_pixivrank_search",
+ "desc": "基于RSSHUB阅读器的P站排行和P站搜图",
+ "author": "HibiKier",
+ "homepage": "https://github.com/HibiKier/nonebot_plugin_pixivrank_search",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-02-18T09:53:18.929348Z",
+ "version": "0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_russian",
+ "project_link": "nonebot-plugin-russian",
+ "name": "nonebot_plugin_russian",
+ "desc": "群内小游戏,使用金币赌注的俄罗斯轮盘",
+ "author": "HibiKier",
+ "homepage": "https://github.com/HibiKier/nonebot_plugin_russian",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-21T17:02:28.204634Z",
+ "version": "0.2.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_setu",
+ "project_link": "nonebot-plugin-setu",
+ "name": "nonebot_plugin_setu",
+ "desc": "基于loliconImage Api的涩图插件,内置涩图CD",
+ "author": "ayanamiblhx",
+ "homepage": "https://github.com/ayanamiblhx/nonebot_plugin_setu",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-23T13:27:43.283834Z",
+ "version": "1.1.11",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_heweather",
+ "project_link": "nonebot-plugin-heweather",
+ "name": "和风天气",
+ "desc": "和风天气图片显示插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-heweather",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.8.2",
+ "time": "2024-03-14T08:49:11.758260Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_autohelp",
+ "project_link": "nonebot-plugin-autohelp",
+ "name": "nonebot-plugin-autohelp",
+ "desc": "响应help/菜单/帮助(群消息或私信)并提供已载入插件的帮助信息(如命令名,aliases,模块文档)",
+ "author": "ffreemt",
+ "homepage": "https://github.com/ffreemt/nonebot-plugin-autohelp",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-15T16:43:57.811690Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_flexperm",
+ "project_link": "nonebot-plugin-flexperm",
+ "name": "nonebot-plugin-flexperm",
+ "desc": "精细化的 NoneBot 权限管理插件",
+ "author": "rmuchan",
+ "homepage": "https://github.com/rmuchan/nonebot-plugin-flexperm",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-13T10:41:21.102121Z",
+ "version": "0.7.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_epicfree",
+ "project_link": "nonebot-plugin-epicfree",
+ "name": "Epic 限免游戏资讯",
+ "desc": "EpicGameStore 喜加一资讯插件,发送「喜加一」逝世看吧!",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot_plugin_epicfree",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-30T07:57:15.417775Z",
+ "version": "0.2.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "ELF_RSS2",
+ "project_link": "ELF-RSS",
+ "name": "ELF_RSS",
+ "desc": "QQ机器人 RSS订阅 插件,订阅源建议选择 RSSHub",
+ "author": "Quan666",
+ "homepage": "https://github.com/Quan666/ELF_RSS",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.6.21",
+ "time": "2023-08-28T09:03:15.911695Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_simplemusic",
+ "project_link": "nonebot-plugin-simplemusic",
+ "name": "SimpleMusic",
+ "desc": "最简Q群点歌插件,支持QQ音乐、网易云、酷我、酷狗、咪咕、B站音频区",
+ "author": "MeetWq",
+ "homepage": "https://github.com/MeetWq/nonebot-plugin-simplemusic",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-10T00:23:57.197112Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nb2chan",
+ "project_link": "nb2chan",
+ "name": "nb2chan",
+ "desc": "Nonebot2酱推送",
+ "author": "yucongo",
+ "homepage": "https://github.com/ffreemt/nb2chan",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-02-20T08:21:36.557860Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_setu_now",
+ "project_link": "nonebot-plugin-setu-now",
+ "name": "nonebot-plugin-setu-now",
+ "desc": "另一个色图插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-setu-now",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.4",
+ "time": "2023-08-15T03:53:06.050378Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "leetcode",
+ "project_link": "nonebot-plugin-leetcode",
+ "name": "leetcode提醒机器人",
+ "desc": " 安装该插件后能往指定qq和指定qq群定时发送leetcode每日一题",
+ "author": "zxz0415",
+ "homepage": "https://github.com/zxz0415/leetcode",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-04-01T17:49:40.640240Z",
+ "version": "0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_youthstudy",
+ "project_link": "nonebot-plugin-youthstudy",
+ "name": "nonebot_plugin_youthstudy",
+ "desc": "基于nonebot的青年大学习插件,用来获取最新一期的青年大学习答案",
+ "author": "ayanamiblhx",
+ "homepage": "https://github.com/ayanamiblhx/nonebot_plugin_youthstudy",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-28T07:13:51.801710Z",
+ "version": "1.1.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_shindan",
+ "project_link": "nonebot-plugin-shindan",
+ "name": "趣味占卜",
+ "desc": "使用ShindanMaker网站的趣味占卜",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-shindan",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [],
+ "valid": true,
+ "version": "0.6.1",
+ "time": "2024-03-14T15:12:03.829758Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_code",
+ "project_link": "nonebot-plugin-code",
+ "name": "在线运行代码",
+ "desc": "在线运行编程代码,语句",
+ "author": "yzyyz1387",
+ "homepage": "https://github.com/yzyyz1387/nonebot_plugin_code",
+ "tags": [
+ {
+ "label": "func",
+ "color": "#dcdcaa"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.7",
+ "time": "2023-09-08T10:48:27.349570Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_picsbank",
+ "project_link": "nonebot-plugin-picsbank",
+ "name": "picsbank",
+ "desc": "匹配图片进行回答",
+ "author": "Diaosi1111",
+ "homepage": "https://github.com/Diaosi1111/nonebot_plugin_picsbank",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-02-20T06:35:20.914620Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tvseries",
+ "project_link": "nonebot-plugin-tvseries",
+ "name": "剧集更新列表",
+ "desc": "获取聚集更新",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-tvseries",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-02-14T13:24:06.272775Z",
+ "version": "0.0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_lolmatch",
+ "project_link": "nonebot-plugin-lolmatch",
+ "name": "lol比赛信息",
+ "desc": "简单的lol比赛信息插件,订阅后会定时推送当日比赛结果",
+ "author": "Diaosi1111",
+ "homepage": "https://github.com/Diaosi1111/nonebot_plugin_lolmatch",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-07T05:54:54.351311Z",
+ "version": "0.3.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "OlivOS.nonebot",
+ "project_link": "olivos.nb2",
+ "name": "OlivOS.nb2",
+ "desc": "在 NoneBot2 中加载 OlivOS 插件",
+ "author": "j1g5awi",
+ "homepage": "https://github.com/nonepkg/OlivOS.nb2",
+ "tags": [
+ {
+ "label": "OlivOS",
+ "color": "#00a0ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.2",
+ "time": "2023-06-20T16:04:40.706727Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_htmlrender",
+ "project_link": "nonebot-plugin-htmlrender",
+ "name": "nonebot-plugin-htmlrender",
+ "desc": "通过浏览器渲染图片",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-htmlrender",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.3.1",
+ "time": "2024-03-14T08:47:15.010445Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_admin",
+ "project_link": "nonebot-plugin-admin",
+ "name": "不简易群管",
+ "desc": "Nonebot2 群管插件 插件",
+ "author": "yzyyz1387",
+ "homepage": "https://github.com/yzyyz1387/nonebot_plugin_admin",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.4.5.4",
+ "time": "2024-02-29T03:41:19.424728Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_memes",
+ "project_link": "nonebot-plugin-memes",
+ "name": "表情包制作",
+ "desc": "制作各种沙雕表情包",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-memes",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [],
+ "valid": true,
+ "version": "0.6.2",
+ "time": "2024-03-12T09:27:09.610250Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_repeater",
+ "project_link": "nonebot-plugin-repeater",
+ "name": "群聊复读机",
+ "desc": "谁不喜欢+1呢?",
+ "author": "ninthseason",
+ "homepage": "https://github.com/ninthseason/nonebot-plugin-repeater",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-01T11:49:25.518834Z",
+ "version": "3.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_directlinker",
+ "project_link": "nonebot-plugin-directlinker",
+ "name": "群文件直链提取器",
+ "desc": "提取群文件的下载直链。",
+ "author": "ninthseason",
+ "homepage": "https://github.com/ninthseason/nonebot-plugin-directlinker",
+ "tags": [
+ {
+ "label": "a:cqhttp",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-12T14:21:08.959060Z",
+ "version": "2.4.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_forwarder",
+ "project_link": "nonebot-plugin-forwarder",
+ "name": "转发姬",
+ "desc": "群聊消息实时转发",
+ "author": "ninthseason",
+ "homepage": "https://github.com/ninthseason/nonebot_plugin_forwarder",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-23T06:30:08.821807Z",
+ "version": "2.1.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_roll",
+ "project_link": "nonebot-plugin-roll",
+ "name": "掷骰子",
+ "desc": "掷骰!扔出指定个数的多面骰子🎲",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_roll",
+ "tags": [
+ {
+ "label": "roll",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.3",
+ "time": "2023-10-18T02:03:43.776108Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_crazy_thursday",
+ "project_link": "nonebot-plugin-crazy-thursday",
+ "name": "疯狂星期四",
+ "desc": "持续疯狂!KFC疯狂星期四🍗",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_crazy_thursday",
+ "tags": [
+ {
+ "label": "Thursday",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.8",
+ "time": "2023-10-07T01:52:39.951306Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_covid19_news",
+ "project_link": "nonebot-plugin-covid19-news",
+ "name": "新冠疫情查询",
+ "desc": "查询国内城市新冠疫情信息与政策",
+ "author": "Zeta-qixi",
+ "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-covid19-news",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-17T05:15:45.018998Z",
+ "version": "0.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_remake",
+ "project_link": "nonebot-plugin-remake",
+ "name": "人生重开",
+ "desc": "人生重开模拟器",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-remake",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-03-12T06:00:09.515301Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_weather_lite",
+ "project_link": "nonebot-plugin-weather-lite",
+ "name": "天气查询",
+ "desc": "使用wttr.in的在线天气查询。",
+ "author": "zjkwdy",
+ "homepage": "https://github.com/zjkwdy/nonebot_plugin_weather_lite",
+ "tags": [
+ {
+ "label": "t:天气",
+ "color": "#6ec3d9"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-01-20T03:34:36.465960Z",
+ "version": "0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_fortune",
+ "project_link": "nonebot-plugin-fortune",
+ "name": "今日运势",
+ "desc": "抽签!占卜你的今日运势🙏",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_fortune",
+ "tags": [
+ {
+ "label": "fortune",
+ "color": "#ea6f52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.12",
+ "time": "2023-07-15T14:42:48.258728Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tarot",
+ "project_link": "nonebot-plugin-tarot",
+ "name": "塔罗牌",
+ "desc": "塔罗牌!魔法占卜🔮",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/KafCoppelia/nonebot_plugin_tarot",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#eaa452"
+ },
+ {
+ "label": "t:tarot",
+ "color": "#461264"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-28T12:56:24.105825Z",
+ "version": "0.4.0.post4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_emojimix",
+ "project_link": "nonebot-plugin-emojimix",
+ "name": "emoji合成",
+ "desc": "将两个emoji合成为一张图片",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-emojimix",
+ "tags": [
+ {
+ "label": "emoji",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-03-01T02:49:06.907659Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_what2eat",
+ "project_link": "nonebot-plugin-what2eat",
+ "name": "今天吃什么",
+ "desc": "选择恐惧症?让Bot决定你今天吃什么🍕",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/KafCoppelia/nonebot_plugin_what2eat",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#cd3d3d"
+ },
+ {
+ "label": "t:what2eat",
+ "color": "#f09526"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-02T11:55:27.491231Z",
+ "version": "0.3.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_datastore",
+ "project_link": "nonebot-plugin-datastore",
+ "name": "数据存储",
+ "desc": "NoneBot 数据存储插件",
+ "author": "he0119",
+ "homepage": "https://github.com/he0119/nonebot-plugin-datastore",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.2.0",
+ "time": "2024-02-28T09:01:07.651465Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_boardgame",
+ "project_link": "nonebot-plugin-boardgame",
+ "name": "棋类游戏",
+ "desc": "五子棋、黑白棋、围棋",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-boardgame",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-03-02T09:28:02.725259Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wordcloud",
+ "project_link": "nonebot-plugin-wordcloud",
+ "name": "词云",
+ "desc": "利用群消息生成词云",
+ "author": "he0119",
+ "homepage": "https://github.com/he0119/nonebot-plugin-wordcloud",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.7.0",
+ "time": "2024-03-01T04:23:25.937459Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatrecorder",
+ "project_link": "nonebot-plugin-chatrecorder",
+ "name": "聊天记录",
+ "desc": "记录机器人收到和发出的消息",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-chatrecorder",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2024-03-01T02:09:06.819616Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_antiflash",
+ "project_link": "nonebot-plugin-antiflash",
+ "name": "群聊反闪照",
+ "desc": "顾名思义🎇",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/KafCoppelia/nonebot_plugin_antiflash",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#6f64d4"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-04-19T02:00:25.241994Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_word_bank2",
+ "project_link": "nonebot-plugin-word-bank2",
+ "name": "nonebot-plugin-word-bank2",
+ "desc": "无数据库的轻量问答插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-word-bank2",
+ "tags": [
+ {
+ "label": "wordbank",
+ "color": "#0b00ff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.8",
+ "time": "2023-06-15T04:20:03.438577Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_txt2img",
+ "project_link": "nonebot-plugin-txt2img",
+ "name": "文字转图片",
+ "desc": "使用 Pillow 进行文字转图片",
+ "author": "mobyw",
+ "homepage": "https://github.com/mobyw/nonebot-plugin-txt2img",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-02-22T05:25:41.002376Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_morning",
+ "project_link": "nonebot-plugin-morning",
+ "name": "おはよう!",
+ "desc": "早晚安记录作息,培养优质睡眠😴",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/KafCoppelia/nonebot_plugin_morning",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#da421c"
+ },
+ {
+ "label": "t:morning",
+ "color": "#ebc025"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-28T03:36:05.610930Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pixiv",
+ "project_link": "nonebot-plugin-pixiv",
+ "name": "pixiv.net p站查询图片",
+ "desc": "pixiv.net p站查询图片(支持动图和多图)",
+ "author": "anlen123",
+ "homepage": "https://github.com/anlen123/nonebot_plugin_pixiv",
+ "tags": [
+ {
+ "label": "t: pixiv",
+ "color": "#0096fa"
+ },
+ {
+ "label": "R18",
+ "color": "#ffff00"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-20T09:53:04.279714Z",
+ "version": "1.1.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "YetAnotherPicSearch",
+ "project_link": "yetanotherpicsearch",
+ "name": "YetAnotherPicSearch",
+ "desc": "基于 kitUIN/PicImageSearch 的另一个 Nonebot 搜图插件。",
+ "author": "NekoAria",
+ "homepage": "https://github.com/NekoAria/YetAnotherPicSearch",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-15T04:04:51.199073Z",
+ "version": "1.9.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gachalogs",
+ "project_link": "nonebot-plugin-gachalogs",
+ "name": "原神抽卡记录分析",
+ "desc": "统计及导出原神祈愿记录,在 QQ 里鉴定原神欧皇吧!",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-gachalogs",
+ "tags": [
+ {
+ "label": "t:Genshin",
+ "color": "#ffd49f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-10T08:08:27.393467Z",
+ "version": "0.2.13",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_everyday_en",
+ "project_link": "nonebot-plugin-everyday-en",
+ "name": "每日一句",
+ "desc": "每日一句英文句子,可选定时发送",
+ "author": "MelodyYuuka",
+ "homepage": "https://github.com/MelodyYuuka/nonebot_plugin_everyday_en",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "EveryDay",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-04-02T07:45:02.498078Z",
+ "version": "1.1.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_fire",
+ "project_link": "nonebot-plugin-fire",
+ "name": "QQ自动续火花",
+ "desc": "通过每天定时发送“/echo 花花”实现续火花",
+ "author": "25252www",
+ "homepage": "https://github.com/25252www/nonebot_plugin_fire",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-04-01T11:33:36.907538Z",
+ "version": "1.0.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_qrcode",
+ "project_link": "nonebot-plugin-qrcode",
+ "name": "二维码识别与发送",
+ "desc": "qq聊天二维码插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-qrcode",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "QRcode",
+ "color": "#0020ff"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-04T10:54:24.541684Z",
+ "version": "0.0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ygo",
+ "project_link": "nonebot-plugin-ygo",
+ "name": "游戏王卡查",
+ "desc": "nonebot的游戏王卡查插件",
+ "author": "anlen123",
+ "homepage": "https://github.com/anlen123/nonebot_plugin_ygo",
+ "tags": [
+ {
+ "label": "t:游戏王",
+ "color": "#ea5252"
+ },
+ {
+ "label": "口胡王",
+ "color": "#ea5252"
+ },
+ {
+ "label": "ygo",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-07-03T11:45:31.205090Z",
+ "version": "1.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilibilibot",
+ "project_link": "nonebot-plugin-bilibilibot",
+ "name": "bilibili通知插件",
+ "desc": "将up主更新、番剧更新、主播开播等信息推送到QQ",
+ "author": "TDK1969",
+ "homepage": "https://github.com/TDK1969/nonebot_plugin_bilibilibot",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#f605dd"
+ },
+ {
+ "label": "a:onebot11",
+ "color": "#05f6e4"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-01-03T18:12:50.547913Z",
+ "version": "2.3.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_color",
+ "project_link": "nonebot-plugin-color",
+ "name": "色图生成",
+ "desc": "用于生成指定色彩图片的 NoneBot2 插件",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-color",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.4.0",
+ "time": "2024-03-10T10:07:17.874441Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_blackjack",
+ "project_link": "nonebot-plugin-blackjack",
+ "name": "21点游戏插件",
+ "desc": "一个基于签到积分的21点游戏与积分对战插件",
+ "author": "yaowan233",
+ "homepage": "https://github.com/yaowan233/nonebot-plugin-blackjack",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-03-11T15:11:50.631785Z",
+ "version": "0.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_arcaeabot",
+ "project_link": "nonebot-plugin-arcaeabot",
+ "name": "Arcaea查分插件",
+ "desc": "Arcaea查分插件(recent, best30)",
+ "author": "SEAFHMC",
+ "homepage": "https://github.com/SEAFHMC/nonebot-plugin-arcaeabot",
+ "tags": [
+ {
+ "label": "Arcaea",
+ "color": "#db52ea"
+ },
+ {
+ "label": "a:onebot",
+ "color": "#ff2e00"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-09T14:09:57.926195Z",
+ "version": "3.1.19",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ddcheck",
+ "project_link": "nonebot-plugin-ddcheck",
+ "name": "成分姬",
+ "desc": "查询B站用户关注的VTuber成分",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-ddcheck",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-03-02T15:02:58.078642Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_leetcode2",
+ "project_link": "nonebot-plugin-leetcode2",
+ "name": "第二个leetcode查询插件",
+ "desc": "可查询用户信息、获取每日一题与随机一题和搜索题目。",
+ "author": "Nranphy",
+ "homepage": "https://github.com/Nranphy/nonebot_plugin_leetcode2",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-13T12:14:05.351724Z",
+ "version": "1.1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hikarisearch",
+ "project_link": "nonebot-plugin-hikarisearch",
+ "name": "HikariSearch",
+ "desc": "使用 HikariSearch 的又一个搜图插件",
+ "author": "MeetWq",
+ "homepage": "https://github.com/MeetWq/nonebot-plugin-hikarisearch",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-03T06:52:42.532048Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mediawiki",
+ "project_link": "nonebot-plugin-mediawiki",
+ "name": "MediaWiki查询",
+ "desc": "为群聊提供简单的wiki查询功能(仅支持onebot)",
+ "author": "KoishiStudio",
+ "homepage": "https://github.com/KoishiStudio/nonebot-plugin-mediawiki",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:wiki",
+ "color": "#679ff9"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-28T19:29:44.225452Z",
+ "version": "1.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wordle",
+ "project_link": "nonebot-plugin-wordle",
+ "name": "猜单词",
+ "desc": "wordle猜单词游戏",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-wordle",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-02-28T15:01:45.634106Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_giyf",
+ "project_link": "nonebot-plugin-giyf",
+ "name": "快速搜索",
+ "desc": "指引群友快速 访 ~~(tui)~~ 问 ~~(dao)~~ 谷歌娘(在中国大陆大概就是度娘了~)",
+ "author": "KoishiStudio",
+ "homepage": "https://github.com/KoishiStudio/nonebot-plugin-giyf",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-06-10T03:01:26.351493Z",
+ "version": "0.1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_abstract",
+ "project_link": "nonebot-plugin-abstract",
+ "name": "语句抽象化",
+ "desc": "能够将你的语句变得抽象起来~",
+ "author": "CherryCherries",
+ "homepage": "https://github.com/CherryCherries/nonebot-plugin-abstract",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-25T09:05:56.928814Z",
+ "version": "1.0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_params",
+ "project_link": "nonebot-plugin-params",
+ "name": "多适配器帮助函数",
+ "desc": "提供编写多适配器插件的帮助函数",
+ "author": "iyume",
+ "homepage": "https://github.com/iyume/nonebot-plugin-params",
+ "tags": [
+ {
+ "label": "t:helper",
+ "color": "#ffe873"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-03-28T04:56:05.243623Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_handle",
+ "project_link": "nonebot-plugin-handle",
+ "name": "猜成语",
+ "desc": "汉字Wordle 猜成语",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-handle",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-03-03T14:32:13.372089Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_minesweeper",
+ "project_link": "nonebot-plugin-minesweeper",
+ "name": "扫雷",
+ "desc": "扫雷游戏",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-minesweeper",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-03-02T05:26:09.929052Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_draw",
+ "project_link": "nonebot_plugin_draw",
+ "name": "nonebot_plugin_draw",
+ "desc": "模拟抽签的一个本地化插件",
+ "author": "bingganhe123",
+ "homepage": "https://github.com/bingganhe123/nonebot_plugin_draw",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-04-12T02:35:00.986589Z",
+ "version": "0.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_randomtkk",
+ "project_link": "nonebot-plugin-randomtkk",
+ "name": "随机唐可可",
+ "desc": "找到唐可可,和她一起做学园偶像!🎶",
+ "author": "KafCoppelia",
+ "homepage": "https://github.com/MinatoAquaCrews/nonebot_plugin_randomtkk",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#d62222"
+ },
+ {
+ "label": "t:Tan Kuku",
+ "color": "#fdaf75"
+ },
+ {
+ "label": "t:Liyuu",
+ "color": "#465dfd"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-29T10:01:33.569934Z",
+ "version": "0.1.5.post1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dida",
+ "project_link": "nonebot-plugin-dida",
+ "name": "nonebot-plugin-dida",
+ "desc": "基于Nonebot的滴答清单插件,可创建普通任务/子任务,按照条件查询任务",
+ "author": "TDK1969",
+ "homepage": "https://github.com/TDK1969/nonebot_plugin_dida",
+ "tags": [
+ {
+ "label": "t:滴答清单",
+ "color": "#007ffd"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-24T14:43:52.546960Z",
+ "version": "2.0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_alipayvoice",
+ "project_link": "nonebot-plugin-alipayvoice",
+ "name": "支付宝到账语音",
+ "desc": "发送支付宝到账语音, 支持金额范围为0.01~999999999999.99",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-alipayvoice",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-06-21T03:04:10.967969Z",
+ "version": "0.5.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_answersbook",
+ "project_link": "nonebot-plugin-answersbook",
+ "name": "答案之书",
+ "desc": "愿一切无解都有解!解除你的迷惑,终结你的纠结!",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-answersbook",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-05-09T16:28:04.479501Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hitokoto",
+ "project_link": "nonebot-plugin-hitokoto",
+ "name": "一言",
+ "desc": "总有一句话能打动你的心",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-hitokoto",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-27T03:19:08.068742Z",
+ "version": "0.2.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilicover",
+ "project_link": "nonebot-plugin-bilicover",
+ "name": "B站视频封面提取",
+ "desc": "提取B站视频的封面,支持链接、av号、bv号",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-bilicover",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-15T15:00:17.810788Z",
+ "version": "0.2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cchess",
+ "project_link": "nonebot-plugin-cchess",
+ "name": "象棋",
+ "desc": "象棋,支持人机和对战",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-cchess",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-03-01T15:20:58.978317Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chess",
+ "project_link": "nonebot-plugin-chess",
+ "name": "国际象棋",
+ "desc": "国际象棋,支持人机和对战",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-chess",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.5.0",
+ "time": "2024-03-02T06:32:33.038543Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_charpic",
+ "project_link": "nonebot-plugin-charpic",
+ "name": "charpic",
+ "desc": "合成字符画",
+ "author": "RafuiiChan",
+ "homepage": "https://github.com/1umine/nonebot_plugin_charpic",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-10-08T15:19:56.533711Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_miragetank",
+ "project_link": "nonebot-plugin-miragetank",
+ "name": "miragetank",
+ "desc": "合成/分离幻影坦克图片",
+ "author": "RafuiiChan",
+ "homepage": "https://github.com/1umine/nonebot_plugin_miragetank",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-10-06T04:10:56.321148Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_covid",
+ "project_link": "nonebot-plugin-covid",
+ "name": "国内新冠疫情数据查询",
+ "desc": "查询国内各省份及下属地级市的疫情数据",
+ "author": "nicklly",
+ "homepage": "https://github.com/nicklly/nonebot2_covid_plugin",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-26T22:14:17.882416+08:00",
+ "version": "0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_yulu",
+ "project_link": "nonebot-plugin-yulu",
+ "name": "语录娱乐",
+ "desc": "语录娱乐小插件",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot-plugin-yulu",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-20T10:15:53.506911Z",
+ "version": "3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_maze",
+ "project_link": "nonebot-plugin-maze",
+ "name": "走迷宫",
+ "desc": "与机器人交互解迷宫",
+ "author": "EtherLeaF",
+ "homepage": "https://github.com/EtherLeaF/nonebot_plugin_maze",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-24T07:37:30.144772Z",
+ "version": "0.2.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_moyu",
+ "project_link": "nonebot-plugin-moyu",
+ "name": "摸鱼日历",
+ "desc": "摸鱼一时爽, 一直摸鱼一直爽",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-moyu",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-18T12:01:49.758334Z",
+ "version": "0.3.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mockingbird",
+ "project_link": "nonebot-plugin-mockingbird",
+ "name": "MockingBird语音",
+ "desc": "利用MockingBird来生成语音,并支持多种语音切换",
+ "author": "AkashiCoin",
+ "homepage": "https://github.com/AkashiCoin/nonebot_plugin_mockingbird",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-05-24T10:28:06.597823Z",
+ "version": "0.2.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_baidutranslate",
+ "project_link": "nonebot-plugin-baidutranslate",
+ "name": "百度翻译",
+ "desc": "可以调用百度翻译 API 实现常用语种之间的互译",
+ "author": "NumberSir",
+ "homepage": "https://github.com/NumberSir/nonebot_plugin_baidutranslate",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-04T02:02:45.349939Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tortoise_orm",
+ "project_link": "nonebot-plugin-tortoise-orm",
+ "name": "nonebot_plugin_tortoise_orm",
+ "desc": "Tortoise ORM 插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-tortoise-orm",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2023-08-22T04:01:30.366075Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dailysign",
+ "project_link": "nonebot-plugin-dailysign",
+ "name": "nonebot_plugin_dailysign",
+ "desc": "简单的签到插件",
+ "author": "kexue-z",
+ "homepage": "https://github.com/kexue-z/nonebot-plugin-dailysign",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.0.1",
+ "time": "2023-06-29T02:30:01.006481Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tetris_stats",
+ "project_link": "nonebot-plugin-tetris-stats",
+ "name": "TETRIS Stats",
+ "desc": "一个基于nonebot2的用于查询TETRIS相关游戏玩家数据的插件",
+ "author": "shoucandanghehe",
+ "homepage": "https://github.com/shoucandanghehe/nonebot-plugin-tetris-stats",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#da2b2b"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-09-21T14:35:01.691461Z",
+ "version": "0.4.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilibili_viode",
+ "project_link": "nonebot_plugin_bilibili_viode",
+ "name": "B站视频伪分享卡片",
+ "desc": "将用户发送的B站视频ID转为(伪)分享卡片的形式",
+ "author": "ASTWY",
+ "homepage": "https://github.com/ASTWY/nonebot_plugin_bilibili_viode",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-30T21:21:44.093741Z",
+ "version": "1.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_imagetools",
+ "project_link": "nonebot-plugin-imagetools",
+ "name": "图片操作",
+ "desc": "简单图片操作",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-imagetools",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-03-12T09:52:51.485907Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_warframe_clock",
+ "project_link": "nonebot-plugin-warframe-clock",
+ "name": "Warframe时间查询",
+ "desc": "查询Warframe的平原与地球时间状态",
+ "author": "axStar",
+ "homepage": "https://github.com/axStar/nonebot_plugin_warframe_clock",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "Warframe",
+ "color": "#149090"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-05-31T03:32:53.069089Z",
+ "version": "1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "hikari_bot",
+ "project_link": "hikari-bot",
+ "name": "Hikari-战舰世界水表查询",
+ "desc": "顾名思义",
+ "author": "benx1n",
+ "homepage": "https://github.com/benx1n/HikariBot",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-06T04:31:59.376089Z",
+ "version": "1.0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_who_at_me",
+ "project_link": "nonebot-plugin-who-at-me",
+ "name": "谁艾特我了",
+ "desc": "看看是谁又在艾特我",
+ "author": "SEAFHMC",
+ "homepage": "https://github.com/SEAFHMC/nonebot-plugin-who-at-me",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:群聊",
+ "color": "#52afea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-09-19T02:26:39.239522Z",
+ "version": "0.2.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_covid_19_by",
+ "project_link": "nonebot-plugin-covid-19-by",
+ "name": "疫情小助手",
+ "desc": "疫情小助手 支持查地区 风险地区 境外输入等",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot-plugin-covid-19-by",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#52ea8a"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-04T12:51:50.273807Z",
+ "version": "4.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_reboot",
+ "project_link": "nonebot-plugin-reboot",
+ "name": "nonebot_plugin_reboot [重启 bot]",
+ "desc": "用命令重启机器人",
+ "author": "18870",
+ "homepage": "https://github.com/18870/nonebot-plugin-reboot",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.4",
+ "time": "2023-06-24T10:34:29.338115Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_setu4",
+ "project_link": "nonebot-plugin-setu4",
+ "name": "setu4",
+ "desc": "内置数据库的setu插件, 尝试降低因为风控发不出图的概率",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/nonebot_plugin_setu4",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.15.114514.1",
+ "time": "2024-02-20T06:48:16.825857Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_smart_reply",
+ "project_link": "nonebot-plugin-smart-reply",
+ "name": "smart_reply",
+ "desc": "nonebot2的融合了openai, newbing, 词库的智障回复插件",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/nonebot_plugin_smart_reply",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.15.114514",
+ "time": "2024-02-28T10:39:44.325920Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_today_in_history",
+ "project_link": "nonebot-plugin-today-in-history",
+ "name": "历史上的今天",
+ "desc": "发送每日历史上的今天",
+ "author": "AquamarineCyan",
+ "homepage": "https://github.com/AquamarineCyan/nonebot-plugin-today-in-history",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-12-06T13:23:11.873181Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_BitTorrent",
+ "project_link": "nonebot_plugin_BitTorrent",
+ "name": "bittorrent",
+ "desc": "磁力搜索插件",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/nonebot_plugin_BitTorrent",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.21",
+ "time": "2024-02-20T06:47:14.799458Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_namelist",
+ "project_link": "nonebot-plugin-namelist",
+ "name": "黑白名单",
+ "desc": "简易黑白用户名单管理",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-namelist",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-07-16T09:41:29.820153Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bread_shop",
+ "project_link": "nonebot-plugin-bread-shop",
+ "name": "面包店小游戏",
+ "desc": "面包店休闲小游戏",
+ "author": "Mai-icy",
+ "homepage": "https://github.com/Mai-icy/nonebot-plugin-bread-shop",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-17T08:16:03.035271Z",
+ "version": "0.1.14",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_PicMenu",
+ "project_link": "nonebot_plugin_PicMenu",
+ "name": "PicMenu",
+ "desc": "根据插件元数据生成图片化功能菜单",
+ "author": "hamo-reid",
+ "homepage": "https://github.com/hamo-reid/nonenot_plugin_PicMenu",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#030303"
+ },
+ {
+ "label": "t:menu",
+ "color": "#753dc6"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-16T05:48:01.071422Z",
+ "version": "0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_horserace",
+ "project_link": "nonebot_plugin_horserace",
+ "name": "赛马",
+ "desc": "群内青春版赛马小游戏",
+ "author": "shinianj",
+ "homepage": "https://github.com/shinianj/nonebot_plugin_horserace",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-06-30T05:20:53.029037Z",
+ "version": "2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_firexN",
+ "project_link": "nonebot-plugin-firexN",
+ "name": "一起燚xN吧",
+ "desc": "QQ续火花,可以自定义多个联系人、消息内容、发送时间,支持群聊定时消息",
+ "author": "GC-ZF",
+ "homepage": "https://github.com/GC-ZF/nonebot_plugin_firexN",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-24T13:46:27.472585Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bfinfo",
+ "project_link": "nonebot-plugin-bfinfo",
+ "name": "战地1、5战绩查询工具",
+ "desc": "QQ私聊或群聊发送战地游戏ID,返回基础信息以及最佳兵种、最佳枪械、最佳载具、最佳模式信息",
+ "author": "GC-ZF",
+ "homepage": "https://github.com/GC-ZF/nonebot_plugin_bfinfo",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-05T14:10:41.291955Z",
+ "version": "0.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_osubot",
+ "project_link": "nonebot-plugin-osubot",
+ "name": "OSUBot",
+ "desc": "OSU查分插件",
+ "author": "yaowan233",
+ "homepage": "https://github.com/yaowan233/nonebot-plugin-osubot",
+ "tags": [
+ {
+ "label": "OSU",
+ "color": "#eb5d9b"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [],
+ "valid": true,
+ "version": "5.2.2",
+ "time": "2024-03-11T07:06:45.988200Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_acc_calculate",
+ "project_link": "nonebot-plugin-acc-calculate",
+ "name": "ACC计算工具",
+ "desc": "能够计算段位的单曲acc,支持malodyv3段位regular、ex",
+ "author": "10-24",
+ "homepage": "https://github.com/10-24/nonebot-plugin-acc-calculate",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-10T10:15:56.678714Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_kawaii_robot",
+ "project_link": "nonebot_plugin_kawaii_robot",
+ "name": "KawaiiRobot",
+ "desc": "使用 Kyomotoi/AnimeThesaurus 的 NoneBot2 的回复(文i)插件",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_kawaii_robot/",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "4.1.0.post1",
+ "time": "2024-03-15T14:33:21.268256Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_addFriend",
+ "project_link": "nonebot_plugin_addFriend",
+ "name": "处理好友添加和群邀请",
+ "desc": "一个基于NoneBot2的插件,用于处理被请求加QQ好友和QQ群的请求",
+ "author": "ziru-w",
+ "homepage": "https://github.com/ziru-w/nonebot_plugin_addFriend",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-09-16T14:12:37.178511Z",
+ "version": "2.5.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_date_name",
+ "project_link": "nonebot-plugin-date-name",
+ "name": "群昵称时间",
+ "desc": "一个可以群昵称显示现在时间的插件",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot-plugin-date-name",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#a552ea"
+ },
+ {
+ "label": "t:qun_card",
+ "color": "#e552ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-15T09:06:23.113910Z",
+ "version": "3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_easyCommand",
+ "project_link": "nonebot_plugin_easyCommand",
+ "name": "易命令",
+ "desc": "一个基于NoneBot2的简单的用于动态地添加命令或添加定时任务的插件",
+ "author": "ziru-w",
+ "homepage": "https://github.com/ziru-w/nonebot_plugin_easyCommand",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-15T03:35:40.231889Z",
+ "version": "1.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_report",
+ "project_link": "nonebot-plugin-report",
+ "name": "推送钩子",
+ "desc": "使用 webhook 向用户推送消息",
+ "author": "syrinka",
+ "homepage": "https://github.com/syrinka/nonebot-plugin-report",
+ "tags": [
+ {
+ "label": "t:webhook",
+ "color": "#51b3a8"
+ },
+ {
+ "label": "t:notify",
+ "color": "#3985f7"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-10T09:44:45.338348Z",
+ "version": "1.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hammer_nbnhhsh",
+ "project_link": "nonebot-plugin-hammer-nbnhhsh",
+ "name": "「能不能好好说话?」缩写翻译",
+ "desc": "拼音首字母及阿拉伯数字缩写翻译",
+ "author": "ArgonarioD",
+ "homepage": "https://github.com/ArgonarioD/nonebot-plugin-hammer-nbnhhsh",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "a:cqhttp",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-01T06:05:33.097465Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bawiki",
+ "project_link": "nonebot-plugin-bawiki",
+ "name": "BAWiki",
+ "desc": "碧蓝档案Wiki插件",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-bawiki",
+ "tags": [
+ {
+ "label": "碧蓝档案",
+ "color": "#00d7fb"
+ },
+ {
+ "label": "蔚藍檔案",
+ "color": "#00d7fb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.11.2",
+ "time": "2024-03-10T11:22:39.906792Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcqq",
+ "project_link": "nonebot-plugin-mcqq",
+ "name": "MC_QQ",
+ "desc": "基于NoneBot的与Minecraft Server互通消息的插件",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/nonebot-plugin-mcqq",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#52ea6f"
+ },
+ {
+ "label": "消息互通",
+ "color": "#52eadf"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qq"
+ ],
+ "valid": false,
+ "version": "2.5.3.post1",
+ "time": "2024-02-29T07:00:39.619226Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_covid_19_by_guild",
+ "project_link": "nonebot-plugin-covid-19-by-guild",
+ "name": "疫情小助手-频道版",
+ "desc": "👉 疫情小助手 频道版👈",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot-plugin-covid-19-by-guild",
+ "tags": [
+ {
+ "label": "a:QQ频道",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:疫情小助手",
+ "color": "#526fea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-08T13:02:36.594332Z",
+ "version": "1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wiki",
+ "project_link": "nonebot-plugin-wiki",
+ "name": "wiki条目搜索、获取简介",
+ "desc": "通过mediawiki api进行条目搜索、生成简介(biliwiki部分通过网页解析实现)",
+ "author": "ZombieFly",
+ "homepage": "https://github.com/ZombieFly/nb2-wiki",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-28T14:31:02.494388Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_groupmanager",
+ "project_link": "nonebot-plugin-groupmanager",
+ "name": "多功能群管",
+ "desc": "与简易群管属于同个产品,就是多了一个入群欢迎,感谢@幼稚园园长 开发的原版插件的帮助",
+ "author": "HuYihe2008",
+ "homepage": "https://github.com/HuYihe2008/nonebot_plugin_groupmanager",
+ "tags": [
+ {
+ "label": "简易群管",
+ "color": "#53e950"
+ },
+ {
+ "label": "插件改良",
+ "color": "#2b7be2"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-25T03:50:08.584658Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_game_collection",
+ "project_link": "nonebot_plugin_game_collection",
+ "name": "小游戏合集",
+ "desc": "改自 nonebot_plugin_russian 合并了nonebot_plugin_horserace还有一些自编玩法的小游戏合集。",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_game_collection",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-13T11:14:29.877161Z",
+ "version": "2.4.16",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_drawer",
+ "project_link": "nonebot-plugin-drawer",
+ "name": "nonebot-plugin-drawer",
+ "desc": "适用于 Nonebot2 的AI画画插件",
+ "author": "CrazyBoyM",
+ "homepage": "https://github.com/CrazyBoyM/nonebot-plugin-drawer",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-06T10:07:03.855313Z",
+ "version": "0.4.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_jrrp-n",
+ "project_link": "nonebot-plugin-jrrp-n",
+ "name": "每日人品",
+ "desc": "不基于random的每日人品插件",
+ "author": "SkyDynamic",
+ "homepage": "https://github.com/SkyDynamic/nonebot_plugin_jrrp",
+ "tags": [
+ {
+ "label": "每日人品",
+ "color": "#ea5252"
+ },
+ {
+ "label": "jrrp",
+ "color": "#529fea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-09-11T12:26:29.764709Z",
+ "version": "1.0.1a1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_moegoe",
+ "project_link": "nonebot-plugin-moegoe",
+ "name": "日韩中 VITS 模型原神拟声",
+ "desc": "现在是琪亚娜时间~",
+ "author": "Yiyuiii",
+ "homepage": "https://github.com/Yiyuiii/nonebot-plugin-moegoe",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-01-03T07:57:36.831231Z",
+ "version": "0.10.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pixivbot",
+ "project_link": "nonebot-plugin-pixivbot",
+ "name": "PixivBot",
+ "desc": "发送随机Pixiv插画、画师更新推送、定时订阅推送……",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-pixivbot",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "2.1.1",
+ "time": "2023-11-29T05:38:58.958393Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_workscore",
+ "project_link": "nonebot-plugin-workscore",
+ "name": "工作性价比计算器",
+ "desc": "工作性价比计算器,算算你有多惨",
+ "author": "yzyyz1387",
+ "homepage": "https://github.com/yzyyz1387/nonebot_plugin_workscore",
+ "tags": [
+ {
+ "label": "工作性价比计算器",
+ "color": "#3898fc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.2",
+ "time": "2023-09-08T10:44:39.331076Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_treehelp",
+ "project_link": "nonebot-plugin-treehelp",
+ "name": "帮助",
+ "desc": "获取插件帮助信息",
+ "author": "he0119",
+ "homepage": "https://github.com/he0119/nonebot-plugin-treehelp",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.1",
+ "time": "2024-03-01T05:09:14.419256Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "cqsat",
+ "project_link": "nonebot-plugin-cqsat",
+ "name": "HAM助手",
+ "desc": "业余无线电相关工具",
+ "author": "yzyyz1387",
+ "homepage": "https://github.com/yzyyz1387/cqsat",
+ "tags": [
+ {
+ "label": "业余无线电",
+ "color": "#ea5252"
+ },
+ {
+ "label": "HAM",
+ "color": "#3898fc"
+ },
+ {
+ "label": "卫星追踪",
+ "color": "#fca638"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.1.12.3",
+ "time": "2024-03-07T03:24:10.900500Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_course",
+ "project_link": "nonebot-plugin-course",
+ "name": "课表查询",
+ "desc": "本周课表,完整课表,下节课在哪上,今天还有什么课🤔",
+ "author": "InariInDream",
+ "homepage": "https://github.com/InariInDream/nonebot_plugin_course",
+ "tags": [
+ {
+ "label": "课表",
+ "color": "#6e9af2"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-26T09:03:50.284334Z",
+ "version": "0.1.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dialectlist",
+ "project_link": "nonebot-plugin-dialectlist",
+ "name": "话痨排行榜",
+ "desc": "给话多的群友一个排行",
+ "author": "X-Skirt-X",
+ "homepage": "https://github.com/X-Skirt-X/nonebot_plugin_dialectlist",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-19T02:13:34.033923Z",
+ "version": "1.4.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_offline_mahjong_helper",
+ "project_link": "nonebot-plugin-offline-mahjong-helper",
+ "name": "面麻小助手",
+ "desc": "可约桌、算点、精算、雀魂查询的面麻助手。",
+ "author": "Nranphy",
+ "homepage": "https://github.com/Nranphy/nonebot_plugin_offline_mahjong_helper",
+ "tags": [
+ {
+ "label": "Mahjong",
+ "color": "#ea5252"
+ },
+ {
+ "label": "雀魂",
+ "color": "#eaa452"
+ },
+ {
+ "label": "线下约桌",
+ "color": "#52a6ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-25T07:44:48.326427Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_send",
+ "project_link": "nonebot-plugin-send",
+ "name": "反馈及通知",
+ "desc": "用户通过bot向superuser发送反馈,以及bot向所有群发送通知",
+ "author": "sena-nana",
+ "homepage": "https://github.com/sena-nana/nonebot-plugin-send",
+ "tags": [
+ {
+ "label": "t:send",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:notice",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:公告",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-26T09:20:01.529021Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_todo_nlp",
+ "project_link": "nonebot-plugin-todo-nlp",
+ "name": "自识别todo",
+ "desc": "一款自动识别提醒内容,可生成todo图片并定时推送的nonebot2插件,v11适配器可用",
+ "author": "CofinCup",
+ "homepage": "https://github.com/CofinCup/nonebot-plugin-todo-nlp",
+ "tags": [
+ {
+ "label": "t:todo",
+ "color": "#499bdd"
+ },
+ {
+ "label": "t:nlp",
+ "color": "#83b279"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-29T15:38:01.799965Z",
+ "version": "0.1.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wordsnorote",
+ "project_link": "nonebot-plugin-wordsnorote",
+ "name": "不背单词",
+ "desc": "哥们哥们,背单词么?哥们!",
+ "author": "GC-ZF",
+ "homepage": "https://github.com/GC-ZF/nonebot_plugin_wordsnorote",
+ "tags": [
+ {
+ "label": "四六级",
+ "color": "#24a0d8"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-30T08:50:02.018317Z",
+ "version": "0.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_CyberSensoji",
+ "project_link": "nonebot-plugin-CyberSensoji",
+ "name": "赛博浅草寺",
+ "desc": "随机抽取浅草寺的一签运势",
+ "author": "Raidenneox",
+ "homepage": "https://github.com/Raidenneox/nonebot_plugin_CyberSensoji",
+ "tags": [
+ {
+ "label": "t:抽签",
+ "color": "#52eadf"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-08-31T02:25:54.508365Z",
+ "version": "0.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gspanel",
+ "project_link": "nonebot-plugin-gspanel",
+ "name": "原神角色展柜查询",
+ "desc": "移植自 @yoimiya-kokomi/miao-plugin 的原神游戏内角色展柜数据查询",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-gspanel",
+ "tags": [
+ {
+ "label": "t:Genshin",
+ "color": "#ffd49f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-09T07:32:00.271465Z",
+ "version": "0.2.25",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gsmaterial",
+ "project_link": "nonebot-plugin-gsmaterial",
+ "name": "原神每日材料查询",
+ "desc": "原神每日天赋培养、武器突破材料查询,通过 Project Amber 数据库(支持部分尚未实装角色)自动更新每日数据~",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-gsmaterial",
+ "tags": [
+ {
+ "label": "t:Genshin",
+ "color": "#ffd49f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-09T14:57:38.167171Z",
+ "version": "0.2.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mystool",
+ "project_link": "nonebot-plugin-mystool",
+ "name": "米游社辅助工具",
+ "desc": "每日完成米游币任务、游戏签到、商品兑换、免抓包登录",
+ "author": "Ljzd-PRO",
+ "homepage": "https://github.com/Ljzd-PRO/nonebot-plugin-mystool",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:米游社",
+ "color": "#66e0ff"
+ },
+ {
+ "label": "t:原神",
+ "color": "#faf3c4"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-16T19:21:16.886146Z",
+ "version": "2.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_warframe",
+ "project_link": "nonebot-plugin-warframe",
+ "name": "星际战甲事件查询",
+ "desc": "通过奥迪斯网站API查询星际战甲国服事件",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/nonebot-plugin-warframe",
+ "tags": [
+ {
+ "label": "星际战甲",
+ "color": "#ed3f3f"
+ },
+ {
+ "label": "WarFrame",
+ "color": "#edea3f"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.5",
+ "time": "2023-06-18T16:49:55.654016Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcqq_server",
+ "project_link": "nonebot-plugin-mcqq-server",
+ "name": "Minecraft Server 聊天同步",
+ "desc": "采用本地读取log信息的方法的Minecraft Server互通消息的插件,mcqq服主版。",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_mcqq_server",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#52ea64"
+ },
+ {
+ "label": "消息互通",
+ "color": "#52e5ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-27T05:44:16.649059Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_RealESRGAN",
+ "project_link": "nonebot_plugin_RealESRGAN",
+ "name": "图像超分辨率重建",
+ "desc": "对图像进行超分辨率重建,可以理解成将图像变大变清晰,不过线上重建的效果没有本地的好,具体可以查阅仓库",
+ "author": "ppxxxg22",
+ "homepage": "https://github.com/ppxxxg22/nonebot_plugin_RealESRGAN",
+ "tags": [
+ {
+ "label": "图像超分辨率重建",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-17T07:35:11.987728Z",
+ "version": "0.2.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-wolf-kill",
+ "project_link": "nonebot-plugin-wolf-kill",
+ "name": "狼人杀插件",
+ "desc": "在群里玩狼人杀",
+ "author": "AbCooly",
+ "homepage": "https://github.com/AbCooly/nonebot_plugin_wolf_kill",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-14T05:29:21.336273Z",
+ "version": "2.0.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "iot",
+ "project_link": "nonebot-plugin-iot",
+ "name": "nonebot物联网插件",
+ "desc": "为nonebot接入物联网提供方案,目前支持天猫精灵终端,后续会增加",
+ "author": "littlebutt",
+ "homepage": "https://github.com/littlebutt/nonebot-plugin-iot",
+ "tags": [
+ {
+ "label": "t:物联网",
+ "color": "#4b86d7"
+ },
+ {
+ "label": "t:天猫精灵",
+ "color": "#4b86d7"
+ },
+ {
+ "label": "t:IOT",
+ "color": "#4b86d7"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-12T01:56:21.172428Z",
+ "version": "1.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bwiki_navigator",
+ "project_link": "nonebot-plugin-bwiki-navigator",
+ "name": "Bwiki Navigator",
+ "desc": "Bwiki助手(官方移植版)",
+ "author": "XZhouQD",
+ "homepage": "https://github.com/xzhouqd/nonebot-plugin-bwiki-navigator",
+ "tags": [
+ {
+ "label": "wiki",
+ "color": "#29a5e3"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2023-06-20T14:52:52.232111Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bottle",
+ "project_link": "nonebot-plugin-bottle",
+ "name": "漂流瓶",
+ "desc": "群与群互通的漂流瓶插件",
+ "author": "Todysheep",
+ "homepage": "https://github.com/Todysheep/nonebot_plugin_bottle",
+ "tags": [
+ {
+ "label": "漂流瓶",
+ "color": "#0893f2"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.0.0.9",
+ "time": "2024-03-12T11:34:48.730630Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tts_gal",
+ "project_link": "nonebot-plugin-tts-gal",
+ "name": "vits角色语音合成本地化",
+ "desc": "基于nonebot2和vits的本地化角色语音合成插件",
+ "author": "dpm12345",
+ "homepage": "https://github.com/dpm12345/nonebot_plugin_tts_gal",
+ "tags": [
+ {
+ "label": "VITS",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-19T04:44:48.034103Z",
+ "version": "0.3.11",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_alicdk_get",
+ "project_link": "nonebot-plugin-alicdk-get",
+ "name": "阿里云盘福利码自动兑换",
+ "desc": "基于nonebot2与aligo的阿里云盘兑换码自动获取和兑换插件。",
+ "author": "Kaguya233qwq",
+ "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_alicdk_get",
+ "tags": [
+ {
+ "label": "兑换码",
+ "color": "#595fd6"
+ },
+ {
+ "label": "auto",
+ "color": "#595fd6"
+ },
+ {
+ "label": "t:阿里云盘",
+ "color": "#595fd6"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-09-29T08:46:59.973338Z",
+ "version": "1.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_picstatus",
+ "project_link": "nonebot-plugin-picstatus",
+ "name": "PicStatus",
+ "desc": "以图片形式显示当前设备的运行状态",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-picstatus",
+ "tags": [
+ {
+ "label": "server",
+ "color": "#8bff00"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "2.0.0.post2",
+ "time": "2024-03-18T05:35:50.408893Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tuling",
+ "project_link": "nonebot-plugin-tuling",
+ "name": "图灵机器人",
+ "desc": "接入图灵机器人做聊天",
+ "author": "koking0",
+ "homepage": "https://github.com/Matrix-King-Studio/nonebot_plugin_tuling",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-09-25T05:14:38.126012Z",
+ "version": "0.0.16",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_makemidi",
+ "project_link": "nonebot_plugin_makemidi",
+ "name": "在线编曲",
+ "desc": "发送简谱生成音乐",
+ "author": "RandomEnch",
+ "homepage": "https://github.com/RandomEnch/nonebot_plugin_makemidi",
+ "tags": [
+ {
+ "label": "midi",
+ "color": "#6515a8"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-27T08:43:45.256730Z",
+ "version": "0.1.12",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ocr",
+ "project_link": "nonebot-plugin-ocr",
+ "name": "文字识别",
+ "desc": "识别图片中的文字",
+ "author": "NewYearPrism",
+ "homepage": "https://github.com/NewYearPrism/nonebot-plugin-ocr",
+ "tags": [
+ {
+ "label": "ocr ",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-07T00:32:07.509150Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_listener",
+ "project_link": "nonebot-plugin-listener",
+ "name": "监听者",
+ "desc": "监听指定消息并转发到指定群",
+ "author": "AbCooly",
+ "homepage": "https://github.com/AbCooly/nonebot_plugin_listener",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-01T16:59:02.045755Z",
+ "version": "1.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_BiliRequestAll",
+ "project_link": "nonebot-plugin-BiliRequestAll",
+ "name": "BiliRequestAll",
+ "desc": "通过B站UID审核入群",
+ "author": "Shadow403",
+ "homepage": "https://github.com/Shadow403/nonebot_plugin_BiliRequestAll",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#ea52e9"
+ },
+ {
+ "label": "request",
+ "color": "#5eea52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.8",
+ "time": "2023-11-05T14:48:57.579085Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_russian_ban",
+ "project_link": "nonebot-plugin-russian-ban",
+ "name": "轮盘禁言小游戏",
+ "desc": "轮盘禁言小游戏,附送快捷禁言/解禁",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_russian_ban",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-04T15:02:29.961051Z",
+ "version": "1.0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ygo_trade",
+ "project_link": "nonebot-plugin-ygo-trade",
+ "name": "游戏王小程序查价",
+ "desc": "集换社游戏王的卡价查询",
+ "author": "Kaguyaya",
+ "homepage": "https://github.com/Kaguyaya/nonebot_plugin_ygo_trade",
+ "tags": [
+ {
+ "label": "游戏王",
+ "color": "#ea5252"
+ },
+ {
+ "label": "YGO",
+ "color": "#ea5252"
+ },
+ {
+ "label": "集换社",
+ "color": "#eada52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-10-11T02:59:10.924095Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_novelai",
+ "project_link": "nonebot-plugin-novelai",
+ "name": "novelai",
+ "desc": "一个支持novelai、naifu、webui,支持中文功能丰富的ai绘图插件",
+ "author": "sena-nana",
+ "homepage": "https://github.com/sena-nana/nonebot-plugin-novelai",
+ "tags": [
+ {
+ "label": "t:aidraw",
+ "color": "#ffc646"
+ },
+ {
+ "label": "t:naifu",
+ "color": "#ffc646"
+ },
+ {
+ "label": "t:webui",
+ "color": "#ffc646"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-26T14:17:47.594948Z",
+ "version": "0.5.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "ayaka_games",
+ "project_link": "ayaka_games",
+ "name": "ayaka小游戏合集",
+ "desc": "背包,签到,印加宝藏,接龙(原神/成语),谁是卧底,抢30,mana,加一秒,24点/48点,文字税,祈祷,原神随机事件",
+ "author": "bridgeL",
+ "homepage": "https://bridgel.github.io/ayaka_games/",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#0c0c0c"
+ },
+ {
+ "label": "t:小游戏",
+ "color": "#e36306"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-25T02:07:32.424128Z",
+ "version": "0.4.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "ayaka_timezone",
+ "project_link": "nonebot-plugin-ayaka-timezone",
+ "name": "ayaka衍生插件 - 时区助手",
+ "desc": "提供不同时区时间询问服务",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-timezone",
+ "tags": [
+ {
+ "label": "a:cqhttp",
+ "color": "#000000"
+ },
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:timezone",
+ "color": "#e36306"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-30T02:41:21.580609Z",
+ "version": "0.4.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "ayaka_prevent_bad_words",
+ "project_link": "nonebot-plugin-ayaka-prevent-bad-words",
+ "name": "ayaka衍生插件 - 坏词撤回",
+ "desc": "撤回有问题的发言",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-prevent-bad-words",
+ "tags": [
+ {
+ "label": "a:cqhttp",
+ "color": "#000000"
+ },
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:撤回",
+ "color": "#e36306"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-25T16:17:13.137593Z",
+ "version": "0.4.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_savor",
+ "project_link": "nonebot-plugin-savor",
+ "name": "二次元图像鉴赏",
+ "desc": "二次元图像分析",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-savor",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-07T18:19:20.688626Z",
+ "version": "0.2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_kfcrazy",
+ "project_link": "nonebot-plugin-kfcrazy",
+ "name": "kfcrazy",
+ "desc": "肯德基查询插件,输入地区即可查询全国店铺的数据,支持疯狂星期四",
+ "author": "Kaguya233qwq",
+ "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_kfcrazy",
+ "tags": [
+ {
+ "label": "肯德基",
+ "color": "#d93b3b"
+ },
+ {
+ "label": "疯狂星期四",
+ "color": "#e52124"
+ },
+ {
+ "label": "KFC",
+ "color": "#cb5c5e"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-14T07:18:05.859088Z",
+ "version": "2.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-random",
+ "project_link": "nonebot-plugin-random",
+ "name": "通用抽图/语音",
+ "desc": "Nonebot2 通用抽图/语音插件",
+ "author": "jcjrobert",
+ "homepage": "https://github.com/jcjrobert/nonebot-plugin-random",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-03T05:49:28.546486Z",
+ "version": "0.0.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sqlalchemy",
+ "project_link": "nonebot-plugin-sqlalchemy",
+ "name": "NoneBot2 SQLAlchemy 插件",
+ "desc": "为插件开发者提供简单的SQLAlchemy封装",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-sqlalchemy",
+ "tags": [
+ {
+ "label": "sql",
+ "color": "#ad1717"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.2",
+ "time": "2023-07-20T03:51:36.974013Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_blacklist",
+ "project_link": "nonebot-plugin-blacklist",
+ "name": "黑名单",
+ "desc": "黑名单插件",
+ "author": "tkgs0",
+ "homepage": "https://github.com/tkgs0/nonebot-plugin-blacklist",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.3.1",
+ "time": "2024-02-21T16:24:01.035770Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_antiinsult",
+ "project_link": "nonebot-plugin-antiinsult",
+ "name": "反嘴臭",
+ "desc": "反嘴臭插件",
+ "author": "tkgs0",
+ "homepage": "https://github.com/tkgs0/nonebot-plugin-antiinsult",
+ "tags": [
+ {
+ "label": "被动",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.1",
+ "time": "2024-02-21T16:59:04.055290Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_oddtext",
+ "project_link": "nonebot-plugin-oddtext",
+ "name": "文本生成器",
+ "desc": "抽象话等多种文本生成",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-oddtext",
+ "tags": [
+ {
+ "label": "RCNB!",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-06-21T14:35:22.216953Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mahjong_scoreboard",
+ "project_link": "nonebot-plugin-mahjong-scoreboard",
+ "name": "日麻寄分器",
+ "desc": "为群友提供日麻计分及榜单统计功能",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/ssttkkl/nonebot-plugin-mahjong-scoreboard",
+ "tags": [
+ {
+ "label": "日麻",
+ "color": "#4684d3"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qqguild"
+ ],
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2023-09-08T18:13:18.403764Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cartoon",
+ "project_link": "nonebot-plugin-cartoon",
+ "name": "二次元化图像",
+ "desc": "对三次元图像动漫化, 打开二次元的大门",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-cartoon",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-01T10:00:27.452979Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mahjong_utils",
+ "project_link": "nonebot-plugin-mahjong-utils",
+ "name": "麻将小工具",
+ "desc": "手牌分析、番符点数查询、……",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-mahjong-utils",
+ "tags": [
+ {
+ "label": "日麻",
+ "color": "#edad34"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.5",
+ "time": "2023-12-05T04:45:12.500654Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_animeres",
+ "project_link": "nonebot-plugin-animeres",
+ "name": "动漫资源插件",
+ "desc": "根据关键字搜索动漫资源",
+ "author": "Melodyknit",
+ "homepage": "https://github.com/MelodyKnit/nonebot_plugin_animeres",
+ "tags": [
+ {
+ "label": "anime",
+ "color": "#ec5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.0.4",
+ "time": "2023-11-17T12:49:29.527158Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-person",
+ "project_link": "nonebot-plugin-person",
+ "name": "随个人",
+ "desc": "随个群友当幸运观众🤪",
+ "author": "jcjrobert",
+ "homepage": "https://github.com/jcjrobert/nonebot-plugin-person",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-15T02:18:32.344475Z",
+ "version": "0.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_apex_api_query",
+ "project_link": "nonebot-plugin-apex-api-query",
+ "name": "Apex API Query",
+ "desc": "Apex Legends API 查询插件",
+ "author": "H-xiaoH",
+ "homepage": "https://github.com/H-xiaoH/nonebot-plugin-apex-api-query",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "24.1.2",
+ "time": "2024-01-02T13:23:43.569097Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_reborn",
+ "project_link": "nonebot-plugin-reborn",
+ "name": "投胎模拟器",
+ "desc": "重生后你会到哪里?",
+ "author": "Aziteee",
+ "homepage": "https://github.com/Aziteee/nonebot_plugin_reborn",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-14T12:24:39.789332Z",
+ "version": "0.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_searchBiliInfo",
+ "project_link": "nonebot-plugin-searchBiliInfo",
+ "name": "b站用户信息查询",
+ "desc": "查询b站用户粉丝数、舰团信息;主播直播收益数据(总收益、礼物、SC、上舰);用户观看直播信息(观看、弹幕记录);通过关键词搜昵称、UID等",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_searchBiliInfo",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#e55d80"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-24T05:56:31.597811Z",
+ "version": "1.8.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_colab_novelai",
+ "project_link": "nonebot-plugin-colab-novelai",
+ "name": "Colab-NovelAI",
+ "desc": "解放你的双手,让Colab持续给你提供算力生产色图!",
+ "author": "EtherLeaF",
+ "homepage": "https://github.com/EtherLeaF/nonebot-plugin-colab-novelai",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:NovelAI",
+ "color": "#eacd52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-11-21T06:00:40.942510Z",
+ "version": "0.2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sky",
+ "project_link": "nonebot-plugin-sky",
+ "name": "Sky光遇",
+ "desc": "光遇的每日任务及活动相关查询插件",
+ "author": "Kaguya233qwq",
+ "homepage": "https://github.com/Kaguya233qwq/nonebot_plugin_sky",
+ "tags": [
+ {
+ "label": "光遇",
+ "color": "#7ebdf0"
+ },
+ {
+ "label": "攻略",
+ "color": "#2079c1"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.2.12",
+ "time": "2023-08-29T02:46:06.270032Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_zyk_novelai",
+ "project_link": "nonebot-plugin-zyk-novelai",
+ "name": "免费版NovelAI生图插件",
+ "desc": "一个用于nonebot2的简约AI绘图插件。没有繁琐的使用指令,配置过程简单迅捷,代码简洁易懂,还有更多功能将会陆续加入。",
+ "author": "ZYKsslm",
+ "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_novelai",
+ "tags": [
+ {
+ "label": "Free",
+ "color": "#42e22f"
+ },
+ {
+ "label": "Simple",
+ "color": "#e2d92f"
+ },
+ {
+ "label": "Novelai",
+ "color": "#3e10e9"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-29T18:30:02.732845Z",
+ "version": "2.9.5.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_repeep",
+ "project_link": "nonebot-plugin-repeep",
+ "name": "谁在窥屏",
+ "desc": "用于获取QQ中当前窥屏用户信息",
+ "author": "p0ise",
+ "homepage": "https://github.com/p0ise/nonebot-plugin-repeep",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-25T11:27:22.670017Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gscode",
+ "project_link": "nonebot-plugin-gscode",
+ "name": "原神前瞻直播兑换码查询",
+ "desc": "原神前瞻直播兑换码查询,数据来自米哈游官方接口",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-gscode",
+ "tags": [
+ {
+ "label": "t:Genshin",
+ "color": "#ffd49f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-17T00:47:03.313876Z",
+ "version": "0.2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_note",
+ "project_link": "nonebot-plugin-note",
+ "name": "记事本",
+ "desc": "一个有提醒功能的记事本",
+ "author": "Passerby-D",
+ "homepage": "https://github.com/Passerby-D/nonebot_plugin_note",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-31T21:52:41.397684Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-bilibili-image",
+ "project_link": "nonebot-plugin-bilibili-image",
+ "name": "b站图片下载",
+ "desc": "b站封面提取,动态图片/专栏图片下载",
+ "author": "jcjrobert",
+ "homepage": "https://github.com/jcjrobert/nonebot-plugin-bilibili-image",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-02T13:29:23.983038Z",
+ "version": "0.0.2.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_trace_moe",
+ "project_link": "nonebot-plugin-trace-moe",
+ "name": "动画截图追溯来源",
+ "desc": "调用trace.moe的API查询动画截图源自的作品名和时间段",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_trace_moe",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#191919"
+ },
+ {
+ "label": "t:trace",
+ "color": "#191919"
+ },
+ {
+ "label": "t:image",
+ "color": "#00a0ff"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-23T06:59:22.061485Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_zyk_music",
+ "project_link": "nonebot-plugin-zyk-music",
+ "name": "免费快捷点歌插件",
+ "desc": "一个用于nonebot2的点歌插件。操作简单粗暴,交互简洁易懂.",
+ "author": "ZYKsslm",
+ "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_music",
+ "tags": [
+ {
+ "label": "Free",
+ "color": "#26d019"
+ },
+ {
+ "label": "Simple",
+ "color": "#b8c10d"
+ },
+ {
+ "label": "Music",
+ "color": "#0d92c1"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-29T20:24:24.553805Z",
+ "version": "0.1.7.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatgpt",
+ "project_link": "nonebot-plugin-chatgpt",
+ "name": "ChatGPT",
+ "desc": "AI 聊天对话",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-chatgpt",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-12T08:10:27.798634Z",
+ "version": "0.7.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_majsoul",
+ "project_link": "nonebot-plugin-majsoul",
+ "name": "雀魂查询",
+ "desc": "根据牌谱屋的数据查询雀魂账号信息",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-majsoul",
+ "tags": [
+ {
+ "label": "majsoul",
+ "color": "#e54141"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qqguild",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.5",
+ "time": "2023-09-28T17:31:31.806098Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_remove_bg",
+ "project_link": "nonebot-plugin-remove-bg",
+ "name": "图片背景消除",
+ "desc": "适用于onebot v11的基于remove.bg的图片背景消除插件",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_remove_bg",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:img",
+ "color": "#111111"
+ },
+ {
+ "label": "t:removeBG",
+ "color": "#7a7a7a"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-28T14:59:42.169057Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_broadcast",
+ "project_link": "nonebot-plugin-broadcast",
+ "name": "全群广播",
+ "desc": "将你的消息广播到全部群聊中",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-broadcast",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-07T15:42:04.646013Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_exchangerate",
+ "project_link": "nonebot-plugin-exchangerate",
+ "name": "汇率换算",
+ "desc": "支持汇率换算与汇率查询",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-exchangerate",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-11T05:42:07.616093Z",
+ "version": "0.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_access_control",
+ "project_link": "nonebot-plugin-access-control",
+ "name": "权限控制",
+ "desc": "对功能进行权限控制以及调用次数限制",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-access-control",
+ "tags": [
+ {
+ "label": "权限控制",
+ "color": "#0e9763"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram",
+ "nonebot.adapters.villa"
+ ],
+ "valid": true,
+ "version": "1.1.5",
+ "time": "2023-11-26T15:18:22.566495Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_colormind",
+ "project_link": "nonebot-plugin-colormind",
+ "name": "随机配色方案",
+ "desc": "调用colormind.io的API随机获取一种配色方案",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_colormind",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:color",
+ "color": "#ffffff"
+ },
+ {
+ "label": "t:配色",
+ "color": "#fbff03"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-14T03:06:59.760280Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_abstain_diary",
+ "project_link": "nonebot-plugin-abstain-diary",
+ "name": "戒x打卡日记",
+ "desc": "适用于onebot v11的戒x打卡日记插件。用户可以自定义戒的内容。财能使人贪,色能使人嗜,名能使人矜,潜能使人倚,四患既都去,岂在浮尘里。",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_abstain_diary",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:戒",
+ "color": "#ffffff"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-09-14T01:07:53.526240Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_backup",
+ "project_link": "nonebot-plugin-backup",
+ "name": "QQ群文件备份",
+ "desc": "备份qq群文件",
+ "author": "Yuelioi",
+ "homepage": "https://github.com/Yuelioi/nonebot-plugin-backup",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-06T11:42:56.034628Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_kuma_san",
+ "project_link": "nonebot-plugin-kuma-san",
+ "name": "熊老板",
+ "desc": "用于查询斯普拉遁3场地信息的 NoneBot2 插件",
+ "author": "ReiiNoki",
+ "homepage": "https://github.com/ReiiNoki/nonebot-plugin-kuma-san",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-03T06:43:46.968063Z",
+ "version": "1.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gpt3",
+ "project_link": "nonebot-plugin-gpt3",
+ "name": "GPT3",
+ "desc": "openai官方api的会话插件",
+ "author": "chrisyy2003",
+ "homepage": "https://github.com/chrisyy2003/nonebot-plugin-gpt3",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-23T04:12:19.524328Z",
+ "version": "1.1.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ikun_evolution",
+ "project_link": "nonebot-plugin-ikun-evolution",
+ "name": "只因进化录",
+ "desc": "q群挂机小游戏。开局一只因,进化全靠吞",
+ "author": "RShock",
+ "homepage": "https://github.com/RShock/nonebot_plugin_ikun_evolution",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-03T03:56:19.261340Z",
+ "version": "1.0.12",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_random_ban",
+ "project_link": "nonebot-plugin-random-ban",
+ "name": "随机禁言",
+ "desc": "适用于onebot v11的随机禁言一名群员或自己n分钟(n通过传入数字然后随机实现)",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_ban",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:禁言",
+ "color": "#020202"
+ },
+ {
+ "label": "t:ban",
+ "color": "#ffffff"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-09T11:06:42.054060Z",
+ "version": "0.2.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_antirecall",
+ "project_link": "nonebot-plugin-antirecall",
+ "name": "防撤回",
+ "desc": "防撤回",
+ "author": "Jerry080801",
+ "homepage": "https://github.com/Jerry080801/nonebot-plugin-antirecall/",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-26T10:52:50.612059Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mc_server_status",
+ "project_link": "nonebot-plugin-mc-server-status",
+ "name": "Minecraft服务器信息查询",
+ "desc": "支持Java和基岩服务器",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_mc_server_status",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#a438cd"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-01T02:19:03.062931Z",
+ "version": "0.2.10",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_no_repeat",
+ "project_link": "nonebot-plugin-no-repeat",
+ "name": "不要复读",
+ "desc": "防止代码炸了在群里复读刷屏,让你写插件的时候更安全",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/nonebot-plugin-no-repeat",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-22T03:21:17.798671Z",
+ "version": "0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bfchat",
+ "project_link": "nonebot-plugin-bfchat",
+ "name": "战地群聊天插件",
+ "desc": "群内绑定战地一/五账号,快速查询战地战绩,查看服务器信息",
+ "author": "050644zf",
+ "homepage": "https://github.com/050644zf/nonebot-plugin-bfchat",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-31T10:55:28.710075Z",
+ "version": "0.3.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_summon",
+ "project_link": "nonebot-plugin-summon",
+ "name": "群友召唤术",
+ "desc": "群友召唤术",
+ "author": "zhulinyv",
+ "homepage": "https://github.com/zhulinyv/nonebot_plugin_summon",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-11T01:13:48.927791Z",
+ "version": "2.5.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ping",
+ "project_link": "nonebot-plugin-ping",
+ "name": "Ping",
+ "desc": "调用api,获取网站信息",
+ "author": "zhulinyv",
+ "homepage": "https://github.com/zhulinyv/nonebot_plugin_ping",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-14T06:47:15.299741Z",
+ "version": "1.7.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_face2cartoonpic",
+ "project_link": "nonebot_plugin_face2cartoonpic",
+ "name": "腾讯云图像变换",
+ "desc": "✨基于腾讯云合成图的以图绘图的Nonebot插件✨",
+ "author": "ANGJustinl",
+ "homepage": "https://github.com/ANGJustinl/nonebot_plugin_face2cartoonpic_main",
+ "tags": [
+ {
+ "label": "以图绘图",
+ "color": "#72f15e"
+ },
+ {
+ "label": "腾讯云",
+ "color": "#3785f1"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-30T13:37:47.581572Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_servicestate",
+ "project_link": "nonebot-plugin-servicestate",
+ "name": "服务状态查询",
+ "desc": "API服务状态监测",
+ "author": "OREOCODEDEV",
+ "homepage": "https://github.com/OREOCODEDEV/nonebot-plugin-servicestate",
+ "tags": [
+ {
+ "label": "api",
+ "color": "#52ea7f"
+ },
+ {
+ "label": "state",
+ "color": "#52cfea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2023-09-11T07:21:59.505055Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_animalVoice",
+ "project_link": "nonebot-plugin-animalVoice",
+ "name": "AnimalVoice_Convert",
+ "desc": "✨支持切噜语和兽语的Nonebot译者插件✨",
+ "author": "ANGJustinl",
+ "homepage": "https://github.com/ANGJustinl/nonebot_plugin_animalVoice/",
+ "tags": [
+ {
+ "label": "切噜语~",
+ "color": "#e75f9d"
+ },
+ {
+ "label": "兽语",
+ "color": "#5fe5e7"
+ },
+ {
+ "label": "加密语言",
+ "color": "#79e556"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2022-12-29T09:42:07.126510Z",
+ "version": "0.0.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ayaka_scan_cmd",
+ "project_link": "nonebot-plugin-ayaka-scan-cmd",
+ "name": "命令探查",
+ "desc": "命令探查,缓解下载了新插件却不会使用的焦虑",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/nonebot-plugin-ayaka-scan-cmd",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "t:命令探查",
+ "color": "#e36306"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-15T09:34:25.444769Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_HttpCat",
+ "project_link": "nonebot-plugin-HttpCat",
+ "name": "HttpCat🐱猫猫http状态码",
+ "desc": "✨Nonebot猫猫http状态码插件✨",
+ "author": "ANGJustinl",
+ "homepage": "https://github.com/ANGJustinl/nonebot_plugin_HttpCat",
+ "tags": [
+ {
+ "label": "HttpCat",
+ "color": "#1f4ddc"
+ },
+ {
+ "label": "http状态码",
+ "color": "#dc1f1f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-03T01:58:02.756214Z",
+ "version": "0.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_revoke",
+ "project_link": "nonebot-plugin-revoke",
+ "name": "主动消息撤回",
+ "desc": "让机器人撤回自己发出的消息",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/ssttkkl/nonebot-plugin-revoke",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:gocqhttp",
+ "color": "#52ea95"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-03T06:02:45.041053Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_setu_customization",
+ "project_link": "nonebot-plugin-setu-customization",
+ "name": "setu_customization",
+ "desc": "可动态管理API并带网页浏览的setu插件",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_setu_customization",
+ "tags": [
+ {
+ "label": "色图",
+ "color": "#e9ea52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-31T08:46:11.225617Z",
+ "version": "1.7.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_l4d2_server",
+ "project_link": "nonebot-plugin-l4d2-server",
+ "name": "求生之路小助手",
+ "desc": "可用于管理求生之路查服和本地管理",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_l4d2_server",
+ "tags": [
+ {
+ "label": "l4d2",
+ "color": "#05ff00"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.6.6",
+ "time": "2024-03-03T14:27:28.652529Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_learning_chat",
+ "project_link": "nonebot-plugin-learning-chat",
+ "name": "群聊学习",
+ "desc": "学习群友们的发言、复读以及主动发言",
+ "author": "CMHopeSunshine",
+ "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-learning-chat",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2023-08-27T03:07:38.424515Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_couplets",
+ "project_link": "nonebot-plugin-couplets",
+ "name": "对对联",
+ "desc": "人工智能和你对对联",
+ "author": "CMHopeSunshine",
+ "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-couplets",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-06-17T07:46:34.256373Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_Imagelabels",
+ "project_link": "nonebot-plugin-Imagelabels",
+ "name": "图像标注",
+ "desc": "基于yolov5的图像标注插件",
+ "author": "istrashguy",
+ "homepage": "https://github.com/istrashguy/nonebot_plugin_Imagelabels",
+ "tags": [
+ {
+ "label": "Yolov5",
+ "color": "#9a2828"
+ },
+ {
+ "label": "图像标注",
+ "color": "#e981dc"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-16T12:19:09.803532Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cloudsignx",
+ "project_link": "nonebot-plugin-cloudsignx",
+ "name": "云签到",
+ "desc": "基于云端的签到,所有插件使用者数据互通",
+ "author": "Monarchdos",
+ "homepage": "https://github.com/Monarchdos/nonebot_plugin_cloudsign",
+ "tags": [
+ {
+ "label": "a:云签到",
+ "color": "#2be491"
+ },
+ {
+ "label": "a:数据互通",
+ "color": "#3be42b"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-10T07:51:17.175075Z",
+ "version": "2.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_imgexploration",
+ "project_link": "nonebot-plugin-imgexploration",
+ "name": "查找图片出处",
+ "desc": "通过saucenao、ascii2d、Google、Yandx查询图片出处",
+ "author": "cpuopt",
+ "homepage": "https://github.com/cpuopt/nonebot_plugin_imgexploration",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:搜图",
+ "color": "#453df1"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-05T11:01:46.527196Z",
+ "version": "0.3.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hypixel",
+ "project_link": "nonebot-plugin-hypixel",
+ "name": "Hypixel数据查询",
+ "desc": "查询Hypixel的数据",
+ "author": "SkyDynamic",
+ "homepage": "https://github.com/SkyDynamic/nonebot_plugin_hypixel",
+ "tags": [
+ {
+ "label": "MC",
+ "color": "#6fea52"
+ },
+ {
+ "label": "Hypixel",
+ "color": "#d5ea52"
+ },
+ {
+ "label": "Hyp",
+ "color": "#d5ea52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-06T06:58:09.032239Z",
+ "version": "1.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nowtime",
+ "project_link": "nonebot-plugin-nowtime",
+ "name": "整点报时",
+ "desc": "每时每刻正点报时",
+ "author": "Cvandia",
+ "homepage": "https://github.com/Cvandia/nonebot_plugin_nowtime",
+ "tags": [
+ {
+ "label": "整点报时",
+ "color": "#5eea52"
+ },
+ {
+ "label": "语音",
+ "color": "#c84fdb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-06-19T08:56:04.577230Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cave",
+ "project_link": "nonebot-plugin-cave",
+ "name": "回声洞",
+ "desc": "PCL2内群的回声洞,添加了审核功能。",
+ "author": "hmzz804",
+ "homepage": "https://github.com/hmzz804/nonebot_plugin_cave",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-17T16:30:06.762833Z",
+ "version": "1.1.12",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_xingzuo",
+ "project_link": "nonebot-plugin-xingzuo",
+ "name": "星座运势",
+ "desc": "返回星座的运势",
+ "author": "mengxinyuan638",
+ "homepage": "https://github.com/mengxinyuan638/xingzuo_luck",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-12T11:59:03.454555Z",
+ "version": "1.0.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_BingImage",
+ "project_link": "nonebot-plugin-BingImage",
+ "name": "Bing每日图片获取",
+ "desc": "获取Bing每日一图",
+ "author": "ericzhang-debug",
+ "homepage": "https://github.com/ericzhang-debug/nonebot_plugin_BingImage",
+ "tags": [
+ {
+ "label": "风景图",
+ "color": "#0ce354"
+ },
+ {
+ "label": "Bing",
+ "color": "#0c43e3"
+ },
+ {
+ "label": "必应",
+ "color": "#eddf13"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-09T11:19:52.574462Z",
+ "version": "0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_soup",
+ "project_link": "nonebot-plugin-soup",
+ "name": "心灵鸡汤",
+ "desc": "来一碗心灵鸡汤吧",
+ "author": "Monarchdos",
+ "homepage": "https://github.com/Monarchdos/nonebot_plugin_soup",
+ "tags": [
+ {
+ "label": "心灵鸡汤",
+ "color": "#52eaea"
+ },
+ {
+ "label": "鸡汤",
+ "color": "#ea529a"
+ },
+ {
+ "label": "毒鸡汤",
+ "color": "#604a55"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-11T08:47:29.519685Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_yuanshen_notice",
+ "project_link": "nonebot-plugin-yuanshen-notice",
+ "name": "原神实时公告",
+ "desc": "实时展示官网最新前20条公告",
+ "author": "mengxinyuan638",
+ "homepage": "https://github.com/mengxinyuan638/nonebot_plugin_yuanshen_notice",
+ "tags": [
+ {
+ "label": "原神",
+ "color": "#ef3700"
+ },
+ {
+ "label": "公告",
+ "color": "#00ef04"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-19T06:33:34.236263Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilibili_yuan",
+ "project_link": "nonebot-plugin-bilibili-yuan",
+ "name": "哔哩哔哩q群登录",
+ "desc": "实现哔哩哔哩q群登录的插件",
+ "author": "mengxinyuan638",
+ "homepage": "https://github.com/mengxinyuan638/nonebot-plugin-bilibili-yuan",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-15T02:59:19.623264Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_easy_translate",
+ "project_link": "nonebot-plugin-easy-translate",
+ "name": "简易谷歌翻译插件",
+ "desc": "免api key简单谷歌翻译插件",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_easy_translate",
+ "tags": [
+ {
+ "label": "翻译",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-27T16:34:04.994806Z",
+ "version": "0.2.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_orangedice",
+ "project_link": "nonebot-plugin-orangedice",
+ "name": "orange_dice",
+ "desc": "具有技能鉴定、人物卡、日志记录的COC用插件",
+ "author": "BigOrangeQWQ",
+ "homepage": "https://github.com/BigOrangeQWQ/nonebot_plugin_orangedice",
+ "tags": [
+ {
+ "label": "dice",
+ "color": "#08c0bb"
+ },
+ {
+ "label": "COC",
+ "color": "#a2bc0c"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.9",
+ "time": "2023-08-03T09:34:33.704052Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_record",
+ "project_link": "nonebot-plugin-record",
+ "name": "语音功能",
+ "desc": "语音功能适配插件,包括语音事件响应器,语音识别、语音合成等功能",
+ "author": "itsevin",
+ "homepage": "https://github.com/itsevin/nonebot_plugin_record",
+ "tags": [
+ {
+ "label": "t:语音",
+ "color": "#fff35d"
+ },
+ {
+ "label": "语音识别",
+ "color": "#37c0f6"
+ },
+ {
+ "label": "语音事件响应器",
+ "color": "#18e13c"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-09T01:43:43.587003Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nya_cook_menu",
+ "project_link": "nonebot-plugin-nya-cook-menu",
+ "name": "喵喵自记菜谱",
+ "desc": "记录生活中的小菜谱",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_nya_cook_menu",
+ "tags": [
+ {
+ "label": "菜谱",
+ "color": "#e65de5"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-01T02:19:38.388337Z",
+ "version": "0.1.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "criminal_dance",
+ "project_link": "criminal-dance",
+ "name": "犯人在跳舞",
+ "desc": "文字版桌游,犯人在跳舞",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/criminal_dance",
+ "tags": [
+ {
+ "label": "t:文字版桌游",
+ "color": "#e36306"
+ },
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-15T09:23:15.318321Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_picmcstat",
+ "project_link": "nonebot-plugin-picmcstat",
+ "name": "PicMCStat",
+ "desc": "将一个 Minecraft 服务器的 MOTD 信息绘制为一张图片",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-picmcstat",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#7fbf55"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2024-03-10T07:01:59.615461Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wantwords",
+ "project_link": "nonebot-plugin-wantwords",
+ "name": "反向词典",
+ "desc": "在nonebot使用wantwords反向词典",
+ "author": "Limnium",
+ "homepage": "https://github.com/limnium/nonebot_plugin_wantwords",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-22T04:55:16.216491Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pvz",
+ "project_link": "nonebot-plugin-pvz",
+ "name": "植物大战僵尸小游戏",
+ "desc": "通过签到获取金币购买植物或者僵尸,放置植物在草坪上抵御入侵,或者进行僵尸入侵来吃掉别人的脑子",
+ "author": "longchengguxiao",
+ "homepage": "https://github.com/longchengguxiao/nonebot_plugin_pvz",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-02T04:25:36.126660Z",
+ "version": "1.3.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_molar_mass",
+ "project_link": "nonebot-plugin-molar-mass",
+ "name": "摩尔质量计算器",
+ "desc": "帮助中学生计算摩尔质量或相对分子质量的小工具。",
+ "author": "kifuan",
+ "homepage": "https://github.com/kifuan/nonebot-plugin-molar-mass",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-19T03:38:01.096308Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_report_manager",
+ "project_link": "nonebot-plugin-report-manager",
+ "name": "对话超管",
+ "desc": "群员通过Bot对话超管",
+ "author": "Hiroshi12138",
+ "homepage": "https://github.com/Hiroshi12138/nonebot_plugin_report_manager",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#a95454"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-14T08:51:38.642705Z",
+ "version": "0.2.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "qinglan_bot",
+ "project_link": "qinglan-bot",
+ "name": "青岚Bot",
+ "desc": "基于NoneBot的与Minecraft Server互通消息的机器人",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/qinglan_bot",
+ "tags": [
+ {
+ "label": "MineCraft",
+ "color": "#4ef0ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2023-10-08T03:43:01.150609Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_easy_group_manager",
+ "project_link": "nonebot-plugin-easy-group-manager",
+ "name": "简易群管女生自用99新",
+ "desc": "简单的群管插件,BOT不是群主也可以设置管理员啦……",
+ "author": "zhulinyv",
+ "homepage": "https://github.com/zhulinyv/nonebot_plugin_easy_group_manager",
+ "tags": [
+ {
+ "label": "群管",
+ "color": "#1eb262"
+ },
+ {
+ "label": "女生自用",
+ "color": "#b21e82"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-25T12:00:28.775065Z",
+ "version": "0.4.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_group_link_guild",
+ "project_link": "nonebot-plugin-group-link-guild",
+ "name": "群频互通",
+ "desc": "将QQ群与QQ频道的消息互通",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/nonebot-plugin-group-link-guild",
+ "tags": [
+ {
+ "label": "QQ群",
+ "color": "#ea5252"
+ },
+ {
+ "label": "QQ频道",
+ "color": "#52ead5"
+ },
+ {
+ "label": "消息互通",
+ "color": "#50c545"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.6",
+ "time": "2023-06-26T03:57:16.165943Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-mcport",
+ "project_link": "nonebot-plugin-mcport",
+ "name": "nonebot-plugin-mcport",
+ "desc": "我的世界JAVA服务器通过RCON连接远程执行命令",
+ "author": "Proviasw",
+ "homepage": "https://github.com/Proviasw/nonebot-plugin-mcport",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-25T00:13:37.434017Z",
+ "version": "0.1.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_xdu_support",
+ "project_link": "nonebot_plugin_xdu_support",
+ "name": "XDU校园服务",
+ "desc": "Nonebot2插件,提供基础的西电校园服务,如课表提醒,体育打卡查询及提醒,晨午晚检打卡和马原测试等功能。",
+ "author": "longchengguxiao",
+ "homepage": "https://github.com/longchengguxiao/nonebot_plugin_xdu_support",
+ "tags": [
+ {
+ "label": "大学校园",
+ "color": "#52b5ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-13T05:03:08.357179Z",
+ "version": "0.6.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_zyk_lightNVL",
+ "project_link": "nonebot-plugin-zyk-lightNVL",
+ "name": "查找轻小说",
+ "desc": "基于哔哩轻小说网站的爬虫插件",
+ "author": "ZYKsslm",
+ "homepage": "https://github.com/ZYKsslm/nonebot_plugin_zyk_lightNVL",
+ "tags": [
+ {
+ "label": "轻小说",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-02T13:17:07.498476Z",
+ "version": "0.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dog",
+ "project_link": "nonebot-plugin-dog",
+ "name": "dog",
+ "desc": "随机返回一句舔狗日记...嘤嘤嘤和其他文案的插件",
+ "author": "Reversedeer",
+ "homepage": "https://github.com/Reversedeer/nonebot_plugin_dog",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.1",
+ "time": "2024-01-08T06:15:02.503507Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_uuid",
+ "project_link": "nonebot-plugin-uuid",
+ "name": "uuid生成器",
+ "desc": "通过 uuid4 与 uuid5 生成 uuid ,并且支持快速去除短横线",
+ "author": "ZombieFly",
+ "homepage": "https://github.com/ZombieFly/nonebot-plugin-uuid",
+ "tags": [
+ {
+ "label": "工具",
+ "color": "#39c5bb"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-01-30T04:32:08.179665Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_naturel_gpt",
+ "project_link": "nonebot-plugin-naturel-gpt",
+ "name": "更人性化的GPT-Ai聊天插件",
+ "desc": "一个基于NoneBot框架的Ai聊天插件,对接OpenAi文本生成接口,优化了群聊场景的上下文支持。",
+ "author": "KroMiose",
+ "homepage": "https://github.com/KroMiose/nonebot_plugin_naturel_gpt",
+ "tags": [
+ {
+ "label": "GPT3",
+ "color": "#66ccff"
+ },
+ {
+ "label": "OpenAi",
+ "color": "#cc66ff"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-23T19:19:12.265714Z",
+ "version": "2.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_impact",
+ "project_link": "nonebot-plugin-impact",
+ "name": "impact",
+ "desc": "让群友们眼前一黑的nonebot2淫趴插件",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/nonebot_plugin_impact",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.12.114514",
+ "time": "2024-03-20T14:46:34.935208Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcping",
+ "project_link": "nonebot-plugin-mcping",
+ "name": "MC Ping",
+ "desc": "获取 Minecraft JE/BE 服务器 Motd 图片信息",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/nonebot-plugin-mcping",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#47d754"
+ },
+ {
+ "label": "服务器状态",
+ "color": "#d7cd47"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.4",
+ "time": "2023-06-18T16:58:48.573827Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_b23",
+ "project_link": "nonebot-plugin-b23",
+ "name": "B站热搜",
+ "desc": "获取B站热搜(移动端)",
+ "author": "eya46",
+ "homepage": "https://github.com/eya46/nonebot_plugin_b23",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#00aeec"
+ },
+ {
+ "label": "热搜",
+ "color": "#00aeec"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.3.0",
+ "time": "2024-02-12T14:49:36.387789Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_autoreply",
+ "project_link": "nonebot-plugin-autoreply",
+ "name": "AutoReply",
+ "desc": "配置文件高度可自定义的自动回复插件",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-autoreply",
+ "tags": [
+ {
+ "label": "自动回复",
+ "color": "#ea881e"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.12.post1",
+ "time": "2024-03-10T21:11:37.771261Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_setu_collection",
+ "project_link": "nonebot-plugin-setu-collection",
+ "name": "我要一张xx涩图",
+ "desc": "从多个api获取色图并根据场景整合的色图插件",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_setu_collection",
+ "tags": [
+ {
+ "label": "LoliconAPI",
+ "color": "#5adba8"
+ },
+ {
+ "label": "色图",
+ "color": "#7ab2e1"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-16T05:46:37.619907Z",
+ "version": "0.1.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_groupmate_waifu",
+ "project_link": "nonebot-plugin-groupmate-waifu",
+ "name": "娶群友",
+ "desc": "娶群友",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_groupmate_waifu",
+ "tags": [
+ {
+ "label": "娶群友",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-06T04:59:20.542238Z",
+ "version": "1.3.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_jrrp2",
+ "project_link": "nonebot-plugin-jrrp2",
+ "name": "每日人品2",
+ "desc": "带数据库可查询历史平均人品的jrrp插件",
+ "author": "Rene8028",
+ "homepage": "https://github.com/Rene8028/nonebot_plugin_jrrp2",
+ "tags": [
+ {
+ "label": "每日人品",
+ "color": "#ea5252"
+ },
+ {
+ "label": "jrrp",
+ "color": "#5290ea"
+ },
+ {
+ "label": "jrrp2",
+ "color": "#52bbea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-26T10:59:34.202680Z",
+ "version": "1.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dicky_pk",
+ "project_link": "nonebot-plugin-dicky-pk",
+ "name": "DickyPK",
+ "desc": "移植自OPQBot的群聊小游戏 CHINCHIN-PK",
+ "author": "tkgs0",
+ "homepage": "https://github.com/tkgs0/nonebot-plugin-dicky-pk",
+ "tags": [
+ {
+ "label": "a:onebot11",
+ "color": "#000000"
+ },
+ {
+ "label": "t:群聊小游戏",
+ "color": "#ffd500"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-02-22T03:54:09.830355Z",
+ "version": "0.5.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_eventmonitor",
+ "project_link": "nonebot-plugin-eventmonitor",
+ "name": "eventmonitor",
+ "desc": "监控群事件的插件,支持戳一戳,成员变动,群荣誉变化等提示的插件",
+ "author": "Reversedeer",
+ "homepage": "https://github.com/Reversedeer/nonebot_plugin_eventmonitor",
+ "tags": [
+ {
+ "label": "QQGroup",
+ "color": "#2885c0"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2024-01-08T16:11:22.263521Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_whateat_pic",
+ "project_link": "nonebot-plugin-whateat-pic",
+ "name": "今天吃喝什么呢",
+ "desc": "随机推荐吃的和喝的",
+ "author": "Cvandia",
+ "homepage": "https://github.com/Cvandia/nonebot-plugin-whateat-pic",
+ "tags": [
+ {
+ "label": "吃什么",
+ "color": "#e4ea52"
+ },
+ {
+ "label": "喝什么",
+ "color": "#52ea8b"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.1.7",
+ "time": "2023-08-21T08:57:18.767121Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_matcher_block",
+ "project_link": "nonebot-plugin-matcher-block",
+ "name": "通用指令阻断",
+ "desc": "可以为指令添加cd,或在该群屏蔽,支持正则",
+ "author": "KarisAya",
+ "homepage": "https://github.com/KarisAya/nonebot_plugin_matcher_block",
+ "tags": [
+ {
+ "label": "指令阻断",
+ "color": "#525fea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-20T08:31:44.747967Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_acm_reminder",
+ "project_link": "nonebot-plugin-acm-reminder",
+ "name": "ACMReminder",
+ "desc": "获取CF/牛客等平台的竞赛信息的插件",
+ "author": "BigOrangeQWQ",
+ "homepage": "https://github.com/BigOrangeQWQ/nonebot_plugin_acm_reminder",
+ "tags": [
+ {
+ "label": "ACM",
+ "color": "#3b8b74"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-15T11:31:08.159916Z",
+ "version": "0.1.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_maimai",
+ "project_link": "nonebot-plugin-maimai",
+ "name": "舞萌maimai",
+ "desc": "适用nonebot2的Maimai插件",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/maimai_plugin",
+ "tags": [
+ {
+ "label": "maimai",
+ "color": "#5262ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.4.4.post1",
+ "time": "2023-10-30T03:17:10.051088Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_all4one",
+ "project_link": "nonebot-plugin-all4one",
+ "name": "OneBot 实现",
+ "desc": "让 NoneBot2 成为 OneBot 实现!",
+ "author": "j1g5awi",
+ "homepage": "https://github.com/nonepkg/nonebot-plugin-all4one",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qqguild",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.0a3",
+ "time": "2023-06-20T14:59:24.276312Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gsabyss",
+ "project_link": "nonebot-plugin-gsabyss",
+ "name": "原神深境螺旋数据查询",
+ "desc": "原神深渊讨伐列表、渊月祝福、玩家战斗统计等信息查询,数据来自 Honey Hunter World 和 Akasha Database",
+ "author": "monsterxcn",
+ "homepage": "https://github.com/monsterxcn/nonebot-plugin-gsabyss",
+ "tags": [
+ {
+ "label": "t:Genshin",
+ "color": "#ffd49f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-03T07:00:47.175755Z",
+ "version": "0.1.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_arktools",
+ "project_link": "nonebot-plugin-arktools",
+ "name": "明日方舟工具箱",
+ "desc": "基于 OneBot 适配器的 NoneBot2 明日方舟小工具箱插件",
+ "author": "NumberSir",
+ "homepage": "https://github.com/NumberSir/nonebot_plugin_arktools",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "arknights",
+ "color": "#22bbff"
+ },
+ {
+ "label": "t:game",
+ "color": "#db905e"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-04T05:16:51.388596Z",
+ "version": "1.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "gartic_room",
+ "project_link": "nonebot-plugin-gartic-room",
+ "name": "你画我猜组队",
+ "desc": "自动创建gartic房间,主题为综合,将房间链接发送到群聊",
+ "author": "bridgeL",
+ "homepage": "https://github.com/bridgeL/gartic_room",
+ "tags": [
+ {
+ "label": "ayaka",
+ "color": "#e36306"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-15T12:14:20.052354Z",
+ "version": "0.0.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-resolver",
+ "project_link": "nonebot-plugin-resolver",
+ "name": "链接分享解析器",
+ "desc": "适用于nonebot2 解析视频、图片链接/小程序插件,tiktok、bilibili、twitter、xhs等实时发送!",
+ "author": "zhiyu1998",
+ "homepage": "https://github.com/zhiyu1998/nonebot-plugin-resolver",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#f8a5c2"
+ },
+ {
+ "label": "tiktok",
+ "color": "#303952"
+ },
+ {
+ "label": "twitter",
+ "color": "#1b9cfc"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-27T06:15:19.259340Z",
+ "version": "1.0.13",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bing_chat",
+ "project_link": "nonebot-plugin-bing-chat",
+ "name": "Bing Chat",
+ "desc": "使用新版必应的聊天功能",
+ "author": "Harry-Jing",
+ "homepage": "https://github.com/Harry-Jing/nonebot-plugin-bing-chat",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-20T10:28:15.689700Z",
+ "version": "0.7.11",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_saa",
+ "project_link": "nonebot-plugin-send-anything-anywhere",
+ "name": "峯驰物流",
+ "desc": "一个帮助处理不同 adapter 消息的适配和发送的插件 ",
+ "author": "felinae98",
+ "homepage": "https://send-anything-anywhere.felinae98.cn/",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2024-02-23T02:25:20.661005Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_random_stereotypes",
+ "project_link": "nonebot-plugin-random-stereotypes",
+ "name": "发病语录",
+ "desc": "对输入的人,随机返回一条本地的发病语录",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_stereotypes",
+ "tags": [
+ {
+ "label": "语录",
+ "color": "#6a6060"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-02-14T11:01:27.302388Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_xiuxian_2",
+ "project_link": "nonebot_plugin_xiuxian_2",
+ "name": "修仙_2.0",
+ "desc": "基于原版修仙的修改与重构",
+ "author": "QingMuCat",
+ "homepage": "https://github.com/QingMuCat/nonebot_plugin_xiuxian_2.0",
+ "tags": [
+ {
+ "label": "文游",
+ "color": "#ea5252"
+ },
+ {
+ "label": "修仙",
+ "color": "#4e9f9f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-05T13:42:32.700880Z",
+ "version": "2.9.2.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_h2e",
+ "project_link": "nonebot-plugin-h2e",
+ "name": "呆呆兽都会起来锻炼 H2E",
+ "desc": "类似\"今天吃什么\"的一个插件,通过命令返回健身、游泳、瑜伽的锻炼方式啦",
+ "author": "Gin2O",
+ "homepage": "https://github.com/Gin2O/nonebot_plugin_h2e",
+ "tags": [
+ {
+ "label": "锻炼",
+ "color": "#da4a4a"
+ },
+ {
+ "label": "t:what2eat",
+ "color": "#99da4a"
+ },
+ {
+ "label": "t: how2exe",
+ "color": "#99da4a"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-23T15:18:39.471059Z",
+ "version": "0.1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_oachat",
+ "project_link": "nonebot-plugin-oachat",
+ "name": "呆呆兽都会用的chatbot接api",
+ "desc": "没有上下文语境的简易chatbot,调用openai API",
+ "author": "Gin2O",
+ "homepage": "https://github.com/Gin2O/nonebot_plugin_oachat",
+ "tags": [
+ {
+ "label": "OpenAI",
+ "color": "#ea5252"
+ },
+ {
+ "label": "GPT3",
+ "color": "#ea5252"
+ },
+ {
+ "label": "ChatBot",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-04T16:28:15.886299Z",
+ "version": "0.1.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_warframe_mode",
+ "project_link": "nonebot-plugin-warframe-mode",
+ "name": "wf的wm市场",
+ "desc": "warframe游戏的WM市场查询",
+ "author": "mmxd12",
+ "homepage": "https://github.com/mmxd12/nonebot_plugin_warframe_mode",
+ "tags": [
+ {
+ "label": "星际战甲",
+ "color": "#ea5252"
+ },
+ {
+ "label": "warframe",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-07T02:34:08.571246Z",
+ "version": "1.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bf1_groptools",
+ "project_link": "nonebot-plugin-bf1-groptools",
+ "name": "战地一入群审批",
+ "desc": "战地一通过游戏id的入群审核并其修改群名片为id",
+ "author": "zzcqie666",
+ "homepage": "https://github.com/zzcqie666/nonebot_plugin_bf1_groptools",
+ "tags": [
+ {
+ "label": "战地一",
+ "color": "#52eae4"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-26T02:09:33.525641Z",
+ "version": "0.0.13",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_afd",
+ "project_link": "nonebot-plugin-afd",
+ "name": "爱发电进群审核",
+ "desc": "审核入群信息判断是否同意进群",
+ "author": "17TheWord",
+ "homepage": "https://github.com/17TheWord/nonebot-plugin-afd",
+ "tags": [
+ {
+ "label": "爱发电",
+ "color": "#ea5252"
+ },
+ {
+ "label": "自动审核进群",
+ "color": "#52eae9"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.4",
+ "time": "2023-12-14T04:52:48.787154Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_eventdone",
+ "project_link": "nonebot-plugin-eventdone",
+ "name": "nonebot_plugin_eventdone",
+ "desc": "远程同意好友",
+ "author": "PadorFelice",
+ "homepage": "https://github.com/PadorFelice/nonebot_plugin_eventdone",
+ "tags": [
+ {
+ "label": "同意好友",
+ "color": "#ba2d2d"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-28T10:38:00.132098Z",
+ "version": "1.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ncm_saying",
+ "project_link": "nonebot-plugin-ncm-saying",
+ "name": "网抑云",
+ "desc": "一开口就老网抑云了",
+ "author": "techotaku39",
+ "homepage": "https://github.com/techotaku39/nonebot-plugin-ncm-saying",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-02-28T12:47:07.236766Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_60s",
+ "project_link": "nonebot-plugin-60s",
+ "name": "60s日历",
+ "desc": "每天60秒读懂世界",
+ "author": "techotaku39",
+ "homepage": "https://github.com/techotaku39/nonebot-plugin-60s",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-31T11:38:28.620766Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_AutoRepeater",
+ "project_link": "nonebot-plugin-AutoRepeater",
+ "name": "AutoRepeater",
+ "desc": "连续发送2条相同消息,机器人就会自动 +1。包括普通消息,QQ表情,还有图片(表情包)。支持图片夹文字和表情夹文字的消息!具有动态多群控制和跟随撤回功能(手表API可能无法监测)。",
+ "author": "DMCSWCG",
+ "homepage": "https://github.com/DMCSWCG/nonebot-plugin-AutoRepeater",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-03T16:52:05.869904Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ai_timetable",
+ "project_link": "nonebot-plugin-ai-timetable",
+ "name": "小爱课表",
+ "desc": "一键导入课表、查看课表、提醒上课、查询课程",
+ "author": "maoxig",
+ "homepage": "https://github.com/maoxig/nonebot-plugin-ai-timetable",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.6",
+ "time": "2023-09-02T05:52:46.560403Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sanae",
+ "project_link": "nonebot-plugin-sanae",
+ "name": "Sanae",
+ "desc": "早苗连接器,也可转发其他onebotv11到nb2~",
+ "author": "Hoshinonyaruko",
+ "homepage": "https://github.com/Hoshinonyaruko/nonebot-plugin-sanae",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-18T07:50:34.572272Z",
+ "version": "0.0.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_arkrecord",
+ "project_link": "nonebot-plugin-arkrecord",
+ "name": "明日方舟抽卡记录分析",
+ "desc": "明日方舟抽卡记录分析与导出",
+ "author": "zheuziihau",
+ "homepage": "https://github.com/zheuziihau/nonebot_plugin_arkrecord",
+ "tags": [
+ {
+ "label": "明日方舟 ",
+ "color": "#c39191"
+ },
+ {
+ "label": "游戏",
+ "color": "#c39191"
+ },
+ {
+ "label": "抽卡",
+ "color": "#c39191"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-12T16:03:10.678760Z",
+ "version": "1.7.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatgpt_turbo",
+ "project_link": "nonebot-plugin-chatgpt-turbo",
+ "name": "ChatGPT官方接口版",
+ "desc": "适配新版OpenAI API的nonebot插件,可以调用官方稳定版ChatGPT进行回复",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot_plugin_chatgpt_turbo",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#ea5252"
+ },
+ {
+ "label": "OpenAI",
+ "color": "#52ea92"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-27T02:12:58.838396Z",
+ "version": "0.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatgpt_on_qq",
+ "project_link": "nonebot-plugin-chatgpt-on-qq",
+ "name": "多功能的ChatGPT机器人",
+ "desc": "基于chatGPT3.5-turboAPI,有利用模板创建新对话、保存历史记录、多重对话不互相干扰等功能",
+ "author": "Suxmx",
+ "homepage": "https://github.com/Suxmx/nonebot_plugin_chatgpt_on_qq",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-02-17T12:13:50.019025Z",
+ "version": "1.6.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tuan_chatgpt",
+ "project_link": "nonebot-plugin-tuan-chatgpt",
+ "name": "和团子聊天!",
+ "desc": "来和团子聊天吧~ Powered by chatgpt",
+ "author": "TheLZY",
+ "homepage": "https://github.com/TheLZY/nonebot_plugin_tuan_chatgpt",
+ "tags": [
+ {
+ "label": "t:chat",
+ "color": "#ff9d97"
+ },
+ {
+ "label": "t:chatgpt",
+ "color": "#ff9d97"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-09-16T21:37:00.389809Z",
+ "version": "0.4.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatpdf",
+ "project_link": "nonebot-plugin-chatpdf",
+ "name": "ChatPDF文章分析",
+ "desc": "在nonebot中使用ChatPDF的最小实现来中分析文章内容",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot_plugin_chatpdf",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#ea5252"
+ },
+ {
+ "label": "ChatPDF",
+ "color": "#6c7abd"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-24T07:41:22.586069Z",
+ "version": "0.4.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_rimofun",
+ "project_link": "nonebot-plugin-rimofun",
+ "name": "RimoFun",
+ "desc": "用 RimoChan 开发的工具做的一个有趣的插件",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-rimofun",
+ "tags": [
+ {
+ "label": "RimoChan",
+ "color": "#f3e5bf"
+ },
+ {
+ "label": "bnhhsh",
+ "color": "#ebbcc6"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.3.0",
+ "time": "2024-03-10T07:19:28.075646Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_customemote",
+ "project_link": "nonebot-plugin-customemote",
+ "name": "群聊自定义表情包",
+ "desc": "发送 表情名称 加 (.jpg或.png或.gif)后缀,就会发送设置好的表情。快速方便,聊天必备。",
+ "author": "DMCSWCG",
+ "homepage": "https://github.com/DMCSWCG/nonebot-plugin-customemote/",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-11T12:57:44.113082Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_justsix",
+ "project_link": "nonebot-plugin-justsix",
+ "name": "发6",
+ "desc": "发送6,机器人就回复6",
+ "author": "iidamie",
+ "homepage": "https://github.com/iidamie/nonebot_plugin_justsix",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-13T10:04:49.409803Z",
+ "version": "1.0.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_simulator_xiuxian",
+ "project_link": "nonebot-plugin-simulator-xiuxian",
+ "name": "修仙模拟器",
+ "desc": "基于原版修仙的修改",
+ "author": "luoyefufeng",
+ "homepage": "https://github.com/luoyefufeng/nonebot_plugin_simulator_xiuxian",
+ "tags": [
+ {
+ "label": "文游",
+ "color": "#4256da"
+ },
+ {
+ "label": "修仙1.0",
+ "color": "#1d1b1c"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-08-19T06:57:44.424649Z",
+ "version": "0.5.23",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bracket",
+ "project_link": "nonebot-plugin-bracket",
+ "name": "括号补全",
+ "desc": "补全消息中的括号,治愈强迫症",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-bracket",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-06-21T14:51:55.170240Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gshisbanner",
+ "project_link": "nonebot-plugin-gshisbanner",
+ "name": "gshisbanner",
+ "desc": "这是一个在机器人上获取原神历史卡池的插件",
+ "author": "forchannot",
+ "homepage": "https://github.com/forchannot/nonebot-plugin-gshisbanner",
+ "tags": [
+ {
+ "label": "原神",
+ "color": "#ea5252"
+ },
+ {
+ "label": "卡池",
+ "color": "#52ea56"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.red"
+ ],
+ "valid": true,
+ "version": "1.2.5",
+ "time": "2024-03-08T09:12:03.746070Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_unoconv",
+ "project_link": "nonebot-plugin-unoconv",
+ "name": "unoconv文件转换",
+ "desc": "基于unoconv的文件转换工具,支持输出pdf、doc、jpg等格式",
+ "author": "Zeta-qixi",
+ "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-unoconv",
+ "tags": [
+ {
+ "label": "文件转换",
+ "color": "#ea5252"
+ },
+ {
+ "label": "pdf转换",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-16T01:16:57.312529Z",
+ "version": "0.5.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_apexranklookup",
+ "project_link": "nonebot-plugin-apexranklookup",
+ "name": "apex信息查询",
+ "desc": "查询apex玩家信息、地图等信息",
+ "author": "Windylh",
+ "homepage": "https://github.com/Windylh/nonebot_plugin_apexranklookup",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-10T08:56:26.675744Z",
+ "version": "0.1.7",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_randomnana",
+ "project_link": "nonebot-plugin-randomnana",
+ "name": "随机狗妈",
+ "desc": "随机抽取神乐七奈表情包图片",
+ "author": "NanakoOfficial",
+ "homepage": "https://github.com/NanakoOfficial/nonebot_plugin_randomnana",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-22T00:46:06.922063Z",
+ "version": "0.1.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_quote",
+ "project_link": "nonebot-plugin-quote",
+ "name": "群聊语录库",
+ "desc": "一款QQ群语录库——支持上传聊天截图为语录,随机投放语录,关键词搜索语录精准投放",
+ "author": "RongRongJi",
+ "homepage": "https://github.com/RongRongJi/nonebot_plugin_quote",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#326bad"
+ },
+ {
+ "label": "t:语录",
+ "color": "#003f88"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-13T19:07:23.124182Z",
+ "version": "0.3.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_memes_api",
+ "project_link": "nonebot-plugin-memes-api",
+ "name": "表情包制作",
+ "desc": "制作各种沙雕表情包",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-memes-api",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [],
+ "valid": true,
+ "version": "0.3.2",
+ "time": "2024-03-12T09:44:02.760534Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_rrc",
+ "project_link": "nonebot-plugin-rrc",
+ "name": "随机点名",
+ "desc": "就是群聊点名,让学生感受刺激",
+ "author": "QingMuCat",
+ "homepage": "https://github.com/QingMuCat/nonebot-plugin-rrc",
+ "tags": [
+ {
+ "label": "课堂",
+ "color": "#ea5252"
+ },
+ {
+ "label": "抽人",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-19T07:32:14.760521Z",
+ "version": "0.0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hotsearch",
+ "project_link": "nonebot-plugin-hotsearch",
+ "name": "多平台热搜获取插件",
+ "desc": "获取微博/百度/知乎/贴吧/b站的热搜信息",
+ "author": "Astolfocat",
+ "homepage": "https://github.com/Astolfocat/nonebot_plugin_hotsearch",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-19T04:59:59.139834Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ai_interviewer",
+ "project_link": "nonebot-plugin-ai-interviewer",
+ "name": "基于OpenAI的AI模拟面试官",
+ "desc": "本插件基于OpenAI的API开发,在nonebot框架下实现一个聊天式的可自定义面试职位的AI辅助面试官。",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot-plugin-ai-interviewer",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#4366eb"
+ },
+ {
+ "label": "模拟面试",
+ "color": "#af286f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-03-20T14:33:59.011021Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatglm",
+ "project_link": "nonebot-plugin-chatglm",
+ "name": "ChatGLM",
+ "desc": "基于ChatGLM-6B模型,提供本地中文(汉语)聊天机器人功能",
+ "author": "DaoMingze",
+ "homepage": "https://github.com/DaoMingze/zhukebot/tree/main/zhukebot/plugins/chatglm",
+ "tags": [
+ {
+ "label": "t:Chatbot",
+ "color": "#4366eb"
+ },
+ {
+ "label": "ChatGLM",
+ "color": "#af286f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-04T15:39:45.646722Z",
+ "version": "0.1.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatglm6b",
+ "project_link": "nonebot-plugin-chatglm6b",
+ "name": "ChatGLM-6B API版",
+ "desc": "通过ChatGLM-6B API来和已经部署好的ChatGLM对话",
+ "author": "QNLanYang",
+ "homepage": "https://github.com/QNLanYang/nonebot_plugin_ChatGLM6B",
+ "tags": [
+ {
+ "label": "t:ChatGLM",
+ "color": "#52d6ea"
+ },
+ {
+ "label": "AI Chat",
+ "color": "#8e52ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-08T15:47:04.430159Z",
+ "version": "0.1.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_helloworld",
+ "project_link": "nonebot-plugin-helloworld",
+ "name": "Hello World",
+ "desc": "你好,世界",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-helloworld",
+ "tags": [
+ {
+ "label": "good first plugin",
+ "color": "#6c58f6"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-24T11:29:41.026691Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_overbracket",
+ "project_link": "nonebot-plugin-overbracket",
+ "name": "通括膨胀",
+ "desc": "让你的机器人随机发括号",
+ "author": "NCBM",
+ "homepage": "https://github.com/NCBM/nonebot-plugin-overbracket",
+ "tags": [
+ {
+ "label": "useless",
+ "color": "#0a930e"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.2",
+ "time": "2023-06-19T08:06:41.126617Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_miao",
+ "project_link": "nonebot-plugin-miao",
+ "name": "口癖",
+ "desc": "让Bot的发言添加口癖",
+ "author": "CMHopeSunshine",
+ "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-miao",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.1.0",
+ "time": "2023-06-20T14:21:31.414654Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_questionmark",
+ "project_link": "nonebot-plugin-questionmark",
+ "name": "颠倒问号",
+ "desc": "发送单个问号 `?` 或 `?`, bot会自动回复颠倒的问号 `¿`",
+ "author": "NumberSir",
+ "homepage": "https://github.com/NumberSir/nonebot-plugin-questionmark",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-03T08:15:01.898492Z",
+ "version": "0.4.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_genshin_cos",
+ "project_link": "nonebot-plugin-genshin-cos",
+ "name": "米游社cos",
+ "desc": "获取原神coser图片",
+ "author": "Cvandia",
+ "homepage": "https://github.com/Cvandia/nonebot_plugin_genshin_cos",
+ "tags": [
+ {
+ "label": "原神",
+ "color": "#f55400"
+ },
+ {
+ "label": "cos",
+ "color": "#00d0f5"
+ },
+ {
+ "label": "coser",
+ "color": "#eb1dd3"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.7",
+ "time": "2024-03-09T13:23:44.009084Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatgpt_plus",
+ "project_link": "nonebot-plugin-chatgpt-plus",
+ "name": "ChatGPT网页端API",
+ "desc": "免费、无限使用ChatGPT,PLUS账号可使用ChatGPT4.0,绕过ChatGPT的Cloudflare盾来使用免费网页端ChatGPT",
+ "author": "AkashiCoin",
+ "homepage": "https://github.com/AkashiCoin/nonebot-plugin-chatgpt-plus",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#ea5252"
+ },
+ {
+ "label": "GPT4",
+ "color": "#2ecf57"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-17T11:16:32.728012Z",
+ "version": "0.8.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sayoroll",
+ "project_link": "nonebot-plugin-sayoroll",
+ "name": "sayoroll",
+ "desc": "随机数字或随机事件",
+ "author": "mas-alone",
+ "homepage": "https://github.com/mas-alone/nonebot-plugin-sayoroll",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.6.1",
+ "time": "2024-03-07T04:04:59.513027Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gw2",
+ "project_link": "nonebot-plugin-gw2",
+ "name": "激战2",
+ "desc": "使用api获取星岬岛信息",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_gw2",
+ "tags": [
+ {
+ "label": "gw2",
+ "color": "#52ea5a"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.4",
+ "time": "2023-06-23T05:32:22.625374Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_today_waifu",
+ "project_link": "nonebot-plugin-today-waifu",
+ "name": "今日老婆",
+ "desc": "随机抓取群友做老婆",
+ "author": "glamorgan9826",
+ "homepage": "https://github.com/glamorgan9826/nonebot-plugin-today-waifu",
+ "tags": [
+ {
+ "label": "娱乐",
+ "color": "#eac752"
+ },
+ {
+ "label": "每日老婆",
+ "color": "#9beff6"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-25T14:57:04.643842Z",
+ "version": "0.1.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sleep",
+ "project_link": "nonebot-plugin-sleep",
+ "name": "来份睡眠套餐",
+ "desc": "让bot给你一份精致的睡眠套餐(发指令禁言)",
+ "author": "mas-alone",
+ "homepage": "https://github.com/mas-alone/nonebot-plugin-sleep",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-02-22T03:15:30.040702Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_api_paddle",
+ "project_link": "nonebot-api-paddle",
+ "name": "nonebot_api_paddle",
+ "desc": "nonebot_api_paddleocr",
+ "author": "canxin121",
+ "homepage": "https://github.com/canxin121/nonebot_api_paddleocr",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-21T15:52:29.221679Z",
+ "version": "1.0.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatppt",
+ "project_link": "nonebot-plugin-chatppt",
+ "name": "AI生成PPT",
+ "desc": "在nonebot框架下实现一个AI生成指定主题PPT的文件并上传到群文件中",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot-plugin-chatppt",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-05T08:45:56.162272Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_steam_game_status",
+ "project_link": "nonebot-plugin-steam-game-status",
+ "name": "Steam游戏状态",
+ "desc": "播报群友的Steam游戏状态",
+ "author": "nek0us",
+ "homepage": "https://github.com/nek0us/nonebot_plugin_steam_game_status",
+ "tags": [
+ {
+ "label": "Steam",
+ "color": "#6690a5"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.1.7",
+ "time": "2024-02-28T18:40:00.487496Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilichat",
+ "project_link": "nonebot-plugin-bilichat",
+ "name": "nonebot-plugin-bilichat",
+ "desc": "多种B站链接解析,视频词云,AI总结,你想要的都在 bilichat",
+ "author": "Well2333",
+ "homepage": "https://github.com/Well2333/nonebot-plugin-bilichat",
+ "tags": [
+ {
+ "label": "哔哩哔哩",
+ "color": "#ffc8ea"
+ },
+ {
+ "label": "ChatGPT",
+ "color": "#75ffc0"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qqguild"
+ ],
+ "valid": false,
+ "version": "5.2.0",
+ "time": "2024-02-22T07:51:13.607536Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "GenshinUID",
+ "project_link": "nonebot-plugin-genshinuid",
+ "name": "GenshinUID",
+ "desc": "支持大部分适配器的全功能NoneBot2原神插件",
+ "author": "KimigaiiWuyi",
+ "homepage": "https://github.com/KimigaiiWuyi/GenshinUID",
+ "tags": [
+ {
+ "label": "a:all",
+ "color": "#ea5252"
+ },
+ {
+ "label": "原神",
+ "color": "#000000"
+ },
+ {
+ "label": "早柚核心",
+ "color": "#7937a9"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-18T05:13:47.485271Z",
+ "version": "4.6.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_blive_danmaku",
+ "project_link": "nonebot-plugin-blive-danmaku",
+ "name": "B站直播间路灯",
+ "desc": "通过弹幕记录直播高能点",
+ "author": "zangxx66",
+ "homepage": "https://github.com/zangxx66/nonebot_plugin_blive_danmaku",
+ "tags": [
+ {
+ "label": "t:bilibili",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-08T08:54:21.863198Z",
+ "version": "0.4.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_clock",
+ "project_link": "nonebot-plugin-clock",
+ "name": "nonebot clock 群闹钟 ⏰",
+ "desc": "支持群聊 私聊的⏰插件",
+ "author": "Zeta-qixi",
+ "homepage": "https://github.com/Zeta-qixi/nonebot-plugin-clock",
+ "tags": [
+ {
+ "label": "闹钟",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-22T02:06:01.009228Z",
+ "version": "0.9",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_SDGPT",
+ "project_link": "nonebot-plugin-SDGPT",
+ "name": "SDGPT",
+ "desc": "链接 ChatGPT / Bing / Stable-Diffusion: ChatGPT Bing 聊天, gpt 解析自然语言转 Stable-Diffusion 生成图像",
+ "author": "thx114",
+ "homepage": "https://github.com/thx114/sdgpt",
+ "tags": [
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ },
+ {
+ "label": "chatGPT",
+ "color": "#54b490"
+ },
+ {
+ "label": "novelai",
+ "color": "#f0dc4e"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-05T02:47:56.881617Z",
+ "version": "0.2.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_fuckyou",
+ "project_link": "nonebot-plugin-fuckyou",
+ "name": "FuckYou",
+ "desc": "莎士比亚没有士",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-fuckyou",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0.post1",
+ "time": "2024-03-10T08:54:32.695129Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pokemonfusion",
+ "project_link": "nonebot-plugin-pokemonfusion",
+ "name": "宝可梦融合",
+ "desc": "Pokemon Infinite Fusion的中文版融合计算器,支持融合420^2=176400种宝可梦",
+ "author": "IllusiveBull",
+ "homepage": "https://github.com/IllusiveBull/nonebot_plugin_pokemonfusion",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-10-24T05:13:39.699321Z",
+ "version": "1.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "tatarubot2",
+ "project_link": "tatarubot2",
+ "name": "TataruBot2",
+ "desc": "FF14相关轻量功能,如查物价、logs、看微博等",
+ "author": "aaron-lii",
+ "homepage": "https://github.com/aaron-lii/TataruBot2",
+ "tags": [
+ {
+ "label": "t:FF14",
+ "color": "#5282ea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-12-04T02:02:20.511796Z",
+ "version": "1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_talk_with_chatgpt",
+ "project_link": "nonebot-plugin-talk-with-chatgpt",
+ "name": "与ChatGpt聊天",
+ "desc": "基于accessToken登录的chatgpt聊天插件",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_talk_with_chatgpt",
+ "tags": [
+ {
+ "label": "chatgpt",
+ "color": "#1a834e"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-23T13:36:55.110924Z",
+ "version": "0.6.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_osuverify",
+ "project_link": "nonebot-plugin-osuverify",
+ "name": "osu!入群审批",
+ "desc": "通过osu!用户名的入群审核并其修改群名片为id",
+ "author": "mas-alone",
+ "homepage": "https://github.com/mas-alone/nonebot-plugin-osuverify",
+ "tags": [
+ {
+ "label": "OSU",
+ "color": "#eb5d9b"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-03-05T09:45:42.028099Z",
+ "version": "0.1.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bilifan",
+ "project_link": "nonebot-plugin-bilifan",
+ "name": "bilifan",
+ "desc": "b站粉丝牌~",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_bilifan",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#ec15c6"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.3.2",
+ "time": "2024-01-25T10:10:05.461565Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_akinator",
+ "project_link": "nonebot-plugin-akinator",
+ "name": "Akinator",
+ "desc": "网络天才",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-akinator",
+ "tags": [
+ {
+ "label": "Akinator",
+ "color": "#6599fe"
+ },
+ {
+ "label": "网络天才",
+ "color": "#6599fe"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2024-03-10T11:36:13.067923Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_rename",
+ "project_link": "nonebot-plugin-rename",
+ "name": "nonebot_plugin_rename",
+ "desc": "用于更改qq机器人的群名片,内置多种有趣名片",
+ "author": "forchannot",
+ "homepage": "https://github.com/forchannot/nonebot_plugin_rename",
+ "tags": [
+ {
+ "label": "群名片",
+ "color": "#466bed"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.7.1",
+ "time": "2024-02-03T07:20:38.157409Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_appinsights",
+ "project_link": "nonebot-plugin-appinsights",
+ "name": "Nonebot2 AppInsights",
+ "desc": "Nonebot2 Application Insights 日志连接插件",
+ "author": "XZhouQD",
+ "homepage": "https://github.com/xzhouqd/nonebot-plugin-appinsights",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-06-19T17:05:18.866643Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_brainfuck",
+ "project_link": "nonebot-plugin-brainfuck",
+ "name": "brainfuck",
+ "desc": "一个brainfuck解释器,允许在群聊中输入brainfuck:{command}:{inbox}执行brainfuck代码,并返回outbox",
+ "author": "campanulamediuml",
+ "homepage": "https://github.com/campanulamediuml/nonebot-plugin-brainfuck",
+ "tags": [
+ {
+ "label": "t:dev",
+ "color": "#ea5252"
+ },
+ {
+ "label": "t:bf",
+ "color": "#529fea"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-23T04:37:04.094212Z",
+ "version": "1.0.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-coderun",
+ "project_link": "nonebot-plugin-coderun",
+ "name": "运行代码",
+ "desc": "基于runoob.com的在线代码运行插件",
+ "author": "Yincmewy",
+ "homepage": "https://github.com/Yincmewy/nonebot_plugin_coderun",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-22T12:23:23.324337Z",
+ "version": "0.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_abot_place",
+ "project_link": "nonebot-plugin-abot-place",
+ "name": "公共画板插件",
+ "desc": "可以让所有的 Bot 用户一起来画画(参考 Reddit Place)",
+ "author": "djkcyl",
+ "homepage": "https://github.com/Aunly/nonebot-plugin-abot-place",
+ "tags": [
+ {
+ "label": "ABot",
+ "color": "#52aaea"
+ },
+ {
+ "label": "Place",
+ "color": "#ea6dda"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-01T09:52:35.801795Z",
+ "version": "0.1.0.post3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_megumin",
+ "project_link": "nonebot-plugin-megumin",
+ "name": "为美好群聊献上爆炎",
+ "desc": "现在,你的群友可以触发失传已久的爆裂魔法了",
+ "author": "youlanan",
+ "homepage": "https://github.com/youlanan/nonebot_plugin_megumin",
+ "tags": [
+ {
+ "label": "小游戏",
+ "color": "#f9971c"
+ },
+ {
+ "label": "Explosion",
+ "color": "#f94b1c"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-04-30T02:05:54.367615Z",
+ "version": "0.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_manga_translator",
+ "project_link": "nonebot-plugin-manga-translator",
+ "name": "图片翻译",
+ "desc": "利用api翻译图片并返回翻译后的图片",
+ "author": "maoxig",
+ "homepage": "https://github.com/maoxig/nonebot-plugin-manga-translator",
+ "tags": [
+ {
+ "label": "漫画翻译",
+ "color": "#527bea"
+ },
+ {
+ "label": "图片翻译",
+ "color": "#c452ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-06-09T12:43:01.115471Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_watermarker",
+ "project_link": "nonebot-plugin-watermarker",
+ "name": "水印大师",
+ "desc": "给bot发的图片增加水印,支持随机水印添加",
+ "author": "X-Skirt-X",
+ "homepage": "https://github.com/X-Skirt-X/nonebot-plugin-watermarker",
+ "tags": [
+ {
+ "label": "t:水印",
+ "color": "#52eae7"
+ },
+ {
+ "label": "t:图片水印",
+ "color": "#ef258f"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-03T12:05:50.890757Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_starrail_calendar",
+ "project_link": "nonebot-plugin-starrail-calendar",
+ "name": "星穹铁道活动日历",
+ "desc": "查看《崩坏:星穹铁道》官方活动",
+ "author": "nicklly",
+ "homepage": "https://github.com/nicklly/nonebot_plugin_StarRail_calendar",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-09-17T08:57:38.240552Z",
+ "version": "1.0.8",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wordle_help",
+ "project_link": "nonebot-plugin-wordle-help",
+ "name": "wordle_help",
+ "desc": "wordle游戏小助手",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/Hinata-Bot/tree/main/src/plugins/wordle_help",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.3",
+ "time": "2023-06-20T13:31:24.879980Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-csgo-case-simulator",
+ "project_link": "nonebot-plugin-csgo-case-simulator",
+ "name": "CSGO开箱模拟器",
+ "desc": "内置所有最新武器箱,可多箱连开",
+ "author": "roiiiu",
+ "homepage": "https://github.com/roiiiu/nonebot-plugin-csgo-case-simulator",
+ "tags": [
+ {
+ "label": "CSGO",
+ "color": "#47aeff"
+ },
+ {
+ "label": "开箱模拟器",
+ "color": "#ff4781"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-02-27T09:24:39.222768Z",
+ "version": "1.0.1",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_callapi",
+ "project_link": "nonebot-plugin-callapi",
+ "name": "CallAPI",
+ "desc": "使用指令来调用 Bot 的 API",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-callapi",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.2.0",
+ "time": "2024-03-10T10:48:00.487466Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_penguin",
+ "project_link": "nonebot-plugin-penguin",
+ "name": "nonebot_plugin_penguin",
+ "desc": "使用nonebot2查询企鹅物流掉落物数据",
+ "author": "AzideCupric",
+ "homepage": "https://github.com/AzideCupric/nonebot-plugin-penguin",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-06-20T15:22:02.968145Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_spark_gpt",
+ "project_link": "nonebot-plugin-spark-gpt",
+ "name": "Spark_GPT",
+ "desc": "将poe,chatgpt,slack claude,Newbing,SydneyBing,google bard,讯飞星火模型(SparkDesk),通义千问等接入qq,tg,kook(原开黑啦),discord多平台用户绑定实现数据互通,并提供webui进行便捷配置,自适应文转图,实现预设人格化bot的便捷创建,使用和管理",
+ "author": "canxin121",
+ "homepage": "https://github.com/canxin121/Spark-GPT",
+ "tags": [
+ {
+ "label": "多来源语言GPT",
+ "color": "#5599ff"
+ },
+ {
+ "label": "多平台用户数据互通",
+ "color": "#ffff77"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.discord",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": false,
+ "version": "2.0.3",
+ "time": "2023-10-12T14:37:14.174909Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_logpile",
+ "project_link": "nonebot-plugin-logpile",
+ "name": "本地日志保存",
+ "desc": "将 bot 日志记录保存到本地文件中",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-logpile",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-09T20:58:22.826287Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_arkgacha",
+ "project_link": "nonebot-plugin-arkgacha",
+ "name": "明日方舟抽卡模拟",
+ "desc": "明模拟日方舟抽卡功能,支持模拟十连",
+ "author": "RF-Tar-Railt",
+ "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-arkgacha",
+ "tags": [
+ {
+ "label": "game",
+ "color": "#eaa852"
+ },
+ {
+ "label": "arknights",
+ "color": "#5276ea"
+ },
+ {
+ "label": "抽卡",
+ "color": "#c852ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.6.0",
+ "time": "2024-03-10T15:09:59.474921Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_og",
+ "project_link": "nonebot-plugin-og",
+ "name": "链接解析",
+ "desc": "检测链接并发送网站简介及预览图",
+ "author": "mute23-code",
+ "homepage": "https://github.com/mute23-code/nonebot_plugin_og",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-13T08:37:54.070197Z",
+ "version": "0.3.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_hoshino_sign",
+ "project_link": "nonebot-plugin-hoshino-sign",
+ "name": "签到",
+ "desc": "从 hoshino 搬过来的 pcr 签到, 略作修改。",
+ "author": "zhulinyv",
+ "homepage": "https://github.com/zhulinyv/nonebot_plugin_hoshino_sign",
+ "tags": [
+ {
+ "label": "PCR",
+ "color": "#ff0000"
+ },
+ {
+ "label": "签到",
+ "color": "#008000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2024-01-29T01:20:41.320603Z",
+ "version": "2.3.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_multincm",
+ "project_link": "nonebot-plugin-multincm",
+ "name": "MultiNCM",
+ "desc": "网易云多选点歌",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-multincm",
+ "tags": [
+ {
+ "label": "网易云",
+ "color": "#ea5252"
+ },
+ {
+ "label": "ncm",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.4.4",
+ "time": "2023-11-02T14:51:45.862245Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_smallapi",
+ "project_link": "nonebot-plugin-smallapi",
+ "name": "小小的WEBAPI调用插件",
+ "desc": "顾名思义~不要骂我~",
+ "author": "chaichaisi",
+ "homepage": "https://github.com/chaichaisi/nonebot_plugin_smallapi",
+ "tags": [
+ {
+ "label": "webapi",
+ "color": "#52ea7d"
+ },
+ {
+ "label": "api",
+ "color": "#52ea7d"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-17T06:23:36.976025Z",
+ "version": "1.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_p5generator",
+ "project_link": "nonebot-plugin-p5generator",
+ "name": "《女神异闻录5》预告信生成器",
+ "desc": "可以生成仿《女神异闻录5》中心之怪盗团向罪人宣战的预告信",
+ "author": "xi-yue-233",
+ "homepage": "https://github.com/xi-yue-233/nonebot-plugin-p5generator",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-18T08:56:25.717856Z",
+ "version": "0.1.4",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sd_webui",
+ "project_link": "nonebot-plugin-sd-webui",
+ "name": "SD绘画插件",
+ "desc": "基于stable-diffusion-webui的nonebot绘画插件,支持文生图、图生图、参数指定、模型管理、翻译等功能",
+ "author": "evan-gyy",
+ "homepage": "https://github.com/evan-gyy/nonebot_plugin_sd_webui",
+ "tags": [
+ {
+ "label": "sd",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-16T07:53:39.816541Z",
+ "version": "0.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_session",
+ "project_link": "nonebot-plugin-session",
+ "name": "会话id",
+ "desc": "会话信息提取与会话id定义插件",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-session",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.3.1",
+ "time": "2024-02-25T07:05:33.845496Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pluginupdatecheck",
+ "project_link": "nonebot-plugin-pluginupdatecheck",
+ "name": "便携插件安装器",
+ "desc": "一个nonebot2的插件便捷安装和升级插件(基于nb-cli和pip)",
+ "author": "xi-yue-233",
+ "homepage": "https://github.com/xi-yue-233/nonebot-plugin-pluginupdatecheck",
+ "tags": [
+ {
+ "label": "便携安装",
+ "color": "#e42828"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-18T17:14:20.083595Z",
+ "version": "0.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_stockhelper",
+ "project_link": "nonebot-plugin-stockhelper",
+ "name": "股票看盘助手",
+ "desc": "股票波动超过设定值提醒,省去一直盯盘的烦恼",
+ "author": "Calanosay",
+ "homepage": "https://github.com/Calanosay/nonebot_plugin_stockhelper",
+ "tags": [
+ {
+ "label": "股票",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-19T10:18:39.940826Z",
+ "version": "0.1.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_githubcard",
+ "project_link": "nonebot-plugin-githubcard",
+ "name": "githubcard",
+ "desc": "检测GitHub仓库链接并自动发送卡片信息(适用于Onebot V11)",
+ "author": "ElainaFanBoy",
+ "homepage": "https://github.com/ElainaFanBoy/nonebot_plugin_githubcard",
+ "tags": [
+ {
+ "label": " Github",
+ "color": "#171a21"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.2",
+ "time": "2024-03-13T03:26:06.815959Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_lua",
+ "project_link": "nonebot-plugin-lua",
+ "name": "nonebot-plugin-lua",
+ "desc": "在nonebot中执行lua(experimental)",
+ "author": "synodriver",
+ "homepage": "https://github.com/synodriver/nonebot_plugin_lua",
+ "tags": [],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-23T15:50:12.147563Z",
+ "version": "0.0.1.dev2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cube",
+ "project_link": "nonebot-plugin-cube",
+ "name": "cuber",
+ "desc": "魔方插件",
+ "author": "initialencounter",
+ "homepage": "https://github.com/initialencounter/nonebot-plugin-cube",
+ "tags": [
+ {
+ "label": "魔方",
+ "color": "#ea5252"
+ },
+ {
+ "label": "sqlite3",
+ "color": "#c2ea52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-23T15:47:57.754235Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_homo_mathematician",
+ "project_link": "nonebot-plugin-homo-mathematician",
+ "name": "homo_mathematician",
+ "desc": "任何实数都用连续的114514通过加减乘除达成, 任给一组数据都能找出其内在规律(函数表达式)",
+ "author": "Special-Week",
+ "homepage": "https://github.com/Special-Week/Hinata-Bot/tree/main/src/plugins/homo_mathematician",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.7",
+ "time": "2024-03-17T07:43:15.322788Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_puzzle",
+ "project_link": "nonebot-plugin-puzzle",
+ "name": "puzzle",
+ "desc": "数字华容道,拼图游戏,查看群华容排名",
+ "author": "initialencounter",
+ "homepage": "https://github.com/initialencounter/nonebot-plugin-puzzle",
+ "tags": [
+ {
+ "label": "数字华容道",
+ "color": "#ea5252"
+ },
+ {
+ "label": "拼图游戏",
+ "color": "#a7ea52"
+ },
+ {
+ "label": "puzzle",
+ "color": "#52eadd"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-05-23T20:38:56.076911Z",
+ "version": "1.0.2",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_herocard",
+ "project_link": "nonebot-plugin-herocard",
+ "name": "本子标题关键词提取",
+ "desc": "为了方便各位平时搜索本子用,发扬hero精神",
+ "author": "Xie-Tiao",
+ "homepage": "https://github.com/Xie-Tiao/nonebot_plugin_herocard",
+ "tags": [
+ {
+ "label": "文本提取",
+ "color": "#6bc6bf"
+ },
+ {
+ "label": "日语",
+ "color": "#53bbd8"
+ },
+ {
+ "label": "本子",
+ "color": "#eea1b1"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-07-10T09:27:24.982052Z",
+ "version": "1.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nagabus",
+ "project_link": "nonebot-plugin-nagabus",
+ "name": "NAGA公交车",
+ "desc": "为群友提供NAGA拼车服务",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-nagabus",
+ "tags": [
+ {
+ "label": "日麻",
+ "color": "#b52ee1"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qqguild",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": false,
+ "version": "0.3.2",
+ "time": "2023-12-12T12:30:44.770450Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_random_draw",
+ "project_link": "nonebot-plugin-random-draw",
+ "name": "随机抽取自定义内容",
+ "desc": "通过添加各种想要抽取的内容,进行随机抽取。选择困难症的福音",
+ "author": "Ikaros-521",
+ "homepage": "https://github.com/Ikaros-521/nonebot_plugin_random_draw",
+ "tags": [
+ {
+ "label": "随机",
+ "color": "#ffe0aa"
+ },
+ {
+ "label": "a:onebot",
+ "color": "#000000"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-06-11T15:58:58.120380Z",
+ "version": "0.1.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_stable_diffusion_diao",
+ "project_link": "nonebot-plugin-stable-diffusion-diao",
+ "name": "stablediffusion绘画插件",
+ "desc": "另一个绘画插件,支持多SD后端,负载均衡,lora,emb,chatgpt prompt生成,更换模型等等更多功能",
+ "author": "DiaoDaiaChan",
+ "homepage": "https://github.com/DiaoDaiaChan/nonebot-plugin-stable-diffusion-diao",
+ "tags": [
+ {
+ "label": "AI绘图",
+ "color": "#eaaf52"
+ },
+ {
+ "label": "SD",
+ "color": "#eaaf52"
+ }
+ ],
+ "is_official": false,
+ "type": null,
+ "supported_adapters": null,
+ "valid": false,
+ "time": "2023-11-09T13:01:41.243448Z",
+ "version": "0.4.7.3",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_al",
+ "project_link": "nonebot-plugin-al",
+ "name": "碧蓝航线攻略",
+ "desc": "碧蓝航线井号榜等等攻略",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_AL",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#ea52e5"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.10",
+ "time": "2023-08-04T10:37:18.628816Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_escape_url",
+ "project_link": "nonebot-plugin-escape-url",
+ "name": "链接防夹",
+ "desc": "自动转换发送消息中的URL,逃避URL检测",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-escape-url",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qqguild"
+ ],
+ "valid": true,
+ "version": "0.1.3.post1",
+ "time": "2023-06-09T14:54:07.632074Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_twitter",
+ "project_link": "nonebot-plugin-twitter",
+ "name": "twitter 推特订阅",
+ "desc": "订阅 twitter 推文",
+ "author": "nek0us",
+ "homepage": "https://github.com/nek0us/nonebot-plugin-twitter",
+ "tags": [
+ {
+ "label": "twitter",
+ "color": "#29a8dc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.4",
+ "time": "2024-01-20T11:49:43.579188Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pcrjjc",
+ "project_link": "nonebot-plugin-pcrjjc",
+ "name": "pcrjjc",
+ "desc": "公主连结(国服)排名监测工具",
+ "author": "reine-ishyanami",
+ "homepage": "https://github.com/reine-ishyanami/nonebot-plugin-pcrjjc",
+ "tags": [
+ {
+ "label": "公主连结",
+ "color": "#778a1e"
+ },
+ {
+ "label": "pcrjjc",
+ "color": "#778a1e"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.6.2",
+ "time": "2024-01-05T03:15:36.782405Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_audiocraft",
+ "project_link": "nonebot-plugin-audiocraft",
+ "name": "AI作曲",
+ "desc": "Nonebot框架下的AI作曲插件",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot-plugin-audiocraft",
+ "tags": [
+ {
+ "label": "AI",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.5",
+ "time": "2023-06-19T10:57:18.415643Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bili_push",
+ "project_link": "nonebot-plugin-bili-push",
+ "name": "bili_push",
+ "desc": "推送b站动态",
+ "author": "SuperGuGuGu",
+ "homepage": "https://github.com/SuperGuGuGu/nonebot_plugin_bili_push",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#de5d92"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.1.20.1",
+ "time": "2024-03-10T15:14:45.185185Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_warthunder_player_check",
+ "project_link": "nonebot-plugin-warthunder-player-check",
+ "name": "战雷查水表",
+ "desc": "搜索warthunder社区查询玩家履历",
+ "author": "0Neptune0",
+ "homepage": "https://github.com/0Neptune0/nonebot-plugin-warthunder-player-check",
+ "tags": [
+ {
+ "label": "Wathunder",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.1.3",
+ "time": "2023-09-16T08:15:36.199644Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_follow_withdraw",
+ "project_link": "nonebot-plugin-follow-withdraw",
+ "name": "follow_withdraw",
+ "desc": "当命令消息被撤回时,Bot跟随撤回命令结果",
+ "author": "CMHopeSunshine",
+ "homepage": "https://github.com/CMHopeSunshine/nonebot-plugin-follow-withdraw",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qqguild"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-06-19T14:34:18.210942Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_error_alert",
+ "project_link": "nonebot-plugin-error-alert",
+ "name": "错误告警",
+ "desc": "当Bot发生运行错误时发送消息提醒",
+ "author": "ssttkkl",
+ "homepage": "https://github.com/bot-ssttkkl/nonebot-plugin-error-alert",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qqguild",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-09-10T15:16:08.235679Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ocgbot_v2",
+ "project_link": "nonebot-plugin-ocgbot-v2",
+ "name": "游戏王小蓝卡查",
+ "desc": "提供游戏王相关服务",
+ "author": "fireinsect",
+ "homepage": "https://github.com/fireinsect/nonebot-plugin-ocgbot-v2/",
+ "tags": [
+ {
+ "label": "游戏王",
+ "color": "#2ecbed"
+ },
+ {
+ "label": "ygo",
+ "color": "#f77117"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.2.9.4",
+ "time": "2024-03-18T07:02:34.851618Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_helltide",
+ "project_link": "nonebot-plugin-helltide",
+ "name": "Diablo4地狱狂潮boss提醒小助手",
+ "desc": "支持订阅,在D4继续上班",
+ "author": "QBkira",
+ "homepage": "https://github.com/QBkira/nonebot-plugin-helltide",
+ "tags": [
+ {
+ "label": "helltide",
+ "color": "#ff0000"
+ },
+ {
+ "label": "diablo4",
+ "color": "#ff3300"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.7",
+ "time": "2023-06-25T13:19:55.857199Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_userinfo",
+ "project_link": "nonebot-plugin-userinfo",
+ "name": "用户信息",
+ "desc": "多平台的用户信息获取插件",
+ "author": "MeetWq",
+ "homepage": "https://github.com/noneplugin/nonebot-plugin-userinfo",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.3",
+ "time": "2024-03-19T10:39:54.600626Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_poke",
+ "project_link": "nonebot-plugin-poke",
+ "name": "戳一戳事件",
+ "desc": "自定义群聊戳一戳事件",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_poke",
+ "tags": [
+ {
+ "label": "v11",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.2",
+ "time": "2023-08-02T08:32:28.462790Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_friends",
+ "project_link": "nonebot-plugin-friends",
+ "name": "远程同意好友",
+ "desc": "自定义远程同意好友和群聊申请",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_friends",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.2",
+ "time": "2023-08-09T15:10:30.495458Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_update",
+ "project_link": "nonebot-plugin-update",
+ "name": "nonebot-plugin-update",
+ "desc": "用于检测 Nonebot 插件更新的 Nonebot 插件",
+ "author": "djkcyl",
+ "homepage": "https://github.com/Aunly/nonebot-plugin-update",
+ "tags": [
+ {
+ "label": "Nonebot",
+ "color": "#ea5252"
+ },
+ {
+ "label": "tool",
+ "color": "#527dea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-07-05T13:27:09.922237Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cp_broadcast",
+ "project_link": "nonebot-plugin-cp-broadcast",
+ "name": "算法竞赛比赛查询",
+ "desc": "可以查询牛客、atcoder、codeforces平台的今天和近几天的比赛信息",
+ "author": "HuParry",
+ "homepage": "https://github.com/HuParry/nonebot-plugin-cp-broadcast",
+ "tags": [
+ {
+ "label": "算法竞赛",
+ "color": "#ea5252"
+ },
+ {
+ "label": "比赛播报",
+ "color": "#55ea52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "2.2.0",
+ "time": "2024-03-06T07:13:17.243452Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cfassistant",
+ "project_link": "nonebot-plugin-cfassistant",
+ "name": "nonebot-plugin-cfassistant",
+ "desc": "一个支持CF(codeforces)平台查询比赛/比赛提醒/监测分数变化的nonebot机器人插件",
+ "author": "coyude",
+ "homepage": "https://github.com/coyude/nonebot-plugin-cfassistant",
+ "tags": [
+ {
+ "label": "ACM",
+ "color": "#52eacf"
+ },
+ {
+ "label": "Codeforces",
+ "color": "#52eacf"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.4",
+ "time": "2023-07-13T09:19:06.972726Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_splatoon3_schedule",
+ "project_link": "nonebot-plugin-splatoon3-schedule",
+ "name": "splatoon3游戏日程查询",
+ "desc": "一个基于nonebot2框架的splatoon3游戏日程查询插件",
+ "author": "Cypas",
+ "homepage": "https://github.com/Cypas/splatoon3-schedule",
+ "tags": [
+ {
+ "label": "splatoon3",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "1.7.0",
+ "time": "2024-03-02T05:39:39.974015Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_capoo",
+ "project_link": "nonebot-plugin-capoo",
+ "name": "猫猫虫咖波图片发送",
+ "desc": "发送capoo指令后bot会随机发出一张capoo的可爱表情包",
+ "author": "HuParry",
+ "homepage": "https://github.com/HuParry/nonebot-plugin-capoo",
+ "tags": [
+ {
+ "label": "猫猫虫咖波",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2024-01-24T11:01:08.207028Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_eventexpiry",
+ "project_link": "nonebot-plugin-eventexpiry",
+ "name": "过期事件过滤器",
+ "desc": "自动过滤过期事件",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-eventexpiry",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2023-07-07T18:26:34.752138Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nobahpicture",
+ "project_link": "nonebot-plugin-nobahpicture",
+ "name": "nonebot-plugin-nobahpicture",
+ "desc": "获取碧蓝档案涩图",
+ "author": "Lptr-byte",
+ "homepage": "https://github.com/Lptr-byte/nonebot-plugin-nobahpicture",
+ "tags": [
+ {
+ "label": "碧蓝档案",
+ "color": "#00defe"
+ },
+ {
+ "label": "蔚蓝档案",
+ "color": "#00defe"
+ },
+ {
+ "label": "涩图",
+ "color": "#00defe"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.2",
+ "time": "2023-07-10T06:52:29.857291Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_blocker",
+ "project_link": "nonebot-plugin-blocker",
+ "name": "Blocker",
+ "desc": "分群配置关闭Bot插件",
+ "author": "MerCuJerry",
+ "homepage": "https://github.com/MerCuJerry/nonebot-plugin-blocker",
+ "tags": [
+ {
+ "label": "Blocker",
+ "color": "#39c5bb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.4.5",
+ "time": "2024-02-29T08:31:01.720829Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_picture_api",
+ "project_link": "nonebot-plugin-picture-api",
+ "name": "nonebot-plugin-picture-api",
+ "desc": "一款可以自由增删图片指令和api的插件",
+ "author": "Q1351998764",
+ "homepage": "https://github.com/Q1351998764/nonebot-plugin-picture-api",
+ "tags": [
+ {
+ "label": "图片api",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.5",
+ "time": "2023-09-19T15:19:49.310145Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wenan",
+ "project_link": "nonebot-plugin-wenan",
+ "name": "nonebot-plugin-wenan",
+ "desc": "一款可以自由增删文案指令和api的插件",
+ "author": "Q1351998764",
+ "homepage": "https://github.com/Q1351998764/nonebot-plugin-wenan",
+ "tags": [
+ {
+ "label": "文案api",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0",
+ "time": "2023-07-11T12:27:12.020208Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pjsk",
+ "project_link": "nonebot-plugin-pjsk",
+ "name": "Sekai Stickers",
+ "desc": "基于 NoneBot2 的 Project Sekai 表情包制作插件",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_pjsk",
+ "tags": [
+ {
+ "label": "pjsk",
+ "color": "#e852eb"
+ },
+ {
+ "label": "啤酒烧烤",
+ "color": "#e852eb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.4.0.post1",
+ "time": "2024-03-10T10:24:15.027602Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mongodb",
+ "project_link": "nonebot-plugin-mongodb",
+ "name": "MongoDB",
+ "desc": "基于 MongoDB ODM 的数据库管理插件",
+ "author": "Well2333",
+ "homepage": "https://github.com/Well2333/nonebot-plugin-mongodb",
+ "tags": [
+ {
+ "label": "mongodb",
+ "color": "#30a340"
+ },
+ {
+ "label": "beanie",
+ "color": "#ff0a0a"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-07-14T10:32:08.006009Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_templates",
+ "project_link": "nonebot-plugin-templates",
+ "name": "templates_render",
+ "desc": "使用htmlrender和jinja2渲染,使用构建的menu,card或dict进行模板渲染",
+ "author": "canxin121",
+ "homepage": "https://github.com/canxin121/nonebot_plugin_templates",
+ "tags": [
+ {
+ "label": "模板渲染",
+ "color": "#eacd52"
+ },
+ {
+ "label": "图片生成",
+ "color": "#adea52"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2023-08-24T09:56:33.184091Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pokesomeone",
+ "project_link": "nonebot-plugin-pokesomeone",
+ "name": "指定戳一戳",
+ "desc": "指定戳某人若干次",
+ "author": "canxin121",
+ "homepage": "https://github.com/canxin121/nonebot_plugin_pokesomeone",
+ "tags": [
+ {
+ "label": "戳一戳",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2023-07-18T16:43:32.796199Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dall-e",
+ "project_link": "nonebot-plugin-dall-e",
+ "name": "DALL-E绘图",
+ "desc": "使用DALL·E绘图",
+ "author": "Rockytkg",
+ "homepage": "https://github.com/Rockytkg/nonebot_plugin_dall-e",
+ "tags": [
+ {
+ "label": "DALL-E",
+ "color": "#ea5252"
+ },
+ {
+ "label": "AI画图",
+ "color": "#52ea61"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "time": "2023-07-22T16:19:17.616772Z",
+ "version": "0.6",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_tempfile",
+ "project_link": "nonebot-plugin-tempfile",
+ "name": "方寸狭间",
+ "desc": "临时文件/IO 依赖注入支持",
+ "author": "NCBM",
+ "homepage": "https://github.com/NCBM/nonebot-plugin-tempfile",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-07-21T08:40:50.274108Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_disconnect_notice",
+ "project_link": "nonebot-plugin-disconnect-notice",
+ "name": "bot断连通知",
+ "desc": "bot断连时的通知插件,当前支持邮件通知",
+ "author": "Cypas",
+ "homepage": "https://github.com/Cypas/nonebot_plugin_disconnect_notice",
+ "tags": [
+ {
+ "label": "掉线通知",
+ "color": "#ea5252"
+ },
+ {
+ "label": "邮件",
+ "color": "#52eaa4"
+ },
+ {
+ "label": "通知",
+ "color": "#cbea52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-07-29T03:19:54.426011Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_BotMailNotice",
+ "project_link": "nonebot-plugin-BotMailNotice",
+ "name": "Bot上下线邮件通知",
+ "desc": "Bot上下线发送邮件通知的插件",
+ "author": "ZM25XC",
+ "homepage": "https://github.com/ZM25XC/BotMailNotice",
+ "tags": [
+ {
+ "label": "Mail",
+ "color": "#52e5ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.3",
+ "time": "2023-07-24T23:30:29.395759Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_theworld",
+ "project_link": "nonebot-plugin-theworld",
+ "name": "The World",
+ "desc": "「ザ・ワールド」ッ! 時よ止まれ!",
+ "author": "A-kirami",
+ "homepage": "https://github.com/A-kirami/nonebot-plugin-theworld",
+ "tags": [
+ {
+ "label": "JOJO",
+ "color": "#75147c"
+ },
+ {
+ "label": "DIO",
+ "color": "#f9d849"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2023-07-25T05:07:38.147930Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nonememe",
+ "project_link": "nonebot-plugin-nonememe",
+ "name": "NoneMeme",
+ "desc": "NoneBot 群大佬的日常",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-nonememe",
+ "tags": [
+ {
+ "label": "NoneMeme",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.3.0",
+ "time": "2024-03-10T08:41:05.982627Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_aujob",
+ "project_link": "nonebot-plugin-aujob",
+ "name": "Among US中的TOH模组职业介绍",
+ "desc": "查询TOH模组里职业的玩法描述",
+ "author": "qwqZYLqwq",
+ "homepage": "https://github.com/qwqZYLqwq/nonebot-plugin-aujob",
+ "tags": [
+ {
+ "label": "among us",
+ "color": "#48d5bf"
+ },
+ {
+ "label": "TOH",
+ "color": "#05c4f2"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.1.514",
+ "time": "2023-07-30T04:28:32.184908Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bind",
+ "project_link": "nonebot-plugin-bind",
+ "name": "跨平台账户绑定",
+ "desc": "nonebot多适配器通用的跨平台账户绑定插件",
+ "author": "canxin121",
+ "homepage": "https://github.com/canxin121/nonebot_plugin_bind",
+ "tags": [
+ {
+ "label": "跨平台",
+ "color": "#5289ea"
+ },
+ {
+ "label": "账户绑定",
+ "color": "#6eb428"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.telegram",
+ "nonebot.adapters.villa"
+ ],
+ "valid": false,
+ "version": "0.2.2",
+ "time": "2023-10-12T14:21:47.024420Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_savepic",
+ "project_link": "nonebot-plugin-savepic",
+ "name": "Savepic",
+ "desc": "表情包保存",
+ "author": "Yan-Zero",
+ "homepage": "https://github.com/Yan-Zero/nonebot-plugin-savepic",
+ "tags": [
+ {
+ "label": "表情包",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "time": "2023-08-03T04:30:17.668544Z",
+ "version": "0.2.0",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_lostark_wandering_trader",
+ "project_link": "nonebot-plugin-lostark-wandering-trader",
+ "name": "命运方舟流浪商人卡牌刷新提示",
+ "desc": "国服命运方舟流浪商人稀有史诗传说卡牌刷新提示",
+ "author": "EmiyaGm",
+ "homepage": "https://github.com/EmiyaGm/nonebot-plugin-lostark-wandering-trader",
+ "tags": [
+ {
+ "label": "命运方舟",
+ "color": "#5289ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.2",
+ "time": "2023-09-13T07:03:06.585759Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_csornament",
+ "project_link": "nonebot-plugin-csornament",
+ "name": "CSGO饰品查询机器人",
+ "desc": "一款模拟查找饰品价格的机器人",
+ "author": "Sydrr0",
+ "homepage": "https://github.com/Sydrr0/nonebot-plugin-csornament",
+ "tags": [
+ {
+ "label": "CS:GO",
+ "color": "#047b97"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-08-20T09:19:00.439404Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_kanonbot",
+ "project_link": "nonebot-plugin-kanonbot",
+ "name": "KanonBot",
+ "desc": "KanonBot for Nonebot2",
+ "author": "SuperGuGuGu",
+ "homepage": "https://github.com/SuperGuGuGu/nonebot_plugin_kanonbot",
+ "tags": [
+ {
+ "label": "KanonBot",
+ "color": "#44ddff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.qq"
+ ],
+ "valid": true,
+ "version": "0.3.2",
+ "time": "2024-01-10T12:59:58.241358Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcversion",
+ "project_link": "nonebot-plugin-mcversion",
+ "name": "MC版本更新检测",
+ "desc": "一个用于检测MC最新版本的插件",
+ "author": "CN171-1",
+ "homepage": "https://github.com/CN171-1/nonebot_plugin_mcversion",
+ "tags": [
+ {
+ "label": "版本",
+ "color": "#ea5252"
+ },
+ {
+ "label": "MC",
+ "color": "#52e7ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.0",
+ "time": "2023-09-03T09:16:33.881303Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_muteme",
+ "project_link": "nonebot-plugin-muteme",
+ "name": "Muteme(我禁我自己)",
+ "desc": "高仿@能干辉的muteme,我禁我自己",
+ "author": "XTxiaoting14332",
+ "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-muteme",
+ "tags": [
+ {
+ "label": "禁言",
+ "color": "#e45b8d"
+ },
+ {
+ "label": "muteme",
+ "color": "#5bc2e4"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "time": "2023-08-21T02:01:58.764932Z",
+ "version": "0.0.5",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_jx3",
+ "project_link": "nonebot-plugin-jx3",
+ "name": "剑网三查询和推送",
+ "desc": "是一个使用 NoneBot 框架编写的插件,提供多种剑网三功能如日常查询,预测,金价查询,鲜花,公告,沙盘,jjc,黑市,骚话,奇遇,招募以及多种消息推送功能。",
+ "author": "fuyang0811",
+ "homepage": "https://github.com/fuyang0811/nonebot-plugin-jx3",
+ "tags": [
+ {
+ "label": "剑网三",
+ "color": "#ea5252"
+ },
+ {
+ "label": "jx3",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.7",
+ "time": "2023-09-04T17:21:11.860171Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_xinghuo_api",
+ "project_link": "nonebot-plugin-xinghuo-api",
+ "name": "科大讯飞星火大模型聊天",
+ "desc": "Nonebot框架下的科大讯飞星火大模型聊天插件,已适配V2.0版API",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot-plugin-xinghuo-api",
+ "tags": [
+ {
+ "label": "AI",
+ "color": "#ea5252"
+ },
+ {
+ "label": "Chat",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "2.2.0",
+ "time": "2024-01-31T04:22:26.549372Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "dicergirl",
+ "project_link": "dicergirl",
+ "name": "DicerGirl",
+ "desc": "新一代跨平台开源 TRPG 骰娘框架",
+ "author": "fu050409",
+ "homepage": "https://gitee.com/unvisitor/dicer",
+ "tags": [
+ {
+ "label": "跑团",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "3.5.1",
+ "time": "2023-11-22T03:42:16.918080Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_uvdiviner",
+ "project_link": "nonebot-plugin-uvdiviner",
+ "name": "周易蓍草占卜",
+ "desc": "基于古蓍草占卜的算法, 简单的使用`.divine`指令.",
+ "author": "fu050409",
+ "homepage": "https://gitee.com/unvisitor/nonebot-plugin-uvdiviner",
+ "tags": [
+ {
+ "label": "占卜",
+ "color": "#440e0e"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "2.2.11",
+ "time": "2023-10-12T06:29:12.854171Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_push",
+ "project_link": "nonebot-plugin-push",
+ "name": "消息推送插件",
+ "desc": "通过邮件、Feishu Webhook 等方式推送消息",
+ "author": "mobyw",
+ "homepage": "https://github.com/mobyw/nonebot-plugin-push",
+ "tags": [
+ {
+ "label": "邮件",
+ "color": "#91c0bd"
+ },
+ {
+ "label": "飞书",
+ "color": "#7aaccc"
+ },
+ {
+ "label": "推送",
+ "color": "#9e97c4"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-08-15T07:00:53.896995Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_sudo",
+ "project_link": "nonebot-plugin-sudo",
+ "name": "SUDO",
+ "desc": "以指定用户身份执行命令",
+ "author": "This-is-XiaoDeng",
+ "homepage": "https://github.com/This-is-XiaoDeng/nonebot-plugin-sudo",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.6",
+ "time": "2023-09-08T14:15:08.370605Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_arxivRSS",
+ "project_link": "nonebot-plugin-arxivRSS",
+ "name": "arxiv订阅",
+ "desc": "订阅arxiv指定领域每天更新的论文",
+ "author": "LuckySJTU",
+ "homepage": "https://github.com/LuckySJTU/nonebot-plugin-arxivRSS/",
+ "tags": [
+ {
+ "label": "arxiv",
+ "color": "#f30f0f"
+ },
+ {
+ "label": "RSS",
+ "color": "#70a7d8"
+ },
+ {
+ "label": "论文",
+ "color": "#f541dc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-10-13T08:32:19.030042Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_anime_trace",
+ "project_link": "nonebot-plugin-anime-trace",
+ "name": "识别动漫gal角色",
+ "desc": "通过ai.animedb.cn的api识别动漫、galgame角色",
+ "author": "tomorinao-www",
+ "homepage": "https://github.com/tomorinao-www/nonebot-plugin-anime-trace",
+ "tags": [
+ {
+ "label": "AI",
+ "color": "#f541dc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2024-03-16T11:04:32.039016Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_send_message",
+ "project_link": "nonebot-plugin-send-message",
+ "name": "双向聊天插件",
+ "desc": "一个支持双向聊天的传话插件,可用于临时聊天而不想加好友场景",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot_plugin_send_message",
+ "tags": [
+ {
+ "label": "传话",
+ "color": "#52ea75"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "3.2",
+ "time": "2023-08-22T12:44:22.314961Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_requests",
+ "project_link": "nonebot-plugin-requests",
+ "name": "Nonebot Requests",
+ "desc": "封装 ForwardDriver 实现 HttpClient 功能",
+ "author": "Ailitonia",
+ "homepage": "https://github.com/Ailitonia/nonebot-plugin-requests",
+ "tags": [
+ {
+ "label": "requests",
+ "color": "#80bcc2"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-09-25T17:48:14.809234Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_shutup",
+ "project_link": "nonebot-plugin-shutup",
+ "name": "雪豹闭嘴",
+ "desc": "基于 NoneBot2 的 插件,用于机器人当前会话闭嘴,支持全适配器",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_pluigin_shutup",
+ "tags": [
+ {
+ "label": "阻断",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.3",
+ "time": "2023-08-28T06:30:44.585765Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_simple_httpcat",
+ "project_link": "nonebot-plugin-simple-httpcat",
+ "name": "httpcat-状态猫😺",
+ "desc": "简单粗暴的httpcat插件,参考了zjkwdy大佬的weather_lite插件",
+ "author": "XTxiaoting14332",
+ "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-simple-httpcat",
+ "tags": [
+ {
+ "label": "httpcat",
+ "color": "#5dbfc8"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.1",
+ "time": "2023-08-27T04:32:21.171303Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_qrcode2",
+ "project_link": "nonebot-plugin-qrcode2",
+ "name": "二维码",
+ "desc": "通过pyzbar解析二维码",
+ "author": "tomorinao-www",
+ "homepage": "https://github.com/tomorinao-www/nonebot-plugin-qrcode2",
+ "tags": [
+ {
+ "label": "qrcode",
+ "color": "#f541dc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.2",
+ "time": "2024-03-16T10:40:56.486675Z",
+ "skip_test": true
+ },
+ {
+ "module_name": "nonebot_plugin_fakemsg",
+ "project_link": "nonebot-plugin-fakemsg",
+ "name": "消息伪造",
+ "desc": "伪造消息",
+ "author": "Cvandia",
+ "homepage": "https://github.com/Cvandia/nonebot-plugin-fakemsg",
+ "tags": [
+ {
+ "label": "合并转发",
+ "color": "#1ae32c"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2024-03-13T05:05:31.741432Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_alchelper",
+ "project_link": "nonebot-plugin-alchelper",
+ "name": "Alconna 帮助工具",
+ "desc": "基于 nonebot-plugin-alconna,给出所有命令帮助以及统计",
+ "author": "RF-Tar-Railt",
+ "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-alchelper",
+ "tags": [
+ {
+ "label": "Alconna",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.5.0",
+ "time": "2024-03-17T08:36:12.645103Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_souti",
+ "project_link": "nonebot-plugin-souti",
+ "name": "nonebot-plugin-souti",
+ "desc": "使用百度不挂科题库, 可以实现文字搜题功能",
+ "author": "xiaoWangSec",
+ "homepage": "https://github.com/xiaoWangSec/nonebot-plugin-souti",
+ "tags": [
+ {
+ "label": "搜题",
+ "color": "#49e3d5"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.0.1",
+ "time": "2023-09-01T10:26:54.019224Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_helper_plus",
+ "project_link": "nonebot-plugin-helper-plus",
+ "name": "helper_plus",
+ "desc": "带有指令调用控制的高级helper",
+ "author": "fR0Z863xF",
+ "homepage": "https://github.com/fR0Z863xF/nonebot-plugin-helper-plus",
+ "tags": [
+ {
+ "label": "帮助",
+ "color": "#eae152"
+ },
+ {
+ "label": "命令控制",
+ "color": "#52ea5c"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-09-02T10:51:28.827248Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wearskirt",
+ "project_link": "nonebot-plugin-wearskirt",
+ "name": "女装 !",
+ "desc": "Nonebot 赛博女装插件",
+ "author": "Lfhsheng",
+ "homepage": "https://github.com/Lfhsheng/nonebot-plugin-wearskirt",
+ "tags": [
+ {
+ "label": "女装",
+ "color": "#ffc0cb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.1.5",
+ "time": "2023-09-14T11:46:33.966622Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_skland_arksign",
+ "project_link": "nonebot-plugin-skland-arksign",
+ "name": "森空岛明日方舟签到器",
+ "desc": "私聊机器人以获得自动明日方舟森空岛签到服务",
+ "author": "GuGuMur",
+ "homepage": "https://github.com/GuGuMur/nonebot-plugin-skland-arksign",
+ "tags": [
+ {
+ "label": "森空岛",
+ "color": "#c8eb21"
+ },
+ {
+ "label": "明日方舟",
+ "color": "#111111"
+ },
+ {
+ "label": "签到",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.7.0",
+ "time": "2024-03-10T01:03:45.969491Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_group_whitelist",
+ "project_link": "nonebot-plugin-group-whitelist",
+ "name": "nonebot_plugin_group_whitelist",
+ "desc": "简易群聊白名单",
+ "author": "Rikka-desu",
+ "homepage": "https://github.com/Rikka-desu/nonebot_plugin_group_whitelist",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.9.2",
+ "time": "2023-09-03T14:45:25.318037Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ernie",
+ "project_link": "nonebot-plugin-ernie",
+ "name": "文心一言",
+ "desc": "Nonebot框架下的文心一言聊天插件",
+ "author": "Noctulus",
+ "homepage": "https://github.com/Noctulus/nonebot-plugin-ernie",
+ "tags": [
+ {
+ "label": "文心一言",
+ "color": "#2e317c"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.4",
+ "time": "2023-09-06T15:34:07.940810Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "TeenStudy",
+ "project_link": "teenstudy",
+ "name": "青年大学习提交",
+ "desc": "一个可以自动提交多地区青年大学习的插件",
+ "author": "TeenStudyFlow",
+ "homepage": "https://github.com/YouthLearning/TeenStudy",
+ "tags": [
+ {
+ "label": "青年大学习",
+ "color": "#7aea52"
+ },
+ {
+ "label": "Web UI",
+ "color": "#52eaea"
+ },
+ {
+ "label": "多地区",
+ "color": "#dfea52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.6",
+ "time": "2023-12-03T07:01:14.234788Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_video_api",
+ "project_link": "nonebot-plugin-video-api",
+ "name": "nonebot-plugin-video-api",
+ "desc": "一款可以自由增删视频指令和api的插件",
+ "author": "Q1351998764",
+ "homepage": "https://github.com/Q1351998764/nonebot-plugin-video-api",
+ "tags": [
+ {
+ "label": "视频api",
+ "color": "#14d8de"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.4",
+ "time": "2023-09-20T12:28:56.131803Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ottohzys",
+ "project_link": "nonebot-plugin-ottohzys",
+ "name": "大电老师活字印刷",
+ "desc": "大家好啊,今天来点大家想看的东西",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-ottohzys",
+ "tags": [
+ {
+ "label": "otto",
+ "color": "#00a6ed"
+ },
+ {
+ "label": "电棍",
+ "color": "#00a6ed"
+ },
+ {
+ "label": "活字印刷",
+ "color": "#00a6ed"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.2.0",
+ "time": "2024-03-10T07:21:27.575594Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_ability",
+ "project_link": "nonebot-plugin-ability",
+ "name": "聚能环",
+ "desc": "NoneBot 外置电池",
+ "author": "KomoriDev",
+ "homepage": "https://github.com/KomoriDev/nonebot-plugin-ability",
+ "tags": [
+ {
+ "label": "🔋",
+ "color": "#8bff00"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-10-02T06:03:55.280585Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_agent",
+ "project_link": "nonebot-plugin-agent",
+ "name": "Nonebot Agent",
+ "desc": "适配你的插件,让 LLM 来为你处理用户调用",
+ "author": "Dobiichi-Origami",
+ "homepage": "https://github.com/Dobiichi-Origami/nonebot-plugin-agent#nonebot-plugin-agent",
+ "tags": [
+ {
+ "label": "agent",
+ "color": "#99ccff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.0.1",
+ "time": "2023-10-03T10:24:53.288475Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_blockwords",
+ "project_link": "nonebot-plugin-blockwords",
+ "name": "屏蔽词插件",
+ "desc": "接收的消息或机器人发送的消息进行屏蔽词检查",
+ "author": "MelodyKnit",
+ "homepage": "https://github.com/MelodyKnit/nonebot-plugin-blockwords",
+ "tags": [
+ {
+ "label": "word",
+ "color": "#99ccff"
+ },
+ {
+ "label": "屏蔽词",
+ "color": "#ffcc99"
+ },
+ {
+ "label": "blockwords",
+ "color": "#ffcc99"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2023-11-17T12:30:39.467239Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_matchreminder",
+ "project_link": "nonebot-plugin-matchreminder",
+ "name": "算法比赛查询和今日比赛自动提醒",
+ "desc": "可以查询牛客、atcoder、codeforces平台比赛信息并在今日比赛前进行提醒(请在.env.prod添加或修改超级用户,以免出现意料之外的错误)",
+ "author": "zhuhiki",
+ "homepage": "https://github.com/zhuhiki/nonebot_plugin_matchreminder",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.4",
+ "time": "2023-10-27T03:22:47.419866Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_eop_ai",
+ "project_link": "nonebot-plugin-eop-ai",
+ "name": "talk with eop ai",
+ "desc": "Nonebot2 一款调用eop api的AI聊天插件",
+ "author": "nikissXI",
+ "homepage": "https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_eop_ai",
+ "tags": [
+ {
+ "label": "POE",
+ "color": "#bf40bf"
+ },
+ {
+ "label": "GPT",
+ "color": "#aaff00"
+ },
+ {
+ "label": "AI",
+ "color": "#fa5f55"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2023-11-21T11:31:18.190458Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_playercheck",
+ "project_link": "nonebot-plugin-playercheck",
+ "name": "nonebot-plugin-playercheck",
+ "desc": "一个查询群友音游成分的插件",
+ "author": "Ohdmire",
+ "homepage": "https://github.com/ohdmire/nonebot-plugin-playercheck",
+ "tags": [
+ {
+ "label": "音游",
+ "color": "#ec623c"
+ },
+ {
+ "label": "成分",
+ "color": "#ef5ec4"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.5.9",
+ "time": "2023-10-09T12:40:24.966289Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_op_finder",
+ "project_link": "nonebot-plugin-op-finder",
+ "name": "op-finder",
+ "desc": "显示当前正在玩原神的人",
+ "author": "ninthseason",
+ "homepage": "https://github.com/ninthseason/nonebot-plugin-op-finder",
+ "tags": [
+ {
+ "label": "原神",
+ "color": "#00a0ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila"
+ ],
+ "valid": true,
+ "version": "1.0.0",
+ "time": "2023-10-06T16:40:22.375740Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_morep_finder",
+ "project_link": "nonebot-plugin-morep-finder",
+ "name": "morep-finder",
+ "desc": "显示当前正在玩特定游戏的人",
+ "author": "ninthseason",
+ "homepage": "https://github.com/ninthseason/nonebot-plugin-morep-finder",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila"
+ ],
+ "valid": true,
+ "version": "1.0.0",
+ "time": "2023-10-08T15:37:06.959012Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot-plugin-yesman",
+ "project_link": "nonebot-plugin-yesman",
+ "name": "肯定机",
+ "desc": "你的发言,值得被肯定",
+ "author": "EuDs63",
+ "homepage": "https://github.com/EuDs63/nonebot-plugin-yesman",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.4.0",
+ "time": "2023-11-25T13:58:22.088706Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_fgoavatarguess",
+ "project_link": "nonebot-plugin-fgoavatarguess",
+ "name": "FGO猜从者",
+ "desc": "FGO猜从者插件,基于原HoshinoBot猜从者模块修改,感谢原作者。",
+ "author": "influ3nza",
+ "homepage": "https://github.com/influ3nza/nonebot-plugin-fgoavatarguess",
+ "tags": [
+ {
+ "label": "FGO",
+ "color": "#66cccc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2023-10-12T06:44:39.253781Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_vrchat",
+ "project_link": "nonebot-plugin-vrchat",
+ "name": "VRChat查询",
+ "desc": "使用第三方 API SDK 实现 VRChat 相关操作,例如查询好友状态",
+ "author": "Agnes4m",
+ "homepage": "https://github.com/Agnes4m/nonebot_plugin_vrchat",
+ "tags": [
+ {
+ "label": "VRChat",
+ "color": "#7aea53"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-12-19T01:13:10.989041Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_batitle",
+ "project_link": "nonebot-plugin-batitle",
+ "name": "BlueArchive Title Generator",
+ "desc": "碧蓝档案式标题生成器",
+ "author": "MerCuJerry",
+ "homepage": "https://github.com/MerCuJerry/nonebot-plugin-batitle",
+ "tags": [
+ {
+ "label": "碧蓝档案",
+ "color": "#00d7fb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2024-02-07T09:50:19.398829Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_maimaidx",
+ "project_link": "nonebot-plugin-maimaidx",
+ "name": "nonebot-plugin-maimaidx",
+ "desc": "移植自 mai-bot 开源项目,基于 nonebot2 的街机音游 舞萌DX 的查询插件",
+ "author": "Yuri-YuzuChaN",
+ "homepage": "https://github.com/Yuri-YuzuChaN/nonebot-plugin-maimaidx",
+ "tags": [
+ {
+ "label": "maimai",
+ "color": "#cea6ff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.0.14",
+ "time": "2024-03-15T08:44:26.693285Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_getbapics",
+ "project_link": "nonebot-plugin-getbapics",
+ "name": "nonebot-plugin-getbapics",
+ "desc": "Get BA Pictures",
+ "author": "hanasa2023",
+ "homepage": "https://github.com/hanasa2023/nonebot-plugin-getbapics/blob/master/README.md",
+ "tags": [
+ {
+ "label": "碧蓝档案",
+ "color": "#00defe"
+ },
+ {
+ "label": "BA",
+ "color": "#00defe"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.red"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-10-15T13:52:55.930889Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_make_choice",
+ "project_link": "nonebot-plugin-make-choice",
+ "name": "选择困难症",
+ "desc": "选择困难症?Bot帮你选!",
+ "author": "SherkeyXD",
+ "homepage": "https://github.com/SherkeyXD/nonebot-plugin-make-choice",
+ "tags": [
+ {
+ "label": "choice",
+ "color": "#77c5ff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.4",
+ "time": "2023-10-21T07:31:08.895871Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_scheduled_broadcast",
+ "project_link": "nonebot-plugin-scheduled-broadcast",
+ "name": "定时广播插件",
+ "desc": "一款可配置的, 不依赖具体适配器的, 基于事件的定时广播插件.",
+ "author": "T0nyX1ang",
+ "homepage": "https://github.com/T0nyX1ang/nonebot-plugin-scheduled-broadcast",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2023-11-10T15:14:18.797261Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_any",
+ "project_link": "nonebot-plugin-any",
+ "name": "Nonebot2 Any 多平台服务",
+ "desc": "Nonebot2 多平台统一事件与消息统一构造发送",
+ "author": "MelodyYuuka",
+ "homepage": "https://github.com/MelodyYuuka/nonebot-plugin-any",
+ "tags": [
+ {
+ "label": "跨平台",
+ "color": "#36d399"
+ },
+ {
+ "label": "统一",
+ "color": "#fa5f55"
+ },
+ {
+ "label": "工具库",
+ "color": "#52eadd"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2023-11-05T07:23:35.833914Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bertvits2",
+ "project_link": "nonebot-plugin-bertvits2",
+ "name": "nonebot-plugin-bertvits2",
+ "desc": "bertvits2语音合成插件",
+ "author": "jiangyuxiaoxiao",
+ "homepage": "https://github.com/jiangyuxiaoxiao/nonebot-plugin-bertvits2",
+ "tags": [
+ {
+ "label": "语音合成",
+ "color": "#9bf6ff"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2023-11-07T14:33:08.673555Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wake_on_lan",
+ "project_link": "nonebot-plugin-wake-on-lan",
+ "name": "局域网唤醒",
+ "desc": "通过发送魔术封包唤醒Bot所在局域网内的设备",
+ "author": "tiehu",
+ "homepage": "https://github.com/tiehu/nonebot-plugin-wol",
+ "tags": [
+ {
+ "label": "局域网唤醒",
+ "color": "#1e90ff"
+ },
+ {
+ "label": "WOL",
+ "color": "#4682b4"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2024-03-12T18:08:54.274520Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bingimagecreator",
+ "project_link": "nonebot-plugin-bingimagecreator",
+ "name": "DALL-E 3绘图",
+ "desc": "调用NewBing的DALL-E 3进行绘图",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot_plugin_BingImageCreator.git",
+ "tags": [
+ {
+ "label": "AI",
+ "color": "#ea5252"
+ },
+ {
+ "label": "绘图",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.1.5",
+ "time": "2024-02-21T03:19:20.848438Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_user",
+ "project_link": "nonebot-plugin-user",
+ "name": "用户",
+ "desc": "管理和绑定不同平台的用户",
+ "author": "he0119",
+ "homepage": "https://github.com/he0119/nonebot-plugin-user",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2024-02-24T10:06:57.539672Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_shorturl",
+ "project_link": "nonebot-plugin-shorturl",
+ "name": "短链接服务支持",
+ "desc": "为其他插件提供短链接转换服务",
+ "author": "StarHeartHunt",
+ "homepage": "https://github.com/StarHeartHunt/nonebot-plugin-shorturl",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.4.0",
+ "time": "2024-02-29T12:09:58.388205Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_filehost",
+ "project_link": "nonebot-plugin-filehost",
+ "name": "文件托管支持",
+ "desc": "提供跨机文件传输支持,通过 HTTP 服务托管文件",
+ "author": "mnixry",
+ "homepage": "https://github.com/nonebot/plugin-filehost",
+ "tags": [],
+ "is_official": true,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "1.1.1",
+ "time": "2024-03-01T02:58:01.740199Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_smms",
+ "project_link": "nonebot-plugin-smms",
+ "name": "sm.ms图床",
+ "desc": "sm.ms图床上传与管理",
+ "author": "mobyw",
+ "homepage": "https://github.com/mobyw/nonebot-plugin-smms",
+ "tags": [],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.0",
+ "time": "2023-11-23T15:24:16.507383Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nsfw",
+ "project_link": "nonebot-plugin-nsfw",
+ "name": "群聊 NSFW 图片检测",
+ "desc": "群聊 NSFW 图片检测插件,带有撤回、警告、禁言等功能。使用 Safety Checker / NSFW Model",
+ "author": "iyume",
+ "homepage": "https://github.com/iyume/nonebot-plugin-nsfw",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.10",
+ "time": "2023-12-18T17:59:20.124712Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_batarot",
+ "project_link": "nonebot-plugin-batarot",
+ "name": "碧蓝档案塔罗牌",
+ "desc": "碧蓝档案塔罗牌,运势预测与魔法占卜🔮",
+ "author": "Perseus037",
+ "homepage": "https://github.com/Perseus037/nonebot_plugin_batarot",
+ "tags": [
+ {
+ "label": "碧蓝档案",
+ "color": "#15a0df"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.1.post1",
+ "time": "2023-12-20T02:30:30.110021Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_cnrail",
+ "project_link": "nonebot-plugin-cnrail",
+ "name": "CNRail",
+ "desc": "查询 12306 列车时刻表",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-cnrail",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2024-03-10T10:16:46.885006Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_longtu",
+ "project_link": "nonebot-plugin-longtu",
+ "name": "随机龙图",
+ "desc": "2024年是龙年...我都准备好了",
+ "author": "Perseus037",
+ "homepage": "https://github.com/Perseus037/nonebot_plugin_longtu",
+ "tags": [
+ {
+ "label": "龙图",
+ "color": "#e1122d"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.1.post1",
+ "time": "2024-01-12T00:49:14.405162Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_riffusion",
+ "project_link": "nonebot-plugin-riffusion",
+ "name": "Riffusion",
+ "desc": "你给歌词,AI 作曲",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-riffusion",
+ "tags": [
+ {
+ "label": "Riffusion",
+ "color": "#4b39cb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2024-03-10T06:43:23.017592Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_antimonkey",
+ "project_link": "nonebot-plugin-antimonkey",
+ "name": "AntiMonkey",
+ "desc": "自动检测和撤回包含恶心吗喽的图片",
+ "author": "phquathi",
+ "homepage": "https://github.com/phquathi/nonebot_plugin_antimonkey",
+ "tags": [
+ {
+ "label": "猴子",
+ "color": "#ea5252"
+ },
+ {
+ "label": "群管",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.2",
+ "time": "2023-12-27T17:39:54.859337Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_waiter",
+ "project_link": "nonebot-plugin-waiter",
+ "name": "Waiter 插件",
+ "desc": "提供一个 got-and-reject 会话控制的替代方案,可自由控制超时时间",
+ "author": "RF-Tar-Railt",
+ "homepage": "https://github.com/RF-Tar-Railt/nonebot-plugin-waiter",
+ "tags": [
+ {
+ "label": "waiter",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "library",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.0",
+ "time": "2024-01-28T12:16:34.304220Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_imagemaster",
+ "project_link": "nonebot-plugin-imagemaster",
+ "name": "nonebot-plugin-imagemaster",
+ "desc": "提供多种图像处理功能的插件",
+ "author": "phquathi",
+ "homepage": "https://github.com/phquathi/nonebot_plugin_imagemaster",
+ "tags": [
+ {
+ "label": "修图",
+ "color": "#52d4ea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.0.6",
+ "time": "2024-01-02T16:25:06.577543Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nikke",
+ "project_link": "nonebot-plugin-nikke",
+ "name": "nonebot_plugin_nikke",
+ "desc": "胜利女神:妮姬多功能插件",
+ "author": "Perseus037",
+ "homepage": "https://github.com/Perseus037/nonebot_plugin_nikke",
+ "tags": [
+ {
+ "label": "nikke",
+ "color": "#e111b7"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.0.post4",
+ "time": "2023-12-28T11:31:15.735048Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mcpic",
+ "project_link": "nonebot-plugin-mcpic",
+ "name": "随机MC图",
+ "desc": "随机从推特获取并发送MC建筑图片",
+ "author": "wlm3201",
+ "homepage": "https://github.com/wlm3201/nonebot-plugin-mcpic",
+ "tags": [
+ {
+ "label": "Minecraft",
+ "color": "#3cb371"
+ },
+ {
+ "label": "MC",
+ "color": "#3cb371"
+ },
+ {
+ "label": "图片",
+ "color": "#3cb371"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2024-01-07T08:20:29.206420Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_pingti",
+ "project_link": "nonebot-plugin-pingti",
+ "name": "最佳平替",
+ "desc": "用更低价的搜索词购物",
+ "author": "lgc2333",
+ "homepage": "https://github.com/lgc-NB2Dev/nonebot-plugin-pingti",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.1.4",
+ "time": "2024-02-15T10:12:37.601223Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_wx4",
+ "project_link": "nonebot-plugin-wx4",
+ "name": "文心一言4适配",
+ "desc": "文心一言4适配的连续对话",
+ "author": "Pasumao",
+ "homepage": "https://github.com/Pasumao/nonebot-plugin-wx4",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.3.1",
+ "time": "2024-01-09T08:34:55.393316Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_mypower",
+ "project_link": "nonebot-plugin-mypower",
+ "name": "nonebot-plugin-mypower",
+ "desc": "随机生成超能力",
+ "author": "tianyisama",
+ "homepage": "https://github.com/tianyisama/nonebot_plugin_mypower",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.5",
+ "time": "2024-01-15T16:29:40.149453Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bard",
+ "project_link": "nonebot-plugin-bard",
+ "name": "谷歌Bard聊天",
+ "desc": "Nonebot框架下的谷歌Bard聊天插件,支持联网搜索和图片识别",
+ "author": "Alpaca4610",
+ "homepage": "https://github.com/Alpaca4610/nonebot-plugin-bard",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.3.3",
+ "time": "2024-03-19T02:32:41.571851Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nekoimage",
+ "project_link": "nonebot-plugin-nekoimage",
+ "name": "nonebot-plugin-nekoimage",
+ "desc": "A nonebot plugin for integrating with [NekoImageGallery](https://github.com/hv0905/NekoImageGallery).",
+ "author": "pk5ls20",
+ "homepage": "https://github.com/pk5ls20/nonebot-plugin-nekoimage",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qq"
+ ],
+ "valid": true,
+ "version": "0.3.3",
+ "time": "2024-01-15T01:44:34.682356Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_finallines",
+ "project_link": "nonebot-plugin-finallines",
+ "name": "最终台词",
+ "desc": "来一句劲道的最终台词吧,支持多平台适配",
+ "author": "Perseus037",
+ "homepage": "https://github.com/Perseus037/nonebot_plugin_finallines",
+ "tags": [
+ {
+ "label": "最终台词",
+ "color": "#052199"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.1.post2",
+ "time": "2024-01-14T10:05:17.058659Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gemini",
+ "project_link": "nonebot-plugin-gemini",
+ "name": "nonebot-plugin-gemini",
+ "desc": "Gemini AI 对话",
+ "author": "zhaomaoniu",
+ "homepage": "https://github.com/zhaomaoniu/nonebot-plugin-gemini",
+ "tags": [
+ {
+ "label": "Gemini",
+ "color": "#3e8ffb"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.3.0",
+ "time": "2024-02-11T08:21:46.952771Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "haruka_bot_red",
+ "project_link": "haruka_bot_red",
+ "name": "haruka_bot_red",
+ "desc": "将B站UP主的动态和直播信息推送至QQ,适配red协议",
+ "author": "boxie123",
+ "homepage": "https://github.com/boxie123/HarukaBot-Red",
+ "tags": [
+ {
+ "label": "bilibili",
+ "color": "#c83f3f"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.red"
+ ],
+ "valid": true,
+ "version": "0.1.7",
+ "time": "2024-01-21T11:14:26.959398Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_enatfrp",
+ "project_link": "nonebot-plugin-enatfrp",
+ "name": "SakuraFrp",
+ "desc": "SakuraFrp管理插件,natfrp.com。",
+ "author": "eya46",
+ "homepage": "https://github.com/eya46/nonebot_plugin_enatfrp",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.2.0",
+ "time": "2024-03-09T06:14:37.754340Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_nezha",
+ "project_link": "nonebot-plugin-nezha",
+ "name": "哪吒监控插件",
+ "desc": "哪吒监控插件,使用哪吒监控API。",
+ "author": "eya46",
+ "homepage": "https://github.com/eya46/nonebot_plugin_nezha",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.4.2",
+ "time": "2024-03-10T07:31:54.957813Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_randpic",
+ "project_link": "nonebot-plugin-randpic",
+ "name": "随机发送图片",
+ "desc": "发送自定义指令后bot会随机发出一张你所存储的图片",
+ "author": "HuParry",
+ "homepage": "https://github.com/HuParry/nonebot-plugin-randpic",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.3",
+ "time": "2024-01-28T03:00:27.181559Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_BAdrawcard",
+ "project_link": "nonebot-plugin-badrawcard",
+ "name": "BA模拟抽卡",
+ "desc": "模拟实现了碧蓝档案游戏的抽卡功能, 自动化了更新卡池、FES提高卡池概率",
+ "author": "lengmianzz",
+ "homepage": "https://github.com/lengmianzz/nonebot-plugin-BAdrawcard",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.2.3",
+ "time": "2024-01-31T03:56:01.881602Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_gpt",
+ "project_link": "nonebot-plugin-gpt",
+ "name": "ChatGPT 聊天",
+ "desc": "通过浏览器使用 ChatGPT,兼容 onebot v11 与 adapter-qq 适配器",
+ "author": "nek0us",
+ "homepage": "https://github.com/nek0us/nonebot-plugin-gpt",
+ "tags": [
+ {
+ "label": "ChatGPT",
+ "color": "#50ec9d"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.qq"
+ ],
+ "valid": false,
+ "version": "0.0.10",
+ "time": "2024-03-20T02:02:55.902116Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_easy_blacklist",
+ "project_link": "nonebot-plugin-easy-blacklist",
+ "name": "黑名单插件",
+ "desc": "一个轻量级的黑名单插件,支持api接入全平台,内存占用优化中",
+ "author": "bingqiu456",
+ "homepage": "https://github.com/bingqiu456/nonebot-plugin-easy-blacklist",
+ "tags": [],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "1.5",
+ "time": "2024-02-15T06:25:00.316113Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_reminder",
+ "project_link": "nonebot-plugin-reminder",
+ "name": "定时提醒",
+ "desc": "主要用来提醒大家别忘记什么事情,可以看成定时提醒插件",
+ "author": "velor2012",
+ "homepage": "https://github.com/velor2012/nonebot_plugin_reminder",
+ "tags": [
+ {
+ "label": "scheduler",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.3.1.post1",
+ "time": "2024-02-20T13:09:13.542306Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chikari_yinpa",
+ "project_link": "nonebot-plugin-chikari-yinpa",
+ "name": "Chikari_yinpa",
+ "desc": "一个普通的银趴插件",
+ "author": "mrqx0195",
+ "homepage": "https://github.com/mrqx0195/nonebot_plugin_chikari_yinpa",
+ "tags": [
+ {
+ "label": "yinpa",
+ "color": "#ffff00"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "1.3.4",
+ "time": "2024-03-17T10:07:16.276530Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_splatoon3_nso",
+ "project_link": "nonebot-plugin-splatoon3-nso",
+ "name": "splatoon3游戏nso查询",
+ "desc": "一个基于nonebot2框架的splatoon3游戏nso数据查询插件",
+ "author": "Cypas",
+ "homepage": "https://github.com/Cypas/splatoon3-nso",
+ "tags": [
+ {
+ "label": "splatoon3",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "1.3.0",
+ "time": "2024-02-28T04:35:02.889426Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_bf1marneserverlist",
+ "project_link": "nonebot-plugin-bf1marneserverlist",
+ "name": "战地1-马恩私人服务器服务器查询",
+ "desc": "Onebot 战地1 马恩私人服务器服务器查询插件",
+ "author": "SAFEluren",
+ "homepage": "https://github.com/SAFEluren/nonebot-plugin-bf1marneserverlist",
+ "tags": [
+ {
+ "label": "server",
+ "color": "#ea5252"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.23",
+ "time": "2024-03-09T09:29:36.925598Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_kawaii_status",
+ "project_link": "nonebot-plugin-kawaii-status",
+ "name": "运行状态",
+ "desc": "NoneBot2 服务器状态查看插件",
+ "author": "KomoriDev",
+ "homepage": "https://github.com/KomoriDev/nonebot-plugin-kawaii-status",
+ "tags": [
+ {
+ "label": "简约",
+ "color": "#54adff"
+ },
+ {
+ "label": "可爱",
+ "color": "#ffb3cc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": false,
+ "version": "0.1.3",
+ "time": "2024-03-08T11:20:28.985839Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_vits_tts",
+ "project_link": "nonebot-plugin-vits-tts",
+ "name": "nonebot-plugin-vits-tts",
+ "desc": "基于vits的tts语音合成",
+ "author": "Redmomn",
+ "homepage": "https://github.com/Redmomn/nonebot-plugin-vits-tts",
+ "tags": [
+ {
+ "label": "VITS",
+ "color": "#ea5252"
+ },
+ {
+ "label": "TTS",
+ "color": "#52dbea"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.6",
+ "time": "2024-03-07T05:12:46.624809Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_chatglm_plus",
+ "project_link": "nonebot-plugin-chatglm-plus",
+ "name": "人性化的ChatGLM",
+ "desc": "人性化的ChatGLM插件,支持预设和上下文",
+ "author": "XTxiaoting14332",
+ "homepage": "https://github.com/XTxiaoting14332/nonebot-plugin-chatglm-plus",
+ "tags": [
+ {
+ "label": "ChatGLM",
+ "color": "#73cccc"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.console",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.7",
+ "time": "2024-03-10T05:32:29.222783Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_fishing",
+ "project_link": "nonebot-plugin-fishing",
+ "name": "赛博钓鱼",
+ "desc": "你甚至可以电子钓鱼",
+ "author": "C14H22O",
+ "homepage": "https://github.com/C14H22O/nonebot-plugin-fishing",
+ "tags": [
+ {
+ "label": "钓鱼",
+ "color": "#87cefa"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": null,
+ "valid": true,
+ "version": "0.2.1",
+ "time": "2024-03-09T13:57:57.644380Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_a2s_query",
+ "project_link": "nonebot-plugin-a2s-query",
+ "name": "a2s查询",
+ "desc": "查询value服务器详情",
+ "author": "NanakaNeko",
+ "homepage": "https://github.com/NanakaNeko/nonebot-plugin-a2s-query",
+ "tags": [
+ {
+ "label": "游戏服务器",
+ "color": "#ea5252"
+ },
+ {
+ "label": "value",
+ "color": "#99ea52"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.7",
+ "time": "2024-03-11T03:38:52.710058Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_dice_narrator",
+ "project_link": "nonebot-plugin-dice-narrator",
+ "name": "nonebot-plugin-dice-narrator",
+ "desc": "一只可爱的 AI 掷骰姬,支持各种事件检定",
+ "author": "KroMiose",
+ "homepage": "https://github.com/KroMiose/nonebot_plugin_dice_narrator",
+ "tags": [
+ {
+ "label": "GPT",
+ "color": "#29b752"
+ },
+ {
+ "label": "掷骰姬",
+ "color": "#c84b9d"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": true,
+ "version": "0.1.9",
+ "time": "2024-03-14T02:27:12.730739Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_steam_info",
+ "project_link": "nonebot-plugin-steam-info",
+ "name": "Steam Info",
+ "desc": "播报绑定的 Steam 好友状态",
+ "author": "zhaomaoniu",
+ "homepage": "https://github.com/zhaomaoniu/nonebot-plugin-steam-info",
+ "tags": [
+ {
+ "label": "Steam",
+ "color": "#14305e"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.bilibili",
+ "nonebot.adapters.console",
+ "nonebot.adapters.ding",
+ "nonebot.adapters.discord",
+ "nonebot.adapters.dodo",
+ "nonebot.adapters.feishu",
+ "nonebot.adapters.github",
+ "nonebot.adapters.kaiheila",
+ "nonebot.adapters.minecraft",
+ "nonebot.adapters.mirai2",
+ "nonebot.adapters.ntchat",
+ "nonebot.adapters.onebot.v11",
+ "nonebot.adapters.onebot.v12",
+ "nonebot.adapters.qq",
+ "nonebot.adapters.red",
+ "nonebot.adapters.satori",
+ "nonebot.adapters.telegram"
+ ],
+ "valid": true,
+ "version": "0.1.1",
+ "time": "2024-03-15T13:55:30.722873Z",
+ "skip_test": false
+ },
+ {
+ "module_name": "nonebot_plugin_orangejuice",
+ "project_link": "nonebot-plugin-orangejuice",
+ "name": "100orangejuice",
+ "desc": "100orangejuice",
+ "author": "GLDYM",
+ "homepage": "https://github.com/FDCraft/nonebot-plugin-orangejuice",
+ "tags": [
+ {
+ "label": "百橙",
+ "color": "#ed6f00"
+ },
+ {
+ "label": "100OJ",
+ "color": "#ed6f00"
+ }
+ ],
+ "is_official": false,
+ "type": "application",
+ "supported_adapters": [
+ "nonebot.adapters.onebot.v11"
+ ],
+ "valid": false,
+ "version": "0.5.0",
+ "time": "2024-03-20T01:58:28.461963Z",
+ "skip_test": false
+ }
]
\ No newline at end of file
diff --git a/liteyuki/test/action_test.py b/src/test/action_test.py
similarity index 73%
rename from liteyuki/test/action_test.py
rename to src/test/action_test.py
index 1bb92d6c..74d7c540 100644
--- a/liteyuki/test/action_test.py
+++ b/src/test/action_test.py
@@ -1,29 +1,29 @@
-import nonebot
-from liteyuki.utils import adapter_manager, driver_manager, init
-from liteyuki.utils.base.config import load_from_yaml
-from liteyuki.utils.base.data_manager import StoredConfig, common_db
-from liteyuki.utils.base.ly_api import liteyuki_api
-
-if __name__ == "__mp_main__":
- # Start as multiprocessing
- init()
- store_config: dict = common_db.where_one(StoredConfig(), default=StoredConfig()).config
- static_config = load_from_yaml("config.yml")
- store_config.update(static_config)
- driver_manager.init(config=store_config)
- adapter_manager.init(store_config)
- nonebot.init(**store_config)
- adapter_manager.register()
- try:
- nonebot.load_plugin("liteyuki.liteyuki_main")
- nonebot.load_from_toml("pyproject.toml")
- except BaseException as e:
- if not isinstance(e, KeyboardInterrupt):
- nonebot.logger.error(f"An error occurred: {e}, Bug will be reported automatically.")
- liteyuki_api.bug_report(str(e.__repr__()))
-
-if __name__ == "__main__":
- # Start as __main__
- from liteyuki.utils.base.reloader import Reloader
-
- nonebot.run()
+import nonebot
+from src.utils import adapter_manager, driver_manager, init
+from src.utils.base.config import load_from_yaml
+from src.utils.base.data_manager import StoredConfig, common_db
+from src.utils.base.ly_api import liteyuki_api
+
+if __name__ == "__mp_main__":
+ # Start as multiprocessing
+ init()
+ store_config: dict = common_db.where_one(StoredConfig(), default=StoredConfig()).config
+ static_config = load_from_yaml("config.yml")
+ store_config.update(static_config)
+ driver_manager.init(config=store_config)
+ adapter_manager.init(store_config)
+ nonebot.init(**store_config)
+ adapter_manager.register()
+ try:
+ nonebot.load_plugin("liteyuki.liteyuki_main")
+ nonebot.load_from_toml("pyproject.toml")
+ except BaseException as e:
+ if not isinstance(e, KeyboardInterrupt):
+ nonebot.logger.error(f"An error occurred: {e}, Bug will be reported automatically.")
+ liteyuki_api.bug_report(str(e.__repr__()))
+
+if __name__ == "__main__":
+ # Start as __main__
+ from src.utils.base.reloader import Reloader
+
+ nonebot.run()
diff --git a/liteyuki/utils/__init__.py b/src/utils/__init__.py
similarity index 91%
rename from liteyuki/utils/__init__.py
rename to src/utils/__init__.py
index e61b6b1a..03772f11 100644
--- a/liteyuki/utils/__init__.py
+++ b/src/utils/__init__.py
@@ -1,86 +1,86 @@
-import json
-import os.path
-import platform
-import sys
-import time
-
-import nonebot
-
-__NAME__ = "LiteyukiBot"
-__VERSION__ = "6.3.2" # 60201
-
-import requests
-
-from liteyuki.utils.base.config import load_from_yaml, config
-from liteyuki.utils.base.log import init_log
-from liteyuki.utils.base.data_manager import TempConfig, auto_migrate, common_db
-from git import Repo
-
-
-major, minor, patch = map(int, __VERSION__.split("."))
-__VERSION_I__ = major * 10000 + minor * 100 + patch
-
-
-def register_bot():
- url = "https://api.liteyuki.icu/register"
- data = {
- "name" : __NAME__,
- "version" : __VERSION__,
- "version_i": __VERSION_I__,
- "python" : f"{platform.python_implementation()} {platform.python_version()}",
- "os" : f"{platform.system()} {platform.version()} {platform.machine()}"
- }
- try:
- nonebot.logger.info("Waiting for register to Liteyuki...")
- resp = requests.post(url, json=data, timeout=(10, 15))
- if resp.status_code == 200:
- data = resp.json()
- if liteyuki_id := data.get("liteyuki_id"):
- with open("data/liteyuki/liteyuki.json", "wb") as f:
- f.write(json.dumps(data).encode("utf-8"))
- nonebot.logger.success(f"Register {liteyuki_id} to Liteyuki successfully")
- else:
- raise ValueError(f"Register to Liteyuki failed: {data}")
-
- except Exception as e:
- nonebot.logger.warning(f"Register to Liteyuki failed, but it's no matter: {e}")
-
-
-def init():
- """
- 初始化
- Returns:
-
- """
- # 检测python版本是否高于3.10
- auto_migrate()
- init_log()
- if sys.version_info < (3, 10):
- nonebot.logger.error("Requires Python3.10+ to run, please upgrade your Python Environment.")
- exit(1)
-
- try:
- # 检测git仓库
- repo = Repo(".")
- except Exception as e:
- nonebot.logger.error(f"Failed to load git repository: {e}, please clone this project from GitHub instead of downloading the zip file.")
-
- temp_data: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
- temp_data.data["start_time"] = time.time()
- common_db.save(temp_data)
-
- # 在加载完成语言后再初始化日志
- nonebot.logger.info("Liteyuki is initializing...")
-
- if not os.path.exists("data/liteyuki/liteyuki.json"):
- register_bot()
-
- if not os.path.exists("pyproject.toml"):
- with open("pyproject.toml", "w", encoding="utf-8") as f:
- f.write("[tool.nonebot]\n")
-
- nonebot.logger.info(
- f"Run Liteyuki with Python{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} "
- f"at {sys.executable}"
- )
- nonebot.logger.info(f"{__NAME__} {__VERSION__}({__VERSION_I__}) is running")
+import json
+import os.path
+import platform
+import sys
+import time
+
+import nonebot
+
+__NAME__ = "LiteyukiBot"
+__VERSION__ = "6.3.2" # 60201
+
+import requests
+
+from src.utils.base.config import load_from_yaml, config
+from src.utils.base.log import init_log
+from src.utils.base.data_manager import TempConfig, auto_migrate, common_db
+from git import Repo
+
+
+major, minor, patch = map(int, __VERSION__.split("."))
+__VERSION_I__ = major * 10000 + minor * 100 + patch
+
+
+def register_bot():
+ url = "https://api.liteyuki.icu/register"
+ data = {
+ "name" : __NAME__,
+ "version" : __VERSION__,
+ "version_i": __VERSION_I__,
+ "python" : f"{platform.python_implementation()} {platform.python_version()}",
+ "os" : f"{platform.system()} {platform.version()} {platform.machine()}"
+ }
+ try:
+ nonebot.logger.info("Waiting for register to Liteyuki...")
+ resp = requests.post(url, json=data, timeout=(10, 15))
+ if resp.status_code == 200:
+ data = resp.json()
+ if liteyuki_id := data.get("liteyuki_id"):
+ with open("data/liteyuki/liteyuki.json", "wb") as f:
+ f.write(json.dumps(data).encode("utf-8"))
+ nonebot.logger.success(f"Register {liteyuki_id} to Liteyuki successfully")
+ else:
+ raise ValueError(f"Register to Liteyuki failed: {data}")
+
+ except Exception as e:
+ nonebot.logger.warning(f"Register to Liteyuki failed, but it's no matter: {e}")
+
+
+def init():
+ """
+ 初始化
+ Returns:
+
+ """
+ # 检测python版本是否高于3.10
+ auto_migrate()
+ init_log()
+ if sys.version_info < (3, 10):
+ nonebot.logger.error("Requires Python3.10+ to run, please upgrade your Python Environment.")
+ exit(1)
+
+ try:
+ # 检测git仓库
+ repo = Repo(".")
+ except Exception as e:
+ nonebot.logger.error(f"Failed to load git repository: {e}, please clone this project from GitHub instead of downloading the zip file.")
+
+ temp_data: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
+ temp_data.data["start_time"] = time.time()
+ common_db.save(temp_data)
+
+ # 在加载完成语言后再初始化日志
+ nonebot.logger.info("Liteyuki is initializing...")
+
+ if not os.path.exists("data/liteyuki/liteyuki.json"):
+ register_bot()
+
+ if not os.path.exists("pyproject.toml"):
+ with open("pyproject.toml", "w", encoding="utf-8") as f:
+ f.write("[tool.nonebot]\n")
+
+ nonebot.logger.info(
+ f"Run Liteyuki with Python{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro} "
+ f"at {sys.executable}"
+ )
+ nonebot.logger.info(f"{__NAME__} {__VERSION__}({__VERSION_I__}) is running")
diff --git a/liteyuki/utils/adapter_manager/__init__.py b/src/utils/adapter_manager/__init__.py
similarity index 92%
rename from liteyuki/utils/adapter_manager/__init__.py
rename to src/utils/adapter_manager/__init__.py
index daf48023..2a0e73e9 100644
--- a/liteyuki/utils/adapter_manager/__init__.py
+++ b/src/utils/adapter_manager/__init__.py
@@ -1,14 +1,14 @@
-from . import (
- satori,
- onebot
-)
-
-
-def init(config: dict):
- onebot.init()
- satori.init(config)
-
-
-def register():
- onebot.register()
- satori.register()
+from . import (
+ satori,
+ onebot
+)
+
+
+def init(config: dict):
+ onebot.init()
+ satori.init(config)
+
+
+def register():
+ onebot.register()
+ satori.register()
diff --git a/liteyuki/utils/adapter_manager/onebot.py b/src/utils/adapter_manager/onebot.py
similarity index 94%
rename from liteyuki/utils/adapter_manager/onebot.py
rename to src/utils/adapter_manager/onebot.py
index 23d2a59c..db19b4c9 100644
--- a/liteyuki/utils/adapter_manager/onebot.py
+++ b/src/utils/adapter_manager/onebot.py
@@ -1,12 +1,12 @@
-import nonebot
-from nonebot.adapters.onebot import v11, v12
-
-
-def init():
- pass
-
-
-def register():
- driver = nonebot.get_driver()
- driver.register_adapter(v11.Adapter)
- driver.register_adapter(v12.Adapter)
+import nonebot
+from nonebot.adapters.onebot import v11, v12
+
+
+def init():
+ pass
+
+
+def register():
+ driver = nonebot.get_driver()
+ driver.register_adapter(v11.Adapter)
+ driver.register_adapter(v12.Adapter)
diff --git a/liteyuki/utils/adapter_manager/satori.py b/src/utils/adapter_manager/satori.py
similarity index 97%
rename from liteyuki/utils/adapter_manager/satori.py
rename to src/utils/adapter_manager/satori.py
index 7778296d..c5edc809 100644
--- a/liteyuki/utils/adapter_manager/satori.py
+++ b/src/utils/adapter_manager/satori.py
@@ -1,26 +1,26 @@
-import json
-import os
-
-import nonebot
-from nonebot.adapters import satori
-
-
-def init(config: dict):
- if config.get("satori", None) is None:
- nonebot.logger.info("Satori config not found, skip Satori init.")
- return None
- satori_config = config.get("satori")
- if not satori_config.get("enable", False):
- nonebot.logger.info("Satori not enabled, skip Satori init.")
- return None
- if os.getenv("SATORI_CLIENTS", None) is not None:
- nonebot.logger.info("Satori clients already set in environment variable, skip.")
- os.environ["SATORI_CLIENTS"] = json.dumps(satori_config.get("hosts", []), ensure_ascii=False)
- config['satori_clients'] = satori_config.get("hosts", [])
- return
-
-
-def register():
- if os.getenv("SATORI_CLIENTS", None) is not None:
- driver = nonebot.get_driver()
- driver.register_adapter(satori.Adapter)
+import json
+import os
+
+import nonebot
+from nonebot.adapters import satori
+
+
+def init(config: dict):
+ if config.get("satori", None) is None:
+ nonebot.logger.info("Satori config not found, skip Satori init.")
+ return None
+ satori_config = config.get("satori")
+ if not satori_config.get("enable", False):
+ nonebot.logger.info("Satori not enabled, skip Satori init.")
+ return None
+ if os.getenv("SATORI_CLIENTS", None) is not None:
+ nonebot.logger.info("Satori clients already set in environment variable, skip.")
+ os.environ["SATORI_CLIENTS"] = json.dumps(satori_config.get("hosts", []), ensure_ascii=False)
+ config['satori_clients'] = satori_config.get("hosts", [])
+ return
+
+
+def register():
+ if os.getenv("SATORI_CLIENTS", None) is not None:
+ driver = nonebot.get_driver()
+ driver.register_adapter(satori.Adapter)
diff --git a/src/utils/base/__init__.py b/src/utils/base/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/utils/base/config.py b/src/utils/base/config.py
similarity index 96%
rename from liteyuki/utils/base/config.py
rename to src/utils/base/config.py
index eaccbf4d..a53f8f9e 100644
--- a/liteyuki/utils/base/config.py
+++ b/src/utils/base/config.py
@@ -1,100 +1,100 @@
-import os
-from typing import List
-
-import nonebot
-import yaml
-from pydantic import BaseModel
-
-from .data_manager import StoredConfig, TempConfig, common_db
-from .ly_typing import T_Bot
-from ..message.tools import random_hex_string
-
-config = {} # 全局配置,确保加载后读取
-
-
-class SatoriNodeConfig(BaseModel):
- host: str = ""
- port: str = "5500"
- path: str = ""
- token: str = ""
-
-
-class SatoriConfig(BaseModel):
- comment: str = "These features are still in development. Do not enable in production environment."
- enable: bool = False
- hosts: List[SatoriNodeConfig] = [SatoriNodeConfig()]
-
-
-class BasicConfig(BaseModel):
- host: str = "127.0.0.1"
- port: int = 20216
- superusers: list[str] = []
- command_start: list[str] = ["/", ""]
- nickname: list[str] = [f"LiteyukiBot-{random_hex_string(6)}"]
- satori: SatoriConfig = SatoriConfig()
-
-
-def load_from_yaml(file: str) -> dict:
- global config
- nonebot.logger.debug("Loading config from %s" % file)
- if not os.path.exists(file):
- nonebot.logger.warning(f"Config file {file} not found, created default config, please modify it and restart")
- with open(file, "w", encoding="utf-8") as f:
- yaml.dump(BasicConfig().dict(), f, default_flow_style=False)
-
- with open(file, "r", encoding="utf-8") as f:
- conf = init_conf(yaml.load(f, Loader=yaml.FullLoader))
- config = conf
- if conf is None:
- nonebot.logger.warning(f"Config file {file} is empty, use default config. please modify it and restart")
- conf = BasicConfig().dict()
- return conf
-
-
-def get_config(key: str, default=None):
- """获取配置项,优先级:bot > config > db > yaml"""
- try:
- bot = nonebot.get_bot()
- except:
- bot = None
-
- if bot is None:
- bot_config = {}
- else:
- bot_config = bot.config.dict()
-
- if key in bot_config:
- return bot_config[key]
-
- elif key in config:
- return config[key]
-
- elif key in common_db.where_one(StoredConfig(), default=StoredConfig()).config:
- return common_db.where_one(StoredConfig(), default=StoredConfig()).config[key]
-
- elif key in load_from_yaml("config.yml"):
- return load_from_yaml("config.yml")[key]
-
- else:
- return default
-
-
-def set_stored_config(key: str, value):
- temp_config: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
- temp_config.data[key] = value
- common_db.save(temp_config)
-
-
-def init_conf(conf: dict) -> dict:
- """
- 初始化配置文件,确保配置文件中的必要字段存在,且不会冲突
- Args:
- conf:
-
- Returns:
-
- """
- # 若command_start中无"",则添加必要命令头,开启alconna_use_command_start防止冲突
- if "" not in conf.get("command_start", []):
- conf["alconna_use_command_start"] = True
- return conf
+import os
+from typing import List
+
+import nonebot
+import yaml
+from pydantic import BaseModel
+
+from .data_manager import StoredConfig, TempConfig, common_db
+from .ly_typing import T_Bot
+from ..message.tools import random_hex_string
+
+config = {} # 全局配置,确保加载后读取
+
+
+class SatoriNodeConfig(BaseModel):
+ host: str = ""
+ port: str = "5500"
+ path: str = ""
+ token: str = ""
+
+
+class SatoriConfig(BaseModel):
+ comment: str = "These features are still in development. Do not enable in production environment."
+ enable: bool = False
+ hosts: List[SatoriNodeConfig] = [SatoriNodeConfig()]
+
+
+class BasicConfig(BaseModel):
+ host: str = "127.0.0.1"
+ port: int = 20216
+ superusers: list[str] = []
+ command_start: list[str] = ["/", ""]
+ nickname: list[str] = [f"LiteyukiBot-{random_hex_string(6)}"]
+ satori: SatoriConfig = SatoriConfig()
+
+
+def load_from_yaml(file: str) -> dict:
+ global config
+ nonebot.logger.debug("Loading config from %s" % file)
+ if not os.path.exists(file):
+ nonebot.logger.warning(f"Config file {file} not found, created default config, please modify it and restart")
+ with open(file, "w", encoding="utf-8") as f:
+ yaml.dump(BasicConfig().dict(), f, default_flow_style=False)
+
+ with open(file, "r", encoding="utf-8") as f:
+ conf = init_conf(yaml.load(f, Loader=yaml.FullLoader))
+ config = conf
+ if conf is None:
+ nonebot.logger.warning(f"Config file {file} is empty, use default config. please modify it and restart")
+ conf = BasicConfig().dict()
+ return conf
+
+
+def get_config(key: str, default=None):
+ """获取配置项,优先级:bot > config > db > yaml"""
+ try:
+ bot = nonebot.get_bot()
+ except:
+ bot = None
+
+ if bot is None:
+ bot_config = {}
+ else:
+ bot_config = bot.config.dict()
+
+ if key in bot_config:
+ return bot_config[key]
+
+ elif key in config:
+ return config[key]
+
+ elif key in common_db.where_one(StoredConfig(), default=StoredConfig()).config:
+ return common_db.where_one(StoredConfig(), default=StoredConfig()).config[key]
+
+ elif key in load_from_yaml("config.yml"):
+ return load_from_yaml("config.yml")[key]
+
+ else:
+ return default
+
+
+def set_stored_config(key: str, value):
+ temp_config: TempConfig = common_db.where_one(TempConfig(), default=TempConfig())
+ temp_config.data[key] = value
+ common_db.save(temp_config)
+
+
+def init_conf(conf: dict) -> dict:
+ """
+ 初始化配置文件,确保配置文件中的必要字段存在,且不会冲突
+ Args:
+ conf:
+
+ Returns:
+
+ """
+ # 若command_start中无"",则添加必要命令头,开启alconna_use_command_start防止冲突
+ if "" not in conf.get("command_start", []):
+ conf["alconna_use_command_start"] = True
+ return conf
diff --git a/liteyuki/utils/base/data.py b/src/utils/base/data.py
similarity index 97%
rename from liteyuki/utils/base/data.py
rename to src/utils/base/data.py
index 453690ea..e5588488 100644
--- a/liteyuki/utils/base/data.py
+++ b/src/utils/base/data.py
@@ -1,405 +1,405 @@
-import os
-import pickle
-import sqlite3
-from types import NoneType
-from typing import Any, Callable
-from packaging.version import parse
-import inspect
-import nonebot
-import pydantic
-from pydantic import BaseModel
-
-
-class LiteModel(BaseModel):
- TABLE_NAME: str = None
- id: int = None
-
- def dump(self, *args, **kwargs):
- if parse(pydantic.__version__) < parse("2.0.0"):
- return self.dict(*args, **kwargs)
- else:
- return self.model_dump(*args, **kwargs)
-
-
-class Database:
- def __init__(self, db_name: str):
-
- if os.path.dirname(db_name) != "" and not os.path.exists(os.path.dirname(db_name)):
- os.makedirs(os.path.dirname(db_name))
-
- self.db_name = db_name
- self.conn = sqlite3.connect(db_name)
- self.cursor = self.conn.cursor()
-
- self._on_save_callbacks = []
-
- def where_one(self, model: LiteModel, condition: str = "", *args: Any, default: Any = None) -> LiteModel | Any | None:
- """查询第一个
- Args:
- model: 数据模型实例
- condition: 查询条件,不给定则查询所有
- *args: 参数化查询参数
- default: 默认值
-
- Returns:
-
- """
- all_results = self.where_all(model, condition, *args)
- return all_results[0] if all_results else default
-
- def where_all(self, model: LiteModel, condition: str = "", *args: Any, default: Any = None) -> list[LiteModel | Any] | None:
- """查询所有
- Args:
- model: 数据模型实例
- condition: 查询条件,不给定则查询所有
- *args: 参数化查询参数
- default: 默认值
-
- Returns:
-
- """
- table_name = model.TABLE_NAME
- model_type = type(model)
- nonebot.logger.debug(f"Selecting {model.TABLE_NAME} WHERE {condition.replace('?', '%s') % args}")
- if not table_name:
- raise ValueError(f"数据模型{model_type.__name__}未提供表名")
-
- # condition = f"WHERE {condition}"
- # print(f"SELECT * FROM {table_name} {condition}", args)
- # if len(args) == 0:
- # results = self.cursor.execute(f"SELECT * FROM {table_name} {condition}").fetchall()
- # else:
- # results = self.cursor.execute(f"SELECT * FROM {table_name} {condition}", args).fetchall()
- if condition:
- results = self.cursor.execute(f"SELECT * FROM {table_name} WHERE {condition}", args).fetchall()
- else:
- results = self.cursor.execute(f"SELECT * FROM {table_name}").fetchall()
- fields = [description[0] for description in self.cursor.description]
- if not results:
- return default
- else:
- return [model_type(**self._load(dict(zip(fields, result)))) for result in results]
-
- def save(self, *args: LiteModel):
- """增/改操作
- Args:
- *args:
- Returns:
- """
- table_list = [item[0] for item in self.cursor.execute("SELECT name FROM sqlite_master WHERE type='table'").fetchall()]
- for model in args:
- nonebot.logger.debug(f"Upserting {model}")
- if not model.TABLE_NAME:
- raise ValueError(f"数据模型 {model.__class__.__name__} 未提供表名")
- elif model.TABLE_NAME not in table_list:
- raise ValueError(f"数据模型 {model.__class__.__name__} 表 {model.TABLE_NAME} 不存在,请先迁移")
- else:
- self._save(model.dump(by_alias=True))
-
- for callback in self._on_save_callbacks:
- callback(model)
-
- def _save(self, obj: Any) -> Any:
- # obj = copy.deepcopy(obj)
- if isinstance(obj, dict):
- table_name = obj.get("TABLE_NAME")
- row_id = obj.get("id")
- new_obj = {}
- for field, value in obj.items():
- if isinstance(value, self.ITERABLE_TYPE):
- new_obj[self._get_stored_field_prefix(value) + field] = self._save(value) # self._save(value) # -> bytes
- elif isinstance(value, self.BASIC_TYPE):
- new_obj[field] = value
- else:
- raise ValueError(f"数据模型{table_name}包含不支持的数据类型,字段:{field} 值:{value} 值类型:{type(value)}")
- if table_name:
- fields, values = [], []
- for n_field, n_value in new_obj.items():
- if n_field not in ["TABLE_NAME", "id"]:
- fields.append(n_field)
- values.append(n_value)
- # 移除TABLE_NAME和id
- fields = list(fields)
- values = list(values)
- if row_id is not None:
- # 如果 _id 不为空,将 'id' 插入到字段列表的开始
- fields.insert(0, 'id')
- # 将 _id 插入到值列表的开始
- values.insert(0, row_id)
- fields = ', '.join([f'"{field}"' for field in fields])
- placeholders = ', '.join('?' for _ in values)
- self.cursor.execute(f"INSERT OR REPLACE INTO {table_name}({fields}) VALUES ({placeholders})", tuple(values))
- self.conn.commit()
- foreign_id = self.cursor.execute("SELECT last_insert_rowid()").fetchone()[0]
- return f"{self.FOREIGN_KEY_PREFIX}{foreign_id}@{table_name}" # -> FOREIGN_KEY_123456@{table_name} id@{table_name}
- else:
- return pickle.dumps(new_obj) # -> bytes
- elif isinstance(obj, (list, set, tuple)):
- obj_type = type(obj) # 到时候转回去
- new_obj = []
- for item in obj:
- if isinstance(item, self.ITERABLE_TYPE):
- new_obj.append(self._save(item))
- elif isinstance(item, self.BASIC_TYPE):
- new_obj.append(item)
- else:
- raise ValueError(f"数据模型包含不支持的数据类型,值:{item} 值类型:{type(item)}")
- return pickle.dumps(obj_type(new_obj)) # -> bytes
- else:
- raise ValueError(f"数据模型包含不支持的数据类型,值:{obj} 值类型:{type(obj)}")
-
- def _load(self, obj: Any) -> Any:
-
- if isinstance(obj, dict):
-
- new_obj = {}
-
- for field, value in obj.items():
-
- field: str
-
- if field.startswith(self.BYTES_PREFIX):
- if isinstance(value, bytes):
- new_obj[field.replace(self.BYTES_PREFIX, "")] = self._load(pickle.loads(value))
- else: # 从value字段可能为None,fix at 2024/6/13
- pass
- # 暂时不作处理,后面再修
-
- elif field.startswith(self.FOREIGN_KEY_PREFIX):
-
- new_obj[field.replace(self.FOREIGN_KEY_PREFIX, "")] = self._load(self._get_foreign_data(value))
-
- else:
- new_obj[field] = value
- return new_obj
- elif isinstance(obj, (list, set, tuple)):
-
- new_obj = []
- for item in obj:
-
- if isinstance(item, bytes):
-
- # 对bytes进行尝试解析,解析失败则返回原始bytes
- try:
- new_obj.append(self._load(pickle.loads(item)))
- except Exception as e:
- new_obj.append(self._load(item))
-
- elif isinstance(item, str) and item.startswith(self.FOREIGN_KEY_PREFIX):
- new_obj.append(self._load(self._get_foreign_data(item)))
- else:
- new_obj.append(self._load(item))
- return new_obj
- else:
- return obj
-
- def delete(self, model: LiteModel, condition: str, *args: Any, allow_empty: bool = False):
- """
- 删除满足条件的数据
- Args:
- allow_empty: 允许空条件删除整个表
- model:
- condition:
- *args:
-
- Returns:
-
- """
- table_name = model.TABLE_NAME
- nonebot.logger.debug(f"Deleting {model} WHERE {condition} {args}")
- if not table_name:
- raise ValueError(f"数据模型{model.__class__.__name__}未提供表名")
- if model.id is not None:
- condition = f"id = {model.id}"
- if not condition and not allow_empty:
- raise ValueError("删除操作必须提供条件")
- self.cursor.execute(f"DELETE FROM {table_name} WHERE {condition}", args)
- self.conn.commit()
-
- def auto_migrate(self, *args: LiteModel):
-
- """
- 自动迁移模型
- Args:
- *args: 模型类实例化对象,支持空默认值,不支持嵌套迁移
-
- Returns:
-
- """
- for model in args:
- if not model.TABLE_NAME:
- raise ValueError(f"数据模型{type(model).__name__}未提供表名")
-
- # 若无则创建表
- self.cursor.execute(
- f'CREATE TABLE IF NOT EXISTS "{model.TABLE_NAME}" (id INTEGER PRIMARY KEY AUTOINCREMENT)'
- )
-
- # 获取表结构,field -> SqliteType
- new_structure = {}
- for n_field, n_value in model.dump(by_alias=True).items():
- if n_field not in ["TABLE_NAME", "id"]:
- new_structure[self._get_stored_field_prefix(n_value) + n_field] = self._get_stored_type(n_value)
-
- # 原有的字段列表
- existing_structure = dict([(column[1], column[2]) for column in self.cursor.execute(f'PRAGMA table_info({model.TABLE_NAME})').fetchall()])
- # 检测缺失字段,由于SQLite是动态类型,所以不需要检测类型
- for n_field, n_type in new_structure.items():
- if n_field not in existing_structure.keys() and n_field.lower() not in ["id", "table_name"]:
- default_value = self.DEFAULT_MAPPING.get(n_type, 'NULL')
- self.cursor.execute(
- f"ALTER TABLE '{model.TABLE_NAME}' ADD COLUMN {n_field} {n_type} DEFAULT {self.DEFAULT_MAPPING.get(n_type, default_value)}"
- )
-
- # 检测多余字段进行删除
- for e_field in existing_structure.keys():
- if e_field not in new_structure.keys() and e_field.lower() not in ['id']:
- self.cursor.execute(
- f'ALTER TABLE "{model.TABLE_NAME}" DROP COLUMN "{e_field}"'
- )
- self.conn.commit()
- # 已完成
-
- def _get_stored_field_prefix(self, value) -> str:
- """根据类型获取存储字段前缀,一定在后加上字段名
- * -> ""
- Args:
- value: 储存的值
-
- Returns:
- Sqlite3存储字段
- """
-
- if isinstance(value, LiteModel) or isinstance(value, dict) and "TABLE_NAME" in value:
- return self.FOREIGN_KEY_PREFIX
- elif type(value) in self.ITERABLE_TYPE:
- return self.BYTES_PREFIX
- return ""
-
- def _get_stored_type(self, value) -> str:
- """获取存储类型
-
- Args:
- value: 储存的值
-
- Returns:
- Sqlite3存储类型
- """
- if isinstance(value, dict) and "TABLE_NAME" in value:
- # 是一个模型字典,储存外键
- return "INTEGER"
- return self.TYPE_MAPPING.get(type(value), "TEXT")
-
- def _get_foreign_data(self, foreign_value: str) -> dict:
- """
- 获取外键数据
- Args:
- foreign_value:
-
- Returns:
-
- """
- foreign_value = foreign_value.replace(self.FOREIGN_KEY_PREFIX, "")
- table_name = foreign_value.split("@")[-1]
- foreign_id = foreign_value.split("@")[0]
- fields = [description[1] for description in self.cursor.execute(f"PRAGMA table_info({table_name})").fetchall()]
- result = self.cursor.execute(f"SELECT * FROM {table_name} WHERE id = ?", (foreign_id,)).fetchone()
- return dict(zip(fields, result))
-
- def on_save(self, func: Callable[[LiteModel | Any], None]):
- """
- 装饰一个可调用对象使其在储存数据模型时被调用
- Args:
- func:
- Returns:
- """
-
- def wrapper(model):
- # 检查被装饰函数声明的model类型和传入的model类型是否一致
- sign = inspect.signature(func)
- if param := sign.parameters.get("model"):
- if isinstance(model, param.annotation):
- pass
- else:
- return
- else:
- return
- result = func(model)
- for callback in self._on_save_callbacks:
- callback(result)
- return result
-
- self._on_save_callbacks.append(wrapper)
- return wrapper
-
- TYPE_MAPPING = {
- int : "INTEGER",
- float : "REAL",
- str : "TEXT",
- bool : "INTEGER",
- bytes : "BLOB",
- NoneType : "NULL",
- # dict : "TEXT",
- # list : "TEXT",
- # tuple : "TEXT",
- # set : "TEXT",
-
- dict : "BLOB", # LITEYUKIDICT{key_name}
- list : "BLOB", # LITEYUKILIST{key_name}
- tuple : "BLOB", # LITEYUKITUPLE{key_name}
- set : "BLOB", # LITEYUKISET{key_name}
- LiteModel: "TEXT" # FOREIGN_KEY_{table_name}
- }
- DEFAULT_MAPPING = {
- "TEXT" : "''",
- "INTEGER": 0,
- "REAL" : 0.0,
- "BLOB" : None,
- "NULL" : None
- }
-
- # 基础类型
- BASIC_TYPE = (int, float, str, bool, bytes, NoneType)
- # 可序列化类型
- ITERABLE_TYPE = (dict, list, tuple, set, LiteModel)
-
- # 外键前缀
- FOREIGN_KEY_PREFIX = "FOREIGN_KEY_"
- # 转换为的字节前缀
- BYTES_PREFIX = "PICKLE_BYTES_"
-
- # transaction tx 事务操作
- def first(self, model: LiteModel) -> "Database":
- pass
-
- def where(self, condition: str, *args) -> "Database":
- pass
-
- def limit(self, limit: int) -> "Database":
- pass
-
- def order(self, order: str) -> "Database":
- pass
-
-
-def check_sqlite_keyword(name):
- sqlite_keywords = [
- "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC",
- "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY", "CASCADE", "CASE",
- "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT", "CONFLICT", "CONSTRAINT", "CREATE",
- "CROSS", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT",
- "DEFERRABLE", "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
- "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN", "FAIL", "FOR",
- "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF", "IGNORE", "IMMEDIATE",
- "IN", "INDEX", "INDEXED", "INITIALLY", "INNER", "INSERT", "INSTEAD", "INTERSECT",
- "INTO", "IS", "ISNULL", "JOIN", "KEY", "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL",
- "NO", "NOT", "NOTNULL", "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN",
- "PRAGMA", "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP", "REINDEX",
- "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT", "ROLLBACK", "ROW", "SAVEPOINT",
- "SELECT", "SET", "TABLE", "TEMP", "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER",
- "UNION", "UNIQUE", "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN",
- "WHERE", "WITH", "WITHOUT"
- ]
- return True
- # if name.upper() in sqlite_keywords:
- # raise ValueError(f"'{name}' 是SQLite保留字,不建议使用,请更换名称")
+import os
+import pickle
+import sqlite3
+from types import NoneType
+from typing import Any, Callable
+from packaging.version import parse
+import inspect
+import nonebot
+import pydantic
+from pydantic import BaseModel
+
+
+class LiteModel(BaseModel):
+ TABLE_NAME: str = None
+ id: int = None
+
+ def dump(self, *args, **kwargs):
+ if parse(pydantic.__version__) < parse("2.0.0"):
+ return self.dict(*args, **kwargs)
+ else:
+ return self.model_dump(*args, **kwargs)
+
+
+class Database:
+ def __init__(self, db_name: str):
+
+ if os.path.dirname(db_name) != "" and not os.path.exists(os.path.dirname(db_name)):
+ os.makedirs(os.path.dirname(db_name))
+
+ self.db_name = db_name
+ self.conn = sqlite3.connect(db_name)
+ self.cursor = self.conn.cursor()
+
+ self._on_save_callbacks = []
+
+ def where_one(self, model: LiteModel, condition: str = "", *args: Any, default: Any = None) -> LiteModel | Any | None:
+ """查询第一个
+ Args:
+ model: 数据模型实例
+ condition: 查询条件,不给定则查询所有
+ *args: 参数化查询参数
+ default: 默认值
+
+ Returns:
+
+ """
+ all_results = self.where_all(model, condition, *args)
+ return all_results[0] if all_results else default
+
+ def where_all(self, model: LiteModel, condition: str = "", *args: Any, default: Any = None) -> list[LiteModel | Any] | None:
+ """查询所有
+ Args:
+ model: 数据模型实例
+ condition: 查询条件,不给定则查询所有
+ *args: 参数化查询参数
+ default: 默认值
+
+ Returns:
+
+ """
+ table_name = model.TABLE_NAME
+ model_type = type(model)
+ nonebot.logger.debug(f"Selecting {model.TABLE_NAME} WHERE {condition.replace('?', '%s') % args}")
+ if not table_name:
+ raise ValueError(f"数据模型{model_type.__name__}未提供表名")
+
+ # condition = f"WHERE {condition}"
+ # print(f"SELECT * FROM {table_name} {condition}", args)
+ # if len(args) == 0:
+ # results = self.cursor.execute(f"SELECT * FROM {table_name} {condition}").fetchall()
+ # else:
+ # results = self.cursor.execute(f"SELECT * FROM {table_name} {condition}", args).fetchall()
+ if condition:
+ results = self.cursor.execute(f"SELECT * FROM {table_name} WHERE {condition}", args).fetchall()
+ else:
+ results = self.cursor.execute(f"SELECT * FROM {table_name}").fetchall()
+ fields = [description[0] for description in self.cursor.description]
+ if not results:
+ return default
+ else:
+ return [model_type(**self._load(dict(zip(fields, result)))) for result in results]
+
+ def save(self, *args: LiteModel):
+ """增/改操作
+ Args:
+ *args:
+ Returns:
+ """
+ table_list = [item[0] for item in self.cursor.execute("SELECT name FROM sqlite_master WHERE type='table'").fetchall()]
+ for model in args:
+ nonebot.logger.debug(f"Upserting {model}")
+ if not model.TABLE_NAME:
+ raise ValueError(f"数据模型 {model.__class__.__name__} 未提供表名")
+ elif model.TABLE_NAME not in table_list:
+ raise ValueError(f"数据模型 {model.__class__.__name__} 表 {model.TABLE_NAME} 不存在,请先迁移")
+ else:
+ self._save(model.dump(by_alias=True))
+
+ for callback in self._on_save_callbacks:
+ callback(model)
+
+ def _save(self, obj: Any) -> Any:
+ # obj = copy.deepcopy(obj)
+ if isinstance(obj, dict):
+ table_name = obj.get("TABLE_NAME")
+ row_id = obj.get("id")
+ new_obj = {}
+ for field, value in obj.items():
+ if isinstance(value, self.ITERABLE_TYPE):
+ new_obj[self._get_stored_field_prefix(value) + field] = self._save(value) # self._save(value) # -> bytes
+ elif isinstance(value, self.BASIC_TYPE):
+ new_obj[field] = value
+ else:
+ raise ValueError(f"数据模型{table_name}包含不支持的数据类型,字段:{field} 值:{value} 值类型:{type(value)}")
+ if table_name:
+ fields, values = [], []
+ for n_field, n_value in new_obj.items():
+ if n_field not in ["TABLE_NAME", "id"]:
+ fields.append(n_field)
+ values.append(n_value)
+ # 移除TABLE_NAME和id
+ fields = list(fields)
+ values = list(values)
+ if row_id is not None:
+ # 如果 _id 不为空,将 'id' 插入到字段列表的开始
+ fields.insert(0, 'id')
+ # 将 _id 插入到值列表的开始
+ values.insert(0, row_id)
+ fields = ', '.join([f'"{field}"' for field in fields])
+ placeholders = ', '.join('?' for _ in values)
+ self.cursor.execute(f"INSERT OR REPLACE INTO {table_name}({fields}) VALUES ({placeholders})", tuple(values))
+ self.conn.commit()
+ foreign_id = self.cursor.execute("SELECT last_insert_rowid()").fetchone()[0]
+ return f"{self.FOREIGN_KEY_PREFIX}{foreign_id}@{table_name}" # -> FOREIGN_KEY_123456@{table_name} id@{table_name}
+ else:
+ return pickle.dumps(new_obj) # -> bytes
+ elif isinstance(obj, (list, set, tuple)):
+ obj_type = type(obj) # 到时候转回去
+ new_obj = []
+ for item in obj:
+ if isinstance(item, self.ITERABLE_TYPE):
+ new_obj.append(self._save(item))
+ elif isinstance(item, self.BASIC_TYPE):
+ new_obj.append(item)
+ else:
+ raise ValueError(f"数据模型包含不支持的数据类型,值:{item} 值类型:{type(item)}")
+ return pickle.dumps(obj_type(new_obj)) # -> bytes
+ else:
+ raise ValueError(f"数据模型包含不支持的数据类型,值:{obj} 值类型:{type(obj)}")
+
+ def _load(self, obj: Any) -> Any:
+
+ if isinstance(obj, dict):
+
+ new_obj = {}
+
+ for field, value in obj.items():
+
+ field: str
+
+ if field.startswith(self.BYTES_PREFIX):
+ if isinstance(value, bytes):
+ new_obj[field.replace(self.BYTES_PREFIX, "")] = self._load(pickle.loads(value))
+ else: # 从value字段可能为None,fix at 2024/6/13
+ pass
+ # 暂时不作处理,后面再修
+
+ elif field.startswith(self.FOREIGN_KEY_PREFIX):
+
+ new_obj[field.replace(self.FOREIGN_KEY_PREFIX, "")] = self._load(self._get_foreign_data(value))
+
+ else:
+ new_obj[field] = value
+ return new_obj
+ elif isinstance(obj, (list, set, tuple)):
+
+ new_obj = []
+ for item in obj:
+
+ if isinstance(item, bytes):
+
+ # 对bytes进行尝试解析,解析失败则返回原始bytes
+ try:
+ new_obj.append(self._load(pickle.loads(item)))
+ except Exception as e:
+ new_obj.append(self._load(item))
+
+ elif isinstance(item, str) and item.startswith(self.FOREIGN_KEY_PREFIX):
+ new_obj.append(self._load(self._get_foreign_data(item)))
+ else:
+ new_obj.append(self._load(item))
+ return new_obj
+ else:
+ return obj
+
+ def delete(self, model: LiteModel, condition: str, *args: Any, allow_empty: bool = False):
+ """
+ 删除满足条件的数据
+ Args:
+ allow_empty: 允许空条件删除整个表
+ model:
+ condition:
+ *args:
+
+ Returns:
+
+ """
+ table_name = model.TABLE_NAME
+ nonebot.logger.debug(f"Deleting {model} WHERE {condition} {args}")
+ if not table_name:
+ raise ValueError(f"数据模型{model.__class__.__name__}未提供表名")
+ if model.id is not None:
+ condition = f"id = {model.id}"
+ if not condition and not allow_empty:
+ raise ValueError("删除操作必须提供条件")
+ self.cursor.execute(f"DELETE FROM {table_name} WHERE {condition}", args)
+ self.conn.commit()
+
+ def auto_migrate(self, *args: LiteModel):
+
+ """
+ 自动迁移模型
+ Args:
+ *args: 模型类实例化对象,支持空默认值,不支持嵌套迁移
+
+ Returns:
+
+ """
+ for model in args:
+ if not model.TABLE_NAME:
+ raise ValueError(f"数据模型{type(model).__name__}未提供表名")
+
+ # 若无则创建表
+ self.cursor.execute(
+ f'CREATE TABLE IF NOT EXISTS "{model.TABLE_NAME}" (id INTEGER PRIMARY KEY AUTOINCREMENT)'
+ )
+
+ # 获取表结构,field -> SqliteType
+ new_structure = {}
+ for n_field, n_value in model.dump(by_alias=True).items():
+ if n_field not in ["TABLE_NAME", "id"]:
+ new_structure[self._get_stored_field_prefix(n_value) + n_field] = self._get_stored_type(n_value)
+
+ # 原有的字段列表
+ existing_structure = dict([(column[1], column[2]) for column in self.cursor.execute(f'PRAGMA table_info({model.TABLE_NAME})').fetchall()])
+ # 检测缺失字段,由于SQLite是动态类型,所以不需要检测类型
+ for n_field, n_type in new_structure.items():
+ if n_field not in existing_structure.keys() and n_field.lower() not in ["id", "table_name"]:
+ default_value = self.DEFAULT_MAPPING.get(n_type, 'NULL')
+ self.cursor.execute(
+ f"ALTER TABLE '{model.TABLE_NAME}' ADD COLUMN {n_field} {n_type} DEFAULT {self.DEFAULT_MAPPING.get(n_type, default_value)}"
+ )
+
+ # 检测多余字段进行删除
+ for e_field in existing_structure.keys():
+ if e_field not in new_structure.keys() and e_field.lower() not in ['id']:
+ self.cursor.execute(
+ f'ALTER TABLE "{model.TABLE_NAME}" DROP COLUMN "{e_field}"'
+ )
+ self.conn.commit()
+ # 已完成
+
+ def _get_stored_field_prefix(self, value) -> str:
+ """根据类型获取存储字段前缀,一定在后加上字段名
+ * -> ""
+ Args:
+ value: 储存的值
+
+ Returns:
+ Sqlite3存储字段
+ """
+
+ if isinstance(value, LiteModel) or isinstance(value, dict) and "TABLE_NAME" in value:
+ return self.FOREIGN_KEY_PREFIX
+ elif type(value) in self.ITERABLE_TYPE:
+ return self.BYTES_PREFIX
+ return ""
+
+ def _get_stored_type(self, value) -> str:
+ """获取存储类型
+
+ Args:
+ value: 储存的值
+
+ Returns:
+ Sqlite3存储类型
+ """
+ if isinstance(value, dict) and "TABLE_NAME" in value:
+ # 是一个模型字典,储存外键
+ return "INTEGER"
+ return self.TYPE_MAPPING.get(type(value), "TEXT")
+
+ def _get_foreign_data(self, foreign_value: str) -> dict:
+ """
+ 获取外键数据
+ Args:
+ foreign_value:
+
+ Returns:
+
+ """
+ foreign_value = foreign_value.replace(self.FOREIGN_KEY_PREFIX, "")
+ table_name = foreign_value.split("@")[-1]
+ foreign_id = foreign_value.split("@")[0]
+ fields = [description[1] for description in self.cursor.execute(f"PRAGMA table_info({table_name})").fetchall()]
+ result = self.cursor.execute(f"SELECT * FROM {table_name} WHERE id = ?", (foreign_id,)).fetchone()
+ return dict(zip(fields, result))
+
+ def on_save(self, func: Callable[[LiteModel | Any], None]):
+ """
+ 装饰一个可调用对象使其在储存数据模型时被调用
+ Args:
+ func:
+ Returns:
+ """
+
+ def wrapper(model):
+ # 检查被装饰函数声明的model类型和传入的model类型是否一致
+ sign = inspect.signature(func)
+ if param := sign.parameters.get("model"):
+ if isinstance(model, param.annotation):
+ pass
+ else:
+ return
+ else:
+ return
+ result = func(model)
+ for callback in self._on_save_callbacks:
+ callback(result)
+ return result
+
+ self._on_save_callbacks.append(wrapper)
+ return wrapper
+
+ TYPE_MAPPING = {
+ int : "INTEGER",
+ float : "REAL",
+ str : "TEXT",
+ bool : "INTEGER",
+ bytes : "BLOB",
+ NoneType : "NULL",
+ # dict : "TEXT",
+ # list : "TEXT",
+ # tuple : "TEXT",
+ # set : "TEXT",
+
+ dict : "BLOB", # LITEYUKIDICT{key_name}
+ list : "BLOB", # LITEYUKILIST{key_name}
+ tuple : "BLOB", # LITEYUKITUPLE{key_name}
+ set : "BLOB", # LITEYUKISET{key_name}
+ LiteModel: "TEXT" # FOREIGN_KEY_{table_name}
+ }
+ DEFAULT_MAPPING = {
+ "TEXT" : "''",
+ "INTEGER": 0,
+ "REAL" : 0.0,
+ "BLOB" : None,
+ "NULL" : None
+ }
+
+ # 基础类型
+ BASIC_TYPE = (int, float, str, bool, bytes, NoneType)
+ # 可序列化类型
+ ITERABLE_TYPE = (dict, list, tuple, set, LiteModel)
+
+ # 外键前缀
+ FOREIGN_KEY_PREFIX = "FOREIGN_KEY_"
+ # 转换为的字节前缀
+ BYTES_PREFIX = "PICKLE_BYTES_"
+
+ # transaction tx 事务操作
+ def first(self, model: LiteModel) -> "Database":
+ pass
+
+ def where(self, condition: str, *args) -> "Database":
+ pass
+
+ def limit(self, limit: int) -> "Database":
+ pass
+
+ def order(self, order: str) -> "Database":
+ pass
+
+
+def check_sqlite_keyword(name):
+ sqlite_keywords = [
+ "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC",
+ "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY", "CASCADE", "CASE",
+ "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT", "CONFLICT", "CONSTRAINT", "CREATE",
+ "CROSS", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT",
+ "DEFERRABLE", "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DROP", "EACH",
+ "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN", "FAIL", "FOR",
+ "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF", "IGNORE", "IMMEDIATE",
+ "IN", "INDEX", "INDEXED", "INITIALLY", "INNER", "INSERT", "INSTEAD", "INTERSECT",
+ "INTO", "IS", "ISNULL", "JOIN", "KEY", "LEFT", "LIKE", "LIMIT", "MATCH", "NATURAL",
+ "NO", "NOT", "NOTNULL", "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN",
+ "PRAGMA", "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP", "REINDEX",
+ "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT", "ROLLBACK", "ROW", "SAVEPOINT",
+ "SELECT", "SET", "TABLE", "TEMP", "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER",
+ "UNION", "UNIQUE", "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN",
+ "WHERE", "WITH", "WITHOUT"
+ ]
+ return True
+ # if name.upper() in sqlite_keywords:
+ # raise ValueError(f"'{name}' 是SQLite保留字,不建议使用,请更换名称")
diff --git a/liteyuki/utils/base/data_manager.py b/src/utils/base/data_manager.py
similarity index 96%
rename from liteyuki/utils/base/data_manager.py
rename to src/utils/base/data_manager.py
index 87abbedb..63d510c7 100644
--- a/liteyuki/utils/base/data_manager.py
+++ b/src/utils/base/data_manager.py
@@ -1,96 +1,96 @@
-import os
-
-from pydantic import Field
-
-from .data import Database, LiteModel, Database
-
-DATA_PATH = "data/liteyuki"
-
-user_db: Database = Database(os.path.join(DATA_PATH, "users.ldb"))
-group_db: Database = Database(os.path.join(DATA_PATH, "groups.ldb"))
-plugin_db: Database = Database(os.path.join(DATA_PATH, "plugins.ldb"))
-common_db: Database = Database(os.path.join(DATA_PATH, "common.ldb"))
-
-# 内存数据库,临时用于存储数据
-memory_database = {
-
-}
-
-
-class User(LiteModel):
- TABLE_NAME: str = "user"
- user_id: str = Field(str(), alias="user_id")
- username: str = Field(str(), alias="username")
- profile: dict[str, str] = Field(dict(), alias="profile")
- enabled_plugins: list[str] = Field(list(), alias="enabled_plugins")
- disabled_plugins: list[str] = Field(list(), alias="disabled_plugins")
-
-
-class Group(LiteModel):
- TABLE_NAME: str = "group_chat"
- # Group是一个关键字,所以这里用GroupChat
- group_id: str = Field(str(), alias="group_id")
- group_name: str = Field(str(), alias="group_name")
- enabled_plugins: list[str] = Field([], alias="enabled_plugins")
- disabled_plugins: list[str] = Field([], alias="disabled_plugins")
- enable: bool = Field(True, alias="enable") # 群聊全局机器人是否启用
- config: dict = Field({}, alias="config")
-
-
-class InstalledPlugin(LiteModel):
- TABLE_NAME: str = "installed_plugin"
- module_name: str = Field(str(), alias="module_name")
- version: str = Field(str(), alias="version")
-
-
-class GlobalPlugin(LiteModel):
- TABLE_NAME: str = "global_plugin"
- liteyuki: bool = Field(True, alias="liteyuki") # 是否为LiteYuki插件
- module_name: str = Field(str(), alias="module_name")
- enabled: bool = Field(True, alias="enabled")
-
-
-class StoredConfig(LiteModel):
- TABLE_NAME: str = "stored_config"
- config: dict = {}
-
-
-class TempConfig(LiteModel):
- """储存临时键值对的表"""
- TABLE_NAME: str = "temp_data"
- data: dict = {}
-
-
-def auto_migrate():
- user_db.auto_migrate(User())
- group_db.auto_migrate(Group())
- plugin_db.auto_migrate(InstalledPlugin(), GlobalPlugin())
- common_db.auto_migrate(GlobalPlugin(), StoredConfig(), TempConfig())
-
-
-def set_memory_data(key: str, value) -> None:
- """
- 设置内存数据库的数据,类似于redis
- Args:
- key:
- value:
-
- Returns:
-
- """
- return memory_database.update({
- key: value
- })
-
-
-def get_memory_data(key: str, default=None) -> any:
- """
- 获取内存数据库的数据,类似于redis
- Args:
- key:
- default:
-
- Returns:
-
- """
- return memory_database.get(key, default)
+import os
+
+from pydantic import Field
+
+from .data import Database, LiteModel, Database
+
+DATA_PATH = "data/liteyuki"
+
+user_db: Database = Database(os.path.join(DATA_PATH, "users.ldb"))
+group_db: Database = Database(os.path.join(DATA_PATH, "groups.ldb"))
+plugin_db: Database = Database(os.path.join(DATA_PATH, "plugins.ldb"))
+common_db: Database = Database(os.path.join(DATA_PATH, "common.ldb"))
+
+# 内存数据库,临时用于存储数据
+memory_database = {
+
+}
+
+
+class User(LiteModel):
+ TABLE_NAME: str = "user"
+ user_id: str = Field(str(), alias="user_id")
+ username: str = Field(str(), alias="username")
+ profile: dict[str, str] = Field(dict(), alias="profile")
+ enabled_plugins: list[str] = Field(list(), alias="enabled_plugins")
+ disabled_plugins: list[str] = Field(list(), alias="disabled_plugins")
+
+
+class Group(LiteModel):
+ TABLE_NAME: str = "group_chat"
+ # Group是一个关键字,所以这里用GroupChat
+ group_id: str = Field(str(), alias="group_id")
+ group_name: str = Field(str(), alias="group_name")
+ enabled_plugins: list[str] = Field([], alias="enabled_plugins")
+ disabled_plugins: list[str] = Field([], alias="disabled_plugins")
+ enable: bool = Field(True, alias="enable") # 群聊全局机器人是否启用
+ config: dict = Field({}, alias="config")
+
+
+class InstalledPlugin(LiteModel):
+ TABLE_NAME: str = "installed_plugin"
+ module_name: str = Field(str(), alias="module_name")
+ version: str = Field(str(), alias="version")
+
+
+class GlobalPlugin(LiteModel):
+ TABLE_NAME: str = "global_plugin"
+ liteyuki: bool = Field(True, alias="liteyuki") # 是否为LiteYuki插件
+ module_name: str = Field(str(), alias="module_name")
+ enabled: bool = Field(True, alias="enabled")
+
+
+class StoredConfig(LiteModel):
+ TABLE_NAME: str = "stored_config"
+ config: dict = {}
+
+
+class TempConfig(LiteModel):
+ """储存临时键值对的表"""
+ TABLE_NAME: str = "temp_data"
+ data: dict = {}
+
+
+def auto_migrate():
+ user_db.auto_migrate(User())
+ group_db.auto_migrate(Group())
+ plugin_db.auto_migrate(InstalledPlugin(), GlobalPlugin())
+ common_db.auto_migrate(GlobalPlugin(), StoredConfig(), TempConfig())
+
+
+def set_memory_data(key: str, value) -> None:
+ """
+ 设置内存数据库的数据,类似于redis
+ Args:
+ key:
+ value:
+
+ Returns:
+
+ """
+ return memory_database.update({
+ key: value
+ })
+
+
+def get_memory_data(key: str, default=None) -> any:
+ """
+ 获取内存数据库的数据,类似于redis
+ Args:
+ key:
+ default:
+
+ Returns:
+
+ """
+ return memory_database.get(key, default)
diff --git a/liteyuki/utils/base/language.py b/src/utils/base/language.py
similarity index 96%
rename from liteyuki/utils/base/language.py
rename to src/utils/base/language.py
index a38987d4..fe0319d1 100644
--- a/liteyuki/utils/base/language.py
+++ b/src/utils/base/language.py
@@ -1,216 +1,216 @@
-"""
-语言模块,添加对多语言的支持
-"""
-
-import json
-import locale
-import os
-from typing import Any, overload
-
-import nonebot
-
-from .config import config, get_config
-from .data_manager import User, user_db
-
-_language_data = {
- "en": {
- "name": "English",
- }
-}
-
-_user_lang = {
- "user_id": "zh-CN"
-}
-
-
-def load_from_lang(file_path: str, lang_code: str = None):
- """
- 从lang文件中加载语言数据,用于简单的文本键值对
-
- Args:
- file_path: lang文件路径
- lang_code: 语言代码,如果为None则从文件名中获取
- """
- try:
- if lang_code is None:
- lang_code = os.path.basename(file_path).split(".")[0]
- with open(file_path, "r", encoding="utf-8") as file:
- data = {}
- for line in file:
- line = line.strip()
- if not line or line.startswith("#"): # 空行或注释
- continue
- key, value = line.split("=", 1)
- data[key.strip()] = value.strip()
- if lang_code not in _language_data:
- _language_data[lang_code] = {}
- _language_data[lang_code].update(data)
- nonebot.logger.debug(f"Loaded language data from {file_path}")
- except Exception as e:
- nonebot.logger.error(f"Failed to load language data from {file_path}: {e}")
-
-
-def load_from_json(file_path: str, lang_code: str = None):
- """
- 从json文件中加载语言数据,可以定义一些变量
-
- Args:
- lang_code: 语言代码,如果为None则从文件名中获取
- file_path: json文件路径
- """
- try:
- if lang_code is None:
- lang_code = os.path.basename(file_path).split(".")[0]
- with open(file_path, "r", encoding="utf-8") as file:
- data = json.load(file)
- if lang_code not in _language_data:
- _language_data[lang_code] = {}
- _language_data[lang_code].update(data)
- nonebot.logger.debug(f"Loaded language data from {file_path}")
- except Exception as e:
- nonebot.logger.error(f"Failed to load language data from {file_path}: {e}")
-
-
-def load_from_dir(dir_path: str):
- """
- 从目录中加载语言数据
-
- Args:
- dir_path: 目录路径
- """
- for file in os.listdir(dir_path):
- try:
- file_path = os.path.join(dir_path, file)
- if os.path.isfile(file_path):
- if file.endswith(".lang"):
- load_from_lang(file_path)
- elif file.endswith(".json"):
- load_from_json(file_path)
- except Exception as e:
- nonebot.logger.error(f"Failed to load language data from {file}: {e}")
- continue
-
-
-def load_from_dict(data: dict, lang_code: str):
- """
- 从字典中加载语言数据
-
- Args:
- lang_code: 语言代码
- data: 字典数据
- """
- if lang_code not in _language_data:
- _language_data[lang_code] = {}
- _language_data[lang_code].update(data)
-
-
-class Language:
- # 三重fallback
- # 用户语言 > 默认语言/系统语言 > zh-CN
- def __init__(self, lang_code: str = None, fallback_lang_code: str = None):
- self.lang_code = lang_code
-
- if self.lang_code is None:
- self.lang_code = get_default_lang_code()
-
- self.fallback_lang_code = fallback_lang_code
- if self.fallback_lang_code is None:
- self.fallback_lang_code = config.get("default_language", get_system_lang_code())
-
- def get(self, item: str, *args, **kwargs) -> str | Any:
- """
- 获取当前语言文本,kwargs中的default参数为默认文本
- Args:
- item: 文本键
- *args: 格式化参数
- **kwargs: 格式化参数
-
- Returns:
- str: 当前语言的文本
-
- """
- default = kwargs.pop("default", None)
- fallback = (self.lang_code, self.fallback_lang_code, "zh-CN")
-
- for lang_code in fallback:
- if lang_code in _language_data and item in _language_data[lang_code]:
- trans: str = _language_data[lang_code][item]
- try:
- return trans.format(*args, **kwargs)
- except Exception as e:
- nonebot.logger.warning(f"Failed to format language data: {e}")
- return trans
- return default or item
-
- def get_many(self, *args: str, **kwargs) -> dict[str, str]:
- """
- 获取多个文本
- Args:
- *args: 文本键
- **kwargs: 文本键和默认文本
-
- Returns:
- dict: 多个文本
- """
- args_data = {item: self.get(item) for item in args}
- kwargs_data = {item: self.get(item, default=default) for item, default in kwargs.items()}
- args_data.update(kwargs_data)
- return args_data
-
-
-def change_user_lang(user_id: str, lang_code: str):
- """
- 修改用户的语言,同时储存到数据库和内存中
- """
- user = user_db.where_one(User(), "user_id = ?", user_id, default=User(user_id=user_id))
- user.profile["lang"] = lang_code
- user_db.save(user)
- _user_lang[user_id] = lang_code
-
-
-def get_user_lang(user_id: str) -> Language:
- """
- 获取用户的语言实例,优先从内存中获取
- """
- user_id = str(user_id)
-
- if user_id not in _user_lang:
- nonebot.logger.debug(f"Loading user language for {user_id}")
- user = user_db.where_one(
- User(), "user_id = ?", user_id, default=User(
- user_id=user_id,
- username="Unknown"
- )
- )
- lang_code = user.profile.get("lang", get_default_lang_code())
- _user_lang[user_id] = lang_code
-
- return Language(_user_lang[user_id])
-
-
-def get_system_lang_code() -> str:
- """
- 获取系统语言代码
- """
- return locale.getdefaultlocale()[0].replace('_', '-')
-
-
-def get_default_lang_code() -> str:
- """
- 获取默认语言代码,若没有设置则使用系统语言
- Returns:
-
- """
- return get_config("default_language", default=get_system_lang_code())
-
-
-def get_all_lang() -> dict[str, str]:
- """
- 获取所有语言
- Returns
- {'en': 'English'}
- """
- d = {}
- for key in _language_data:
- d[key] = _language_data[key].get("language.name", key)
- return d
+"""
+语言模块,添加对多语言的支持
+"""
+
+import json
+import locale
+import os
+from typing import Any, overload
+
+import nonebot
+
+from .config import config, get_config
+from .data_manager import User, user_db
+
+_language_data = {
+ "en": {
+ "name": "English",
+ }
+}
+
+_user_lang = {
+ "user_id": "zh-CN"
+}
+
+
+def load_from_lang(file_path: str, lang_code: str = None):
+ """
+ 从lang文件中加载语言数据,用于简单的文本键值对
+
+ Args:
+ file_path: lang文件路径
+ lang_code: 语言代码,如果为None则从文件名中获取
+ """
+ try:
+ if lang_code is None:
+ lang_code = os.path.basename(file_path).split(".")[0]
+ with open(file_path, "r", encoding="utf-8") as file:
+ data = {}
+ for line in file:
+ line = line.strip()
+ if not line or line.startswith("#"): # 空行或注释
+ continue
+ key, value = line.split("=", 1)
+ data[key.strip()] = value.strip()
+ if lang_code not in _language_data:
+ _language_data[lang_code] = {}
+ _language_data[lang_code].update(data)
+ nonebot.logger.debug(f"Loaded language data from {file_path}")
+ except Exception as e:
+ nonebot.logger.error(f"Failed to load language data from {file_path}: {e}")
+
+
+def load_from_json(file_path: str, lang_code: str = None):
+ """
+ 从json文件中加载语言数据,可以定义一些变量
+
+ Args:
+ lang_code: 语言代码,如果为None则从文件名中获取
+ file_path: json文件路径
+ """
+ try:
+ if lang_code is None:
+ lang_code = os.path.basename(file_path).split(".")[0]
+ with open(file_path, "r", encoding="utf-8") as file:
+ data = json.load(file)
+ if lang_code not in _language_data:
+ _language_data[lang_code] = {}
+ _language_data[lang_code].update(data)
+ nonebot.logger.debug(f"Loaded language data from {file_path}")
+ except Exception as e:
+ nonebot.logger.error(f"Failed to load language data from {file_path}: {e}")
+
+
+def load_from_dir(dir_path: str):
+ """
+ 从目录中加载语言数据
+
+ Args:
+ dir_path: 目录路径
+ """
+ for file in os.listdir(dir_path):
+ try:
+ file_path = os.path.join(dir_path, file)
+ if os.path.isfile(file_path):
+ if file.endswith(".lang"):
+ load_from_lang(file_path)
+ elif file.endswith(".json"):
+ load_from_json(file_path)
+ except Exception as e:
+ nonebot.logger.error(f"Failed to load language data from {file}: {e}")
+ continue
+
+
+def load_from_dict(data: dict, lang_code: str):
+ """
+ 从字典中加载语言数据
+
+ Args:
+ lang_code: 语言代码
+ data: 字典数据
+ """
+ if lang_code not in _language_data:
+ _language_data[lang_code] = {}
+ _language_data[lang_code].update(data)
+
+
+class Language:
+ # 三重fallback
+ # 用户语言 > 默认语言/系统语言 > zh-CN
+ def __init__(self, lang_code: str = None, fallback_lang_code: str = None):
+ self.lang_code = lang_code
+
+ if self.lang_code is None:
+ self.lang_code = get_default_lang_code()
+
+ self.fallback_lang_code = fallback_lang_code
+ if self.fallback_lang_code is None:
+ self.fallback_lang_code = config.get("default_language", get_system_lang_code())
+
+ def get(self, item: str, *args, **kwargs) -> str | Any:
+ """
+ 获取当前语言文本,kwargs中的default参数为默认文本
+ Args:
+ item: 文本键
+ *args: 格式化参数
+ **kwargs: 格式化参数
+
+ Returns:
+ str: 当前语言的文本
+
+ """
+ default = kwargs.pop("default", None)
+ fallback = (self.lang_code, self.fallback_lang_code, "zh-CN")
+
+ for lang_code in fallback:
+ if lang_code in _language_data and item in _language_data[lang_code]:
+ trans: str = _language_data[lang_code][item]
+ try:
+ return trans.format(*args, **kwargs)
+ except Exception as e:
+ nonebot.logger.warning(f"Failed to format language data: {e}")
+ return trans
+ return default or item
+
+ def get_many(self, *args: str, **kwargs) -> dict[str, str]:
+ """
+ 获取多个文本
+ Args:
+ *args: 文本键
+ **kwargs: 文本键和默认文本
+
+ Returns:
+ dict: 多个文本
+ """
+ args_data = {item: self.get(item) for item in args}
+ kwargs_data = {item: self.get(item, default=default) for item, default in kwargs.items()}
+ args_data.update(kwargs_data)
+ return args_data
+
+
+def change_user_lang(user_id: str, lang_code: str):
+ """
+ 修改用户的语言,同时储存到数据库和内存中
+ """
+ user = user_db.where_one(User(), "user_id = ?", user_id, default=User(user_id=user_id))
+ user.profile["lang"] = lang_code
+ user_db.save(user)
+ _user_lang[user_id] = lang_code
+
+
+def get_user_lang(user_id: str) -> Language:
+ """
+ 获取用户的语言实例,优先从内存中获取
+ """
+ user_id = str(user_id)
+
+ if user_id not in _user_lang:
+ nonebot.logger.debug(f"Loading user language for {user_id}")
+ user = user_db.where_one(
+ User(), "user_id = ?", user_id, default=User(
+ user_id=user_id,
+ username="Unknown"
+ )
+ )
+ lang_code = user.profile.get("lang", get_default_lang_code())
+ _user_lang[user_id] = lang_code
+
+ return Language(_user_lang[user_id])
+
+
+def get_system_lang_code() -> str:
+ """
+ 获取系统语言代码
+ """
+ return locale.getdefaultlocale()[0].replace('_', '-')
+
+
+def get_default_lang_code() -> str:
+ """
+ 获取默认语言代码,若没有设置则使用系统语言
+ Returns:
+
+ """
+ return get_config("default_language", default=get_system_lang_code())
+
+
+def get_all_lang() -> dict[str, str]:
+ """
+ 获取所有语言
+ Returns
+ {'en': 'English'}
+ """
+ d = {}
+ for key in _language_data:
+ d[key] = _language_data[key].get("language.name", key)
+ return d
diff --git a/liteyuki/utils/base/log.py b/src/utils/base/log.py
similarity index 96%
rename from liteyuki/utils/base/log.py
rename to src/utils/base/log.py
index 3e2b09ab..65362bf6 100644
--- a/liteyuki/utils/base/log.py
+++ b/src/utils/base/log.py
@@ -1,79 +1,79 @@
-import sys
-import loguru
-from typing import TYPE_CHECKING
-from .config import load_from_yaml
-from .language import Language, get_default_lang_code
-
-logger = loguru.logger
-if TYPE_CHECKING:
- # avoid sphinx autodoc resolve annotation failed
- # because loguru module do not have `Logger` class actually
- from loguru import Record
-
-
-def default_filter(record: "Record"):
- """默认的日志过滤器,根据 `config.log_level` 配置改变日志等级。"""
- log_level = record["extra"].get("nonebot_log_level", "INFO")
- levelno = logger.level(log_level).no if isinstance(log_level, str) else log_level
- return record["level"].no >= levelno
-
-
-# DEBUG日志格式
-debug_format: str = (
- "{time:YYYY-MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}.{module}.{function}:{line}> "
- "{message}"
-)
-
-# 默认日志格式
-default_format: str = (
- "{time:MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}> "
- "{message}"
-)
-
-
-def get_format(level: str) -> str:
- if level == "DEBUG":
- return debug_format
- else:
- return default_format
-
-
-logger = loguru.logger.bind()
-
-
-def init_log():
- """
- 在语言加载完成后执行
- Returns:
-
- """
- global logger
-
- config = load_from_yaml("config.yml")
-
- logger.remove()
- logger.add(
- sys.stdout,
- level=0,
- diagnose=False,
- filter=default_filter,
- format=get_format(config.get("log_level", "INFO")),
- )
- show_icon = config.get("log_icon", True)
- lang = Language(get_default_lang_code())
-
- debug = lang.get("log.debug", default="==DEBUG")
- info = lang.get("log.info", default="===INFO")
- success = lang.get("log.success", default="SUCCESS")
- warning = lang.get("log.warning", default="WARNING")
- error = lang.get("log.error", default="==ERROR")
-
- logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}{debug}")
- logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}{info}")
- logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}{success}")
- logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}{warning}")
- logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}{error}")
+import sys
+import loguru
+from typing import TYPE_CHECKING
+from .config import load_from_yaml
+from .language import Language, get_default_lang_code
+
+logger = loguru.logger
+if TYPE_CHECKING:
+ # avoid sphinx autodoc resolve annotation failed
+ # because loguru module do not have `Logger` class actually
+ from loguru import Record
+
+
+def default_filter(record: "Record"):
+ """默认的日志过滤器,根据 `config.log_level` 配置改变日志等级。"""
+ log_level = record["extra"].get("nonebot_log_level", "INFO")
+ levelno = logger.level(log_level).no if isinstance(log_level, str) else log_level
+ return record["level"].no >= levelno
+
+
+# DEBUG日志格式
+debug_format: str = (
+ "{time:YYYY-MM-DD HH:mm:ss} "
+ "[{level.icon}] "
+ "<{name}.{module}.{function}:{line}> "
+ "{message}"
+)
+
+# 默认日志格式
+default_format: str = (
+ "{time:MM-DD HH:mm:ss} "
+ "[{level.icon}] "
+ "<{name}> "
+ "{message}"
+)
+
+
+def get_format(level: str) -> str:
+ if level == "DEBUG":
+ return debug_format
+ else:
+ return default_format
+
+
+logger = loguru.logger.bind()
+
+
+def init_log():
+ """
+ 在语言加载完成后执行
+ Returns:
+
+ """
+ global logger
+
+ config = load_from_yaml("config.yml")
+
+ logger.remove()
+ logger.add(
+ sys.stdout,
+ level=0,
+ diagnose=False,
+ filter=default_filter,
+ format=get_format(config.get("log_level", "INFO")),
+ )
+ show_icon = config.get("log_icon", True)
+ lang = Language(get_default_lang_code())
+
+ debug = lang.get("log.debug", default="==DEBUG")
+ info = lang.get("log.info", default="===INFO")
+ success = lang.get("log.success", default="SUCCESS")
+ warning = lang.get("log.warning", default="WARNING")
+ error = lang.get("log.error", default="==ERROR")
+
+ logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}{debug}")
+ logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}{info}")
+ logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}{success}")
+ logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}{warning}")
+ logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}{error}")
diff --git a/liteyuki/utils/base/ly_api.py b/src/utils/base/ly_api.py
similarity index 97%
rename from liteyuki/utils/base/ly_api.py
rename to src/utils/base/ly_api.py
index 19e123e2..9b8d16d2 100644
--- a/liteyuki/utils/base/ly_api.py
+++ b/src/utils/base/ly_api.py
@@ -1,90 +1,90 @@
-import json
-import os.path
-import platform
-
-import aiohttp
-import nonebot
-import psutil
-import requests
-from aiohttp import FormData
-
-from .. import __VERSION_I__, __VERSION__, __NAME__
-from .config import load_from_yaml
-
-
-class LiteyukiAPI:
- def __init__(self):
- self.liteyuki_id = None
- if os.path.exists("data/liteyuki/liteyuki.json"):
- with open("data/liteyuki/liteyuki.json", "rb") as f:
- self.data = json.loads(f.read())
- self.liteyuki_id = self.data.get("liteyuki_id")
- self.report = load_from_yaml("config.yml").get("auto_report", True)
- if self.report:
- nonebot.logger.info("Auto bug report is enabled")
-
- @property
- def device_info(self) -> dict:
- """
- 获取设备信息
- Returns:
-
- """
- return {
- "name" : __NAME__,
- "version" : __VERSION__,
- "version_i" : __VERSION_I__,
- "python" : f"{platform.python_implementation()} {platform.python_version()}",
- "os" : f"{platform.system()} {platform.version()} {platform.machine()}",
- "cpu" : f"{psutil.cpu_count(logical=False)}c{psutil.cpu_count()}t{psutil.cpu_freq().current}MHz",
- "memory_total": f"{psutil.virtual_memory().total / 1024 / 1024 / 1024:.2f}GB",
- "memory_used" : f"{psutil.virtual_memory().used / 1024 / 1024 / 1024:.2f}GB",
- "memory_bot" : f"{psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024:.2f}MB",
- "disk" : f"{psutil.disk_usage('/').total / 1024 / 1024 / 1024:.2f}GB"
- }
-
- def bug_report(self, content: str):
- """
- 提交bug报告
- Args:
- content:
-
- Returns:
-
- """
- if self.report:
- nonebot.logger.warning(f"Reporting bug...: {content}")
- url = "https://api.liteyuki.icu/bug_report"
- data = {
- "liteyuki_id": self.liteyuki_id,
- "content" : content,
- "device_info": self.device_info
- }
- resp = requests.post(url, json=data)
- if resp.status_code == 200:
- nonebot.logger.success(f"Bug report sent successfully, report_id: {resp.json().get('report_id')}")
- else:
- nonebot.logger.error(f"Bug report failed: {resp.text}")
- else:
- nonebot.logger.warning(f"Bug report is disabled: {content}")
-
- async def heartbeat_report(self):
- """
- 提交心跳,预留接口
- Returns:
-
- """
- url = "https://api.liteyuki.icu/heartbeat"
- data = {
- "liteyuki_id": self.liteyuki_id,
- "version": __VERSION__,
- }
- async with aiohttp.ClientSession() as session:
- async with session.post(url, json=data) as resp:
- if resp.status == 200:
- nonebot.logger.success("Heartbeat sent successfully")
- else:
- nonebot.logger.error(f"Heartbeat failed: {await resp.text()}")
-
-
-liteyuki_api = LiteyukiAPI()
+import json
+import os.path
+import platform
+
+import aiohttp
+import nonebot
+import psutil
+import requests
+from aiohttp import FormData
+
+from .. import __VERSION_I__, __VERSION__, __NAME__
+from .config import load_from_yaml
+
+
+class LiteyukiAPI:
+ def __init__(self):
+ self.liteyuki_id = None
+ if os.path.exists("data/liteyuki/liteyuki.json"):
+ with open("data/liteyuki/liteyuki.json", "rb") as f:
+ self.data = json.loads(f.read())
+ self.liteyuki_id = self.data.get("liteyuki_id")
+ self.report = load_from_yaml("config.yml").get("auto_report", True)
+ if self.report:
+ nonebot.logger.info("Auto bug report is enabled")
+
+ @property
+ def device_info(self) -> dict:
+ """
+ 获取设备信息
+ Returns:
+
+ """
+ return {
+ "name" : __NAME__,
+ "version" : __VERSION__,
+ "version_i" : __VERSION_I__,
+ "python" : f"{platform.python_implementation()} {platform.python_version()}",
+ "os" : f"{platform.system()} {platform.version()} {platform.machine()}",
+ "cpu" : f"{psutil.cpu_count(logical=False)}c{psutil.cpu_count()}t{psutil.cpu_freq().current}MHz",
+ "memory_total": f"{psutil.virtual_memory().total / 1024 / 1024 / 1024:.2f}GB",
+ "memory_used" : f"{psutil.virtual_memory().used / 1024 / 1024 / 1024:.2f}GB",
+ "memory_bot" : f"{psutil.Process(os.getpid()).memory_info().rss / 1024 / 1024:.2f}MB",
+ "disk" : f"{psutil.disk_usage('/').total / 1024 / 1024 / 1024:.2f}GB"
+ }
+
+ def bug_report(self, content: str):
+ """
+ 提交bug报告
+ Args:
+ content:
+
+ Returns:
+
+ """
+ if self.report:
+ nonebot.logger.warning(f"Reporting bug...: {content}")
+ url = "https://api.liteyuki.icu/bug_report"
+ data = {
+ "liteyuki_id": self.liteyuki_id,
+ "content" : content,
+ "device_info": self.device_info
+ }
+ resp = requests.post(url, json=data)
+ if resp.status_code == 200:
+ nonebot.logger.success(f"Bug report sent successfully, report_id: {resp.json().get('report_id')}")
+ else:
+ nonebot.logger.error(f"Bug report failed: {resp.text}")
+ else:
+ nonebot.logger.warning(f"Bug report is disabled: {content}")
+
+ async def heartbeat_report(self):
+ """
+ 提交心跳,预留接口
+ Returns:
+
+ """
+ url = "https://api.liteyuki.icu/heartbeat"
+ data = {
+ "liteyuki_id": self.liteyuki_id,
+ "version": __VERSION__,
+ }
+ async with aiohttp.ClientSession() as session:
+ async with session.post(url, json=data) as resp:
+ if resp.status == 200:
+ nonebot.logger.success("Heartbeat sent successfully")
+ else:
+ nonebot.logger.error(f"Heartbeat failed: {await resp.text()}")
+
+
+liteyuki_api = LiteyukiAPI()
diff --git a/liteyuki/utils/base/ly_function.py b/src/utils/base/ly_function.py
similarity index 96%
rename from liteyuki/utils/base/ly_function.py
rename to src/utils/base/ly_function.py
index 73084615..f97a508c 100644
--- a/liteyuki/utils/base/ly_function.py
+++ b/src/utils/base/ly_function.py
@@ -1,197 +1,197 @@
-"""
-liteyuki function是一种类似于mcfunction的函数,用于在liteyuki中实现一些功能,例如自定义指令等,也可与Python函数绑定
-使用 /function function_name *args **kwargs来调用
-例如 /function test/hello user_id=123456
-可以用于一些轻量级插件的编写,无需Python代码
-SnowyKami
-"""
-import asyncio
-import functools
-# cmd *args **kwargs
-# api api_name **kwargs
-import os
-from typing import Any, Awaitable, Callable, Coroutine
-
-import nonebot
-from nonebot import Bot
-from nonebot.adapters.satori import bot
-from nonebot.internal.matcher import Matcher
-
-ly_function_extensions = (
- "lyf",
- "lyfunction",
- "mcfunction"
-)
-
-loaded_functions = dict()
-
-
-class LiteyukiFunction:
- def __init__(self, name: str):
- self.name = name
- self.functions: list[str] = list()
- self.bot: Bot = None
- self.kwargs_data = dict()
- self.args_data = list()
- self.matcher: Matcher = None
- self.end = False
-
- self.sub_tasks: list[asyncio.Task] = list()
-
- async def __call__(self, *args, **kwargs):
- self.kwargs_data.update(kwargs)
- self.args_data = list(set(self.args_data + list(args)))
- for i, cmd in enumerate(self.functions):
- r = await self.execute_line(cmd, i, *args, **kwargs)
- if r == 0:
- msg = f"End function {self.name} by line {i}"
- nonebot.logger.debug(msg)
- for task in self.sub_tasks:
- task.cancel(msg)
- return
-
- def __str__(self):
- return f"LiteyukiFunction({self.name})"
-
- def __repr__(self):
- return self.__str__()
-
- async def execute_line(self, cmd: str, line: int = 0, *args, **kwargs) -> Any:
- """
- 解析一行轻雪函数
- Args:
- cmd: 命令
- line: 行数
- Returns:
- """
-
- try:
- if "${" in cmd:
- # 此种情况下,{}内容不用管,只对${}内的内容进行format
- for i in range(len(cmd) - 1):
- if cmd[i] == "$" and cmd[i + 1] == "{":
- end = cmd.find("}", i)
- key = cmd[i + 2:end]
- cmd = cmd.replace(f"${{{key}}}", str(self.kwargs_data.get(key, "")))
- else:
- cmd = cmd.format(*self.args_data, **self.kwargs_data)
- except Exception as e:
- pass
-
- no_head = cmd.split(" ", 1)[1] if len(cmd.split(" ")) > 1 else ""
- try:
- head, cmd_args, cmd_kwargs = self.get_args(cmd)
- except Exception as e:
- error_msg = f"Parsing error in {self.name} at line {line}: {e}"
- nonebot.logger.error(error_msg)
- await self.matcher.send(error_msg)
- return
-
- if head == "var":
- # 变量定义
- self.kwargs_data.update(cmd_kwargs)
-
- elif head == "cmd":
- # 在当前计算机上执行命令
- os.system(no_head)
-
- elif head == "api":
- # 调用Bot API 需要Bot实例
- await self.bot.call_api(cmd_args[1], **cmd_kwargs)
-
- elif head == "function":
- # 调用轻雪函数
- func = get_function(cmd_args[1])
- func.bot = self.bot
- func.matcher = self.matcher
- await func(*cmd_args[2:], **cmd_kwargs)
-
- elif head == "sleep":
- # 等待一段时间
- await asyncio.sleep(float(cmd_args[1]))
-
- elif head == "nohup":
- # 挂起运行
- task = asyncio.create_task(self.execute_line(no_head))
- self.sub_tasks.append(task)
-
- elif head == "end":
- # 结束所有函数
- self.end = True
- return 0
-
-
- elif head == "await":
- # 等待所有协程执行完毕
- await asyncio.gather(*self.sub_tasks)
-
- def get_args(self, line: str) -> tuple[str, tuple[str, ...], dict[str, Any]]:
- """
- 获取参数
- Args:
- line: 命令
- Returns:
- 命令头 参数 关键字
- """
- line = line.replace("\\=", "EQUAL_SIGN")
- head = ""
- args = list()
- kwargs = dict()
- for i, arg in enumerate(line.split(" ")):
- if "=" in arg:
- key, value = arg.split("=", 1)
- value = value.replace("EQUAL_SIGN", "=")
- try:
- value = eval(value)
- except:
- value = self.kwargs_data.get(value, value)
- kwargs[key] = value
- else:
- if i == 0:
- head = arg
- args.append(arg)
- return head, tuple(args), kwargs
-
-
-def get_function(name: str) -> LiteyukiFunction | None:
- """
- 获取一个轻雪函数
- Args:
- name: 函数名
- Returns:
- """
- return loaded_functions.get(name)
-
-
-def load_from_dir(path: str):
- """
- 从目录及其子目录中递归加载所有轻雪函数,类似mcfunction
-
- Args:
- path: 目录路径
- """
- for f in os.listdir(path):
- f = os.path.join(path, f)
- if os.path.isfile(f):
- if f.endswith(ly_function_extensions):
- load_from_file(f)
- if os.path.isdir(f):
- load_from_dir(f)
-
-
-def load_from_file(path: str):
- """
- 从文件中加载轻雪函数
- Args:
- path:
- Returns:
- """
- with open(path, "r", encoding="utf-8") as f:
- name = ".".join(os.path.basename(path).split(".")[:-1])
- func = LiteyukiFunction(name)
- for i, line in enumerate(f.read().split("\n")):
- if line.startswith("#") or line.strip() == "":
- continue
- func.functions.append(line)
- loaded_functions[name] = func
- nonebot.logger.debug(f"Loaded function {name}")
+"""
+liteyuki function是一种类似于mcfunction的函数,用于在liteyuki中实现一些功能,例如自定义指令等,也可与Python函数绑定
+使用 /function function_name *args **kwargs来调用
+例如 /function test/hello user_id=123456
+可以用于一些轻量级插件的编写,无需Python代码
+SnowyKami
+"""
+import asyncio
+import functools
+# cmd *args **kwargs
+# api api_name **kwargs
+import os
+from typing import Any, Awaitable, Callable, Coroutine
+
+import nonebot
+from nonebot import Bot
+from nonebot.adapters.satori import bot
+from nonebot.internal.matcher import Matcher
+
+ly_function_extensions = (
+ "lyf",
+ "lyfunction",
+ "mcfunction"
+)
+
+loaded_functions = dict()
+
+
+class LiteyukiFunction:
+ def __init__(self, name: str):
+ self.name = name
+ self.functions: list[str] = list()
+ self.bot: Bot = None
+ self.kwargs_data = dict()
+ self.args_data = list()
+ self.matcher: Matcher = None
+ self.end = False
+
+ self.sub_tasks: list[asyncio.Task] = list()
+
+ async def __call__(self, *args, **kwargs):
+ self.kwargs_data.update(kwargs)
+ self.args_data = list(set(self.args_data + list(args)))
+ for i, cmd in enumerate(self.functions):
+ r = await self.execute_line(cmd, i, *args, **kwargs)
+ if r == 0:
+ msg = f"End function {self.name} by line {i}"
+ nonebot.logger.debug(msg)
+ for task in self.sub_tasks:
+ task.cancel(msg)
+ return
+
+ def __str__(self):
+ return f"LiteyukiFunction({self.name})"
+
+ def __repr__(self):
+ return self.__str__()
+
+ async def execute_line(self, cmd: str, line: int = 0, *args, **kwargs) -> Any:
+ """
+ 解析一行轻雪函数
+ Args:
+ cmd: 命令
+ line: 行数
+ Returns:
+ """
+
+ try:
+ if "${" in cmd:
+ # 此种情况下,{}内容不用管,只对${}内的内容进行format
+ for i in range(len(cmd) - 1):
+ if cmd[i] == "$" and cmd[i + 1] == "{":
+ end = cmd.find("}", i)
+ key = cmd[i + 2:end]
+ cmd = cmd.replace(f"${{{key}}}", str(self.kwargs_data.get(key, "")))
+ else:
+ cmd = cmd.format(*self.args_data, **self.kwargs_data)
+ except Exception as e:
+ pass
+
+ no_head = cmd.split(" ", 1)[1] if len(cmd.split(" ")) > 1 else ""
+ try:
+ head, cmd_args, cmd_kwargs = self.get_args(cmd)
+ except Exception as e:
+ error_msg = f"Parsing error in {self.name} at line {line}: {e}"
+ nonebot.logger.error(error_msg)
+ await self.matcher.send(error_msg)
+ return
+
+ if head == "var":
+ # 变量定义
+ self.kwargs_data.update(cmd_kwargs)
+
+ elif head == "cmd":
+ # 在当前计算机上执行命令
+ os.system(no_head)
+
+ elif head == "api":
+ # 调用Bot API 需要Bot实例
+ await self.bot.call_api(cmd_args[1], **cmd_kwargs)
+
+ elif head == "function":
+ # 调用轻雪函数
+ func = get_function(cmd_args[1])
+ func.bot = self.bot
+ func.matcher = self.matcher
+ await func(*cmd_args[2:], **cmd_kwargs)
+
+ elif head == "sleep":
+ # 等待一段时间
+ await asyncio.sleep(float(cmd_args[1]))
+
+ elif head == "nohup":
+ # 挂起运行
+ task = asyncio.create_task(self.execute_line(no_head))
+ self.sub_tasks.append(task)
+
+ elif head == "end":
+ # 结束所有函数
+ self.end = True
+ return 0
+
+
+ elif head == "await":
+ # 等待所有协程执行完毕
+ await asyncio.gather(*self.sub_tasks)
+
+ def get_args(self, line: str) -> tuple[str, tuple[str, ...], dict[str, Any]]:
+ """
+ 获取参数
+ Args:
+ line: 命令
+ Returns:
+ 命令头 参数 关键字
+ """
+ line = line.replace("\\=", "EQUAL_SIGN")
+ head = ""
+ args = list()
+ kwargs = dict()
+ for i, arg in enumerate(line.split(" ")):
+ if "=" in arg:
+ key, value = arg.split("=", 1)
+ value = value.replace("EQUAL_SIGN", "=")
+ try:
+ value = eval(value)
+ except:
+ value = self.kwargs_data.get(value, value)
+ kwargs[key] = value
+ else:
+ if i == 0:
+ head = arg
+ args.append(arg)
+ return head, tuple(args), kwargs
+
+
+def get_function(name: str) -> LiteyukiFunction | None:
+ """
+ 获取一个轻雪函数
+ Args:
+ name: 函数名
+ Returns:
+ """
+ return loaded_functions.get(name)
+
+
+def load_from_dir(path: str):
+ """
+ 从目录及其子目录中递归加载所有轻雪函数,类似mcfunction
+
+ Args:
+ path: 目录路径
+ """
+ for f in os.listdir(path):
+ f = os.path.join(path, f)
+ if os.path.isfile(f):
+ if f.endswith(ly_function_extensions):
+ load_from_file(f)
+ if os.path.isdir(f):
+ load_from_dir(f)
+
+
+def load_from_file(path: str):
+ """
+ 从文件中加载轻雪函数
+ Args:
+ path:
+ Returns:
+ """
+ with open(path, "r", encoding="utf-8") as f:
+ name = ".".join(os.path.basename(path).split(".")[:-1])
+ func = LiteyukiFunction(name)
+ for i, line in enumerate(f.read().split("\n")):
+ if line.startswith("#") or line.strip() == "":
+ continue
+ func.functions.append(line)
+ loaded_functions[name] = func
+ nonebot.logger.debug(f"Loaded function {name}")
diff --git a/liteyuki/utils/base/ly_typing.py b/src/utils/base/ly_typing.py
similarity index 98%
rename from liteyuki/utils/base/ly_typing.py
rename to src/utils/base/ly_typing.py
index 31242e18..bbda42e4 100644
--- a/liteyuki/utils/base/ly_typing.py
+++ b/src/utils/base/ly_typing.py
@@ -1,8 +1,8 @@
-from nonebot.adapters.onebot import v11, v12
-from nonebot.adapters import satori
-
-T_Bot = v11.Bot | v12.Bot | satori.Bot
-T_GroupMessageEvent = v11.GroupMessageEvent | v12.GroupMessageEvent
-T_PrivateMessageEvent = v11.PrivateMessageEvent | v12.PrivateMessageEvent
-T_MessageEvent = v11.MessageEvent | v12.MessageEvent | satori.MessageEvent
-T_Message = v11.Message | v12.Message | satori.Message
+from nonebot.adapters.onebot import v11, v12
+from nonebot.adapters import satori
+
+T_Bot = v11.Bot | v12.Bot | satori.Bot
+T_GroupMessageEvent = v11.GroupMessageEvent | v12.GroupMessageEvent
+T_PrivateMessageEvent = v11.PrivateMessageEvent | v12.PrivateMessageEvent
+T_MessageEvent = v11.MessageEvent | v12.MessageEvent | satori.MessageEvent
+T_Message = v11.Message | v12.Message | satori.Message
diff --git a/liteyuki/utils/base/permission.py b/src/utils/base/permission.py
similarity index 95%
rename from liteyuki/utils/base/permission.py
rename to src/utils/base/permission.py
index 581e88c9..8626ac3e 100644
--- a/liteyuki/utils/base/permission.py
+++ b/src/utils/base/permission.py
@@ -1,5 +1,5 @@
-from nonebot.adapters.onebot import v11
-
-GROUP_ADMIN = v11.GROUP_ADMIN
-GROUP_OWNER = v11.GROUP_OWNER
-
+from nonebot.adapters.onebot import v11
+
+GROUP_ADMIN = v11.GROUP_ADMIN
+GROUP_OWNER = v11.GROUP_OWNER
+
diff --git a/liteyuki/utils/base/reloader.py b/src/utils/base/reloader.py
similarity index 96%
rename from liteyuki/utils/base/reloader.py
rename to src/utils/base/reloader.py
index 2b90dd94..6b27342d 100644
--- a/liteyuki/utils/base/reloader.py
+++ b/src/utils/base/reloader.py
@@ -1,61 +1,61 @@
-import threading
-from multiprocessing import get_context
-
-import nonebot
-from nonebot import logger
-
-reboot_grace_time_limit: int = 20
-
-_nb_run = nonebot.run
-
-
-class Reloader:
- event: threading.Event = None
-
- @classmethod
- def reload(cls, delay: int = 0):
- if cls.event is None:
- raise RuntimeError()
- if delay > 0:
- threading.Timer(delay, function=cls.event.set).start()
- return
- cls.event.set()
-
-
-def _run(ev: threading.Event, *args, **kwargs):
- Reloader.event = ev
- _nb_run(*args, **kwargs)
-
-
-def run(*args, **kwargs):
- should_exit = False
- ctx = get_context("spawn")
- while not should_exit:
- event = ctx.Event()
- process = ctx.Process(
- target=_run,
- args=(
- event,
- *args,
- ),
- kwargs=kwargs,
- )
- process.start()
- while not should_exit:
- if event.wait(1):
- logger.info("Receive reboot event")
- process.terminate()
- process.join(reboot_grace_time_limit)
- if process.is_alive():
- logger.warning(
- f"Cannot shutdown gracefully in {reboot_grace_time_limit} second, force kill process."
- )
- process.kill()
- break
- elif process.is_alive():
- continue
- else:
- should_exit = True
-
-
-nonebot.run = run
+import threading
+from multiprocessing import get_context
+
+import nonebot
+from nonebot import logger
+
+reboot_grace_time_limit: int = 20
+
+_nb_run = nonebot.run
+
+
+class Reloader:
+ event: threading.Event = None
+
+ @classmethod
+ def reload(cls, delay: int = 0):
+ if cls.event is None:
+ raise RuntimeError()
+ if delay > 0:
+ threading.Timer(delay, function=cls.event.set).start()
+ return
+ cls.event.set()
+
+
+def _run(ev: threading.Event, *args, **kwargs):
+ Reloader.event = ev
+ _nb_run(*args, **kwargs)
+
+
+def run(*args, **kwargs):
+ should_exit = False
+ ctx = get_context("spawn")
+ while not should_exit:
+ event = ctx.Event()
+ process = ctx.Process(
+ target=_run,
+ args=(
+ event,
+ *args,
+ ),
+ kwargs=kwargs,
+ )
+ process.start()
+ while not should_exit:
+ if event.wait(1):
+ logger.info("Receive reboot event")
+ process.terminate()
+ process.join(reboot_grace_time_limit)
+ if process.is_alive():
+ logger.warning(
+ f"Cannot shutdown gracefully in {reboot_grace_time_limit} second, force kill process."
+ )
+ process.kill()
+ break
+ elif process.is_alive():
+ continue
+ else:
+ should_exit = True
+
+
+nonebot.run = run
diff --git a/liteyuki/utils/base/resource.py b/src/utils/base/resource.py
similarity index 94%
rename from liteyuki/utils/base/resource.py
rename to src/utils/base/resource.py
index f68f3efc..717ac415 100644
--- a/liteyuki/utils/base/resource.py
+++ b/src/utils/base/resource.py
@@ -1,260 +1,260 @@
-import json
-import os
-import shutil
-import zipfile
-from typing import Any
-
-import nonebot
-import yaml
-
-from .data import LiteModel
-from .language import Language, get_default_lang_code
-from .ly_function import loaded_functions
-
-_loaded_resource_packs: list["ResourceMetadata"] = [] # 按照加载顺序排序
-temp_resource_root = "data/liteyuki/resources"
-temp_extract_root = "data/liteyuki/temp"
-lang = Language(get_default_lang_code())
-
-
-class ResourceMetadata(LiteModel):
- name: str = "Unknown"
- version: str = "0.0.1"
- description: str = "Unknown"
- path: str = ""
- folder: str = ""
-
-
-def load_resource_from_dir(path: str):
- """
- 把资源包按照文件相对路径复制到运行临时文件夹data/liteyuki/resources
- Args:
- path: 资源文件夹
- Returns:
- """
- if os.path.exists(os.path.join(path, "metadata.yml")):
- with open(os.path.join(path, "metadata.yml"), "r", encoding="utf-8") as f:
- metadata = yaml.safe_load(f)
- elif os.path.isfile(path) and path.endswith(".zip"):
- # zip文件
- # 临时解压并读取metadata.yml
- with zipfile.ZipFile(path, "r") as zip_ref:
- # 解压至临时目录 data/liteyuki/temp/{pack_name}.zip
- zip_ref.extractall(os.path.join(temp_extract_root, os.path.basename(path)))
- with zip_ref.open("metadata.yml") as f:
- metadata = yaml.safe_load(f)
- path = os.path.join(temp_extract_root, os.path.basename(path))
- else:
- # 没有metadata.yml文件,不是一个资源包
- return
- for root, dirs, files in os.walk(path):
- for file in files:
- relative_path = os.path.relpath(os.path.join(root, file), path)
- copy_file(os.path.join(root, file), os.path.join(temp_resource_root, relative_path))
- metadata["path"] = path
- metadata["folder"] = os.path.basename(path)
-
- if os.path.exists(os.path.join(path, "lang")):
- # 加载语言
- from liteyuki.utils.base.language import load_from_dir
- load_from_dir(os.path.join(path, "lang"))
-
- if os.path.exists(os.path.join(path, "functions")):
- # 加载功能
- from liteyuki.utils.base.ly_function import load_from_dir
- load_from_dir(os.path.join(path, "functions"))
-
- if os.path.exists(os.path.join(path, "word_bank")):
- # 加载词库
- from liteyuki.utils.base.word_bank import load_from_dir
- load_from_dir(os.path.join(path, "word_bank"))
-
- _loaded_resource_packs.insert(0, ResourceMetadata(**metadata))
-
-
-def get_path(path: str, abs_path: bool = True, default: Any = None, debug: bool = False) -> str | Any:
- """
- 获取资源包中的文件
- Args:
- debug: 启用调试,每次都会先重载资源
- abs_path: 是否返回绝对路径
- default: 默认
- path: 文件相对路径
- Returns: 文件绝对路径
- """
- if debug:
- nonebot.logger.debug("Enable resource debug, Reloading resources")
- load_resources()
- resource_relative_path = os.path.join(temp_resource_root, path)
- if os.path.exists(resource_relative_path):
- return os.path.abspath(resource_relative_path) if abs_path else resource_relative_path
- else:
- return default
-
-
-def get_files(path: str, abs_path: bool = False) -> list[str]:
- """
- 获取资源包中一个文件夹的所有文件
- Args:
- abs_path:
- path: 文件夹相对路径
- Returns: 文件绝对路径
- """
- resource_relative_path = os.path.join(temp_resource_root, path)
- if os.path.exists(resource_relative_path):
- return [os.path.abspath(os.path.join(resource_relative_path, file)) if abs_path else os.path.join(resource_relative_path, file) for file in
- os.listdir(resource_relative_path)]
- else:
- return []
-
-
-def get_loaded_resource_packs() -> list[ResourceMetadata]:
- """
- 获取已加载的资源包,优先级从前到后
- Returns: 资源包列表
- """
- return _loaded_resource_packs
-
-
-def copy_file(src, dst):
- # 获取目标文件的目录
- dst_dir = os.path.dirname(dst)
- # 如果目标目录不存在,创建它
- if not os.path.exists(dst_dir):
- os.makedirs(dst_dir)
- # 复制文件
- shutil.copy(src, dst)
-
-
-def load_resources():
- """用于外部主程序调用的资源加载函数
- Returns:
- """
- # 加载默认资源和语言
- # 清空临时资源包路径data/liteyuki/resources
- _loaded_resource_packs.clear()
- loaded_functions.clear()
- if os.path.exists(temp_resource_root):
- shutil.rmtree(temp_resource_root)
- os.makedirs(temp_resource_root, exist_ok=True)
-
- # 加载内置资源
- standard_resources_path = "liteyuki/resources"
- for resource_dir in os.listdir(standard_resources_path):
- load_resource_from_dir(os.path.join(standard_resources_path, resource_dir))
-
- # 加载其他资源包
- if not os.path.exists("resources"):
- os.makedirs("resources", exist_ok=True)
-
- if not os.path.exists("resources/index.json"):
- json.dump([], open("resources/index.json", "w", encoding="utf-8"))
-
- resource_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
- resource_index.reverse() # 优先级高的后加载,但是排在前面
- for resource in resource_index:
- load_resource_from_dir(os.path.join("resources", resource))
-
-
-def check_status(name: str) -> bool:
- """
- 检查资源包是否已加载
- Args:
- name: 资源包名称,文件夹名
- Returns: 是否已加载
- """
- return name in [rp.folder for rp in get_loaded_resource_packs()]
-
-
-def check_exist(name: str) -> bool:
- """
- 检查资源包文件夹是否存在于resources文件夹
- Args:
- name: 资源包名称,文件夹名
- Returns: 是否存在
- """
- path = os.path.join("resources", name)
- return os.path.exists(os.path.join(path, "metadata.yml")) or (os.path.isfile(path) and name.endswith(".zip"))
-
-
-def add_resource_pack(name: str) -> bool:
- """
- 添加资源包,该操作仅修改index.json文件,不会加载资源包,要生效请重载资源
- Args:
- name: 资源包名称,文件夹名
- Returns:
- """
- if check_exist(name):
- old_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
- if name not in old_index:
- old_index.append(name)
- json.dump(old_index, open("resources/index.json", "w", encoding="utf-8"))
- load_resource_from_dir(os.path.join("resources", name))
- return True
- else:
- nonebot.logger.warning(lang.get("liteyuki.resource_loaded", name=name))
- return False
- else:
- nonebot.logger.warning(lang.get("liteyuki.resource_not_exist", name=name))
- return False
-
-
-def remove_resource_pack(name: str) -> bool:
- """
- 移除资源包,该操作仅修改加载索引,要生效请重载资源
- Args:
- name: 资源包名称,文件夹名
- Returns:
- """
- if check_exist(name):
- old_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
- if name in old_index:
- old_index.remove(name)
- json.dump(old_index, open("resources/index.json", "w", encoding="utf-8"))
- return True
- else:
- nonebot.logger.warning(lang.get("liteyuki.resource_not_loaded", name=name))
- return False
- else:
- nonebot.logger.warning(lang.get("liteyuki.resource_not_exist", name=name))
- return False
-
-
-def change_priority(name: str, delta: int) -> bool:
- """
- 修改资源包优先级
- Args:
- name: 资源包名称,文件夹名
- delta: 优先级变化,正数表示后移,负数表示前移,0表示移到最前
- Returns:
- """
- # 正数表示前移,负数表示后移
- old_resource_list: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
- new_resource_list = old_resource_list.copy()
- if name in old_resource_list:
- index = old_resource_list.index(name)
- if 0 <= index + delta < len(old_resource_list):
- new_index = index + delta
- new_resource_list.remove(name)
- new_resource_list.insert(new_index, name)
- json.dump(new_resource_list, open("resources/index.json", "w", encoding="utf-8"))
- return True
- else:
- nonebot.logger.warning("Priority change failed, out of range")
- return False
- else:
- nonebot.logger.debug("Priority change failed, resource not loaded")
- return False
-
-
-def get_resource_metadata(name: str) -> ResourceMetadata:
- """
- 获取资源包元数据
- Args:
- name: 资源包名称,文件夹名
- Returns:
- """
- for rp in get_loaded_resource_packs():
- if rp.folder == name:
- return rp
- return ResourceMetadata()
+import json
+import os
+import shutil
+import zipfile
+from typing import Any
+
+import nonebot
+import yaml
+
+from .data import LiteModel
+from .language import Language, get_default_lang_code
+from .ly_function import loaded_functions
+
+_loaded_resource_packs: list["ResourceMetadata"] = [] # 按照加载顺序排序
+temp_resource_root = "data/liteyuki/resources"
+temp_extract_root = "data/liteyuki/temp"
+lang = Language(get_default_lang_code())
+
+
+class ResourceMetadata(LiteModel):
+ name: str = "Unknown"
+ version: str = "0.0.1"
+ description: str = "Unknown"
+ path: str = ""
+ folder: str = ""
+
+
+def load_resource_from_dir(path: str):
+ """
+ 把资源包按照文件相对路径复制到运行临时文件夹data/liteyuki/resources
+ Args:
+ path: 资源文件夹
+ Returns:
+ """
+ if os.path.exists(os.path.join(path, "metadata.yml")):
+ with open(os.path.join(path, "metadata.yml"), "r", encoding="utf-8") as f:
+ metadata = yaml.safe_load(f)
+ elif os.path.isfile(path) and path.endswith(".zip"):
+ # zip文件
+ # 临时解压并读取metadata.yml
+ with zipfile.ZipFile(path, "r") as zip_ref:
+ # 解压至临时目录 data/liteyuki/temp/{pack_name}.zip
+ zip_ref.extractall(os.path.join(temp_extract_root, os.path.basename(path)))
+ with zip_ref.open("metadata.yml") as f:
+ metadata = yaml.safe_load(f)
+ path = os.path.join(temp_extract_root, os.path.basename(path))
+ else:
+ # 没有metadata.yml文件,不是一个资源包
+ return
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ relative_path = os.path.relpath(os.path.join(root, file), path)
+ copy_file(os.path.join(root, file), os.path.join(temp_resource_root, relative_path))
+ metadata["path"] = path
+ metadata["folder"] = os.path.basename(path)
+
+ if os.path.exists(os.path.join(path, "lang")):
+ # 加载语言
+ from src.utils.base.language import load_from_dir
+ load_from_dir(os.path.join(path, "lang"))
+
+ if os.path.exists(os.path.join(path, "functions")):
+ # 加载功能
+ from src.utils.base.ly_function import load_from_dir
+ load_from_dir(os.path.join(path, "functions"))
+
+ if os.path.exists(os.path.join(path, "word_bank")):
+ # 加载词库
+ from src.utils.base.word_bank import load_from_dir
+ load_from_dir(os.path.join(path, "word_bank"))
+
+ _loaded_resource_packs.insert(0, ResourceMetadata(**metadata))
+
+
+def get_path(path: str, abs_path: bool = True, default: Any = None, debug: bool = False) -> str | Any:
+ """
+ 获取资源包中的文件
+ Args:
+ debug: 启用调试,每次都会先重载资源
+ abs_path: 是否返回绝对路径
+ default: 默认
+ path: 文件相对路径
+ Returns: 文件绝对路径
+ """
+ if debug:
+ nonebot.logger.debug("Enable resource debug, Reloading resources")
+ load_resources()
+ resource_relative_path = os.path.join(temp_resource_root, path)
+ if os.path.exists(resource_relative_path):
+ return os.path.abspath(resource_relative_path) if abs_path else resource_relative_path
+ else:
+ return default
+
+
+def get_files(path: str, abs_path: bool = False) -> list[str]:
+ """
+ 获取资源包中一个文件夹的所有文件
+ Args:
+ abs_path:
+ path: 文件夹相对路径
+ Returns: 文件绝对路径
+ """
+ resource_relative_path = os.path.join(temp_resource_root, path)
+ if os.path.exists(resource_relative_path):
+ return [os.path.abspath(os.path.join(resource_relative_path, file)) if abs_path else os.path.join(resource_relative_path, file) for file in
+ os.listdir(resource_relative_path)]
+ else:
+ return []
+
+
+def get_loaded_resource_packs() -> list[ResourceMetadata]:
+ """
+ 获取已加载的资源包,优先级从前到后
+ Returns: 资源包列表
+ """
+ return _loaded_resource_packs
+
+
+def copy_file(src, dst):
+ # 获取目标文件的目录
+ dst_dir = os.path.dirname(dst)
+ # 如果目标目录不存在,创建它
+ if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+ # 复制文件
+ shutil.copy(src, dst)
+
+
+def load_resources():
+ """用于外部主程序调用的资源加载函数
+ Returns:
+ """
+ # 加载默认资源和语言
+ # 清空临时资源包路径data/liteyuki/resources
+ _loaded_resource_packs.clear()
+ loaded_functions.clear()
+ if os.path.exists(temp_resource_root):
+ shutil.rmtree(temp_resource_root)
+ os.makedirs(temp_resource_root, exist_ok=True)
+
+ # 加载内置资源
+ standard_resources_path = "src/resources"
+ for resource_dir in os.listdir(standard_resources_path):
+ load_resource_from_dir(os.path.join(standard_resources_path, resource_dir))
+
+ # 加载其他资源包
+ if not os.path.exists("resources"):
+ os.makedirs("resources", exist_ok=True)
+
+ if not os.path.exists("resources/index.json"):
+ json.dump([], open("resources/index.json", "w", encoding="utf-8"))
+
+ resource_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
+ resource_index.reverse() # 优先级高的后加载,但是排在前面
+ for resource in resource_index:
+ load_resource_from_dir(os.path.join("resources", resource))
+
+
+def check_status(name: str) -> bool:
+ """
+ 检查资源包是否已加载
+ Args:
+ name: 资源包名称,文件夹名
+ Returns: 是否已加载
+ """
+ return name in [rp.folder for rp in get_loaded_resource_packs()]
+
+
+def check_exist(name: str) -> bool:
+ """
+ 检查资源包文件夹是否存在于resources文件夹
+ Args:
+ name: 资源包名称,文件夹名
+ Returns: 是否存在
+ """
+ path = os.path.join("resources", name)
+ return os.path.exists(os.path.join(path, "metadata.yml")) or (os.path.isfile(path) and name.endswith(".zip"))
+
+
+def add_resource_pack(name: str) -> bool:
+ """
+ 添加资源包,该操作仅修改index.json文件,不会加载资源包,要生效请重载资源
+ Args:
+ name: 资源包名称,文件夹名
+ Returns:
+ """
+ if check_exist(name):
+ old_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
+ if name not in old_index:
+ old_index.append(name)
+ json.dump(old_index, open("resources/index.json", "w", encoding="utf-8"))
+ load_resource_from_dir(os.path.join("resources", name))
+ return True
+ else:
+ nonebot.logger.warning(lang.get("liteyuki.resource_loaded", name=name))
+ return False
+ else:
+ nonebot.logger.warning(lang.get("liteyuki.resource_not_exist", name=name))
+ return False
+
+
+def remove_resource_pack(name: str) -> bool:
+ """
+ 移除资源包,该操作仅修改加载索引,要生效请重载资源
+ Args:
+ name: 资源包名称,文件夹名
+ Returns:
+ """
+ if check_exist(name):
+ old_index: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
+ if name in old_index:
+ old_index.remove(name)
+ json.dump(old_index, open("resources/index.json", "w", encoding="utf-8"))
+ return True
+ else:
+ nonebot.logger.warning(lang.get("liteyuki.resource_not_loaded", name=name))
+ return False
+ else:
+ nonebot.logger.warning(lang.get("liteyuki.resource_not_exist", name=name))
+ return False
+
+
+def change_priority(name: str, delta: int) -> bool:
+ """
+ 修改资源包优先级
+ Args:
+ name: 资源包名称,文件夹名
+ delta: 优先级变化,正数表示后移,负数表示前移,0表示移到最前
+ Returns:
+ """
+ # 正数表示前移,负数表示后移
+ old_resource_list: list[str] = json.load(open("resources/index.json", "r", encoding="utf-8"))
+ new_resource_list = old_resource_list.copy()
+ if name in old_resource_list:
+ index = old_resource_list.index(name)
+ if 0 <= index + delta < len(old_resource_list):
+ new_index = index + delta
+ new_resource_list.remove(name)
+ new_resource_list.insert(new_index, name)
+ json.dump(new_resource_list, open("resources/index.json", "w", encoding="utf-8"))
+ return True
+ else:
+ nonebot.logger.warning("Priority change failed, out of range")
+ return False
+ else:
+ nonebot.logger.debug("Priority change failed, resource not loaded")
+ return False
+
+
+def get_resource_metadata(name: str) -> ResourceMetadata:
+ """
+ 获取资源包元数据
+ Args:
+ name: 资源包名称,文件夹名
+ Returns:
+ """
+ for rp in get_loaded_resource_packs():
+ if rp.folder == name:
+ return rp
+ return ResourceMetadata()
diff --git a/liteyuki/utils/base/word_bank.py b/src/utils/base/word_bank.py
similarity index 95%
rename from liteyuki/utils/base/word_bank.py
rename to src/utils/base/word_bank.py
index 43ad4779..81772dcf 100644
--- a/liteyuki/utils/base/word_bank.py
+++ b/src/utils/base/word_bank.py
@@ -1,57 +1,57 @@
-import json
-import os
-import random
-from typing import Iterable
-
-import nonebot
-
-word_bank: dict[str, set[str]] = {}
-
-
-def load_from_file(file_path: str):
- """
- 从json文件中加载词库
-
- Args:
- file_path: 文件路径
- """
- with open(file_path, "r", encoding="utf-8") as file:
- data = json.load(file)
- for key, value_list in data.items():
- if key not in word_bank:
- word_bank[key] = set()
- word_bank[key].update(value_list)
-
- nonebot.logger.debug(f"Loaded word bank from {file_path}")
-
-
-def load_from_dir(dir_path: str):
- """
- 从目录中加载词库
-
- Args:
- dir_path: 目录路径
- """
- for file in os.listdir(dir_path):
- try:
- file_path = os.path.join(dir_path, file)
- if os.path.isfile(file_path):
- if file.endswith(".json"):
- load_from_file(file_path)
- except Exception as e:
- nonebot.logger.error(f"Failed to load language data from {file}: {e}")
- continue
-
-
-def get_reply(kws: Iterable[str]) -> str | None:
- """
- 获取回复
- Args:
- kws: 关键词
- Returns:
- """
- for kw in kws:
- if kw in word_bank:
- return random.choice(list(word_bank[kw]))
-
- return None
+import json
+import os
+import random
+from typing import Iterable
+
+import nonebot
+
+word_bank: dict[str, set[str]] = {}
+
+
+def load_from_file(file_path: str):
+ """
+ 从json文件中加载词库
+
+ Args:
+ file_path: 文件路径
+ """
+ with open(file_path, "r", encoding="utf-8") as file:
+ data = json.load(file)
+ for key, value_list in data.items():
+ if key not in word_bank:
+ word_bank[key] = set()
+ word_bank[key].update(value_list)
+
+ nonebot.logger.debug(f"Loaded word bank from {file_path}")
+
+
+def load_from_dir(dir_path: str):
+ """
+ 从目录中加载词库
+
+ Args:
+ dir_path: 目录路径
+ """
+ for file in os.listdir(dir_path):
+ try:
+ file_path = os.path.join(dir_path, file)
+ if os.path.isfile(file_path):
+ if file.endswith(".json"):
+ load_from_file(file_path)
+ except Exception as e:
+ nonebot.logger.error(f"Failed to load language data from {file}: {e}")
+ continue
+
+
+def get_reply(kws: Iterable[str]) -> str | None:
+ """
+ 获取回复
+ Args:
+ kws: 关键词
+ Returns:
+ """
+ for kw in kws:
+ if kw in word_bank:
+ return random.choice(list(word_bank[kw]))
+
+ return None
diff --git a/liteyuki/utils/canvas/__init__.py b/src/utils/canvas/__init__.py
similarity index 100%
rename from liteyuki/utils/canvas/__init__.py
rename to src/utils/canvas/__init__.py
diff --git a/liteyuki/utils/driver_manager/__init__.py b/src/utils/driver_manager/__init__.py
similarity index 94%
rename from liteyuki/utils/driver_manager/__init__.py
rename to src/utils/driver_manager/__init__.py
index 89d90097..d5cfd6a7 100644
--- a/liteyuki/utils/driver_manager/__init__.py
+++ b/src/utils/driver_manager/__init__.py
@@ -1,6 +1,6 @@
-from .auto_set_env import auto_set_env
-
-
-def init(config: dict):
- auto_set_env(config)
- return
+from .auto_set_env import auto_set_env
+
+
+def init(config: dict):
+ auto_set_env(config)
+ return
diff --git a/liteyuki/utils/driver_manager/auto_set_env.py b/src/utils/driver_manager/auto_set_env.py
similarity index 97%
rename from liteyuki/utils/driver_manager/auto_set_env.py
rename to src/utils/driver_manager/auto_set_env.py
index 94e5b3be..f3b2f204 100644
--- a/liteyuki/utils/driver_manager/auto_set_env.py
+++ b/src/utils/driver_manager/auto_set_env.py
@@ -1,21 +1,21 @@
-import os
-
-import dotenv
-import nonebot
-
-from .defines import *
-
-
-def auto_set_env(config: dict):
- dotenv.load_dotenv(".env")
- if os.getenv("DRIVER", None) is not None:
- print(os.getenv("DRIVER"))
- nonebot.logger.info("Driver already set in environment variable, skip auto configure.")
- return
- if config.get("satori", {'enable': False}).get("enable", False):
- os.environ["DRIVER"] = get_driver_string(ASGI_DRIVER, HTTPX_DRIVER, WEBSOCKETS_DRIVER)
- nonebot.logger.info("Enable Satori, set driver to ASGI+HTTPX+WEBSOCKETS")
- else:
- os.environ["DRIVER"] = get_driver_string(ASGI_DRIVER)
- nonebot.logger.info("Disable Satori, set driver to ASGI")
- return
+import os
+
+import dotenv
+import nonebot
+
+from .defines import *
+
+
+def auto_set_env(config: dict):
+ dotenv.load_dotenv(".env")
+ if os.getenv("DRIVER", None) is not None:
+ print(os.getenv("DRIVER"))
+ nonebot.logger.info("Driver already set in environment variable, skip auto configure.")
+ return
+ if config.get("satori", {'enable': False}).get("enable", False):
+ os.environ["DRIVER"] = get_driver_string(ASGI_DRIVER, HTTPX_DRIVER, WEBSOCKETS_DRIVER)
+ nonebot.logger.info("Enable Satori, set driver to ASGI+HTTPX+WEBSOCKETS")
+ else:
+ os.environ["DRIVER"] = get_driver_string(ASGI_DRIVER)
+ nonebot.logger.info("Disable Satori, set driver to ASGI")
+ return
diff --git a/liteyuki/utils/driver_manager/defines.py b/src/utils/driver_manager/defines.py
similarity index 96%
rename from liteyuki/utils/driver_manager/defines.py
rename to src/utils/driver_manager/defines.py
index b4756bf5..98a250a6 100644
--- a/liteyuki/utils/driver_manager/defines.py
+++ b/src/utils/driver_manager/defines.py
@@ -1,17 +1,17 @@
-ASGI_DRIVER = "~fastapi"
-HTTPX_DRIVER = "~httpx"
-WEBSOCKETS_DRIVER = "~websockets"
-
-
-def get_driver_string(*argv):
- output_string = ""
- if ASGI_DRIVER in argv:
- output_string += ASGI_DRIVER
- for arg in argv:
- if arg != ASGI_DRIVER:
- output_string = f"{output_string}+{arg}"
- return output_string
-
-
-def get_driver_full_string(*argv):
- return f"DRIVER={get_driver_string(argv)}"
+ASGI_DRIVER = "~fastapi"
+HTTPX_DRIVER = "~httpx"
+WEBSOCKETS_DRIVER = "~websockets"
+
+
+def get_driver_string(*argv):
+ output_string = ""
+ if ASGI_DRIVER in argv:
+ output_string += ASGI_DRIVER
+ for arg in argv:
+ if arg != ASGI_DRIVER:
+ output_string = f"{output_string}+{arg}"
+ return output_string
+
+
+def get_driver_full_string(*argv):
+ return f"DRIVER={get_driver_string(argv)}"
diff --git a/liteyuki/utils/event/__init__.py b/src/utils/event/__init__.py
similarity index 96%
rename from liteyuki/utils/event/__init__.py
rename to src/utils/event/__init__.py
index b028cac6..766f64be 100644
--- a/liteyuki/utils/event/__init__.py
+++ b/src/utils/event/__init__.py
@@ -1 +1 @@
-from .get_info import *
+from .get_info import *
diff --git a/liteyuki/utils/event/get_info.py b/src/utils/event/get_info.py
similarity index 87%
rename from liteyuki/utils/event/get_info.py
rename to src/utils/event/get_info.py
index d6fa5695..218b6e2b 100644
--- a/liteyuki/utils/event/get_info.py
+++ b/src/utils/event/get_info.py
@@ -1,24 +1,24 @@
-from nonebot.adapters import satori
-
-from liteyuki.utils.base.ly_typing import T_MessageEvent
-
-
-def get_user_id(event: T_MessageEvent):
- if isinstance(event, satori.event.Event):
- return event.user.id
- else:
- return event.user_id
-
-
-def get_group_id(event: T_MessageEvent):
- if isinstance(event, satori.event.Event):
- return event.guild.id
- else:
- return event.group_id
-
-
-def get_message_type(event: T_MessageEvent) -> str:
- if isinstance(event, satori.event.Event):
- return "private" if event.guild is None else "group"
- else:
- return event.message_type
+from nonebot.adapters import satori
+
+from src.utils.base.ly_typing import T_MessageEvent
+
+
+def get_user_id(event: T_MessageEvent):
+ if isinstance(event, satori.event.Event):
+ return event.user.id
+ else:
+ return event.user_id
+
+
+def get_group_id(event: T_MessageEvent):
+ if isinstance(event, satori.event.Event):
+ return event.guild.id
+ else:
+ return event.group_id
+
+
+def get_message_type(event: T_MessageEvent) -> str:
+ if isinstance(event, satori.event.Event):
+ return "private" if event.guild is None else "group"
+ else:
+ return event.message_type
diff --git a/src/utils/external/__init__.py b/src/utils/external/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/utils/external/logo.py b/src/utils/external/logo.py
similarity index 96%
rename from liteyuki/utils/external/logo.py
rename to src/utils/external/logo.py
index 96d9192e..c714d962 100644
--- a/liteyuki/utils/external/logo.py
+++ b/src/utils/external/logo.py
@@ -1,40 +1,40 @@
-async def get_user_icon(platform: str, user_id: str) -> str:
- """
- 获取用户头像
- Args:
- platform: qq, telegram, discord...
- user_id: 1234567890
-
- Returns:
- str: 头像链接
- """
- match platform:
- case "qq":
- return f"http://q1.qlogo.cn/g?b=qq&nk={user_id}&s=640"
- case "telegram":
- return f"https://t.me/i/userpic/320/{user_id}.jpg"
- case "discord":
- return f"https://cdn.discordapp.com/avatars/{user_id}/"
- case _:
- return ""
-
-
-async def get_group_icon(platform: str, group_id: str) -> str:
- """
- 获取群组头像
- Args:
- platform: qq, telegram, discord...
- group_id: 1234567890
-
- Returns:
- str: 头像链接
- """
- match platform:
- case "qq":
- return f"http://p.qlogo.cn/gh/{group_id}/{group_id}/640"
- case "telegram":
- return f"https://t.me/c/{group_id}/"
- case "discord":
- return f"https://cdn.discordapp.com/icons/{group_id}/"
- case _:
- return ""
+async def get_user_icon(platform: str, user_id: str) -> str:
+ """
+ 获取用户头像
+ Args:
+ platform: qq, telegram, discord...
+ user_id: 1234567890
+
+ Returns:
+ str: 头像链接
+ """
+ match platform:
+ case "qq":
+ return f"http://q1.qlogo.cn/g?b=qq&nk={user_id}&s=640"
+ case "telegram":
+ return f"https://t.me/i/userpic/320/{user_id}.jpg"
+ case "discord":
+ return f"https://cdn.discordapp.com/avatars/{user_id}/"
+ case _:
+ return ""
+
+
+async def get_group_icon(platform: str, group_id: str) -> str:
+ """
+ 获取群组头像
+ Args:
+ platform: qq, telegram, discord...
+ group_id: 1234567890
+
+ Returns:
+ str: 头像链接
+ """
+ match platform:
+ case "qq":
+ return f"http://p.qlogo.cn/gh/{group_id}/{group_id}/640"
+ case "telegram":
+ return f"https://t.me/c/{group_id}/"
+ case "discord":
+ return f"https://cdn.discordapp.com/icons/{group_id}/"
+ case _:
+ return ""
diff --git a/src/utils/message/__init__.py b/src/utils/message/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/utils/message/html_tool.py b/src/utils/message/html_tool.py
similarity index 96%
rename from liteyuki/utils/message/html_tool.py
rename to src/utils/message/html_tool.py
index c35b99aa..13e8cf02 100644
--- a/liteyuki/utils/message/html_tool.py
+++ b/src/utils/message/html_tool.py
@@ -1,113 +1,113 @@
-import os.path
-import time
-from os import getcwd
-
-import aiofiles
-import nonebot
-from nonebot_plugin_htmlrender import *
-from .tools import random_hex_string
-
-
-async def html2image(
- html: str,
- wait: int = 0,
-):
- pass
-
-
-async def template2html(
- template: str,
- templates: dict,
-) -> str:
- """
- Args:
- template: str: 模板文件
- **templates: dict: 模板参数
- Returns:
- HTML 正文
- """
- template_path = os.path.dirname(template)
- template_name = os.path.basename(template)
- return await template_to_html(template_path, template_name, **templates)
-
-
-async def template2image(
- template: str,
- templates: dict,
- pages=None,
- wait: int = 0,
- scale_factor: float = 1,
- debug: bool = False,
-) -> bytes:
- """
- template -> html -> image
- Args:
- debug: 输入渲染好的 html
- wait: 等待时间,单位秒
- pages: 页面参数
- template: str: 模板文件
- templates: dict: 模板参数
- scale_factor: 缩放因子,越高越清晰
- Returns:
- 图片二进制数据
- """
- if pages is None:
- pages = {
- "viewport": {
- "width" : 1080,
- "height": 10
- },
- "base_url": f"file://{getcwd()}",
- }
- template_path = os.path.dirname(template)
- template_name = os.path.basename(template)
-
- if debug:
- # 重载资源
- raw_html = await template_to_html(
- template_name=template_name,
- template_path=template_path,
- **templates,
- )
- random_file_name = f"debug-{random_hex_string(6)}.html"
- async with aiofiles.open(os.path.join(template_path, random_file_name), "w", encoding="utf-8") as f:
- await f.write(raw_html)
- nonebot.logger.info("Debug HTML: %s" % f"{random_file_name}")
-
- return await template_to_pic(
- template_name=template_name,
- template_path=template_path,
- templates=templates,
- pages=pages,
- wait=wait,
- device_scale_factor=scale_factor,
- )
-
-
-async def url2image(
- url: str,
- wait: int = 0,
- scale_factor: float = 1,
- type: str = "png",
- quality: int = 100,
- **kwargs
-) -> bytes:
- """
- Args:
- quality:
- type:
- url: str: URL
- wait: int: 等待时间
- scale_factor: float: 缩放因子
- **kwargs: page 参数
- Returns:
- 图片二进制数据
- """
- async with get_new_page(scale_factor) as page:
- await page.goto(url)
- await page.wait_for_timeout(wait)
- return await page.screenshot(
- full_page=True,
- type=type,
- quality=quality
- )
+import os.path
+import time
+from os import getcwd
+
+import aiofiles
+import nonebot
+from nonebot_plugin_htmlrender import *
+from .tools import random_hex_string
+
+
+async def html2image(
+ html: str,
+ wait: int = 0,
+):
+ pass
+
+
+async def template2html(
+ template: str,
+ templates: dict,
+) -> str:
+ """
+ Args:
+ template: str: 模板文件
+ **templates: dict: 模板参数
+ Returns:
+ HTML 正文
+ """
+ template_path = os.path.dirname(template)
+ template_name = os.path.basename(template)
+ return await template_to_html(template_path, template_name, **templates)
+
+
+async def template2image(
+ template: str,
+ templates: dict,
+ pages=None,
+ wait: int = 0,
+ scale_factor: float = 1,
+ debug: bool = False,
+) -> bytes:
+ """
+ template -> html -> image
+ Args:
+ debug: 输入渲染好的 html
+ wait: 等待时间,单位秒
+ pages: 页面参数
+ template: str: 模板文件
+ templates: dict: 模板参数
+ scale_factor: 缩放因子,越高越清晰
+ Returns:
+ 图片二进制数据
+ """
+ if pages is None:
+ pages = {
+ "viewport": {
+ "width" : 1080,
+ "height": 10
+ },
+ "base_url": f"file://{getcwd()}",
+ }
+ template_path = os.path.dirname(template)
+ template_name = os.path.basename(template)
+
+ if debug:
+ # 重载资源
+ raw_html = await template_to_html(
+ template_name=template_name,
+ template_path=template_path,
+ **templates,
+ )
+ random_file_name = f"debug-{random_hex_string(6)}.html"
+ async with aiofiles.open(os.path.join(template_path, random_file_name), "w", encoding="utf-8") as f:
+ await f.write(raw_html)
+ nonebot.logger.info("Debug HTML: %s" % f"{random_file_name}")
+
+ return await template_to_pic(
+ template_name=template_name,
+ template_path=template_path,
+ templates=templates,
+ pages=pages,
+ wait=wait,
+ device_scale_factor=scale_factor,
+ )
+
+
+async def url2image(
+ url: str,
+ wait: int = 0,
+ scale_factor: float = 1,
+ type: str = "png",
+ quality: int = 100,
+ **kwargs
+) -> bytes:
+ """
+ Args:
+ quality:
+ type:
+ url: str: URL
+ wait: int: 等待时间
+ scale_factor: float: 缩放因子
+ **kwargs: page 参数
+ Returns:
+ 图片二进制数据
+ """
+ async with get_new_page(scale_factor) as page:
+ await page.goto(url)
+ await page.wait_for_timeout(wait)
+ return await page.screenshot(
+ full_page=True,
+ type=type,
+ quality=quality
+ )
diff --git a/liteyuki/utils/message/markdown.py b/src/utils/message/markdown.py
similarity index 96%
rename from liteyuki/utils/message/markdown.py
rename to src/utils/message/markdown.py
index bed2073d..35605ca6 100644
--- a/liteyuki/utils/message/markdown.py
+++ b/src/utils/message/markdown.py
@@ -1,209 +1,209 @@
-import base64
-from io import BytesIO
-from urllib.parse import quote
-
-import aiohttp
-from PIL import Image
-
-from ..base.config import get_config
-from ..base.data import LiteModel
-from ..base.ly_typing import T_Bot
-
-
-def escape_md(text: str) -> str:
- """
- 转义Markdown特殊字符
- Args:
- text: str: 文本
-
- Returns:
- str: 转义后文本
- """
- spacial_chars = r"\`*_{}[]()#+-.!"
- for char in spacial_chars:
- text = text.replace(char, "\\\\" + char)
- return text.replace("\n", r"\n").replace('"', r'\\\"')
-
-
-def escape_decorator(func):
- def wrapper(text: str):
- return func(escape_md(text))
-
- return wrapper
-
-
-def compile_md(comps: list[str]) -> str:
- """
- 合成Markdown文本
- Args:
- comps: list[str]: 组件列表
-
- Returns:
- str: 编译后文本
- """
- return "".join(comps)
-
-
-class MarkdownComponent:
- @staticmethod
- def heading(text: str, level: int = 1) -> str:
- """标题"""
- assert 1 <= level <= 6, "标题级别应在 1-6 之间"
- return f"{'#' * level} {text}\n"
-
- @staticmethod
- def bold(text: str) -> str:
- """粗体"""
- return f"**{text}**"
-
- @staticmethod
- def italic(text: str) -> str:
- """斜体"""
- return f"*{text}*"
-
- @staticmethod
- def strike(text: str) -> str:
- """删除线"""
- return f"~~{text}~~"
-
- @staticmethod
- def code(text: str) -> str:
- """行内代码"""
- return f"`{text}`"
-
- @staticmethod
- def code_block(text: str, language: str = "") -> str:
- """代码块"""
- return f"```{language}\n{text}\n```\n"
-
- @staticmethod
- def quote(text: str) -> str:
- """引用"""
- return f"> {text}\n\n"
-
- @staticmethod
- def link(text: str, url: str, symbol: bool = True) -> str:
- """
- 链接
-
- Args:
- text: 链接文本
- url: 链接地址
- symbol: 是否显示链接图标, mqqapi请使用False
- """
- return f"[{'🔗' if symbol else ''}{text}]({url})"
-
- @staticmethod
- def image(url: str, *, size: tuple[int, int]) -> str:
- """
- 图片,本地图片不建议直接使用
- Args:
- url: 图片链接
- size: 图片大小
-
- Returns:
- markdown格式的图片
- """
- return f"![image #{size[0]}px #{size[1]}px]({url})"
-
- @staticmethod
- async def auto_image(image: str | bytes, bot: T_Bot) -> str:
- """
- 自动获取图片大小
- Args:
- image: 本地图片路径 | 图片url http/file | 图片bytes
- bot: bot对象,用于上传图片到图床
-
- Returns:
- markdown格式的图片
- """
- if isinstance(image, bytes):
- # 传入为二进制图片
- image_obj = Image.open(BytesIO(image))
- base64_string = base64.b64encode(image_obj.tobytes()).decode("utf-8")
- url = await bot.call_api("upload_image", file=f"base64://{base64_string}")
- size = image_obj.size
- elif isinstance(image, str):
- # 传入链接或本地路径
- if image.startswith("http"):
- # 网络请求
- async with aiohttp.ClientSession() as session:
- async with session.get(image) as resp:
- image_data = await resp.read()
- url = image
- size = Image.open(BytesIO(image_data)).size
-
- else:
- # 本地路径/file://
- image_obj = Image.open(image.replace("file://", ""))
- base64_string = base64.b64encode(image_obj.tobytes()).decode("utf-8")
- url = await bot.call_api("upload_image", file=f"base64://{base64_string}")
- size = image_obj.size
- else:
- raise ValueError("图片类型错误")
-
- return MarkdownComponent.image(url, size=size)
-
- @staticmethod
- def table(data: list[list[any]]) -> str:
- """
- 表格
- Args:
- data: 表格数据,二维列表
- Returns:
- markdown格式的表格
- """
- # 表头
- table = "|".join(map(str, data[0])) + "\n"
- table += "|".join([":-:" for _ in range(len(data[0]))]) + "\n"
- # 表内容
- for row in data[1:]:
- table += "|".join(map(str, row)) + "\n"
- return table
-
- @staticmethod
- def paragraph(text: str) -> str:
- """
- 段落
- Args:
- text: 段落内容
- Returns:
- markdown格式的段落
- """
- return f"{text}\n"
-
-
-class Mqqapi:
- @staticmethod
- @escape_decorator
- def cmd(text: str, cmd: str, enter: bool = True, reply: bool = False, use_cmd_start: bool = True) -> str:
- """
- 生成点击回调文本
- Args:
- text: 显示内容
- cmd: 命令
- enter: 是否自动发送
- reply: 是否回复
- use_cmd_start: 是否使用配置的命令前缀
-
- Returns:
- [text](mqqapi://) markdown格式的可点击回调文本,类似于链接
- """
-
- if use_cmd_start:
- command_start = get_config("command_start", [])
- if command_start:
- # 若命令前缀不为空,则使用配置的第一个命令前缀
- cmd = f"{command_start[0]}{cmd}"
- return f"[{text}](mqqapi://aio/inlinecmd?command={quote(cmd)}&reply={str(reply).lower()}&enter={str(enter).lower()})"
-
-
-class RenderData(LiteModel):
- label: str
- visited_label: str
- style: int
-
-
-class Button(LiteModel):
- id: int
- render_data: RenderData
+import base64
+from io import BytesIO
+from urllib.parse import quote
+
+import aiohttp
+from PIL import Image
+
+from ..base.config import get_config
+from ..base.data import LiteModel
+from ..base.ly_typing import T_Bot
+
+
+def escape_md(text: str) -> str:
+ """
+ 转义Markdown特殊字符
+ Args:
+ text: str: 文本
+
+ Returns:
+ str: 转义后文本
+ """
+ spacial_chars = r"\`*_{}[]()#+-.!"
+ for char in spacial_chars:
+ text = text.replace(char, "\\\\" + char)
+ return text.replace("\n", r"\n").replace('"', r'\\\"')
+
+
+def escape_decorator(func):
+ def wrapper(text: str):
+ return func(escape_md(text))
+
+ return wrapper
+
+
+def compile_md(comps: list[str]) -> str:
+ """
+ 合成Markdown文本
+ Args:
+ comps: list[str]: 组件列表
+
+ Returns:
+ str: 编译后文本
+ """
+ return "".join(comps)
+
+
+class MarkdownComponent:
+ @staticmethod
+ def heading(text: str, level: int = 1) -> str:
+ """标题"""
+ assert 1 <= level <= 6, "标题级别应在 1-6 之间"
+ return f"{'#' * level} {text}\n"
+
+ @staticmethod
+ def bold(text: str) -> str:
+ """粗体"""
+ return f"**{text}**"
+
+ @staticmethod
+ def italic(text: str) -> str:
+ """斜体"""
+ return f"*{text}*"
+
+ @staticmethod
+ def strike(text: str) -> str:
+ """删除线"""
+ return f"~~{text}~~"
+
+ @staticmethod
+ def code(text: str) -> str:
+ """行内代码"""
+ return f"`{text}`"
+
+ @staticmethod
+ def code_block(text: str, language: str = "") -> str:
+ """代码块"""
+ return f"```{language}\n{text}\n```\n"
+
+ @staticmethod
+ def quote(text: str) -> str:
+ """引用"""
+ return f"> {text}\n\n"
+
+ @staticmethod
+ def link(text: str, url: str, symbol: bool = True) -> str:
+ """
+ 链接
+
+ Args:
+ text: 链接文本
+ url: 链接地址
+ symbol: 是否显示链接图标, mqqapi请使用False
+ """
+ return f"[{'🔗' if symbol else ''}{text}]({url})"
+
+ @staticmethod
+ def image(url: str, *, size: tuple[int, int]) -> str:
+ """
+ 图片,本地图片不建议直接使用
+ Args:
+ url: 图片链接
+ size: 图片大小
+
+ Returns:
+ markdown格式的图片
+ """
+ return f"![image #{size[0]}px #{size[1]}px]({url})"
+
+ @staticmethod
+ async def auto_image(image: str | bytes, bot: T_Bot) -> str:
+ """
+ 自动获取图片大小
+ Args:
+ image: 本地图片路径 | 图片url http/file | 图片bytes
+ bot: bot对象,用于上传图片到图床
+
+ Returns:
+ markdown格式的图片
+ """
+ if isinstance(image, bytes):
+ # 传入为二进制图片
+ image_obj = Image.open(BytesIO(image))
+ base64_string = base64.b64encode(image_obj.tobytes()).decode("utf-8")
+ url = await bot.call_api("upload_image", file=f"base64://{base64_string}")
+ size = image_obj.size
+ elif isinstance(image, str):
+ # 传入链接或本地路径
+ if image.startswith("http"):
+ # 网络请求
+ async with aiohttp.ClientSession() as session:
+ async with session.get(image) as resp:
+ image_data = await resp.read()
+ url = image
+ size = Image.open(BytesIO(image_data)).size
+
+ else:
+ # 本地路径/file://
+ image_obj = Image.open(image.replace("file://", ""))
+ base64_string = base64.b64encode(image_obj.tobytes()).decode("utf-8")
+ url = await bot.call_api("upload_image", file=f"base64://{base64_string}")
+ size = image_obj.size
+ else:
+ raise ValueError("图片类型错误")
+
+ return MarkdownComponent.image(url, size=size)
+
+ @staticmethod
+ def table(data: list[list[any]]) -> str:
+ """
+ 表格
+ Args:
+ data: 表格数据,二维列表
+ Returns:
+ markdown格式的表格
+ """
+ # 表头
+ table = "|".join(map(str, data[0])) + "\n"
+ table += "|".join([":-:" for _ in range(len(data[0]))]) + "\n"
+ # 表内容
+ for row in data[1:]:
+ table += "|".join(map(str, row)) + "\n"
+ return table
+
+ @staticmethod
+ def paragraph(text: str) -> str:
+ """
+ 段落
+ Args:
+ text: 段落内容
+ Returns:
+ markdown格式的段落
+ """
+ return f"{text}\n"
+
+
+class Mqqapi:
+ @staticmethod
+ @escape_decorator
+ def cmd(text: str, cmd: str, enter: bool = True, reply: bool = False, use_cmd_start: bool = True) -> str:
+ """
+ 生成点击回调文本
+ Args:
+ text: 显示内容
+ cmd: 命令
+ enter: 是否自动发送
+ reply: 是否回复
+ use_cmd_start: 是否使用配置的命令前缀
+
+ Returns:
+ [text](mqqapi://) markdown格式的可点击回调文本,类似于链接
+ """
+
+ if use_cmd_start:
+ command_start = get_config("command_start", [])
+ if command_start:
+ # 若命令前缀不为空,则使用配置的第一个命令前缀
+ cmd = f"{command_start[0]}{cmd}"
+ return f"[{text}](mqqapi://aio/inlinecmd?command={quote(cmd)}&reply={str(reply).lower()}&enter={str(enter).lower()})"
+
+
+class RenderData(LiteModel):
+ label: str
+ visited_label: str
+ style: int
+
+
+class Button(LiteModel):
+ id: int
+ render_data: RenderData
diff --git a/liteyuki/utils/message/message.py b/src/utils/message/message.py
similarity index 97%
rename from liteyuki/utils/message/message.py
rename to src/utils/message/message.py
index 1ef1163e..6fbefa66 100644
--- a/liteyuki/utils/message/message.py
+++ b/src/utils/message/message.py
@@ -1,297 +1,297 @@
-import base64
-import io
-from urllib.parse import quote
-
-import aiofiles
-from PIL import Image
-import aiohttp
-import nonebot
-from nonebot import require
-from nonebot.adapters import satori
-from nonebot.adapters.onebot import v11
-from typing import Any, Type
-
-from nonebot.internal.adapter import MessageSegment
-from nonebot.internal.adapter.message import TM
-
-from .. import load_from_yaml
-from ..base.ly_typing import T_Bot, T_Message, T_MessageEvent
-
-require("nonebot_plugin_htmlrender")
-from nonebot_plugin_htmlrender import md_to_pic
-
-config = load_from_yaml("config.yml")
-
-can_send_markdown = {} # 用于存储机器人是否支持发送markdown消息,id->bool
-
-
-class TencentBannedMarkdownError(BaseException):
- pass
-
-
-async def broadcast_to_superusers(message: str | T_Message, markdown: bool = False):
- """广播消息给超级用户"""
- for bot in nonebot.get_bots().values():
- for user_id in config.get("superusers", []):
- if markdown:
- await MarkdownMessage.send_md(message, bot, message_type="private", session_id=user_id)
- else:
- await bot.send_private_msg(user_id=user_id, message=message)
-
-
-class MarkdownMessage:
- @staticmethod
- async def send_md(
- markdown: str,
- bot: T_Bot, *,
- message_type: str = None,
- session_id: str | int = None,
- event: T_MessageEvent = None,
- retry_as_image: bool = True,
- **kwargs
- ) -> dict[str, Any] | None:
- """
- 发送Markdown消息,支持自动转为图片发送
- Args:
- markdown:
- bot:
- message_type:
- session_id:
- event:
- retry_as_image: 发送失败后是否尝试以图片形式发送,否则失败返回None
- **kwargs:
-
- Returns:
-
- """
- formatted_md = v11.unescape(markdown).replace("\n", r"\n").replace('"', r'\\\"')
- if event is not None and message_type is None:
- if isinstance(event, satori.event.Event):
- message_type = "private" if event.guild is None else "group"
- group_id = event.guild.id if event.guild is not None else None
- else:
- assert event is not None
- message_type = event.message_type
- group_id = event.group_id if message_type == "group" else None
- user_id = event.user.id if isinstance(event, satori.event.Event) else event.user_id
- session_id = user_id if message_type == "private" else group_id
- else:
- pass
- try:
- raise TencentBannedMarkdownError("Tencent banned markdown")
- forward_id = await bot.call_api(
- "send_private_forward_msg",
- messages=[
- {
- "type": "node",
- "data": {
- "content": [
- {
- "data": {
- "content": "{\"content\":\"%s\"}" % formatted_md,
- },
- "type": "markdown"
- }
- ],
- "name": "[]",
- "uin": bot.self_id
- }
- }
- ],
- user_id=bot.self_id
-
- )
- data = await bot.send_msg(
- user_id=session_id,
- group_id=session_id,
- message_type=message_type,
- message=[
- {
- "type": "longmsg",
- "data": {
- "id": forward_id
- }
- },
- ],
- **kwargs
- )
- except BaseException as e:
- nonebot.logger.error(f"send markdown error, retry as image: {e}")
- # 发送失败,渲染为图片发送
- # if not retry_as_image:
- # return None
-
- plain_markdown = markdown.replace("[🔗", "[")
- md_image_bytes = await md_to_pic(
- md=plain_markdown,
- width=540,
- device_scale_factor=4
- )
- if isinstance(bot, satori.Bot):
- msg_seg = satori.MessageSegment.image(raw=md_image_bytes,mime="image/png")
- data = await bot.send(
- event=event,
- message=msg_seg
- )
- else:
- data = await bot.send_msg(
- message_type=message_type,
- group_id=session_id,
- user_id=session_id,
- message=v11.MessageSegment.image(md_image_bytes),
- )
- return data
-
- @staticmethod
- async def send_image(
- image: bytes | str,
- bot: T_Bot, *,
- message_type: str = None,
- session_id: str | int = None,
- event: T_MessageEvent = None,
- **kwargs
- ) -> dict:
- """
- 发送单张装逼大图
- Args:
- image: 图片字节流或图片本地路径,链接请使用Markdown.image_async方法获取后通过send_md发送
- bot: bot instance
- message_type: message type
- session_id: session id
- event: event
- kwargs: other arguments
- Returns:
- dict: response data
-
- """
- if isinstance(image, str):
- async with aiofiles.open(image, "rb") as f:
- image = await f.read()
- method = 2
- # 1.轻雪图床方案
- # if method == 1:
- # image_url = await liteyuki_api.upload_image(image)
- # image_size = Image.open(io.BytesIO(image)).size
- # image_md = Markdown.image(image_url, image_size)
- # data = await Markdown.send_md(image_md, bot, message_type=message_type, session_id=session_id, event=event,
- # retry_as_image=False,
- # **kwargs)
-
- # Lagrange.OneBot方案
- if method == 2:
- base64_string = base64.b64encode(image).decode("utf-8")
- data = await bot.call_api("upload_image", file=f"base64://{base64_string}")
- await MarkdownMessage.send_md(MarkdownMessage.image(data, Image.open(io.BytesIO(image)).size), bot,
- event=event, message_type=message_type,
- session_id=session_id, **kwargs)
-
- # 其他实现端方案
- else:
- image_message_id = (await bot.send_private_msg(
- user_id=bot.self_id,
- message=[
- v11.MessageSegment.image(file=image)
- ]
- ))["message_id"]
- image_url = (await bot.get_msg(message_id=image_message_id))["message"][0]["data"]["url"]
- image_size = Image.open(io.BytesIO(image)).size
- image_md = MarkdownMessage.image(image_url, image_size)
- return await MarkdownMessage.send_md(image_md, bot, message_type=message_type, session_id=session_id,
- event=event, **kwargs)
-
- if data is None:
- data = await bot.send_msg(
- message_type=message_type,
- group_id=session_id,
- user_id=session_id,
- message=v11.MessageSegment.image(image),
- **kwargs
- )
- return data
-
- @staticmethod
- async def get_image_url(image: bytes | str, bot: T_Bot) -> str:
- """把图片上传到图床,返回链接
- Args:
- bot: 发送的bot
- image: 图片字节流或图片本地路径
- Returns:
- """
- # 等林文轩修好Lagrange.OneBot再说
-
- @staticmethod
- def btn_cmd(name: str, cmd: str, reply: bool = False, enter: bool = True) -> str:
- """生成点击回调按钮
- Args:
- name: 按钮显示内容
- cmd: 发送的命令,已在函数内url编码,不需要再次编码
- reply: 是否以回复的方式发送消息
- enter: 自动发送消息则为True,否则填充到输入框
-
- Returns:
- markdown格式的可点击回调按钮
-
- """
- if "" not in config.get("command_start", ["/"]) and config.get("alconna_use_command_start", False):
- cmd = f"{config['command_start'][0]}{cmd}"
- return f"[{name}](mqqapi://aio/inlinecmd?command={quote(cmd)}&reply={str(reply).lower()}&enter={str(enter).lower()})"
-
- @staticmethod
- def btn_link(name: str, url: str) -> str:
- """生成点击链接按钮
- Args:
- name: 链接显示内容
- url: 链接地址
-
- Returns:
- markdown格式的链接
-
- """
- return f"[🔗{name}]({url})"
-
- @staticmethod
- def image(url: str, size: tuple[int, int]) -> str:
- """构建图片链接
- Args:
- size:
- url: 图片链接
-
- Returns:
- markdown格式的图片
-
- """
- return f"![image #{size[0]}px #{size[1]}px]({url})"
-
- @staticmethod
- async def image_async(url: str) -> str:
- """获取图片,自动请求获取大小,异步
- Args:
- url: 图片链接
-
- Returns:
- 图片Markdown语法: ![image #{width}px #{height}px](link)
-
- """
- try:
- async with aiohttp.ClientSession() as session:
- async with session.get(url) as resp:
- image = Image.open(io.BytesIO(await resp.read()))
- return MarkdownMessage.image(url, image.size)
- except Exception as e:
- nonebot.logger.error(f"get image error: {e}")
- return "[Image Error]"
-
- @staticmethod
- def escape(text: str) -> str:
- """转义特殊字符
- Args:
- text: 需要转义的文本,请勿直接把整个markdown文本传入,否则会转义掉所有字符
-
- Returns:
- 转义后的文本
-
- """
- chars = "*[]()~_`>#+=|{}.!"
- for char in chars:
- text = text.replace(char, f"\\\\{char}")
- return text
+import base64
+import io
+from urllib.parse import quote
+
+import aiofiles
+from PIL import Image
+import aiohttp
+import nonebot
+from nonebot import require
+from nonebot.adapters import satori
+from nonebot.adapters.onebot import v11
+from typing import Any, Type
+
+from nonebot.internal.adapter import MessageSegment
+from nonebot.internal.adapter.message import TM
+
+from .. import load_from_yaml
+from ..base.ly_typing import T_Bot, T_Message, T_MessageEvent
+
+require("nonebot_plugin_htmlrender")
+from nonebot_plugin_htmlrender import md_to_pic
+
+config = load_from_yaml("config.yml")
+
+can_send_markdown = {} # 用于存储机器人是否支持发送markdown消息,id->bool
+
+
+class TencentBannedMarkdownError(BaseException):
+ pass
+
+
+async def broadcast_to_superusers(message: str | T_Message, markdown: bool = False):
+ """广播消息给超级用户"""
+ for bot in nonebot.get_bots().values():
+ for user_id in config.get("superusers", []):
+ if markdown:
+ await MarkdownMessage.send_md(message, bot, message_type="private", session_id=user_id)
+ else:
+ await bot.send_private_msg(user_id=user_id, message=message)
+
+
+class MarkdownMessage:
+ @staticmethod
+ async def send_md(
+ markdown: str,
+ bot: T_Bot, *,
+ message_type: str = None,
+ session_id: str | int = None,
+ event: T_MessageEvent = None,
+ retry_as_image: bool = True,
+ **kwargs
+ ) -> dict[str, Any] | None:
+ """
+ 发送Markdown消息,支持自动转为图片发送
+ Args:
+ markdown:
+ bot:
+ message_type:
+ session_id:
+ event:
+ retry_as_image: 发送失败后是否尝试以图片形式发送,否则失败返回None
+ **kwargs:
+
+ Returns:
+
+ """
+ formatted_md = v11.unescape(markdown).replace("\n", r"\n").replace('"', r'\\\"')
+ if event is not None and message_type is None:
+ if isinstance(event, satori.event.Event):
+ message_type = "private" if event.guild is None else "group"
+ group_id = event.guild.id if event.guild is not None else None
+ else:
+ assert event is not None
+ message_type = event.message_type
+ group_id = event.group_id if message_type == "group" else None
+ user_id = event.user.id if isinstance(event, satori.event.Event) else event.user_id
+ session_id = user_id if message_type == "private" else group_id
+ else:
+ pass
+ try:
+ raise TencentBannedMarkdownError("Tencent banned markdown")
+ forward_id = await bot.call_api(
+ "send_private_forward_msg",
+ messages=[
+ {
+ "type": "node",
+ "data": {
+ "content": [
+ {
+ "data": {
+ "content": "{\"content\":\"%s\"}" % formatted_md,
+ },
+ "type": "markdown"
+ }
+ ],
+ "name": "[]",
+ "uin": bot.self_id
+ }
+ }
+ ],
+ user_id=bot.self_id
+
+ )
+ data = await bot.send_msg(
+ user_id=session_id,
+ group_id=session_id,
+ message_type=message_type,
+ message=[
+ {
+ "type": "longmsg",
+ "data": {
+ "id": forward_id
+ }
+ },
+ ],
+ **kwargs
+ )
+ except BaseException as e:
+ nonebot.logger.error(f"send markdown error, retry as image: {e}")
+ # 发送失败,渲染为图片发送
+ # if not retry_as_image:
+ # return None
+
+ plain_markdown = markdown.replace("[🔗", "[")
+ md_image_bytes = await md_to_pic(
+ md=plain_markdown,
+ width=540,
+ device_scale_factor=4
+ )
+ if isinstance(bot, satori.Bot):
+ msg_seg = satori.MessageSegment.image(raw=md_image_bytes,mime="image/png")
+ data = await bot.send(
+ event=event,
+ message=msg_seg
+ )
+ else:
+ data = await bot.send_msg(
+ message_type=message_type,
+ group_id=session_id,
+ user_id=session_id,
+ message=v11.MessageSegment.image(md_image_bytes),
+ )
+ return data
+
+ @staticmethod
+ async def send_image(
+ image: bytes | str,
+ bot: T_Bot, *,
+ message_type: str = None,
+ session_id: str | int = None,
+ event: T_MessageEvent = None,
+ **kwargs
+ ) -> dict:
+ """
+ 发送单张装逼大图
+ Args:
+ image: 图片字节流或图片本地路径,链接请使用Markdown.image_async方法获取后通过send_md发送
+ bot: bot instance
+ message_type: message type
+ session_id: session id
+ event: event
+ kwargs: other arguments
+ Returns:
+ dict: response data
+
+ """
+ if isinstance(image, str):
+ async with aiofiles.open(image, "rb") as f:
+ image = await f.read()
+ method = 2
+ # 1.轻雪图床方案
+ # if method == 1:
+ # image_url = await liteyuki_api.upload_image(image)
+ # image_size = Image.open(io.BytesIO(image)).size
+ # image_md = Markdown.image(image_url, image_size)
+ # data = await Markdown.send_md(image_md, bot, message_type=message_type, session_id=session_id, event=event,
+ # retry_as_image=False,
+ # **kwargs)
+
+ # Lagrange.OneBot方案
+ if method == 2:
+ base64_string = base64.b64encode(image).decode("utf-8")
+ data = await bot.call_api("upload_image", file=f"base64://{base64_string}")
+ await MarkdownMessage.send_md(MarkdownMessage.image(data, Image.open(io.BytesIO(image)).size), bot,
+ event=event, message_type=message_type,
+ session_id=session_id, **kwargs)
+
+ # 其他实现端方案
+ else:
+ image_message_id = (await bot.send_private_msg(
+ user_id=bot.self_id,
+ message=[
+ v11.MessageSegment.image(file=image)
+ ]
+ ))["message_id"]
+ image_url = (await bot.get_msg(message_id=image_message_id))["message"][0]["data"]["url"]
+ image_size = Image.open(io.BytesIO(image)).size
+ image_md = MarkdownMessage.image(image_url, image_size)
+ return await MarkdownMessage.send_md(image_md, bot, message_type=message_type, session_id=session_id,
+ event=event, **kwargs)
+
+ if data is None:
+ data = await bot.send_msg(
+ message_type=message_type,
+ group_id=session_id,
+ user_id=session_id,
+ message=v11.MessageSegment.image(image),
+ **kwargs
+ )
+ return data
+
+ @staticmethod
+ async def get_image_url(image: bytes | str, bot: T_Bot) -> str:
+ """把图片上传到图床,返回链接
+ Args:
+ bot: 发送的bot
+ image: 图片字节流或图片本地路径
+ Returns:
+ """
+ # 等林文轩修好Lagrange.OneBot再说
+
+ @staticmethod
+ def btn_cmd(name: str, cmd: str, reply: bool = False, enter: bool = True) -> str:
+ """生成点击回调按钮
+ Args:
+ name: 按钮显示内容
+ cmd: 发送的命令,已在函数内url编码,不需要再次编码
+ reply: 是否以回复的方式发送消息
+ enter: 自动发送消息则为True,否则填充到输入框
+
+ Returns:
+ markdown格式的可点击回调按钮
+
+ """
+ if "" not in config.get("command_start", ["/"]) and config.get("alconna_use_command_start", False):
+ cmd = f"{config['command_start'][0]}{cmd}"
+ return f"[{name}](mqqapi://aio/inlinecmd?command={quote(cmd)}&reply={str(reply).lower()}&enter={str(enter).lower()})"
+
+ @staticmethod
+ def btn_link(name: str, url: str) -> str:
+ """生成点击链接按钮
+ Args:
+ name: 链接显示内容
+ url: 链接地址
+
+ Returns:
+ markdown格式的链接
+
+ """
+ return f"[🔗{name}]({url})"
+
+ @staticmethod
+ def image(url: str, size: tuple[int, int]) -> str:
+ """构建图片链接
+ Args:
+ size:
+ url: 图片链接
+
+ Returns:
+ markdown格式的图片
+
+ """
+ return f"![image #{size[0]}px #{size[1]}px]({url})"
+
+ @staticmethod
+ async def image_async(url: str) -> str:
+ """获取图片,自动请求获取大小,异步
+ Args:
+ url: 图片链接
+
+ Returns:
+ 图片Markdown语法: ![image #{width}px #{height}px](link)
+
+ """
+ try:
+ async with aiohttp.ClientSession() as session:
+ async with session.get(url) as resp:
+ image = Image.open(io.BytesIO(await resp.read()))
+ return MarkdownMessage.image(url, image.size)
+ except Exception as e:
+ nonebot.logger.error(f"get image error: {e}")
+ return "[Image Error]"
+
+ @staticmethod
+ def escape(text: str) -> str:
+ """转义特殊字符
+ Args:
+ text: 需要转义的文本,请勿直接把整个markdown文本传入,否则会转义掉所有字符
+
+ Returns:
+ 转义后的文本
+
+ """
+ chars = "*[]()~_`>#+=|{}.!"
+ for char in chars:
+ text = text.replace(char, f"\\\\{char}")
+ return text
diff --git a/liteyuki/utils/message/string_tool.py b/src/utils/message/string_tool.py
similarity index 95%
rename from liteyuki/utils/message/string_tool.py
rename to src/utils/message/string_tool.py
index 32cf9a0a..6193bd5f 100644
--- a/liteyuki/utils/message/string_tool.py
+++ b/src/utils/message/string_tool.py
@@ -1,101 +1,101 @@
-import nonebot
-
-
-def convert_duration(text: str, default) -> float:
- """
- 转换自然语言时间为秒数
- Args:
- text: 1d2h3m
- default: 出错时返回
-
- Returns:
- float: 总秒数
- """
- units = {
- "d" : 86400,
- "h" : 3600,
- "m" : 60,
- "s" : 1,
- "ms": 0.001
- }
-
- duration = 0
- current_number = ''
- current_unit = ''
- try:
- for char in text:
- if char.isdigit():
- current_number += char
- else:
- if current_number:
- duration += int(current_number) * units[current_unit]
- current_number = ''
- if char in units:
- current_unit = char
- else:
- current_unit = ''
-
- if current_number:
- duration += int(current_number) * units[current_unit]
-
- return duration
-
- except BaseException as e:
- nonebot.logger.info(f"convert_duration error: {e}")
- return default
-
-
-def convert_time_to_seconds(time_str):
- """转换自然语言时长为秒数
- Args:
- time_str: 1d2m3s
-
- Returns:
-
- """
- seconds = 0
- current_number = ''
-
- for char in time_str:
- if char.isdigit() or char == '.':
- current_number += char
- elif char == 'd':
- seconds += float(current_number) * 24 * 60 * 60
- current_number = ''
- elif char == 'h':
- seconds += float(current_number) * 60 * 60
- current_number = ''
- elif char == 'm':
- seconds += float(current_number) * 60
- current_number = ''
- elif char == 's':
- seconds += float(current_number)
- current_number = ''
-
- return int(seconds)
-
-
-def convert_seconds_to_time(seconds):
- """转换秒数为自然语言时长
- Args:
- seconds: 10000
-
- Returns:
-
- """
- d = seconds // (24 * 60 * 60)
- h = (seconds % (24 * 60 * 60)) // (60 * 60)
- m = (seconds % (60 * 60)) // 60
- s = seconds % 60
-
- # 若值为0则不显示
- time_str = ''
- if d:
- time_str += f"{d}d"
- if h:
- time_str += f"{h}h"
- if m:
- time_str += f"{m}m"
- if not time_str:
- time_str = f"{s}s"
- return time_str
+import nonebot
+
+
+def convert_duration(text: str, default) -> float:
+ """
+ 转换自然语言时间为秒数
+ Args:
+ text: 1d2h3m
+ default: 出错时返回
+
+ Returns:
+ float: 总秒数
+ """
+ units = {
+ "d" : 86400,
+ "h" : 3600,
+ "m" : 60,
+ "s" : 1,
+ "ms": 0.001
+ }
+
+ duration = 0
+ current_number = ''
+ current_unit = ''
+ try:
+ for char in text:
+ if char.isdigit():
+ current_number += char
+ else:
+ if current_number:
+ duration += int(current_number) * units[current_unit]
+ current_number = ''
+ if char in units:
+ current_unit = char
+ else:
+ current_unit = ''
+
+ if current_number:
+ duration += int(current_number) * units[current_unit]
+
+ return duration
+
+ except BaseException as e:
+ nonebot.logger.info(f"convert_duration error: {e}")
+ return default
+
+
+def convert_time_to_seconds(time_str):
+ """转换自然语言时长为秒数
+ Args:
+ time_str: 1d2m3s
+
+ Returns:
+
+ """
+ seconds = 0
+ current_number = ''
+
+ for char in time_str:
+ if char.isdigit() or char == '.':
+ current_number += char
+ elif char == 'd':
+ seconds += float(current_number) * 24 * 60 * 60
+ current_number = ''
+ elif char == 'h':
+ seconds += float(current_number) * 60 * 60
+ current_number = ''
+ elif char == 'm':
+ seconds += float(current_number) * 60
+ current_number = ''
+ elif char == 's':
+ seconds += float(current_number)
+ current_number = ''
+
+ return int(seconds)
+
+
+def convert_seconds_to_time(seconds):
+ """转换秒数为自然语言时长
+ Args:
+ seconds: 10000
+
+ Returns:
+
+ """
+ d = seconds // (24 * 60 * 60)
+ h = (seconds % (24 * 60 * 60)) // (60 * 60)
+ m = (seconds % (60 * 60)) // 60
+ s = seconds % 60
+
+ # 若值为0则不显示
+ time_str = ''
+ if d:
+ time_str += f"{d}d"
+ if h:
+ time_str += f"{h}h"
+ if m:
+ time_str += f"{m}m"
+ if not time_str:
+ time_str = f"{s}s"
+ return time_str
diff --git a/liteyuki/utils/message/tools.py b/src/utils/message/tools.py
similarity index 95%
rename from liteyuki/utils/message/tools.py
rename to src/utils/message/tools.py
index e458ee26..7d051139 100644
--- a/liteyuki/utils/message/tools.py
+++ b/src/utils/message/tools.py
@@ -1,99 +1,99 @@
-import random
-from importlib.metadata import PackageNotFoundError, version
-
-
-def clamp(value: float, min_value: float, max_value: float) -> float | int:
- """将值限制在最小值和最大值之间
-
- Args:
- value (float): 要限制的值
- min_value (float): 最小值
- max_value (float): 最大值
-
- Returns:
- float: 限制后的值
- """
- return max(min(value, max_value), min_value)
-
-
-def convert_size(size: int, precision: int = 2, add_unit: bool = True, suffix: str = " XiB") -> str | float:
- """把字节数转换为人类可读的字符串,计算正负
-
- Args:
-
- add_unit: 是否添加单位,False后则suffix无效
- suffix: XiB或XB
- precision: 浮点数的小数点位数
- size (int): 字节数
-
- Returns:
-
- str: The human-readable string, e.g. "1.23 GB".
- """
- is_negative = size < 0
- size = abs(size)
- for unit in ("", "K", "M", "G", "T", "P", "E", "Z"):
- if size < 1024:
- break
- size /= 1024
- if is_negative:
- size = -size
- if add_unit:
- return f"{size:.{precision}f}{suffix.replace('X', unit)}"
- else:
- return size
-
-
-def keywords_in_text(keywords: list[str], text: str, all_matched: bool) -> bool:
- """
- 检查关键词是否在文本中
- Args:
- keywords: 关键词列表
- text: 文本
- all_matched: 是否需要全部匹配
-
- Returns:
-
- """
- if all_matched:
- for keyword in keywords:
- if keyword not in text:
- return False
- return True
- else:
- for keyword in keywords:
- if keyword in text:
- return True
- return False
-
-
-def check_for_package(package_name: str) -> bool:
- try:
- version(package_name)
- return True
- except PackageNotFoundError:
- return False
-
-
-def random_ascii_string(length: int) -> str:
- """
- 生成随机ASCII字符串
- Args:
- length:
-
- Returns:
-
- """
- return "".join([chr(random.randint(33, 126)) for _ in range(length)])
-
-
-def random_hex_string(length: int) -> str:
- """
- 生成随机十六进制字符串
- Args:
- length:
-
- Returns:
-
- """
- return "".join([random.choice("0123456789abcdef") for _ in range(length)])
+import random
+from importlib.metadata import PackageNotFoundError, version
+
+
+def clamp(value: float, min_value: float, max_value: float) -> float | int:
+ """将值限制在最小值和最大值之间
+
+ Args:
+ value (float): 要限制的值
+ min_value (float): 最小值
+ max_value (float): 最大值
+
+ Returns:
+ float: 限制后的值
+ """
+ return max(min(value, max_value), min_value)
+
+
+def convert_size(size: int, precision: int = 2, add_unit: bool = True, suffix: str = " XiB") -> str | float:
+ """把字节数转换为人类可读的字符串,计算正负
+
+ Args:
+
+ add_unit: 是否添加单位,False后则suffix无效
+ suffix: XiB或XB
+ precision: 浮点数的小数点位数
+ size (int): 字节数
+
+ Returns:
+
+ str: The human-readable string, e.g. "1.23 GB".
+ """
+ is_negative = size < 0
+ size = abs(size)
+ for unit in ("", "K", "M", "G", "T", "P", "E", "Z"):
+ if size < 1024:
+ break
+ size /= 1024
+ if is_negative:
+ size = -size
+ if add_unit:
+ return f"{size:.{precision}f}{suffix.replace('X', unit)}"
+ else:
+ return size
+
+
+def keywords_in_text(keywords: list[str], text: str, all_matched: bool) -> bool:
+ """
+ 检查关键词是否在文本中
+ Args:
+ keywords: 关键词列表
+ text: 文本
+ all_matched: 是否需要全部匹配
+
+ Returns:
+
+ """
+ if all_matched:
+ for keyword in keywords:
+ if keyword not in text:
+ return False
+ return True
+ else:
+ for keyword in keywords:
+ if keyword in text:
+ return True
+ return False
+
+
+def check_for_package(package_name: str) -> bool:
+ try:
+ version(package_name)
+ return True
+ except PackageNotFoundError:
+ return False
+
+
+def random_ascii_string(length: int) -> str:
+ """
+ 生成随机ASCII字符串
+ Args:
+ length:
+
+ Returns:
+
+ """
+ return "".join([chr(random.randint(33, 126)) for _ in range(length)])
+
+
+def random_hex_string(length: int) -> str:
+ """
+ 生成随机十六进制字符串
+ Args:
+ length:
+
+ Returns:
+
+ """
+ return "".join([random.choice("0123456789abcdef") for _ in range(length)])
diff --git a/src/utils/message/union.py b/src/utils/message/union.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/utils/nb/__init__.py b/src/utils/nb/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/liteyuki/utils/network/__init__.py b/src/utils/network/__init__.py
similarity index 94%
rename from liteyuki/utils/network/__init__.py
rename to src/utils/network/__init__.py
index 81521c5a..62c4eac0 100644
--- a/liteyuki/utils/network/__init__.py
+++ b/src/utils/network/__init__.py
@@ -1,15 +1,15 @@
-from aiohttp import ClientSession
-
-
-async def simple_get(url: str) -> str:
- """
- 简单异步get请求
- Args:
- url:
-
- Returns:
-
- """
- async with ClientSession() as session:
- async with session.get(url) as resp:
- return await resp.text()
+from aiohttp import ClientSession
+
+
+async def simple_get(url: str) -> str:
+ """
+ 简单异步get请求
+ Args:
+ url:
+
+ Returns:
+
+ """
+ async with ClientSession() as session:
+ async with session.get(url) as resp:
+ return await resp.text()
diff --git a/liteyuki/utils/satori_utils/__init__.py b/src/utils/satori_utils/__init__.py
similarity index 97%
rename from liteyuki/utils/satori_utils/__init__.py
rename to src/utils/satori_utils/__init__.py
index 192714bb..33e7964f 100644
--- a/liteyuki/utils/satori_utils/__init__.py
+++ b/src/utils/satori_utils/__init__.py
@@ -1,3 +1,3 @@
-from .user_info import user_infos
-from .count_friends import count_friends
-from .count_groups import count_groups
+from .user_info import user_infos
+from .count_friends import count_friends
+from .count_groups import count_groups
diff --git a/liteyuki/utils/satori_utils/count_friends.py b/src/utils/satori_utils/count_friends.py
similarity index 96%
rename from liteyuki/utils/satori_utils/count_friends.py
rename to src/utils/satori_utils/count_friends.py
index 3f7b18ea..2752aac4 100644
--- a/liteyuki/utils/satori_utils/count_friends.py
+++ b/src/utils/satori_utils/count_friends.py
@@ -1,13 +1,13 @@
-from nonebot.adapters import satori
-
-
-async def count_friends(bot: satori.Bot) -> int:
- cnt: int = 0
-
- friend_response = await bot.friend_list()
- while friend_response.next is not None:
- cnt += len(friend_response.data)
- friend_response = await bot.friend_list(next_token=friend_response.next)
-
- cnt += len(friend_response.data)
- return cnt - 1
+from nonebot.adapters import satori
+
+
+async def count_friends(bot: satori.Bot) -> int:
+ cnt: int = 0
+
+ friend_response = await bot.friend_list()
+ while friend_response.next is not None:
+ cnt += len(friend_response.data)
+ friend_response = await bot.friend_list(next_token=friend_response.next)
+
+ cnt += len(friend_response.data)
+ return cnt - 1
diff --git a/liteyuki/utils/satori_utils/count_groups.py b/src/utils/satori_utils/count_groups.py
similarity index 96%
rename from liteyuki/utils/satori_utils/count_groups.py
rename to src/utils/satori_utils/count_groups.py
index 789a40b7..4cd30bd1 100644
--- a/liteyuki/utils/satori_utils/count_groups.py
+++ b/src/utils/satori_utils/count_groups.py
@@ -1,13 +1,13 @@
-from nonebot.adapters import satori
-
-
-async def count_groups(bot: satori.Bot) -> int:
- cnt: int = 0
-
- group_response = await bot.guild_list()
- while group_response.next is not None:
- cnt += len(group_response.data)
- group_response = await bot.friend_list(next_token=group_response.next)
-
- cnt += len(group_response.data)
- return cnt - 1
+from nonebot.adapters import satori
+
+
+async def count_groups(bot: satori.Bot) -> int:
+ cnt: int = 0
+
+ group_response = await bot.guild_list()
+ while group_response.next is not None:
+ cnt += len(group_response.data)
+ group_response = await bot.friend_list(next_token=group_response.next)
+
+ cnt += len(group_response.data)
+ return cnt - 1
diff --git a/liteyuki/utils/satori_utils/user_info.py b/src/utils/satori_utils/user_info.py
similarity index 97%
rename from liteyuki/utils/satori_utils/user_info.py
rename to src/utils/satori_utils/user_info.py
index 6500e719..45184297 100644
--- a/liteyuki/utils/satori_utils/user_info.py
+++ b/src/utils/satori_utils/user_info.py
@@ -1,64 +1,64 @@
-import nonebot
-
-from nonebot.adapters import satori
-from nonebot.adapters.satori.models import User
-
-
-class UserInfo:
- user_infos: dict = {}
-
- async def load_friends(self, bot: satori.Bot):
- nonebot.logger.info("Update user info from friends")
- friend_response = await bot.friend_list()
- while friend_response.next is not None:
- for i in friend_response.data:
- i: User = i
- self.user_infos[str(i.id)] = i
- friend_response = await bot.friend_list(next_token=friend_response.next)
-
- for i in friend_response.data:
- i: User = i
- self.user_infos[str(i.id)] = i
-
- nonebot.logger.info("Finish update user info")
-
- async def get(self, uid: int | str) -> User | None:
- try:
- return self.user_infos[str(uid)]
- except KeyError:
- return None
-
- async def put(self, user: User) -> bool:
- """
- 向用户信息数据库中添加/修改一项,返回值仅代表数据是否变更,不代表操作是否成功
- Args:
- user: 要加入数据库的用户
-
- Returns: 当数据库中用户信息发生变化时返回 True, 否则返回 False
-
- """
- try:
- old_user: User = self.user_infos[str(user.id)]
- attr_edited = False
- if user.name is not None:
- if old_user.name != user.name:
- attr_edited = True
- self.user_infos[str(user.id)].name = user.name
- if user.nick is not None:
- if old_user.nick != user.nick:
- attr_edited = True
- self.user_infos[str(user.id)].nick = user.nick
- if user.avatar is not None:
- if old_user.avatar != user.avatar:
- attr_edited = True
- self.user_infos[str(user.id)].avatar = user.avatar
- return attr_edited
- except KeyError:
- self.user_infos[str(user.id)] = user
- return True
-
- def __init__(self):
- pass
-
-
-user_infos = UserInfo()
+import nonebot
+
+from nonebot.adapters import satori
+from nonebot.adapters.satori.models import User
+
+
+class UserInfo:
+ user_infos: dict = {}
+
+ async def load_friends(self, bot: satori.Bot):
+ nonebot.logger.info("Update user info from friends")
+ friend_response = await bot.friend_list()
+ while friend_response.next is not None:
+ for i in friend_response.data:
+ i: User = i
+ self.user_infos[str(i.id)] = i
+ friend_response = await bot.friend_list(next_token=friend_response.next)
+
+ for i in friend_response.data:
+ i: User = i
+ self.user_infos[str(i.id)] = i
+
+ nonebot.logger.info("Finish update user info")
+
+ async def get(self, uid: int | str) -> User | None:
+ try:
+ return self.user_infos[str(uid)]
+ except KeyError:
+ return None
+
+ async def put(self, user: User) -> bool:
+ """
+ 向用户信息数据库中添加/修改一项,返回值仅代表数据是否变更,不代表操作是否成功
+ Args:
+ user: 要加入数据库的用户
+
+ Returns: 当数据库中用户信息发生变化时返回 True, 否则返回 False
+
+ """
+ try:
+ old_user: User = self.user_infos[str(user.id)]
+ attr_edited = False
+ if user.name is not None:
+ if old_user.name != user.name:
+ attr_edited = True
+ self.user_infos[str(user.id)].name = user.name
+ if user.nick is not None:
+ if old_user.nick != user.nick:
+ attr_edited = True
+ self.user_infos[str(user.id)].nick = user.nick
+ if user.avatar is not None:
+ if old_user.avatar != user.avatar:
+ attr_edited = True
+ self.user_infos[str(user.id)].avatar = user.avatar
+ return attr_edited
+ except KeyError:
+ self.user_infos[str(user.id)] = user
+ return True
+
+ def __init__(self):
+ pass
+
+
+user_infos = UserInfo()