酷Q社区»社区 分享交流区 编程技术

第二集-零基础入门插件开发详细教程-连更(回帖cp)[复制链接]

作者: 落叶...|查看: 376|回复: 10
跳转到指定楼层
回帖奖励10 CP 回复本帖可获得 5 CP奖励! 每人限 1 次
1-30 19:27

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 落叶... 于 2020-1-31 17:02 编辑

观看全文请进入落叶博客,点击此处因为这篇文章编写实在不容易,三个小时的努力,往进入博客给我留个言可好!谢谢支持了~原文地址:https://luoyetd.cn/?id=70
酷Q插件入门教程 - 2
本节教程较难,建议新学的小白和新手可以先去看第三节,本文应该可以看懂,如有不懂的地方或者我写错的地方可以在评论处留言,我一一回复,也可加我QQ进行询问,免费解答:2545653474

首先打开我们的SDK,没有SDK的点击此处下载,也可以重温上节课:点击此处

这篇文章讲的是如何开发一个简易的签到插件,虽说简易,但对于小白新手来说代码量还是很大的。

打开源码文件后,滑到下方找到子程序_eventGroupMsg(如图)

不知道这个子程序的参数的请回看上篇教程,这里就不详细说明了

这里我们仍然要用到几个基本的指令和变量:

变量:应用目录

由于酷Q官方开发文档规定,插件所有配置文件必须放在本插件的应用目录下(应用目录是个变量,酷Q在启动时会自动赋值),如下图

此行代码不用自己写,酷Q官方在酷Q启动子程序里面已经写好了

这个变量就是一个文本型变量,他的赋值是你插件的应用目录

即:酷Q根目录/data/app/你的应用APPID/

APPid上文讲了,这里也不详细说了,如果你的APPID是“cn.luoyetd.jc2”,那么,你的应用目录就会是这个

应用目录=“酷Qair/data/app/cn.luoyetd.jc2/”

如果真()

在上篇教程中已经讲到了,这里也不多说了,移步上篇查看即可

如果()

和如果真()的区别是,这个是进行判断,如果满足括号内的逻辑,就执行一段代码,如果不满足,就执行另一段代码

写配置项()

写配置项即在规定的目录的某个ini文件内保存配置(ini即配置文档),官方给出的支持库解释如下

[size=0.9em]BASIC

将指定文本内容写入指定配置项中或者删除指定的配置项或节,如果指定配置文件不存在,将会自动创建。成功返回真,失败返回假。本命令为初级命令。    参数<1>的名称为“配置文件名”,类型为“文本型(text)”。指定配置文件的名称,通常以.ini作为文件名后缀。    参数<2>的名称为“节名称”,类型为“文本型(text)”。包含欲写入配置项所处节的名称。    参数<3>的名称为“配置项名称”,类型为“文本型(text)”,可以被省略。参数值指定欲写入配置项在其节中的名称。如果参数值被省略,则删除指定节及其下的所有配置项。    参数<4>的名称为“欲写入值”,类型为“文本型(text)”,可以被省略。参数值指定欲写入到指定配置项中的文本。如果参数值被省略,则删除所指定配置项。

依旧是对于小白来说可能看不懂,这里解释下

先说一下配置文件的基本格式:如图

上面的[全局]是节名称,无特殊意义,就是为了方便分类

管理员是配置项名称,无特殊意义,也是为了方便分类

等号“=”后面的是写入的配置

参数1即配置文件名,这里指的是路径,一般基础开发就写“应用目录+配置.ini”就好

参数2即节名称,上方有解释自行查看

参数3即配置项名称,上方有解释自行查看

参数4即欲写入值,这里一般只支持文本,即配置项和等号“=”后面的东西

例如我们写:写配置项(应用目录+“\配置.ini”,“全局设置”,“管理员QQ”,“1000”)

那么当运行到这段代码时,便会在你规定的这个目录应用目录+“\配置.ini”,即应用目录/配置.ini中,写下如下图的配置文件

