nopolabs/yabot

另一个机器人

安装: 219

依赖: 2

建议者: 0

安全: 0

星标: 3

关注者: 3

分支: 1

开放问题: 2

类型:package

dev-master 2019-06-17 05:17 UTC

This package is auto-updated.

Last update: 2024-09-17 16:40:08 UTC


README

Build Status Code Climate Scrutinizer Code Quality License Latest Stable Version

yabot 是一个用 php 编写的 slack 聊天机器人。

快速开始

查看 tabot-template 了解如何使用 yabot 构建自己的机器人功能。

架构

我在 2017-07-17 的 PHPdx 用户组中做了演示:[PDF](https://github.com/nopolabs/yabot/blob/HEAD/Yabot-PHPdx-2017-07-18.pdf)

配置

Yabot 使用 Symfony 依赖注入容器进行配置。

yabot.php 加载三个配置文件:vendor/nopolabs/yabot/config/yabot.xmlconfig/plugins.ymlconfig.php

vendor/nopolabs/yabot/config/yabot.xml 定义了 Yabot 使用的核心服务和可用于插件从容器中获取的服务。您不需要修改此文件。

config/plugins.yml 为配置您的 Yabot 应用程序的插件和共享服务提供了一个位置。请参阅下文的插件讨论。

config.php 提供了一个设置或覆盖运行时设置的位置。

导入配置文件

日志记录

日志记录在 config.php 中配置

'log.file' => 'logs/bot.log',
'log.name' => 'bot',
'log.level' => 'DEBUG',

将 'log.file' 设置为 'php://stdout' 在开发期间可以将日志信息定向到您启动 yabot 的终端。

插件

查看 [yabot-plugins](https://github.com/nopolabs/yabot-plugins) 以获取示例。

Yabot 使用插件来了解要监听什么以及如何响应。

src/Examplessrc/Reservationssrc/Queue 中有示例。

最小化,插件必须实现 Nopolabs\Yabot\Bot\PluginInterface

plugins.yml 中标记为 yabot.plugin 的插件将自动加载

services:
    plugin.help:
        class: Nopolabs\Yabot\Bot\HelpPlugin
        arguments:
            - '@logger'
            - '@yabot'
        tags:
            - { name: yabot.plugin }

工作原理

Yabot 使用 Slack 的 实时消息 API

消息事件按照它们加载的顺序发送到每个插件。

插件有机会对它们接收到的消息做出反应,例如回复,并且可以选择标记消息为已处理以中断进一步的分发。

插件配置用于选择插件将响应哪些消息以及如何响应。

插件配置

使用 PluginTrait 构建的插件提供了一个默认配置,该配置可以在 config.php 中覆盖,例如。

'plugin.help' => [
    'priority' => PluginManager::DEFAULT_PRIORITY, // optional, higher priority is dispatched sooner
    'prefix' => PluginManager::AUTHED_USER_PREFIX, // optional, string
    'isBot' => false,                              // optional, true, false, or null
    'channels' => [],                              // optional, array of strings
    'users' => [],                                 // optional, array of strings
    'matchers' => [
        'yabotHelp' => [
            'isBot' => null,                          // optional, true, false, or null
            'channels' => [],                         // optional, array of strings
            'users' => [],                            // optional, array of strings
            'pattern' => "/^help (?'topic'\\w+)\\b/", // pattern applied by preg_match()
            'method' => 'help',                       // method called to handle accepted messages
        ],
    ],
],

匹配器简写语法

// shorthand:
'help' => "/^help (?'topic'\\w+)\\b/",

// expands to:
'help' => [
    'isBot' => null,   // null matches bot or non-bot
    'channels => [],   // empty array matches any channel
    'users' => [],     // empty array matches any user
    'pattern => "/^help (?'topic'\\w+)\\b/",
    'method' => 'help',
],

如果模式匹配,则调用插件对象上的方法,该方法带有消息和由匹配器模式捕获的任何字段。

响应消息

在消息所在的同一频道中回复

// assuming: 'help' => "/^help (?'topic'\\w+)\\b/"
public function help(MessageInterface $msg, array $matches)
{
    $topic = $matches[1];
    $msg->reply("you want help with $topic");
}

在 Thread 中

    $msg->thread("here are the details...");

在特定频道中

    $msg->say("lunchtime!", 'general');

用户和频道

Slack 消息使用 id 来引用用户和频道,例如。

Slack\Client 管理 Slack\UsersSlack\Channels 对象,并提供帮助将用户和频道名称映射到 id 以及将 id 映射到名称的方法。

消息格式化和附件

Yabot 使用 Slack REST API 发布消息,因为 WebSocket API 不支持格式化和附件。请参阅:[Slack API Messages](https://api.slack.com/docs/messages)