首页 > 其他分享 >基于酷Q的工作秘书机器人

基于酷Q的工作秘书机器人

时间:2023-06-02 18:07:23浏览次数:37  
标签:jira 基于 req String 机器人 秘书 param json 消息

环境准备

名称

版本

Jdk

8

groovy

2.4.12

gradle

4.6

酷Q

5.12.3A

酷Q Http Api插件

4.6.2

环境安装

  1. jdk安装
  2. groovy安装
  3. gradle安装
  4. 酷Q下载后直接解压
  5. 酷Q Http插件安装

将io.github.richardchien.coolqhttpapi.cpk文件复制到酷Q根目录下的app目录下,注意插件的json配置,通过CQA.exe启动输入你的机器人QQ号

本例配置,酷Q home/app/io.github.richardchien.coolqhttpapi.cpk/config.json,使用的时候把json注释去掉,这里只是用于属性说明

{
    "general": {
        "host": "0.0.0.0",
		// 机器人接收消息接口
		"post_url": "http://127.0.0.1:6666/coolQ"
    },
	// key为机器人qq号
    "2743046799": {
		// 酷Q消息接收token
        "access_token": "Mgep4rV49rM8Jf",
		// 酷Q接收消息端口
        "port": 5700
    }
}

项目结构

该项目使用groovy开发,基于spring-boot,使用grandle构建,开发ide为IntelliJ IDEA

  • 代码结构
  • 基于酷Q的工作秘书机器人_spring

  • 配置说明

i. 配置文件

server:
  # web端口
  port: 6666

logging:
  level:
    org.springframework.*: info
    org.apache.http.*: error
    org.hibernate.*: error
    com.github.*: debug

spring:
  gson:
    field-naming-policy: lower_case_with_underscores

secretary:
  # 酷Q配置
  cool:
    # 消息发送地址 酷Q运行主机及json配置的端口
    url: http://192.168.2.86:5700
    # 消息token
    token: Mgep4rV49rM8Jf
    # 用于jira&gitlab webhooks消息发送
    # 工作群/讨论组id 1575716762
    groupId: 1575716762
    # 群类型 discuss/group
    groupType: discuss
  # 茉莉机器人配置
  itpk:
    url: http://i.itpk.cn
    apiKey: f5c89b45e875434b4be5d1bd54266db6
    apiSecret: 3xj9lxqied51
  # jira用户名和qq关系
  # 通过经办人jira帐号绑定对应人工作QQ号
  # 没用到jira的webhooks可以忽略
  jira:
    Admin: 412810549
    lisi: 410571470
    wangwu: 1579231853
    zhaoliu: 1786370596

ii. retrofit配置

@Configuration
class RetrofitConfig {
    @Value("\${secretary.cool.url}")
    String coolQUrl
    @Value("\${secretary.itpk.url}")
    String itpkUrl
    @Autowired
    Gson gson

    @Bean
    Retrofit cool() {
        new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(this.gson))
                              .baseUrl(this.coolQUrl)
                              .build()
    }

    @Bean
    Retrofit itpk() {
        new Retrofit.Builder().baseUrl(this.itpkUrl).build()
    }

    @Bean
    CoolQApi coolQApi() {
        this.cool().create(CoolQApi.class)
    }

    @Bean
    ItpkApi itpkApi() {
        this.itpk().create(ItpkApi.class)
    }
}
  • 代码说明
  1. 酷Q上报接口CoolQController
@PostMapping
    def receive(HttpServletRequest request) {
        String json = request.getReader().lines().collect(Collectors.joining("\n"))
        log.debug(json)
        def type = this.gson.fromJson(json, TypeReq.class)
        switch (type.getPostType()) {
            case POST_TYPE_MESSAGE:
                // 只处理私聊/群消息/讨论组消息
                switch (type.getMessageType()) {
                    case MESSAGE_TYPE_PRIVATE:
                        def req = this.gson.fromJson(json, PrivateMessageReq.class)
                        return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
                    case MESSAGE_TYPE_GROUP:
                        def req = this.gson.fromJson(json, GroupMessageReq.class)
                        if (req.needReply()) {
                            return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
                        }
                        break
                    case MESSAGE_TYPE_DISCUSS:
                        def req = this.gson.fromJson(json, DiscussMessageReq.class)
                        if (req.needReply()) {
                            return new MessageResp(this.itpkComponent.message(req.getLegalMessage()))
                        }
                        break
                    default:
                        log.warn("暂时不支持的消息类型{}", type.getMessageType())
                        break
                }
                break
            default:
                log.warn("暂时不支持的推送消息类型{}", type.getPostType())
                break
        }
    }

