Skip to main content

nonebot2 mediawiki 查询插件

Project description

nonebot

nonebot-plugin-mediawiki

适用于 NoneBot2 的 MediaWiki 查询插件


Python nonebot2 GitHub license pypi PyPI - Downloads

GitHub issues GitHub release (latest by date including pre-releases) GitHub contributors GitHub Repo stars


本项目是 Flandrewiki 组件,经简单修改成为独立插件发布

用途

一般来说最需要wikibot的大概是一些wiki项目的交流群,不过鉴于这种群通常都有大佬在,写个bot自然不是什么难事的说~ 所以我在本插件开发时更注重于在一般的群聊中能起作用的功能,供交流问题时快速引用。例如游戏的交流群,可能需要经常在wiki上查找角色信息、游戏特性等, 去wiki上手动翻链接显然很麻烦。同时,对很多群来说,交流的话题都很广泛,例如今天聊mc明天聊泰拉后天聊战地等情况都是存在的, 因此我着重设计了对多个wiki的支持。而对一些更加专业的、wiki项目的群才能用到的功能(例如页面更改提醒),则不在开发计划中。当然,如果没有这些需求, 本插件也适合wiki项目的群使用,例如本插件具有的完善的全局管理与回落机制,可以降低群管理人员在管理同一项目的群时的成本,等等。

啊啦,说了这么多,总而言之,欢迎使用!欢迎提交issue!(如果有pr就更好了~)

使用说明

TL;DR

查询条目: [[条目名]] [[prefix:条目名]]

查询条目(方法2): wiki 条目名 wiki prefix:条目名

查询模板: {{模板名}} {{prefix:模板名}}

绕过api查询条目: ((条目名)) ((prefix:条目名))

添加(全局)Wiki: wiki.add wiki.add.global

删除(全局)Wiki: wiki.delete wiki.delete.global

修改(全局)默认Wiki: wiki.default wiki.default.global

查看Wiki列表: wiki.list wiki.list.global

其中所有非全局指令均需要在目标群中进行,所有全局指令均只有Bot管理员能执行

查询功能

查询功能的语法和标准的mediawiki内链格式基本一致:

使用半角中括号包裹要查询的条目名,如 [[帮助]]

使用半角大括号包裹要查询的模板名,如 {{测试模板}}

(PS:直接使用[[Template:模板名]]也是可行的)

此外,方便起见,也可以用wiki 条目名 wiki prefix:条目名的方法查询

Bot会尝试去调取目标wiki的api,并获取对应标题的页面信息(默认允许重定向、跨wiki、简繁转换)。如果未找到对应条目,或者对应页面是消歧义页面, 则会提供数字来选择。如果调用api失败或者未配置api,会回落到字符串拼接的方式生成链接。

Tip:如果api返回的结果不是你想要的,可以使用半角小括号包裹条目名以绕过api,如 ((帮助))

当绑定了多个wiki时,需要指定前缀以查询默认wiki之外的wiki,例如,假如将某个wiki的前缀设置为flan,且不是默认wiki,则查询命令对应为[[flan:帮助]]

管理功能

  • wiki列表
    • 权限:所有人可用
    • 语法:wiki.list
    • 返回:当前群绑定的wiki列表,以及全局wiki列表

单个群的管理

以下操作均需在目标群内进行,bot管理员和群管理员均有权限操作

  • 添加wiki

    • 语法 wiki.add
    • 参数:
      • 前缀:用于区分wiki的前缀,仅支持字母、数字和下划线,不能和本群已有的重复,但可以和全局已有的重复,此时本地设置优先。另外,为了防止和mediawiki的名字空间冲突,bot默认屏蔽了部分名字空间名作为前缀的能力,也请在绑定前先了解目标wiki的名字空间情况。
      • api地址(可选):目标wiki的mediawiki api的地址。某些wiki可能限制api调用,此时可以回复0来不设置api。该地址通常可以在目标wiki的Special:版本#接入点URL页面中找到。或者也可以尝试这些一般的格式:
      https://www.example.org/api.php (如萌娘百科)
      https://www.example.org/w/api.php (如维基百科)
      
      • 通用url:目标wiki的条目路径。通常来讲,在该url后加上正确的条目名即可访问目标条目。可以在目标wiki的Special:版本#接入点URL中找到(“条目路径”中的$1即条目名)
      例如,对维基百科:https://www.example.org/wiki
      对萌百等:https://www.example.org/
      
  • 删除wiki

    • 语法 wiki.delete
    • 参数:
      • 前缀:要删除的wiki的前缀
  • 设置默认wiki

    • 语法 wiki.default
      • 参数:
        • 前缀:要设置默认的wiki的前缀
    Tip:本群/全局绑定的的一个wiki将被自动设置为本地/全局的默认wiki,当本地/全局绑定的默认wiki被删除时会自动清除对应的默认wiki设置,无需手动操作。
    

全局管理

以下操作可以在群内进行,也可以私聊进行,只有bot管理员有权限操作

  • 添加全局wiki

    • 语法:wiki.add.global
      • 参数同上
  • 删除全局wiki

    • 语法:wiki.delete.global
      • 参数同上
  • 设置全局默认wiki

    • 语法:wiki.default.global
      • 参数同上

附加说明

本地和全局

bot管理员可以设置全局的wiki,全局wiki的设计意图在于回落,换句话说,本地设置无条件优先于全局设置。当且仅当在以下情况下,全局设置会被应用:

  1. 本地没有绑定任何wiki
  2. 本地没有设置默认前缀,而查询请求中又不包含前缀
注意:如果本地有和全局默认前缀相同的wiki时,本地的wiki仍将被优先调用
  1. 本地设置了默认前缀,但是本地不存在该wiki
注意:当前缀在全局中也不存在时,前缀将被视为名字空间,直接和条目名一并传入api进行查询
  1. 查询请求中包含的前缀在本地不存在

API调用

为了提供更准确的结果,默认情况下bot会调用mediawiki api查询条目。当api无法正常调用时,会使用通用url和条目名拼接作为回落。 如果返回了错误的结果,可以使用小括号查询来绕过api。

在某些情况下,你可能希望限制调用频率,如目标Wiki的api调用频率限制严格,或者目标wiki的防火墙会阻断高频请求 (萌百:你报我域名算了) 。 为简化查询流程,本插件并不提供对应功能,(不然频率限制比核心功能代码还长了) 。如果确有需求,可以考虑使用Flandre ,她带有频率限制以及适配了频率限制的wiki组件。如果你将本插件独立使用,可以考虑使用其他频率限制插件来解决(不过nonebot目前似乎还没有这类插件……)。

根据我个人在一些wiki项目的QQ群观摩 (潜伏) 的经验来说,群bot的wiki功能被调用的频率并不会很高,因此除非你将bot同时置于多个群, 并且都连接到同一个wiki,或者有人恶意利用bot(事实上由于bot不响应私聊的查询请求,要达到这种效果只能在群聊中刷屏),不然碰上调用频率限制的可能性还是很低的

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-mediawiki-0.1.10.tar.gz (32.2 kB view hashes)

Uploaded Source

Built Distribution

nonebot_plugin_mediawiki-0.1.10-py3-none-any.whl (31.3 kB view hashes)

Uploaded Python 3

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