nonebot2插件之主持双音节猜成语

 本插件针对的是使用nonebot2+go-CQHttp为框架的QQ机器人。具体搭建方法可以参考 川川菜鸟 的《qq机器人小白教程系列》

双音节猜成语是来自《中国成语大会》中的一种猜词游戏。主要规则如下:

4个人分为两组,每组一个描述,1个猜词;每次主持人给两个描述私聊发送1个成语,在规定时间内(一般设置为2min)先手组的描述方以一个双音节单位的词语描述这个成语,这两个字不得出现成语中的字,不得两个字都谐音,且必须是真实存在的词语,先手组的猜词方在描述过后在规定时间内(一般设置为2min)猜词,猜对则下一局,没有猜对则后手组描述方描述,后手组猜词方猜词,若未猜对则继续交换到先手方,直到猜对或作废为止。

附加规则:

以下情况词语作废,启用备用词语:1)6个描述后猜词方猜错或超时未作答;2)第6个描述犯规

以下情况交换下一题先后手:1)后手方猜对;2)词语作废

以下情况结束游戏:1)一方猜对3个词语;2)三个备用词语用完;3)游戏超过1小时

因为不同成语难度不同,请下载以下难度分级作为题库。

双音节https://download.csdn.net/download/weixin_63522624/85366980https://download.csdn.net/download/weixin_63522624/85366980https://download.csdn.net/download/weixin_63522624/85366980

本插件使用前需要创建一个计时文件.xlsx,下面的代码中默认D:\QQbot文件\计时文件-双音节.xlsx,各位可以根据自己的实际情况在合适的文件路径下创建计时文件并更改代码中的路径。请将空表格的sheet的名字改成任意数字,单元格(1,2)、(1,4)、(1,5)键入任意数字;0;0,防止程序出错。另外定期重置表格。

请将以下双音节规则存在cqhttp4的data\image文件里。

10个指令(均是指令开头,不需要@bot): “双音节规则”:查看上面的图;“发 双音节x”x为1-5(数字越大越难)在数字之后还可以加#或*,加#表示可以在机器人加入的某些特定的群公告摇人;加*表示开启比赛双音节,比赛双音节有一个固定的主持人(可以设置账号),主持人可以暂停、终止双音节;“发 描述1”(或描述2)、”发 猜词1“(或猜词2)加入双音节,默认描述1和猜词1一组,且先手;”【xx】“,是描述方的描述,可以填“过”直接跳过描述;“&xxxx”是猜词方的猜词;“发 双音节.close()”是参与者开始前或主持人在开始后关闭双音节的指令;“发 暂停”和“发 继续”是主持人在双音节过程中暂停比赛的指令。私聊bot“我猜xxxx”是场外观众猜词的指令。

以下是代码,900多行,本人没有系统学习过代码规范,所以略粪,如果有大佬可以优化本人将再三感谢。

from nonebot.adapters.cqhttp import Message
from nonebot import on_keyword, on_notice, on_message,on_startswith
from nonebot.typing import T_State
from nonebot.adapters import Bot, Event
from nonebot import require
from aiocqhttp.exceptions import Error as CQHttpError
from nonebot.adapters.cqhttp import message, GroupMessageEvent, Message, MessageEvent
import random,openpyxl,time,nonebot
from nonebot_plugin_apscheduler import scheduler
#本插件功能:双音节开局、加入、开始、判定、计时、结算
caijijiedict = {}

syjrule = on_keyword('双音节规则',priority=98)

@syjrule.handle()
async def fhgz(bot: Bot, event: GroupMessageEvent, state: T_State):
    guize = '双音节.jpg'
    tu = [
    {
        "type":"image",
        "data":{
            'file':f'{guize}'
            }
    }
    ]
    await syjrule.send(tu)

yulu = on_startswith({'发 双音节'},priority=3)