目前上报消息只处理了消息类型,可以对私聊、群消息、讨论组消息进行处理,本例直接对接了茉莉机器人,当私聊时或者在群、讨论组@机器人时,会调用茉莉机器人的回答回复并@该用户

  1. jira webhooks接口JiraController
@PostMapping
   void jira(HttpServletRequest request) {
       String json = request.getReader().lines().collect(Collectors.joining("\n"))
       log.debug(json)
       def jiraVo = this.gson.fromJson(json, JiraVo.class)
       this.sendMessageComponent.sendJiraMsg(jiraVo.user(), jiraVo.message())
   }

收到jira触发的动作,调用酷Q的http接口发送消息通知对应的经办人
3. gitlab webhooks接口GitlabController
通知开发人员及时合并代码尽量避免冲突
4. 酷Q消息发送组件SendMessageComponent
消息发送api

/**
    * 发送jira消息
    * @param key jira帐号
    * @param message 消息内容
    */
   void sendJiraMsg(String key, String message) {
       SendAllMessageReq req = new SendAllMessageReq()
       req.setId(this.groupType, this.groupId)
       req.setMessage(Optional.ofNullable(this.atUserPrefix(key)).orElse("") + message)
       req.setAutoEscape(false)

       this.sendMsg(req)
   }

   /**
    * 发送gitlab消息通知
    * @param message 消息内容
    */
   void sendGitlabMsg(String message) {
       SendAllMessageReq req = new SendAllMessageReq()
       req.setId(this.groupType, this.groupId)
       req.setMessage(message)
       req.setAutoEscape(true)
       this.sendMsg(req)
   }

   private void sendMsg(SendAllMessageReq req) {
       try {
           def execute = this.coolQApi.sendMsg(this.header(), req).execute()
           log.debug(this.gson.toJson(execute.body()))
       } catch (Exception e) {
           log.debug(e.getMessage(), e)
       }
   }

   /**
    * qq @指定用户
    * @param key jira帐号
    * @return CQ码
    */
   private String atUserPrefix(String key) {
       return String.format("[CQ:at,qq=%s] ", this.group.get(key))
   }

   /**
    * 酷Q消息发送token
    * @return token
    */
   private String header() {
       return String.format("Token %s", this.token)
   }
  1. 消息发送http客户端 使用的retrofit
interface CoolQApi {
   /**
    * 群消息发送
    * @param header token
    * @param req 消息内容
    * @return 应答
    */
   @POST("/send_group_msg")
   @Headers("Content-Type:application/json")
   Call<CoolResp> sendGroupMsg(@Header("Authorization") String header, @Body SendGroupMessageReq req)

   /**
    * 讨论组消息发送
    * @param header token
    * @param req 消息内容
    * @return 应答
    */
   @POST("/send_discuss_msg")
   @Headers("Content-Type:application/json")
   Call<CoolResp> sendDiscussMsg(@Header("Authorization") String header, @Body SendDiscussMessageReq req)

   /**
    * 私人消息发送
    * @param header token
    * @param req 消息内容
    * @return 应答
    */
   @POST("/send_private_msg")
   @Headers("Content-Type:application/json")
   Call<CoolResp> sendPrivateMsg(@Header("Authorization") String header, @Body SendPrivateMessageReq req)

   /**
    * 发送消息
    * @param header token
    * @param req 消息内容
    * @return 应答
    */
   @POST("/send_msg")
   @Headers("Content-Type:application/json")
   Call<CoolResp> sendMsg(@Header("Authorization") String header, @Body SendAllMessageReq req)
}

运行及打包

  1. 直接运行Application
  2. 使用gradle的bootJar task打包,然后java -jar 直接运行

运行效果

  1. 私聊
  2. 基于酷Q的工作秘书机器人_酷Q_02

  3. 群聊
  4. 基于酷Q的工作秘书机器人_酷Q_03

  5. 工作讨论组
  6. 基于酷Q的工作秘书机器人_json_04

