diff --git a/locales/zh_cn.json b/locales/zh_cn.json index 32a258e6..1f4b71c5 100644 --- a/locales/zh_cn.json +++ b/locales/zh_cn.json @@ -22,13 +22,6 @@ "error.prompt.report": "执行命令时发生错误,请报告机器人开发者:\n${err_msg}\n错误汇报地址:", "error.request.api.timeout": "请求 API 超时。", "example": "你好世界!", - "game.message.running": "当前有一局游戏正在进行中。", - "game.message.running.others": "当前有其他游戏正在进行中。", - "game.stop.help": "停止当前的游戏。", - "game.stop.message": "已停止。", - "game.stop.message.none": "当前没有游戏在进行中。", - "game.message.correct": "回答正确。", - "game.message.incorrect": "回答错误。", "i18n.prompt.fallback.failed": "(如果你看到了这条奇怪的字符串,说明我们又搞错了什么东西!\n请将问题反馈至\n${url}\n以便我们快速解决此问题。)", "language": "简体中文", "message.reply.prompt": "(请使用指定的词语回复本条消息)", diff --git a/modules/chemical_code/__init__.py b/modules/chemical_code/__init__.py index 21fbd147..d6b3333c 100644 --- a/modules/chemical_code/__init__.py +++ b/modules/chemical_code/__init__.py @@ -109,10 +109,10 @@ async def _(msg: Bot.MessageSession): @ccode.command('stop {{chemical_code.stop.help}}') async def s(msg: Bot.MessageSession): - state = play_state.get(msg.target.targetId, False) # 尝试获取 play_state 中是否有此对象的游戏状态 + state = play_state.get(msg.target.targetId, {}).get('ccode', False) # 尝试获取 play_state 中是否有此对象的游戏状态 if state: # 若有 if state['active']: # 检查是否为活跃状态 - play_state[msg.target.targetId]['active'] = False # 标记为非活跃状态 + play_state[msg.target.targetId]['ccode']['active'] = False # 标记为非活跃状态 await msg.sendMessage( msg.locale.t('chemical_code.stop.message', answer=play_state[msg.target.targetId]["answer"]), quote=False) # 发送存储于 play_state 中的答案 @@ -134,14 +134,14 @@ async def chemical_code_by_id(msg: Bot.MessageSession): async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): # 要求传入消息会话和 ChemSpider ID,ID 留空将会使用缺省值 None if msg.target.targetId in play_state and play_state[msg.target.targetId][ - 'active']: # 检查对象(群组或私聊)是否在 play_state 中有记录及是否为活跃状态 + 'ccode']['active']: # 检查对象(群组或私聊)是否在 play_state 中有记录及是否为活跃状态 await msg.finish(msg.locale.t('chemical_code.message.running')) - play_state.update({msg.target.targetId: {'active': True}}) # 若无,则创建一个新的记录并标记为活跃状态 + play_state.update({msg.target.targetId: {'ccode':{'active': True}}}) # 若无,则创建一个新的记录并标记为活跃状态 try: csr = await search_csr(id) # 尝试获取 ChemSpider ID 对应的化学式列表 except Exception as e: # 意外情况 traceback.print_exc() # 打印错误信息 - play_state[msg.target.targetId]['active'] = False # 将对象标记为非活跃状态 + play_state[msg.target.targetId]['ccode']['active'] = False # 将对象标记为非活跃状态 return await msg.finish(msg.locale.t('chemical_code.message.error')) # print(csr) play_state[msg.target.targetId]['answer'] = csr['name'] # 将正确答案标记于 play_state 中存储的对象中 @@ -170,7 +170,7 @@ async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): async def ans(msg: Bot.MessageSession, answer): # 定义回答函数的功能 wait = await msg.waitAnyone() # 等待对象内的任意人回答 - if play_state[msg.target.targetId]['active']: # 检查对象是否为活跃状态 + if play_state[msg.target.targetId]['ccode']['active']: # 检查对象是否为活跃状态 if (wait_text := wait.asDisplay(text_only=True)) != answer: # 如果回答不正确 if re.match(r'^[A-Za-z0-9]+$', wait_text): try: @@ -219,14 +219,14 @@ async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): return await ans(wait, answer) # 进行下一轮检查 else: await wait.sendMessage(wait.locale.t('chemical_code.message.correct')) - play_state[msg.target.targetId]['active'] = False # 将对象标记为非活跃状态 + play_state[msg.target.targetId]['ccode']['active'] = False # 将对象标记为非活跃状态 async def timer(start): # 计时器函数 - if play_state[msg.target.targetId]['active']: # 检查对象是否为活跃状态 + if play_state[msg.target.targetId]['ccode']['active']: # 检查对象是否为活跃状态 if datetime.now().timestamp() - start > 60 * set_timeout: # 如果超过2分钟 await msg.sendMessage( msg.locale.t('chemical_code.message.timeup', answer=play_state[msg.target.targetId]["answer"])) - play_state[msg.target.targetId]['active'] = False + play_state[msg.target.targetId]['ccode']['active'] = False else: # 如果未超时 await asyncio.sleep(1) # 等待1秒 await timer(start) # 重新调用计时器函数 @@ -240,10 +240,10 @@ async def chemical_code(msg: Bot.MessageSession, id=None, captcha_mode=False): else: result = await msg.waitNextMessage( [Image(newpath), Plain(msg.locale.t('chemical_code.message.captcha', times=set_timeout))]) - if play_state[msg.target.targetId]['active']: # 检查对象是否为活跃状态 + if play_state[msg.target.targetId]['ccode']['active']: # 检查对象是否为活跃状态 if result.asDisplay(text_only=True) == csr['name']: await result.sendMessage(msg.locale.t('chemical_code.message.correct')) else: await result.sendMessage( msg.locale.t('chemical_code.message.incorrect', answer=play_state[msg.target.targetId]["answer"])) - play_state[msg.target.targetId]['active'] = False + play_state[msg.target.targetId]['ccode']['active'] = False diff --git a/modules/random/__init__.py b/modules/random/__init__.py index c9de87eb..34fc190f 100644 --- a/modules/random/__init__.py +++ b/modules/random/__init__.py @@ -5,7 +5,7 @@ import uuid from core.builtins import Bot from core.component import module -r = module('random', alias={'rand': 'random', 'rng': 'random'}, +r = module('random', alias=['rand', 'rng'], developers=['Dianliang233', 'DoroWolf'], desc='{random.help.desc}', ) diff --git a/modules/twenty_four/__init__.py b/modules/twenty_four/__init__.py deleted file mode 100644 index 413bce9b..00000000 --- a/modules/twenty_four/__init__.py +++ /dev/null @@ -1,85 +0,0 @@ -import random -import itertools - -from core.builtins import Bot -from core.component import module -from simpleeval import seval - -def calc(expression): - try: - return seval(expression) - except: - return None - -def is_valid(expression): - operators = ['+', '-', '*', '/'] - numbers = [str(i) for i in range(1, 10)] - return all(char in numbers + operators + ['(', ')'] for char in expression) - -def has_solution(numbers): - permutations = list(itertools.permutations(numbers)) - operators = ['+', '-', '*', '/'] - expressions = list(itertools.product(operators, repeat=3)) - - for perm in permutations: - for expr in expressions: - exp = '((( {} {} {} ) {} {} ) {} {} )'.format(perm[0], expr[0], perm[1], expr[1], perm[2], expr[2], perm[3]) - if calc(exp) == 24: - return True - exp = '(( {} {} {} ) {} ( {} {} {} ))'.format(perm[0], expr[0], perm[1], expr[1], perm[2], expr[2], perm[3]) - if calc(exp) == 24: - return True - exp = '( {} {} ( {} {} ( {} {} {} )))'.format(perm[0], expr[0], perm[1], expr[1], perm[2], expr[2], perm[3]) - if calc(exp) == 24: - return True - return False - -tf = module('twenty_four', alias=['twentyfour', '24'], - desc='{twenty_four.help.desc}', developers=['DoroWolf']) -play_state = {} - - -@tf.command('{{twenty_four.help}}') -async def _(msg: Bot.MessageSession): - if msg.target.targetId in play_state and play_state[msg.target.targetId][ - 'active']: - if play_state[msg.target.targetId]['game'] == '24': - await msg.finish(msg.locale.t('twenty_four.message.running')) - else: - await msg.finish(msg.locale.t('twenty_four.message.running.others')) - play_state.update({msg.target.targetId: {'game': '24', 'active': True}}) - - numbers = [random.randint(1, 13) for _ in range(4)] - has_solution_flag = has_solution(numbers) - - answer = await msg.waitNextMessage(msg.locale.t('twenty_four.message', numbers=numbers)) - expression = answer.asDisplay(text_only=True) - if play_state[msg.target.targetId]['game'] == '24' and play_state[msg.target.targetId]['active']: - if expression.lower() in ['无解', 'none']: - if has_solution_flag: - await answer.sendMessage(msg.locale.t('twenty_four.message.incorrect.have_solution')) - else: - await answer.sendMessage(msg.locale.t('twenty_four.message.correct')) - elif is_valid(expression): - result = calc(expression) - if result == 24: - await answer.sendMessage(msg.locale.t('twenty_four.message.correct')) - else: - await answer.sendMessage(msg.locale.t('twenty_four.message.incorrect')) - else: - await answer.sendMessage(msg.locale.t('twenty_four.message.incorrect.error')) - play_state[msg.target.targetId]['active'] = False - - - -@tf.command('stop {{twenty_four.stop.help}}') -async def s(msg: Bot.MessageSession): - state = play_state.get(msg.target.targetId, False) - if state: - if state['active']: - play_state[msg.target.targetId]['active'] = False - await msg.sendMessage(msg.locale.t('twenty_four.stop.message')) - else: - await msg.sendMessage(msg.locale.t('twenty_four.stop.message.other')) - else: - await msg.sendMessage(msg.locale.t('twenty_four.stop.message.none')) \ No newline at end of file diff --git a/modules/twenty_four/locales/zh_cn.json b/modules/twenty_four/locales/zh_cn.json deleted file mode 100644 index e02aef27..00000000 --- a/modules/twenty_four/locales/zh_cn.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file