Skip to content

Releases: nonebot/plugin-alconna

Nonebot Plugin Alconna 0.46.6

14 Jun 02:45
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.46.5...v0.46.6

Nonebot Plugin Alconna 0.46.5

11 Jun 15:28
8d7cc83
Compare
Choose a tag to compare

What's Changed

  • ReplyMergeExtension 增加构造参数 sep, 用来指定拼接时的间隔字符
  • 升级依赖,Command 现在可用 .config 方法配置 CommandMeta
  • 更新内置插件 lang
  • ⬆️ auto update by pre-commit hooks by @pre-commit-ci in #51

Full Changelog: v0.46.4...v0.46.5

Nonebot Plugin Alconna 0.46.4

03 Jun 15:39
Compare
Choose a tag to compare
  • MarkdownExtension 增加一个 text_to_image 的参数,用来渲染md为图片
  • help 指令增加 --plugin-info 选项,用来输出指令对应的插件信息:
    image

Full Changelog: v0.46.3...v0.46.4

Nonebot Plugin Alconna 0.46.3

29 May 08:09
Compare
Choose a tag to compare
  • 增加 ReplyMergeExtension, 其可以将回复的原消息合并到当前消息作为一部分参数:
     from nonebot_plugin_alconna.builtins.extensions.reply import ReplyMergeExtension
    
     preview = Command("preview <content:any>", "预览").build(auto_send_output=True, extensions=[ReplyMergeExtension()])
     @preview.handle()
     async def preview_h(content):
         await preview.finish("rendering preview: " + content)
03ecceef1683874e924ef7a9f12762e9

Full Changelog: v0.46.1...v0.46.3

Nonebot Plugin Alconna 0.46.1

21 May 11:35
Compare
Choose a tag to compare

改进

  • Command 构造器可以在初始化时传入 CommandMeta
  • fallback 现在改为 FallbackStrategy, 可以选择ignore, text, rollbackforbid; 之前的 True 表示为 text
  • AlconnaMatcher 里的 fallback 现在默认为 ignore
  • UniMessage 里的 fallback 现在默认为 rollback
  • 在 qq 适配器中 mentionmention_everyone 现在会暂时返回空格

修复

  • 修复 Reference 的构造问题

Full Changelog: v0.46.0...v0.46.1

Nonebot Plugin Alconna 0.46.0

19 May 14:37
Compare
Choose a tag to compare

新增

  • 适配器 Mirai(官方)
  • 适配器 TailChat
  • Text 新增 .bold(), .italic() 等一系列便捷方法
  • 新增 I18n 通用消息段(在发送前会转为 UniMessage)
  • AlconnaMatcher 新增 .i18n() 方法,与 I18n 作用相同
  • 新增内置插件 lang,可以切换或列出可用的语言模式

改进

  • 升级 Tarina 至 0.5.0 以使用 tarina-lang 新特性

i18n 说明

plugin-alconna 的 i18n 支持基于 tarina.lang,其提供了一个 tarina-lang 命令行工具

首先可以通过 tarina-lang new 创建文件夹 i18n

之后使用 cd ./i18ntarina-lang init,会生成如下文件:

📦 awesome-bot
├──📂 i18n
++ ├── __init__.py
++ ├── .config.json
++ ├── .template.json
++ └── .template.schema.json
├── xxx.py
└── ...

你需要将你语言文件中所有包含的项目声明在 .template.json 中,例如:

{
  "$schema": ".template.schema.json",
  "scopes" : [
    {
      "scope": "example",
      "types": [
        "test",
        {
          "subtype": "test1",
          "types": [
            "test2"
          ]
        }
      ]
    }
  ]
}

然后通过 tarina-lang schematarina-lang create XXX 来创建新的语言文件。以下为使用命令创建 en-USzh-CN 语言文件后的文件结构:

📦 awesome-bot
├──📂 i18n
│  ├── __init__.py
│  ├── .config.json
++ ├── .lang.schema.json
│  ├── .template.json
│  ├── .template.schema.json
++ ├── en-US.json
++ └── zh-CN.json
├── plugin.py
└── ...