@yulu.handle()
async def j(bot: Bot, event: GroupMessageEvent, state: T_State):
    global caijijiedict
    grname = event.group_id
    list1 = ['group',grname]
    msge =str(event.message).replace('发 双音节','').strip()
    if not msge:
        msge = '1'
    if msge[-1] in ['#','#']:
        fq,bs = True,False
        msge = msge.replace('#','').replace('#','')
        if not msge:
            msge = '1'
    elif msge[-1] == '*' and event.user_id == 405006454:
        msge = msge.replace('*','')
        bs,fq = True,False
    else:
        fq,bs = False,False
    try:
        status1 = caijijiedict[grname]
    except KeyError:
        caijijiedict[grname] = 0
    if caijijiedict[grname] == 1 and msge not in ['.close()','.close()']:
        try:
            await yulu.send(Message('当前正在进行,请勿重开'))
        except CQHttpError:
            pass
    else:
        if grname in [915324969,799524693,571060634,775459556,626695551] or event.user_id in [2538372982,1540689041]:#屏蔽的群或个人,没有的话可以删掉
            await yulu.send('本群双音节功能关闭,如有开启需求请联系鉝貓')
        else:
            if msge in ['1','2','3','4','5']:
                fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
                dict1 = {'1':['1','1','1','1','2'],'2':['1','1','1','2','2'],'3':['1','1','2','2','3'],'4':['1','2','2','3','4'],'5':['2','2','3','4','4']}
                if caijijiedict[grname] == 0:
                    fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
                    time1 = time.time()
                    sheet3 = fa.create_sheet(str(grname)+str(time1))
                    list2 = list1 + [time1,'双音节',-1,'',0]
                    caijijiedict[grname] = 1
                f1 = openpyxl.load_workbook('D:/QQbot文件/成语.xlsx')
                for i in range(5):
                    list1 = dict1[msge]
                    sheet1 = f1['Sheet'+list1[i]]
                    an = sheet1.max_row
                    bn = random.randint(1,an)
                    ci = sheet1.cell(bn,1).value
                    list2.append(ci)
                for i in range(3):
                    sheet1 = f1['Sheet1']
                    an = sheet1.max_row
                    bn = random.randint(1,an)
                    ci = sheet1.cell(bn,1).value
                    while not ci or ci in list2:
                        bn = random.randint(1,an)
                    list2.append(ci)
                sheet3.append(list2)
                if bs:
                    await yulu.send('本局双音节为比赛双音节,请选手和观众遵守比赛守则,请勿在群内喧哗及谈论题目。')
                    sheet3.cell(1,4).value="双音节*"
                fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                await yulu.send('已开启双音节!请要参加的4人在10分钟内发送“发 描述(或猜词)1(或2)加入双音节!”')
                '''if fq:
                    msga = '群聊'+str(grname) + '已经发起了双音节,大家快来参与喵~'
                    grouplist = [339362498,542929609,571060634,799524693,915324969]  #宣群摇人,如不需要可删
                    for li in grouplist:
                        await bot.call_api('send_group_msg',**{
                            'group_id':str(li),
                            'message':msga
                            })'''
            elif msge in ['.close()','.close()']:
                try:
                    if caijijiedict[grname] == 1:
                        fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
                        sheetlist = fa.sheetnames
                        for i in sheetlist:
                            sheet = fa[i]
                            if sheet.cell(1,2).value == grname and sheet.cell(1,5).value == -1:
                                success = False
                                for ix in range(2,6):
                                    if not sheet.cell(ix,6).value:
                                        continue
                                    elif sheet.cell(ix,6).value == event.user_id:
                                        caijijiedict[grname] = 0
                                        await yulu.send('已经关闭本局双音节。')
                                        success = True
                                        sheet.cell(1,5).value = 0
                                        fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                        break
                                if not success :
                                    await yulu.send('你不是双音节的参与者或者双音节已经开始,不能关闭这局双音节!')
                                break
                            if sheet.cell(1,5).value > 0 and sheet.cell(1,4).value == '双音节*' and event.user_id == 405006454:
                                sheet.cell(1,5).value = 0
                                fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                caijijiedict[grname] = 0
                                await yulu.send('主持人手动关闭本局双音节,请以主持人结算为准。')
                                break
                    else:
                        msl = random.choice(['喵喵喵?本群就没有在等待状态的双音节,lvory上哪关去?','你囍,您瞧瞧现在哪有双音节啊,这都是已经玩过的双音节。','此地无双音节三百两,您目害了。'])
                        await yulu.send(msl)
                except KeyError:
                    msl = random.choice(['你囍,您瞧瞧现在哪有双音节啊,这都没开过双音节。','啊这,没有双音节怎么关,在线等喵!','你得先有鸡蛋才能打鸡蛋啊!'])
                    await yulu.send(msl)
            else:
                await yulu.send('请输入正确难度1-5!(不输入默认1)')

miaoshu = on_startswith({'发 描述'},priority=75)

@miaoshu.handle()
async def miao(bot: Bot, event: GroupMessageEvent, state: T_State):
    success = False
    grname = event.group_id
    usid = event.user_id
    list1 = ['group',grname]
    msf = str(event.message).replace('发 描述','').strip()
    if not msf or event.user_id in [2538372982,1540689041,80000000]:
        await yulu.send('我看你是完全不懂双音节指令哦。')
    else:
        if msf[-1] in ['#','#']:
            fq = True
            msf = msf.replace('#','').replace('#','')
        else:
            fq = False
        if msf == '1' or msf == '2':
            fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
            listsheet =fa.sheetnames
            for i in range(len(listsheet)):
                fui = -1 - i
                sheet = fa[listsheet[fui]]
                if str(grname) in listsheet[fui]:
                    if sheet.cell(1,5).value == -1:
                        success,success2 = True,True
                        if msf == '1':
                            if sheet.cell(2,1).value:
                                success2 = False
                                await miaoshu.send('这个位置已经有人啦,换一个吧。')
                                break
                            elif sheet.cell(2,6).value == usid or sheet.cell(4,6).value == usid or sheet.cell(5,6).value == usid:
                                await caici.send('你已经有位置啦!不能再换座位啦!')
                                success2 = False
                                break
                            list1 = ['','group',grname,0,'描述1',1,usid,0,-1,-1,-1,-1,-1,-1,-1,-1]
                            for cols in range(1,16):
                                sheet.cell(2,cols).value = list1[cols]
                        else:
                            if sheet.cell(4,1).value:
                                success2 = False
                                await miaoshu.send('这个位置已经有人啦,换一个吧。')
                                break
                            elif sheet.cell(2,6).value == usid or sheet.cell(4,6).value == usid or sheet.cell(5,6).value == usid:
                                success2 = False
                                await caici.send('你已经有位置啦!不能再换座位啦!')
                                break
                            list1 = ['','group',grname,0,'描述2',3,usid,0]
                            for cols in range(1,8):
                                sheet.cell(4,cols).value = list1[cols]
                        break
            fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
            if success and success2:
                await miaoshu.send('加入双音节成功,赶快和你的搭档联系吧!')
                if fq:
                    msga = str(usid)+'已经加入了群聊'+str(grname) + '的双音节,身份是描述'+msf
                    grouplist = [339362498,542929609,571060634,799524693,915324969]
                    for li in grouplist:
                        await bot.call_api('send_group_msg',**{
                            'group_id':str(li),
                            'message':msga
                            })
            elif not success:
                await miaoshu.send('加入双音节失败,本群没有正在等待开始的双音节。')
        else:
            await miaoshu.send('只能是描述1或描述2哦。')

