【Rainmeter/雨滴】一言(Hitokoto)小插件
わふ
编辑于 2023年04月19日 21:39

|ू・ω・ )雨滴萌新来交作业啦

没错,就是这一行小字。可交互功能如下,源码附后,使用方法附后后:

  • 左击正文部分:手动更新一言

  • 右击正文部分:1)复制并收藏句子;2)文字变色

  • 文字变色时右击正文部分:1)取消收藏;2)文字变回原来的颜色

  • 可以一直戳戳戳,自己玩的时候没发现bug

  • 隔一段时间会自动更新(默认300秒)

  • 每次更新都会自动保存句子


源码

总共有两个文件,一个是lua脚本文件,另一个是ini配置文件,使用方法放在后面,先给源码~

EditFile.lua

代码块
clike
自动换行
复制代码
function WriteFile(FilePath,Content)
	FilePath = SKIN:MakePathAbsolute(FilePath)
	local File = io.open(FilePath, 'a')
	File:write(Content)
	File:close()
end

function DeleteFile(FilePath)
	FilePath = SKIN:MakePathAbsolute(FilePath)
	local file = io.open(FilePath, "r+")
	local content = file:read("*all")
	local t = string.gmatch(content, "([^\n]+)[\n]*$")()
	local content_len = string.len(content)
	local t_len = string.len(t)
	file:close()
	local str = string.sub(content, 0, content_len-t_len-1)
	file = io.open(FilePath, 'w')
	file:write(str)
	file:close()
end

function DetectValue(String1,String2)
	if(String1 == "null")
	then
		return ""
	else
		return String2
	end
end
复制成功

Hitokoto.ini

代码块
clike
自动换行
复制代码
;——————————————————————————————————————
;设置全局

[Rainmeter]
Update=#Update(ms)#
DynamicWindowSize=1
AccurateText=1

;——————————————————————————————————————
;设置变量

[Variables]
Scale=1
Update(ms)=100
RefreshTime(s)=300
FontFace=微软雅黑
FontColor=255,255,255,255
FontColorChangeTo=0,255,0,255
Time="([MeasureDay] [MeasureTime])"
FilePath_Like="C\:\\Users\\(这里填用户名)\\Documents\\Hitokoto_Favorites.txt"
FilePath_Auto="C\:\\Users\\(这里填用户名)\\Documents\\Hitokoto_AutoSave.txt"
Output="[MeasureChild1]——[&MeasureScript:DetectValue('[&MeasureChild3]','[MeasureChild3]')]「[MeasureChild2]」"

;修改FilePath需要保证路径上的文件夹存在,否则会报错。txt如果不存在,会自动创建
;“:”和“\”需要用“\”转义
;——————————————————————————————————————
;加载脚本

[MeasureScript]
Measure=Script
ScriptFile=EditFile.lua
Disabled=1

;——————————————————————————————————————
;设置文本属性

[TextStyle]
FontFace=#FontFace#
FontColor=#FontColor#
Group=StringGroup
StringEffect=Shadow
SolidColor=0,0,0,1
AntiAlias=1

;——————————————————————————————————————
;获取一言

