情迁QQ机器人JS插件/使用开发教程

2023-10-21 17:10

本文主要是介绍情迁QQ机器人JS插件/使用开发教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果不了解情迁QQ机器人的插件加载套路,请查看情迁软件分类的其它教程,这些教程还包含了lua插件开发教程和java插件开发教程等。js插件脚本优势
可以随便修改,无需编译,便捷分享,多人协作开发更方便。

js插件存放目录/sdcard/qssq666/robot_plugin_js电脑编写js
电脑配置adb然后推送到手机adb push plugin.js /sdcard/qssq666/robot_plugin_js/js插件手机端编写

机器人内部集成了开发工具可以直接编写而且可以随时模拟发送消息,
手机端开发工具功能强大支持语法高亮,格式化代码,以及快捷粘贴模板代码等。

pic
code2

DEMO测试代码

/*
编写时间 2018.11
JS插件的方法不受执行流程控制,因此测试这些代码的时候只能发送消息然后测试这些方法。
或者可以不写在主流程中,比如如下代码的测试专用可以解除注释,当机器人加载的时候会气泡提示的toast调试,
//可以直接运行 本文件放到内部存储 qssq666/robot_plugin_js 件夹改后缀名 为.js 然后在js插件管理列表刷新然后长按运行或者编辑再运行。
// 直接输入 adb push plugin.js /sdcard/qssq666/robot_plugin_js/ 推送到手机上。
电脑端 可以使用visual studio code开发,我会考虑弄自动补全api的事情。*///toast("插件被加载,插件名."+getPluginName())
//下面的调试代码需要通过日志查看软件或者电脑ADBConsole.exe查看。
//log.info("插件加载了,")
//log.warn("这是警告日志")
//log.error("红色错误日志")
//log.log.w"也是警告日志语法糖")
//log.debug("调试信息,")//测试专用代码区结束log.debug("你能看到本消息说明你点击的是运行按钮!")
-机器人插件加载区
/*** 收到一条消息调用此方法,返回true表示 消息由插件处理* 否则交给机器人自身的逻辑,比如自身有点歌系统之类的。* 本方法不定义将毫无意义。* @param {*} msgitem 消息体* @param {*} aiteList 艾特的用户列表* @param {*} hasAite 是否艾特了用户* @param {*} hasAiteMe 是否艾特了机器人*/
function onReceiveMsgIsNeedIntercept(msgitem, aiteList, hasAite, hasAiteMe) {log.w("msgitem:" + msgitem);if (aiteList) {log.w("aitelist count:" + aiteList.size());for (var i = 0; i < aiteList.size(); i++) {log.w("aitelist:" + i + ":" + aiteList.get(i).getNickname());}}log.w("call onReceiveMsgIsNeedIntercept")var text = msgitem.getMessage() //获取收到的消息内容log.w("receiveMsg." + text)var qq = msgitem.getSenderuin() // 哪个qq发的消息log.w("print toString[" + msgitem.toString()) //这个方法可以打印昵称,qq,消息内容,发送时间,等等。if (text == "JAVASCRIPT") {// chunkname.41 attempt to index ? (a nil value) zhaobuvar str = "Wellcome Use JAVASCRIPT Plugin! The is QssqRobot"msgitem.setMessage(str)print("item is nil?=" + String(msgitem.getClass() == nil) + ",className." + String(msgitem.getClass()))print("api obj is nil?=" + String(msgitem.getClass() == nil) + ",className." + String(api.getClass()))print(api.toString())api.showDebugToast("欢迎使用js机器人插件");// print();// print(msgitem.toString())api.sendMsg(msgitem) //是啥子消息我就回复啥消息 ,操作起来比较简单。return true} else if (text == "TESTMSG") {var apiCallBackclass = {onSucc: function (bytes) {msgitem = msgitem.clone();//如果调用了setMessage等set方法,必须使用clone,否则就必须返回true拦截消息不给机器人内部的逻辑处理,不然会出现混乱。log.info("queryWebSite result: " + new java.lang.String(bytes));var str = "jsplugin->" + new java.lang.String(bytes)msgitem.setMessage(str)api.sendMsg(msgitem);},onFail: function (code, exception) {log.e("error,code=" + code + ",exception:" + exception);//or log.e("error,code=" + code + ",exception:", exception);//print stackflow}};//这个逻辑的意思是如果有人发送TESTMSG,将异步请求网络查询数据,然后发送给发送者。api.sendAsyncGetRequest("http://qssq666.cn/update/update.json", apiCallBackclass);return true;}// function apiCallBackclass.onSucc(bytes)return false;
}//下面的代码无关紧要,自己酌情修改可以不定义 如果定义将在插件列表体现或者 用于获取上下文,上下文目前js无法操作,无法得知具体原因。  // 
//插件被加载的时候出发
function onCreate(contextx) {log.w("onCreate++[print]")log.w("onCreate call arg type. " + ",robotVersion:" + robot.VERSION_CODE)//log.w("onCreate call arg type. " + typeof (obj)+",robotVersion:"+robot.VERSION_CODE)
}
//表示机器人最终处理的消息,即将发送的消息,是否拦截
function onReceiveRobotFinalCallMsgIsNeedIntercept(item, list, aite, haisaiteme) {log.w("call onReceiveRobotFinalCallMsgIsNeedIntercept:" + item.getMessage());return false
}
//插件作者名字 
function getAuthorName() {return "情迁2018"
}
//返回插件名称,再插件管理列表可以显示
function getPluginName() {return "test plugin"
}//返回本插件的版本号 
function getVersionName() {return "1.0" //返回机器人的版本号
}
//返回本插件的版本号 数字标识 整数
function getVersionCode() {return parseInt(1);
}
//返回编译时间字符串
function getBuildTime() {// bodyreturn "无"
}//返回插件的描述信息
function getDescript() {return "这是一个DEMO"
}
// 返回插件demo包名
function getPackageName() {return "cn.qssq666.js.plugindemo"
}
//即将被销毁调用的方法。
function onDestory() {log.w("destory call")
}

