diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/main.py | 77 | ||||
| -rw-r--r-- | examples/rule_packs/basic_roller.py | 49 | ||||
| -rw-r--r-- | examples/rule_packs/coc.py | 40 |
3 files changed, 0 insertions, 166 deletions
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}" |
