本插件针对的是使用nonebot2+go-CQHttp为框架的QQ机器人。具体搭建方法可以参考 川川菜鸟 的《qq机器人小白教程系列》
双音节猜成语是来自《中国成语大会》中的一种猜词游戏。主要规则如下:
4个人分为两组,每组一个描述,1个猜词;每次主持人给两个描述私聊发送1个成语,在规定时间内(一般设置为2min)先手组的描述方以一个双音节单位的词语描述这个成语,这两个字不得出现成语中的字,不得两个字都谐音,且必须是真实存在的词语,先手组的猜词方在描述过后在规定时间内(一般设置为2min)猜词,猜对则下一局,没有猜对则后手组描述方描述,后手组猜词方猜词,若未猜对则继续交换到先手方,直到猜对或作废为止。
附加规则:
以下情况词语作废,启用备用词语:1)6个描述后猜词方猜错或超时未作答;2)第6个描述犯规
以下情况交换下一题先后手:1)后手方猜对;2)词语作废
以下情况结束游戏:1)一方猜对3个词语;2)三个备用词语用完;3)游戏超过1小时
因为不同成语难度不同,请下载以下难度分级作为题库。
本插件使用前需要创建一个计时文件.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('&','').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