caici = on_startswith({'发 猜词'},priority=76)

@caici.handle()
async def cai(bot: Bot, event: GroupMessageEvent, state: T_State):
    success = False
    grname = event.group_id
    usid = event.user_id
    list1 = ['group',grname]
    msf = str(event.message).replace('发 猜词','').strip()
    if not msf or event.user_id in [2538372982,1540689041]:
        await yulu.send('我看你是完全不懂双音节指令哦。')
    else:
        if msf[-1] in ['#','#']:
            fq = True
            msf = msf.replace('#','').replace('#','')
        else:
            fq = False
        if msf == '1' or msf == '2':
            fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
            listsheet =fa.sheetnames
            for i in range(len(listsheet)):
                fui = -1 - i
                sheet = fa[listsheet[fui]]
                if str(grname) in listsheet[fui]:
                    if sheet.cell(1,5).value == -1:
                        success,success2 = True,True
                        if msf == '1':
                            if sheet.cell(3,1).value:
                                success2 = False
                                await caici.send('这个位置已经有人啦,换一个吧。')
                                break
                            elif sheet.cell(2,6).value == usid or sheet.cell(4,6).value == usid or sheet.cell(5,6).value == usid:
                                success2 = False
                                await caici.send('你已经有位置啦!不能再换座位啦!')
                                break
                            list1 = ['','group',grname,0,'猜词1',2,usid,0]
                            for cols in range(1,8):
                                sheet.cell(3,cols).value = list1[cols]
                        else:
                            if sheet.cell(5,1).value:
                                success2 = False
                                await caici.send('这个位置已经有人啦,换一个吧。')
                                break
                            elif sheet.cell(2,6).value == usid or sheet.cell(4,6).value == usid or sheet.cell(3,6).value == usid:
                                success2 = False
                                await caici.send('你已经有位置啦!不能再换座位啦!')
                                break
                            list1 = ['','group',grname,0,'猜词2',4,usid,0]
                            for cols in range(1,8):
                                sheet.cell(5,cols).value = list1[cols]
                        break
            fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
            if success and success2:
                await caici.send('加入双音节成功,赶快和你的搭档联系吧!')
                if fq:
                    msga = str(usid)+'已经加入了群聊'+str(grname) + '的双音节,身份是猜词'+msf
                    grouplist = [339362498,542929609,571060634,799524693,915324969]
                    for li in grouplist:
                        await bot.call_api('send_group_msg',**{
                            'group_id':str(li),
                            'message':msga
                            })
            elif not success:
                await caici.send('加入双音节失败,本群没有正在等待开始的双音节。')
        else:
            await caici.send('只能是猜词1或猜词2哦。')

fmiaoshu = on_startswith({'【'},priority=77)

