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

插件详情

astrbot_plugin_tts_sanitizer logo

astrbot_plugin_tts_sanitizer

TTS 文本过滤插件,自动过滤颜文字、特殊符号等不适合语音朗读的内容

TTS
版本v0.3
作者柯尔
Star3
更新2025/12/07

插件说明

TTS文本过滤插件

一个智能的AstrBot TTS文本过滤插件,专门用于清理不适合语音朗读的内容,让TTS输出更加自然流畅。

仅适用于astrbot4.5.0之前的版本!

✨ 主要特性

  • 🎭 颜文字过滤: 自动移除 (^_^), (>_<), o_o 等颜文字
  • 🎨 特殊符号清理: 过滤 ★♪♥💖→ 等装饰性符号和表情符号
  • 🔄 智能替换: 233 → 哈哈哈, 666 → 厉害, 555 → 呜呜呜
  • 🗑️ 直接过滤: 完全移除 orz, QAQ, TAT 等不适合朗读的词汇
  • 📝 重复字符压缩: 哈哈哈哈哈 → 哈哈 (可配置保留数量)
  • 📏 字数限制: 超过指定字数自动跳过TTS朗读
  • 🛡️ 超长文本保护: 可配置最大处理长度,防止处理超长文本
  • ⚙️ 灵活配置: 支持正则表达式自定义过滤规则
  • 🔧 实时调试: 可开启调试模式查看详细过滤过程
  • 📊 状态监控: 提供测试命令和统计信息
  • 🎯 只过滤TTS: 用户看到的文本保持原样,只影响语音朗读

🚀 快速开始

安装方法

  1. 将插件文件放入AstrBot的插件目录
  2. 重启AstrBot或使用插件管理功能加载
  3. 插件会自动启用,使用默认配置即可开始工作

基本使用

插件安装后会自动工作,无需额外配置。当机器人回复包含不适合TTS的内容时,会自动进行过滤:

用户看到的文本: 你好(^_^)这是测试233哈哈哈哈♪
TTS朗读内容: 你好 这是测试 哈哈哈 哈哈

💡 核心机制: 插件会临时修改文本供TTS使用,然后立即恢复原文本。用户在聊天界面看到的是完整的原始文本,只有TTS朗读的是过滤后的版本。

🎮 命令使用

测试命令

/tts_filter_test [测试文本]

测试过滤效果,查看处理前后的对比。

示例:

/tts_filter_test 你好(^_^)这是测试233哈哈哈哈♪

📝 原文 (15 字符):
你好(^_^)这是测试233哈哈哈哈♪

🔧 过滤后 (9 字符):
你好这是测试哈哈哈

⚙️ 当前配置:
• 直接过滤: orz, QAQ, TAT等
• 替换规则: 233→哈哈哈, 666→厉害等

📊 处理结果:
• 字符压缩率: 40.0%
• TTS状态: ✅ 可朗读

状态查看

/tts_filter_stats

查看插件运行状态和当前配置信息。

配置重载

/tts_filter_reload

重新加载配置文件,使配置修改立即生效。

⚙️ 配置说明

插件支持通过AstrBot配置面板进行设置,主要配置项包括:

基础设置

  • 启用过滤 (enabled): 总开关,控制是否启用过滤功能
  • 最大朗读字数 (max_length): 超过此字数将跳过TTS (0=无限制)
  • 最大处理长度 (max_processing_length): 超过此长度将跳过过滤,防止处理超长文本
  • 调试模式 (debug_mode): 是否输出详细的处理日志

过滤规则

  • 颜文字过滤规则 (emoticon_patterns): 正则表达式列表,匹配需要过滤的颜文字
  • 直接过滤词汇 (filter_words): 完全不朗读的词汇列表
  • 替换词汇配置 (replacement_words): 替换规则,格式为"原词|替换词"
  • 特殊符号过滤 (filter_special_chars): 是否过滤装饰性符号和表情
  • 重复字符处理 (filter_repeats): 是否压缩重复字符
  • 最大重复数量 (max_repeat_count): 保留的最大重复字符数量

默认配置

{
  "enabled": true,
  "max_length": 200,
  "max_processing_length": 10000,
  "emoticon_patterns": [
    "[((][^(()]*[))]",
    "[>>][__][<<]",
    "[^^][__][^^]",
    "[oO][__][oO]",
    "[xX][__][xX]",
    "[--][__][--]",
    "[((][;;][__][;;][))]"
  ],
  "filter_words": ["orz", "OTZ", "QAQ", "QWQ", "TAT", "TUT"],
  "replacement_words": [
    "233|哈哈哈",
    "666|厉害", 
    "999|很棒",
    "6|厉害",
    "555|呜呜呜"
  ],
  "filter_special_chars": true,
  "special_char_patterns": [
    "[★☆♪♫♬♩♡♥❤️💖💕💗💓💝💟💜💛💚💙🧡🤍🖤🤎💔❣️💋]",
    "[→←↑↓↖↗↘↙↔↕↺↻]"
  ],
  "filter_repeats": true,
  "max_repeat_count": 2,
  "debug_mode": false
}

