skinnybot/skinny

一个用于在PHP中创建Discord机器人的框架。

v2.0.2 2019-10-27 00:13 UTC

This package is auto-updated.

Last update: 2024-09-19 09:32:42 UTC


README

Skinny Logo

使用 DiscordPHP 在PHP中创建Discord机器人的框架。

注意

这是机器人的核心。应用程序的骨架可以在 这里 找到。

安装

如果您只想使用和/或开发自己的机器人,您应该使用 Skinny Skeleton 作为项目的基准。安装步骤可以在那里找到。

要求

文档

摘要

核心

创建新的模块

机器人附带模块系统和模块管理器,允许您为自定义命令创建模块。您的模块必须实现 Skinny\Module\ModuleInterface

以下是一个模块的默认模板,例如命名为 Basic

src/Module/Modules/Basic.php

<?php
namespace Bot\Module\Modules;

use Skinny\Module\ModuleInterface;
use Skinny\Network\Wrapper;

class Basic implements ModuleInterface
{

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onChannelMessage(Wrapper $wrapper, $message)
    {
    }

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onPrivateMessage(Wrapper $wrapper, $message)
    {
    }

    /**
     * {@inheritDoc}
     *
     * @param \Skinny\Network\Wrapper $wrapper The Wrapper instance.
     * @param array $message The message array.
     *
     * @return void
     */
    public function onCommandMessage(Wrapper $wrapper, $message)
    {
    }
}

使用这三个函数,您可以处理 Discord 上的每条消息

  • 命令消息:带有有效命令的频道中的普通消息。
  • 私聊消息:私聊消息。
  • 频道消息:不带有效命令的频道中的普通消息。

例如,如果我们想执行 !say [text] 命令,我们可以在 onCommandMessage 函数中执行

public function onCommandMessage(Wrapper $wrapper, $message)
{
    switch ($message['command']) {
        case 'say':
            $wrapper->Channel->sendMessage($message['parts'][1]);

            break;
    }
}

然后我们需要在 config/commands.php 文件中添加此命令

'say' => [
    'params' => 1,
    'syntax' => 'Say [Message]'
]

这就完成了,您已经创建了一个 !say 命令。

变量 $message

此变量由 Skinny\Message\Message 类创建,是一个数组。例如,使用短语 !dev param1 param2 param3 etc,我们将得到以下数组

[
    'raw' => '!dev param1 param2 param3 etc',
    'parts' => [
            (int) 0 => '!dev',
            (int) 1 => 'param1 param2 param3 etc'
    ],
    'command' => 'dev',
    'message' => 'param1 param2 param3 etc',
    'commandCode' => '!',
    'arguments' => [
            (int) 0 => 'param1',
            (int) 1 => 'param2',
            (int) 2 => 'param3',
            (int) 3 => 'etc'
    ]
]

对象 $wrapper

此对象是 Skinny\Network\Wrapper 类的实例,用作包装器,以将 Discord 的所有类拆分,以便在开发模块时具有更好的可访问性和清晰度。

例如,对此对象执行 debug() 将生成以下输出

object(Skinny\Network\Wrapper) {
    ModuleManager => object(Skinny\Module\ModuleManager) {
        ...
    }
    Message => object(Discord\Parts\Channel\Message) {
        ...
    }
    Channel => object(Discord\Parts\Channel\Channel) {
        ...
    }
    Guild => object(Discord\Parts\Guild\Guild) {
        ...
    }
    Members => object(Discord\Repository\Guild\MemberRepository) {
        ...
    }
}

模块系统

正如我之前所说的,此机器人实现了一个模块系统。模块系统仅在调试模式下工作 仅此而已:模块系统首先加载文件内容,然后使用 preg_replace() 将原始类名替换为随机名称。之后,它创建一个副本并包含它。

当消息被触发时,模块系统将对它进行一些测试以确保它是有效消息,然后将其分配给所有已加载的模块。

插件

是的,您可以为此机器人创建插件。虽然我建议使用 composer 创建插件,但您也可以不使用 composer 创建插件,这在开发插件时可能很有用。您可以在此找到名为 Basic 的示例插件 这里

使用composer创建插件

使用 composer 创建插件很容易。首先,您必须创建一个如下的 composer.json 文件

{
    "name": "skinnybot/basic",
    "description": "A simple plugin for Skinny.",
    "homepage": "https://github.com/SkinnyBot/Basic",
    "keywords": ["discord", "bot", "skinny", "plugin"],
    "type": "skinny-plugin",
    "license": "MIT",
    "require": {
        "php": ">=5.6",
        "skinnybot/skinny": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "Basic\\": "src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "BasicTest\\": "tests"
        }
    },
    "minimum-stability": "stable"
}

注意:作曲器文件的类型必须为skinny-plugin,否则您的插件将无法工作。文件层次结构如下

/config/
    /bootstrap.php
    /commands.php
/src/
    /Module/
        /Modules/
            /Basic.php
composer.json

当您完成插件编码后,您当然必须在Packagist上发布它。

不使用composer创建插件

当您没有使用作曲器创建插件时,您的插件必须位于plugins文件夹中。让我们创建一个不带作曲器的相同基本插件,文件层次结构如下

config/
plugins/
    /Basic/
        /config/
            /bootstrap.php
            /commands.php
        /src/
            /Module/
                /Modules/
                    /Basic.php
src/
tmp/

创建插件后,您必须告诉作曲器执行dumpautoload事件,这样插件就会注册到vendor/skinny-plugins.php文件中,并更新您的自动加载器

composer dumpautoload

之后,您需要将插件加载到您的应用程序中的config/bootstrap.php文件中

Plugin::load('Basic');
//Or if you're using a bootstrap file :
Plugin::load('Basic', ['bootstrap' => true]);

其他

核心插件列表

  • 模块插件模块插件是一个允许您通过命令管理模块的模块。默认安装在Skinny骨架中。
  • 基本插件此插件主要用于演示如何创建插件以及测试目的。默认安装在Skinny骨架中。

贡献

按照此指南进行贡献

特别感谢

  • 感谢CakePHP团队及其用于创建插件系统的出色CakePHP核心类。