情迁QQ机器人 Lua机器人插件开发教程
说明
目前支持机器人lua插件在2018年11月17日发布了,各位记得先情迁下载QQ机器人哈
本文章会慢慢补充,lua机器人插件能力将在情迁QQ机器人 1.8.8以及以上版本体现.
安装目录
新建lua文件 也即是.lua
后缀名的文件拷贝到/sdcard/qssq666/robot_plugin_lua
文件夹
LUA语法介绍
不懂lua语法的可以百度一下, 这里大概介绍一下基本的lua语法也就是和其它语言不相同的地方。
字符串拼接用..
数字转文本用tostring(要转换的变量)
方法定义
参数名 没有类型,这是脚本语言的特点,简单的不能再简单,如js,python php
function 方法名(参数名)end
有返回值的方法
function 方法名(参数名)
return true;
end
调用对象方法obj:value()
这里使用:
而java是用.
访问对象字段
输入log(robot.name))
这是本机器人支持的访问举例.注释
lua的注释是用 --
而java是用//
易语言则用’
或者某些语言用#
bat 批处理用 ::
类型转换
字符串转number
str="333"
value=tonumber(str)
value=value+1 -- lua似乎不能自增,只能这么写
其他类型转字符串
obj=333
value=tostring(obj)
变量定义
global_var = 1 --全局变量
local temp_var = 2 --局部变量
循环
while (temp < 5) dotemp = temp + 1print("result:" .. tostring(temp)) --这里体现了类型转换的语法。
end
for i = 1, 3 doprint("从1 到 3,当前:" .. tostring(i))
end
for i = 1, 6, 2 doprint("高级用法 当前:" .. tostring(i) .. ",我每下次执行将跳动2次,如果当前为1那么为1,下次则为3,i>6跳出循环")
end
逻辑分支
if (value1 > 10) thenprint("值大于10")if (value1 == 80) thenprint("内循环,等于80")elseprint("不是80,但是肯定>10")end
elseif (value1 == 100) thenprint("等于100")
elseprint("不知道等于夺嫂了")
end
控制台输出
print("ffff") --lua本身的语法,这个需要打开adb.exe查看过滤
System.out日志类型
情迁QQ机器人SDK独有api参数
第一步/必须导包
如果不导包,将无法正常使用下面这些方法。require "cn.qssq666.robot.sdk"
日志提示
log(""警告日志")--输出警告日志
info("info日志")
debug("debug日志")
error("红色错误日志")
toast("toast提示日志")``这个运行后直接弹出气泡提示
lua掌握这一点点你就完全可以操作机器人大部分功能了 关于api方面呢其实和java doc api一样的,所以呢本文没有说明的方法完全可以举一反三的 从java 插件开发文档里面找到
收到消息的回调
function onReceiveMsgIsNeedIntercept(msgitem, aiteList, hasAite, hasAiteMe)end
发送消息给指定人
这里的item是必须的,这个函数应该在onReceiveMsgIsNeedIntercept
方法里面写,也就是item这个参数直接用这个函数的item
就行了
api. sendPrivateMsg(item, qq,message);
更多api,完全可以参考java api推算出来,我有空会写一个完整的demo,现在还在架构机器人中....
举例
require "cn.qssq666.robot.sdk"-- msgitem 消息体
-- aitelist 艾特的用户列表(不会包含自己)
-- hasAite 是否艾特了用户
-- hasAiteMe 是否艾特了机器人function onReceiveMsgIsNeedIntercept(msgitem, aiteList, hasAite, hasAiteMe)log("call onReceiveMsgIsNeedIntercept")text = msgitem:getMessage() --获取收到的消息内容log("receiveMsg:" .. text)qq = msgitem:getSenderuin() -- 哪个qq发的消息log("print toString[" .. msgitem:toString()) --这个方法可以打印昵称,qq,消息内容,发送时间,等等。info = ",aiteUser=," .. tostring(hasAite) .. ",aiteRobot:" .. tostring(hasAiteMe)--见名知意log("state:" .. info)return true
end--下面的代码无关紧要,自己酌情修改------------------------------
function onCreate(obj)log("onCreate call arg type: " .. type(obj))
endfunction getPluginName()return "test plugin"
endfunction onDestory()log("destory call")
end
再来一个能用的,发送消息LUA
就会自动回复的机器人插件
复制下面的内容另存为 任意名.lua文件然后放到内部存储的qssq666/robot_plugin_lua文件夹中,然后运行情迁QQ机器人1.9.0
然后进入LUA插件管理就可以看到机器人了,记得进入机器人设置勾选启用机器人插件哦,不然发送消息LUA
没有任何反应的哈
还可以长按编辑这个插件修改逻辑,也可以点击模拟测试一些机器人方法是否定义的情况。
-- 编写时间 2018.11
-- 文件编码 必须是UTF-8 must UTF-8
-- LUA插件的方法不受执行流程控制,因此测试这些代码的时候只能发送消息然后测试这些方法。
--或者可以不写在主流程中,比如如下代码的测试专用可以解除注释,当机器人加载的时候会气泡提示的toast调试,require "cn.qssq666.robot.sdk" --必须调用,否则无法使用api,等方法,以及toast等,只能使用print了。
--测试专用代码区开始 --可以直接运行 本文件放到内部存储 qssq666/robot_plugin_lua文件夹改后缀名 为.lua 然后在lua插件管理列表刷新然后长按运行或者编辑再运行。
-- 直接输入 adb push plugin.lua /sdcard/qssq666/robot_plugin_lua/ 推送到手机上。--toast("插件被加载,插件名:"..getPluginName())
--下面的调试代码需要通过日志查看软件或者电脑ADBConsole.exe查看。
--info("插件加载了,")
--warn("这是警告日志")
--error("红色错误日志")
--log("也是警告日志语法糖")
--debug("调试信息,")--测试专用代码区结束-- ---------------------机器人插件加载区
-- msgitem 消息体
-- aitelist 艾特的用户列表(不会包含自己)
-- hasAite 是否艾特了用户
-- hasAiteMe 是否艾特了机器人
--收到一条消息调用此方法,返回true表示 消息由插件处理
--,否则交给机器人自身的逻辑,比如自身有点歌系统之类的。
--本方法不定义将毫无意义。
function onReceiveMsgIsNeedIntercept(msgitem, aiteList, hasAite, hasAiteMe)log("call onReceiveMsgIsNeedIntercept")local text = msgitem:getMessage() --获取收到的消息内容log("receiveMsg:" .. text)local qq = msgitem:getSenderuin() -- 哪个qq发的消息log("print toString[" .. msgitem:toString()) --这个方法可以打印昵称,qq,消息内容,发送时间,等等。if (text == "LUA") then-- chunkname:41 attempt to index ? (a nil value) zhaobulocal str="Wellcome Use Lua Plugin! The is QssqRobot"msgitem:setMessage(str)print("item is nil?="..tostring(msgitem:getClass()==nil)..",className:"..tostring(msgitem:getClass()))print("api obj is nil?="..tostring(msgitem:getClass()==nil)..",className:"..tostring(api:getClass()))print(api:toString())api:showDebugToast("欢迎使用LUA机器人插件");-- print();-- print(msgitem:toString())api:sendMsg(msgitem) --是啥子消息我就回复啥消息 ,操作起来比较简单。return true--插件自身处理消息elseendinfo = ",aiteUser=," .. tostring(hasAite) .. ",aiteRobot:" .. tostring(hasAiteMe)--见名知意log("state:" .. info)return false
end--下面的代码无关紧要,自己酌情修改 ,可以不定义,------------------------------
--插件被加载的时候出发
function onCreate(obj)print("onCreate....[print]")log("onCreate call arg type: " .. type(obj))
end
--表示机器人最终处理的消息,即将发送的消息,是否拦截
function onReceiveRobotFinalCallMsgIsNeedIntercept(item, list, aite, haisaiteme)debug("call onReceiveRobotFinalCallMsgIsNeedIntercept..");return false
end
--插件作者名字
function getAuthorName()return "情迁2018"
end
--返回插件名称,再插件管理列表可以显示
function getPluginName()return "test plugin"
end--返回本插件的版本号
function getVersionName()return "1.0" --返回机器人的版本号
end
--返回本插件的版本号 数字标识 整数
function getVersionCode()return 1;
end
--返回编译时间字符串
function getBuildTime( )-- bodyreturn "无"
end--返回插件的描述信息
function getDescript()return "这是一个DEMO"
end
-- 返回插件demo包名
function getPackageName()return "cn.qssq666.lua.plugindemo"
end
--即将被销毁调用的方法。
function onDestory()log("destory call")
end
高级语法 lua创建java对象已经创建java实现类的模板diamante
frame = luajava.newInstance("java.awt.Frame", "Lua Java Console")
console = luajava.newInstance("java.awt.TextArea")
buttons_pn = luajava.newInstance("java.awt.Panel")
execute_bt = luajava.newInstance("java.awt.Button", "Execute")
clear_bt = luajava.newInstance("java.awt.Button", "Clear")
exit_bt = luajava.newInstance("java.awt.Button", "Exit")frame:setSize(600,300)buttons_pn:add(execute_bt)
buttons_pn:add(clear_bt)
buttons_pn:add(exit_bt)BorderLayout = luajava.bindClass("java.awt.BorderLayout")frame:add(BorderLayout.NORTH, console)
frame:add(BorderLayout.SOUTH, buttons_pn)
frame:pack()
frame:show()--
-- Listeners
--execute_cb = {
actionPerformed = function(ev)
print("execute")
pcall(loadstring(console:getText()))
end
}jproxy = luajava.createProxy("java.awt.event.ActionListener",execute_cb)execute_bt:addActionListener(jproxy)clear_cb = {actionPerformed= function (ev)
print("clear");
console:setText("");
end
}jproxy = luajava.createProxy("java.awt.event.ActionListener" ,clear_cb)
clear_bt:addActionListener(jproxy)exit_cb = { actionPerformed=function (ev)
print("exit")
frame:setVisible(false)
frame:dispose()
end
}jproxyb = luajava.createProxy("java.awt.event.ActionListener" ,exit_cb)exit_bt:addActionListener(jproxyb)close_cb = { }
function close_cb.windowClosing(ev)
print("close")
frame:setVisible(false)
frame:dispose()
endfunction close_cb.windowActivated(ev)
print("act")
endjproxy = luajava.createProxy("java.awt.event.WindowListener", close_cb)
frame:addWindowListener(jproxy)
http://www.taodudu.cc/news/show-4987929.html
相关文章:
- MATLAB中添加机器人插件(名称为rvctools)分享给大家
- 【聊天机器人插件】Tidio与SaleSmartly:谁更适合你的网站?
- 【独立站运营】5款绝佳WooCommerce聊天机器人插件
- 遨博协作机器人插件开发-机械臂无线手柄遥控插件开发
- nonebot2聊天机器人插件4:群聊与戳一戳响应chat
- 解决CSS position:fixed 兼容问题
- css 中的position
- 【css】CSS position(定位)属性
- 计算机课件文字,计算机基础——文字录入ppt课件
- 计算机应用技术故事会教案,信息技术教学故事
- java不属于整数常量_病人52岁,诊断为高血压急症,呋塞米20毫克静推,执行后病人出现乏力、腹胀、肠鸣音减弱的症状,该病人可能发生了_学小易找答案...
- 初中计算机课教什么时候,浅谈初中信息技术课教学
- 计算机基础的建议,计算机应用基础教学实施建议.docx
- 3年级计算机的知识能力,三年级信息技术考核评价方案
- 盐城北大青鸟东台基地手绘课程作品展
- S1北大青鸟笔记
- 北大青鸟培训第二周第二天:HTML和CSS相关知识 (持续更新)
- 一个基于JDBC的通用DAO的设计参考(北大青鸟课程)
- 北大青鸟培训第四周第一天:HTML和CSS相关知识 【定位】(持续更新)
- 北大青鸟课程与思科等其它IT培训课程的区别
- 北大青鸟第二阶段课程进度
- python短期速成班_许昌市北大青鸟accp课程
- 北大青鸟BENET课程---ENBM知识点总结
- 北大青鸟全套课程
- unity制作释放技能效果
- apt、yum、dnf 和 pkg比较
- python可以写dnf外挂么_易语言写DNF外挂各种功能(很详细适合新手)
- dnf幻影部分原代码
- Vim技能修炼教程(10) - 代码跳转
- java 微博阅读量怎么算_微博阅读量怎么来的 微博上的阅读量是怎么算的
情迁QQ机器人 Lua机器人插件开发教程相关推荐
- 情迁QQ机器人到底该怎么用?
还想用情迁qq内置(不需要root)得朋友关注https://www.jianshu.com/p/b2b635aebc91 初次体验 如果你第一次打开本文章,我想对你说的是,这文章可能只供参考因为有些 ...
- 情迁QQ机器人sdk版本变更纪录以及兼容性适配
初次体验 如果你第一次打开本文章,我想对你说的是,这文章可能只供参考因为有些设置又了很大的改动,以及方式也不一样了. 插件开发具体还请参考 手机端编写LUA脚本插件https://www.jiansh ...
- 情迁QQ机器人的激活步骤[重新给大家捋一遍]
一般的激活步骤 1.使用xposed使q++激活. 2.打开qq->设置->q++设置->勾选监听聊天消息,勾选启用机器人. 3.打开情迁QQ机器人,进入设置确保启用群回复,启用私聊 ...
- 情迁QQ机器人安装包开源
<pre name="code" class="plain">; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define ...
- 情迁qq机器人图文api调用
首先 需要情迁QQ机器人2.0,老版本调用此方法无效果 q++需要的版本是1.2.0 这个例子表示每次初始化调用onCreate就会发送一个图片到情迁QQ机器人开发者群 机器人qq不能随便填写,否则无 ...
- 情迁QQ机器人执行SQL以及变量技巧详解
触发命令 配置SQL sql语句 权限 超级管理员 其它人无权限执行此命令. 支持的变量 执行sql得填写语句,支持变量如下:信息变量 群号:$g QQ:$u 机器人自身QQ: $s QQ机器人自带数 ...
- 情迁QQ机器人已具备图片发送能力
如果要体验图片发送功能需要如下条件 使用Q++插件1.0.2以及以上 使用情迁QQ机器人1.7.0.2以及以上 使用QQ....这个不好说.低版本应该也可以使用 下载图片美女插件 然后移动到 存储目录 ...
- 情迁机器人Tim_情迁QQ机器人1.8.2更新说明
群昵称违规支持重复词检测 为了实现检测重复必须把词组用()括起来 举例 比如这里应该输入的格式是 情迁-深圳-红米Note4a-N 而用户输入了情迁-情迁-情迁-N 那么这种不按套路出牌的用户如何对付 ...
- 情迁机器人Tim_情迁QQ机器人1.8.0更新后的使用技巧(卡片消息福利)
1.增加卡片命令 增加管理员命令 配置 卡片 卡片消息xml 非管理员命令卡片 这个命令可以进入群白名单管理里面勾选开启,否则非管理发送此命令不会有任何回复. 2.卡片消息参数支持传递变量 3.变量支 ...
最新文章
- ×××作,不知写些什么
- ADO.NET Entity Framework Extensions 简单应用
- 【Spring学习】Spring简介
- axios请求拦截 做Loading加载
- 为什么font-family最后都会加上sans-serif字体?
- c matlab 引擎调用,【MATLAB与C的混合编程】之【C程序调用Matlab计算引擎】(1)
- JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
- asp编程实例:通过表单创建word的一个例子
- Vue-条件判断与循环遍历
- CC26x2R1笔记(8)CCS9.2 cc26xx环境的搭建
- python:TypeError:takes at least 8 arguments (9 given)
- 真正厉害的人,是怎么分析问题的?
- 刺激战场android闪退,刺激战场总是闪退怎么办?刺激战场闪退解决办法
- Verilog中的Signed Decimal与Signed Magnitude区别
- 工作方式需要主心骨、承载人
- GitHub的使用方法
- 应聘dba职位到底需要多少经验
- CentOS7安装可移植Prometheus+grafana--alertmanager配置邮件告警
- 第三集 情陷美丽青海湖,缘定小镇黑马河
- 信息收集详情(高能集锦)
热门文章
- android 横向滚动 导航,仿今日头条横向滚动导航栏--原生js
- 计算机安全沙箱,安全沙箱
- android 10.0 SystemUI屏蔽某个app的通知
- python firmata协议利用arduino操控麦克纳姆轮小车(附完整代码)
- [附源码]Nodejs计算机毕业设计汽车出租平台Express(程序+LW)
- 《Python 深度学习》刷书笔记 Chapter 4 关于电影评论模型的进一步探讨
- murmurhash2 Python实现(复现开源项目主页上的 Murmurhash2)
- 程序猿的24个段子,超级实用和搞笑哦!!!
- 铁路牵引变电所无人化改造方案 辅助监控系统
- 【UWP】AnimatedIcon 动态图标的实现步骤