Skip to main content

A powerful auto reply plugin for NoneBot2

Project description

NoneBotPluginLogo

NoneBotPluginText

NoneBot-Plugin-AutoReply

✨ 自动回复 ✨

license pypi python pypi download wakatime

🛒 回复市场

market

点击进入

我们的回复配置市场上线啦~
在这里,你可以分享你的回复配置,也可以找到其他人分享的回复配置,欢迎各位使用!

📖 介绍

一个简单的关键词自动回复插件,支持 模糊匹配、完全匹配 与 正则匹配,配置文件高度自定义
因为商店里没有我想要的那种关键词回复,所以我就自己写了一个
这个插件是从 ShigureBot 那边拆出来的,我重写了一下做成了单品插件

插件并没有经过深度测试,如果在使用中遇到任何问题请一定一定要过来发 issue 向我汇报,我会尽快解决
如果有功能请求也可以直接发 issue 来 dd 我

💿 安装

[推荐] 使用 nb-cli 安装 在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装
nb plugin install nonebot-plugin-autoreply
使用包管理器安装 在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令
pip
pip install nonebot-plugin-autoreply
pdm
pdm add nonebot-plugin-autoreply
poetry
poetry add nonebot-plugin-autoreply
conda
conda install nonebot-plugin-autoreply

打开 nonebot2 项目的 bot.py 文件, 在其中写入

nonebot.load_plugin('nonebot_plugin_autoreply')

⚙️ 配置

回复配置

插件的配置文件位于 data/autoreply
在里面新建一个 json 后缀文件即可开始配置

请根据下面的注释来编辑配置文件,实际配置文件内不要有注释

[
  {
    // 消息的匹配规则,可以放置多个
    "matches": [
      {
        // 用于匹配消息的文本
        "match": "测试",

        // 匹配模式,可选 `full`(完全匹配)、`fuzzy`(模糊匹配)、`regex`(正则匹配)
        // 在正则匹配下,请使用 `\\` 在 json 里的正则表达式里表示 `\`,因为 json 解析时本身就会将 `\` 作为转义字符
        // 可以不填,默认为 `fuzzy`
        "type": "fuzzy",

        // 是否需要 at 机器人才能触发(叫机器人昵称也可以)
        // 可以不填,默认为 `false`
        "to_me": false,

        // 是否忽略大小写
        // 可以不填,默认为 `true`
        "ignore_case": true,

        // 是否去掉消息前后的空格再匹配
        // 可以不填,默认为 `true`
        "strip": true,

        // 当带 cq 码的消息匹配失败时,是否使用去掉 cq 码的消息再匹配一遍
        // 可以不填,默认为 `true`
        "allow_plaintext": true
      },

      // 如果规则为一个字符串,则会转换为一个属性全部默认的 `match` 来匹配
      "测试2"

      // 更多匹配规则...
    ],

    // 匹配成功后,回复的消息
    // 如果有多个,将随机抽取一个回复
    "replies": [
      // type=normal 时,message 需要为字符串,会解析 message 中的 CQ 码并发送
      {
        "type": "normal",
        "message": "这是一条消息,可以使用CQ码[CQ:image,file=https://pixiv.re/103981177.png]"
      },

      // 直接写字符串也能表示 type=normal
      "这是一条消息,可以使用CQ码[CQ:image,file=https://pixiv.re/103981177.png]",

      // type=plain 时,message 需要为字符串,但是 message 中的 CQ 码不会被解析
      {
        "type": "plain",
        "message": "这条消息后面的CQ码会以原样发送[CQ:at,qq=3076823485]"
      },

      // 直接写 @ 开头的字符串也能表示 type=plain
      "@这条消息后面的CQ码也会以原样发送[CQ:at,qq=3076823485]",

      // type=array 时,message 中需要填 CQ 码的 json 格式
      {
        "type": "array",
        "message": [
          {
            "type": "text",
            "data": {
              "text": "我后面带了一张图片哦"
            }
          },
          {
            "type": "image",
            "data": {
              "file": "https://pixiv.re/103981177.png"
            }
          }
        ]
      },

      // 直接写数组也能代表 type=array
      [
        {
          "type": "text",
          "data": {
            "text": "我可以正常发送哦"
          }
        }
      ],

      // type=multi 时,message 需要为上面提到的消息类型的数组
      // 会按顺序发送 message 中的所有内容
      // message 中不允许嵌套其他的 type=multi 类型的回复
      {
        "type": "multi",
        // delay 是每条消息发送成功后的延时,格式为 [最低延时, 最高延时]
        // 单位为毫秒(1000 毫秒 = 1 秒),可以不填,默认为 [0, 0]
        "delay": [1000, 1000],
        "message": [
          "hello! 一会给你发张图哦~",
          "[CQ:image,file=https://pixiv.re/103981177.png]一会给你分享首歌哦awa~",
          [
            {
              "type": "music",
              "data": {
                "type": "163",
                "id": "2008994667"
              }
            }
          ]
        ]
      }

      // 更多消息...
    ],

    // 过滤指定群聊
    // 可以不填,默认为空的黑名单
    "groups": {
      // 黑名单类型,可选 `black`(黑名单)、`white`(白名单)
      "type": "black",

      // 要过滤的群号
      "values": [
        123456789, 987654321
        // 更多群号...
      ]
    },

    // 过滤指定用户
    // 可以不填,默认为空的黑名单
    "users": {
      // 黑名单类型,可选 `black`(黑名单)、`white`(白名单)
      "type": "black",

      // 要过滤的QQ号
      "values": [
        1145141919, 9191415411
        // 更多QQ号...
      ]
    }
  }

  // ...
]

