Skip to content

完整示例

示例 1:群消息互通增强版

python
def on_load(lumen):
    cfg = lumen.storage.read("config.json", {
        "reply_keyword": "帮助",
        "reply_text": "可用命令:查余额 / 签到 / 在线人数"
    })

    def on_group_message(pack, reply):
        if pack.get("raw_message") == cfg["reply_keyword"]:
            reply(cfg["reply_text"])

    lumen.on("message.group.normal", on_group_message)

def on_unload(lumen):
    pass

示例 2:签到系统

python
import time

def on_load(lumen):
    KEYWORD = "签到"
    REWARD_RANGE = (10, 50)

    def on_group_message(pack, reply):
        if pack.get("raw_message") != KEYWORD:
            return
        user_id = str(pack.get("user_id"))
        today = time.strftime("%Y-%m-%d")

        data = lumen.storage.read("signin.json", {"last": {}, "total": {}})
        if data["last"].get(user_id) == today:
            reply("今天已经签到过了!")
            return

        import random
        reward = random.randint(*REWARD_RANGE)
        data["last"][user_id] = today
        data["total"][user_id] = data["total"].get(user_id, 0) + reward
        lumen.storage.write("signin.json", data)

        reply(f"签到成功!获得 {reward} 金币,累计 {data['total'][user_id]} 金币")

    lumen.on("message.group.normal", on_group_message)
    lumen.logger.info("签到系统已启动")

示例 3:自定义 WebAPI + 页面

python
def on_load(lumen):
    # 注册 API
    def handle_stats(request):
        return {"code": 200, "data": {
            "online": len(lumen.mc.online_players),
            "players": lumen.mc.online_players,
        }}
    lumen.web.registerApi("GET", "/stats", handle_stats, need_auth=True)

    # 挂载自定义页面到侧边栏
    lumen.web.registerPage("数据面板", "assets/dashboard.html")

    lumen.logger.info("数据面板已挂载")

示例 4:监听 Endstone 原生事件

python
def on_load(lumen):
    # 监听玩家破坏方块
    def on_break(event):
        player = event.player
        block = event.block
        lumen.logger.info(f"{player.name} 破坏了 {block.block_type} @ {block.location}")
        # 通过 OneBot 转发到群
        lumen.QClient.send_group_msg(
            lumen.env.get("main_group"),
            f"[事件] {player.name} 破坏了 {block.block_type}"
        )

    lumen.mc.listen("BlockBreakEvent", on_break)

基于 MIT 许可协议发布