@fmiaoshu.handle()
async def fmiao(bot: Bot, event: GroupMessageEvent, state: T_State):
    usid = event.user_id
    grname = event.group_id
    ms = str(event.message).replace('【','').replace('】','').strip()
    fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
    listsheet =fa.sheetnames
    for i in range(len(listsheet)):
        fui = -1 - i
        sheet = fa[listsheet[fui]]
        if str(grname) in listsheet[fui]:
            success = True
            if sheet.cell(1,5).value >0:
                for i in range(2,6):
                    msg = ''
                    if sheet.cell(1,5).value != 1 and sheet.cell(1,5).value != 3:
                        success = False
                        msg = '现在还不是描述的时候!'
                    elif sheet.cell(sheet.max_row,3).value > time.time():
                        success = False
                        msg = '现在是暂停的时候,不能描述!'
                    elif sheet.cell(i,6).value == usid and sheet.cell(i,5).value == sheet.cell(1,5).value:#判断该编号的描述人描述状态
                        msg = '【' + ms + '】'
                        success2 = True
                        for ix in range(8,15):#犯规判定
                            if sheet.cell(2,15).value == 3:
                                for iy in range(4):
                                    if sheet.cell(1,15).value[iy] in ms:
                                        success2 = False
                                        list1 = ['group',grname,time.time(),msg+'×',sheet.cell(i,5).value,usid,3]
                                        msg = '犯规!'
                                        break
                                break
                            else:
                                if sheet.cell(2,ix).value == 3 and sheet.cell(2,ix+1).value == -1 or ix ==12 and sheet.cell(2,ix).value == 3:
                                    for iy in range(4):
                                        if sheet.cell(1,ix).value[iy] in ms:
                                            success2 = False
                                            list1 = ['group',grname,time.time(),msg+'×',sheet.cell(i,5).value,usid,3]
                                            msg = '犯规!'
                                            break
                                    break
                        if success2:#字数判定
                            if msg == '【过】':
                                success2 = False
                                list1 = ['group',grname,time.time(),'过',sheet.cell(i,5).value,usid,3]
                            elif len(msg) != 4:
                                msg = '字数错误!请在剩余时间内完成正确描述!'
                            else:
                                for iy in ms:
                                    if iy in ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',',','。','、','?','/','.','<','>','[','?','\\','=','+','(','*','!','…','1','2','3','4','5','6','7','8','9','0']:
                                        success2 = False
                                        list1 = ['group',grname,time.time(),msg+'×',sheet.cell(i,5).value,usid,3]
                                        msg = '犯规!'
                                        break
                                if success2:
                                    list1 = ['group',grname,time.time(),msg,sheet.cell(i,5).value,usid,3]
                        try:
                            sheet.append(list1)
                        except UnboundLocalError:
                            pass
                    if msg:
                        if success and success2 and msg != '字数错误!请在剩余时间内完成正确描述!':
                            msg = ''
                            for i2 in range(6,sheet.max_row+1):
                                success2 = False
                                if sheet.cell(i2,7).value == 3 and '【' in sheet.cell(i2,4).value:
                                    msg = msg + sheet.cell(i2,4).value
                            await fmiaoshu.send(msg)
                            sheet.cell(1,5).value = sheet.cell(1,5).value+1
                            for iz in range(2,6):
                                if sheet.cell(iz,5).value == sheet.cell(1,5).value:
                                    await fmiaoshu.send(Message(f'[CQ:at,qq={sheet.cell(iz,6).value}]请猜词'))
                                    break
                        elif success and not success2:
                            await fmiaoshu.send(msg)
                            sheet.cell(1,5).value = sheet.cell(1,5).value +2
                            if sheet.cell(1,5).value >4:
                                sheet.cell(1,5).value = sheet.cell(1,5).value - 4
                            an = 0
                            for ib in range(6,sheet.max_row+1):
                                if sheet.cell(ib,7).value == 3 and '【' in sheet.cell(ib,4).value:
                                    an = an + 1
                            if an == 6:
                                await fmiaoshu.send('最后一个描述机会犯规,本题作废,如果本题是最后一题,将结算。')
                                for iz in range(6,sheet.max_row+1):
                                    if sheet.cell(iz,7).value == 3:
                                        sheet.cell(iz,7).value = 0
                                for iz in range(8,16):
                                    if sheet.cell(2,iz).value == 3:
                                        sheet.cell(2,iz).value = 0
                                        if iz > 12 and iz<15:
                                            xiayiti = sheet.cell(1,iz+1).value
                                            sheet.cell(2,iz+1).value = 3
                                            break
                                        elif iz > 8:
                                            success = False
                                            for ic in range(13,16):
                                                if sheet.cell(2,ic).value == -1:
                                                    success = True
                                                    xiayiti = sheet.cell(1,ic).value
                                                    sheet.cell(2,ic).value = 3
                                                    break
                                            if not success:
                                                fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                                msg = await jiesuan(grname)
                                                sheet.cell(1,5).value = 0
                                                fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                                await fmiaoshu.send(msg)
                                            break
                                if success:
                                    list0 = [sheet.cell(3,4).value,4,sheet.cell(3,6).value]
                                    list2 = [sheet.cell(2,4).value,3,sheet.cell(2,6).value]
                                    for j in [2,3]:
                                        for k in [4,6]:
                                            sheet.cell(j,k).value = sheet.cell(j+2,k).value
                                    for j in range(len(list0)):
                                        sheet.cell(4,j+4).value = list2[j]
                                        sheet.cell(5,j+4).value = list0[j]
                                    sheet.cell(1,5).value =1
                                    await bot.call_api('send_private_msg',**{
                                        'message':xiayiti,
                                        'user_id':str(sheet.cell(2,6).value)
                                        })
                                    await bot.call_api('send_private_msg',**{
                                        'message':xiayiti,
                                        'user_id':str(sheet.cell(4,6).value)
                                        })
                                    if sheet.cell(1,4).value == '双音节*':
                                        await bot.call_api('send_private_msg',**{
                                            'message':xiayiti,
                                            'user_id':'405006454'
                                            })
                                    await fcaici.send('下一题,开始!')
                                    await fcaici.send(Message(f'[CQ:at,qq={sheet.cell(2,6).value}]先手,请描述'))
                            else:
                                for iz in range(2,6):
                                    if sheet.cell(iz,5).value == sheet.cell(1,5).value:
                                        await fmiaoshu.send('交换')
                                        await fmiaoshu.send(Message(f'[CQ:at,qq={sheet.cell(iz,6).value}]请描述'))
                                        break
                        else:
                            await fmiaoshu.send(msg)
                        break
                break
    fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                
fcaici = on_startswith({'&','&'},priority=78)

@fcaici.handle()
async def fcai(bot: Bot, event: GroupMessageEvent, state: T_State):
    ms = str(event.message).replace('&amp;','').replace('&','').strip()
    grname = event.group_id
    usid = event.user_id
    fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
    listsheet =fa.sheetnames
    if ms:
        for it in range(len(listsheet)):
            fui = -1 - it
            sheet = fa[listsheet[fui]]
            if str(grname) in listsheet[fui]:
                success = False
                if sheet.cell(1,5).value >0:
                    for i in range(2,6):
                        msg = ''
                        if sheet.cell(1,5).value != 2 and sheet.cell(1,5).value != 4:
                            success = True
                            msg = '现在还不是猜词的时候!'
                            await fcaici.send(msg)
                            break
                        elif sheet.cell(sheet.max_row,3).value > time.time():
                            success = False
                            msg = '现在是暂停的时候,不能描述!'
                            await fcaici.send(msg)
                            break
                        elif sheet.cell(i,6).value == usid and sheet.cell(i,5).value == sheet.cell(1,5).value:#判断该编号的描述人描述状态
                            caidui = False
                            success = True
                            if len(ms) == 4:
                                for ix in range(8,15):
                                    if sheet.cell(2,15).value == 3:
                                        if ms == sheet.cell(1,15).value:
                                            caidui = True
                                        else:#判定是不是顺序不一样但是是成语
                                            a = 0
                                            for iy in range(4):
                                                if ms[iy] in sheet.cell(1,15).value:
                                                    a = a+1
                                            if a == 4:
                                                fb = openpyxl.load_workbook('D:/QQbot文件/成语.xlsx')
                                                sheetb = fb['Sheet1']
                                                for iz in range(1,sheetb.max_row+1):
                                                    if ms== sheetb.cell(iz,1).value:
                                                        caidui = True
                                                        break
                                        break
                                    else:
                                        if sheet.cell(2,ix).value and sheet.cell(2,ix).value == 3 or ix == 12 and sheet.cell(2,ix).value == 3:
                                            if ms == sheet.cell(1,ix).value:
                                                caidui = True
                                                break
                                            else:#判定是不是顺序不一样但是是成语
                                                a = 0
                                                for iy in range(4):
                                                    if ms[iy] in sheet.cell(1,ix).value:
                                                        a = a+1
                                                if a == 4:
                                                    fb = openpyxl.load_workbook('D:/QQbot文件/成语.xlsx')
                                                    sheetb = fb['Sheet1']
                                                    sheetc = fb['Sheet2']
                                                    for iz in range(1,sheetb.max_row+1):
                                                        if ms == sheetb.cell(iz,1).value:
                                                            caidui = True
                                                            break
                                                    if not caidui:
                                                        for iy in range(1,sheetc.max_row+1):
                                                            if ms == sheetc.cell(iy,1).value:
                                                                caidui = True
                                                                break
                                                    break
                            if caidui:
                                mmg = random.choice(['√','正确!','√!','恭喜你猜对了'])
                                await fcaici.send(mmg)
                                list0 = ['group',grname,time.time(),ms,sheet.cell(1,5).value,usid,3]
                                sheet.append(list0)
                                c = int(sheet.cell(i,4).value[2])
                                for iz in range(6,sheet.max_row+1):
                                    if sheet.cell(iz,7).value == 3:
                                        sheet.cell(iz,7).value = c
                                for iz in range(8,16):    
                                    if sheet.cell(2,iz).value == 3:
                                        sheet.cell(2,iz).value = c
                                        if iz > 12:
                                            for ia in range(8,13):
                                                if sheet.cell(2,ia).value == -1:
                                                    xiayiti = sheet.cell(1,ia).value
                                                    sheet.cell(2,ia).value = 3
                                                    break
                                            break
                                        else:
                                            xiayiti = sheet.cell(1,iz+1).value
                                            sheet.cell(2,iz+1).value = 3
                                            break
                                if c == 1:
                                    ap = sheet.cell(1,7).value + 10
                                    sheet.cell(1,7).value = ap
                                else:
                                    ap = sheet.cell(1,7).value + 1
                                    sheet.cell(1,7).value = ap
                                if ap>9:
                                    d = str(ap)[0]+ '-' + str(ap)[1]
                                else:
                                    d = '0-'+str(ap)
                                await fcaici.send(d)
                                if d == '2-1':
                                    await fcaici.send('平!')
                                if '3' in d:
                                    fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                    msg = await jiesuan(grname)
                                    sheet.cell(1,5).value = 0
                                    try:
                                        await fcaici.send(msg)
                                    except Exception:
                                        pass
                                else:#交换先后手
                                    if sheet.cell(3,6).value == usid:
                                        pass
                                    else:
                                        list0 = [sheet.cell(3,4).value,4,sheet.cell(3,6).value]
                                        list2 = [sheet.cell(2,4).value,3,sheet.cell(2,6).value]
                                        for j in [2,3]:
                                            for k in [4,6]:
                                                sheet.cell(j,k).value = sheet.cell(j+2,k).value
                                        for j in range(len(list0)):
                                            sheet.cell(4,j+4).value = list2[j]
                                            sheet.cell(5,j+4).value = list0[j]
                                    sheet.cell(1,5).value =1
                                    await bot.call_api('send_private_msg',**{
                                        'message':xiayiti,
                                        'user_id':f'{sheet.cell(2,6).value}'
                                        })
                                    await bot.call_api('send_private_msg',**{
                                        'message':xiayiti,
                                        'user_id':f'{sheet.cell(4,6).value}'
                                        })
                                    if sheet.cell(1,4).value == '双音节*':
                                        await bot.call_api('send_private_msg',**{
                                            'message':xiayiti,
                                            'user_id':'405006454'
                                            })
                                    await fcaici.send('下一题,开始!')
                                    await fcaici.send(Message(f'[CQ:at,qq={sheet.cell(2,6).value}]先手,请描述'))
                            else:
                                list0 = ['group',grname,time.time(),ms,sheet.cell(1,5).value,usid,3]
                                sheet.append(list0)
                                a = 0
                                for ia in range(6,sheet.max_row+1):
                                    if sheet.cell(ia,7).value == 3:
                                        if '【' in sheet.cell(ia,4).value:
                                            a = a+1
                                if a == 6:
                                    for ix in range(8,16):
                                        if sheet.cell(2,ix).value == 3:
                                            sheet.cell(2,ix).value = 0
                                            break
                                    await fcaici.send('6个描述已经用完,本题作废')
                                    for ib in range(6,sheet.max_row+1):
                                        if sheet.cell(ib,7).value == 3:
                                            sheet.cell(ib,7).value = 0
                                    for iz in range(13,16):
                                        if sheet.cell(2,iz).value== -1:
                                            a = 0
                                            xiayiti = sheet.cell(1,iz).value
                                            sheet.cell(2,iz).value = 3
                                            break
                                    if a != 0:
                                        await fcaici.send('三个备用题都用完了,现在结算。请稍等。')
                                        fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                        msg = await jiesuan(grname)
                                        sheet.cell(1,5).value = 0
                                        fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                        await fcaici.send(msg)
                                    else:#交换先后手
                                        list0 = [sheet.cell(3,4).value,4,sheet.cell(3,6).value]
                                        list2 = [sheet.cell(2,4).value,3,sheet.cell(2,6).value]
                                        for j in [2,3]:
                                            for k in [4,6]:
                                                sheet.cell(j,k).value = sheet.cell(j+2,k).value
                                        for j in range(len(list0)):
                                            sheet.cell(4,j+4).value = list2[j]
                                            sheet.cell(5,j+4).value = list0[j]
                                        sheet.cell(1,5).value =1
                                        await bot.call_api('send_private_msg',**{
                                            'message':xiayiti,
                                            'user_id':f'{sheet.cell(2,6).value}'
                                            })
                                        await bot.call_api('send_private_msg',**{
                                            'message':xiayiti,
                                            'user_id':f'{sheet.cell(4,6).value}'
                                            })
                                        await fcaici.send('下一题,开始!')
                                        await fcaici.send(Message(f'[CQ:at,qq={sheet.cell(2,6).value}]先手,请描述'))
                                else:
                                    sheet.cell(1,5).value = sheet.cell(1,5).value+1
                                    if sheet.cell(1,5).value>4:
                                        sheet.cell(1,5).value = sheet.cell(1,5).value-4
                                    for ib in range(2,6):
                                        if sheet.cell(ib,5).value == sheet.cell(1,5).value:
                                            await fcaici.send(Message('交换'))
                                            await fcaici.send(Message(f'[CQ:at,qq={sheet.cell(ib,6).value}]请描述'))
                        if success:
                            break
                    break
        fa.save('D:/QQbot文件/计时文件-双音节.xlsx') 
    else:
        await fcaici.send('猜词不能为空!')         

async def jiesuan(grname):
    global caijijiedict
    dict1,list1 = {},[]
    fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
    listsheet =fa.sheetnames
    arc = ''
    for i in range(len(listsheet)):
        fui = -1 - i
        sheet = fa[listsheet[fui]]
        if str(grname) in listsheet[fui]:
            if sheet.cell(1,5).value >0:
                d = sheet.cell(1,7).value
                if d > 9:
                    d2 = str(d)
                else:
                    d2 = '0'+str(d)
                d20 = int(d2[0])
                d21 = int(d2[1])
                for ix in range(2,6):
                    if '1' in sheet.cell(ix,4).value:
                        list1.append(sheet.cell(ix,6).value)
                        dict1[sheet.cell(ix,6).value] = 10*d20
                    else:
                        list1.append(sheet.cell(ix,6).value)
                        dict1[sheet.cell(ix,6).value] = d21*10
                caijijiedict[grname] = 0
                break
    for i in list1:
        arc = arc+ f'[CQ:at,qq={i}]'+ ':' + str(dict1[i]) + '分\n'
    arc = arc + '本局双音节结束,感谢四位的精彩表现。'
    return arc

require('nonebot_plugin_apscheduler').scheduler

@scheduler.scheduled_job('interval', seconds = 5)
async def co3():
    global caijijiedict
    bot = nonebot.get_bots()['3635837386']
    f0 = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
    listsheet =f0.sheetnames
    list2 = []
    for sheets in listsheet:
        if f0[sheets].cell(1,5).value != 0:
            grname = f0[sheets].cell(1,2).value
            caijijiedict[grname] = 1
            list2.append(grname)
    kys = list(caijijiedict.keys())
    for i in kys:
        if i not in list2:
            del caijijiedict[i]
    timeline = time.time()
    for sheets in listsheet:
        sheet = f0[sheets]
        if sheet.cell(1,5).value == -1:
            if timeline - sheet.cell(1,3).value > 600:
                sheet.cell(1,5).value = 0
                await bot.call_api('send_group_msg',**{
                    'group_id':str(sheet.cell(1,2).value),
                    'message':'由于10分钟未开始,双音节结束,如果还有人想玩请重新发送‘发 双音节x’开局。'
                    })
                caijijiedict[sheet.cell(1,2).value] = 0
            else:
                a = 0
                list1,list2 = [],[]
                for i in range(2,6):
                    if sheet.cell(i,4).value:
                        a = a + 1
                        usid = str(sheet.cell(i,6).value)
                        list1.append(usid)
                        list2.append(f'[CQ:at,qq={usid}]')
                if a == 4:
                    sheet.cell(1,5).value = 1
                    sheet.cell(2,8).value = 3
                    sheet.cell(5,3).value = time.time()
                    msg = list2[0]+list2[1]+'对战'+list2[2]+list2[3]+',第一词,开始!\n'+list2[0]+'先手,请描述'
                    xiayiti = sheet.cell(1,8).value
                    await bot.call_api('send_group_msg',**{
                        'group_id':str(sheet.cell(1,2).value),
                        'message':msg
                        })
                    await bot.call_api('send_private_msg',**{
                        'message':xiayiti,
                        'user_id':f'{list1[0]}'
                        })
                    await bot.call_api('send_private_msg',**{
                        'message':xiayiti,
                        'user_id':f'{list1[2]}'
                        })
                    if sheet.cell(1,4).value == '双音节*':
                        await bot.call_api('send_private_msg',**{
                            'message':xiayiti,
                            'user_id':'405006454'
                            })
            f0.save('D:/QQbot文件/计时文件-双音节.xlsx')
        elif sheet.cell(1,5).value >0:
            if timeline - sheet.cell(1,3).value > 3600:
                sheet.cell(1,5).value=0
                await bot.call_api('send_group_msg',**{
                    'group_id':str(sheet.cell(1,2).value),
                    'message':'由于一小时没有结束,将直接结算本局'
                    })
                msg = await jiesuan(sheet.cell(1,2).value)
                sheet.cell(1,5).value = 0
                f0.save('D:/QQbot文件/计时文件-双音节.xlsx')
                await bot.call_api('send_group_msg',**{
                        'group_id':str(sheet.cell(1,2).value),
                        'message':msg
                        })
            else:
                ai = sheet.max_row
                list1,list2 = [],[]
                a = sheet.cell(1,5).value
                for i in range(2,6):
                    if sheet.cell(i,4).value:
                        usid = str(sheet.cell(i,6).value)
                        list1.append(usid)
                        list2.append(f'[CQ:at,qq={usid}]')
                if timeline - sheet.cell(ai,3).value > 89.3 and timeline - sheet.cell(sheet.max_row,3).value < 95:
                    await bot.call_api('send_group_msg',**{
                        'group_id':str(sheet.cell(1,2).value),
                        'message':'剩余30秒'
                        })
                elif timeline - sheet.cell(ai,3).value > 109.3 and timeline - sheet.cell(sheet.max_row,3).value < 115:
                    await bot.call_api('send_group_msg',**{
                        'group_id':str(sheet.cell(1,2).value),
                        'message':'剩余10秒'
                        })
                elif timeline - sheet.cell(ai,3).value > 120:
                    list1 = ['group',sheet.cell(1,2).value,timeline,'过',sheet.cell(1,5).value,sheet.cell(sheet.cell(1,5).value+1,6).value,3]
                    if sheet.cell(1,5).value == 1 or sheet.cell(1,5).value == 3:
                        sheet.cell(1,5).value = sheet.cell(1,5).value + 2
                        if sheet.cell(1,5).value >4:
                            sheet.cell(1,5).value = sheet.cell(1,5).value-4
                        msg = f'交换!\n[CQ:at,qq={sheet.cell(sheet.cell(1,5).value+1,6).value}]请描述'
                        await bot.call_api('send_group_msg',**{
                            'group_id':str(sheet.cell(1,2).value),
                            'message':msg
                            })
                    else:
                        ax = 0
                        sheet.cell(1,5).value = sheet.cell(1,5).value + 1
                        if sheet.cell(1,5).value >4:
                            sheet.cell(1,5).value = 1
                        for iz in range(6,sheet.max_row+1):
                            if sheet.cell(iz,7).value==3 and '【' in sheet.cell(iz,4).value:
                                ax = ax + 1
                        if ax == 6:
                            msg = '时间到!6个描述已用完!本题作废'
                            await bot.call_api('send_group_msg',**{
                                'group_id':str(sheet.cell(1,2).value),
                                'message':msg
                                })
                            for ib in range(6,sheet.max_row+1):
                                if sheet.cell(ib,7).value == 3:
                                    sheet.cell(ib,7).value = 0
                            for i6 in range(8,16):
                                if sheet.cell(2,i6).value == 3:
                                    sheet.cell(2,i6).value = 0
                                    break
                            for iy in range(13,16):
                                if sheet.cell(2,iy).value == -1:
                                    ax = 0
                                    xiayiti = sheet.cell(1,iy).value
                                    sheet.cell(2,iy).value = 3
                                    break
                            if ax != 0:
                                msg = await jiesuan(sheet.cell(1,2).value)
                                sheet.cell(1,5).value = 0
                                f0.save('D:/QQbot文件/计时文件-双音节.xlsx')
                                msg = '由于三个备用题已经用完,开始结算。'
                                await bot.call_api('send_group_msg',**{
                                    'group_id':str(sheet.cell(1,2).value),
                                    'message':msg
                                    })
                            else:
                                msg = '下一题,开始!'
                                await bot.call_api('send_private_msg',**{
                                    'message':xiayiti,
                                    'user_id':f'{sheet.cell(2,6).value}'
                                    })
                                await bot.call_api('send_private_msg',**{
                                    'message':xiayiti,
                                    'user_id':f'{sheet.cell(4,6).value}'
                                    })
                                await bot.call_api('send_group_msg',**{
                                    'group_id':str(sheet.cell(1,2).value),
                                    'message':f'{msg}\n[CQ:at,qq={sheet.cell(4,6).value}]先手,请描述'
                                    })
                                if sheet.cell(1,4).value == '双音节*':
                                    await bot.call_api('send_private_msg',**{
                                        'message':xiayiti,
                                        'user_id':'405006454'
                                        })
                                sheet.cell(1,5).value = 3
                        else:
                            msg = f'交换!\n[CQ:at,qq={sheet.cell(sheet.cell(1,5).value+1,6).value}]请描述'
                            await bot.call_api('send_group_msg',**{
                                'group_id':str(sheet.cell(1,2).value),
                                'message':msg
                                })
                    sheet.append(list1)
                    f0.save('D:/QQbot文件/计时文件-双音节.xlsx')

nianjian = on_startswith({'我猜'},priority=186)

@nianjian.handle()
async def j(bot: Bot, event: message, state: T_State):
    global changwaidict,caiduidict
    if event.message_type == 'group':
        pass
    else:
        usid = event.user_id
        changwai = str(event.message).replace('我猜','')
        f0 = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
        sheetlist = f0.sheetnames
        success = True
        for sheets in sheetlist:
            sheet = f0[sheets]
            if sheet.cell(1,5).value > 0:
                for i in range(2,6):
                    if usid == sheet.cell(i,6).value:
                        success = False
                        await nianjian.send('你是场上的人员,想来这里白嫖分数吗?')
                        break
                try:
                    if changwai in caiduidict[usid]:
                        await nianjian.send('小子,想无限刷分吗?')
                        success = False
                except KeyError:
                    pass
                if success:
                    for i in range(8,16):
                        if sheet.cell(2,i).value == 3:
                            if sheet.cell(1,i).value == changwai :
                                await nianjian.send('对了,+2分')
                                if sheet.cell(1,4).value != "双音节*":
                                    await bot.call_api('send_group_msg',**{
                                        'group_id':str(sheet.cell(1,2).value),
                                        'message':f'场外{event.sender.nickname}中'
                                        })
                                try:
                                    changwaidict[usid] = changwaidict[usid]+1
                                    caiduidict[usid].append(changwai)
                                except KeyError:
                                    changwaidict[usid] = 1
                                    caiduidict[usid] = [changwai]
                                break

fzanting = on_startswith({'发 暂停'},priority=141)#主持双音节比塞时主持人暂停。

@fzanting.handle()
async def fzan(bot: Bot, event: GroupMessageEvent, state: T_State):
    grname = event.group_id
    if event.user_id != 405006454: #其他使用者请将其换成主持人的QQID
        pass
    else:
        fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
        listsheet =fa.sheetnames
        for it in range(len(listsheet)):
            fui = -1 - it
            sheet = fa[listsheet[fui]]
            if str(grname) in listsheet[fui]:
                if sheet.cell(1,5).value >0 and sheet.cell(1,4).value == '双音节*':
                    sheet.cell(sheet.max_row,3).value += 510
                    fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                    await fzanting.send('主持人暂停比赛,暂停时长最长为10分钟(如果距离一小时结算限制时间还有不到10分钟,则最长暂停至结算)')
                    break

fzanting = on_startswith({'发 继续'},priority=142)#主持双音节比塞时主持人暂停。

@fzanting.handle()
async def fzan(bot: Bot, event: GroupMessageEvent, state: T_State):
    grname = event.group_id
    if event.user_id != 405006454: #其他使用者请将其换成主持人的QQID
        pass
    else:
        fa = openpyxl.load_workbook('D:/QQbot文件/计时文件-双音节.xlsx')
        listsheet =fa.sheetnames
        for it in range(len(listsheet)):
            fui = -1 - it
            sheet = fa[listsheet[fui]]
            if str(grname) in listsheet[fui]:
                if sheet.cell(1,5).value >0 and sheet.cell(1,4).value == '双音节*':
                    sheet.cell(sheet.max_row,3).value = time.time()
                    fa.save('D:/QQbot文件/计时文件-双音节.xlsx')
                    await fzanting.send(Message(f'暂停结束,现在是[CQ:at,qq={sheet.cell(sheet.cell(1,5).value+1,6).value}]的比赛阶段'))
                    break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值