"""独立每日签到插件。 用户发送「签到」即可完成每日签到并领取积分(每天一次)。 与 onmyoji_gacha 抽卡签到、WPF 客户端签到共用 xapi `bot_gacha_daily_sign_in` 签到数据:每天每用户仅一次,任一入口先到先得,后到者提示已签到。 """ from nonebot import on_command, require from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, MessageEvent from nonebot.plugin import PluginMetadata from .config import Config from .api import SignInAPI from .rules import check_permission from .service import perform_daily_sign_in require("danding_bot.plugins.danding_points") from danding_bot.plugins.danding_points import points_api # noqa: E402 __plugin_meta__ = PluginMetadata( name="每日签到", description="独立每日签到命令,与抽卡签到共用同一份签到数据", usage="发送「签到」即可完成每日签到并领取积分(每天一次)", type="application", config=Config, extra={ "required_plugins": ["danding_bot.plugins.danding_points"], }, ) config = Config() sign_in_api = SignInAPI(config) sign_in_matcher = on_command("签到", aliases={"每日签到", "打卡"}, priority=5, rule=check_permission()) @sign_in_matcher.handle() async def handle_sign_in(bot: Bot, event: MessageEvent): user_id = str(event.user_id) sender = event.sender user_name = "" if sender: user_name = sender.card if isinstance(event, GroupMessageEvent) else sender.nickname user_name = user_name or "用户" result = await perform_daily_sign_in( sign_in_api=sign_in_api, points_api=points_api, user_id=user_id, points_min=config.SIGN_IN_POINTS_MIN, points_max=config.SIGN_IN_POINTS_MAX, source=config.SIGN_IN_SOURCE, reason=config.SIGN_IN_REASON, ) if not result["success"]: await sign_in_matcher.finish(f"{user_name} ❌ {result['message']}") if result["already_signed"]: await sign_in_matcher.finish( f"{user_name} 📅 今天已经签到过啦\n" f"🎁 今日签到积分:{result['points']}\n" f"(抽卡/WPF 签到同样计入每日一次)\n" f"明天再来吧~" ) return await sign_in_matcher.finish( f"{user_name} 📅 每日签到成功!\n" f"🎁 获得积分:{result['points']}\n" f"💰 当前积分:{result['balance']}" )