# **实现目标**
▶针对每个用户计算独立的签到积分
▶每日只能签到一次
▶签到计数器每日自动刷新
*****
# **实现思路**
## **针对每个用户计算独立的签到积分**
创建一个配置文件,创建节名[**积分**]
对每个用户的数据采取**QQ号对应记录**的模式,以下是样例配置文件
>[info] [积分]
> 895445383=823
在此配置文件中,有一个用户,其QQ为895445383,他的积分已经到达了823
## **每日只能签到一次**
在配置文件中,创建节名[**每日次数**]
对每个用户的数据同样采用**QQ号对应记录**的模式,以下是样例配置文件
>[info] [每日次数]
> 895445383=0
在此配置文件中,有一个用户,其QQ为895445383,他的每日次数为0,代表他今日已经签到过了
## **签到计数器每日自动刷新**
创建一个定时任务,在每日固定时间刷新配置文件中的[**每日次数**]一节
定时任务需要实现的内容其实很简单,只需要将每日次数清零即可,原理请见后文
具体定时任务内容如下
>[warning] [写配置项[数据目录]签到.ini;次数;;]
具体的原理将在后文讲述
*****
# **实现代码**
**命令名**:签到
>[warning] [**隐藏**
> [**赋值**签到积分;5][**赋值**次数上限;1]
> [**赋值**次数;[**读配置项**[**数据目录**]签到.ini;每日次数;[**发送者号码**];[**取值**次数上限]]]
> [**如果**可以;[**取值**次数]>0]
> [**操作配置项**[**数据目录**]签到.ini;积分;[**发送者号码**];+[**取值**签到积分]]
> [**写配置项**[**数据目录**]签到.ini;每日次数;[**发送者号码**];[**计算**[**取值**次数]-1]]
> ]签到成功,您的累积积分为[**读配置项**[**数据目录**]签到.ini;积分;[**发送者号码**];][**隐藏**
> [**如果可以假**]
> ]签到失败,今日签到次数已达上限[**隐藏**
> [**如果可以结束**]]
*****
# **代码解读**
> [**赋值**签到积分;5][**赋值**次数上限;1]
此句代码为快捷自定义,为后续代码提供便捷,该赋值操作类似编程中的宏定义,方便引用
> [**赋值**次数;[**读配置项**[**数据目录**]签到.ini;每日次数;[**发送者号码**];[**取值**次数上限]]]
此句代码作用为获取每日次数上限,当配置文件中不含有该号码对应的记录时,读取结果为自定义值:次数上限
此句代码需结合定时任务的重置使用,重置任务的作用是删除[每日次数]一节下的所有数据,删除后即可被该句代码初始化每日签到次数上限
> [**如果**可以;[**取值**次数]>0]
③
> [**如果可以假**]
④
> [**如果可以结束**]]
此句代码作用是进行判断,判断用户今日是否还可以签到
当次数>0(即可以进行签到)的时候,执行③处的代码(该处代码可包含多句)
当次数≤0(即不可进行签到)的时候,执行④处的代码(该处代码可包含多句)
> [**操作配置项**[**数据目录**]签到.ini;积分;[**发送者号码**];+[**取值**签到积分]]
该句代码作用是进行签到积分的累加,对于用户的记录进行操作,给原有记录加上自定义值:签到积分,当不存在记录时,初始值为0,操作后的记录值等于自定义值:签到积分的值
> [**写配置项**[**数据目录**]签到.ini;每日次数;[**发送者号码**];[**计算**[**取值**次数]-1]]
此句代码作用是更改今日签到剩余次数,每次签到次数减一,执行后会影响下一次[**如果**]语句的判断
> [**读配置项**[**数据目录**]签到.ini;积分;[**发送者号码**];]
此句代码作用是读取用户当前积分(即签到后的积分)