Archived
1
0
Fork 0

Update dice

This commit is contained in:
多羅狼 2024-03-23 22:51:24 +08:00 committed by GitHub
parent 7a58dff3ec
commit 0bbd6ad9ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 38 additions and 19 deletions

View file

@ -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')

View file

@ -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)

View file

@ -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}.",

View file

@ -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": "优劣势骰数大于总骰子数。",

View file

@ -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}。",