Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b42385f780 | |||
| 6cae38dea9 | |||
| 8594b59783 | |||
| f768c91430 |
@ -1,3 +1,5 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
import json
|
||||||
@ -89,6 +91,7 @@ class LongTaskTarget(BaseModel):
|
|||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
await bot.send_message(self.channel_id, cast(Any, await msg.export()))
|
await bot.send_message(self.channel_id, cast(Any, await msg.export()))
|
||||||
|
return True
|
||||||
if self.platform == "discord":
|
if self.platform == "discord":
|
||||||
if not isinstance(bot, DCBot):
|
if not isinstance(bot, DCBot):
|
||||||
logger.warning(
|
logger.warning(
|
||||||
@ -104,6 +107,7 @@ class LongTaskTarget(BaseModel):
|
|||||||
),
|
),
|
||||||
tts=False,
|
tts=False,
|
||||||
)
|
)
|
||||||
|
return True
|
||||||
logger.warning(f"没有一个平台是期望的平台 PLATFORM={self.platform}")
|
logger.warning(f"没有一个平台是期望的平台 PLATFORM={self.platform}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -111,7 +115,7 @@ class LongTaskTarget(BaseModel):
|
|||||||
class LongTask(BaseModel):
|
class LongTask(BaseModel):
|
||||||
uuid: str
|
uuid: str
|
||||||
data_json: str
|
data_json: str
|
||||||
target: "LongTaskTarget"
|
target: LongTaskTarget
|
||||||
callback: str
|
callback: str
|
||||||
deadline: datetime.datetime
|
deadline: datetime.datetime
|
||||||
canceled: bool = False
|
canceled: bool = False
|
||||||
@ -143,11 +147,25 @@ class LongTask(BaseModel):
|
|||||||
datafile.unhandled.setdefault(self.callback, []).append(self)
|
datafile.unhandled.setdefault(self.callback, []).append(self)
|
||||||
|
|
||||||
return
|
return
|
||||||
await hdl(self)
|
success = False
|
||||||
|
try:
|
||||||
|
await hdl(self)
|
||||||
|
success = True
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
async with longtask_data() as datafile:
|
async with longtask_data() as datafile:
|
||||||
datafile.to_handle[self.callback] = [
|
datafile.to_handle[self.callback] = [
|
||||||
t for t in datafile.to_handle[self.callback] if t.uuid != self.uuid
|
t for t in datafile.to_handle[self.callback] if t.uuid != self.uuid
|
||||||
]
|
]
|
||||||
|
if not success:
|
||||||
|
datafile.unhandled.setdefault(self.callback, []).append(self)
|
||||||
|
logger.info(
|
||||||
|
f"LongTask 执行失败 UUID={self.uuid} callback={self.callback}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.info(
|
||||||
|
f"LongTask 工作完成 UUID={self.uuid} callback={self.callback}"
|
||||||
|
)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
self._aio_task = None
|
self._aio_task = None
|
||||||
@ -257,6 +275,7 @@ async def create_longtask(
|
|||||||
deadline=deadline,
|
deadline=deadline,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.info(f"创建了新的 LongTask UUID={task.uuid} CALLBACK={task.callback}")
|
||||||
await task.start()
|
await task.start()
|
||||||
|
|
||||||
async with longtask_data() as d:
|
async with longtask_data() as d:
|
||||||
@ -266,10 +285,17 @@ async def create_longtask(
|
|||||||
|
|
||||||
|
|
||||||
async def init_longtask():
|
async def init_longtask():
|
||||||
|
counter = 0
|
||||||
|
req: set[str] = set()
|
||||||
|
|
||||||
async with longtask_data() as data:
|
async with longtask_data() as data:
|
||||||
for v in data.to_handle.values():
|
for v in data.to_handle.values():
|
||||||
for t in v:
|
for t in v:
|
||||||
await t.start()
|
await t.start()
|
||||||
|
counter += 1
|
||||||
|
req.add(t.callback)
|
||||||
|
|
||||||
|
logger.info(f"LongTask 启动了任务 数量={counter} 期望的门类=[{','.join(req)}]")
|
||||||
|
|
||||||
|
|
||||||
DepLongTaskTarget = Annotated[LongTaskTarget, Depends(get_long_task_target)]
|
DepLongTaskTarget = Annotated[LongTaskTarget, Depends(get_long_task_target)]
|
||||||
|
|||||||
@ -1,22 +1,18 @@
|
|||||||
import asyncio as asynkio
|
import asyncio as asynkio
|
||||||
import base64
|
|
||||||
from pathlib import Path
|
|
||||||
import secrets
|
|
||||||
import json
|
|
||||||
import datetime
|
import datetime
|
||||||
from typing import Literal, Optional
|
import json
|
||||||
|
import secrets
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from nonebot import on_message
|
from nonebot import on_message
|
||||||
from nonebot.adapters import Event as BaseEvent
|
from nonebot.adapters import Event as BaseEvent
|
||||||
from nonebot.adapters.console.event import MessageEvent as ConsoleMessageEvent
|
|
||||||
from nonebot.adapters.discord.event import MessageEvent as DiscordMessageEvent
|
from nonebot.adapters.discord.event import MessageEvent as DiscordMessageEvent
|
||||||
from nonebot_plugin_alconna import (
|
from nonebot_plugin_alconna import (
|
||||||
Alconna,
|
Alconna,
|
||||||
Args,
|
Args,
|
||||||
Field,
|
|
||||||
Subcommand,
|
|
||||||
UniMessage,
|
UniMessage,
|
||||||
UniMsg,
|
UniMsg,
|
||||||
on_alconna,
|
on_alconna,
|
||||||
@ -360,8 +356,10 @@ evt = on_alconna(
|
|||||||
|
|
||||||
|
|
||||||
@evt.handle()
|
@evt.handle()
|
||||||
async def force_play_game(event: BaseEvent, rounds: Optional[int] = 100):
|
async def force_play_game(
|
||||||
await play_game(event, force=True, rounds=rounds)
|
event: BaseEvent, target: DepLongTaskTarget, rounds: Optional[int] = 100
|
||||||
|
):
|
||||||
|
await play_game(event, target, force=True, rounds=rounds)
|
||||||
|
|
||||||
|
|
||||||
async def end_game(event: BaseEvent, group_id: str):
|
async def end_game(event: BaseEvent, group_id: str):
|
||||||
@ -518,4 +516,3 @@ async def _(event: BaseEvent, target: DepLongTaskTarget):
|
|||||||
group_id = target.channel_id
|
group_id = target.channel_id
|
||||||
remove_banned_id(group_id)
|
remove_banned_id(group_id)
|
||||||
await evt.send(await UniMessage().text("本群已开启成语接龙功能!").export())
|
await evt.send(await UniMessage().text("本群已开启成语接龙功能!").export())
|
||||||
|
|
||||||
|
|||||||
@ -4,13 +4,11 @@ import asyncio
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
import nonebot
|
import nonebot
|
||||||
|
|
||||||
# from nonebot.adapters import Bot, Event
|
|
||||||
# from nonebot_plugin_alconna import UniMessage
|
# from nonebot_plugin_alconna import UniMessage
|
||||||
from konabot.common.longtask import (
|
from konabot.common.longtask import (
|
||||||
# DepLongTaskTarget,
|
# DepLongTaskTarget,
|
||||||
# LongTask,
|
# LongTask,
|
||||||
# create_longtask,
|
# create_longtask,
|
||||||
# get_long_task_target,
|
|
||||||
# handle_long_task,
|
# handle_long_task,
|
||||||
init_longtask,
|
init_longtask,
|
||||||
)
|
)
|
||||||
@ -45,6 +43,5 @@ async def _():
|
|||||||
# handler="test_callback_001",
|
# handler="test_callback_001",
|
||||||
# data={},
|
# data={},
|
||||||
# target=target,
|
# target=target,
|
||||||
# deadline=datetime.datetime.now() + datetime.timedelta(seconds=2),
|
# deadline=datetime.datetime.now() + datetime.timedelta(seconds=20),
|
||||||
# )
|
# )
|
||||||
# await target.send_message(UniMessage().text("Hello, world!"), at=True)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user