Yuri-YuzuChaN / maimaiDX

基于HoshinoBot V2的舞萌DX查询插件,移植自mai-bot开源项目
MIT License
200 stars 32 forks source link

订阅多个机厅,并且多个机厅总况进行查询 #89

Closed luoyeye001 closed 1 year ago

luoyeye001 commented 1 year ago

在使用的时候,群友对于单个机厅的排卡功能已经满足不了需求,往往在一个群里对于多个机厅会进行排卡,而查询的时候只能单个单个的对于机厅情况进行查询,希望能够有个整体的信息返回

luoyeye001 commented 1 year ago

抱歉使用github比较不熟练,不太会使用PR功能,这是我自己做的一些修改,不知道能不能对友友有帮助。 在maimai.py中 新增 ‘’‘ @sv.on_prefix('jtj') async def arcade_query_multiple(bot: NoneBot, ev: CQEvent): gid = ev.group_id json_file_path = os.path.join(os.getcwd(), 'hoshino', 'modules', 'maimai', 'static', 'arcades.json')

从json文件中读取机厅信息,具体位置根据实际情况修改

with open(json_file_path, 'r', encoding='utf-8') as f:
    arcades_data = json.load(f)
group_arcades = {}
for arcade in arcades_data:
    for group_id in arcade['group']:
        if group_id not in group_arcades:
            group_arcades[group_id] = []
        group_arcades[group_id].append(arcade)

# 根据群号获取对应的机厅列表
if gid in group_arcades:
    arcades = group_arcades[gid]
else:
    await bot.send(ev, '该群未配置任何机厅', at_sender=True)
    return

result = []
for arcade in arcades:
    msg = f'{arcade["name"]}有{arcade["person"]}人\n'
    if arcade['num'] > 1:
        msg += f'机均{arcade["person"] / arcade["num"]:.2f}人\n'
    if arcade['by']:
        msg += f'由{arcade["by"]}更新于{arcade["time"]}'
    result.append(msg)

if result:
    await bot.send(ev, '\n'.join(result), at_sender=False)
else:
    await bot.send(ev, '该群未配置任何机厅', at_sender=True)

’‘’

使用时需要去除订阅机厅中对于数量的限制 ‘’‘ @sv_arcade.on_prefix('订阅机厅') async def subscribe_arcade(bot: NoneBot, ev: CQEvent): gid = ev.group_id args = ev.message.extract_plain_text().strip().lower() if not priv.check_priv(ev, priv.ADMIN): await bot.finish(ev, '仅允许管理员订阅') if not args: msg = '格式错误:订阅机厅 <名称>' else: msg = modify('modify', 'subscribe', {'name': args, 'gid': gid})

await bot.send(ev, msg, at_sender=True)

’‘’

luoyeye001 commented 1 year ago

已推PR