mirror of
https://github.com/ChenXu233/nonebot_plugin_dialectlist.git
synced 2026-01-25 21:22:16 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e42016378c | ||
|
|
fa2a23baca | ||
|
|
2394d3ac4e | ||
|
|
f1c8b700bd | ||
|
|
9474ff743a | ||
|
|
255db230e9 | ||
|
|
75dd80155b | ||
|
|
84d4096af1 | ||
|
|
d73f8afb0d | ||
|
|
3936363574 | ||
|
|
3036111e72 |
43
.github/workflows/python-publish.yml
vendored
Normal file
43
.github/workflows/python-publish.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# This workflow will upload a Python Package using Twine when a release is created
|
||||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
name: Upload Python Package
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'V*'
|
||||
workflow_dispatch:
|
||||
# release:
|
||||
# types: [published]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install build
|
||||
- name: Build package
|
||||
run: python -m build
|
||||
- name: Publish package
|
||||
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
|
||||
with:
|
||||
user: __token__
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -11,10 +11,12 @@
|
||||
"dialectlist",
|
||||
"displayname",
|
||||
"htmlrender",
|
||||
"localstore",
|
||||
"parameterless",
|
||||
"pyecharts",
|
||||
"pygal",
|
||||
"sqlalchemy",
|
||||
"timecost",
|
||||
"userinfo",
|
||||
"whereclause",
|
||||
"xaxis",
|
||||
|
||||
45
README.md
45
README.md
@@ -50,11 +50,11 @@ nonebot-plugin-dialectlist
|
||||
|
||||
在 .env 中,可以添加以下配置项
|
||||
```python
|
||||
dialectlist__string_format = '第{index}名:\n{nickname},{chatdatanum}条消息、n' #消息格式
|
||||
dialectlist__string_format = "第{index}名:\n{nickname},{chatdatanum}条消息、\n" #消息格式
|
||||
dialectlist__get_num = 10 #获取人数数量
|
||||
dialectlist__visualization = True #是否可视化
|
||||
# dialectlist__visualization_type = '圆环图' #可视化方案 (不再支持)
|
||||
dialectlist__font = 'SimHei' #字体格式
|
||||
# dialectlist__visualization_type = "圆环图" #可视化方案 (不再支持)
|
||||
dialectlist__font = "SimHei" #字体格式
|
||||
dialectlist__excluded_people = [] #排除的人的 QQ 号(或频道号?(未经测试))
|
||||
dialectlist__excluded_self = True #是否排除机器人自己 QQ
|
||||
dialectlist__suffix: bool = False # 是否显示后缀
|
||||
@@ -73,29 +73,29 @@ __!!注意!!__
|
||||
|
||||
### 🎨一般用法
|
||||
|
||||
-`/B 话榜` ————看看有史以来(机器人存在以来)群友们发了多少消息! (好像没写)
|
||||
-`/B话榜` ————看看有史以来(机器人存在以来)群友们发了多少消息! (好像没写)
|
||||
|
||||
-`/今日 B 话榜` ————看看今天的群友发了多少消息!
|
||||
-`/今日B话榜` ————看看今天的群友发了多少消息!
|
||||
|
||||
-`/昨日 B 话榜` ————看看昨天的群友发了多少消息!
|
||||
-`/昨日B话榜` ————看看昨天的群友发了多少消息!
|
||||
|
||||
-`/前日 B 话榜` ————看看前天的群友发了多少消息!
|
||||
-`/前日B话榜` ————看看前天的群友发了多少消息!
|
||||
|
||||
-`/本周 B 话榜` ————看看本周的群友发了多少消息!
|
||||
-`/本周B话榜` ————看看本周的群友发了多少消息!
|
||||
|
||||
-`/上周 B 话榜` ————看看上周的群友发了多少消息!
|
||||
-`/上周B话榜` ————看看上周的群友发了多少消息!
|
||||
|
||||
-`/本月 B 话榜` ————看看这个月的群友发了多少消息!
|
||||
-`/本月B话榜` ————看看这个月的群友发了多少消息!
|
||||
|
||||
-`/年度 B 话榜` ————看看今年的群友发了多少消息!
|
||||
-`/年度B话榜` ————看看今年的群友发了多少消息!
|
||||
|
||||
-`/历史 B 话榜` ————看看历史上(机器人存在以来)的群友发了多少消息!
|
||||
-`/历史B话榜` ————看看历史上(机器人存在以来)的群友发了多少消息!
|
||||
|
||||
### 🚀进阶用法
|
||||
|
||||
`/{时间类型(今日|年度)?}{B 话榜|废话榜} {时间类型?} {ISO8601 格式时间} {群号}`
|
||||
`/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间} {群号}`
|
||||
|
||||
如:`/B 话榜 历史 2024-01-01~2024-01-02 12345678`
|
||||
如:`/B话榜 历史 2024-01-01~2024-01-02 12345678`
|
||||
|
||||
## 💪 目前支持的平台
|
||||
|
||||
@@ -136,6 +136,12 @@ __!!注意!!__
|
||||
本插件的__init__.py 中的处理函数参考了词云中的方法 ~~(其实大部分都是 Ctrl+C Ctr+V)~~
|
||||
|
||||
[nonebot-plugin-wordcloud](https://github.com/he0119/nonebot-plugin-wordcloud)
|
||||
|
||||
感谢以下开发者作出的贡献:
|
||||
|
||||
<a href="https://github.com/ChenXu233/nonebot_plugin_dialectlist/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=ChenXu233/nonebot_plugin_dialectlist&max=1000" />
|
||||
</a>
|
||||
|
||||
### 🎀TODO
|
||||
|
||||
@@ -143,21 +149,20 @@ __!!注意!!__
|
||||
|
||||
- [x] 尝试利用 jinja2 模板引擎制作可视化图片
|
||||
|
||||
- [ ] 更好看的图片渲染
|
||||
- [x] 私聊的查询(超级用户可以任意查询群聊的信息)一半完成
|
||||
|
||||
- [x] 添加一些全新的可配置项
|
||||
|
||||
- [x] 更好看的图片渲染
|
||||
|
||||
- [ ] 提供多样化的渲染器配置(html 渲染,pillow 渲染,统计绘图软件渲染)
|
||||
- [ ] 为 pillow 渲染方式提供插件的加载方式(什么?插件里的插件???)
|
||||
|
||||
- [ ] 私聊的查询(超级用户可以任意查询群聊的信息)一半完成
|
||||
|
||||
- [ ] 查询带某关键词的消息量
|
||||
|
||||
- [ ] 使用管理员权限直接获取 QQ 官方统计的今日消息量以优化代码运行速度
|
||||
|
||||
- [ ] 特殊的储存方案优化消息统计
|
||||
|
||||
- [ ] 添加一些全新的可配置项
|
||||
|
||||
|
||||
待补充。.....
|
||||
|
||||
|
||||
@@ -19,30 +19,22 @@ from arclet.alconna import ArparmaBehavior
|
||||
from arclet.alconna.arparma import Arparma
|
||||
|
||||
from nonebot.log import logger
|
||||
from nonebot.params import Arg, Depends
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.compat import model_dump
|
||||
from nonebot.adapters import Bot, Event, Message
|
||||
from nonebot.params import Arg, Depends
|
||||
from nonebot.adapters import Bot, Event
|
||||
from nonebot.permission import SUPERUSER
|
||||
from nonebot.plugin import PluginMetadata, inherit_supported_adapters
|
||||
from nonebot.typing import T_State
|
||||
from nonebot_plugin_alconna import (
|
||||
Alconna,
|
||||
AlconnaMatch,
|
||||
AlconnaMatcher,
|
||||
AlconnaQuery,
|
||||
Option,
|
||||
Args,
|
||||
Match,
|
||||
Option,
|
||||
Query,
|
||||
image_fetch,
|
||||
Alconna,
|
||||
on_alconna,
|
||||
)
|
||||
|
||||
from nonebot_plugin_chatrecorder import get_message_records
|
||||
from nonebot_plugin_apscheduler import scheduler
|
||||
from nonebot_plugin_userinfo import get_user_info
|
||||
from nonebot_plugin_chatrecorder import get_message_records
|
||||
from nonebot_plugin_session import Session, SessionIdType, extract_session
|
||||
|
||||
# from . import migrations #抄词云的部分代码,还不知道这有什么用
|
||||
@@ -58,10 +50,9 @@ from .model import UserRankInfo
|
||||
from .utils import (
|
||||
got_rank,
|
||||
msg_counter,
|
||||
persist_id2user_id,
|
||||
user_id2persist_id,
|
||||
group_id2persist_id,
|
||||
get_rank_image,
|
||||
persist_id2user_id,
|
||||
# get_user_info2,
|
||||
)
|
||||
|
||||
__plugin_meta__ = PluginMetadata(
|
||||
@@ -202,6 +193,8 @@ async def _group_message(
|
||||
state["stop"] = state["start"] + timedelta(days=1)
|
||||
except ValueError:
|
||||
await rank_cmd.finish("请输入正确的日期,不然我没法理解呢!")
|
||||
|
||||
logger.debug(f"命令解析花费时间:{t.time() - t1}")
|
||||
|
||||
|
||||
@rank_cmd.got(
|
||||
@@ -223,6 +216,7 @@ async def handle_rank(
|
||||
start: datetime = Arg(),
|
||||
stop: datetime = Arg(),
|
||||
):
|
||||
t1 = t.time()
|
||||
if id := state["group_id"]:
|
||||
id = str(id)
|
||||
logger.debug(f"group_id: {id}")
|
||||
@@ -233,6 +227,9 @@ async def handle_rank(
|
||||
if not id:
|
||||
await saa.Text("没有指定群哦").finish()
|
||||
|
||||
logger.debug(f"所属群聊解析花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
|
||||
messages = await get_message_records(
|
||||
id2s=[id],
|
||||
id_type=SessionIdType.GROUP,
|
||||
@@ -243,11 +240,16 @@ async def handle_rank(
|
||||
time_stop=stop,
|
||||
exclude_id1s=plugin_config.excluded_people,
|
||||
)
|
||||
|
||||
|
||||
logger.debug(f"获取群聊消息花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
|
||||
if not messages:
|
||||
await saa.Text("明明这个时间段都没有人说话怎么会有话痨榜呢?").finish()
|
||||
|
||||
rank = got_rank(msg_counter(messages))
|
||||
logger.debug(f"群聊消息计数花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
logger.debug(rank)
|
||||
rank2: List[UserRankInfo] = []
|
||||
ids = await persist_id2user_id([int(i[0]) for i in rank])
|
||||
@@ -278,14 +280,14 @@ async def handle_rank(
|
||||
**model_dump(user_info),
|
||||
user_bnum=i[1],
|
||||
user_proportion=round(i[1] / total * 100, 2),
|
||||
user_index=cn2an.an2cn(index),
|
||||
user_index=index,
|
||||
user_nickname=user_nickname,
|
||||
user_avatar_bytes=user_avatar,
|
||||
)
|
||||
user.user_gender = (
|
||||
"她"
|
||||
"♀"
|
||||
if user_info.user_gender == "female"
|
||||
else "他" if user_info.user_gender == "male" else "ta"
|
||||
else "♂" if user_info.user_gender == "male" else ""
|
||||
)
|
||||
rank2.append(user)
|
||||
index += 1
|
||||
@@ -300,16 +302,27 @@ async def handle_rank(
|
||||
chatdatanum=rank2[i].user_bnum,
|
||||
)
|
||||
string += str_example
|
||||
|
||||
|
||||
msg = saa.Text(string)
|
||||
|
||||
logger.debug(f"群聊消息渲染文字花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
|
||||
if plugin_config.visualization:
|
||||
image = await get_rank_image(rank2)
|
||||
msg += saa.Image(image)
|
||||
|
||||
|
||||
if plugin_config.suffix:
|
||||
timecost = t.time() - state["t1"]
|
||||
suffix = saa.Text(plugin_config.string_suffix.format(timecost=timecost))
|
||||
msg += suffix
|
||||
|
||||
|
||||
logger.debug(f"群聊消息渲染图片花费时间:{t.time() - t1}")
|
||||
|
||||
await msg.finish(reply=True)
|
||||
|
||||
|
||||
# @scheduler.scheduled_job(
|
||||
# "dialectlist", day="*/2", id="xxx", args=[1], kwargs={"arg2": 2}
|
||||
# )
|
||||
# async def __():
|
||||
# pass
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
from typing import Optional, Literal, List
|
||||
from nonebot import get_driver, get_plugin_config
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, List
|
||||
from nonebot import get_driver, get_plugin_config
|
||||
|
||||
|
||||
class ScopedConfig(BaseModel):
|
||||
font: str = "SimHei" # 字体格式
|
||||
get_num: int = 5 # 获取人数数量
|
||||
timezone: Optional[str] = "Asia/Shanghai"
|
||||
excluded_self: bool = True
|
||||
string_format: str = "第{index}名:\n{nickname},{chatdatanum}条消息\n" # 消息格式
|
||||
template_path: str = "./template/rank_template.j2" # 模板路径
|
||||
visualization: bool = True # 是否可视化
|
||||
excluded_people: List[str] = [] # 排除的人的QQ号
|
||||
font: str = "SimHei" # 字体格式
|
||||
suffix: bool = False # 是否显示后缀
|
||||
excluded_self: bool = True
|
||||
visualization: bool = True # 是否可视化
|
||||
counting_cache: bool = True
|
||||
excluded_people: List[str] = [] # 排除的人的QQ号
|
||||
timezone: Optional[str] = "Asia/Shanghai"
|
||||
string_suffix: str = "统计花费时间:{timecost}秒" # 消息格式后缀
|
||||
template_path: str = "./template/rank_template.j2" # 模板路径
|
||||
string_format: str = "第{index}名:\n{nickname},{chatdatanum}条消息\n" # 消息格式
|
||||
|
||||
|
||||
class Config(BaseModel):
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from typing import Optional, Literal, List, Union
|
||||
from typing import Union
|
||||
from pydantic import BaseModel
|
||||
from nonebot_plugin_userinfo import get_user_info, UserInfo
|
||||
from nonebot_plugin_orm import Model
|
||||
from nonebot_plugin_userinfo import UserInfo
|
||||
|
||||
|
||||
class UserRankInfo(UserInfo):
|
||||
@@ -9,3 +10,8 @@ class UserRankInfo(UserInfo):
|
||||
user_nickname: str
|
||||
user_index: Union[int, str]
|
||||
user_avatar_bytes: bytes
|
||||
|
||||
class MsgCountDayData(BaseModel):
|
||||
user_id:str
|
||||
# class MsgCountData(Model):
|
||||
# __tablename__ = 'dialectlist_msg_data'
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
# TODO 使用计数缓存进行数据库查询优化,避免一次性查询过多消息导致内存爆炸。
|
||||
from nonebot_plugin_orm import Model
|
||||
|
||||
@@ -1,100 +1,114 @@
|
||||
body {
|
||||
background-image: url('https://image.anosu.top/pixiv/direct?size=regular');
|
||||
background-attachment: scroll;
|
||||
margin: 0;
|
||||
background-color: #1A1A1A;
|
||||
/* Dark gradient */
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
width: 1024;
|
||||
background-attachment: fixed;
|
||||
/* Ensure background stays fixed during scroll */
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: "text", sans-serif;
|
||||
color: #E0E0E0;
|
||||
/* Light gray text for better contrast */
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "text";
|
||||
src: url("../res/HarmonyOS_Sans_SC.woff2");
|
||||
}
|
||||
|
||||
.container {
|
||||
padding: 20px 40px;
|
||||
position: relative;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.card {
|
||||
border: 5px solid rgba(200, 200, 200, 1);
|
||||
text-align: center; /*设置文本水平居中*/
|
||||
.glow {
|
||||
border: 2px solid rgba(77, 228, 255, 0.8);
|
||||
box-shadow: 0 0 15px rgba(0, 255, 255, 0.3);
|
||||
/* Neon glow */
|
||||
}
|
||||
|
||||
.card,
|
||||
.card2 {
|
||||
text-align: center;
|
||||
align-content: center;
|
||||
margin: 1% 1% 1% 1%;
|
||||
border-radius: 2rem;
|
||||
background: rgba(255, 255, 255, .2);
|
||||
-webkit-backdrop-filter: blur(3px);
|
||||
backdrop-filter: blur(3px);
|
||||
margin: 1%;
|
||||
border-radius: 1rem;
|
||||
/* background: rgba(25, 25, 25, 0.9); Darker background */
|
||||
-webkit-backdrop-filter: blur(5px);
|
||||
backdrop-filter: blur(5px);
|
||||
}
|
||||
|
||||
.card2 {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
flex-direction: revert;
|
||||
display: flex;
|
||||
border: 5px solid rgba(200, 200, 200, 1);
|
||||
text-align: center; /*设置文本水平居中*/
|
||||
align-content: center;
|
||||
margin: 1% 1% 1% 1%;
|
||||
border-radius: 2rem;
|
||||
background: rgba(255, 255, 255, .2);
|
||||
-webkit-backdrop-filter: blur(3px);
|
||||
backdrop-filter: blur(3px);
|
||||
}
|
||||
|
||||
.center_text {
|
||||
text-align: center;
|
||||
font-size: 300%;
|
||||
font-weight: bolder;
|
||||
font-size: 3rem;
|
||||
font-weight: 900;
|
||||
color: #00FFFF;
|
||||
/* Cyan color for a techno vibe */
|
||||
}
|
||||
|
||||
.center_text2 {
|
||||
text-align: center;
|
||||
font-size: 150%;
|
||||
font-size: 1.5rem;
|
||||
color: #A0A0A0;
|
||||
/* Slightly lighter gray */
|
||||
}
|
||||
|
||||
.rank_container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
border: 5px solid rgba(200, 200, 200, 1);
|
||||
border-radius: 2rem;
|
||||
padding: 10px 20px;
|
||||
margin: 1% 1% 1% 1%;
|
||||
display: flex;
|
||||
border-radius: 1rem;
|
||||
padding: 10px 10px;
|
||||
margin: 1%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background: rgba(243, 243, 240, 0.6);
|
||||
/* background: rgba(30, 30, 30, 0.9); Dark background */
|
||||
}
|
||||
|
||||
.rank_card {
|
||||
display: flex;
|
||||
width: 90%;
|
||||
width: 100%;
|
||||
flex-direction: row;
|
||||
border: 3px solid rgba(255, 255, 255, 0.61);
|
||||
margin: 20px 10px;
|
||||
border-radius: 2rem;
|
||||
/* padding: 20px 40px; */
|
||||
/* border: 2px solid rgba(100, 100, 100, 0.7); */
|
||||
margin: 10px 10px;
|
||||
border-radius: 1rem;
|
||||
align-content: center;
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
/* background: rgba(40, 40, 40, 0.8); Slightly lighter for contrast */
|
||||
}
|
||||
|
||||
.profile{
|
||||
width: 20%;
|
||||
height: 20%;
|
||||
border: 3px solid rgba(255, 255, 255, 0.61);
|
||||
border-radius: 2000px;
|
||||
.profile,
|
||||
.profile2 {
|
||||
border: 2px solid rgba(100, 100, 100, 0.7);
|
||||
border-radius: 50%;
|
||||
background-size: cover;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.profile2{
|
||||
.avatar {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.profile {
|
||||
width: 12vw;
|
||||
height: 12vw;
|
||||
}
|
||||
|
||||
.profile2 {
|
||||
width: 8%;
|
||||
height: 8%;
|
||||
border: 3px solid rgba(255, 255, 255, 0.61);
|
||||
border-radius: 2000px;
|
||||
background-size: cover;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.rank_card_info {
|
||||
@@ -107,12 +121,50 @@ body {
|
||||
width: 90%;
|
||||
height: 25px;
|
||||
border-radius: 25px;
|
||||
background: #ffb2b25d;
|
||||
background: rgb(0 0 0 / 31%);
|
||||
}
|
||||
|
||||
.g-progress {
|
||||
width: 50%;
|
||||
height: inherit;
|
||||
border-radius: 25px 20px 20px 25px;
|
||||
background: linear-gradient(90deg,rgb(57, 230, 230), rgb(21, 161, 248));
|
||||
background: linear-gradient(90deg, rgb(0, 128, 255), rgb(255, 0, 174));
|
||||
/* Neon cyan to magenta gradient */
|
||||
}
|
||||
|
||||
.rank {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.rank_number {
|
||||
margin: 50px;
|
||||
font-size: 32px;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
padding: 6px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.rank_number_1 {
|
||||
border-radius: 999px;
|
||||
background-color: gold;
|
||||
color: rgb(154, 105, 14);
|
||||
}
|
||||
|
||||
.rank_number_2 {
|
||||
border-radius: 999px;
|
||||
background-color: silver;
|
||||
color: rgb(80, 80, 80);
|
||||
}
|
||||
|
||||
.rank_number_3 {
|
||||
border-radius: 999px;
|
||||
background-color: #CD7F32;
|
||||
color: rgb(95 52 14);
|
||||
}
|
||||
@@ -9,28 +9,36 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="card" >
|
||||
<div class="card glow" >
|
||||
<p class="center_text">话痨排行榜</p>
|
||||
</div>
|
||||
|
||||
<div class="rank_container">
|
||||
<div class="rank_container glow">
|
||||
|
||||
{% for i in users %}
|
||||
<div class="rank_card">
|
||||
<img class="profile" src="{{ cache_path }}/{{ i.user_id }}.jpg"/>
|
||||
<div class="rank">
|
||||
<div class="rank_number rank_number_{{ i.user_index }}">{{ i.user_index }}</div>
|
||||
</div>
|
||||
<div class="avatar">
|
||||
<img class="profile" src="{{ cache_path }}/{{ i.user_id }}.jpg"/>
|
||||
</div>
|
||||
<div class="rank_card_info">
|
||||
<h1>第{{ i.user_index }}名:{{ i.user_nickname }}</h1>
|
||||
<h1>{{ i.user_nickname }} {{ i.user_gender }}</h1>
|
||||
<div class="g-container">
|
||||
<div class="g-progress" style="width: {{ i.user_proportion }}%"></div>
|
||||
</div>
|
||||
<p>{{ i.user_gender }}一共废话了{{ i.user_bnum }}句,占比{{ i.user_proportion }}%</p>
|
||||
<p>{{ i.user_proportion }}%</p>
|
||||
</div>
|
||||
<div class="rank">
|
||||
<div class="rank_number">{{ i.user_bnum }}</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card2">
|
||||
<div class="card2 glow">
|
||||
<img class="profile2" src="{{ file_path }}/template/avatar/master.jpg"/>
|
||||
<p class="center_text2">Designed By ChenXu233</p>
|
||||
</div>
|
||||
|
||||
BIN
nonebot_plugin_dialectlist/template/res/HarmonyOS_Sans_SC.woff2
Normal file
BIN
nonebot_plugin_dialectlist/template/res/HarmonyOS_Sans_SC.woff2
Normal file
Binary file not shown.
@@ -1,16 +1,15 @@
|
||||
# TODO 时间处理模块,用于处理时间相关操作。
|
||||
from datetime import datetime, time, tzinfo
|
||||
from typing import Optional, Union
|
||||
from zoneinfo import ZoneInfo
|
||||
from typing import Optional, Union
|
||||
from datetime import datetime, time, tzinfo
|
||||
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.params import Arg
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.adapters import Message
|
||||
|
||||
from nonebot_plugin_apscheduler import scheduler
|
||||
from nonebot_plugin_alconna import AlconnaMatcher
|
||||
|
||||
|
||||
from .config import plugin_config
|
||||
|
||||
|
||||
|
||||
@@ -1,30 +1,24 @@
|
||||
import os
|
||||
import unicodedata
|
||||
|
||||
from typing import Optional, Dict, List, Union
|
||||
from pathlib import Path
|
||||
from typing import Dict, List
|
||||
from sqlalchemy import or_, select
|
||||
from sqlalchemy.sql import ColumnElement
|
||||
|
||||
from nonebot.log import logger
|
||||
from nonebot.params import Arg, Depends
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.params import Depends
|
||||
from nonebot.matcher import Matcher
|
||||
from nonebot.adapters import Message
|
||||
|
||||
from nonebot_plugin_orm import get_session
|
||||
from nonebot_plugin_session import Session, SessionLevel, extract_session
|
||||
from nonebot_plugin_session_orm import SessionModel
|
||||
from nonebot_plugin_userinfo import EventUserInfo, UserInfo
|
||||
from nonebot_plugin_htmlrender import html_to_pic, template_to_pic
|
||||
from nonebot_plugin_apscheduler import scheduler
|
||||
from nonebot_plugin_chatrecorder import MessageRecord
|
||||
from nonebot_plugin_localstore import get_cache_dir
|
||||
from nonebot_plugin_alconna import AlconnaMatcher
|
||||
from nonebot_plugin_htmlrender import template_to_pic
|
||||
from nonebot_plugin_session_orm import SessionModel
|
||||
from nonebot_plugin_chatrecorder import MessageRecord
|
||||
|
||||
|
||||
from .config import plugin_config
|
||||
from .model import UserRankInfo
|
||||
from .config import plugin_config
|
||||
|
||||
cache_path = get_cache_dir("nonebot_plugin_dialectlist")
|
||||
|
||||
@@ -184,5 +178,5 @@ async def get_rank_image(rank: List[UserRankInfo]) -> bytes:
|
||||
"cache_path": cache_path,
|
||||
"file_path": os.path.dirname(os.path.abspath(__file__)),
|
||||
},
|
||||
pages={"viewport": {"width": 1100, "height": 10}},
|
||||
pages={"viewport": {"width": 1000, "height": 10}},
|
||||
)
|
||||
|
||||
154
pdm.lock
generated
154
pdm.lock
generated
@@ -5,7 +5,7 @@
|
||||
groups = ["default", "Test", "dev"]
|
||||
strategy = ["inherit_metadata"]
|
||||
lock_version = "4.5.0"
|
||||
content_hash = "sha256:92f7320fcd5cca140159f00fd791bd62098bbff78b0e29f3bb35be0e667cdc26"
|
||||
content_hash = "sha256:d8430f5bacf90d467148ef4e93741068a46c2f9885c5c05e2ae5ff7e8c02b39b"
|
||||
|
||||
[[metadata.targets]]
|
||||
requires_python = "~=3.9"
|
||||
@@ -21,6 +21,20 @@ files = [
|
||||
{file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aiosqlite"
|
||||
version = "0.20.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "asyncio bridge to the standard sqlite3 module"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"typing-extensions>=4.0",
|
||||
]
|
||||
files = [
|
||||
{file = "aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"},
|
||||
{file = "aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "alembic"
|
||||
version = "1.13.1"
|
||||
@@ -340,7 +354,7 @@ version = "0.4.6"
|
||||
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||
summary = "Cross-platform colored terminal text."
|
||||
groups = ["default", "Test", "dev"]
|
||||
marker = "sys_platform == \"win32\" or platform_system == \"Windows\""
|
||||
marker = "platform_system == \"Windows\" or sys_platform == \"win32\""
|
||||
files = [
|
||||
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||
@@ -1212,7 +1226,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-orm"
|
||||
version = "0.7.3"
|
||||
version = "0.7.6"
|
||||
requires_python = "<4.0,>=3.8"
|
||||
summary = "SQLAlchemy ORM support for nonebot"
|
||||
groups = ["default"]
|
||||
@@ -1227,8 +1241,24 @@ dependencies = [
|
||||
"typing-extensions~=4.9; python_version < \"3.11\"",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_orm-0.7.3-py3-none-any.whl", hash = "sha256:9b0d114a4e7b2e452cb333e7147ae4216dff2f9685df616e5fa1f3f892d8795b"},
|
||||
{file = "nonebot_plugin_orm-0.7.3.tar.gz", hash = "sha256:cbb573598d0ecef2d0e75b5bdebd05297c68a2b368029a8763660f2a45381a2c"},
|
||||
{file = "nonebot_plugin_orm-0.7.6-py3-none-any.whl", hash = "sha256:6ce808d7e847eb7c1a738609b0e94bb612488650c5150ae1b2d67463034bb255"},
|
||||
{file = "nonebot_plugin_orm-0.7.6.tar.gz", hash = "sha256:3ae4ac362a8ea6e6467666f654287855a30447f8fa457af88f1760f155c5d68c"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-orm"
|
||||
version = "0.7.6"
|
||||
extras = ["default"]
|
||||
requires_python = "<4.0,>=3.8"
|
||||
summary = "SQLAlchemy ORM support for nonebot"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"nonebot-plugin-orm==0.7.6",
|
||||
"sqlalchemy[aiosqlite]",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_orm-0.7.6-py3-none-any.whl", hash = "sha256:6ce808d7e847eb7c1a738609b0e94bb612488650c5150ae1b2d67463034bb255"},
|
||||
{file = "nonebot_plugin_orm-0.7.6.tar.gz", hash = "sha256:3ae4ac362a8ea6e6467666f654287855a30447f8fa457af88f1760f155c5d68c"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1905,42 +1935,100 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "sqlalchemy"
|
||||
version = "2.0.30"
|
||||
version = "2.0.32"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Database Abstraction Library"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"greenlet!=0.4.17; platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\"",
|
||||
"greenlet!=0.4.17; (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\") and python_version < \"3.13\"",
|
||||
"importlib-metadata; python_version < \"3.8\"",
|
||||
"typing-extensions>=4.6.0",
|
||||
]
|
||||
files = [
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b48154678e76445c7ded1896715ce05319f74b1e73cf82d4f8b59b46e9c0ddc"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2753743c2afd061bb95a61a51bbb6a1a11ac1c44292fad898f10c9839a7f75b2"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7bfc726d167f425d4c16269a9a10fe8630ff6d14b683d588044dcef2d0f6be7"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f61ada6979223013d9ab83a3ed003ded6959eae37d0d685db2c147e9143797"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a365eda439b7a00732638f11072907c1bc8e351c7665e7e5da91b169af794af"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bba002a9447b291548e8d66fd8c96a6a7ed4f2def0bb155f4f0a1309fd2735d5"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-win32.whl", hash = "sha256:0138c5c16be3600923fa2169532205d18891b28afa817cb49b50e08f62198bb8"},
|
||||
{file = "SQLAlchemy-2.0.30-cp310-cp310-win_amd64.whl", hash = "sha256:99650e9f4cf3ad0d409fed3eec4f071fadd032e9a5edc7270cd646a26446feeb"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:955991a09f0992c68a499791a753523f50f71a6885531568404fa0f231832aa0"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f69e4c756ee2686767eb80f94c0125c8b0a0b87ede03eacc5c8ae3b54b99dc46"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c9db1ce00e59e8dd09d7bae852a9add716efdc070a3e2068377e6ff0d6fdaa"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1429a4b0f709f19ff3b0cf13675b2b9bfa8a7e79990003207a011c0db880a13"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:efedba7e13aa9a6c8407c48facfdfa108a5a4128e35f4c68f20c3407e4376aa9"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16863e2b132b761891d6c49f0a0f70030e0bcac4fd208117f6b7e053e68668d0"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-win32.whl", hash = "sha256:2ecabd9ccaa6e914e3dbb2aa46b76dede7eadc8cbf1b8083c94d936bcd5ffb49"},
|
||||
{file = "SQLAlchemy-2.0.30-cp311-cp311-win_amd64.whl", hash = "sha256:0b3f4c438e37d22b83e640f825ef0f37b95db9aa2d68203f2c9549375d0b2260"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a79d65395ac5e6b0c2890935bad892eabb911c4aa8e8015067ddb37eea3d56c"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a5baf9267b752390252889f0c802ea13b52dfee5e369527da229189b8bd592e"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cb5a646930c5123f8461f6468901573f334c2c63c795b9af350063a736d0134"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:296230899df0b77dec4eb799bcea6fbe39a43707ce7bb166519c97b583cfcab3"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c62d401223f468eb4da32627bffc0c78ed516b03bb8a34a58be54d618b74d472"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3b69e934f0f2b677ec111b4d83f92dc1a3210a779f69bf905273192cf4ed433e"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-win32.whl", hash = "sha256:77d2edb1f54aff37e3318f611637171e8ec71472f1fdc7348b41dcb226f93d90"},
|
||||
{file = "SQLAlchemy-2.0.30-cp312-cp312-win_amd64.whl", hash = "sha256:b6c7ec2b1f4969fc19b65b7059ed00497e25f54069407a8701091beb69e591a5"},
|
||||
{file = "SQLAlchemy-2.0.30-py3-none-any.whl", hash = "sha256:7108d569d3990c71e26a42f60474b4c02c8586c4681af5fd67e51a044fdea86a"},
|
||||
{file = "SQLAlchemy-2.0.30.tar.gz", hash = "sha256:2b1708916730f4830bc69d6f49d37f7698b5bd7530aca7f04f785f8849e95255"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"},
|
||||
{file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"},
|
||||
{file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlalchemy"
|
||||
version = "2.0.32"
|
||||
extras = ["aiosqlite"]
|
||||
requires_python = ">=3.7"
|
||||
summary = "Database Abstraction Library"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"aiosqlite",
|
||||
"greenlet!=0.4.17",
|
||||
"sqlalchemy==2.0.32",
|
||||
"typing-extensions!=3.10.0.1",
|
||||
]
|
||||
files = [
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c9045ecc2e4db59bfc97b20516dfdf8e41d910ac6fb667ebd3a79ea54084619"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1467940318e4a860afd546ef61fefb98a14d935cd6817ed07a228c7f7c62f389"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5954463675cb15db8d4b521f3566a017c8789222b8316b1e6934c811018ee08b"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:167e7497035c303ae50651b351c28dc22a40bb98fbdb8468cdc971821b1ae533"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b27dfb676ac02529fb6e343b3a482303f16e6bc3a4d868b73935b8792edb52d0"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf2360a5e0f7bd75fa80431bf8ebcfb920c9f885e7956c7efde89031695cafb8"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-win32.whl", hash = "sha256:306fe44e754a91cd9d600a6b070c1f2fadbb4a1a257b8781ccf33c7067fd3e4d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp310-cp310-win_amd64.whl", hash = "sha256:99db65e6f3ab42e06c318f15c98f59a436f1c78179e6a6f40f529c8cc7100b22"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21b053be28a8a414f2ddd401f1be8361e41032d2ef5884b2f31d31cb723e559f"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b178e875a7a25b5938b53b006598ee7645172fccafe1c291a706e93f48499ff5"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723a40ee2cc7ea653645bd4cf024326dea2076673fc9d3d33f20f6c81db83e1d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295ff8689544f7ee7e819529633d058bd458c1fd7f7e3eebd0f9268ebc56c2a0"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49496b68cd190a147118af585173ee624114dfb2e0297558c460ad7495f9dfe2"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:acd9b73c5c15f0ec5ce18128b1fe9157ddd0044abc373e6ecd5ba376a7e5d961"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-win32.whl", hash = "sha256:9365a3da32dabd3e69e06b972b1ffb0c89668994c7e8e75ce21d3e5e69ddef28"},
|
||||
{file = "SQLAlchemy-2.0.32-cp311-cp311-win_amd64.whl", hash = "sha256:8bd63d051f4f313b102a2af1cbc8b80f061bf78f3d5bd0843ff70b5859e27924"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bab3db192a0c35e3c9d1560eb8332463e29e5507dbd822e29a0a3c48c0a8d92"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:19d98f4f58b13900d8dec4ed09dd09ef292208ee44cc9c2fe01c1f0a2fe440e9"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd33c61513cb1b7371fd40cf221256456d26a56284e7d19d1f0b9f1eb7dd7e8"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2b6be53e4fde0065524f1a0a7929b10e9280987b320716c1509478b712a7688c"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:916a798f62f410c0b80b63683c8061f5ebe237b0f4ad778739304253353bc1cb"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-win32.whl", hash = "sha256:31983018b74908ebc6c996a16ad3690301a23befb643093fcfe85efd292e384d"},
|
||||
{file = "SQLAlchemy-2.0.32-cp312-cp312-win_amd64.whl", hash = "sha256:4363ed245a6231f2e2957cccdda3c776265a75851f4753c60f3004b90e69bfeb"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:52fec964fba2ef46476312a03ec8c425956b05c20220a1a03703537824b5e8e1"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:328429aecaba2aee3d71e11f2477c14eec5990fb6d0e884107935f7fb6001632"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85a01b5599e790e76ac3fe3aa2f26e1feba56270023d6afd5550ed63c68552b3"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf04784797dcdf4c0aa952c8d234fa01974c4729db55c45732520ce12dd95b4"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4488120becf9b71b3ac718f4138269a6be99a42fe023ec457896ba4f80749525"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:14e09e083a5796d513918a66f3d6aedbc131e39e80875afe81d98a03312889e6"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-win32.whl", hash = "sha256:0d322cc9c9b2154ba7e82f7bf25ecc7c36fbe2d82e2933b3642fc095a52cfc78"},
|
||||
{file = "SQLAlchemy-2.0.32-cp39-cp39-win_amd64.whl", hash = "sha256:7dd8583df2f98dea28b5cd53a1beac963f4f9d087888d75f22fcc93a07cf8d84"},
|
||||
{file = "SQLAlchemy-2.0.32-py3-none-any.whl", hash = "sha256:e567a8793a692451f706b363ccf3c45e056b67d90ead58c3bc9471af5d212202"},
|
||||
{file = "SQLAlchemy-2.0.32.tar.gz", hash = "sha256:c1b88cc8b02b6a5f0efb0345a03672d4c897dc7d92585176f88c67346f565ea8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "nonebot-plugin-dialectlist"
|
||||
version = "2.2.1"
|
||||
version = "2.2.4"
|
||||
description = "看看你群群友有多能说"
|
||||
authors = [
|
||||
{name = "Chen_Xu233", email = "woyerpa@outlook.com"},
|
||||
@@ -8,6 +8,7 @@ authors = [
|
||||
dependencies = [
|
||||
"nonebot-plugin-chatrecorder>=0.6.0",
|
||||
"requests>=2.32.3",
|
||||
"nonebot-plugin-orm[default]",
|
||||
"nonebot-plugin-apscheduler>=0.4.0",
|
||||
"nonebot-plugin-alconna>=0.50.2",
|
||||
"nonebot-plugin-cesaa>=0.4.0",
|
||||
@@ -54,4 +55,4 @@ publish = 'pdm run python -m twine upload dist/*'
|
||||
# pre-commit = "^2.20.0"
|
||||
|
||||
# [tool.pdm.global-options]
|
||||
# --no-pip-version-check = true
|
||||
# --no-pip-version-check = true
|
||||
|
||||
Reference in New Issue
Block a user