zhenxun_bot/zhenxun/builtin_plugins/sign_in/__init__.py

186 lines
5.1 KiB
Python
Raw Normal View History

2024-02-25 03:18:34 +08:00
from nonebot.plugin import PluginMetadata
from nonebot_plugin_alconna import (
2024-08-30 23:09:10 +08:00
Alconna,
AlconnaQuery,
Args,
Arparma,
Option,
Query,
2024-02-25 03:18:34 +08:00
on_alconna,
store_true,
)
from nonebot_plugin_apscheduler import scheduler
2024-02-25 03:18:34 +08:00
from zhenxun.configs.utils import (
Command,
PluginCdBlock,
PluginExtraData,
RegisterConfig,
)
2024-02-25 03:18:34 +08:00
from zhenxun.services.log import logger
from zhenxun.utils.depends import UserName
2024-08-10 02:25:04 +08:00
from zhenxun.utils.message import MessageUtils
2024-02-25 03:18:34 +08:00
from ._data_source import SignManage
:sparkles: 首次启动时提供使用web ui方式完全配置 (#1870) * :sparkles: 添加全局优先级hook * :sparkles: 添加基础配置api * :sparkles: 添加数据库连接测试 * :speech_balloon: 提示重启 * :adhesive_bandage: 填充过配置时友好提示 * :bug: 首次生成简易配置后自动加载 * :sparkles: 添加配置后重启接口 * :sparkles: 添加重启标志文件 * :sparkles: 添加重启脚本命令 * :sparkles: 添加重启系统限制 * :sparkles: 首次配置判断是否为win系统 * :fire: 移除bat * :sparkles: 添加关于菜单 * :sparkles: 支持整合包插件安装和添加整合包文档 * :adhesive_bandage: 检测数据库路径 * :adhesive_bandage: 修改数据库路径检测 * :adhesive_bandage: 修改数据库路径检测 * :adhesive_bandage: 修复路径注入 * :art: 显示添加优先级 * :bug: 修改PriorityLifecycle字典类名称 * :zap: 修复路径问题 * :zap: 修复路径检测 * ✨ 新增路径验证功能,确保用户输入的路径安全并在项目根目录内 * ✨ 优化路径验证功能,增加对非法字符和路径长度的检查,确保用户输入的路径更加安全 * :rotating_light: auto fix by pre-commit hooks * ✨ 优化获取文件列表的代码格式 * :memo: 修改README中webui示例图 * ✨ 更新PriorityLifecycle.on_startup装饰器 * ✨ 简化安装依赖的命令构建逻辑 * :rotating_light: auto fix by pre-commit hooks --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-06-16 09:11:41 +08:00
from .goods_register import Uninfo
from .utils import clear_sign_data_pic
2024-02-25 03:18:34 +08:00
__plugin_meta__ = PluginMetadata(
name="签到",
description="每日签到,证明你在这里",
usage="""
每日签到
会影响色图概率和开箱次数以及签到的随机道具获取
2024-02-27 16:12:56 +08:00
指令:
签到
2024-02-25 03:18:34 +08:00
我的签到
好感度排行 ?[num=10]
好感度总排行 ?[num=10]
2024-02-25 03:18:34 +08:00
* 签到时有 3% 概率 * 2 *
""".strip(),
extra=PluginExtraData(
author="HibiKier",
version="0.1",
commands=[
Command(command="签到"),
Command(command="我的签到"),
Command(command="签到排行"),
Command(command="签到总排行"),
],
2024-02-25 03:18:34 +08:00
configs=[
RegisterConfig(
module="send_setu",
key="INITIAL_SETU_PROBABILITY",
value=0.7,
help="初始色图概率,总概率 = 初始色图概率 + 好感度",
default_value=0.7,
type=float,
),
RegisterConfig(
key="MAX_SIGN_GOLD",
value=200,
help="签到好感度加成额外获得的最大金币数",
default_value=200,
type=int,
),
RegisterConfig(
key="SIGN_CARD1_PROB",
value=0.2,
help="签到好感度双倍加持卡Ⅰ掉落概率",
default_value=0.2,
type=float,
),
RegisterConfig(
key="SIGN_CARD2_PROB",
value=0.09,
help="签到好感度双倍加持卡Ⅲ掉落概率",
default_value=0.09,
type=float,
),
RegisterConfig(
key="SIGN_CARD3_PROB",
value=0.05,
help="签到好感度双倍加持卡Ⅲ掉落概率",
default_value=0.05,
type=float,
),
],
limits=[PluginCdBlock()],
).to_dict(),
2024-02-25 03:18:34 +08:00
)
_sign_matcher = on_alconna(
Alconna(
"签到",
Option("--my", action=store_true, help_text="我的签到"),
Option(
"-l|--list",
Args["num?", int],
help_text="好感度排行",
2024-02-25 03:18:34 +08:00
),
Option("-g|--global", action=store_true, help_text="全局排行"),
2024-02-25 03:18:34 +08:00
),
priority=5,
block=True,
)
2024-02-27 16:12:56 +08:00
_sign_matcher.shortcut(
"我的签到",
command="签到",
arguments=["--my"],
prefix=True,
)
_sign_matcher.shortcut(
"好感度排行",
command="签到",
arguments=["--list"],
prefix=True,
)
2024-02-25 03:18:34 +08:00
2024-10-18 18:57:55 +08:00
_sign_matcher.shortcut(
"签到排行",
command="签到",
arguments=["--list"],
prefix=True,
)
_sign_matcher.shortcut(
"好感度总排行",
command="签到",
arguments=["--global", "--list"],
prefix=True,
)
2024-10-18 18:57:55 +08:00
_sign_matcher.shortcut(
"签到总排行",
command="签到",
arguments=["--global", "--list"],
prefix=True,
)
2024-02-25 03:18:34 +08:00
@_sign_matcher.assign("$main")
2024-10-18 18:57:55 +08:00
async def _(session: Uninfo, arparma: Arparma, nickname: str = UserName()):
path = await SignManage.sign(session, nickname)
logger.info("签到成功", arparma.header_result, session=session)
await MessageUtils.build_message(path).finish()
2024-02-25 03:18:34 +08:00
@_sign_matcher.assign("my")
2024-10-18 18:57:55 +08:00
async def _(session: Uninfo, arparma: Arparma, nickname: str = UserName()):
path = await SignManage.sign(session, nickname, True)
logger.info("查看我的签到", arparma.header_result, session=session)
await MessageUtils.build_message(path).finish()
2024-02-25 03:18:34 +08:00
@_sign_matcher.assign("list")
async def _(
2024-10-18 18:57:55 +08:00
session: Uninfo, arparma: Arparma, num: Query[int] = AlconnaQuery("num", 10)
):
if num.result > 50:
await MessageUtils.build_message("排行榜人数不能超过50哦...").finish()
2024-10-18 18:57:55 +08:00
gid = session.group.id if session.group else None
if not arparma.find("global") and not gid:
2024-08-10 02:25:04 +08:00
await MessageUtils.build_message(
"私聊中无法查看 '好感度排行',请发送 '好感度总排行'"
).finish()
2024-10-18 18:57:55 +08:00
if arparma.find("global"):
gid = None
image = await SignManage.rank(session, num.result, gid)
logger.info("查看签到排行", arparma.header_result, session=session)
await MessageUtils.build_message(image).send()
2024-02-25 03:18:34 +08:00
@scheduler.scheduled_job(
"interval",
hours=1,
)
async def _():
try:
clear_sign_data_pic()
logger.info("清理日常签到图片数据数据完成...", "签到")
except Exception as e:
2024-08-30 23:09:10 +08:00
logger.error("清理日常签到图片数据数据失败...", e=e)