插件提供了一些变量,他们可以被用在 normalarray 类型的消息,以及 multi 类型中嵌套的这两个类型的消息中;plain 类型的消息则无法使用变量
变量使用 str.format() 方法替换,所以如果想要转义 {},使用 {{}} 即可

下面是插件提供的变量列表

  • {self_id} - 机器人 QQ
  • {message_id} - 消息 ID
  • {user_id} - 发送者 QQ
  • {nickname} - 发送者昵称
  • {card} - 发送者群名片
  • {group_id} - 消息来源群号(私聊等为 None

下面放出几个示例,帮助大家更好的理解如何使用变量

[
  {
    "matches": [
      {
        "match": "^(@|at|艾特)我$",
        "type": "regex"
      }
    ],
    "replies": [
      // 在 normal 类型消息中使用
      "[normal] At了 [CQ:at,qq={user_id}]",

      // 在 array 类型消息中使用
      [
        {
          "type": "text",
          "data": {
            "text": "[array] At了 "
          }
        },
        {
          "type": "at",
          "data": {
            "qq": "{user_id}"
          }
        }
      ],

      // 在 multi 类型消息中使用
      {
        "type": "multi",
        "message": [
          // 嵌套的 array 类型消息
          [
            {
              "type": "at",
              "data": {
                "qq": "{user_id}"
              }
            }
          ],

          // 嵌套的 normal 类型消息
          "[multi] 我刚刚 At 了一下你哦~ 收到了吗?"
        ]
      },

      // 无法在 plain 类型消息中使用,{user_id}、{nickname} 会原样显示
      "@[plain] [CQ:at,qq={user_id}] 啊咧?怎么 At 不了 {nickname}?",

      // 可以在消息中使用 {{ 和 }} 来转义大括号
      // 前面的 {{user_id}} 会转义成 {user_id} 发送,而后面的 {nickname} 会被替换
      "[normal] [CQ:at,qq={{user_id}}] 啊咧?怎么 At 不了 {nickname}?"
    ]
  }
]

常规配置

下方的配置皆为可选,如果不需要可以忽略不配置
配置项请参考下面的文本

# matcher 是否阻断消息,默认 False
AUTOREPLY_BLOCK=False

# matcher 优先级
AUTOREPLY_PRIORITY=99

💬 指令

重载自动回复

此命令用于重载自动回复配置,仅 SUPERUSER 可以执行

📞 联系

QQ:3076823485
Telegram:@lgc2333
吹水群:1105946125
邮箱:lgc2333@126.com

💰 赞助

感谢大家的赞助!你们的赞助将是我继续创作的动力!

  • 爱发电

  • 赞助二维码(点击展开)

    讨饭

📝 更新日志

0.2.5

  • 可以加载多个回复 Json

0.2.4

  • 让字符串可以作为默认属性的 match 使用
  • @ 开头的字符串 reply 解析为 plain 形式的回复

0.2.3

  • 修复一处 py 3.8 无法使用的类型注解

0.2.2

  • 修复群聊和用户过滤器无法正常使用的问题

0.2.1

  • 修复多 match 无法使用的问题

0.2.0

  • 使用 rule 匹配消息,避免日志刷屏
  • 支持一次回复多条消息,调整配置文件结构
  • 增加了两个 .env 配置项
  • 增加热重载配置文件的指令

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_autoreply-0.2.6.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

nonebot_plugin_autoreply-0.2.6-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_autoreply-0.2.6.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_autoreply-0.2.6.tar.gz
Algorithm Hash digest
SHA256 8fc52a41f6287d6caddde29ae4855f0b59d0477c0b096010d0ce09d621f1b0c5
MD5 0408e96f152d289480e04a1d928df0d7
BLAKE2b-256 884319af2e70f58524190381e7cc9a1115b02a627d728dd432915c735009301b

See more details on using hashes here.

File details

Details for the file nonebot_plugin_autoreply-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_autoreply-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 61aa5e47e8958b1917dcc55f08d4ecacab7d7a659a4ece3e425f8e9e2babe9d3
MD5 5f2deaef35ce59278ee01dc2a6b68c2e
BLAKE2b-256 90eb8e99fa4d61cd590525744ac585160caf78435eb31067947f549e803dff5d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page