mirror of
https://github.com/ChenXu233/nonebot_plugin_dialectlist.git
synced 2026-01-25 21:22:16 +00:00
Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07f85be527 | ||
|
|
f2cdfe7f8a | ||
|
|
e0ca7907c0 | ||
|
|
53b2a33923 | ||
|
|
4e339bcdb1 | ||
|
|
0b85f6fb34 | ||
|
|
83d9cda2eb | ||
|
|
dfde832dba | ||
|
|
987b34e282 | ||
|
|
49ce2ffb7c | ||
|
|
fcce94250c | ||
|
|
53e52eabb5 | ||
|
|
633ffbde9a | ||
|
|
d7baa9b04b | ||
|
|
df2cd495c0 | ||
|
|
d2e185c189 | ||
|
|
d42140cc95 | ||
|
|
a753305282 | ||
|
|
ad5f556229 | ||
|
|
3efaafe81c | ||
|
|
c6b87bf981 | ||
|
|
e62f2ed488 | ||
|
|
e5d107c520 | ||
|
|
bf577b5a31 | ||
|
|
d514d96db6 | ||
|
|
677ec56aeb | ||
|
|
4194097258 | ||
|
|
c94de918e9 | ||
|
|
a765267cf1 | ||
|
|
ea682ef18d | ||
|
|
ed7f1167f2 | ||
|
|
9944ece153 | ||
|
|
8d905cb647 | ||
|
|
65dc67c6ac | ||
|
|
7aaddb98f5 | ||
|
|
6d4d17075b | ||
|
|
d422560874 | ||
|
|
d4d3600f23 | ||
|
|
dc5293dbce | ||
|
|
c6c1ae2cc8 | ||
|
|
e42016378c | ||
|
|
fa2a23baca | ||
|
|
2394d3ac4e |
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -11,8 +11,10 @@
|
||||
"dialectlist",
|
||||
"displayname",
|
||||
"htmlrender",
|
||||
"httpx",
|
||||
"localstore",
|
||||
"parameterless",
|
||||
"postprocessor",
|
||||
"pyecharts",
|
||||
"pygal",
|
||||
"sqlalchemy",
|
||||
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 ChenXu233
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
88
README.md
88
README.md
@@ -26,24 +26,28 @@ nonebot-plugin-dialectlist
|
||||
|
||||
## 💿 安装
|
||||
|
||||
通过`pip`或`nb`安装;
|
||||
通过`pip`或`nb`安装:
|
||||
- 通过 pip 安装
|
||||
```bash
|
||||
pip install nonebot-plugin-dialectlist
|
||||
```
|
||||
- 通过 nb-cli 安装
|
||||
```bash
|
||||
nb plugin install nonebot-plugin-dialectlist
|
||||
```
|
||||
|
||||
>**通过 pip **安装
|
||||
|
||||
`pip install nonebot-plugin-dialectlist`
|
||||
|
||||
>**通过 nb **安装
|
||||
|
||||
`nb plugin install nonebot-plugin-dialectlist`
|
||||
|
||||
### ✅ 插件依赖于
|
||||
|
||||
1. [nonebot-plugin-datastore](https://github.com/he0119/nonebot-plugin-datastore) ————储存历史的消息
|
||||
1. [nonebot-plugin-datastore](https://github.com/he0119/nonebot-plugin-datastore) ————本地化储存
|
||||
2. [nonebot-plugin-userinfo](https://github.com/noneplugin/nonebot-plugin-userinfo) ————获取用户信息
|
||||
3. [nonebot-plugin-apscheduler](https://github.com/nonebot/plugin-apscheduler) ————定时发送排行榜信息
|
||||
4. [nonebot-plugin-alconna](https://github.com/ArcletProject/nonebot-plugin-alconna) ————实现命令解析
|
||||
5. [nonebot-plugin-cesaa](https://github.com/MountainDash/nonebot-plugin-send-anything-anywhere) ————实现多平台
|
||||
|
||||
5. [nonebot-plugin-chatrecorder](https://github.com/noneplugin/nonebot-plugin-chatrecorder) ————实现消息储存
|
||||
6. [nonebot-plugin-cesaa](https://github.com/MountainDash/nonebot-plugin-send-anything-anywhere) ————实现多平台
|
||||
|
||||
**⚠注意** 若先前没有安装过```nonebot-plugin-chatrecorder```或者```nonebot-plugin-orm```,则会在启动时报错,请按报错的提示安装数据库!
|
||||
|
||||
## ⚙ 配置
|
||||
|
||||
需要**提前配置**本插件所**依赖的插件**!
|
||||
@@ -73,6 +77,8 @@ __!!注意!!__
|
||||
|
||||
### 🎨一般用法
|
||||
|
||||
#### B话榜
|
||||
|
||||
-`/B话榜` ————看看有史以来(机器人存在以来)群友们发了多少消息! (好像没写)
|
||||
|
||||
-`/今日B话榜` ————看看今天的群友发了多少消息!
|
||||
@@ -91,11 +97,34 @@ __!!注意!!__
|
||||
|
||||
-`/历史B话榜` ————看看历史上(机器人存在以来)的群友发了多少消息!
|
||||
|
||||
#### 看看B话(kkb)
|
||||
|
||||
-`/看看B话 [@某人|QQ号]` ————看看这个b人在这个b群发了多少b话!
|
||||
|
||||
### 🚀进阶用法
|
||||
|
||||
`/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间} {群号}`
|
||||
#### B话榜
|
||||
|
||||
如:`/B话榜 历史 2024-01-01~2024-01-02 12345678`
|
||||
`/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间 ?} {群号} {关键词}`
|
||||
|
||||
如:`/B话榜 历史 2024-01-01~2024-01-02 12345678 女装`
|
||||
|
||||
也可以 `/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间 ?} -g {群号} -k {关键词}`
|
||||
|
||||
以下调用方法均合法:
|
||||
|
||||
`/今日B话榜 -g 12345678 -k 女装`
|
||||
`/昨日B话榜 -k 女装`
|
||||
`/本周B话榜 -g 12345678`
|
||||
|
||||
#### 看看B话
|
||||
|
||||
`/看看B话 {@|QQ号} {群号?} {关键词?}`
|
||||
|
||||
以下调用方法均合法:
|
||||
|
||||
`/kkb 114514 1919810 ♂`
|
||||
`/kkb @man -k ♂`
|
||||
|
||||
## 💪 目前支持的平台
|
||||
|
||||
@@ -131,6 +160,9 @@ __!!注意!!__
|
||||
|
||||
</details>
|
||||
|
||||

|
||||
|
||||
|
||||
### 💕感谢
|
||||
|
||||
本插件的__init__.py 中的处理函数参考了词云中的方法 ~~(其实大部分都是 Ctrl+C Ctr+V)~~
|
||||
@@ -147,27 +179,27 @@ __!!注意!!__
|
||||
|
||||
- [x] 适配全平台
|
||||
|
||||
- [x] 更好看的图片渲染
|
||||
|
||||
- [x] 添加一些全新的可配置项
|
||||
|
||||
- [x] 尝试利用 jinja2 模板引擎制作可视化图片
|
||||
|
||||
- [x] 私聊的查询(超级用户可以任意查询群聊的信息)一半完成
|
||||
|
||||
- [x] 添加一些全新的可配置项
|
||||
- [x] 特殊的储存方案优化消息统计
|
||||
|
||||
- [x] 更好看的图片渲染
|
||||
- [x] 查询带某关键词的消息量
|
||||
|
||||
- [ ] 提供多样化的渲染器配置(html 渲染,pillow 渲染,统计绘图软件渲染)
|
||||
- [ ] 为 pillow 渲染方式提供插件的加载方式(什么?插件里的插件???)
|
||||
|
||||
- [ ] 查询带某关键词的消息量
|
||||
|
||||
- [ ] 使用管理员权限直接获取 QQ 官方统计的今日消息量以优化代码运行速度
|
||||
|
||||
- [ ] 特殊的储存方案优化消息统计
|
||||
- [x] 合并转发
|
||||
|
||||
待补充。.....
|
||||
|
||||
## 📖版本
|
||||
|
||||
## 📖版本日志
|
||||
|
||||
<details>
|
||||
<summary>点我展开</summary>
|
||||
|
||||
### V1.0
|
||||
|
||||
- 看看群里群友能有多话痨
|
||||
@@ -201,5 +233,11 @@ __!!注意!!__
|
||||
|
||||
- 优化代码,添加一些新的可配置项。
|
||||
|
||||
### V2.4
|
||||
|
||||
- 添加一些新的可配置项。
|
||||
|
||||
</details>
|
||||
|
||||
### 👾题外话
|
||||
~~整个项目快被我写成屎山了~~
|
||||
|
||||
@@ -8,37 +8,33 @@ require("nonebot_plugin_alconna")
|
||||
require("nonebot_plugin_cesaa")
|
||||
|
||||
import re
|
||||
import os
|
||||
import cn2an
|
||||
import time as t
|
||||
import nonebot_plugin_saa as saa
|
||||
|
||||
from typing import Union, Optional, List
|
||||
from typing import Union, Optional
|
||||
from datetime import datetime, timedelta
|
||||
from arclet.alconna import ArparmaBehavior
|
||||
from arclet.alconna.arparma import Arparma
|
||||
|
||||
from nonebot import on_command
|
||||
from nonebot.log import logger
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.compat import model_dump
|
||||
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_plugin_alconna import (
|
||||
At,
|
||||
Args,
|
||||
Field,
|
||||
Match,
|
||||
Option,
|
||||
Alconna,
|
||||
on_alconna,
|
||||
)
|
||||
|
||||
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 #抄词云的部分代码,还不知道这有什么用
|
||||
# from .function import *
|
||||
from .storage import get_cache, build_cache
|
||||
from .config import Config, plugin_config
|
||||
from .usage import __usage__
|
||||
from .time import (
|
||||
@@ -46,13 +42,12 @@ from .time import (
|
||||
get_datetime_now_with_timezone,
|
||||
parse_datetime,
|
||||
)
|
||||
from .model import UserRankInfo
|
||||
from .utils import (
|
||||
got_rank,
|
||||
msg_counter,
|
||||
get_rank_image,
|
||||
persist_id2user_id,
|
||||
# get_user_info2,
|
||||
get_user_infos,
|
||||
)
|
||||
|
||||
__plugin_meta__ = PluginMetadata(
|
||||
@@ -65,7 +60,6 @@ __plugin_meta__ = PluginMetadata(
|
||||
"nonebot_plugin_chatrecorder", "nonebot_plugin_saa", "nonebot_plugin_alconna"
|
||||
),
|
||||
config=Config,
|
||||
# extra={"orm_version_location": migrations},
|
||||
)
|
||||
|
||||
|
||||
@@ -84,6 +78,65 @@ def wrapper(slot: Union[int, str], content: Optional[str], context) -> str:
|
||||
return "" # pragma: no cover
|
||||
|
||||
|
||||
build_cache_cmd = on_command("build_cache", aliases={"重建缓存"}, block=True)
|
||||
|
||||
|
||||
@build_cache_cmd.handle()
|
||||
async def _build_cache(bot: Bot, event: Event):
|
||||
await saa.Text("正在重建缓存,请稍等。").send(reply=True)
|
||||
await build_cache()
|
||||
await saa.Text("重建缓存完成。").send(reply=True)
|
||||
|
||||
|
||||
b_cmd = on_alconna(
|
||||
Alconna(
|
||||
"看看B话",
|
||||
Args["at", [str, At], Field(completion=lambda: "请想要查询的人的QQ号")],
|
||||
Option("-g|--group_id", Args["group_id?", str]),
|
||||
Option("-k|--keyword", Args["keyword?", str])
|
||||
),
|
||||
aliases={"kkb"},
|
||||
use_cmd_start=True,
|
||||
)
|
||||
|
||||
@b_cmd.handle()
|
||||
async def handle_b_cmd(
|
||||
at:Match[str|At],
|
||||
group_id: Match[str],
|
||||
keyword: Match[str],
|
||||
session: Session = Depends(extract_session),
|
||||
):
|
||||
id = at.result
|
||||
if isinstance(id, At):
|
||||
id = id.target
|
||||
if group_id.available:
|
||||
gid = group_id.result
|
||||
else:
|
||||
gid = session.id2
|
||||
|
||||
if not gid:
|
||||
await b_cmd.finish("请指定群号。")
|
||||
|
||||
if keyword.available:
|
||||
keywords = keyword.result
|
||||
else:
|
||||
keywords = None
|
||||
|
||||
messages = await get_message_records(
|
||||
id1s=[id],
|
||||
id2s=[gid],
|
||||
id_type=SessionIdType.GROUP,
|
||||
include_bot_id=False,
|
||||
include_bot_type=False,
|
||||
types=["message"], # 排除机器人自己发的消息
|
||||
exclude_id1s=plugin_config.excluded_people,
|
||||
)
|
||||
d = msg_counter(messages, keywords)
|
||||
rank = got_rank(d)
|
||||
|
||||
await saa.Text(f"该用户在群{gid}的B话数量为{rank[0][1]}。").send(reply=True)
|
||||
|
||||
|
||||
rank_cmd = on_alconna(
|
||||
Alconna(
|
||||
"B话榜",
|
||||
@@ -92,6 +145,7 @@ rank_cmd = on_alconna(
|
||||
str,
|
||||
],
|
||||
Option("-g|--group_id", Args["group_id?", str]),
|
||||
Option("-k|--keyword", Args["keyword?", str]),
|
||||
behaviors=[SameTime()],
|
||||
),
|
||||
aliases={"废话榜"},
|
||||
@@ -128,6 +182,7 @@ async def _group_message(
|
||||
type: Optional[str] = None,
|
||||
time: Optional[str] = None,
|
||||
group_id: Optional[str] = None,
|
||||
keyword: Optional[str] = None,
|
||||
):
|
||||
t1 = t.time()
|
||||
state["t1"] = t1
|
||||
@@ -139,6 +194,8 @@ async def _group_message(
|
||||
if group_id:
|
||||
state["group_id"] = group_id
|
||||
|
||||
state["keyword"] = keyword
|
||||
|
||||
if not type:
|
||||
await rank_cmd.finish(__plugin_meta__.usage)
|
||||
|
||||
@@ -193,8 +250,6 @@ 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(
|
||||
@@ -216,7 +271,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}")
|
||||
@@ -227,102 +282,78 @@ async def handle_rank(
|
||||
if not id:
|
||||
await saa.Text("没有指定群哦").finish()
|
||||
|
||||
logger.debug(f"所属群聊解析花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
keyword = state["keyword"]
|
||||
|
||||
messages = await get_message_records(
|
||||
id2s=[id],
|
||||
id_type=SessionIdType.GROUP,
|
||||
include_bot_id=False,
|
||||
include_bot_type=False,
|
||||
types=["message"], # 排除机器人自己发的消息
|
||||
time_start=start,
|
||||
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()
|
||||
if plugin_config.counting_cache:
|
||||
if keyword:
|
||||
await saa.Text("已开启缓存~缓存不支持关键词查询哦").finish()
|
||||
t1 = t.time()
|
||||
raw_rank = await get_cache(start, stop, id)
|
||||
logger.debug(f"获取计数消息花费时间:{t.time() - t1}")
|
||||
else:
|
||||
t1 = t.time()
|
||||
messages = await get_message_records(
|
||||
id2s=[id],
|
||||
id_type=SessionIdType.GROUP,
|
||||
include_bot_id=False,
|
||||
include_bot_type=False,
|
||||
types=["message"], # 排除机器人自己发的消息
|
||||
time_start=start,
|
||||
time_stop=stop,
|
||||
exclude_id1s=plugin_config.excluded_people,
|
||||
)
|
||||
raw_rank = msg_counter(messages, keyword)
|
||||
logger.debug(f"获取计数消息花费时间:{t.time() - t1}")
|
||||
|
||||
rank = got_rank(msg_counter(messages))
|
||||
logger.debug(f"群聊消息计数花费时间:{t.time() - t1}")
|
||||
t1 = t.time()
|
||||
logger.debug(rank)
|
||||
rank2: List[UserRankInfo] = []
|
||||
if not raw_rank:
|
||||
await saa.Text(
|
||||
"没有获取到排行榜数据哦,请确认时间范围和群号是否正确或者关键词是否存在~"
|
||||
).finish()
|
||||
|
||||
rank = got_rank(raw_rank)
|
||||
ids = await persist_id2user_id([int(i[0]) for i in rank])
|
||||
for i in range(len(rank)):
|
||||
rank[i][0] = str(ids[i])
|
||||
logger.debug(rank[i])
|
||||
|
||||
total = sum([i[1] for i in rank])
|
||||
index = 1
|
||||
for i in rank:
|
||||
if user_info := await get_user_info(bot, event, user_id=str(i[0])):
|
||||
logger.debug(user_info)
|
||||
user_nickname = (
|
||||
user_info.user_displayname
|
||||
if user_info.user_displayname
|
||||
else user_info.user_name if user_info.user_name else user_info.user_id
|
||||
)
|
||||
user_avatar = (
|
||||
await user_info.user_avatar.get_image()
|
||||
if user_info.user_avatar
|
||||
else open(
|
||||
os.path.dirname(os.path.abspath(__file__))
|
||||
+ "/template/avatar/default.jpg",
|
||||
"rb",
|
||||
).read()
|
||||
)
|
||||
user = UserRankInfo(
|
||||
**model_dump(user_info),
|
||||
user_bnum=i[1],
|
||||
user_proportion=round(i[1] / total * 100, 2),
|
||||
user_index=cn2an.an2cn(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"
|
||||
)
|
||||
rank2.append(user)
|
||||
index += 1
|
||||
t1 = t.time()
|
||||
rank2 = await get_user_infos(bot, event, rank)
|
||||
logger.debug(f"获取用户信息花费时间:{t.time() - t1}")
|
||||
|
||||
string: str = ""
|
||||
for i in rank2:
|
||||
logger.debug(i.user_name)
|
||||
for i in range(len(rank2)):
|
||||
str_example = plugin_config.string_format.format(
|
||||
index=rank2[i].user_index,
|
||||
nickname=rank2[i].user_nickname,
|
||||
chatdatanum=rank2[i].user_bnum,
|
||||
)
|
||||
string += str_example
|
||||
if plugin_config.show_text_rank:
|
||||
|
||||
if keyword:
|
||||
string += f"关于{keyword}的话痨榜结果:\n"
|
||||
else:
|
||||
string += "话痨榜:\n"
|
||||
|
||||
for i in rank2:
|
||||
logger.debug(i.user_name)
|
||||
for i in range(len(rank2)):
|
||||
str_example = plugin_config.string_format.format(
|
||||
index=rank2[i].user_index,
|
||||
nickname=rank2[i].user_nickname,
|
||||
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:
|
||||
t1 = t.time()
|
||||
image = await get_rank_image(rank2)
|
||||
msg += saa.Image(image)
|
||||
logger.debug(f"群聊消息渲染图片花费时间:{t.time() - t1}")
|
||||
|
||||
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
|
||||
if not msg:
|
||||
await saa.Text("你把可视化都关了哪来的排行榜?").finish()
|
||||
|
||||
if plugin_config.aggregate_transmission:
|
||||
await saa.AggregatedMessageFactory([msg]).finish(reply=True)
|
||||
else:
|
||||
await msg.finish(reply=True)
|
||||
|
||||
@@ -6,12 +6,15 @@ from nonebot import get_driver, get_plugin_config
|
||||
class ScopedConfig(BaseModel):
|
||||
get_num: int = 5 # 获取人数数量
|
||||
font: str = "SimHei" # 字体格式
|
||||
suffix: bool = False # 是否显示后缀
|
||||
excluded_self: bool = True
|
||||
suffix: bool = True # 是否显示后缀
|
||||
excluded_self: bool = True # 是否排除自己
|
||||
visualization: bool = True # 是否可视化
|
||||
counting_cache: bool = True
|
||||
show_text_rank: bool = True # 是否显示文本排名
|
||||
counting_cache: bool = False # 计数缓存(能够提高回复速度)
|
||||
excluded_people: List[str] = [] # 排除的人的QQ号
|
||||
timezone: Optional[str] = "Asia/Shanghai"
|
||||
use_user_info_cache: bool = False # 是否使用用户信息缓存
|
||||
aggregate_transmission:bool = False # 是否聚合转发消息
|
||||
timezone: Optional[str] = "Asia/Shanghai" # 时区,影响统计时间
|
||||
string_suffix: str = "统计花费时间:{timecost}秒" # 消息格式后缀
|
||||
template_path: str = "./template/rank_template.j2" # 模板路径
|
||||
string_format: str = "第{index}名:\n{nickname},{chatdatanum}条消息\n" # 消息格式
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
from datetime import datetime
|
||||
from typing import Union
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import Integer
|
||||
from nonebot_plugin_orm import Model
|
||||
from nonebot_plugin_userinfo import UserInfo
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
|
||||
class UserRankInfo(UserInfo):
|
||||
@@ -11,7 +13,10 @@ class UserRankInfo(UserInfo):
|
||||
user_index: Union[int, str]
|
||||
user_avatar_bytes: bytes
|
||||
|
||||
class MsgCountDayData(BaseModel):
|
||||
user_id:str
|
||||
# class MsgCountData(Model):
|
||||
# __tablename__ = 'dialectlist_msg_data'
|
||||
|
||||
class MessageCountCache(Model):
|
||||
__table_args__ = {"extend_existing": True}
|
||||
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
||||
time: Mapped[datetime]
|
||||
session_id: Mapped[int] = mapped_column(Integer, index=True)
|
||||
session_bnum: Mapped[int] = mapped_column(Integer)
|
||||
|
||||
@@ -1,2 +1,134 @@
|
||||
# TODO 使用计数缓存进行数据库查询优化,避免一次性查询过多消息导致内存爆炸。
|
||||
from nonebot_plugin_orm import Model
|
||||
import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
from sqlalchemy import delete, or_, select
|
||||
|
||||
from nonebot import get_driver
|
||||
from nonebot.log import logger
|
||||
from nonebot.params import Depends
|
||||
from nonebot.adapters import Event, Bot
|
||||
from nonebot.message import event_postprocessor
|
||||
|
||||
from .model import MessageCountCache
|
||||
from .config import plugin_config
|
||||
|
||||
from nonebot_plugin_localstore import get_data_file
|
||||
from nonebot_plugin_chatrecorder import get_message_records
|
||||
from nonebot_plugin_chatrecorder.utils import remove_timezone
|
||||
from nonebot_plugin_session import extract_session, Session
|
||||
from nonebot_plugin_session_orm import SessionModel, get_session_persist_id
|
||||
from nonebot_plugin_orm import get_session
|
||||
|
||||
|
||||
async def get_cache(time_start: datetime, time_stop: datetime, group_id: str):
|
||||
async with get_session() as db_session:
|
||||
where = [or_(SessionModel.id2 == group_id)]
|
||||
statement = select(SessionModel).where(*where)
|
||||
|
||||
sessions = (await db_session.scalars(statement)).all()
|
||||
|
||||
where = [
|
||||
or_(*[MessageCountCache.session_id == session.id for session in sessions])
|
||||
]
|
||||
statement = select(MessageCountCache).where(*where)
|
||||
where.append(or_(MessageCountCache.time >= remove_timezone(time_start)))
|
||||
where.append(or_(MessageCountCache.time <= remove_timezone(time_stop)))
|
||||
statement = select(MessageCountCache).where(*where)
|
||||
|
||||
user_caches = (await db_session.scalars(statement)).all()
|
||||
raw_rank = {}
|
||||
for i in user_caches:
|
||||
raw_rank[i.session_id] = raw_rank.get(i.session_id, 0) + i.session_bnum
|
||||
return raw_rank
|
||||
|
||||
|
||||
async def build_cache():
|
||||
async with get_session() as db_session:
|
||||
await db_session.execute(delete(MessageCountCache))
|
||||
await db_session.commit()
|
||||
logger.info("先前可能存在的缓存已清空")
|
||||
messages = await get_message_records(types=["message"])
|
||||
async with get_session() as db_session:
|
||||
for msg in messages:
|
||||
msg_session_id = msg.session_persist_id
|
||||
|
||||
where = [or_(MessageCountCache.session_id == msg_session_id)]
|
||||
where.append(
|
||||
or_(
|
||||
MessageCountCache.time
|
||||
== remove_timezone(
|
||||
msg.time.replace(hour=1, minute=0, second=0, microsecond=0)
|
||||
)
|
||||
)
|
||||
)
|
||||
statement = select(MessageCountCache).where(*where)
|
||||
|
||||
user_cache = (await db_session.scalars(statement)).all()
|
||||
|
||||
if user_cache:
|
||||
user_cache[0].session_bnum += 1
|
||||
else:
|
||||
user_cache = MessageCountCache(
|
||||
session_id=msg.session_persist_id,
|
||||
time=remove_timezone(
|
||||
msg.time.replace(hour=1, minute=0, second=0, microsecond=0)
|
||||
),
|
||||
session_bnum=1,
|
||||
)
|
||||
db_session.add(user_cache)
|
||||
await db_session.commit()
|
||||
|
||||
logger.info("缓存构建完成")
|
||||
|
||||
|
||||
driver = get_driver()
|
||||
|
||||
|
||||
@driver.on_startup
|
||||
async def _():
|
||||
if not plugin_config.counting_cache:
|
||||
return
|
||||
f_name = get_data_file("nonebot-plugin-dialectlist", "is-pre-cached.json")
|
||||
if not os.path.exists(f_name):
|
||||
with open(f_name, "w", encoding="utf-8") as f:
|
||||
s = json.dumps({"is-pre-cached": False}, ensure_ascii=False, indent=4)
|
||||
f.write(s)
|
||||
|
||||
with open(f_name, "r", encoding="utf-8") as f:
|
||||
if json.load(f)["is-pre-cached"]:
|
||||
return
|
||||
logger.info("未检查到缓存,开始构建缓存")
|
||||
with open(f_name, "w", encoding="utf-8") as f:
|
||||
await build_cache()
|
||||
json.dump({"is-pre-cached": True}, f, ensure_ascii=False, indent=4)
|
||||
|
||||
|
||||
@event_postprocessor
|
||||
async def _(bot: Bot, event: Event, session: Session = Depends(extract_session)):
|
||||
if not plugin_config.counting_cache:
|
||||
return
|
||||
if not session.id2:
|
||||
return
|
||||
if event.get_type() != "message":
|
||||
return
|
||||
now = datetime.now()
|
||||
now = now.replace(hour=1, minute=0, second=0, microsecond=0)
|
||||
|
||||
async with get_session() as db_session:
|
||||
session_id = await get_session_persist_id(session)
|
||||
logger.debug("session_id:" + str(session_id))
|
||||
where = [or_(MessageCountCache.session_id == session_id)]
|
||||
where.append(or_(MessageCountCache.time == remove_timezone(now)))
|
||||
statement = select(MessageCountCache).where(*where)
|
||||
user_cache = (await db_session.scalars(statement)).first()
|
||||
if user_cache:
|
||||
user_cache.session_bnum += 1
|
||||
else:
|
||||
user_cache = MessageCountCache(
|
||||
session_id=session_id,
|
||||
time=remove_timezone(now),
|
||||
session_bnum=1,
|
||||
)
|
||||
db_session.add(user_cache)
|
||||
await db_session.commit()
|
||||
logger.debug("已计入缓存")
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
@@ -1,100 +1,114 @@
|
||||
body {
|
||||
background-image: url('https://api.yimian.xyz/img');
|
||||
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,29 +9,37 @@
|
||||
</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">
|
||||
<img class="profile2" src="{{ file_path }}/template/avatar/master.jpg"/>
|
||||
<div class="card2 glow">
|
||||
<img class="profile2" src="https://q2.qlogo.cn/headimg_dl?dst_uin=1964324406&spec=100"/>
|
||||
<p class="center_text2">Designed By ChenXu233</p>
|
||||
</div>
|
||||
</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,4 +1,3 @@
|
||||
# TODO 时间处理模块,用于处理时间相关操作。
|
||||
from zoneinfo import ZoneInfo
|
||||
from typing import Optional, Union
|
||||
from datetime import datetime, time, tzinfo
|
||||
|
||||
@@ -2,8 +2,59 @@ from inspect import cleandoc
|
||||
|
||||
__usage__ = cleandoc(
|
||||
"""
|
||||
/今日B话榜 查看今天群里谁B话最多。
|
||||
/昨日B话榜 顾名思义。
|
||||
以此类推,有本周,本月,上周,上月,年度排行榜。
|
||||
快速调用:
|
||||
/今日B话榜 ————看看今天群友发了多少消息。
|
||||
|
||||
### 🎨一般用法
|
||||
|
||||
#### B话榜
|
||||
|
||||
-`/B话榜` ————看看有史以来(机器人存在以来)群友们发了多少消息! (好像没写)
|
||||
|
||||
-`/今日B话榜` ————看看今天的群友发了多少消息!
|
||||
|
||||
-`/昨日B话榜` ————看看昨天的群友发了多少消息!
|
||||
|
||||
-`/前日B话榜` ————看看前天的群友发了多少消息!
|
||||
|
||||
-`/本周B话榜` ————看看本周的群友发了多少消息!
|
||||
|
||||
-`/上周B话榜` ————看看上周的群友发了多少消息!
|
||||
|
||||
-`/本月B话榜` ————看看这个月的群友发了多少消息!
|
||||
|
||||
-`/年度B话榜` ————看看今年的群友发了多少消息!
|
||||
|
||||
-`/历史B话榜` ————看看历史上(机器人存在以来)的群友发了多少消息!
|
||||
|
||||
#### 看看B话(kkb)
|
||||
|
||||
-`/看看B话 [@某人|QQ号]` ————看看这个b人在这个b群发了多少b话!
|
||||
|
||||
### 🚀进阶用法
|
||||
|
||||
#### B话榜
|
||||
|
||||
`/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间 ?} {群号} {关键词}`
|
||||
|
||||
如:`/B话榜 历史 2024-01-01~2024-01-02 12345678 女装`
|
||||
|
||||
也可以 `/{时间类型(今日|年度)?}{B话榜|废话榜} {时间类型?} {ISO8601 格式时间 ?} -g {群号} -k {关键词}`
|
||||
|
||||
以下调用方法均合法:
|
||||
|
||||
`/今日B话榜 -g 12345678 -k 女装`
|
||||
`/昨日B话榜 -k 女装`
|
||||
`/本周B话榜 -g 12345678`
|
||||
|
||||
#### 看看B话
|
||||
|
||||
`/看看B话 {@|QQ号} {群号?} {关键词?}`
|
||||
|
||||
以下调用方法均合法:
|
||||
|
||||
`/kkb 114514 1919810 ♂`
|
||||
`/kkb @man -k ♂`
|
||||
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -1,16 +1,22 @@
|
||||
import os
|
||||
import httpx
|
||||
import asyncio
|
||||
import unicodedata
|
||||
|
||||
from typing import Dict, List
|
||||
from typing import Dict, List, Optional
|
||||
from sqlalchemy import or_, select
|
||||
from sqlalchemy.sql import ColumnElement
|
||||
|
||||
from nonebot.log import logger
|
||||
from nonebot.params import Depends
|
||||
from nonebot.compat import model_dump
|
||||
from nonebot.matcher import Matcher
|
||||
from nonebot.adapters import Bot, Event
|
||||
|
||||
from nonebot_plugin_orm import get_session
|
||||
from nonebot_plugin_session import Session, SessionLevel, extract_session
|
||||
from nonebot_plugin_userinfo import get_user_info, UserInfo
|
||||
from nonebot_plugin_userinfo.exception import NetworkError
|
||||
from nonebot_plugin_localstore import get_cache_dir
|
||||
from nonebot_plugin_htmlrender import template_to_pic
|
||||
from nonebot_plugin_session_orm import SessionModel
|
||||
@@ -22,16 +28,6 @@ from .config import plugin_config
|
||||
|
||||
cache_path = get_cache_dir("nonebot_plugin_dialectlist")
|
||||
|
||||
# 暂时不做考虑
|
||||
# def admin_permission():
|
||||
# permission = SUPERUSER
|
||||
# with contextlib.suppress(ImportError):
|
||||
# from nonebot.adapters.onebot.v11.permission import GROUP_ADMIN, GROUP_OWNER
|
||||
|
||||
# permission = permission | GROUP_ADMIN | GROUP_OWNER
|
||||
|
||||
# return permission
|
||||
|
||||
|
||||
async def ensure_group(matcher: Matcher, session: Session = Depends(extract_session)):
|
||||
"""确保在群组中使用"""
|
||||
@@ -81,7 +77,9 @@ async def persist_id2group_id(ids: List[str]) -> List[str]:
|
||||
return [i.id2 for i in records]
|
||||
|
||||
|
||||
def msg_counter(msg_list: List[MessageRecord]) -> Dict[str, int]:
|
||||
def msg_counter(
|
||||
msg_list: List[MessageRecord], keyword: Optional[str]
|
||||
) -> Dict[str, int]:
|
||||
"""### 计算每个人的消息量
|
||||
|
||||
Args:
|
||||
@@ -96,6 +94,10 @@ def msg_counter(msg_list: List[MessageRecord]) -> Dict[str, int]:
|
||||
logger.info("wow , there are {} msgs to count !!!".format(msg_len))
|
||||
|
||||
for i in msg_list:
|
||||
# logger.debug(f"processing msg {i.plain_text}")
|
||||
if keyword:
|
||||
if keyword not in i.plain_text:
|
||||
continue
|
||||
try:
|
||||
lst[str(i.session_persist_id)] += 1
|
||||
except KeyError:
|
||||
@@ -178,5 +180,98 @@ 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}},
|
||||
)
|
||||
|
||||
|
||||
def _get_user_nickname(user_info: UserInfo) -> str:
|
||||
user_nickname = (
|
||||
user_info.user_displayname
|
||||
if user_info.user_displayname
|
||||
else user_info.user_name if user_info.user_name else user_info.user_id
|
||||
)
|
||||
return user_nickname
|
||||
|
||||
|
||||
async def _get_user_default_avatar() -> bytes:
|
||||
img = open(
|
||||
os.path.dirname(os.path.abspath(__file__)) + "/template/avatar/default.jpg",
|
||||
"rb",
|
||||
).read()
|
||||
return img
|
||||
|
||||
|
||||
async def _get_user_avatar(user: UserInfo, client: httpx.AsyncClient) -> bytes:
|
||||
if not user.user_avatar:
|
||||
return await _get_user_default_avatar()
|
||||
url = user.user_avatar.get_url()
|
||||
for i in range(3):
|
||||
try:
|
||||
resp = await client.get(url, timeout=10)
|
||||
resp.raise_for_status()
|
||||
return resp.content
|
||||
except Exception as e:
|
||||
logger.warning(f"Error downloading {url}, retry {i}/3: {e}")
|
||||
await asyncio.sleep(3)
|
||||
raise NetworkError(f"{url} 下载失败!")
|
||||
|
||||
|
||||
def get_default_user_info() -> UserInfo:
|
||||
user_info = UserInfo(
|
||||
user_id="114514",
|
||||
user_name="鬼知道这谁,bot获取不了",
|
||||
)
|
||||
return user_info
|
||||
|
||||
|
||||
async def get_user_infos(
|
||||
bot: Bot,
|
||||
event: Event,
|
||||
rank: List,
|
||||
use_cache: bool = plugin_config.use_user_info_cache,
|
||||
) -> List[UserRankInfo]:
|
||||
|
||||
user_ids = [i[0] for i in rank]
|
||||
pool = [get_user_info(bot, event, id, use_cache) for id in user_ids]
|
||||
user_infos = await asyncio.gather(*pool)
|
||||
|
||||
async with httpx.AsyncClient() as client:
|
||||
pool = []
|
||||
for i in user_infos:
|
||||
if not i:
|
||||
pool.append(_get_user_default_avatar())
|
||||
continue
|
||||
if i.user_avatar:
|
||||
pool.append(_get_user_avatar(i, client))
|
||||
user_avatars = await asyncio.gather(*pool)
|
||||
|
||||
for i in user_avatars:
|
||||
if not i:
|
||||
user_avatars[user_avatars.index(i)] = await _get_user_default_avatar()
|
||||
|
||||
total = sum([i[1] for i in rank])
|
||||
rank2 = []
|
||||
for i in range(len(rank)):
|
||||
|
||||
user_info = user_infos[i]
|
||||
if not user_info:
|
||||
user_info = get_default_user_info()
|
||||
|
||||
user = UserRankInfo(
|
||||
**model_dump(user_info),
|
||||
user_bnum=rank[i][1],
|
||||
user_proportion=round(rank[i][1] / total * 100, 2),
|
||||
user_index=i + 1,
|
||||
user_nickname=_get_user_nickname(user_info),
|
||||
user_avatar_bytes=user_avatars[i],
|
||||
)
|
||||
print(user.user_gender)
|
||||
if user.user_gender == "male":
|
||||
user.user_gender = "♂"
|
||||
elif user.user_gender == "female":
|
||||
user.user_gender = "♀"
|
||||
else:
|
||||
user.user_gender = "🤔"
|
||||
rank2.append(user)
|
||||
|
||||
return rank2
|
||||
|
||||
373
pdm.lock
generated
373
pdm.lock
generated
@@ -5,10 +5,10 @@
|
||||
groups = ["default", "Test", "dev"]
|
||||
strategy = ["inherit_metadata"]
|
||||
lock_version = "4.5.0"
|
||||
content_hash = "sha256:d8430f5bacf90d467148ef4e93741068a46c2f9885c5c05e2ae5ff7e8c02b39b"
|
||||
content_hash = "sha256:41c1ac2ec7d9ce3eb477f442e6ccbeda65fb25eb4f22cd696d361dae97cb065c"
|
||||
|
||||
[[metadata.targets]]
|
||||
requires_python = "~=3.9"
|
||||
requires_python = ">=3.9,<3.13"
|
||||
|
||||
[[package]]
|
||||
name = "aiofiles"
|
||||
@@ -103,33 +103,33 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "arclet-alconna"
|
||||
version = "1.8.19"
|
||||
version = "1.8.29"
|
||||
requires_python = ">=3.8"
|
||||
summary = "A High-performance, Generality, Humane Command Line Arguments Parser Library."
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"nepattern<1.0.0,>=0.7.3",
|
||||
"tarina>=0.5.0",
|
||||
"nepattern<1.0.0,>=0.7.6",
|
||||
"tarina>=0.5.8",
|
||||
"typing-extensions>=4.5.0",
|
||||
]
|
||||
files = [
|
||||
{file = "arclet_alconna-1.8.19-py3-none-any.whl", hash = "sha256:c78d5527d8ea13990e96f996a3480bf236ad63b81114f53ce2c010bc2a0ee1d8"},
|
||||
{file = "arclet_alconna-1.8.19.tar.gz", hash = "sha256:12064caad6854a4b00dc5b7376d86e15911072acd9278531bf86e4fb97568288"},
|
||||
{file = "arclet_alconna-1.8.29-py3-none-any.whl", hash = "sha256:8f71a129ff55f8ffb017bd1ad87d1f709df44e483bf8b851a83332bcb052f7ff"},
|
||||
{file = "arclet_alconna-1.8.29.tar.gz", hash = "sha256:99bd65c509050909fc5e3ae5948daa3c8238dd7665b7090fe4632c63ee2eac11"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arclet-alconna-tools"
|
||||
version = "0.7.6"
|
||||
version = "0.7.9"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Builtin Tools for Alconna"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"arclet-alconna>=1.8.15",
|
||||
"arclet-alconna>=1.8.21",
|
||||
"nepattern<1.0.0,>=0.7.3",
|
||||
]
|
||||
files = [
|
||||
{file = "arclet_alconna_tools-0.7.6-py3-none-any.whl", hash = "sha256:fdd1cb900603ce6bb00295bf7bf7f60dfdb764f0614abe248cdcb754e5149edd"},
|
||||
{file = "arclet_alconna_tools-0.7.6.tar.gz", hash = "sha256:7cb7dc54c1c2198529c63227739423401051b8489374f1a7a3efa0c4e70b2a22"},
|
||||
{file = "arclet_alconna_tools-0.7.9-py3-none-any.whl", hash = "sha256:01a3462bb9f8dbe55010b394f7a0ac11e331799d463e326738870dce191aa608"},
|
||||
{file = "arclet_alconna_tools-0.7.9.tar.gz", hash = "sha256:bded24c4157e13e2d803fe7b77ee246fda456206451337015513f150d1e4449c"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -267,7 +267,7 @@ name = "charset-normalizer"
|
||||
version = "3.3.2"
|
||||
requires_python = ">=3.7.0"
|
||||
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||
groups = ["default", "dev"]
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
|
||||
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
|
||||
@@ -333,21 +333,6 @@ files = [
|
||||
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cn2an"
|
||||
version = "0.5.22"
|
||||
requires_python = ">=3.6"
|
||||
summary = "Convert Chinese numerals and Arabic numerals."
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"proces>=0.1.3",
|
||||
"setuptools>=47.3.1",
|
||||
]
|
||||
files = [
|
||||
{file = "cn2an-0.5.22-py3-none-any.whl", hash = "sha256:cba4c8f305b43da01f50696047cca3116c727424ac62338da6a3426e01454f3e"},
|
||||
{file = "cn2an-0.5.22.tar.gz", hash = "sha256:27ae5b56441d7329ed2ececffa026bfa8fc353dcf1fb0d9146b303b9cce3ac37"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
@@ -1035,7 +1020,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "nb-cli"
|
||||
version = "1.4.1"
|
||||
version = "1.4.2"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "CLI for nonebot2"
|
||||
groups = ["dev"]
|
||||
@@ -1057,13 +1042,13 @@ dependencies = [
|
||||
"wcwidth~=0.2",
|
||||
]
|
||||
files = [
|
||||
{file = "nb_cli-1.4.1-py3-none-any.whl", hash = "sha256:57b6111773202bce29c0520f4a281edb8a7643fa33692d4afc70ca5b51b10f70"},
|
||||
{file = "nb_cli-1.4.1.tar.gz", hash = "sha256:908dd4cbbf66bf46fe879c23ad1377332f63385cebca1912b627aa686d1816f3"},
|
||||
{file = "nb_cli-1.4.2-py3-none-any.whl", hash = "sha256:8348480a988fb8632130e14925977ad117d4a0c76c971f91ad813f91a7592263"},
|
||||
{file = "nb_cli-1.4.2.tar.gz", hash = "sha256:1d97b2d51569c7f7c7371744b9ed4b73361bc1853111bde2ddf1e990a1e19fef"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nepattern"
|
||||
version = "0.7.4"
|
||||
version = "0.7.6"
|
||||
requires_python = ">=3.8"
|
||||
summary = "a complex pattern, support typing"
|
||||
groups = ["default"]
|
||||
@@ -1072,8 +1057,8 @@ dependencies = [
|
||||
"typing-extensions>=4.5.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nepattern-0.7.4-py3-none-any.whl", hash = "sha256:ad7287ee2ff46f010b8c758bf9ed8fd8141aa1afce29c5d5a4f94cc85d277e6e"},
|
||||
{file = "nepattern-0.7.4.tar.gz", hash = "sha256:255a042b45e9d2b04f3c2d73b81912c6b856fae1a10a6e4df30b08ed892d2f9c"},
|
||||
{file = "nepattern-0.7.6-py3-none-any.whl", hash = "sha256:233d0befecc190f228ded3651a85faaf53f1308bba40ab8ddec379d0d3c88051"},
|
||||
{file = "nepattern-0.7.6.tar.gz", hash = "sha256:07bd5b2f3b9b9739b703bf723ffd642ca93738a32df7b699d57d6f338d46bad0"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1102,7 +1087,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-adapter-onebot"
|
||||
version = "2.4.4"
|
||||
version = "2.4.5"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "OneBot(CQHTTP) adapter for nonebot2"
|
||||
groups = ["Test"]
|
||||
@@ -1113,28 +1098,28 @@ dependencies = [
|
||||
"typing-extensions<5.0.0,>=4.0.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_adapter_onebot-2.4.4-py3-none-any.whl", hash = "sha256:4dceeec7332bb560652c764405e9dd350268303f69b7c0e92b7cfebe876e8d39"},
|
||||
{file = "nonebot_adapter_onebot-2.4.4.tar.gz", hash = "sha256:c8a3645f74a3e43c85f092fb670508c662c36831f019a15e4d74eaac686089f0"},
|
||||
{file = "nonebot_adapter_onebot-2.4.5-py3-none-any.whl", hash = "sha256:882780f2a8eb52137177643c78a6b36c73c38cc53b20e11a5f83aa66cd8bce3f"},
|
||||
{file = "nonebot_adapter_onebot-2.4.5.tar.gz", hash = "sha256:5897903792226683323c960472e2cced7609d45e8e8c3730646e9db5d9c3241e"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-alconna"
|
||||
version = "0.50.2"
|
||||
version = "0.52.2"
|
||||
requires_python = ">=3.9"
|
||||
summary = "Alconna Adapter for Nonebot"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"arclet-alconna-tools>=0.7.6",
|
||||
"arclet-alconna>=1.8.19",
|
||||
"arclet-alconna-tools>=0.7.9",
|
||||
"arclet-alconna>=1.8.25",
|
||||
"importlib-metadata>=4.13.0",
|
||||
"nepattern>=0.7.4",
|
||||
"nonebot-plugin-waiter>=0.6.0",
|
||||
"nonebot2>=2.3.0",
|
||||
"tarina>=0.5.4",
|
||||
"tarina>=0.5.5",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_alconna-0.50.2-py3-none-any.whl", hash = "sha256:be641eaf539f6f9dfb2398be80e994fa27814064eeed89e7a46a03754756dfc1"},
|
||||
{file = "nonebot_plugin_alconna-0.50.2.tar.gz", hash = "sha256:ebae23723cee5cbbc350aa864d9e3d95cb1ab8324ba8674130df3302066277b1"},
|
||||
{file = "nonebot_plugin_alconna-0.52.2-py3-none-any.whl", hash = "sha256:eb4a4dd288b3657e5eb1935b149783a32ed01eb71efb0db3590c30cccc94a20c"},
|
||||
{file = "nonebot_plugin_alconna-0.52.2.tar.gz", hash = "sha256:937d9ea5a1c8288dd4fb2160a114329d0b0223613684410534ac493cdd7ca9c1"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1155,24 +1140,24 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-cesaa"
|
||||
version = "0.4.0"
|
||||
requires_python = ">=3.8,<4.0"
|
||||
version = "0.4.1"
|
||||
requires_python = ">=3.9"
|
||||
summary = "为 chatrecorder 添加 send-anything-anywhere 的 PlatformTarget 支持"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"nonebot-plugin-chatrecorder<1.0.0,>=0.6.0",
|
||||
"nonebot-plugin-send-anything-anywhere<0.7.0,>=0.6.0",
|
||||
"nonebot2<3.0.0,>=2.2.0",
|
||||
"nonebot-plugin-chatrecorder>=0.6.0",
|
||||
"nonebot-plugin-send-anything-anywhere>=0.6.0",
|
||||
"nonebot2>=2.2.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_cesaa-0.4.0-py3-none-any.whl", hash = "sha256:4ae34a7d5f023f614f3d3a7207e35f706ae964a203aa582b59f3e0b530a69360"},
|
||||
{file = "nonebot_plugin_cesaa-0.4.0.tar.gz", hash = "sha256:572a5232262a8d3660a00a32f82041f791587e588046d14b0780fc7d908f1263"},
|
||||
{file = "nonebot_plugin_cesaa-0.4.1-py3-none-any.whl", hash = "sha256:87186d35178ced9b9629a02a26093826963b880274809a5f9a2ad90470de3ae4"},
|
||||
{file = "nonebot_plugin_cesaa-0.4.1.tar.gz", hash = "sha256:1bb9150aa9eb766ce5b0e027308aa5ad4af9c1cd116f3a3d82ca7b83453cfd11"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-chatrecorder"
|
||||
version = "0.6.0"
|
||||
requires_python = ">=3.8,<4.0"
|
||||
version = "0.6.1"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "适用于 Nonebot2 的聊天记录插件"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
@@ -1180,16 +1165,16 @@ dependencies = [
|
||||
"nonebot-plugin-orm<1.0.0,>=0.7.0",
|
||||
"nonebot-plugin-session-orm<0.3.0,>=0.2.0",
|
||||
"nonebot-plugin-session<0.4.0,>=0.3.0",
|
||||
"nonebot2[fastapi]<3.0.0,>=2.2.0",
|
||||
"nonebot2<3.0.0,>=2.3.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_chatrecorder-0.6.0-py3-none-any.whl", hash = "sha256:855a5a445da9c5c4247499cba55bb4c1c10de5cf024d1af1f756cf4d3a84fa82"},
|
||||
{file = "nonebot_plugin_chatrecorder-0.6.0.tar.gz", hash = "sha256:a80acbbfe2388a60177effc62857fa09154a38871643e14c7eb7352226c03138"},
|
||||
{file = "nonebot_plugin_chatrecorder-0.6.1-py3-none-any.whl", hash = "sha256:74e16174871b096ec0bf9130a14d49335e37374c0513d9aad04f593c45dfefcd"},
|
||||
{file = "nonebot_plugin_chatrecorder-0.6.1.tar.gz", hash = "sha256:3447b8579d2e2da9641fc45be8df7131b7d4245cfe37f07c10064362c358d583"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-htmlrender"
|
||||
version = "0.3.3"
|
||||
version = "0.3.5"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "通过浏览器渲染图片"
|
||||
groups = ["default"]
|
||||
@@ -1204,8 +1189,8 @@ dependencies = [
|
||||
"python-markdown-math>=0.8",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_htmlrender-0.3.3-py3-none-any.whl", hash = "sha256:2ac871d345c94103aa630153e007caa6319b5f5468491347513d746ba98b70d7"},
|
||||
{file = "nonebot_plugin_htmlrender-0.3.3.tar.gz", hash = "sha256:ab46ecc6dbd102628af8f88437fdc24da11839487950d07d0c5fd8db0db98ae8"},
|
||||
{file = "nonebot_plugin_htmlrender-0.3.5-py3-none-any.whl", hash = "sha256:a46c6a1b57ae79e26ed996ca1eca2c729f8f4a53aed993b7664f956d7eeca29e"},
|
||||
{file = "nonebot_plugin_htmlrender-0.3.5.tar.gz", hash = "sha256:22b3e801bde06e66528582aa085317b27c42e82e8d7e72aa04218635e03c1303"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1310,22 +1295,37 @@ files = [
|
||||
{file = "nonebot_plugin_session_orm-0.2.0.tar.gz", hash = "sha256:420e210898a3f348cebbb4ea0816bab66f3299c7b0c01e929a01967d60cc438c"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-uninfo"
|
||||
version = "0.1.1"
|
||||
requires_python = ">=3.9"
|
||||
summary = "Universal Information Model for Nonebot2"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"importlib-metadata>=4.13.0",
|
||||
"nonebot2>=2.3.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_uninfo-0.1.1-py3-none-any.whl", hash = "sha256:98fc4ae223ee333ccb5e29352cead1a9eb9b4fea295ed3f691da8b4ce6b920fc"},
|
||||
{file = "nonebot_plugin_uninfo-0.1.1.tar.gz", hash = "sha256:5d8839442ff9b421b773e3dc91dc4d916327a0fecb881da6879f889778d6de6d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot-plugin-userinfo"
|
||||
version = "0.2.4"
|
||||
requires_python = "<4.0,>=3.8"
|
||||
version = "0.2.6"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "Nonebot2 用户信息获取插件"
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"cachetools<6.0.0,>=5.0.0",
|
||||
"emoji<3.0.0,>=2.0.0",
|
||||
"httpx<1.0.0,>=0.20.0",
|
||||
"nonebot2<3.0.0,>=2.0.0",
|
||||
"strenum<0.5.0,>=0.4.8",
|
||||
"nonebot2<3.0.0,>=2.3.0",
|
||||
"strenum<0.5.0,>=0.4.15",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot_plugin_userinfo-0.2.4-py3-none-any.whl", hash = "sha256:f08dac58759b859f8bf1d1c17e96cdcee92b10613631a430405364a40181f9e4"},
|
||||
{file = "nonebot_plugin_userinfo-0.2.4.tar.gz", hash = "sha256:1d49ff00ce38c856be4388fc2a954656f07cc529ce38ef9593e3a0ea40f26b6a"},
|
||||
{file = "nonebot_plugin_userinfo-0.2.6-py3-none-any.whl", hash = "sha256:79d2481af08a5ec77cf171c685eecd14eaf1ce4d5a1ec1fd22fbb0b85e06c260"},
|
||||
{file = "nonebot_plugin_userinfo-0.2.6.tar.gz", hash = "sha256:0d1ce897e94a9d4c0b5300bc8f239a4676f9bb62c78a14e0f0527e5398ffc840"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1344,7 +1344,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "nonebot2"
|
||||
version = "2.3.2"
|
||||
version = "2.3.3"
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "An asynchronous python bot framework."
|
||||
groups = ["default", "Test"]
|
||||
@@ -1358,25 +1358,25 @@ dependencies = [
|
||||
"yarl<2.0.0,>=1.7.2",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot2-2.3.2-py3-none-any.whl", hash = "sha256:c51aa3c1f23d8062ce6d13c8423dcb9a8bf0c44f21687916095f825da79a9a55"},
|
||||
{file = "nonebot2-2.3.2.tar.gz", hash = "sha256:af52e27e03e7fe147f2b642151eec81f264d058efe53b974eb08b5d90177cd14"},
|
||||
{file = "nonebot2-2.3.3-py3-none-any.whl", hash = "sha256:5bc8d073091347f29c4a1a2f927c24a8941e5d286c77139376259318b9bbfc68"},
|
||||
{file = "nonebot2-2.3.3.tar.gz", hash = "sha256:4fa7707de5d708c27cc49493bc78a07fee2ba01f5516835a2ea5fbebb49b9dfa"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nonebot2"
|
||||
version = "2.3.2"
|
||||
version = "2.3.3"
|
||||
extras = ["fastapi"]
|
||||
requires_python = "<4.0,>=3.9"
|
||||
summary = "An asynchronous python bot framework."
|
||||
groups = ["default"]
|
||||
dependencies = [
|
||||
"fastapi<1.0.0,>=0.93.0",
|
||||
"nonebot2==2.3.2",
|
||||
"nonebot2==2.3.3",
|
||||
"uvicorn[standard]<1.0.0,>=0.20.0",
|
||||
]
|
||||
files = [
|
||||
{file = "nonebot2-2.3.2-py3-none-any.whl", hash = "sha256:c51aa3c1f23d8062ce6d13c8423dcb9a8bf0c44f21687916095f825da79a9a55"},
|
||||
{file = "nonebot2-2.3.2.tar.gz", hash = "sha256:af52e27e03e7fe147f2b642151eec81f264d058efe53b974eb08b5d90177cd14"},
|
||||
{file = "nonebot2-2.3.3-py3-none-any.whl", hash = "sha256:5bc8d073091347f29c4a1a2f927c24a8941e5d286c77139376259318b9bbfc68"},
|
||||
{file = "nonebot2-2.3.3.tar.gz", hash = "sha256:4fa7707de5d708c27cc49493bc78a07fee2ba01f5516835a2ea5fbebb49b9dfa"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1430,6 +1430,85 @@ files = [
|
||||
{file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "10.4.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Python Imaging Library (Fork)"
|
||||
groups = ["default"]
|
||||
files = [
|
||||
{file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"},
|
||||
{file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"},
|
||||
{file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"},
|
||||
{file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"},
|
||||
{file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"},
|
||||
{file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"},
|
||||
{file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"},
|
||||
{file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"},
|
||||
{file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pkginfo"
|
||||
version = "1.10.0"
|
||||
@@ -1472,17 +1551,6 @@ files = [
|
||||
{file = "playwright-1.44.0-py3-none-win_amd64.whl", hash = "sha256:5b8a4a1d4d50f4ff99b47965576322a8c4e34631854b862a25c1feb824be22a8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proces"
|
||||
version = "0.1.7"
|
||||
requires_python = ">=3.6"
|
||||
summary = "text preprocess."
|
||||
groups = ["default"]
|
||||
files = [
|
||||
{file = "proces-0.1.7-py3-none-any.whl", hash = "sha256:308325bbc96877263f06e57e5e9c760c4b42cc722887ad60be6b18fc37d68762"},
|
||||
{file = "proces-0.1.7.tar.gz", hash = "sha256:70a05d9e973dd685f7a9092c58be695a8181a411d63796c213232fd3fdc43775"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prompt-toolkit"
|
||||
version = "3.0.47"
|
||||
@@ -1497,6 +1565,21 @@ files = [
|
||||
{file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "py-spy"
|
||||
version = "0.3.14"
|
||||
summary = "Sampling profiler for Python programs "
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "py_spy-0.3.14-py2.py3-none-macosx_10_7_x86_64.whl", hash = "sha256:5b342cc5feb8d160d57a7ff308de153f6be68dcf506ad02b4d67065f2bae7f45"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:fe7efe6c91f723442259d428bf1f9ddb9c1679828866b353d539345ca40d9dd2"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590905447241d789d9de36cff9f52067b6f18d8b5e9fb399242041568d414461"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6211fe7f587b3532ba9d300784326d9a6f2b890af7bf6fff21a029ebbc812b"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e8e48032e71c94c3dd51694c39e762e4bbfec250df5bf514adcdd64e79371e0"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f59b0b52e56ba9566305236375e6fc68888261d0d36b5addbe3cf85affbefc0e"},
|
||||
{file = "py_spy-0.3.14-py2.py3-none-win_amd64.whl", hash = "sha256:8f5b311d09f3a8e33dbd0d44fc6e37b715e8e0c7efefafcda8bfd63b31ab5a31"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pycparser"
|
||||
version = "2.22"
|
||||
@@ -1793,7 +1876,7 @@ name = "requests"
|
||||
version = "2.32.3"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Python HTTP for Humans."
|
||||
groups = ["default", "dev"]
|
||||
groups = ["dev"]
|
||||
dependencies = [
|
||||
"certifi>=2017.4.17",
|
||||
"charset-normalizer<4,>=2",
|
||||
@@ -1848,29 +1931,29 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.5.5"
|
||||
version = "0.6.6"
|
||||
requires_python = ">=3.7"
|
||||
summary = "An extremely fast Python linter and code formatter, written in Rust."
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "ruff-0.5.5-py3-none-linux_armv6l.whl", hash = "sha256:605d589ec35d1da9213a9d4d7e7a9c761d90bba78fc8790d1c5e65026c1b9eaf"},
|
||||
{file = "ruff-0.5.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00817603822a3e42b80f7c3298c8269e09f889ee94640cd1fc7f9329788d7bf8"},
|
||||
{file = "ruff-0.5.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:187a60f555e9f865a2ff2c6984b9afeffa7158ba6e1eab56cb830404c942b0f3"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe26fc46fa8c6e0ae3f47ddccfbb136253c831c3289bba044befe68f467bfb16"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad25dd9c5faac95c8e9efb13e15803cd8bbf7f4600645a60ffe17c73f60779b"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f70737c157d7edf749bcb952d13854e8f745cec695a01bdc6e29c29c288fc36e"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cfd7de17cef6ab559e9f5ab859f0d3296393bc78f69030967ca4d87a541b97a0"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09b43e02f76ac0145f86a08e045e2ea452066f7ba064fd6b0cdccb486f7c3e7"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0b856cb19c60cd40198be5d8d4b556228e3dcd545b4f423d1ad812bfdca5884"},
|
||||
{file = "ruff-0.5.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3687d002f911e8a5faf977e619a034d159a8373514a587249cc00f211c67a091"},
|
||||
{file = "ruff-0.5.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ac9dc814e510436e30d0ba535f435a7f3dc97f895f844f5b3f347ec8c228a523"},
|
||||
{file = "ruff-0.5.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:af9bdf6c389b5add40d89b201425b531e0a5cceb3cfdcc69f04d3d531c6be74f"},
|
||||
{file = "ruff-0.5.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d40a8533ed545390ef8315b8e25c4bb85739b90bd0f3fe1280a29ae364cc55d8"},
|
||||
{file = "ruff-0.5.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cab904683bf9e2ecbbe9ff235bfe056f0eba754d0168ad5407832928d579e7ab"},
|
||||
{file = "ruff-0.5.5-py3-none-win32.whl", hash = "sha256:696f18463b47a94575db635ebb4c178188645636f05e934fdf361b74edf1bb2d"},
|
||||
{file = "ruff-0.5.5-py3-none-win_amd64.whl", hash = "sha256:50f36d77f52d4c9c2f1361ccbfbd09099a1b2ea5d2b2222c586ab08885cf3445"},
|
||||
{file = "ruff-0.5.5-py3-none-win_arm64.whl", hash = "sha256:3191317d967af701f1b73a31ed5788795936e423b7acce82a2b63e26eb3e89d6"},
|
||||
{file = "ruff-0.5.5.tar.gz", hash = "sha256:cc5516bdb4858d972fbc31d246bdb390eab8df1a26e2353be2dbc0c2d7f5421a"},
|
||||
{file = "ruff-0.6.6-py3-none-linux_armv6l.whl", hash = "sha256:f5bc5398457484fc0374425b43b030e4668ed4d2da8ee7fdda0e926c9f11ccfb"},
|
||||
{file = "ruff-0.6.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:515a698254c9c47bb84335281a170213b3ee5eb47feebe903e1be10087a167ce"},
|
||||
{file = "ruff-0.6.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6bb1b4995775f1837ab70f26698dd73852bbb82e8f70b175d2713c0354fe9182"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69c546f412dfae8bb9cc4f27f0e45cdd554e42fecbb34f03312b93368e1cd0a6"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59627e97364329e4eae7d86fa7980c10e2b129e2293d25c478ebcb861b3e3fd6"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94c3f78c3d32190aafbb6bc5410c96cfed0a88aadb49c3f852bbc2aa9783a7d8"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:704da526c1e137f38c8a067a4a975fe6834b9f8ba7dbc5fd7503d58148851b8f"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efeede5815a24104579a0f6320660536c5ffc1c91ae94f8c65659af915fb9de9"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e368aef0cc02ca3593eae2fb8186b81c9c2b3f39acaaa1108eb6b4d04617e61f"},
|
||||
{file = "ruff-0.6.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2653fc3b2a9315bd809725c88dd2446550099728d077a04191febb5ea79a4f79"},
|
||||
{file = "ruff-0.6.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:bb858cd9ce2d062503337c5b9784d7b583bcf9d1a43c4df6ccb5eab774fbafcb"},
|
||||
{file = "ruff-0.6.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:488f8e15c01ea9afb8c0ba35d55bd951f484d0c1b7c5fd746ce3c47ccdedce68"},
|
||||
{file = "ruff-0.6.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:aefb0bd15f1cfa4c9c227b6120573bb3d6c4ee3b29fb54a5ad58f03859bc43c6"},
|
||||
{file = "ruff-0.6.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a4c0698cc780bcb2c61496cbd56b6a3ac0ad858c966652f7dbf4ceb029252fbe"},
|
||||
{file = "ruff-0.6.6-py3-none-win32.whl", hash = "sha256:aadf81ddc8ab5b62da7aae78a91ec933cbae9f8f1663ec0325dae2c364e4ad84"},
|
||||
{file = "ruff-0.6.6-py3-none-win_amd64.whl", hash = "sha256:0adb801771bc1f1b8cf4e0a6fdc30776e7c1894810ff3b344e50da82ef50eeb1"},
|
||||
{file = "ruff-0.6.6-py3-none-win_arm64.whl", hash = "sha256:4b4d32c137bc781c298964dd4e52f07d6f7d57c03eae97a72d97856844aa510a"},
|
||||
{file = "ruff-0.6.6.tar.gz", hash = "sha256:0fc030b6fd14814d69ac0196396f6761921bd20831725c7361e1b8100b818034"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1891,13 +1974,13 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "setuptools"
|
||||
version = "71.1.0"
|
||||
version = "75.1.0"
|
||||
requires_python = ">=3.8"
|
||||
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||
groups = ["default", "dev"]
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "setuptools-71.1.0-py3-none-any.whl", hash = "sha256:33874fdc59b3188304b2e7c80d9029097ea31627180896fb549c578ceb8a0855"},
|
||||
{file = "setuptools-71.1.0.tar.gz", hash = "sha256:032d42ee9fb536e33087fb66cac5f840eb9391ed05637b3f2a76a7c8fb477936"},
|
||||
{file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"},
|
||||
{file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2058,7 +2141,7 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "tarina"
|
||||
version = "0.5.4"
|
||||
version = "0.5.8"
|
||||
requires_python = ">=3.8"
|
||||
summary = "A collection of common utils for Arclet"
|
||||
groups = ["default"]
|
||||
@@ -2066,44 +2149,44 @@ dependencies = [
|
||||
"typing-extensions>=4.4.0",
|
||||
]
|
||||
files = [
|
||||
{file = "tarina-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:49f20a447866ecc831acc82f09dec01f77a0ca1f89b12fa27268bccd29378449"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5b24b5c07dc02c006d80930028e1c5f46945bf55effbeeaa426d5ac8f46eff88"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed8fe5a1df3b32e69f99f5ae6615dc8c2e34459c7e7f828bbeadefb4ecd4fe4f"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab6fac674c408bff3161a27473951df8994b54fff406680814079c9c0b82f804"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfabcce37425aaf5db604ad916c9b69350174afcdb98192c6dbf1fc0cda2183f"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:18900dc94388da4d322c56292cdab6a62da46d27ab5db30ed8809caab57c3502"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b3f8b69949c85bb3cf5b27985961ba0c26e4359a42352f7d5870f6d455f4890"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-win32.whl", hash = "sha256:8e4389a6147460b6ea6a795f21a6348190ca2fe0eb95faafb3120bb0d4de7033"},
|
||||
{file = "tarina-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:042bdbaac389334ab9c0851a5f1972dc9ed5c0387b4bcdee3ba1b2223aadb39f"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:08964a6daa02d992be4b4bf2ace99c94549350195a749198f2d422221e93cc9f"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f81635455a307d65440c20645923041c8815c50dfeac046b64b64fd7840b7c30"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f20ce1ecc06362bbfd7ca30b1dc19c3a049f69b7dc6061df95a0bf93ce627055"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:539d239b35af0052be9cc7eeb3675c84b02a4b98c3d8ec51dbe7db2e9e5da92a"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d8e9da2d450cdd93ac9a11af1ff02b6c9a305aa477cbada0d397c5b0b64e3"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:15a2ac416e972b0318c53f20c3478d77fb770dfa9ab25ab43aa8975886ecb160"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af522dc1ad30d7bcbbf9384f4f3aede3bebd7cecfc7127148ae0d12bd69b65d9"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-win32.whl", hash = "sha256:781b1df4250e8f8f0b7902f3b7952135cbf43284e2cf490f57b738160d74b56f"},
|
||||
{file = "tarina-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:9d32bab544e7c74e56958b0ebcd430a80194492ca6e98ed2f6217708fabc4027"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:95b1504e4241a28fe75fa0995ebfed1dad140381ad72541e5b69428c84d16735"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9bbaefb3a627fcefc868d455cdc5d42297ba48369651821b04d8c8836307c39f"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7cfec7c6a725bebb46b4e4a8ed64523c6deeae94dba1d3102b866c0247a32cdb"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fccfd98ca925ec3597ca88f359f608f7762ad13a14dffcb17742b1e78e071306"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bef0dfa5007f5138f48cbb9c2ef9564579def00b75caf47ebf53d32db7bf4044"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8e6e2f0580d8dd956f92313ff51760df6893cd16fc009cdc2607130463d08bbb"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:82f09edcf58b2e02622b173822c31c0ad5685f3e36667bd9de751f8c16b5305f"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-win32.whl", hash = "sha256:b56956862d70f0383973d8413ed0fca9623e930acea0d7bf11a67c79714b869f"},
|
||||
{file = "tarina-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:3ee6dafc31cceae46634314db0b547052790015abaec433ff39fef5bf5b3f0f6"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa01c6032226f996286d60bd7b3bfb95565e9288e89b64208649b584386cfd9e"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c93781dfcf0c95c7e12c29fa788a32898aa090ba26bef9b1c970412b8cb7f59"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b61ab72169c2289001a047694dbf6e0e73ed0b1c5405f65651b2500190928d43"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3b9ee386d0a8558c9270ae2f4fd33ff2394482705a2849646aad3df870cf754"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d6937a4911e5b7bf1f5a4bcc466e2cce3b1576eb6462459e568668f63a073f"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4d332b30374b2d8fec2852d6af77f121c0fb026c48593cebdfbed6d49c2b260"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:077b99101ee19699c8791f2630ed7c40c592e5d75ab309a042f5303d89f382c6"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-win32.whl", hash = "sha256:a553a8790215ecd6f1af2616769012f16e28eaae0b805ddc780fe543ec2a6a4b"},
|
||||
{file = "tarina-0.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:5c75b66d011cb7dd78149bf3911a78eaa96885dab4477fd4a96613349411f378"},
|
||||
{file = "tarina-0.5.4-py3-none-any.whl", hash = "sha256:1aa7d5c00e4bb6a35c5fd21bcbc536670df755922cd49bd9076a024fea191ade"},
|
||||
{file = "tarina-0.5.4.tar.gz", hash = "sha256:5d192a50d47b22ae8ca79e50ee760f171e563135eb04dc834a9b254211dbf32e"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76512f0868f0d24684888c173f1eb8ad301fa419920168f4072f9f0e2e903fec"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ffc4dd5977c7f444e6352b881656262033cd23c7bb79ff86dce0cab557fb1c2"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bc30f6e6a8a078c6fde61689b8db7e6146f7116daacce6b1dbb247647c0859d9"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46ea40c1a19ddc7f034f1c07a5daae120295b38639fe12eb27973b99602ef699"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c23dfa1cbccafe333eb666e97f1887325c78a134601a2df72593bfb6a3541255"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7be68f9155f641fb74e6318f6ee85ab86cacb2a3c53424f168fbd0b9e0468e33"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6863c679ba9af3059f9501b038559e1c07b969e81894e9259c1bbfc385545c26"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-win32.whl", hash = "sha256:2024ca41524d17b6d09b6a12fa33e35413126001b566bdfed61e514a70ec4d44"},
|
||||
{file = "tarina-0.5.8-cp310-cp310-win_amd64.whl", hash = "sha256:f061179a48d71206af5ed7161550b7d72724f5ea24904a3ffcbf748aa047868c"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9b730d605691c1afc074f684b77c12e921d8a0a278b80b5fc016ab2bf75ee081"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21dfdacf4ca5b46ecfbcd2ea92445abf9aced634aaef285fec8d914163261db8"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3162eace1e5193313f1523a943b5ae14464199782f235e87702da9ee3fb37a6"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385882a2991046aa05f7b183f386ec2c949076aeacb4acad525ead63342d73f7"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ee0f135cbe26549592fa12691cb057aa4464d4182c35d7d967361eba52ed95"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2c188c34143ae6bdcee13bac089845f1ca7d32169d85f172091550e0f34fda35"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a45e5f0fccd0267a15582b9d8cfa4b21fca5c1c690ced673f0f58869b98cb178"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-win32.whl", hash = "sha256:e554bd8e22a43ffc8f441d771585e81f90150de2f9e9d9a984c7b004bb613c10"},
|
||||
{file = "tarina-0.5.8-cp311-cp311-win_amd64.whl", hash = "sha256:51c8b7ad1cc114efde36ab09687b5f93afde27ad082cd38721dc327c7f0d922d"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c95f227e7265cfce8c4fb5eebef2a148934b52b782527ded278a4e0926b90ceb"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a394bd75c92d39c0e4c1ee40404de24316f4263f10e296e8d4e19bd0a3c50e55"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9db70e6fb97ee8a87da52e9ced52ee6df7c468f75b72ef98af5a97929e12bc2d"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b713717dcafcd03a86f41509b6c9ebc2749419c9c8c6d559edd6fdfaca6f354"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccaf87a54e062a2d72a60d699198760684aca231c7de7de11d61c191d1e870bf"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a1dc7e8e84ab4e0d6bfb3e4e9c82c7d8a4c002794b7b44010658f0f81e8b5e52"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dbc6e78e3ee9b24f9c0feb2c14c17d9696098abf6530ae63d6f4158ab7038c38"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-win32.whl", hash = "sha256:4e1a08f1c3d40f935cc8c9507b7ea669b002a53dc7334c9b0ede9f71cf9d1cba"},
|
||||
{file = "tarina-0.5.8-cp312-cp312-win_amd64.whl", hash = "sha256:ab90fd830ec05d5f7cd001906fdd1a3e00d8c9fd221772d02bb87a7aec947925"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7130939147f54f08eda3c6e0eb4cf8c20a4dfa079de9c9e5a3db7a3f3663674c"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0763b338533c7bdfca688219a80c905216c7d5e9c854fd1e299f92ae66ed5659"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a35a155318588dd936348c8bd72618069d2a8bb268d74f070be368fc2b068190"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05c7ecbf79cf511f8ca13a564d0357ed7cc0cb28260d71dbf4bce29fa1dea779"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a73271adef1944cbbadaac4e36a979ffa4c531cee8043b31e7777262482ede0c"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2ae9d864fa5644eeb76e56b79af7727d8c970fd99ed03c77be7afbb1e64e2ba4"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5efa1fe62b0f0cb3021051fe63b7ecc41c83a3351fb9022f7f450227d27dd04"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-win32.whl", hash = "sha256:d986d11e2b1dd8b2bfe96b4327700db9275c4f2b32ba83cc682b0737d0b79913"},
|
||||
{file = "tarina-0.5.8-cp39-cp39-win_amd64.whl", hash = "sha256:d89b6ee7ee51fc2b1ac3763f06718859e065951e4a995541f9380f7606e5d3db"},
|
||||
{file = "tarina-0.5.8-py3-none-any.whl", hash = "sha256:90740760e9f516677962eff5242a722c616939b123c566a85d7e009ec9868eb3"},
|
||||
{file = "tarina-0.5.8.tar.gz", hash = "sha256:ab5a8b901829242c64a8a0436c7753e894ccae36891ca20a9deda9de6210a0b3"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2300,7 +2383,7 @@ name = "urllib3"
|
||||
version = "2.2.1"
|
||||
requires_python = ">=3.8"
|
||||
summary = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||
groups = ["default", "dev"]
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
|
||||
{file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
[project]
|
||||
name = "nonebot-plugin-dialectlist"
|
||||
version = "2.2.3"
|
||||
version = "2.5.1"
|
||||
description = "看看你群群友有多能说"
|
||||
authors = [
|
||||
{name = "Chen_Xu233", email = "woyerpa@outlook.com"},
|
||||
]
|
||||
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",
|
||||
"nonebot-plugin-userinfo>=0.2.4",
|
||||
"nonebot-plugin-userinfo>=0.2.6",
|
||||
"nonebot-plugin-htmlrender>=0.3.3",
|
||||
"nonebot2>=2.3.2",
|
||||
"cn2an>=0.5.22"
|
||||
"pillow>=10.4.0",
|
||||
"nonebot-plugin-uninfo>=0.1.1",
|
||||
]
|
||||
requires-python = ">=3.9,<4.0"
|
||||
requires-python = ">=3.9,<3.13"
|
||||
readme = "README.md"
|
||||
license = {text = "MIT"}
|
||||
|
||||
@@ -27,7 +27,8 @@ dev = [
|
||||
"ruff>=0.5.5",
|
||||
"setuptools>=71.1.0",
|
||||
"twine>=5.1.0",
|
||||
"nb-cli>=0.7.6"
|
||||
"nb-cli>=0.7.6",
|
||||
"py-spy>=0.3.14",
|
||||
]
|
||||
Test = [
|
||||
"nonebot-adapter-onebot>=2.4.4",
|
||||
@@ -38,21 +39,10 @@ distribution = true
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 80
|
||||
|
||||
[tool.ruff.format]
|
||||
quote-style = "single"
|
||||
indent-style = "tab"
|
||||
|
||||
[tool.pdm.scripts]
|
||||
|
||||
build = 'pdm run setup.py sdist'
|
||||
publish = 'pdm run python -m twine upload dist/*'
|
||||
|
||||
|
||||
# 以下为智普 AI 生成,还不知道这玩意有啥用。
|
||||
# [tool.pdm.dev-dependencies]
|
||||
# black = "^23.1.0"
|
||||
# isort = "^5.10.1"
|
||||
# pre-commit = "^2.20.0"
|
||||
|
||||
# [tool.pdm.global-options]
|
||||
# --no-pip-version-check = true
|
||||
[tool.ruff.lint]
|
||||
ignore = ["E402"]
|
||||
|
||||
Reference in New Issue
Block a user