调用API

function myFunction() {log.w("函数执行了..");return;
}
myFunction();
function addCalc(value1, value2) {return value1 + value2;
}
var a = 1; b = 3;
log.w(java.lang.String.format("%f + %f 得结果是=%f ", Number(a), Number(b), Number(addCalc(a,b))));
``

http://www.taodudu.cc/news/show-8023401.html

相关文章:

  • 情迁QQ机器人1.8.4新特性 可空变量的构建
  • 情迁QQ机器人插件化加载和非插件化的知识普及
  • python爬取电影评论
  • 【原理篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview
  • Java面试宝典——Java基础知识总结
  • GPT-3.5 生成 Fabric Cypher
  • SuperMap iDesktop 8C 地图制图
  • GBase 8c 数据类型-日期时间格式
  • 推荐《全职猎人》
  • 解决巴哈姆特动画疯视频一直加载
  • 目标检测YOLO实战应用案例100讲-复杂场景下的YOLOv5目标检测算法的改进方法研究
  • 运维如何解决终端部门投诉
  • java工程师联通XX面试题目
  • 联通让“打110”,我该怎么办?
  • 脸秀-用颜值和世界刚正面
  • 生活不止眼前的代码和BUG,还有远方的电子厂和新疆摘棉花
  • 新公司第五天(生活不止眼前的苟且)
  • UZH slam 两种相机
  • Hangover poj1003
  • Xilinx 7系列 FPGA选型
  • NUC1003 Hangover【水题】
  • CSS学习(5)--文本属性(下)
  • LaTex 写演示文稿 - Beamer 入门 之 彩色表格
  • Part decomposition and evaluation based on standard design guidelines for AM 论文笔记
  • Hangover(POJ 1003)
  • Poj1003------Hangover
  • POJ1003 Hangover
  • 北大OJ1003题
  • CSS文本:ruby-overhang(转)
  • 周赛反思1
  • 这篇关于情迁QQ机器人JS插件/使用开发教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/255765

    相关文章

    Spring Security 从入门到进阶系列教程

    Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

    JS常用组件收集

    收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

    这15个Vue指令,让你的项目开发爽到爆

    1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

    中文分词jieba库的使用与实景应用(一)

    知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

    Hadoop企业开发案例调优场景

    需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

    使用SecondaryNameNode恢复NameNode的数据

    1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

    Hadoop数据压缩使用介绍

    一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

    Makefile简明使用教程

    文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

    使用opencv优化图片(画面变清晰)

    文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

    嵌入式QT开发:构建高效智能的嵌入式系统

    摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设