🔧 工作原理

核心机制:临时修改 + 立即恢复

┌─────────────┐
│  LLM 回复   │
└──────┬──────┘
       │
       ▼
┌─────────────────────────────┐
│  本插件 (优先级 -1001)       │
│  1. 保存原始文本             │
│  2. 应用过滤规则             │
│  3. 临时修改为过滤后的文本    │
│  4. 使用 call_soon 调度恢复  │
└──────┬──────────────────────┘
       │
       ▼
┌─────────────────────────────┐
│  TTS 插件 (优先级 -1000)     │
│  读取过滤后的文本进行朗读     │
└──────┬──────────────────────┘
       │
       ▼
┌─────────────────────────────┐
│  事件循环下一次迭代           │
│  执行 call_soon 恢复原文本   │
└──────┬──────────────────────┘
       │
       ▼
┌─────────────────────────────┐
│  消息发送给用户               │
│  用户看到原始完整文本         │
└─────────────────────────────┘

过滤流程

在临时修改阶段应用以下过滤规则:

  1. 颜文字移除 - 使用正则表达式匹配并删除
  2. 直接过滤词汇移除 - 完全删除不适合朗读的词
  3. 词汇替换 - 将网络用语转换为可朗读的词汇
  4. 特殊符号移除 - 删除装饰性符号和表情
  5. 重复字符压缩 - 将多个重复字符压缩到指定数量
  6. 多余空格清理 - 清理多余的空白字符

技术要点

为什么使用 call_soon?

  • call_soon 将恢复操作调度到事件循环的下一次迭代
  • 保证在当前钩子链执行完毕后才恢复文本
  • TTS 插件在当前迭代中读取过滤后的文本
  • 消息发送在下一次迭代时使用恢复后的原文本
  • 这是在框架限制下的最佳实践

优先级设计

  • 本插件优先级: -1001
  • TTS 插件通常: -1000
  • 确保过滤在 TTS 处理之前执行

🐛 故障排除

常见问题

Q: 过滤不生效怎么办?
A: 检查插件是否启用,使用 /tts_filter_stats 查看状态,确认配置正确。

Q: 用户看到的文本也被过滤了?
A: 检查是否使用了正确的 call_soon 机制。如果问题持续,开启调试模式查看日志。

Q: 配置修改后不生效?
A: 使用 /tts_filter_reload 重新加载配置,或重启AstrBot。

Q: 正则表达式报错?
A: 检查配置中的正则表达式语法,可以使用在线正则测试工具验证。

Q: TTS 朗读超长文本导致卡顿?
A: 调整 max_processing_length 配置,对超长文本跳过处理。

调试方法

  1. 开启调试模式: 在配置中设置 debug_mode: true
  2. 使用测试命令: /tts_filter_test 验证过滤效果
  3. 检查统计信息: /tts_filter_stats 确认插件运行状态
  4. 查看日志: 开启调试模式后查看详细的处理过程

📈 性能优化

  • 高效正则: 使用编译后的正则表达式提高匹配速度
  • 智能跳过: 空文本或超长文本直接跳过处理
  • 长度保护: 可配置最大处理长度,防止处理超长文本
  • 性能监控: 处理时间超过 0.1 秒会记录警告日志
  • 内存优化: 及时清理临时变量,避免内存泄漏
  • 异步处理: 使用异步方法,不阻塞主线程

🔄 版本历史

  • v0.3 (当前版本)

    • ✅ 新增配置项: 添加 max_processing_length 配置,可自定义最大处理长度
    • 🔧 代码优化: 统一导入语句到文件顶部,符合 PEP 8 规范
    • 🛡️ 增强防护: 消除硬编码的魔术数字,提高代码可维护性
    • 📝 文档完善: 更新文档,准确反映实际功能和工作原理
    • ⚡ 性能稳定: 保持 call_soon 机制,经过实际测试的稳定方案
  • v0.2

    • 分离过滤和替换功能
    • 优化配置界面和错误处理
    • 移除数据持久化,简化架构
    • 添加详细的调试和统计功能
    • 改进正则表达式匹配性能
    • 使用 call_soon 实现可靠的文本恢复机制
  • v0.1

    • 初始版本,基础过滤功能

📝 许可证

MIT License - 详见 LICENSE 文件

🤝 贡献

欢迎提交Issue和Pull Request来改进这个插件!

📞 支持

如有问题,请通过以下方式获取帮助:

  • 提交GitHub Issue
  • 查看AstrBot官方文档
  • 使用插件内置的测试和统计命令
AstrBot LogoAstrBot 插件市场社区

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

相关链接

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

开发相关

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

© 2026 AstrBot 插件市场 Made with by Community