forked from mfkebrhvn/ClassAssistant
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.0 KiB
161 lines
6.0 KiB
from nonebot import on_command, require
|
|
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent, MessageEvent
|
|
from .data_source import SelectTasks, AddTask, PushTaskFile, Image, ExportTask, DeleteTask
|
|
|
|
rule = require("rule")
|
|
IS_USER = rule.IS_USER
|
|
CLASS_CADRE = rule.CLASS_CADRE
|
|
query_task = on_command("查询任务")
|
|
add_task = on_command("添加任务")
|
|
push_task_file = on_command("提交任务")
|
|
export_task = on_command("导出任务")
|
|
delete_task = on_command("删除任务")
|
|
|
|
|
|
# 查询任务
|
|
@query_task.handle()
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
if await IS_USER(bot, event, state):
|
|
text = event.get_plaintext()
|
|
task: SelectTasks = await SelectTasks(
|
|
state["user_info"]["班级"],
|
|
int(text) - 1 if text.isdigit() else None)
|
|
async for msg in task.text():
|
|
await query_task.send(msg)
|
|
|
|
|
|
# 添加任务
|
|
@add_task.handle()
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
if await CLASS_CADRE(bot, event, state):
|
|
text = event.get_plaintext()
|
|
if text:
|
|
state["title"] = text
|
|
|
|
|
|
@add_task.got("title", prompt="这个任务的标题叫什么呢?")
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
text = event.get_plaintext()
|
|
if text:
|
|
async with AddTask(text, event.user_id, state["class_cadre"]["班级"], state["class_cadre"]["职位"]) as text:
|
|
await add_task.finish(text)
|
|
else:
|
|
await add_task.finish("不告诉我就不给你添加了,哼~")
|
|
|
|
|
|
# 提交任务
|
|
@push_task_file.handle()
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
if await IS_USER(bot, event, state):
|
|
text = event.get_plaintext()
|
|
task: PushTaskFile = await PushTaskFile(state["user_info"]["班级"], int(text) - 1 if text.isdigit() else None)
|
|
state["task"] = task
|
|
if not task:
|
|
await push_task_file.finish(await task.text_one())
|
|
elif task.index is None:
|
|
await push_task_file.send(await task.text_one())
|
|
else:
|
|
state['index'] = task.index
|
|
|
|
|
|
@push_task_file.got("index", prompt="你想交第几个任务呀!")
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
index = state["index"]
|
|
task: PushTaskFile = state["task"]
|
|
if not isinstance(index, int):
|
|
text = event.get_plaintext()
|
|
index = int(text) - 1 if text.isdigit() else None
|
|
if index is None:
|
|
await push_task_file.finish(f"不提交就算了,哼~")
|
|
elif index not in task:
|
|
await push_task_file.finish(f"你有看到我给你列出{index+1}号吗?哼~")
|
|
|
|
task(state["user_info"]["姓名"], event.user_id, index)
|
|
|
|
|
|
@push_task_file.got('file', prompt="文件给我吧。")
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
task: PushTaskFile = state["task"]
|
|
image = [Image(msg.data) for msg in event.message if msg.type == "image"]
|
|
if image:
|
|
image = image[0]
|
|
if await task.file_exists(image):
|
|
await push_task_file.finish("你这是拿别人的文件吧,不要瞎搞哦!")
|
|
else:
|
|
await push_task_file.finish(await task.save(image))
|
|
else:
|
|
await push_task_file.finish("文件呢?")
|
|
|
|
|
|
# 导出任务
|
|
@export_task.handle()
|
|
async def _(bot: Bot, event: GroupMessageEvent, state: dict):
|
|
if await CLASS_CADRE(bot, event, state):
|
|
text = event.get_plaintext()
|
|
task: ExportTask = await ExportTask(state["class_cadre"]["班级"], int(text) - 1 if text.isdigit() else None)
|
|
state["task"] = task
|
|
if not task:
|
|
await export_task.finish(await task.text_one())
|
|
elif task.index is None:
|
|
await export_task.send(await task.text_one())
|
|
else:
|
|
state['index'] = task.index
|
|
|
|
|
|
@export_task.got("index", prompt="你想导出第几个任务呀!")
|
|
async def _(bot: Bot, event: GroupMessageEvent, state: dict):
|
|
index = state["index"]
|
|
task: ExportTask = state["task"]
|
|
if not isinstance(index, int):
|
|
text = event.get_plaintext()
|
|
index = int(text) - 1 if text.isdigit() else None
|
|
if index is None:
|
|
await export_task.finish(f"不提交就算了,哼~")
|
|
elif index not in task:
|
|
await export_task.finish(f"你有看到我给你列出{index+1}号吗?哼~")
|
|
|
|
if task(index).task_user.shape[0]:
|
|
await export_task.send("开始进行打包咯...")
|
|
file, name = task.zip()
|
|
await export_task.send("打包完成,开始发送文件...")
|
|
await bot.call_api("upload_group_file", group_id=event.group_id, file=file, name=name)
|
|
else:
|
|
await export_task.finish("都没人提交,你这叫我怎么导出嘛!")
|
|
|
|
|
|
# 删除任务
|
|
@delete_task.handle()
|
|
async def _(bot: Bot, event: GroupMessageEvent, state: dict):
|
|
if await CLASS_CADRE(bot, event, state):
|
|
text = event.get_plaintext()
|
|
task: DeleteTask = await DeleteTask(state["class_cadre"]["班级"], int(text) - 1 if text.isdigit() else None)
|
|
state["task"] = task
|
|
if not task:
|
|
await delete_task.finish(await task.text_one())
|
|
elif task.index is None:
|
|
await delete_task.send(await task.text_one())
|
|
else:
|
|
state['index'] = task.index
|
|
|
|
|
|
@delete_task.got("index", prompt="你想删除第几个任务呀!")
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
index = state["index"]
|
|
task: ExportTask = state["task"]
|
|
if not isinstance(index, int):
|
|
text = event.get_plaintext()
|
|
index = int(text) - 1 if text.isdigit() else None
|
|
if index is None:
|
|
await delete_task.finish(f"取消删除")
|
|
elif index not in task:
|
|
await delete_task.finish(f"你有看到我给你列出{index + 1}号吗?哼~")
|
|
state["index"] = index
|
|
await delete_task.send(f"如果真的要删除”{task[index]['title']}“请发送”确认“。")
|
|
|
|
|
|
@delete_task.got("delete")
|
|
async def _(bot: Bot, event: MessageEvent, state: dict):
|
|
if "确认" in event.get_plaintext():
|
|
task: DeleteTask = state["task"](state["index"])
|
|
await delete_task.finish(await task.delete())
|