diff options
| author | 2025-08-02 11:38:42 +0800 | |
|---|---|---|
| committer | 2025-08-02 11:38:42 +0800 | |
| commit | 9a7da1ef1b81736a3c72251ec456083d00ed26cd (patch) | |
| tree | bc35c9a7be1a776dcf98c231d377faa6d3519349 /examples/rule_packs/basic_roller.py | |
| parent | 138d4b0b0a873d853ff684690088f34f94ac9cb8 (diff) | |
| download | infini-9a7da1ef1b81736a3c72251ec456083d00ed26cd.tar.gz infini-9a7da1ef1b81736a3c72251ec456083d00ed26cd.zip | |
chore(examples): add rule packs examples
Diffstat (limited to 'examples/rule_packs/basic_roller.py')
| -rw-r--r-- | examples/rule_packs/basic_roller.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/examples/rule_packs/basic_roller.py b/examples/rule_packs/basic_roller.py new file mode 100644 index 00000000..b12607cb --- /dev/null +++ b/examples/rule_packs/basic_roller.py @@ -0,0 +1,49 @@ +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}" |