读配置项()

有写配置项了,我们就要去读取写好的配置项,这里就用到了命令读配置项()

官方支持库给出的解释是这样的

[size=0.9em]BASIC

读取指定配置文件中指定项目的文本内容。本命令为初级命令。    参数<1>的名称为“配置文件名”,类型为“文本型(text)”。指定配置文件的名称,通常以.ini作为文件名后缀。    参数<2>的名称为“节名称”,类型为“文本型(text)”。包含欲读入配置项所处节的名称。    参数<3>的名称为“配置项名称”,类型为“文本型(text)”。参数值指定欲读入配置项在其节中的名称。    参数<4>的名称为“默认文本”,类型为“文本型(text)”,可以被省略。如果指定配置项不存在,将返回此默认文本。如果指定配置项不存在且本参数被省略,将返回空文本。

前三个参数和上文的写配置项都是一样的,这里只说一下第四个参数

这个参数是“默认文本”,和上文写配置项的“欲写入值”是不同的,例如你这样写

读配置项(应用目录+“\配置.ini”,“全局设置”,“管理员QQ”,“没有读到QQ”)

那么当运行到此段代码时,便会取读取应用目录下的配置.ini文件,会读此文件下的全局设置这个配置节下的管理员QQ这个配置项(有点绕多读几遍,实在看不懂就别看了或加QQ问我,看不懂可以自己摸索,这个很容易理解),如果先前没有写过或者此文件根本不存在,那么就会返回文本型数据“没有读到QQ”

CQ.发送群消息()

在上文中也介绍过了,这里不再说了,需要的可以去上一篇文章查看

取现行时间()

这个也是易语言自带的一个指令,是为了取现在的系统时间,官方支持库给出的解释如下

[size=0.9em]BASIC

   返回当前系统日期及时间。本命令为初级命令

这个应该都可以看懂了,这个指令没有任何参数,直接返回系统当前时间,我们可以配合变量一起使用,具体如何使用,我们等会再讲。

取时间间隔()

这个命令可以取两个时间之间的间隔,返回值是双精度小数型(不需要记,用不到),他可以用来取两个时间点之间的间隔,单位可以是年份;季度;月份;周;日;小时;分钟;秒。

官方给出的支持库说明是这样的:

[size=0.9em]BASIC

返回一个数值,表示“时间1”减去“时间2”之后的间隔数目。注意:每个星期以星期天为第一天。本命令为初级命令。    参数<1>的名称为“时间1”,类型为“日期时间型(date)”。    参数<2>的名称为“时间2”,类型为“日期时间型(date)”。    参数<3>的名称为“取间隔部分”,类型为“整数型(int)”。参数值指定取时间间隔的单位,可以为以下常量: 1、#年份; 2、#季度; 3、#月份; 4、#周; 5、#日; 6、#小时; 7、#分钟; 8、#秒。

参数1即第一个时间,即比较大的那个时间(通俗来讲就是比较靠后的时间)

参数2即第二个时间,即比较小的那个时间(通俗来讲就是比较早的时间)

参数3即取间隔部分,你可以理解成单位,此处可以写:

[size=0.9em]BASIC

1、#年份; 2、#季度; 3、#月份; 4、#周; 5、#日; 6、#小时; 7、#分钟; 8、#秒。

