美文网首页
Docker配置并使用CoolQ机器人

Docker配置并使用CoolQ机器人

作者: 鸡龙 | 来源:发表于2019-05-08 21:39 被阅读0次

    各语言框架
    CoolQ HTTP API 插件
    近期要求搭建docker容器,就玩起了之前很早就想玩的CoolQ机器人。

    1、Docker拉取CoolQ环境

    sudo docker pull richardchien/cqhttp:latest
    sudo docker pull richardchien/cqhttp:4.8.0
    

    这里拉取的版本我拉取了4.8.0是因为之后我使用的java框架是只支持4.8.0的,所以在拉取的时候应该选取自己框架对应的版本拉取。

    2、创建镜像的参数

    我创建镜像的参数

    docker run -ti --rm --name cqhttp-test \
    --network host \
    -v $(pwd)/coolq:/home/user/coolq \
    -e COOLQ_ACCOUNT=106******** \
    -e CQHTTP_POST_URL=http://127.0.0.1:9999 \
    -e CQHTTP_SERVE_DATA_FILES=yes \
    richardchien/cqhttp:4.8.0
    

    朋友那挖的参数,比较全面,对应着看。

    #sudo docker run -ti --rm --name cqhttp-coolq \   #
    #             -d \   # daemon,后台运行
    #             --network host \   # host 模式下,容器的 localhost,就是宿主机的 localhost。即与宿主机共用网络
    #             -v ~/coolq:/home/user/coolq \   # 将容器的 /home/user/coolq 文件夹映射到宿主机
    #             -e COOLQ_ACCOUNT=$COOLQ_ACCOUNT  \   # 酷Q 账号(QQ账号)
    #             -e VNC_PASSWD=$VNC_PASSWD \     # nvc 密码
    #             -e FORCE_ENV=$FORCE_ENV \       # 强制覆盖原有配置,否则配置不会更新。。
    #             -e CQHTTP_USE_HTTP=no \         # 关闭 http api
    #             -e CQHTTP_USE_WS_REVERSE=yes  \  # 启用反向 websocket api
    #             -e CQHTTP_ACCESS_TOKEN=$CQHTTP_ACCESS_TOKEN  \  # api 连接时需要的 token
    #             -e CQHTTP_SECRET=$CQHTTP_SECRET \   # secret 用于数据签名,反向 websocket 中不需要(因为握手阶段没有数据要传输)
    #             -e CQHTTP_WS_REVERSE_API_URL=$CQHTTP_WS_REVERSE_API_URL  \
    #             -e CQHTTP_WS_REVERSE_EVENT_URL=$CQHTTP_WS_REVERSE_EVENT_URL  \
    #             -e CQHTTP_SERVE_DATA_FILES=$CQHTTP_SERVE_DATA_FILES  \  # 允许访问 data 文件夹中的文件
    #             richardchien/cqhttp:latest
    

    对于为什么需要,--network host,师傅说,程序访问酷Q,可以直接走端口映射。但是酷Q要将消息发给你,就有问题了,docker 内部访问宿主机,默认是要走网桥的
    咱也不知道,咱也不敢问。

    3、VNC登录QQ

    在这步我出现了问题,是因为我将9000的端口映射给了docker的GUI,pointer,然而我的VNC映射设置为--network host,所以只能将别的端口映射移开,将9000端口让给VNC界面。
    登录时要是一路顺风就没什么好说的,但会出现一个坑,就是异地登录,如果遇到异地登录会让你用chrome插件来验证,然而我尝试了也没什么用,
    验证码还是不会出现。


    获取chrome

    解决方法就是,在提示你用chrome的时候,你选择否,再登录一次就会使用到旧版的VNC。后面会让你开启设备锁发短信来验证登录(来自论坛管理回复,亲测有效)


    解决方式 登录QQ后的界面

    这个时候,部署就已经完成了

    4、调用API

    几个常用的调用API

    http://你的IP:5700/send_private_msg?user_id=QQ号&message=要发送的消息
    http://你的IP:5700/send_group_msg?group_id=QQ群号&message=要发送的消息
    http://你的IP:5700/delete_msg?message_id=消息ID
    

    5、使用java库响应QQ消息

    注意这里创建机器人对象的的openIP为返回消息的端口
    添加机器人账户为机器人接受消息的端口
    我使用的是PicqBotX框架

    机器人配置Json
    public class TestBot
    {
        public static void main(String[] args)
        {
            // 创建机器人对象 ( 传入配置 )
            PicqBotX bot = new PicqBotX(new PicqConfig(9999).setDebug(true));
    
            // 添加一个机器人账户 ( 名字, 发送URL, 发送端口 )
            bot.addAccount("Bot01", "127.0.0.1", 5700);
    
            // 注册事件监听器, 可以注册多个监听器
            bot.getEventManager().registerListeners(
                    new TestListener(), 
                    new RequestListener(),
                    new ExceptionListener()
            );
    
            // 启用指令管理器
            // 这些字符串是指令前缀, 比如指令"!help"的前缀就是"!"
            bot.enableCommandManager("bot -", "!", "/", "~");
    
            // 注册指令, 可以注册多个指令
            bot.getCommandManager().registerCommands(
                    new CommandSay(),
                    new CommandTest(),
                    new CommandVersion()
            );
    
            // 启动机器人, 不会占用主线程
            bot.startBot();
        }
    }
    
    有两个监听
    一个为事件监听器继承IcqListener类

    监听事件

    事件类名    事件介绍
    Event   所有事件(不推荐监听)
    EventMessage    所有消息事件
    EventDiscussMessage 讨论组消息事件
    EventGroupMessage   群聊消息事件
    EventPrivateMessage 私聊消息事件
    EventNotice 所有提醒事件
    EventNoticeFriendAdd    加好友提醒
    EventNoticeGroupAdminChange 所有群管理员数量更改事件
    EventNoticeGroupAdminSet    群员被设为管理员事件
    EventNoticeGroupAdminRemove 群员被取消管理员事件
    EventNoticeGroupMemberChange    所有群员数量更改事件
    EventNoticeGroupMemberDecrease  所有群员数量减少事件
    EventNoticeGroupMemberKick  群员被踢事件
    EventNoticeGroupMemberKickBot   自己被踢事件
    EventNoticeGroupMemberLeave 群员主动退出事件
    EventNoticeGroupMemberIncrease  所有群员数量增加事件
    EventNoticeGroupMemberApprove   群员被同意进群事件
    EventNoticeGroupMemberInvite    群员被邀请进群事件
    EventNoticeGroupUpload  上传群文件事件
    EventRequest    所有请求事件
    EventFriendRequest  加好友请求事件
    EventGroupAddRequest    加群请求事件
    EventGroupInviteRequest 拉你入群请求事件
    EventLocal  所有本地事件
    EventLocalSendMessage   所有本地向外发送的事件
    EventLocalSendDiscussMessage    发送讨论组消息事件
    EventLocalSendGroupMessage  发送群聊消息事件
    EventLocalSendPrivateMessage    发送私聊消息事件
    EventLocalHttpRecieveEvent  接收HTTP请求事件
    EventLocalHttpFailEvent 接收HTTP请求失败事件
    EventMeta   Meta事件
    EventMetaLifecycle  生命周期事件
    EventMetaHeartbeat  心跳事件
    
    @EventHandler
        public void 方法名(事件类型 event)
    
    另一个为指令,实现的是EverywhereCommand接口
    
    public class CommandVersion implements EverywhereCommand // 实现EverywhereCommand就是无论私聊群聊还是讨论组都能收到的指令
    {
        // 指令属性
        @Override
        public CommandProperties properties()
        {
            // 这个括号里填指令名和其他名称, 指令名必须至少有一个
            // 这个的话, 用"!v", "!version", 和"!版本"都能触发指令 (感叹号为你设置的前缀, 不一定必须要感叹号)
            return new CommandProperties("version", "v", "版本");
        }
        
        // 机器人接到指令后会执行这个方法 ( 实现不同的接口的话方法名不一定一样 )
        @Override
        public String run(EventMessage event, User sender, String command, ArrayList<String> args)
        {
            // 处理, 返回值会自动回复回去
            // 这里因为这个指令是用来查版本的, 所以直接返回字符串了
            return "TestBot - PicqBotX v4.10.1.928";
        }
    }
    

    例子都搬运自使用手册,这里只举最基础的。可以自行去插件下载页面看readme


    人工智障

    做大自然的搬运工,Cool!Q!

    相关文章

      网友评论

          本文标题:Docker配置并使用CoolQ机器人

          本文链接:https://www.haomeiwen.com/subject/ngfboqtx.html