seredos / rocketbot
Requires
- php: >=8.0
- ext-ctype: *
- ext-iconv: *
- ext-mbstring: *
- composer/package-versions-deprecated: 1.11.99.2
- doctrine/doctrine-bundle: ^2.4
- doctrine/doctrine-migrations-bundle: ^3.1
- doctrine/orm: ^2.9
- google/cloud-dialogflow: ^0.22.0
- guzzlehttp/guzzle: ^7.3
- guzzlehttp/psr7: ^1.8
- nyholm/psr7: ^1.4
- php-http/client-common: ^2.4
- php-http/discovery: ^1.14
- psr/http-client: ^1.0
- psr/http-message: ^1.0
- symfony/console: 5.3.*
- symfony/dotenv: 5.3.*
- symfony/flex: ^1.3.1
- symfony/framework-bundle: 5.3.*
- symfony/monolog-bundle: ^3.7
- symfony/proxy-manager-bridge: 5.3.*
- symfony/runtime: 5.3.*
- symfony/yaml: 5.3.*
Requires (Dev)
- pdepend/pdepend: ^2.10
- phpmd/phpmd: ^2.10
- phpstan/phpstan: ^0.12.94
- phpstan/phpstan-symfony: ^0.12.41
- phpunit/phpunit: ^9.5
- symfony/browser-kit: ^5.3
- symfony/css-selector: ^5.3
- symfony/maker-bundle: ^1.33
- symfony/phpunit-bridge: ^5.3
Conflicts
Replaces
README
rocket.bot
这是一个简单的机器人,会在一天中的特定时间向RocketChat服务器发送消息。
用法
docker
使用此机器人的最简单方法是将其作为Docker镜像。可以通过以下参数指定,以便程序相应地向聊天室发送登录/注销消息
docker run --name my-own-mysql \
-e MYSQL_ROOT_PASSWORD=mypass123 \
-d mysql:8.0
docker run -e ROCKETCHAT_URL="https://your.rocket.server" \
-e ROCKETCHAT_USER="yourUserName" \
-e ROCKETCHAT_PASSWORD="yourPassword" \
-e ROCKETCHAT_ROOM="general" \
-e DATABASE_URL="mysql://root:mypass123@database:3306/rocketbot?serverVersion=8.0" \
--link my-own-mysql:database \
--rm seredos/rocketbot:latest rocket:bot
如果您想使用意图发布或意图反应处理程序,还需要Google Cloud凭据。(见 https://cloud.google.com/docs/authentication/getting-started)
默认情况下,系统配置为在工作日的上午10点和下午7点发送消息。
这里还有可用于运行机器人的 docker-compose。
composer安装
如果已安装composer,则还可以通过composer安装应用程序
export PATH="/home/[user]/.composer/vendor/bin:$PATH"
composer global require seredos/rocketbot
rocketbot rocket:bot
手动安装(最新开发版)
可以从 这里 下载包含应用程序的tar.gz文件。运行php8是必需的!
在应用程序中,存在一个.env文件,可以在此处设置环境变量。
...
ROCKETCHAT_URL=http://rocketchat:3000
ROCKETCHAT_USER=bot
ROCKETCHAT_PASSWORD=123
ROCKETCHAT_ROOM=general
之后,可以使用以下命令启动机器人
php rocketbot rocket:bot
命令行参数
名称 | 描述 |
---|---|
间隔 | 检查聊天或发送消息的间隔(默认1秒) |
示例
docker run -e ROCKETCHAT_URL="https://your.rocket.server" \
-e ROCKETCHAT_USER="yourUserName" \
-e ROCKETCHAT_PASSWORD="yourPassword" \
-e ROCKETCHAT_ROOM="general" \
--rm seredos/rocketbot:latest \
rocket:bot \
--interval=2 \
-vvv
# or
php rocketbot rocket:bot --interval=2 -vvv
配置
机器人通过一系列处理程序进行配置,这些处理程序根据指定的间隔重复执行。可以通过配置文件config/packages/bot_handler.yaml定义要执行的处理程序。
docker run ... \
-v your/bot_handler.yaml:/app/config/packages/bot_handler.yaml \
--rm seredos/rocketbot:latest \
rocket:bot
# Default configuration for extension with alias: "bot_handler"
bot_handler:
# the first executed handler name in list
default_handler: ~ # Required
timezone: Europe/Berlin
handlers:
# Prototype
name:
# the handler type (see documentation)
type: ~ # Required
# the next called handler name
next: ~
根据指定的类型,会产生进一步的参数
组
组处理程序用于激活多个处理程序列表。为此,处理程序执行所有指定参数的处理程序
bot_handler:
default_handler: group_handler
handlers:
group_handler:
type: group
handlers:
- handler1
- handler2
handler1:
...
handler2:
...
排除日
处理程序用于排除某些星期几。因此,只有当当前日不是指定的星期几之一时,此处理程序才执行下一个处理程序
bot_handler:
default_handler: day_exclude_handler
handlers:
day_exclude_handler:
type: day_exclude
days: [Sunday, Saturday]
next: handler1
handler1:
...
时间触发器
此处理程序仅在一天中的某个特定时间执行下一个处理程序
bot_handler:
default_handler: time_triggger_handler
handlers:
time_triggger_handler:
type: time_trigger
time: 10:00
next: handler1
handler1:
...
节假日排除
只有当当前日不是节假日时,此处理程序才执行下一个处理程序
bot_handler:
default_handler: holiday_exclude_handler
handlers:
holiday_exclude_handler:
type: holiday_exclude
countryCode: DE-BB
next: handler1
handler1:
...
时间管家
此处理程序仅在Timebutler内部当前有特定事件活动时触发下一个处理程序。以下示例仅在无对应过滤器的事件发生的日子里激活以下处理程序。
bot_handler:
default_handler: time_butler_handler
handlers:
time_butler_handler:
type: time_butler
filter: '/[ \w]*, Homeoffice/m'
invert: true
handler1:
...
此处理程序还需要另一个环境变量,其中包含Timebutler上ics文件的路径
TIME_BUTLER_ICS=/path/[cryptname].ics
间隔
此处理程序总是在一定间隔内执行以下处理程序
bot_handler:
default_handler: interval_handler
handlers:
interval_handler:
type: interval
interval: PT10S
next: handler1
handler1:
...
发送消息
此处理程序将指定的消息发送到Rocket Chat房间
bot_handler:
default_handler: message_handler
handlers:
message_handler:
type: send_message
room: general
message: testmessage
意图存储
此处理程序查看房间的历史记录,并将包含相应关系的所有包含反应的消息存储起来。
bot_handler:
default_handler: intent_handler
handlers:
intent_handler:
type: intent_store
room: general
context: intent_context
意图发布
此处理程序将保存的意图发送到适当的Dialogflow项目
bot_handler:
default_handler: intent_handler
handlers:
intent_handler:
type: intent_publish
context: intent_context
意图反应
此处理程序遍历房间的历史记录,将消息发送到相应的Dialogflow项目,然后输出相应的响应(如果有)
bot_handler:
default_handler: intent_handler
handlers:
intent_handler:
type: intent_react
room: general
context: intent_context
机器人回答
此处理程序在直接渠道中自动发送消息。当收到消息时。(例如,休假通知)
bot_handler:
default_handler: bot_answer_handler
handlers:
intent_handler:
type: bot_answer
message: vacation notification
开发环境
为了使xdebug(通过docker)工作,必须使用正确的IP设置变量HOSTIP。
export HOSTIP=`ifconfig| grep 192.168 | grep 'inet ' | awk '{print $2}'`
如果需要,必须将gitlab仓库注册以使用docker容器。
docker login registry.gitlab.com
然后可以启动并使用开发环境。
make up-rocket-chat
# or
make install-dev
make run-dev
$root@123:/app# rocketbot rocket:bot
要运行phpstan,请使用以下命令
make run-phpstan
要运行phpdepend,请使用以下命令
make run-phpdepend
要运行phpmd,请使用以下命令
make run-phpmd
要运行测试,请使用以下命令
make run-tests
最新报告
覆盖率报告
https://seredos.gitlab.io/rocketbot/coverage/
phpdepend报告