其中一个语言文件如下所示:

// en-US.json
{
  "$schema": "./.lang.schema.json",
  "example": {
    "test": "Test",
    "test1": {
      "test2": "Test2"
    }
  }
}

Note

tarina-lang 支持创建和读取 YAML 格式的语言文件。当然首先你需要额外安装 tarina[yaml]

然后通过 tarina-lang create XXX --yaml 创建 .yml 文件

一个 yaml 格式的语言文件如下所示:

# $schema: .lang.schema.json
example:
  test: Test
  test1:
    test2: Test2

之后,在 plugin 里面,你可以用如下方法来使用i18n条目:

from .i18n import lang

...
async def _():
    await matcher.send(lang.require("example", "test"))  # Test
    await matcher.send(lang.require("example", "test1.test2"))  # Test2

高级一点,你可以通过 tarina-lang model 来生成一个模型文件:

📦 awesome-bot
├──📂 i18n
│  ├── __init__.py
│  ├── .config.json
│  ├── .lang.schema.json
│  ├── .template.json
│  ├── .template.schema.json
│  ├── en-US.json
++ ├── model.py
│  └── zh-CN.json
├── plugin.py
└── ...

其中 model.py:

from tarina.lang.model import LangItem, LangModel


class ExampleTest1:
    test2: LangItem = LangItem("example", "test1.test2")


class Example:
    test: LangItem = LangItem("example", "test")
    test1: ExampleTest1


class Lang(LangModel):
    example = Example

之后便可以这样使用:

from .i18n import Lang

...
async def _():
    await matcher.send(Lang.example.test())
    # 如果你的条目是模板字符串,你可以使用 Lang.example.test(...)
    await matcher.send(Lang.example.test1.test2())

基于此,I18nAlconnaMatcher.i18n 可以如下使用:

await AlconnaMatcher.send(UniMessage.i18n(Lang.example.test, ...))
await AlconnaMatcher.send(UniMessage.i18n("example", "test", ...))
await AlconnaMatcher.send(AlconnaMatcher.i18n(Lang.example.test1.test2, ...))
await AlconnaMatcher.send(AlconnaMatcher.i18n("example", "test1.test2", ...))

Note

plugin-alconna 中, i18n 条目会先被转换成 UniMessageTemplate
所以 UniMessageTemplate 的所有特性都可用于 i18n 条目
例如:

# example.test: "{:At(user, $event.get_user_id())} Hello!"
await XXX.send(XXX.i18n("example", "test"))

特别的,因为 I18n 是一个通用消息段,所以 i18n 条目可以嵌套:

{
  "example": {
    "test": "XXXX",
    "foo": "{:I18n(example, test)}, XXXX!"
  }
}

Full Changelog: v0.45.4...v0.46.0

Nonebot Plugin Alconna 0.45.4

07 May 08:07
Compare
Choose a tag to compare

What's Changed

  • 修改 exporter 中 各适配器msg 的构造
  • ⬆️ auto update by pre-commit hooks by @pre-commit-ci in #48

Full Changelog: v0.45.3...v0.45.4

Nonebot Plugin Alconna 0.45.3

02 May 06:43
Compare
Choose a tag to compare
  • builtins.extensions.init 移除 DiscordSlashExtension
  • 调整 TelegramSlashExtension 的 docstring
  • UniMessage 增加 finish

Full Changelog: v0.45.2...v0.45.3

Nonebot Plugin Alconna 0.45.2

01 May 14:52
Compare
Choose a tag to compare
  • 修复 satori 适配器下 Target 的构建
  • 增加检查 satori 适配器版本

Full Changelog: v0.45.1...v0.45.2

Nonebot Plugin Alconna 0.45.1

01 May 11:33
Compare
Choose a tag to compare

What's Changed

  • 升级 nonebot2 依赖版本至 2.3.0
  • ⬆️ Bump dependabot/fetch-metadata from 2.0.0 to 2.1.0 by @dependabot in #47

Note

随着 nonebot2 升级至 2.3.0,本插件同样也放弃了对 python 3.8 的支持。

Full Changelog: v0.45.0...v0.45.1