Madoka Madoka
首页
  • 文档 v4
  • 旧版文档 v3
  • 开发文档 v4
  • 旧版开发文档 v3
更新日志
加入QQ群 (opens new window)
GitHub (opens new window)
首页
  • 文档 v4
  • 旧版文档 v3
  • 开发文档 v4
  • 旧版开发文档 v3
更新日志
加入QQ群 (opens new window)
GitHub (opens new window)
  • 插件开发文档

    • 开始
    • 创建一个新的插件
      • 创建一个基础插件框架
      • 如何匹配各个子命令
        • 示例
      • 完整实例
    • 命令解析器
    • 消息队列 & 消息发送器
    • 计划任务
    • 数据表配置
  • API列表
  • 其他语言SDK
  • developer-v4
  • 插件开发文档
MadokaProject
2022-03-20
目录

创建一个新的插件

在 app/plugin/extension 目录新建一个文件夹, 文件名即为该插件的 root_dir.

Madoka 在启动时会自动加载 extension 目录下每个子目录中的 python 文件,因此支持一个插件中包含多个命令处理文件,如 login.py 做登录,logout.py 做登出。大多时候,单个命令处理文件足以。若未提及,本文档均以单个命令文件来写。

注意

Madoka v4 不再支持单个插件注册多个命令

# 创建一个基础插件框架

from app.util.alconna import Commander


command = Commander(
    '<命令头>',
    '<命令简短帮助>',
    <... Alconna 子命令参数>,
    <... 其它配置>=<...>
)

至此,你就得到了一个基础插件。它注册了一个命令,但是它什么都不会做,因为你还没有告诉它如何处理命令。

# 如何匹配各个子命令

为了方便的处理一个命令中的各种子命令,我们提供了下面两个装饰器:

  • Commander.no_match(): 无匹配子命令时使用,默认返回帮助菜单。可在某些特殊情况下使用,如 .gp 直接返回个人资金。

  • Commander.parse(): 匹配子命令时使用(常用)(支持同时匹配多个子命令)

关于它们的参数解析,见 模块化处理命令

# 示例

下面我们以一个简单的命令匹配为例,它只处理好友消息,并且消息对象为超级管理员级别以上的用户。值得注意的是,我们还为它加上了10秒的频率控制。

from app.util.alconna import Commander
from app.util.graia import FriendMessage
from app.util.control import Permission

command = Commander(...)

@command.parse('...', events=[FriendMessage], permission=Permission.SUPER_ADMIN, friend_limit=10)
def <...>(...):
    pass

# 完整实例

接下来,我们以一个简单的完整插件为例,它可以回复用户发送的消息。处理所有来源的消息,但是只有超级管理员级别以上的用户才能使用。

from typing import Union
from app.util.alconna import Arpamar, Args, Commander
from app.util.graia import Friend, Group, message
from app.util.control import Permission

command = Commander(
    'echo',
    '复读发送的消息',
    Args['content': str]
)

@command.no_match(permission=Permission.SUPER_ADMIN)
async def echo(sender: Union[Friend, Group], cmd: Arpamar):
    await message(cmd.query('content')).target(sender).send()
上次更新: 2022/11/22, 00:08:13
开始
命令解析器

← 开始 命令解析器→

Theme by Vdoing | Copyright © 2021-2022 Madoka Project
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式