[GetText]
Measure=Plugin
Plugin=WebParser
UpdateRate=(#RefreshTime(s)#*1000/#Update(ms)#)
Url=https://v1.hitokoto.cn/?c=a&c=d&c=g&c=h&c=i&c=k
RegExp="hitokoto":"(.*)","type":".*","from":"(.*)","from_who":["]{0,1}(?U)(.*)["]{0,1},"creator":"
OnChangeAction=[!CommandMeasure MeasureScript "WriteFile('#FilePath_Auto#','#Time##Output#\n')"][!DisableMouseAction StringOne "RightMouseDownAction"][!EnableMouseAction StringOne "RightMouseUpAction"][!SetOptionGroup StringGroup FontColor #FontColor#]

;Url=https://v1.hitokoto.cn/		获取全部分类
;Url=https://v1.hitokoto.cn/?c=x	其中x取值a~l,可选择多个分类,比如	?c=a&c=c	即为获取“动画”以及“游戏”分类的句子
;a=动画 b=漫画 c=游戏 d=文学 e=原创 f=来自网络 g=其他 h=影视 i=诗歌 j=网易云 k=哲学 l=抖机灵 其他字符=动画

[MeasureChild1]
Measure=Plugin
Plugin=WebParser
URL=[GetText]
StringIndex=1

[MeasureChild2]
Measure=Plugin
Plugin=WebParser
URL=[GetText]
StringIndex=2

[MeasureChild3]
Measure=Plugin
Plugin=WebParser
URL=[GetText]
StringIndex=3

;——————————————————————————————————————
;获取时间

[MeasureDay]
Measure=Time
Format=%F

[MeasureTime]
Measure=Time
Format=%X

;——————————————————————————————————————
;呈现桌面文本(在[StringOne]处编辑鼠标响应事件)

[StringOne]
Meter=String
Text=『 [MeasureChild1]』
MeterStyle=TextStyle
FontSize=(17*#Scale#)
X=0
Y=(8*#Scale#)
LeftMouseUpAction=!CommandMeasure GetText "Update"
RightMouseDownAction=[!CommandMeasure MeasureScript "DeleteFile('#FilePath_Like#')"][!SetOptionGroup StringGroup FontColor #FontColor#][!DisableMouseAction StringOne "RightMouseDownAction"][!Delay 16][!EnableMouseAction StringOne "RightMouseUpAction"]
RightMouseUpAction=[!SetClip #Output#][!CommandMeasure MeasureScript "WriteFile('#FilePath_Like#','#Time##Output#\n')"][!SetOptionGroup StringGroup FontColor #FontColorChangeTo#][!DisableMouseAction StringOne "RightMouseUpAction"][!EnableMouseAction StringOne "RightMouseDownAction"]

[StringTwo]
Meter=String
Text=——[&MeasureScript:DetectValue('[&MeasureChild3]','[MeasureChild3]')]「[MeasureChild2]」
FontSize=(14*#Scale#)
MeterStyle=TextStyle
X=0R
Y=(-15*#Scale#)R
复制成功


安装方法

1、打开记事本,粘贴第二个代码块Hitokoto.ini,另存为ini文件,名称可以自定,这里需要修改编码为UTF-16 LE

2、如法炮制,将第一个代码块EditFile.lua另存为lua文件,这里需要修改编码为UTF-8,同时要把文件名修改为EditFile.lua

2.5、注:由于莫名其妙的原因,lua的代码在稿件预览时被加上了一行文字

如果看到图中所示的浅蓝色高亮的文字的话,请将其替换为英文输入的双引号(")

3、把这两个文件装进一个文件夹里,一起送到雨滴的皮肤保存路径下,一般来说是%UserProfile%\Documents\Rainmeter\Skins

最后长这样

4、最后按照正常的流程,在雨滴主界面双击ini文件就好啦(o゚▽゚)o  

5、啊对了,如果要启用文件保存功能,还需要在ini文件中手动补全FilePath路径(缺少用户名),具体如下


简单个性化设置

所有的配置都可以在ini文件中完成

为了方便调整,我尽可能地把需要个性化的变量都整合到一起,放在“设置变量”部分中

Scale:调整桌面文本的整体大小

Update(ms):皮肤的更新时间,以毫秒计,更短的更新时间意味着手动刷新、收藏时更快的响应速度,同时也意味着更高的资源占用

RefreshTime(s):是一言文本的自动刷新时间,以秒计,默认5分钟刷新一次

FontFace:字体

FontColor:字体颜色,RGBα,也就是三个颜色通道+一个透明度通道

FontColorChangeTo:收藏后字体的颜色变化

Time:保存一言时,附在每句话开头的时间格式。不想要保存时间的话可以直接删掉,保留双引号即可

FilePath:两个变量分别为  手动/自动  保存一言的文件路径。请把“(这里填用户名)”替换为自己的用户名,或者另行更改保存路径。不想要保存的话姑且可以放着不管,这不会影响桌面文本的显示,但会在日志中报错。想完整关闭保存功能请参见下一部分内容

Output:写入剪贴板和txt文档的正文格式


进阶个性化设置

1、修改一言的获取类型,关闭自动保存功能

如上图,在“获取一言”部分中,Url后的路径即为一言接口的请求地址

至于如何修改相关分类,在注释中已经阐述,也可以参考一言开发者中心说明:https://developer.hitokoto.cn/sentence/

顺便一同附上一言官网地址:https://hitokoto.cn/

关闭自动保存功能,只要删除图中蓝色高亮显示的语句(两端的中括号也一起删掉)即可

2、单独修改文本格式,关闭手动保存和复制功能

在最后的“呈现桌面文本”部分中单独修改文本格式

[StringOne]是正文,[StringTwo]是副标题

Text是文本显示的内容

FontSize修改字体大小

X和Y是文本的位置,“R”表示Relative,即相对上一个元素的位置

至于文本的颜色……因为涉及与鼠标交互的颜色变换,要修改起来相对麻烦一点。如果真的想要分别修改颜色,并且您有Rainmeter皮肤制作经验的话,文章最后一部分是相关代码的编写思路,可以参照着进行修改

关闭手动保存功能和复制文本功能,只要删除图中蓝色高亮显示的语句即可

关闭手动保存功能的同时,保留复制文本功能,只要在删除高亮语句的基础上,在原位置添加下面这句即可:

RightMouseUpAction=[!SetClip #Output#​]

保留手动保存功能的同时,关闭复制文本功能,只要在图中蓝色高亮显示的语句中找到下面这句,并删除即可(图中是第三行的“=”的后面):

[!SetClip #Output#​]


鼠标交互事件编写思路

代码块
clike
自动换行
复制代码
LeftMouseUpAction=!CommandMeasure GetText "Update"
  
RightMouseDownAction=[!CommandMeasure MeasureScript "DeleteFile('#FilePath_Like#')"][!SetOptionGroup StringGroup FontColor #FontColor#][!DisableMouseAction StringOne "RightMouseDownAction"][!Delay 16][!EnableMouseAction StringOne "RightMouseUpAction"]

RightMouseUpAction=[!SetClip #Output#][!CommandMeasure MeasureScript "WriteFile('#FilePath_Like#','#Time##Output#\n')"][!SetOptionGroup StringGroup FontColor #FontColorChangeTo#][!DisableMouseAction StringOne "RightMouseUpAction"][!EnableMouseAction StringOne "RightMouseDownAction"]
复制成功

总共用到三个鼠标事件:LeftMouseUpAction、RightMouseDownAction、RightMouseUpAction

左键抬起:强制更新一言

右键按下:(这个动作在每次一言更新时都会被禁用,以防止误删文档内容)

  • 删除文档最后一句话

  • 将文本组的颜色改为#FontColor#​

  • 禁用右键按下的鼠标事件

  • 延迟16ms

  • 启用右键抬起的鼠标事件

右键抬起:

  • #Output#​复制到剪贴板

  • #Time#​#Output#​\n写入文档,“\n”起到换行的作用

  • 将文本组的颜色改为#FontColorChangeTo#​

  • 禁用右键抬起的鼠标事件

  • (中间不需要延迟,因为右键抬起不会误触发右键按下的鼠标事件)

  • 启用右键按下的鼠标事件

然后,在“获取一言”部分的[GetText]的“OnChangeAction”起到初始化文本属性的作用,如下:

代码块
clike
自动换行
复制代码
OnChangeAction=[!CommandMeasure MeasureScript "WriteFile('#FilePath_Auto#','#Time##Output#\n')"][!DisableMouseAction StringOne "RightMouseDownAction"][!EnableMouseAction StringOne "RightMouseUpAction"][!SetOptionGroup StringGroup FontColor #FontColor#]
复制成功
  • (在每次一言更新时)

  • #Time#​#Output#​\n写入文档

  • 禁用右键按下的鼠标事件

  • 启用右键抬起的鼠标事件

  • 将文本组的颜色设置为#FontColor#​

以上,就是所有涉及文本颜色的代码部分了