seredos/rocketbot

安装: 5

依赖: 0

建议者: 0

安全: 0

星标: 0

分支: 0

类型:项目


README

pipeline status coverage report

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报告

jdepend pyramid