blob: b12607cbcf0c0473716973e377b6d25e9a7f5903 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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}"
|