[[mapgeti (\len@range@ (\_,\_0,\_same@)filter@0,\_\_ 3>0$<)] [mapget (mapgeti@:undef@?{,1,\_!})] [maphas (mapgeti@undef@?~~)] [mapset (3>| 2>0,\& mapgeti@ :undef@?~{_nan@!} &&;]<)] [mapdel (mapgeti@:undef@1{?{$!!}_!})] [lnnsave (me@4,0?{"Not LNN"throw@_!!}lnn_vars^repr@(lnn_vars=(arr@|\=])#__)+notewd@_)] [lnndeclare (lnn_vars^\:^mapset@_lnnsave@)] [lnnundeclare (lnn_vars^\mapdel@_lnnsave@)] [lnnsetdeclare (me@4,\_0?{=!!} 2>:<=_|:&&:&\/flr@:&*-]<)] [datetime (2>| 3600000*+ 946684800000- 86400000divmod@& 0{ daytime day } 146097divmod@ :5+7%1+& 0{ dow daytime num400y dayof400y } :59- 36524/ flr@ :0?1?~{+0!}_ 36525divmod@ 1461divmod@ 0{ dow daytime num400y num100y num4y dayof4y } :59- 365/ flr@ :0?1?~{+0!}_ 366divmod@ 0{ dow daytime num400y num100y num4y numy dayof366 } 1\ 1{ :31-:0?(-1)?~{!!} \_\1+\ :29-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ 0!}_ 1+ && 0{ month day dow daytime num400y num100y num4y numy } \4*+ \100*+ \400*+ 2000+& 0{ year month day dow daytime } 3600000divmod@ 60000divmod@ 1000divmod@ ])] [u8arr2b64 (1>| 26range@(97+)#\(65+)#\_chr@\chr@"0123456789+/"++\ len@ range@(\_ :3%[(:&, :4/0bor@ \3band@16* &\&, &&\& 1+,16/ dig@bor@ \_\&,\_+)(:&, 15band@4* dig@\&1+, 64/\_\&bor@,)(,63band@ \_,)]\,\_@)#""join@ len@0\-4%4+range@('=)#\_""join@\_+ ]01-,\_)] [concat (\()#\_\nan@\;|<])] [is (2>(:eq@~)#|and@]<{_1!!}(0eq@)#|and@]<{|1\/\1\/eq@]match@1,\_""or@)] [trimstart ([(^[ \n\r\t]+)]""repl@)] [trimend ([([ \n\r\t]+$)]""repl@)] [trim (trimstart@trimend@)] [jsonpars (trimstart@ 1{ :(^-?(0|[1-9]\d*)(\.\d+)?([Ee][+-]?\d+)?)match@ 0,\_ :{ 2>|len@\ num@& nan@substr@]< !!!}_ :(^"(\\["\\/btnfr]|\\u[0-9A-Fa-f]{4}|[^\x00-\x1f"\\])*")match@ 0,\_ :{ 2>|len@\ len@2-1\substr@ '\split@ 1>| 0,&0$ len@{ 0,\0$\ 1{ :~{ _0,\0$\ '\\+ !!} 0,"btnfr"arr@\in@\_ :1+{ [8 9 10 12 13]\,\_chr@ \1nan@substr@+ !!}_ 0,u?~{ :1 4substr@ "0x"\+num@chr@\ 5nan@substr@+ !!} !}\ len@}_ ]""join@\_& nan@substr@]< !!!}_ :(^true)match@ 0,\_ { 1\ 4nan@substr@!!!} :(^false)match@ 0,\_ { 0\ 5nan@substr@!!!} :(^null)match@ 0,\_ { undef@\ 4nan@substr@!!!} 0, :'[?~{_ 1>| 1nan@substr@trimstart@ 0,']?{ jsonpars@ trimstart@ 0,:']?~{_ !!} ',?{!!!} 1nan@substr@ 1} 1nan@substr@ ]01-,\01-$\ !!!} 123chr@?~{ 1>| 1nan@substr@trimstart@ 0,125chr@?{ 1>| trimstart@ 0,'"?{!!!} jsonpars@ \:type@"String"?{!!!}\ trimstart@ 0,':?{!!!} 1nan@substr@ jsonpars@]2,\2$\ trimstart@ 0,:125chr@?~{_ !!} ',?{!!!} 1nan@substr@ 1} 1nan@substr@ ]01-,\01-$\ !!!} !} (jsonpars@: syntax error in json)throw@)] [jsonparse (trimstart@ 1{ :(^-?(0|[1-9]\d*)(\.\d+)?([Ee][+-]?\d+)?)match@ 0,\_ :{ 2>|len@\ num\2>& nan@substr@]< !!!}_ :(^"(\\["\\/btnfr]|\\u[0-9A-Fa-f]{4}|[^\x00-\x1f"\\])*")match@ 0,\_ :{ 2>|len@\ len@2-1\substr@ '\split@ 1>| 0,&0$ len@{ 0,\0$\ 1{ :~{ _0,\0$\ '\\+ !!} 0,"btnfr"arr@\in@\_ :1+{ [8 9 10 12 13]\,\_chr@ \1nan@substr@+ !!}_ 0,u?~{ :1 4substr@ "0x"\+num@chr@\ 5nan@substr@+ !!} !}\ len@}_ ]""join@\_ str\2>& nan@substr@]< !!!}_ :(^true)match@ 0,\_ { [bool 1]\ 4nan@substr@!!!} :(^false)match@ 0,\_ { [bool 0]\ 5nan@substr@!!!} :(^null)match@ 0,\_ { [null]\ 4nan@substr@!!!} 0, :'[?~{_ 1>| 1nan@substr@trimstart@ 0,']?{ jsonparse@ trimstart@ 0,:']?~{_ !!} ',?{!!!} 1nan@substr@ 1} 1nan@substr@ ]01-,\01-$ arr\2>\ !!!} 123chr@?~{ 1>| 1nan@substr@trimstart@ 0,125chr@?{ 1>| trimstart@ 0,'"?{!!!} jsonparse@ \0,str?{!!!}1,\_\ trimstart@ 0,':?{!!!} 1nan@substr@ jsonparse@]2,\2$\ trimstart@ 0,:125chr@?~{_ !!} ',?{!!!} 1nan@substr@ 1} 1nan@substr@ ]01-,\01-$ obj\2>\ !!!} !} (jsonparse@: syntax error in json)throw@)] [isseptleapyear (:1650%~{\_0!!}11%[0 3 5 7 9]\in@\_01-?)] [daysinseptyear (isseptleapyear@[343 392]\,\_)] [septdate (1697244+1>| 602651divmod@ \1650*1+ :daysinseptyear@:&&&:&?1?{\1+&- \:daysinseptyear@:&&&:&?1?}_ \49divmod@\1+\7divmod@\1+\1+])] [septdatetime (3600000*+ 86400000divmod@ \septdate@\ nan@\; |3600000divmod@ 60000divmod@ 1000divmod@])] [date (1>| 10957- 146097divmod@ :5+7%1+& :59- 36524/ flr@ :0?1?~{+0!}_ 36525divmod@ 1461divmod@ :59- 365/ flr@ :0?1?~{+0!}_ 366divmod@ 1\ 1{ :31-:0?(-1)?~{!!} \_\1+\ :29-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ :30-:0?(-1)?~{!!} \_\1+\ :31-:0?(-1)?~{!!} \_\1+\ 0!}_ 1+ && \4*+ \100*+ \400*+ 2000+& ])] [nseptdate (4range@(\_,)#\_\_ |1-\1-7*+\1-49*+\ 1-1650divmod@ &602651*+\ :{:&daysinseptyear@+\1-:}_ ]< 1697244-)] [reduce (0>01-,\01-$01-,\& 0,\ len@1\- :{ :&, \&2>\ :& 2\; \()#\& \nan@\; |<@]01-,\_ \&\&&&& 1+:} __\_ nan@\;<)] [wsplit ([(\S+)g]match@)] [wsplitn (range@(((\S+)?))#\_(\s*)join@\_(\s*(.+)?)+'s2>match@0$()filter@\_)] [lnn_helps [[mapgeti mapget maphas mapset mapdel (Map操作。 Map存储为若干键值对组成的二维数组。 mapgeti 弹出一值,返回栈顶Map中该键的位置,如不存在则undef@ mapget 弹出一值,取栈顶Map中该键的值,如不存在则undef@ maphas 弹出一值,若栈顶Map中存在该键则1,不存在则0 mapset 弹出两值,以底值为键,在栈顶Map中设置值为顶值 mapdel 弹出一值,删除栈顶Map中的该键)] [lnnsave lnndeclare lnnundeclare lnnsetdeclare (LNN变量集操作。LNN变量集以Map形式存储为变量lnn_vars。 显然只有你是LNN的时候才可以使用以下函数。 lnnsave 保存当前 lnn_vars^ 的内容 lnndeclare 弹出一值,保存该名称的变量至LNN变量集 lnnundeclare 弹出一值,从LNN变量集中删除该变量 lnnsetdeclare 弹出一值,将栈顶赋值给该名称的变量,同时保存至LNN变量集)] [divmod (弹出二值,用Python的规则计算并返回 底值//顶值 和 底值%顶值。)] [datetime date ndate isleapyear (一些日期时间计算。 datetime 弹出二数,底值为Unix毫秒时间戳,顶值为时区(东八区用8)。以格里历返回 [年 月 日 星期几(1~7) 时 分 秒 毫秒]。 date 弹出一数,以格里历返回 1970/1/1 加上该值天的 [年 月 日 星期几(1~7)]。 ndate 弹出 [年 月 日],返回该日期与 1970/1/1 相差的天数。弹出的数组中除前三项以外的任何内容会被忽略。 isleapyear 弹出,该年是闰年则1,否则0。)] [u8arr2b64 (弹出字节数组,返回Base64字符串。)] [concat flat (一点数组连接操作。 concat 弹出两数组,返回由它们的元素(底先)组成的新数组。 flat 弹出一数组数组,返回由各内层数组的各元素组成的新数组。)] [is same (弹出二值,判断它们相同则返回1,否则0。 is NaN和NaN相同,0和-0不同,其他跟eq@一样。 same NaN和NaN相同,其他跟eq@一样。0和-0视为相同。)] [substr (弹出三值,返回底值.substr(中值, 顶值)。 顶值为 NaN 或 Infinity 表示一直取到字符串末尾。)] [trimstart trimend trim (弹出一字符串,删去首和/或尾的空白后返回。)] [jsonpars jsonparse (解析JSON。 jsonpars 弹出一字符串,解析JSON然后返回所得值及剩余字符串。对象会变成键值对数组(Map)。 jsonparse 同上但是所有类型都以数组形式返回:数字是 [num 原字符串],字符串是 [str 值],布尔值是 [bool 0或1],null是 [null],数组是 [arr 内容数组],对象是 [obj 内容Map])] [isseptleapyear daysinseptyear septdate septdatetime nseptdate (哇袄。算数七历操作。 isseptleapyear 弹出,该年是闰年则1,否则0。 daysinseptyear 弹出,该年是闰年则392,否则343。 septdate 弹出,以算数七历返回 1970/1/1 加上该值天的 [年 契 周 日]。 septdatetime 弹出二值,底值为Unix毫秒时间戳,顶值为时区(东八区用8)。以算数七历返回 [年 契 周 日 时 分 秒 毫秒]。 nseptdate 弹出算数七历的 [年 契 周 日],返回其与 1970/1/1 相差的天数。)] [reduce (弹出,令“累加值”为栈顶[0];对于栈顶中除首项外的每个元素,复制当前栈,压入累加值和该元素,并对该值运行 @ 指令后令累加值为复制栈的栈顶。返回最后的累加值。)] [wsplit wsplitn (类似Python的不指定分隔符的split。 wsplit 弹出,返回该字符串中所有连续非空白字符子串组成的数组。 wsplitn同上但是最多只解析n项,如果后面还有就全部视为第n+1项)] [lnnhelp lnnhelpall (……是的。)] [lnnhelpgeti lnnhelpget (好的所以这些是给LNN用来编辑函数库帮助文档的,因为你大概不想每次需要编辑帮助文档的时候都要把整个帮助文档获取下来,手动修改再保存回去。 帮助文档是一个字符串数组数组,存储在LNN变量集中的变量 lnn_helps,每个内层数组为一个帮助条目,其内除最后一项之外的每项是一个函数名,而最后一项是对应的文档内容。 lnnhelpgeti 弹出,返回该函数名对应的帮助条目在 lnn_helps 数组中的索引。 lnnhelpget 弹出,返回该函数名对应的帮助条目数组。显然 whatlang 的数组是按引用传递的所以修改完之后可以直接 lnnsave@。等会我为什么要给这俩函数写帮助)] [export (弹出,导出该名称的变量的定义并返回为代码字符串。)] [sort (用选择排序法将栈顶的数组升序排序。)] [jsonnesc jsonesc xmlnesc htmlnesc urlnesc urlesc urlenc (一些转义与解转义。 jsonnesc 弹出,解 JSON 字符串转义后返回。 jsonesc 弹出,对引号、反斜杠、控制字符、私用区字符、未定义字符和不成对 UTF-16 代理项进行 JSON 字符串转义后返回。 xmlnesc 弹出,解 XML 转义后返回。只处理 lt gt quot apos amp 和字符编码,允许省略分号。 htmlnesc 弹出,解 HTML 转义后返回。如果你没有 XML 以外的命名实体(如 ©)的话建议还是用 xmlnesc,你看看代码有多长就知道了。 urlnesc 弹出,以 UTF-8 解 URL 百分号编码后返回。 urlesc 弹出,只对 ASCII 控制字符、空格和在 URL 中有特殊含义的字符进行 URL 百分号编码后返回。 urlenc 弹出,只对所有非 ASCII 字符以 UTF-8 进行 URL 百分号编码后返回。可与 urlesc 连用,先 urlesc 再 urlenc。)] [isprime (预防写下的诗文。弹出一数,是质数则1,否则0。)] [sts (使用 UTF-16 Richard sts 算法加密或解密文本。详见:https://dgck81lnn.github.io/blog/posts/210123_richards_text_encryption)] [uniq (返回栈顶内不重复的项组成的数组。)] [imgpxy (弹出,解析该字符串中的标签,返回该图片的一个不包含特殊符号、末尾有扩展名、支持HEAD请求的代理URL,适合用于第三方API调用。)] [dig (& 的反操作。将栈底的值移到栈顶。 本来这能是 $ 但是被删除数组元素给占了。)] [utf16 nutf16 (你以为呢?在字符串跟 uint16 数组之间转换。0xFFFF 以内的字符是一项,超过 0xFFFF 是两项。 utf16 弹出字符串,返回 UTF-16 编码值数组。 nutf16 弹出 UTF-16 编码值数组,返回字符串。)] [sign log2 (一点数学操作。 sign 弹出,大于0返回1,小于0返回-1,否则直接返回该数(±0或NaN)。 log2 弹出,返回(大概基本上是)Math.log2(该值)。)]]] [lnnhelp (:~{"是的,LNN函数库现在甚至有了自己的帮助函数\n\n输入 '¿0noterd@@(函数名) lnnhelp@.' 来显示对应函数的帮助\n输入 '¿0noterd@@lnnhelpall@' 来显示所有有帮助文档的函数名列表"!!} lnn_helps^(\_()#\_01-$\in@01-?)filter@ \_\_0,:~{__"未芝士。"!!}\_01-,\('@+)#\_01-$' join@\_ "\n\n"+\+)] [sort (len@:~{_!!} :1-range@(\_- :1-\ range@ (2>\_\_ (\_,)# :|:&,\_])#\_ |<&&<&\2>&\2>] (\_<;)#__ 0!}_ )#___)] [flat ((()#)#\_ len@1-range@(__|concat@])#__ 0,\_)] [lnnhelpall (["" lnn_helps^(()#01-$)#\_ flat@sort@ len#(2>:| 3range@(\_,)#\_\_ 0,2000- 400divmod@\ 146097*10957+\ :{1- :isleapyear@365+\&+&& :}_\ 0,isleapyear@28+ 1>|31 \ 31 30 31 30 31 31 30 31 30 31]\ 1,\& 1-:{ 1-:&, \&+ &&:}__\ 2,\_1-+ ]<)] [export (:^repr@" "+\repr@+"=_"+)] [isleapyear (:400%~{_1!!}:100%~{_0!!}4%~)] [jsonnesc (1>| '\split@ 0,&0$ len@{ 0,\0$\ 1{ :~{ _0,\0$\ '\\+ !!} 0,"btnfr"arr@\in@\_ :1+{ [8 9 10 12 13]\,\_chr@ \1nan@substr@+ !!}_ 0,u?~{ :1 4substr@ "0x"\+num@chr@\ 5nan@substr@+ !!} !}\ len@}_ ]""join@\_)] [jsonesc ('0\+[(["\\\p{C}]?[^"\\\p{C}]*)ug]match@()filter@\_ (:['.us]match@<:[[8chr@((\b))][9chr@((\t))]["\n"((\n))][12chr@((\f))][13chr@((\r))]['"((\"))]['\((\\))]]\mapget@(:""split@ord#\_(<16divmod@\16divmod@\16divmod@\4>reverse@"0123456789abcdef"\(\_,)#\_""join@"\\u"\+)#\_""join@\_)or@\_@ repl@ +)reduce@\_'0""repl@)] [jsonunesc (jsonnesc@)] [sts (""split@(ord@< :2/ :2/bor@ :4/bor@ :16/bor@ :256/bor@ :65536/bor@ bxor@ chr@)#\_""join@\_)] [xmlnesc (1>| :{ :(^[^&]*(&(#\d+|#x[0-9a-f]+|lt|gt|quot|apos|amp);?|&)?)match@ 0,\< :[lt gt quot apos amp]\in@\_ 1+:{" <>\"'&"\,\_\_!}:~{_ :undef@eq@{_'&!!} '#0repl@num@chr@!} repl@ &len@\_ nan@substr@ :}_ ]reverse@\_""join@\_)] [urlnesc ([(((?:%[0-9A-F]{2})+))i]split@ len@1-{ |\'%split@0$ ("0x"\+)#\_ nutf8@ \++] len@1-}<)] [dig (stak@0,\0$_)] [isprime (:1%{_0!!} :1?1?{_0!!} :[2 3 5 7]\in@1+{__1!!}_ :2%~{_0!!} :3%~{_0!!} 5 2> 1{ :: <%~{__0!!!} <2+%~{_0!!!} |6+] :< :*\?1?} _1)] [urlesc ([(([\x00- #%$&+,/:;=?@]))]split@ len@1-2/range@(\_ 2*1+:&, ord@<16divmod@ 2>("0123456789ABCDEF"\,)#\_""join@\_ '%\+ dig@\;)#__ ""join@\_)] [lnn_todos [[(顶) (重置希顶语社区首页)] [(希) (每日希顶语小知识)] [(汉) (汉语注音系列指令)] [(音) (重写vits指令,语音模型分组显示)] [(档) (LNNBot文档)] [(狂) (重做megalo but的UI)] [(存) (补希顶文存黄雀飞发表内容存档里的媒体附件)] [(〇) (解决〇改转写器Issues)] [(非) (非博客加密通话更新语字svg&希顶字表)] [(轮) (舞线饭制新轮回)] [(∪环) (uiua环境支持文件系统等(多输入?))] [(乐) (music aj网页版,随播放高亮音符,循环语法)] [(图) (清理陈旧涩图)] [(件) (群文件管理指令)] [(总) (重写tldr消息总结,优化消息记录开销)] [(轨) (希服轨交线网图陲篱重绘)] [(¿独) (WhatLang独立可执行运行环境)] [(字) (LNNPUA字体(LNNZHYZ、夏理))] [(魂) (真魂站文件系统补完)] [(转) (消息转发支持指令)] [(输) (js希顶输入法)] [(吕) (希吕字母管理系统)] [(历) (修adapter-onebot的getMessageIter)] [(模) (Scribunto Lua模块执行指令)] [(脑) (重写brainfuck指令)] [(贝) (TestFlight订阅功能)] [(志) (上传 LNN’s Diary)]]] [imgpxy ((]*?src="([^"]+)"[^>]*?\/>)match@1,\_ :get\[[range(bytes=0-0)]]undef@fech@0,300\?1?{0,\1,_2>' join@throw@}3,\_0,\_ 1{:137?~{_png!!}:71?~{_gif!!}78?~{_webp!!}jpg!} \urlesc@[(\.)g]"%2E"repl@['%g]',repl@"https://lnnbot.xn--7wr.site/whatimgpxy/"\+'.+\+)] [same (2>(:eq@~)#|and@]<{_1!!}("0123456789ABCDEF"\,)#""join@'%\+)#""join@)#\_""join@\_)]]lnn_vars=(arr@|\=])#__