缘起
说起这个qq机器人插件,其实这已经算是第二次重新编写这个项目了。
第一次写插件使用的是Flexlive SDK
这个框架,主要是因为只会C#
后来这个插件框架的作者去搞了个新框架叫麻花,也就是Newbe.Mahua
,不过这个框架说实话,用起来确实有点。。。。。看看下面酷q所有文件的图片就懂了:
各种dll全部需要扔到根目录,然后还附属了一堆其他的文件。。。。这种插件写出来很难直接给其他人使用,毕竟酷q插件都是打包好的cpk文件,拿来就用的
并且在编写插件的过程中,我直接加入了lua虚拟机的环境,导致根目录需要用到的dll更多了
现在使用的框架是Native.SDK
,作者用到了Costura.Fody
来作为打包工具,效果就是最后生成的文件全部打包进一个dll文件,也就可以直接打包成cpk文件发布了。和其他插件并无区别,看看干净的目录:
(感谢一下华落大佬提供的vps)
插件实现了什么?
插件现阶段实现的是,所有的消息收发逻辑全部使用lua脚本来实现。C#作为底层,把所有复杂的工作全部封装为简单的接口,供给lua层去调用,从而简化开发流程提高效率。
同时也因为收发逻辑都是靠lua脚本的,也使得它天生就可以动态地运行。一旦你改了某个lua文件,那么你的更改就立刻生效,完全不用重启和编译,节约大量时间。
具体可以直接去看插件项目GitHub的readme:
https://github.com/chenxuuu/receiver-meow
为什么要用lua?
lua占用小,同时语法简洁,适合用来做这些事情。毕竟我的时间根本不够用好吗!
某些关键代码实现
我不太喜欢造轮子,能力不够
是一个方面,最主要是在有现成轮子的情况下,就没有去造轮子的动力了。所有lua虚拟机我直接使用了nlua框架。
在之前的博文里也解释过这方面的代码,没看过的可以去看看:
在C#里跑lua脚本 – Nlua 的简单使用
然而这里面有几个坑
首先是字符编码方面,由于是涉及到中文处理,那么乱码这种事情是想也不用想的,好在通过搜索nlua的issue,发现已经有人问过这个问题了,只要提前设置编码就不会乱码了:
lua.State.Encoding = Encoding.UTF8;
接下来就是在加上图片接口后,发现内存占用持续走高的问题。解决方案就是套个using
,这个纯属是自己完全没有规范地写代码导致的,另外在查看文档时也没看到框架已经支持了这个:
using (var lua = new NLua.Lua())
{
try
{
lua.State.Encoding = Encoding.UTF8;
lua["handled"] = false;//处理标志
Initial(lua);
lua.DoString(code);
if (file != "")
lua.DoFile(Common.AppDirectory + "lua/" + file);
return (bool)lua["handled"];
}
catch (Exception e)
{
Common.CqApi.AddLoger(Sdk.Cqp.Enum.LogerLevel.Error, "lua脚本错误", e.ToString());
return false;
}
}
再往后就是lua里的坑了,require文件提示不存在,这个问题花费了几个小时去寻找原因。
一开始直接使用绝对路径添加到package.path
的后面:
--加上需要require的路径
package.path = package.path..
";"..apiGetPath().."data/app/com.papapoi.ReceiverMeow/lua/require/?.lua"
发现这样处理好像没什么用处,依旧报找不到。所以后来我改成了相对路径:
--加上需要require的路径
package.path = package.path..
";./data/app/com.papapoi.ReceiverMeow/lua/require/?.lua"
这个改动在我的环境里都是可以正常运行的(win10和win server 2016)。但是在一个用户那里,依旧一直报错。
最后的解决方案我也挺无语:把所有路径里的中文改成英文就好了。。。
实际使用
使用的时候基本可以把lua的优势都体现出来了,无非就是两点:
- 占用极低
- 开发迅速
占用的话一张图就可以表示了:
上面的酷q air
使用的是Newbe.Mahua
框架,由于就只有一个运行lua脚本的功能,所以我也没怎么更新过,一直在用老框架
下面的酷q pro
使用的就是基于Native.SDK
框架的了,基本不会增加什么负担
开发的时候也是挺舒服的,基本就是改几行代码,ctrl+s,然后就可以立刻在群里发两条消息测试了:
END
总之这个插件在我印象里貌似依旧改过不知道多少次了,希望这是最后一次重写吧(flag)
项目地址:https://github.com/chenxuuu/receiver-meow
欢迎各位star
转载保留版权:晨旭的博客 » 《接待喵插件-跑lua的qq机器人插件》如果喜欢可以: 点击右侧上方的邮件订阅,订阅本站
膜拜大神!~~~
不敢当,这些代码都是网上抄的