aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorHsiangNianian <i@jyunko.cn>2025-08-06 23:22:30 +0800
committerHsiangNianian <i@jyunko.cn>2025-08-06 23:22:30 +0800
commitb81218da09213950e381abe358ea8319ed1f6ac4 (patch)
tree203d10edd20d7207b06c34a8b601f81bb69bc1d6
parent8d2ae6f2dcdc0c9108f93094e71b0ad8c6cd4aec (diff)
downloadinfini-b81218da09213950e381abe358ea8319ed1f6ac4.tar.gz
infini-b81218da09213950e381abe358ea8319ed1f6ac4.zip
chore(cover): comment examples dir
-rw-r--r--.vscode/settings.json4
-rw-r--r--examples/main.py77
-rw-r--r--examples/rule_packs/basic_roller.py49
-rw-r--r--examples/rule_packs/coc.py40
-rw-r--r--pyproject.toml3
-rw-r--r--uv.lock24
6 files changed, 29 insertions, 168 deletions
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" },
]
@@ -301,6 +303,19 @@ wheels = [
]
[[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"
source = { registry = "https://pypi.org/simple" }
@@ -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" },
+]