结束基于酷Q的工作秘书机器人

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权


标签:jira,基于,req,String,机器人,秘书,param,json,消息
From: https://blog.51cto.com/u_7583030/6404417

相关文章

  • 基于Django的博客系统
    基django的博客系统,界面展示首页前端界面如下:文章页面:后台页面:文章页面:##项目结构图代码主要文件结构如下:分别介绍下各个目录:accounts:用户模块blog:博客模块comments:评论模块oauth:第三方登录模块owntracks:owntracks位置追踪模块servermanager:服务管理模块templates:页面文......
  • 基于 Vue BootStrap的迷你Chrome插件
    安装安装VisualStudioCode和Chrome,自行翻墙详细安装这里略过安装包管理工具用管理员身份运行cmd,输入:npminstall-gbower(全局安装)创建新建目录brochure进入目录运行bowerinstallbootstrap@3vueaxios成功!新建css,js目录,并在对应的目录下面新建index.css和inde......
  • 基于Qt的A*算法可视化分析
    需求之前做过一个无人车需要自主寻找最佳路径,所以研究了相关的寻路算法,最终选择A算法,因为其简单易懂,是入门级的寻路算法。但是在验证的算法的时候,没有直观的感受,总是觉得会有什么问题,所以我就写了一个可视化的A算法验证,界面基于Qt开发。项目说明本项目主要分为2个部分,Qt绘制网格......
  • 基于Selenium库模拟用户行为的QQ空间爬虫
    QQ空间爬虫代码链接:https://github.com/hhr346/QQ_zone_crawl该程序的主要实现过程是进入某位好友的空间中,并自动爬取说说的文本内容并存储到txt文件中。方法是使用Chrome浏览器的自动执行功能,来实现翻页,并对html的源代码进行文本提取,通过正则表达式来实现某一块内容的提取。将......
  • 39基于java的酒店管理系统设计与实现
    本章节给大家带来一个基于java的酒店管理系统设计与实现,可用于酒店订票系统,酒店预订系统,酒店信息管理系统,app订房系统设计与实现;引言随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多企业的眼球之中,随之就产生了“酒店信息管理系统”,这样就......
  • 基于Grafana的WebUI添加Prometheus数据源(三)
    基于Grafana的WebUI添加Prometheus数据源(三)1、Grafana介绍1.1什么是GrafanaGrafana是一款近几年比较流行的开源数据绘图工具平台。Grafana原生支持包括但不限于InfluxDB,MySQL,OpenTSDB,PostgreSQL和Prometheus等多种数据源作为输入源数据。官方地址:https://grafana.com......
  • 嵌入式进阶之关于SPI通信的案例分享——基于全志科技T3与Xilinx Spartan-6处理器
    本文主要介绍基于全志科技T3与XilinxSpartan-6的通信案例。适用开发环境:Windows开发环境:Windows764bit、Windows1064bitLinux开发环境:Ubuntu18.04.464bit虚拟机:VMware15.1.0U-Boot:U-Boot-2014.07Kernel:Linux-3.10.65LinuxSDK:LinuxSDK_AA_BB_CC_DD(基于T3_LinuxSDK_V1.......
  • 基于shiro+jwt的真正rest url权限管理,前后端分离
    bootshiro&usthebootshiro是基于springboot+shiro+jwt的真正restfulURL资源无状态认证权限管理系统的后端usthe是restfulURL资源无状态认证权限管理系统的前端,基于angular+typeScript+adminLte区别于一般,提供页面可配置式的,动态的restfulapi安全管理支持数据传输动态......
  • ChatGPT + Flutter快速开发多端聊天机器人App
    ChatGPT+Flutter快速开发多端聊天机器人Appdownload:3w51xuebccom剖析ChatGPT的应用场景和案例ChatGPT是一种基于人工智能技术的自然语言处理模型,它可以通过对话的方式与用户进行交互。在本篇文章中,我们将介绍ChatGPT的应用场景和相关案例。ChatGPT的应用场景ChatGPT主要应用于......
  • 基于SSM实现酒店入住预定管理系统
    作者主页:编程指南针作者简介:Java领域优质创作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助文末获取源码 项目编号:BS-XX-138一,项目简介本项目主要基于SSM框架开发实现了一个酒店预定入住管理系统,前端用户可以实现......