From b81218da09213950e381abe358ea8319ed1f6ac4 Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Wed, 6 Aug 2025 23:22:30 +0800 Subject: chore(cover): comment examples dir --- .vscode/settings.json | 4 +- examples/main.py | 77 ------------------------------------- examples/rule_packs/basic_roller.py | 49 ----------------------- examples/rule_packs/coc.py | 40 ------------------- pyproject.toml | 3 +- uv.lock | 24 ++++++++++++ 6 files changed, 29 insertions(+), 168 deletions(-) delete mode 100644 examples/main.py delete mode 100644 examples/rule_packs/basic_roller.py delete mode 100644 examples/rule_packs/coc.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 72502d18..5772647c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,7 @@ "python.analysis.typeCheckingMode": "basic", "iis.configDir": "", "python.analysis.autoImportCompletions": true, - "restructuredtext.pythonRecommendation.disabled": true + "restructuredtext.pythonRecommendation.disabled": true, + "cursorpyright.analysis.autoImportCompletions": true, + "cursorpyright.analysis.typeCheckingMode": "basic" } \ No newline at end of file diff --git a/examples/main.py b/examples/main.py deleted file mode 100644 index e7dffc1c..00000000 --- a/examples/main.py +++ /dev/null @@ -1,77 +0,0 @@ -# main.py -import os -import importlib - -# --- 配置区 --- -# 在这里指定你想要加载的规则包文件名 (不含 .py) -# 你可以随时修改这个列表来开启或关闭不同的规则包 -ENABLED_RULE_PACKS = [ - "basic_roller", - "coc", -] - - -class DiceBotCore: - def __init__(self, rule_pack_names): - self.loaded_packs = [] - self.load_rule_packs(rule_pack_names) - - def load_rule_packs(self, rule_pack_names): - """动态加载指定的规则包""" - print("正在加载规则包...") - for name in rule_pack_names: - try: - # 动态导入模块 - module = importlib.import_module(f"rule_packs.{name}") - # 检查模块是否符合我们的结构要求 - if hasattr(module, "handle_command"): - self.loaded_packs.append(module) - print(f" - 规则包 '{name}' 加载成功。") - else: - print( - f" - 警告: 规则包 '{name}'缺少 'handle_command' 函数,已跳过。" - ) - except ImportError: - print(f" - 错误: 找不到名为 '{name}' 的规则包。") - print("-" * 20) - - def process_command(self, command): - """将指令传递给所有加载的规则包""" - for pack in self.loaded_packs: - result = pack.handle_command(command) - if result is not None: - return result # 一旦有规则包处理了指令,就立即返回结果 - return "无法识别的指令。输入 'help' 查看可用指令。" - - def get_all_help(self): - """收集所有已加载规则包的帮助信息""" - help_texts = ["--- 欢迎使用模块化骰子机器人 ---"] - for pack in self.loaded_packs: - if hasattr(pack, "get_help"): - help_texts.append(pack.get_help()) - return "\n".join(help_texts) - - -def main(): - """程序主循环""" - bot = DiceBotCore(ENABLED_RULE_PACKS) - - print("机器人已启动。输入 'exit' 退出。") - print(bot.get_all_help()) # 启动时显示帮助信息 - - while True: - user_input = input("\n> ") - - if user_input.lower() == "exit": - print("感谢使用,再见!") - break - elif user_input.lower() == "help": - print(bot.get_all_help()) - continue - - result = bot.process_command(user_input) - print(result) - - -if __name__ == "__main__": - main() diff --git a/examples/rule_packs/basic_roller.py b/examples/rule_packs/basic_roller.py deleted file mode 100644 index b12607cb..00000000 --- a/examples/rule_packs/basic_roller.py +++ /dev/null @@ -1,49 +0,0 @@ -import random -import re - - -def get_help(): - """返回此规则包的帮助信息""" - return """ ---- 基础掷骰 (Basic Roller) --- -.r <表达式> : 执行一个掷骰表达式。 - 示例: .r 2d6 - .r d100+10 - .r 1d20-2 -""" - - -def handle_command(command): - """处理基础掷骰指令""" - # 我们规定基础指令以 .r 开头 - if not command.lower().startswith(".r "): - return None # 不是我的指令,我不处理 - - expression = command[3:].strip() # 获取 .r 后面的内容 - - # 清理表达式中的空格 - expression = expression.lower().replace(" ", "") - - # 正则表达式来匹配 XdY+/-Z - match = re.match(r"(\d*)d(\d+)([+-]\d+)?", expression) - if not match: - return f"基础掷骰格式错误: {expression}" - - num_dice_str, num_sides_str, modifier_str = match.groups() - - num_dice = int(num_dice_str) if num_dice_str else 1 - num_sides = int(num_sides_str) - modifier = int(modifier_str) if modifier_str else 0 - - if num_dice <= 0 or num_sides <= 0: - return "骰子数量和面数必须大于0。" - - rolls = [random.randint(1, num_sides) for _ in range(num_dice)] - base_total = sum(rolls) - final_total = base_total + modifier - - roll_details = f"({'+'.join(map(str, rolls))})" - if modifier != 0: - return f"掷骰: {expression} -> {final_total} [{roll_details}{modifier:+}]" - else: - return f"掷骰: {expression} -> {final_total} {roll_details}" diff --git a/examples/rule_packs/coc.py b/examples/rule_packs/coc.py deleted file mode 100644 index 28548d03..00000000 --- a/examples/rule_packs/coc.py +++ /dev/null @@ -1,40 +0,0 @@ -import random -import re - - -def get_help(): - """返回此规则包的帮助信息""" - return """ ---- 克苏鲁的呼唤 (Call of Cthulhu) --- -.ra <技能值> : 对指定的技能值进行成功/失败检定。 - 示例: .ra 75 -""" - - -def handle_command(command): - """处理COC检定指令""" - command = command.lower().strip() - - # 我们规定COC检定指令以 .ra 开头 - match = re.match(r"^\.ra\s*(\d+)$", command) - if not match: - return None # 不是我的指令,我不处理 - - skill_value = int(match.group(1)) - roll = random.randint(1, 100) - - # 判断结果 - if roll <= 1: - result_text = "大成功 (Critical Success)" - elif roll > 95: # COC 7版规则大失败 - result_text = "大失败 (Fumble)" - elif roll <= skill_value / 5: - result_text = "极难成功 (Extreme Success)" - elif roll <= skill_value / 2: - result_text = "困难成功 (Hard Success)" - elif roll <= skill_value: - result_text = "成功 (Regular Success)" - else: - result_text = "失败 (Failure)" - - return f"COC检定 (目标: {skill_value}) -> 掷骰: {roll} -> {result_text}" diff --git a/pyproject.toml b/pyproject.toml index a472090e..cb421203 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,9 +8,10 @@ authors = [ dependencies = [ "rich>=13.7.0", "jinja2>=3.1.3", + "loguru>=0.7.3", ] requires-python = ">=3.10" -readme = "README.md" +readme = "README.rst" license = { text = "MIT" } [project.urls] diff --git a/uv.lock b/uv.lock index 275e48fb..f6b4d14a 100644 --- a/uv.lock +++ b/uv.lock @@ -226,6 +226,7 @@ version = "3.0.1" source = { editable = "." } dependencies = [ { name = "jinja2" }, + { name = "loguru" }, { name = "rich" }, ] @@ -247,6 +248,7 @@ docs = [ [package.metadata] requires-dist = [ { name = "jinja2", specifier = ">=3.1.3" }, + { name = "loguru", specifier = ">=0.7.3" }, { name = "rich", specifier = ">=13.7.0" }, ] @@ -300,6 +302,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -1022,3 +1037,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/a1/dcb68430b1d00b698ae7a7e0194433bce4f07ded185f0ee5fb21e2a2e91e/websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", size = 176884, upload-time = "2025-03-05T20:03:27.934Z" }, { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, ] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] -- cgit v1.2.3-70-g09d2