例如这个指令可以这样用:取时间间隔(2020年1月30日 17:49:40,2020年1月30日 17:49:46,#秒)

那么他的返回值就是6秒

明确开发目的

我们今天要开发简易的签到插件,要用到的命令在上面已经列好了,下面我们就顺一下我们的开发思路

首先我们要判断群成员是否发了“签到”这条消息,这时候就要用到指令如果真()了

其次,在群成员签到之后,我们要将他签到的时间通过写配置项的方法保存起来,以防今天群成员再次重复签到

再然后,在群成员签到时,我们还要去判断他今天是否签过到,这里就要用到读配置项()和取时间间隔()了

最后,在确认一系列完成之后,我们就要回复群成员“签到成功”或者“禁止重复签到”,这里就要用到CQ.发送群消息()了

开始开发

所有的东西都准备就绪了,我们就要尝试开始开发这么个小插件了

首先我们判断消息是否为“签到”,这样写

在收到“签到”的消息后,我们第一件事就是要判断这位成员今天是否签过到,这样写

然后我们把光标移到本句末尾,点回车(键盘上的Enter),会发现弹出了一个窗口

原因是因为本句开头的局_是否签到,我们没有给他加上双引号,所以系统就把它判定成了一个变量,而这个变量我们没有创建过,所以就报错了。

我们该怎么解决呢?给他加个双引号吗?不不不,我们只需要创建个变量就ok了,在这个窗口。选择局部变量。数据类型选择文本型,点击确定,这个局部变量就创建好了。

同时,我们可以看到光标顺利的移动到了下一行,说明本行在语法结构上是没有错误了

Tips:这里用到的到文本()指令在下文会讲

这时候,如果对方从来没有签到过,那么就返回“否”,这个时候,我们就要判断局_是否签到这个变量是不是为否,如果是,我们就为这位成员执行签到指令

这样写:(下图及上图的fromAccount及fromGroup都是这个子程序的参数,不懂得可以到上节课看)

如上图,这样写肯定会报错或出现bug,为什么呢,因为上文介绍了---写配置项()的第四个参数是个文本型,而我们写的第四个参数取现行时间()返回的是日期时间型,系统无法把日期时间型转换到文本型,所以会出现问题,这个时候我们只需要用到一个小指令把它转换成文本型就好:

到文本()

该命令可以把括号内的东西转换成文本型的数据,我们用这个指令把取现行时间()给包起来,这样写


写到这,我们就处理完了从来没有签到过的成员的签到信息,为了不让系统继续往下进行,我们还需要一个小小的指令:

返回()

返回可以使此子程序终止运行,并返回数据,在酷Q插件中,我们的返回值必须为#消息_忽略#消息_拦截

如果你不想让其他插件再次处理“签到”这条信息,就写返回(#消息_拦截),如果希望别的插件继续处理这条消息,就写返回(#消息_忽略),这里我们希望其他插件不再处理本条消息,这样写

之后我们就要写曾经已经签到过的成员该如何签到,这样写

这里又新增了几个变量【局_上次签到时间】和【局_间隔时间】和一个新指令【到时间()】

其中:局_上次签到时间要设置成日期时间型

局_间隔时间要设置成整数型

到时间()

和到文本()指令用法相同,将其他数据类型转换为日期时间型

然后把这两段代码连起来,就是如下图:

有点乱对吧,没关系,我们为你准备好了附件,在文章的结尾,你可以下载下来观看

然后参考插件如何编译进行编译,就可以使用了

注意:开发签到插件的方法有很多种,本文章采用的是最基础(但不是最简单)的命令和最容易理解的命令进行编写,便于各位读者看懂。还是那句话,如果看不懂请在本文下方留言或者加我QQ:2545653474我免费解答!

好了今天的教程就编写到这里!欢迎各位评论(跪求评论,写了三个小时给点鼓励吧),评论全部都必回哦!

下章更新:如何用窗口来设置插件的各类数据,尽情期待!



你还有99%没有观看,观看全文请进入落叶博客,点击此处

全文居然是下载链接..下载还要注册....
????不是下载,登录自动显示的 详情回复 发表于 1-31 11:59
Monodesu 发表于 2020-1-31 05:51
全文居然是下载链接..下载还要注册....

????不是下载,登录自动显示的
先留名,支持一下。
蹭cp。这算不算引流呢

另外
不应 用哪学哪,
小白 一头雾水。
支持一下
感谢大佬的教程!
支持一下。
为什么不录个视频呢?
支持一下
支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则尽量使你的回复能够对他人有所帮助

Powered by Discuz!Designed by hexapp© 2020 CoolQ

快速回复返回顶部返回列表