async def combat_status(bot: Bot, event: MessageEvent, state: dict): combat: Combat = state['combat'] if not combat or combat.state == CombatState.ENDED: await combat_cmd.finish( f'战斗轮指示器未激活。\n' f'- 使用指令「{event.raw_message.strip()[0]}combat start」开启一场新战斗。') return # await combat_cmd.send(Message(MessageSegment.xml(await combat_bot_ctl.format_combat_xml(combat)))) await combat_cmd.send( MessageSegment.share( f'https://www.epicteller.com/combat/{combat.url_token}')) if combat.state == CombatState.INITIATING: if len(combat.order.order_list) == 0: status_msg = '还没有人进入先攻顺位。' else: status_msg = f'已有 {len(combat.order.order_list)} 人进入先攻顺位。' await combat_cmd.finish( f'当前战斗正处于先攻阶段,投掷先攻骰来决定先攻顺序。\n{status_msg}\n' f'- 使用指令「{event.raw_message.strip()[0]}combat run」进入行动阶段。') return # combat.state == CombatState.RUNNING token = combat.tokens[combat.order.current_token_name] player_name = await combat_bot_ctl.format_token_message(token) message = Message(f'当前正在战斗中。\n' # TODO: 这里应该有个卡片消息实时显示战斗轮。 f'第 {combat.order.round_count} 回合,{player_name} 正在行动中。\n' f'- 使用指令「{event.raw_message.strip()[0]}combat end」结束战斗。') await combat_cmd.finish(message)
async def combat_start(bot: Bot, event: MessageEvent, state: dict): room: Room = state['room'] try: combat = await combat_ctl.start_new_combat(room) except error.combat.CombatRunningError: await combat_cmd.finish('❌ 当前战斗还在进行中。') return await combat_cmd.send( MessageSegment.share( f'https://www.epicteller.com/combat/{combat.url_token}')) await combat_cmd.finish( f'进入先攻阶段,战斗轮指示器已激活。\n' f'投掷先攻骰来决定先攻顺序。\n' f'- 在战斗的任意时刻,使用指令「{event.raw_message.strip()[0]}combat」检查战斗状态。\n' f'- 使用指令「{event.raw_message.strip()[0]}combat run」进入行动阶段。')