使用
- 添加插件到
astrbot/data/plugins目录下,并重启AstrBot。 - 或者使用管理终端添加插件。
以下是一个简要的使用示例:
- 带装饰器的示例
from astrbot.api.event import filter, AstrMessageEvent
from astrbot.api.star import Context, Star, register
from ..astrbot_plugin_waiter.custom_waiter import SessionWaiter, wait # 导入自定义等待器,需要先安装
@register(
"plugin",
"Cvandia",
"dec",
"1.0.0",
"repo_url",
)
class Plugin(Star):
def __init__(self, context: Context):
super().__init__(context)
self.waiter = None
self.args = None # 存储用户输入的参数
@filter.command("test")
async def test(self, event: AstrMessageEvent)
sender_id = event.get_sender_id()
session_id = f"hoyocos_{sender_id}"
if not self.args:
# 提示输入
yield event.plain_result("请输入参数:")
@wait("session_id", timeout=20) # 创建一个等待器,等待用户输入
async def waiter_handler(input_data: str): # 创建一个等待器处理函数
try:
return max(1, min(int(input_data), 5))
except Exception as e:
logger.error(f"Error in waiter handler: {e}")
return "输入的数量不合法,请输入1-5之间的整数"
try:
user_input = await waiter_handler(session_id=session_id)
except TimeoutError:
yield event.plain_result("超时未输入,已退出")
self.args = user_input
yield event.plain_result(f"输入的参数为:{self.args}")
...
- 函数式示例
from astrbot.api.event import filter, AstrMessageEvent
from astrbot.api.star import Context, Star, register
from ..astrbot_plugin_waiter.custom_waiter import SessionWaiter # 导入自定义等待器,需要先安装
@register(
"plugin",
"Cvandia",
"func",
"1.0.0",
"repo_url",
)
class Plugin(Star):
def __init__(self, context: Context):
super().__init__(context)
self.waiter = None
self.args = None
@filter.command("test")
async def test(self, event: AstrMessageEvent):
sender_id = event.get_sender_id()
session_id = f"hoyocos_{sender_id}"
if not self.args:
yield event.plain_result("请输入参数:") # 提示输入
self.waiter = SessionWaiter(session_id) # 创建一个等待器
try:
user_input = await self.waiter.regist_wait(
self._validate_count_input, timeout=30
)
yield event.plain_result(count)
except TimeoutError:
yield event.plain_result("超时未输入,已退出")
self.args = user_input
yield event.plain_result(f"输入的参数为:{self.args}")
...
async def _validate_count_input(self, input_str: str) -> int:
"""验证用户输入的图片数量"""
try:
return max(1, min(int(input_str), 5))
except ValueError:
return "输入的数量不合法,请输入1-5之间的整数"