Update dice
This commit is contained in:
parent
7a58dff3ec
commit
0bbd6ad9ff
5 changed files with 38 additions and 19 deletions
|
@ -26,6 +26,18 @@ async def _(msg: Bot.MessageSession):
|
|||
await msg.finish(await process_expression(msg, f'{groups[0]}D{dice_type}', int(roll_time), None))
|
||||
|
||||
|
||||
@dice.command('set <face> {{dice.help.set}}', required_admin=True)
|
||||
async def _(msg: Bot.MessageSession, face: int):
|
||||
if face > 0:
|
||||
msg.data.edit_option('dice_default_face', face)
|
||||
await msg.finish(msg.locale.t("success"))
|
||||
elif face == 0:
|
||||
msg.data.edit_option('dice_default_face', None)
|
||||
await msg.finish(msg.locale.t("none"))
|
||||
else:
|
||||
await msg.finish(msg.locale.t("dice.message.error.value.n.invalid"))
|
||||
|
||||
|
||||
@dice.command('rule {{dice.help.rule}}', required_admin=True)
|
||||
async def _(msg: Bot.MessageSession):
|
||||
dc_rule = msg.data.options.get('dice_dc_reversed')
|
||||
|
|
|
@ -85,9 +85,10 @@ class Dice(DiceItemBase):
|
|||
|
||||
def GetArgs(self, msg):
|
||||
dice_code = self.code.upper() # 便于识别
|
||||
dice_code = dice_code.replace("D%", "D100") # 百分骰别名
|
||||
dice_count = '1' # 骰子数量
|
||||
advantage = '0' # 保留的骰子量
|
||||
if re.search(r'[^0-9DKQ]', dice_code):
|
||||
if re.search(r'[^0-9DKQ\%]', dice_code):
|
||||
raise DiceSyntaxError(msg, msg.locale.t("dice.message.error.invalid"))
|
||||
temp = dice_code.split('D')
|
||||
if len(temp[0]):
|
||||
|
@ -200,7 +201,7 @@ class FateDice(DiceItemBase):
|
|||
def Roll(self, msg, use_markdown=False):
|
||||
output = ''
|
||||
result = 0
|
||||
output += self.code + ' = '
|
||||
output += self.code + '='
|
||||
|
||||
dice_results = ['-', '-', '0', '0', '+', '+']
|
||||
selected_results = [secrets.choice(dice_results) for _ in range(self.count)]
|
||||
|
@ -212,7 +213,7 @@ class FateDice(DiceItemBase):
|
|||
elif res == '+':
|
||||
result += 1
|
||||
|
||||
self.detail = output + f" = {result}"
|
||||
self.detail = output + f"={result}"
|
||||
self.result = result
|
||||
|
||||
def GetArgs(self, msg):
|
||||
|
@ -233,21 +234,22 @@ async def process_expression(msg, expr: str, times: int, dc):
|
|||
def parse_dice_expression(msg, dices):
|
||||
dice_item_list = []
|
||||
patterns = [
|
||||
r'((?:\d+)?D\d+(?:(?:K|Q)?(?:\d+)?)?)', # 普通骰子
|
||||
r'((?:\d+)?D(?:\d+|\%)?(?:(?:K|Q)?(?:\d+)?)?)', # 普通骰子
|
||||
r'((?:\d+)?D?F)', # 命运骰子
|
||||
r'(\d+)', # 数字
|
||||
r'(\(|\))', # 括号
|
||||
]
|
||||
errmsg = None
|
||||
if re.search(r'[^0-9+\-\*/()DFKQ]', dices.upper()):
|
||||
if re.search(r'[^0-9+\-\*/\%()DFKQ]', dices.upper()):
|
||||
return None, None, DiceSyntaxError(msg, msg.locale.t('dice.message.error.invalid')).message
|
||||
if dices.count('(') != dices.count(')'):
|
||||
return None, None, DiceSyntaxError(msg, msg.locale.t('dice.message.error.parentheses')).message
|
||||
|
||||
# 切分骰子表达式
|
||||
dice_expr_list = re.split('|'.join(patterns), dices, flags=re.I)
|
||||
dice_expr_list = [item for item in dice_expr_list if item] # 清除空白字符串
|
||||
Logger.debug(dice_expr_list)
|
||||
dice_expr_list = [item for item in dice_expr_list if item] # 清除空白元素
|
||||
for item in range(len(dice_expr_list)):
|
||||
if dice_expr_list[item][-1].upper() == 'D' and msg.data.options.get('dice_default_face'):
|
||||
dice_expr_list[item] += str(msg.data.options.get('dice_default_face'))
|
||||
Logger.info(dice_expr_list)
|
||||
|
||||
for item in dice_expr_list:
|
||||
for pattern in patterns:
|
||||
|
@ -332,6 +334,8 @@ def generate_dice_message(msg, expr, dice_expr_list, dice_count, times, dc, use_
|
|||
Logger.debug(dice_res_list)
|
||||
try:
|
||||
result = int(simple_eval(''.join(dice_res_list)))
|
||||
except SyntaxError:
|
||||
return DiceSyntaxError(msg, msg.locale.t('dice.message.error.syntax')).message
|
||||
except Exception as e:
|
||||
return DiceValueError(msg, msg.locale.t('dice.message.error') + '\n' + str(e)).message
|
||||
output_line += '=' + str(result)
|
||||
|
|
|
@ -3,23 +3,24 @@
|
|||
"dice.help.desc": "Random dice. You can specify the number of dice rolls and DC check.",
|
||||
"dice.help.regex.desc": "(扔|投|掷|丢)<m>个[<n>面]骰子 Roll the specified dice.",
|
||||
"dice.help.rule": "Modify the check rule of DC.",
|
||||
"dice.help.set": "Set the default sides number of dice.",
|
||||
"dice.message.dc.check": "▷ Success: ${success} Failure: ${failed}",
|
||||
"dice.message.dc.failed": " Failed!",
|
||||
"dice.message.dc.invalid": "Invalid DC: ",
|
||||
"dice.message.dc.success": " Success!",
|
||||
"dice.message.error": "Unable to parse the dice expression: ",
|
||||
"dice.message.error.invalid": "Unrecognized characters in dice expression.",
|
||||
"dice.message.error.parentheses": "Parentheses in dice expression not closed.",
|
||||
"dice.message.error.prompt": "Item ${i} occurs: ",
|
||||
"dice.message.error.syntax": "Invalid dice expression.",
|
||||
"dice.message.error.value": "Input \"${value}\". ",
|
||||
"dice.message.error.value.k.invalid": "Invalid advantages and disadvantages.",
|
||||
"dice.message.error.value.k.out_of_range": "The number of advantage and disadvantage dice is greater than the total number of dice.",
|
||||
"dice.message.error.value.m.invalid": "Invalid number of dice.",
|
||||
"dice.message.error.value.n.d1": "D1?",
|
||||
"dice.message.error.value.n.invalid": "Invalid number of sides of the die.",
|
||||
"dice.message.error.value.n.less_2": "The number of sides of the die cannot be less than 2.",
|
||||
"dice.message.error.value.n.invalid": "Invalid sides number of dice.",
|
||||
"dice.message.error.value.n.less_2": "The sides number of dice cannot be less than 2.",
|
||||
"dice.message.error.value.N.out_of_range": "The number of dice roll cannot be less than 1 or greater than ${max}.",
|
||||
"dice.message.error.value.n.out_of_range": "The number of dice cannot be less than 1 or greater than ${max}.",
|
||||
"dice.message.error.value.N.out_of_range": "The number of die rolls cannot be less than 1 or greater than ${max}.",
|
||||
"dice.message.error.value.too_long": "The number of items in the dice expression exceeds the limit.",
|
||||
"dice.message.error.value.y.invalid": "Invalid adjustment value.",
|
||||
"dice.message.error.value.y.out_of_range": "The adjustment value cannot be less than ${min} or greater than ${max}.",
|
||||
|
|
|
@ -3,14 +3,15 @@
|
|||
"dice.help.desc": "随机骰子,可指定投骰次数与 DC 判断判定。",
|
||||
"dice.help.regex.desc": "(扔|投|掷|丢)<m>个[<n>面]骰子[<N>次] 投掷指定骰子。",
|
||||
"dice.help.rule": "修改 DC 的判定规则。",
|
||||
"dice.help.set": "设置默认骰子面数。",
|
||||
"dice.message.dc.check": "▷ 判定成功数量:${success} 判定失败数量:${failed}",
|
||||
"dice.message.dc.failed": " 判定失败!",
|
||||
"dice.message.dc.invalid": "无效的 DC:",
|
||||
"dice.message.dc.success": " 判定成功!",
|
||||
"dice.message.error": "无法解析骰子表达式:",
|
||||
"dice.message.error.prompt": "第 ${i} 项发生:",
|
||||
"dice.message.error.invalid": "骰子表达式中存在无法识别的字符。",
|
||||
"dice.message.error.parentheses": "骰子表达式中的括号未闭合。",
|
||||
"dice.message.error.prompt": "第 ${i} 项发生:",
|
||||
"dice.message.error.syntax": "无效的骰子表达式。",
|
||||
"dice.message.error.value": "输入为“${value}”,",
|
||||
"dice.message.error.value.k.invalid": "无效的优劣势。",
|
||||
"dice.message.error.value.k.out_of_range": "优劣势骰数大于总骰子数。",
|
||||
|
|
|
@ -3,23 +3,24 @@
|
|||
"dice.help.desc": "隨機骰子,可指定投骰次數與 DC 判斷判定。",
|
||||
"dice.help.regex.desc": "(扔|投|擲|丟)<m>個[<n>面]骰子[<N>次] 投擲指定骰子。",
|
||||
"dice.help.rule": "修改 DC 的判定規則。",
|
||||
"dice.help.set": "设置默认骰子面数。",
|
||||
"dice.message.dc.check": "▷ 判定成功數量:${success} 判定失敗數量:${failed}",
|
||||
"dice.message.dc.failed": " 判定失敗!",
|
||||
"dice.message.dc.invalid": "無效的 DC:",
|
||||
"dice.message.dc.success": " 判定成功!",
|
||||
"dice.message.error": "無法解析骰子運算式:",
|
||||
"dice.message.error.prompt": "第 ${i} 項發生:",
|
||||
"dice.message.error.invalid": "骰子語句中存在無法辨識的字元。",
|
||||
"dice.message.error.prompt": "第 ${i} 項發生:",
|
||||
"dice.message.error.syntax": "無效的骰子運算式。",
|
||||
"dice.message.error.value": "輸入為「${value}」,",
|
||||
"dice.message.error.value.k.invalid": "無效的優劣勢。",
|
||||
"dice.message.error.parentheses": "骰子運算式中的括號未關閉。",
|
||||
"dice.message.error.value.k.out_of_range": "優劣势骰數大於總骰子數。",
|
||||
"dice.message.error.value.m.invalid": "無效的骰子數量。",
|
||||
"dice.message.error.value.n.d1": "1 面的骰子?",
|
||||
"dice.message.error.value.n.invalid": "無效的骰子面數。",
|
||||
"dice.message.error.value.n.less_2": "骰子面數不得小於 2。",
|
||||
"dice.message.error.value.N.out_of_range": "投骰次數不得小於 1 或大於 ${max}。",
|
||||
"dice.message.error.value.n.out_of_range": "骰子數量不得小於 1 或大於 ${max}。",
|
||||
"dice.message.error.value.N.out_of_range": "投骰次數不得小於 1 或大於 ${max}。",
|
||||
"dice.message.error.value.too_long": "骰子運算式項數超過限制。",
|
||||
"dice.message.error.value.y.invalid": "無效的調整值項。",
|
||||
"dice.message.error.value.y.out_of_range": "調整值不得小於 ${min} 或大於 ${max}。",
|
||||
|
|
Reference in a new issue