来提交你的插件吧!
有疑问?来看看呗!

插件详情

astrbot_plugin_waiter

用于开发者的对话管理插件

版本v1.0.0
作者Cvandia
Star3
更新2025/04/08

插件说明

astrbot_plugin_waiter

⭐基于AstrBot帮助开发者管理对话的插件⭐

中文简体


使用

  1. 添加插件到astrbot/data/plugins目录下,并重启AstrBot。
  2. 或者使用管理终端添加插件。

以下是一个简要的使用示例:

  • 带装饰器的示例
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之间的整数"

💝 特别鸣谢

  • AstrBot: 本项目的基础,非常好用的基于LLM聊天的机器人框架。
  • @qxdn:感谢qxdn的博客文章

感谢以下开发者

contributors

支持

帮助文档

AstrBot LogoAstrBot 插件市场社区

AstrBot 插件市场 是一个开放的插件分享平台,欢迎开发者们贡献优质插件。本站致力于为 AstrBot 用户提供高质量扩展,帮助您快速找到喜欢的插件,并鼓励社区伙伴分享使用心得、提出改进建议。

相关链接

官方项目主站 官方插件市场 官方项目仓库 侧边展示主站

开发相关

插件开发文档 快速提交插件 官方项目文档

© 2026 AstrBot 插件市场 Made with by Community