portlandlabs / slackbot
使用slack RTM API和slack Web API的Slackbot。基于PSR组件构建
Requires
- php: ^7.2
- ext-json: *
- ext-pcntl: *
- buttress/collecterator: ^1.0
- cache/filesystem-adapter: ^1.0
- cleentfaar/slack: ^0.20.1
- clue/arguments: ^2.0
- guzzlehttp/guzzle: ^6.3
- illuminate/config: ^5.4
- illuminate/container: ^5.7
- league/climate: ^3.2
- nunomaduro/collision: ^2.0
- ratchet/pawl: ^0.3.1
- react/promise: ^2.5
- textalk/websocket: ^1.2
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-11 17:35:25 UTC
README
这个SlackBot是一个功能齐全的Slackbot,模仿了老式的IRCbot,并具有新式高级bot的功能。您可以对任意消息做出反应,例如在消息中跟踪表情符号“给@user一些 ❤️”,或者构建简单的呼叫和响应风格的消息,例如@bot dosomething
入门指南
设置
首先,通过将.env.dist
复制到.env
并配置所需详情来配置您的slackbot
$ cp .env.dist > .env
运行bot
Slackbot由一个PHP脚本驱动,运行它以开始
$ php slackbot.php
权限和角色
Slackbot动作由roles
管理。可用的角色有Bot
、User
和Admin
命令
命令由通过RTM
API流动的事件触发。任何类型为message
的事件都会通过命令堆栈流动。
基本命令定义了->shouldHandle(Message $message)
和->handle(Message $message)
,但SimpleCommand
使实现更加容易。扩展SimpleCommand
的命令与控制台命令的工作方式非常相似。声明您的$signature
属性和一个run(Message $message, ArgumentManager $manager)
方法,父类将管理所有挂钩。
向bot添加命令
您可以通过bot的命令管理器向bot添加命令
$bot->commands()->addCommand(CustomCommand::class);
添加默认命令
我们已经将默认命令包装在一个简单的提供者中
(new \PortlandLabs\Slackbot\Command\DefaultProvider())->register($bot);
向Slack发送消息
有几种方法可以从命令发送消息到Slack
-
RTM
API带有打字指示器当使用
RTM
API时,您有权触发打字指示器(这样Slack就会说bot正在打字)$this->bot->feignTyping($channel, $message)
此方法的结果是一个当Slack确认发送的消息时解决的Promise。
-
RTM
API不带打字指示器如果您不想有(令人毛骨悚然的)打字指示器,并且想让Slack知道您的bot不会打字,
$this->bot->rtm()->sendMessage($channel, $message)
此结果也是一个Promise
-
Web
API带有更新能力Web API使用HTTP向Slack发送消息,因此可能比使用
RTM
API慢一些,但具有大量附加功能的优势。简单用法:
最简单的用法是与Payload Builder一起使用$api = $this->bot->api(); $api->getBuilder()->send($message)->to($channel)->withIcon($icon)->execute($api); // Update the previously sent message $api->getBuilder()->update()->withText($newText)->execute($api);
复杂用法:
如果您需要更多功能或不同的端点,可以直接构建有效负载并将其与API一起发送$payload = new ChatPostMessagePayload(); $this->prepare($payload); // Send the payload $payloadResponse = $this->bot->api()->send($payload);